Обучение pointwise-ранкера без утечек и перекоса в популярные товары
Вы обучаете boosting-ранкер для рекомендаций по кликам и связкам образов. Как собрать датасет, сделать train/validation/test split и не переобучиться на популярные товары и старые показы?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
Соберите примеры из реально показанных user-item или item-item пар, делайте temporal train/validation/test split, тюньте только по validation и проверяйте, что модель не тащит наверх только популярные товары из старых логов показов.
Полный разбор
Для pointwise-ранкера каждая строка должна описывать решение, которое система реально могла принять: user-item или source-item-candidate пару, признаки, доступные на serving-time, контекст показа и label вроде click, outfit membership, purchase или weighted engagement. Негативы по возможности берите из показанных, но не кликнутых кандидатов; случайные негативы полезны, но могут сделать задачу слишком легкой.
Делите по времени, чтобы модель училась на прошлом и оценивалась на будущем. Минимум нужны train, validation и test: гиперпараметры подбираются по validation, а финальные метрики один раз считаются на held-out test. Если тюнить и репортить качество на одном и том же будущем fold, метрика будет оптимистичной.
Перекос в популярные товары появляется, когда модель слишком доверяет общей популярности: товар часто показывали, по нему чаще кликали, и модель снова тащит его наверх. Чтобы это заметить, сравните качество не только в среднем, но и по группам пользователей, категориям и новым товарам. Проверьте, что у модели есть признаки пользователя и контекста показа, а не только признаки самого товара. В негативные примеры берите не только случайные товары, но и товары, которые реально показывали пользователю, но он их не выбрал.
После обучения отдельно посмотрите, не стала ли выдача однообразной: сколько разных категорий и непопулярных товаров попадает в рекомендации, не просели ли новые товары и узкие сегменты. Финальную проверку все равно делайте в A/B-тесте: офлайн-метрика может выглядеть хорошо, даже если пользователю показывают одни и те же популярные вещи.
Теория
Данные для ранжирования смещены тем, что система уже показывала раньше; validation и sampling должны имитировать будущие serving-решения.
Типичные ошибки
- Тюнить гиперпараметры и репортить финальное качество на одном validation fold.
- Использовать только случайные негативы и игнорировать товары, которые показали, но по ним не кликнули.
- Учить модель на популярности товара и называть это персонализацией.
- Делить данные случайно по времени и случайно использовать будущие признаки каталога или будущую популярность товара.
Как отвечать на собеседовании
- Явно скажите: train, validation и test split по времени.
- Скажите простыми словами: в логах есть только показанные товары, а популярные товары получают больше показов и кликов, поэтому модель может переучиться на старую выдачу.