Как делать 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.