Рекомендации есть почти в каждой крупной компании: маркетплейсы, стриминг, соцсети, доставка еды. На собесе спрашивают алгоритмы, метрики ранжирования и почти всегда дают ML system design «спроектируйте ленту рекомендаций».
Подходы
- Популярное: простой и сильный бейзлайн, особенно для новых пользователей.
- Контентные: похожесть по описаниям, категориям, картинкам. Работают для новых товаров.
- Коллаборативная фильтрация (CF): только по истории взаимодействий. Похожие пользователи любят похожие товары.
- user-based и item-based: близость по множествам взаимодействий, обычно косинус;
- матричная факторизация: R ≈ UVᵀ, у пользователя и товара по k латентных факторов, прогноз это скалярное произведение. Учат по известным ячейкам (SGD или ALS), пропуски не считают нулями.
- Гибриды и нейросети: two-tower, последовательные модели по истории сессий.
Неявный фидбек
Оценок почти нет, есть просмотры, клики, покупки. Отсутствие взаимодействия не означает «не нравится»: пользователь мог не увидеть товар. Поэтому нужны негативное семплирование, попарные потери (BPR) и веса уверенности (implicit ALS).
Двухэтапная архитектура
Тяжёлую модель нельзя прогнать по 10 млн товаров на каждый запрос, поэтому:
- Генерация кандидатов (сотни-тысячи) из нескольких источников: two-tower с ANN-поиском, item-to-item от недавно просмотренного, популярное, новинки.
- Ранжирование: бустинг или нейросеть с богатыми признаками пользователя, товара, их пересечений и контекста.
- Пост-обработка: убрать купленное и отсутствующее, разнообразие, бизнес-правила.
Two-tower: две сети отдельно кодируют пользователя и товар, релевантность это скалярное произведение. Векторы товаров считаются заранее и кладутся в ANN-индекс, при запросе считается только вектор пользователя.
Метрики
precision@k = релевантных в топ-k / k
recall@k = релевантных в топ-k / всех релевантных
MRR = среднее 1 / позиция первого релевантного
DCG@k = Σ rel_i / log₂(i + 1)
NDCG@k = DCG@k / идеальный DCG@k
Пример: купил 4 товара, в топ-5 попали 2 на позициях 1 и 4. Precision@5 = 0.4, recall@5 = 0.5, MRR = 1.
Кроме точности смотрят покрытие каталога, разнообразие, новизну. Онлайн: CTR, конверсия, выручка, удержание в A/B.
Холодный старт
- Новый товар: контентные эмбеддинги, гибридные модели, доля показов на исследование.
- Новый пользователь: популярное, онбординг (выбор интересов), контекст (откуда пришёл, устройство, регион).
Офлайн против онлайна
Логи собраны старой системой: видно только то, что она показала (exposure bias), а популярное становится ещё популярнее (петля обратной связи). Офлайн-метрика поощряет угадывание того, что купили бы и так. Поэтому:
- логируют вероятность показа и используют IPS-коррекцию;
- выделяют трафик на исследование;
- финальное решение принимают по A/B.
Частые ошибки
- Считать пропуски в матрице взаимодействий отрицательными оценками.
- Оценивать только точность и забывать про разнообразие и покрытие.
- Верить офлайн-NDCG без A/B.
- Пытаться применить тяжёлый ранкер ко всему каталогу.
Что спросят на собесе
- Как работают коллаборативная фильтрация и матричная факторизация.
- Холодный старт для товаров и пользователей.
- Метрики ранжирования, посчитать precision@k или NDCG.
- Двухэтапная архитектура и two-tower.
- Спроектировать рекомендации для маркетплейса или похожие товары.