# Рекомендательные системы

> Как из миллионов кандидатов выбрать десять для конкретного пользователя: коллаборативная фильтрация и матричное разложение, two-tower и ANN, холодный старт, метрики и петли обратной связи.

Раздел: [Продакшн и качество](https://ml-book.com/s/production/) · Страница темы: https://ml-book.com/t/recsys/ · Обновлено: 2026-07-09 · Источник: ml-book.com, учебник делается сообществом

## Интуиция

Задача рекомендательной системы (recommender system) — предсказать, что понравится пользователю, и сделать это среди каталога в миллионы объектов за десятки миллисекунд. Классических источника сигнала два. **Коллаборативная фильтрация** (collaborative filtering) опирается на поведение: люди с похожими вкусами любят похожее. User-based вариант ищет похожих пользователей и берёт их любимое, item-based — похожие объекты («те, кто смотрел X, смотрели и Y»). Признаки контента ей не нужны вовсе — только история взаимодействий. **Контентный подход** (content-based) — наоборот: рекомендует по признакам самого объекта (жанр, текст описания, эмбеддинг обложки), поэтому работает даже для объектов, которые ещё никто не видел.

## Матричное разложение

Представь таблицу «пользователи × фильмы» с оценками — заполненную на пару процентов. Матричное разложение (matrix factorization) приближает её произведением двух узких матриц:

`R ≈ U · V^T, r_{ij} ≈ u_i · v_j`

У каждого пользователя и каждого фильма появляется латентный вектор из k чисел, а предсказание — их скалярное произведение. Оси этого пространства никто не размечал: обучение (SGD по известным клеткам или ALS — попеременный пересчёт U и V) само находит скрытые «жанры», вдоль которых вкусы различаются. Подход прославился на конкурсе Netflix Prize и по сути даёт [эмбеддинги](https://ml-book.com/t/embeddings/) пользователей и объектов в общем пространстве — ту же геометрию смысла, что и в семантическом поиске.

В проде явных оценок почти не бывает — есть неявный фидбек (implicit feedback): клики, просмотры, дочитывания, покупки. Важная тонкость: отсутствие клика не значит «не нравится» — пользователь мог просто не увидеть объект, поэтому пропуски трактуют осторожно, со взвешиванием уверенности.

> **💡 Ключевая мысль**
>
> Рекомендации — это поиск ближайших соседей в выученном пространстве: пользователь играет роль «запроса», объекты — «документов». Поэтому инфраструктура RAG — эмбеддинги и ANN-индексы — работает и здесь.

> 🎛 Интерактивная визуализация — на странице темы: https://ml-book.com/t/recsys/

Известные оценки обведены рамкой, предсказания — бледные. Смотри, как RMSE на скрытом holdout падает, хотя модель этих клеток не видела: латентная структура «двух жанров» восстанавливается из 40% наблюдений. Включи «+ новый (cold start)» — у новичка нет ни одной оценки, его вектор так и стоит у нуля, и все предсказания около среднего.

## Прод-пайплайн: retrieval → ranking

Прогнать тяжёлую модель по миллионам кандидатов на каждый запрос невозможно, поэтому современный пайплайн двухэтапный — как в [поиске](https://ml-book.com/t/hybrid-rerank/). **Retrieval:** two-tower модель — «башня» пользователя и «башня» объекта кодируют каждого в эмбеддинг; векторы объектов не зависят от пользователя, поэтому их предвычисляют и складывают в [ANN-индекс](https://ml-book.com/t/vector-search/). На запрос считается только вектор пользователя, и ANN за миллисекунды отбирает сотни кандидатов. Обучение башен — контрастивное, по сути то же, что у [эмбеддинг-моделей](https://ml-book.com/t/embedding-models/). **Ranking:** тяжёлая модель (бустинг или нейросеть) с сотнями признаков — контекст, время суток, свежесть, история — точно упорядочивает эти сотни. Поверх — переранжирование бизнес-правилами: разнообразие (привет [MMR](https://ml-book.com/t/mmr-diversity/)), свежесть, «не показывать уже купленное».

## Холодный старт, метрики и ловушки

**Холодный старт (cold start):** у нового объекта нет взаимодействий — спасают контентные признаки (жанр, описание, эмбеддинг текста) и разведочные показы; у нового пользователя нет истории — показывают популярное, спрашивают интересы при онбординге, быстро дообучаются на первых кликах. Разведку формализуют многорукие бандиты (multi-armed bandits): часть трафика тратится на исследование, а не эксплуатацию.

**Метрики** двухслойные: оффлайн — recall@k и nDCG на отложенных по времени взаимодействиях (nDCG учитывает не только попадание, но и позицию: полезное наверху ценнее), онлайн — CTR, время в продукте, удержание. Они регулярно расходятся: логи собраны старой системой, клики смещены к верхним позициям, поэтому оффлайн-выигрыш не гарантирует онлайн-эффекта, и финальный судья — [A/B-тест](https://ml-book.com/t/ab-testing/). Ловушки: popularity bias (популярное побеждает всегда и везде), фильтр-пузырь (пользователь замыкается в узком круге тем) и петля обратной связи.

> **⚠️ Подводный камень**
>
> Feedback loop: модель учится на кликах по собственным рекомендациям. Что порекомендовали — то и кликают, оно становится «ещё популярнее», и лог всё меньше отражает истинные вкусы. Без явной разведки (exploration) и поправок на позицию/популярность система застревает в самоподтверждении.

> **🎤 На собеседовании**
>
> - «Спроектируй ленту рекомендаций» — классика [ML system design](https://ml-book.com/t/ml-system-design/): двухэтапка retrieval → ranking, оффлайн/онлайн-метрики, план на холодный старт и фолбэк на популярное при отказе модели.
> - «Что такое two-tower и причём тут ANN?» — раздельные энкодеры пользователя и объекта; векторы объектов предвычислены и лежат в ANN-индексе — retrieval за миллисекунды.
> - «Как бороться с холодным стартом?» — контентные признаки для новых объектов, популярное и онбординг для новых пользователей, бандиты для разведки.
> - «Оффлайн nDCG вырос — раскатываем?» — нет: оффлайн-метрика лишь гипотеза, решение принимает A/B-тест на онлайн-метриках.

## Связанные темы

- [Дизайн ML-систем на собеседовании](https://ml-book.com/t/ml-system-design/)
- [Эмбеддинг-модели: как их обучают](https://ml-book.com/t/embedding-models/)
- [Ранжирование: learning-to-rank](https://ml-book.com/t/learning-to-rank/)
- [A/B-тесты и продуктовые метрики](https://ml-book.com/t/ab-testing/)

---

Интерактив, тест из 12 вопросов и карточки терминов — на странице темы: https://ml-book.com/t/recsys/
Весь учебник в markdown: https://ml-book.com/llms-full.txt · Оглавление для агентов: https://ml-book.com/llms.txt
