Определение задачи рекомендательной системы¶
~4 минуты чтения
Предварительно: Подготовка к интервью MLSD | Метрики ранжирования
Рекомендательные системы генерируют до 35% выручки Amazon и 80% просмотров на Netflix. При каталоге в 10M товаров и 100M пользователей задача сводится к выбору 10-50 наиболее релевантных позиций из триллиона возможных пар user-item за менее чем 100ms. Ошибка в дизайне рекомендательного пайплайна стоит компании миллионы долларов ежедневно -- именно поэтому это один из самых частых кейсов на System Design интервью в FAANG.
Бизнес-контекст¶
Рекомендательная система (Recommendation System) -- это ML-система, которая предсказывает, какие товары/контент/пользователи будут наиболее релевантны для конкретного пользователя.
Примеры применения¶
| Компания | Что рекомендуют | Бизнес-метрика |
|---|---|---|
| Netflix | Фильмы и сериалы | Watch time, Retention |
| Amazon | Товары | GMV, Conversion |
| Spotify | Песни и плейлисты | Listening time |
| YouTube | Видео | Watch time, Engagement |
| Люди, вакансии | Connections, Applications |
Постановка задачи¶
Функциональные требования¶
- Персонализация: Система должна учитывать предпочтения пользователя
- Real-time обновления: Учитывать недавние действия пользователя
- Разнообразие: Не рекомендовать только похожий контент (diversity)
- Объяснимость: Почему рекомендуем этот item (explainability)
- Cold Start: Работать для новых пользователей и items
Нефункциональные требования¶
| Метрика | Требование | Обоснование |
|---|---|---|
| Latency (p99) | < 100ms | UX критичен |
| Throughput | 100K RPS | Высокая нагрузка |
| Availability | 99.9% | Критичный сервис |
| Freshness | < 1 hour | Актуальность рекомендаций |
Масштаб системы¶
Users: 100M MAU
Items: 10M (каталог)
Interactions: 1B/day (views, clicks, purchases)
Features: 1000+ per user/item
Типы рекомендательных задач¶
1. Collaborative Filtering¶
- User-based: "Пользователи, похожие на тебя, смотрели X"
- Item-based: "Те, кто купил X, также купили Y"
2. Content-based Filtering¶
- Рекомендации на основе атрибутов items
- Не требует истории других пользователей
3. Hybrid Systems¶
- Комбинация collaborative + content-based
- Knowledge graphs + embeddings
Метрики успеха¶
Offline метрики¶
- Precision@K: Доля релевантных среди топ-K
- Recall@K: Покрытие релевантных items
- NDCG: Качество ранжирования
- MAP: Mean Average Precision
- Hit Rate: Хотя бы 1 релевантный в топ-K
Online метрики¶
- CTR: Click-through rate
- Conversion Rate: Покупки/действия
- Session Duration: Время в сервисе
- Revenue: Прямой доход
Guardrail метрики¶
- Coverage: % items, которые рекомендуются
- Diversity: Разнообразие рекомендаций
- Novelty: Новизна рекомендаций
- Fairness: Справедливость для creators/sellers
Ключевые вопросы для уточнения на интервью¶
- Какой тип items? (товары, контент, люди)
- Какой объём каталога? (тысячи vs миллионы)
- Implicit vs Explicit feedback? (клики vs рейтинги)
- Требования к latency? (real-time vs batch)
- Cold start критичен? (много новых users/items)
- Нужна ли объяснимость? (почему рекомендуем)
- Какие данные доступны? (features, interactions)
Trade-offs¶
| Аспект | Вариант A | Вариант B |
|---|---|---|
| Personalization vs Popularity | Точные рекомендации | Безопасные популярные |
| Exploration vs Exploitation | Новое | Проверенное |
| Latency vs Quality | Быстро и просто | Медленно но точно |
| Real-time vs Batch | Свежесть | Вычислительная эффективность |
Заблуждение: Collaborative Filtering достаточно для production системы
Чистый CF покрывает только ~60% пользователей (остальные -- cold start). Netflix Prize показал, что победивший ансамбль SVD++ дал лишь +10% к RMSE, а в production Netflix использует гибридную систему с сотнями моделей. Collaborative filtering -- хорошая baseline, но не production решение.
Заблуждение: Главная метрика -- точность рекомендаций
YouTube обнаружил, что оптимизация только CTR привела к росту кликбейта и снижению watch time на 20%. Современные системы оптимизируют multi-objective: CTR + watch time + satisfaction + diversity. Метрика должна отражать долгосрочную ценность, а не краткосрочный клик.
Заблуждение: Можно ранжировать весь каталог одной моделью
При 10M items и 100ms latency budget ранжирование всех items deep-моделью потребует ~10 секунд. Поэтому стандарт индустрии -- двухэтапный пайплайн: быстрый retrieval (10M -> 1000) + точный ranking (1000 -> 50). Пропуск этапа candidate generation -- красный флаг на интервью.
Собеседование¶
Какие метрики использовать для рекомендательной системы?¶
"CTR -- главная метрика, её и оптимизируем."
"Метрики организованы в иерархию: North Star -- это бизнес-метрика (revenue, retention). Product-метрики (CTR, conversion, session duration) декомпозируют North Star. ML-метрики (NDCG@K, Recall@K) оценивают модель offline. Guardrail-метрики (coverage, diversity, latency) защищают от деградации. На A/B тесте проверяем primary metric + guardrails. Оптимизация только CTR опасна -- это путь к кликбейту."
Как спроектировать рекомендательный пайплайн?¶
"Берём все items, прогоняем через нейросеть, выбираем top-N."
"Стандартный пайплайн -- это воронка: Candidate Generation (10M -> 1000 за 10ms через ANN/Two-Tower), Coarse Ranking (1000 -> 200 через XGBoost), Fine Ranking (200 -> 50 через deep model), Filtering (бизнес-правила), Blending (diversity + exploration slots). Каждый этап уменьшает множество кандидатов и увеличивает точность скоринга. Параллельный retrieval из нескольких источников увеличивает recall."
Как решать проблему cold start?¶
"Для новых пользователей показываем случайные товары."
"Для новых пользователей: popularity-based рекомендации, затем demographic-based (возраст, страна), затем onboarding-опрос для быстрого профилирования. После 5-10 взаимодействий -- переход на персонализированные модели. Для новых items: content-based features (title embedding, image embedding, категория), exploration boost в 10% слотов, трансфер метрик от похожих items. Ключевое -- не ждать 100 кликов, а использовать multi-armed bandits (Thompson Sampling) для быстрого обучения."