Как оценивать двухстадийную рекомендательную систему
Есть генератор кандидатов и ранкер. Какие offline и online метрики смотреть для каждого этапа?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Для генерации кандидатов обычно смотрят Recall@K, coverage и diversity, потому что этот этап не должен потерять релевантные объекты. Для ранкера - NDCG, MAP/MRR, precision@K и бизнес-метрики в online A/B.
Подробный разбор
Двухстадийную систему нельзя оценивать одной метрикой. На первом этапе генератор быстро достает широкий набор кандидатов. Его задача - высокий recall: нужный объект должен попасть в top-K до ранкера. Дополнительно важны coverage каталога, diversity, доля пустых выдач и latency.
На втором этапе ranker уже сортирует ограниченный список. Здесь полезны NDCG, MAP, MRR, precision@K, calibration по score и метрики по срезам: новые пользователи, tail items, категории, регионы. Если ранкер оптимизирует покупку или отклик, offline relevance нужно связывать с downstream-целью.
Online финальное решение принимает A/B: CTR, conversion, GMV/revenue, retention, complaints, latency, diversity и guardrails. Хороший offline score без online uplift - только гипотеза, а не доказательство улучшения.
Типичные ошибки
- Оценивать генератор кандидатов только precision@K.
- Смешивать retrieval и ranking метрики в одну цифру.
- Не смотреть срезы по новым пользователям и tail items.
NDCG, MAP и почему ranking-метрики не оптимизируют напрямую
Чем NDCG отличается от MAP и почему такие метрики сложно напрямую оптимизировать градиентным спуском?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
NDCG учитывает позицию и graded relevance через discounted gain, MAP усредняет precision на позициях релевантных документов. Прямая оптимизация трудна, потому что сортировка дискретна; обычно используют surrogate loss.
Подробный разбор
MAP удобен, когда релевантность бинарная: для каждого релевантного документа считается precision на его позиции, затем значения усредняются. NDCG богаче: он учитывает graded relevance, например оценку 0/1/2/3, и дисконтирует вклад по позиции. Поэтому ошибка в верхней части выдачи стоит дороже, чем такая же ошибка внизу.
Проблема прямой оптимизации в том, что метрика зависит от порядка после сортировки. Сама операция сортировки дискретна: маленькое изменение score может не менять порядок вообще, а потом резко поменять соседние элементы. Обычный backprop через такую метрику не работает.
На практике используют surrogate losses: pointwise classification/regression, pairwise loss на парах pos-neg, listwise подходы и LambdaRank/LambdaMART, где градиенты приближенно взвешиваются ожидаемым изменением NDCG.
Типичные ошибки
- Считать NDCG просто precision с другим названием.
- Игнорировать graded relevance.
- Пытаться напрямую backprop-ить через обычную сортировку.
Семейства RecSys-алгоритмов и cold start
Какие базовые семейства алгоритмов есть в рекомендациях и что делать с cold start?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Базовые семьи: popularity/business rules, collaborative filtering, content-based модели и гибридные каскады. Cold start закрывают контентными признаками, анкетой/контекстом, популярным fallback и exploration.
Подробный разбор
Самый простой слой - популярное, свежесть, бизнес-правила и ручные ограничения. Дальше идут collaborative методы: item-to-item, ALS/BPR, matrix factorization, sequence models, которые используют историю взаимодействий. Content-based методы используют текст, категорию, изображение, цену, гео и другие признаки объекта или пользователя.
В production чаще работает гибрид: несколько retrieval-источников достают кандидатов, затем ranker смешивает поведенческие, контентные и контекстные сигналы. Для cold start item помогает контент: текст, категория, image/text embeddings, seller quality. Для cold start user помогают onboarding, гео, устройство, первые клики, session context и популярные fallback-выдачи.
Exploration тоже важен: если новым объектам не давать показов, система не соберет поведенческий сигнал. Поэтому добавляют controlled exploration, diversity и отдельные правила для новых айтемов.
Типичные ошибки
- Полагаться только на collaborative filtering для новых объектов.
- Не отделять user cold start от item cold start.
- Забывать, что exploration влияет на будущие обучающие данные.
Transformer в sequential RecSys
Как использовать transformer в рекомендациях и чем это отличается от RNN-подхода?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Transformer кодирует последовательность действий через self-attention и лучше видит дальние зависимости. В RecSys часто используют causal next-item модели вроде SASRec или masked-item модели вроде BERT4Rec.
Подробный разбор
В sequential RecSys пользователь представлен последовательностью событий: просмотры, клики, покупки, отклики. Transformer строит embeddings событий и через self-attention позволяет каждому событию учитывать другие события в истории. Residual connections и layer normalization стабилизируют глубокую модель.
SASRec похож на autoregressive подход: по прошлым действиям предсказываем следующий item. BERT4Rec использует masked modeling: часть items маскируется, модель восстанавливает их по контексту. В обоих случаях item, category, time gap, action type и context могут быть признаками токена.
RNN обрабатывает последовательность последовательно и естественно держит hidden state, но хуже параллелится и сложнее ловит дальние зависимости. Transformer дороже по памяти на длинных последовательностях из-за attention, зато хорошо параллелится и гибко смешивает разные позиции истории.
Типичные ошибки
- Не различать causal next-item и masked-item обучение.
- Подавать слишком длинную историю без контроля latency и памяти.
- Забывать про временные признаки и типы событий.
Negative sampling и embeddings без таргета
Какие проблемы есть у in-batch negatives и как обучать embeddings объявлений, если пользовательских действий еще нет?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
In-batch negatives дешевы, но могут давать popularity bias и false negatives. Без таргета embeddings учат через self-supervised задачи: текстовые пары, атрибуты, категории, аугментации, pseudo-labels и активную разметку сложных пар.
Подробный разбор
In-batch negatives используют объекты из того же батча как отрицательные примеры. Это дешево и хорошо масштабируется, но есть риски. Популярные объекты чаще попадают в батчи и чаще штрафуются как negatives. Кроме того, часть negatives может быть на самом деле релевантной, особенно в длинном хвосте или соседних категориях.
Коррекции: смешивать random и hard negatives, учитывать sampling probability, не брать очевидные false negatives из близких групп, добавлять temperature, debiasing или отдельные popularity features. Для retrieval важно проверять не только loss, но и Recall@K по валидному набору.
Если пользовательских действий нет, можно учить представления self-supervised способом: title-description matching, предсказание категории и атрибутов, contrastive learning между аугментациями текста, image-text matching, похожие товары по правилам/каталогу, pseudo-labels от базовой модели. Когда появляется разметчик, полезнее отдавать ему спорные пары: близкие по модели, но потенциально разные, или одинаковые категории, которые модель разводит далеко.
Типичные ошибки
- Считать все объекты в батче настоящими негативами.
- Не учитывать popularity bias.
- Учить embeddings без downstream-проверки на retrieval-задаче.