К тренажеру
ВопросHardmlsd-recsysРеальный собес

Как делать train/test split и offline validation для marketplace модели

Для marketplace pricing/recommendation модели нужно построить offline validation. Как выбрать строку датасета, train/test split и метрики, чтобы не получить красивую, но бесполезную оценку?

Короткий ответ

Строка датасета должна соответствовать моменту принятия решения: listing/user/session на timestamp. Split лучше time-based, с фичами только из прошлого. Метрики: MAE/MAPE/quantile loss для цены и бизнес-proxy по conversion/time-to-sell.

Полный разбор

Сначала определяем единицу датасета. Для pricing это может быть listing на момент публикации или обновления цены. Для recommendation - user/listing impression или session. В каждой строке должны быть только признаки, доступные до решения.

Split лучше делать по времени: train на прошлом, validation/test на будущем. Random split в marketplace легко дает leakage через дубликаты объявлений, seller history, future comparable prices и глобальные агрегаты, посчитанные с будущим. Если есть регионы/категории, полезны slice metrics.

Метрики зависят от задачи. Для price prediction: MAE, median absolute error, MAPE осторожно, quantile loss, coverage интервала. Для product effect: conversion/contact rate, time-to-sell, seller acceptance of suggested price, revenue/GMV guardrails. Offline метрика должна быть sanity check, но финально нужна online проверка.

Теория

Offline validation должна имитировать реальный момент инференса. В marketplace особенно опасны future aggregates и leakage через похожие объявления.

Типичные ошибки

  • Сделать random split по строкам.
  • Считать category median на всем датасете, включая test future.
  • Оптимизировать только MSE и не смотреть бизнес-slices.

Как отвечать на собеседовании

  • Скажи "time-based split" и "features available at prediction time".
  • Уточни row definition: listing, impression или session.