Назад к подготовке

Обучение 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 по времени.
  • Скажите простыми словами: в логах есть только показанные товары, а популярные товары получают больше показов и кликов, поэтому модель может переучиться на старую выдачу.