Data Science
Recommender Systems
YouTube генерирует 70% всего watch time через рекомендации. Netflix - 80% просмотров. Spotify - 30% прослушиваний через Discover Weekly. Рекомендательные системы - это не фича, это бизнес-модель. И за каждым из этих чисел стоит конкретный алгоритм, специфичная архитектура, годы A/B тестов.
- Spotify Discover Weekly генерирует персональный плейлист из 30 песен каждый понедельник через hybrid CF + content features. Запущен в 2015, стал феноменом: 40 млн пользователей за первый год
- Amazon Product Recommendations приносит 35% всей выручки - 'Customers who bought X also bought Y' через item-based CF остаётся одним из самых прибыльных алгоритмов в истории e-commerce
- TikTok For You Page использует Two-Tower модель с reinforcement learning - оптимизирует не просто relevance, но и watch time и probability of like
Collaborative Filtering: мудрость толпы
Netflix Prize. 2006 год. 1 миллион долларов за улучшение RMSE на 10%. 2009: BellKor's Pragmatic Chaos - ансамбль из 107 алгоритмов, победил. Главный инсайт: не нужно знать ничего о фильме. Достаточно знать, что люди с похожими оценками выбрали дальше.
Collaborative Filtering - две парадигмы. Memory-based: similarity между пользователями или items через cosine/pearson correlation. Model-based: Matrix Factorization, SVD, ALS. User-based CF: 'пользователи, похожие на тебя, оценили X высоко'. Item-based CF: 'пользователи, которым понравилось A, также оценивают B высоко'.
Matrix Factorization (SVD, ALS) - точнее memory-based. Матрица R (users x items) = U x V^T, где U - latent user factors, V - latent item factors. Каждый пользователь и item представлены k-мерным вектором. ALS (Alternating Least Squares) - оптимизирует U и V поочерёдно. Spark MLlib реализует distributed ALS для миллионов пользователей.
Cold start problem - главная уязвимость Collaborative Filtering. Новый пользователь без истории - нечего использовать для рекомендаций. Решения: popularity-based fallback (рекомендовать популярное), onboarding опросник, hybrid с content-based. Spotify использует onboarding (выбор 5 артистов) для нового пользователя.
В чём главная проблема Collaborative Filtering для новых пользователей?
Content-Based Filtering: DNA продукта
Content-Based Filtering рекомендует на основе характеристик items, схожих с тем, что пользователь уже оценил. Нет проблемы cold start для items: у нового фильма есть жанр, режиссёр, актёры. Нет зависимости от других пользователей. Но: нельзя выйти за рамки known preferences - filter bubble.
Представление content: текстовые описания -> TF-IDF или embeddings. Категориальные фичи -> one-hot encoding. Числовые -> нормализация. Профиль пользователя строится как взвешенная сумма векторов items, с которыми взаимодействовал. Рекомендация = cosine similarity между профилем и candidate items.
Pandora Music Genome Project - extremal content-based: каждая песня описана 450 атрибутами (тональность, темп, вокал, инструменты, структура). Музыканты-аналитики вручную. Стоимость разметки - миллионы долларов. Результат: рекомендации без cold start, без popularity bias, всегда объяснимые.
Почему Content-Based Filtering создаёт filter bubble?
Hybrid: лучшее из двух миров
Netflix, Spotify, YouTube - все используют hybrid подходы. CF хорош для пользователей с историей, плох для новых. Content-based хорош для новых items и объяснимости, но создаёт filter bubble. Hybrid комбинирует оба.
Two-Tower Model - современный стандарт в Airbnb, Pinterest, YouTube. User encoder: пользователь -> embedding. Item encoder: item -> embedding. Dot product = relevance score. Обе башни обучаются совместно. Плюс: embeddings предвычисляются, inference = ANN search за миллисекунды на миллионах items.
Зачем Two-Tower разделяет user encoder и item encoder?
Метрики: precision@K, NDCG, diversity
RMSE - классическая метрика Netflix Prize - оказалась плохим прокси для реального engagement. Можно иметь низкий RMSE и плохие рекомендации. Ranking-метрики лучше: что важно - не точность предсказания оценки, а качество ранжирования топ-K.
A/B тестирование - финальный арбитр. Offline-метрики (NDCG) часто не коррелируют с online-метриками (CTR, retention). YouTube обнаружил: модель с лучшим NDCG давала худший watch time. Причина: filter bubble - пользователи видели предсказуемое, быстро уставали.
Serendipity vs Accuracy трейдофф: точная система рекомендует только то, что пользователь точно оценит высоко. Но скучно. Serendipitous system вносит неожиданные качественные рекомендации - engagement выше долгосрочно. Netflix добавляет 'long-tail' рекомендации намеренно, снижая краткосрочный NDCG ради долгосрочного retention.
Лучший offline NDCG гарантирует лучший online CTR и retention
Offline метрики - необходимый, но недостаточный критерий. Только A/B тест с реальными пользователями показывает истинное качество
Offline оценка строится на прошлых взаимодействиях - biased sample. Distribution shift между обучением и проверкой. YouTube и Netflix регулярно обнаруживают, что 'лучшая' offline-модель хуже работает в production из-за filter bubble, overfit к историческому bias или игнорирования долгосрочного engagement
Почему NDCG лучше Precision@K для ранжирования?
Связанные темы
Рекомендательные системы объединяют NLP, ML и поиск:
- NLP для Data Science — Text embeddings для content-based filtering
- RAG — Похожая задача retrieval + ranking
Ключевые идеи
- Collaborative Filtering: мудрость толпы через матричную факторизацию, cold start problem
- Content-Based: DNA продукта, объяснимо, без cold start для items, но filter bubble
- Hybrid: Two-Tower = user embedding + item embedding -> ANN search в production
- Метрики: NDCG > Precision@K, offline vs online разрыв, A/B как финальный арбитр
Вопросы для размышления
- Как балансировать accuracy и diversity в рекомендациях без ущерба для engagement?
- Когда item-based CF предпочтительнее user-based, и почему Amazon выбрал именно item-based?
- Как решить cold start problem для нового пользователя без онбординг-опросника?
Связанные уроки
- ds-15 — Text embeddings из NLP - основа content-based рекомендаций
- dl-08 — Neural collaborative filtering через deep learning
- ds-07 — Матричная факторизация требует линейной алгебры
- gai-16 — RAG - retrieval с ранжированием, как рекомендательные системы
- ml-51-recommendation-systems