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

Введение в рекомендательные системы

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-α) × CFscore = 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-basedUser / SystemРекомендовать самое популярное - «безопасный» выбор
DemographicUserИспользовать возраст, страну, язык для первоначальных рекомендаций
OnboardingUserПопросить оценить 5-10 товаров при регистрации
Content featuresItemОписать новый товар через признаки - жанр, теги, автор
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
Введение в рекомендательные системы

0

1

Войти

CF требует достаточного количества оценок для надёжного сходства. На платформе с миллионами товаров и мало активных пользователей матрица оценок крайне разрежена, и CF видит только популярные товары. CB работает для каждого товара с описанием, даже если его ещё никто не оценил. На практике лучший результат даёт гибрид, адаптирующийся к количеству доступных данных.

На музыкальной платформе появилась новая песня, загруженная неизвестным исполнителем. Какая стратегия наиболее эффективна для её рекомендации?