Рекомендательные системы
Введение в рекомендательные системы
80% всего, что смотрят на Netflix - не выбор пользователя. Это рекомендация алгоритма. TikTok For You генерирует 30 миллиардов долларов выручки - алгоритм важнее контента. Amazon: 35% всех продаж через «похожие товары». Рекомендательная система - не фича продукта. Это бизнес-модель.
- **Netflix** экономит 1 миллиард долларов в год благодаря рекомендациям - пользователи не уходят, потому что всегда находят что посмотреть (GroupLens 1994 - первая коллаборативная фильтрация - дала начало всему этому)
- **Amazon** генерирует 35% выручки через «Customers who bought this also bought...» - item-based collaborative filtering, алгоритм, переписанный ещё в 2003 году
- **Spotify Discover Weekly** - персонализированный плейлист из 30 песен, созданный гибридом collaborative filtering и аудио-анализа, для каждого из 500M пользователей (30M+ прослушиваний в первую неделю запуска)
- **TikTok For You** - гибридная система с reinforcement learning: 70% времени пользователей на платформе генерирует рекомендательный движок, а не подписки
Предварительные знания
- Векторы и векторные пространства - профили пользователей и товаров представляются как векторы
- Базовая теория вероятностей - оценка вероятности того, что товар понравится пользователю
- Что такое машинное обучение - рекомендательные модели обучаются на данных о взаимодействиях
Tapestry и GroupLens: рождение коллаборативной фильтрации
Термин «collaborative filtering» появился в 1992 году в Xerox PARC, где David Goldberg с коллегами создал Tapestry - систему фильтрации электронной почты: пользователи аннотировали письма и реагировали на аннотации друг друга. В 1994 году проект GroupLens (Paul Resnick, John Riedl и другие из MIT и Университета Миннесоты) применил эту идею к новостям Usenet, предсказывая интересность статьи по оценкам единомышленников. Эти два проекта заложили главную мысль любого современного рекомендателя: люди со схожими прошлыми вкусами хорошо предсказывают будущие вкусы друг друга. Всё - от Amazon до Netflix - выросло из этого зерна.
Content-Based Filtering: рекомендации по признакам
Netflix открыт. На экране фильм, который никто специально не выбирал. Алгоритм выбрал за нас - и угадал. **Content-based filtering** работает без знания о других людях: смотрит только на признаки самого контента. Если в истории просмотров три sci-fi фильма Кристофера Нолана, система строит вектор предпочтений и ищет в каталоге что-то похожее по жанру, тегам, режиссёру.
Каждый фильм, книга или трек описывается набором признаков: жанр, автор, год, ключевые слова. Пользователь тоже получает **профиль** - вектор, собранный из признаков понравившихся товаров. Дальше задача проста: найти в каталоге позиции, чей вектор признаков ближе всего к профилю. Ближайший сосед по косинусному расстоянию - следующая рекомендация.
Для текстовых описаний ключевой инструмент - **TF-IDF (Term Frequency - Inverse Document Frequency)**. Он превращает текст в числовой вектор, взвешивая слова по редкости. Слово «фильм» встречается везде - почти нулевой вес. Слово «киберпанк» - редкое, информативное, высокий вес. Именно редкие слова несут смысл.
**Cosine similarity** измеряет угол между двумя векторами - не расстояние, а направление. Значение 1.0 - идеальное совпадение, 0.0 - полная ортогональность. Формула: cos(θ) = (A · B) / (||A|| × ||B||). Нормализация по длине позволяет честно сравнивать фильм с 10 жанрами и фильм с тремя.
| Достоинство | Недостаток |
|---|---|
| Не нужны данные других пользователей | Ограничен тем, что уже нравилось |
| Прозрачные рекомендации (можно объяснить) | Не открывает новые жанры (filter bubble) |
| Работает для нового пользователя с историей | Требует качественного описания товаров |
| Нет проблемы cold start для товаров | Не учитывает мнения других пользователей |
**Filter bubble** - главная ловушка content-based подхода. Смотрел только боевики - система рекомендует только боевики. Документальный, который мог бы перевернуть картину мира, никогда не появится. Алгоритм замыкается на истории, которую уже знает.
Пользователь посмотрел три фильма: все - sci-fi триллеры. Content-based система рекомендует ему четвёртый фильм. Какой критерий она использует?
Collaborative Filtering: мудрость толпы
А что если выбросить признаки фильмов вообще? Не смотреть на жанр, режиссёра, теги - смотреть только на **поведение людей**. Если Алиса и Боб оценили 50 фильмов почти одинаково, а Боб ещё посмотрел «Dune» и поставил 5 звёзд - Алисе скорее всего понравится тоже. Это **collaborative filtering** - рекомендации из коллективного опыта, без единого описания товара.
В основе - **матрица оценок (rating matrix)**: строки - пользователи, столбцы - товары, ячейки - оценки. Большинство ячеек пусты (пользователь не видел фильм). Задача - **заполнить пропуски**: предсказать, какую оценку пользователь поставит товару, который ещё не смотрел.
Два главных подвида: - **User-based CF** - находим пользователей с похожими оценками, берём их рейтинги. «Люди, похожие на вас, смотрели..." - **Item-based CF** - находим товары, которые оценивались похоже. «Те, кому понравился этот фильм, также смотрели..." Item-based CF обычно стабильнее: вкусы людей меняются, а связь между товарами - нет. Amazon переключился на item-based ещё в 2003 году.
**Проблема разреженности (sparsity):** В реальных системах матрица оценок заполнена на 1-3%. Netflix имеет ~500M пользователей и ~15,000 фильмов - это 7.5 триллионов ячеек, из которых заполнены менее 1%. Cosine similarity между двумя пользователями, оценившими всего 2 общих фильма, статистически бессмысленна.
**Item-based vs User-based на практике:** Item-based CF доминирует в production. Причина - товаров обычно меньше, чем пользователей (100K фильмов vs 500M пользователей), матрица item-item компактнее. Связи между товарами стабильнее - фильм не меняет жанр, а пользователи со временем меняют вкусы.
Матрица оценок Netflix заполнена менее чем на 2%. Какую проблему это создаёт для collaborative filtering?
Гибридные системы: лучшее из обоих миров
2006 год. Netflix объявляет конкурс: миллион долларов тому, кто улучшит алгоритм на 10%. Три года. Тысячи команд. Победитель 2009 года - «BellKor's Pragmatic Chaos» - принёс **гибрид из 107 алгоритмов**. Ни один из подходов в одиночку не давал нужного результата. Комбинация перекрыла слабости каждого.
**Гибридные рекомендательные системы** комбинируют несколько подходов. Content-based отлично работает для новых товаров - у них есть признаки. Collaborative отлично работает для пользователей с историей - есть оценки соседей. Вместе они закрывают слепые зоны друг друга.
| Стратегия | Как работает | Пример |
|---|---|---|
| Weighted | Линейная комбинация: score = α × CB + (1-α) × CF | score = 0.3 × content + 0.7 × collab |
| Switching | Переключение: если CF невозможен → используем CB | Новый пользователь → content-based; иначе → collaborative |
| Cascade | Каскад: CB отбирает кандидатов → CF ранжирует | Жанр sci-fi → из них выбрать по оценкам |
| Feature Augmentation | Один метод обогащает вход другого | CF → latent features → вход для CB модели |
| Meta-level | Один метод строит модель, другой использует | CB строит user profile → вход для CF |
Netflix Prize: 1M за 10% улучшения
Netflix Prize (2006-2009) стал переломным моментом для рекомендательных систем. Собственный алгоритм Netflix - Cinematch - имел RMSE 0.9525. Приз в 1 миллион долларов требовал снизить его до 0.8572 (улучшение на 10%). Тысячи команд со всего мира работали 3 года. Победители объединили **107 различных алгоритмов** в один ансамбль. Интересный факт: Netflix так и не внедрил победивший алгоритм - он был слишком сложен для production. Но конкурс породил целое поколение исследований.
**На практике почти все крупные системы - гибриды.** YouTube комбинирует collaborative filtering (что смотрели похожие пользователи) с content-based (теги видео, описания) и contextual (время суток, устройство, страна). Spotify использует collaborative (плейлисты пользователей), content-based (аудио-признаки) и NLP (тексты песен, описания плейлистов).
**Cascade hybrid** - самый практичный подход для начала. Первый этап (retrieval) быстро отбирает 100-1000 кандидатов с помощью простого метода. Второй этап (ranking) точно ранжирует кандидатов сложной моделью. Это баланс между скоростью и точностью.
Рекомендательная система Netflix показывает разные фильмы в зависимости от времени суток и контекста. Какой тип гибридной стратегии здесь используется?
Cold Start: проблема холодного старта
Новый пользователь зарегистрировался на Spotify. Ноль прослушиваний, ноль лайков, ноль плейлистов. Collaborative filtering бессилен - нет данных для сравнения. Content-based тоже - нет профиля предпочтений. Это **cold start problem** - одна из самых фундаментальных проблем рекомендательных систем. Данные нужны чтобы давать рекомендации. Рекомендации нужны чтобы получать данные. Замкнутый круг.
Cold start бывает трёх видов: - **New user cold start** - новый пользователь без истории - **New item cold start** - новый товар, который никто не оценивал - **New system cold start** - новая платформа без данных вообще Каждый вид требует своей стратегии. И каждый крупный сервис решает его по-своему.
| Стратегия | Тип cold start | Как работает |
|---|---|---|
| Popularity-based | User / System | Рекомендовать самое популярное - «безопасный» выбор |
| Demographic | User | Использовать возраст, страну, язык для первоначальных рекомендаций |
| Onboarding | User | Попросить оценить 5-10 товаров при регистрации |
| Content features | Item | Описать новый товар через признаки - жанр, теги, автор |
| Bandits (Explore/Exploit) | User / Item | Случайно показывать разное, быстро учиться на реакции |
**Explore vs Exploit (Multi-Armed Bandit):** Продвинутые системы используют bandit-алгоритмы для cold start. Идея: случайно показывать пользователю разные товары (explore) и быстро учиться на его реакции (exploit). Алгоритм epsilon-greedy показывает лучший вариант 90% времени, а 10% - случайный. Через 10-20 взаимодействий система уже понимает вкусы.
**Cold start для новых товаров - проблема не меньше.** Новая песня на Spotify, выложенная начинающим исполнителем, не будет рекомендована через collaborative filtering - её никто ещё не слушал. Поэтому Spotify анализирует **аудио-признаки** (tempo, energy, danceability) через content-based подход, а также текст и метаданные. Без этого новый контент попадает в ловушку молчания: не рекомендуют - нет прослушиваний - не рекомендуют.
**Onboarding - самый эффективный способ борьбы с user cold start.** Netflix просит новых пользователей оценить несколько фильмов. Spotify - выбрать любимых исполнителей. Pinterest - отметить интересные темы. Даже 3-5 сигналов от пользователя радикально улучшают качество рекомендаций по сравнению с popularity-based подходом.
Collaborative filtering всегда лучше content-based, потому что использует данные реальных пользователей
Выбор между CF и CB зависит от контекста: плотности данных, доли новых товаров, задачи. В условиях разреженности и cold start content-based может превосходить collaborative
Ключевые идеи
- **Content-based filtering** рекомендует по признакам товаров (жанр, автор, TF-IDF). Прозрачен и объясним, но создаёт filter bubble - замыкается на истории пользователя
- **Collaborative filtering** использует коллективное поведение: user-based (похожие люди) и item-based (похожие товары). Мощнее, но требует данных и уязвим к разреженности
- **Гибридные системы** комбинируют подходы (weighted, switching, cascade). Netflix Prize показал: 107 алгоритмов побеждают любой одиночный метод
- **Cold start** - фундаментальная проблема: без данных о пользователе или товаре рекомендации невозможны. Решения: popularity, onboarding, content features, bandits
Связанные темы
Рекомендательные системы опираются на линейную алгебру, метрики сходства и ML-техники:
- Collaborative Filtering в деталях — Углубление в user-based и item-based подходы, формулы предсказания, выбор метрик
- Matrix Factorization — SVD и ALS - продвинутые методы collaborative filtering, разложение матрицы оценок
Вопросы для размышления
- Подумайте о сервисе, которым пользуетесь ежедневно (YouTube, Spotify, TikTok). Какой тип рекомендаций он, скорее всего, использует - content-based, collaborative, или гибрид? Почему?
- Filter bubble - серьёзная проблема: рекомендательные системы сужают кругозор. Как спроектировать систему, которая балансирует между точностью и разнообразием рекомендаций?
- Если запускать новый стриминговый сервис с нуля (0 пользователей, 10,000 фильмов) - какую стратегию cold start выбрать и почему?
Связанные уроки
- rec-02 — Коллаборативная фильтрация и матричная факторизация
- ml-01-intro — ML как фундамент для обучения моделей рекомендаций
- la-01-vectors-intro — Векторные пространства для user/item embeddings
- prob-04-bayes — Байесовские методы для оценки предпочтений
- ir-01 — Поиск и рекомендации - две стороны relevance
- ml-14-knn — kNN - простейший рекомендательный алгоритм
- ml-01