Коллаборативная фильтрация
Классика RecSys — рекомендуем на основе похожих пользователей и товаров
Что такое коллаборативная фильтрация
Коллаборативная фильтрация (Collaborative Filtering, CF) — самый классический подход в RecSys. Идея: рекомендуем на основе коллективного поведения пользователей, не зная ничего о самих товарах. Если люди с похожим вкусом любили одно и то же — вероятно, им понравятся и другие общие вещи.
CF работает с матрицей user-item: строки — пользователи, столбцы — товары, значения — оценки или факты взаимодействия. Задача — заполнить пустые ячейки. Два основных варианта: User-based CF и Item-based CF.
User-based CF
Алгоритм: для целевого пользователя u находим K ближайших соседей (самых похожих пользователей), смотрим что им нравилось, и рекомендуем это пользователю u.
- Шаг 1: Для каждой пары пользователей (u, v) считаем сходство sim(u, v)
- Шаг 2: Для пользователя u выбираем K самых похожих (k-nearest neighbors)
- Шаг 3: Предсказываем оценку товара i как взвешенное среднее оценок соседей
Формула предсказания оценки:
Здесь r̄_u — средняя оценка пользователя u (нормализуем, потому что кто-то ставит все пятёрки, а кто-то — все тройки), N(u) — множество K ближайших соседей.
Item-based CF
Вместо «похожих пользователей» ищем «похожие товары». Если пользователю понравился фильм A, и фильмы A и B часто оценивают одинаково — рекомендуем фильм B.
- Шаг 1: Для каждой пары товаров (i, j) считаем сходство sim(i, j) по столбцам матрицы
- Шаг 2: Для товара i, который нужно оценить, берём K самых похожих товаров, которые пользователь уже оценил
- Шаг 3: Предсказание — взвешенное среднее оценок пользователя на похожих товарах
Меры сходства
Cosine Similarity
Косинусное сходство — самая популярная мера. Считает косинус угла между двумя векторами:
Значение от -1 (полная противоположность) до 1 (полное сходство). Не зависит от «масштаба» — работает корректно даже если один пользователь ставит оценки 1-5, а другой 3-5.
Pearson Correlation
Корреляция Пирсона — по сути, cosine similarity на центрированных данных (вычитаем среднее):
Pearson лучше обрабатывает разницу в «строгости» оценок: если Алиса ставит в среднем 4, а Боб — 2, но их предпочтения одинаковые, cosine покажет разницу, а Pearson — сходство.
User-based vs Item-based: когда что лучше
- Item-based CF стабильнее: предпочтения товаров меняются редко, а вкусы пользователей — постоянно. Матрицу сходства товаров можно пересчитывать реже
- Item-based CF масштабируется лучше: товаров обычно меньше, чем пользователей (хотя не всегда)
- User-based CF лучше ловит неожиданные рекомендации (serendipity): «похожий пользователь смотрел совершенно другой жанр»
- Amazon использует Item-based CF — «С этим товаром покупают». Это один из самых успешных примеров CF в продакшене
Почему Item-based CF обычно лучше User-based?
1) Стабильность: отношения между товарами меняются медленнее, чем вкусы пользователей. 2) Масштабируемость: сходства товаров можно предпосчитать оффлайн. 3) Объяснимость: «Вам нравится X → рекомендуем похожий Y» понятнее, чем «Похожие пользователи любят Y».
Проблемы коллаборативной фильтрации
Разреженность (Sparsity)
Матрица user-item заполнена на 0.01-1%. У большинства пар пользователей нет общих оценённых товаров → сходство посчитать невозможно или ненадёжно. Это главная боль CF.
Масштабируемость (Scalability)
Подсчёт сходства для всех пар — O(n²). При миллионах пользователей это нереально. Решения: LSH (Locality-Sensitive Hashing), approximate nearest neighbors (FAISS, Annoy), предпосчёт оффлайн.
Popularity Bias
CF склонна рекомендовать популярное: у популярных товаров больше оценок → они чаще оказываются «похожи» на многие товары. Длинный хвост каталога остаётся незамеченным.
kNN-based подходы
Коллаборативная фильтрация в своей основе — это k-nearest neighbors (kNN). Ключевые гиперпараметры:
- K (число соседей): маленький K — шумные рекомендации, большой K — размытые. Типичные значения: 20-50
- Мера сходства: cosine, Pearson, Jaccard (для implicit feedback)
- Минимальное число общих элементов: не считаем сходство, если пользователи/товары пересекаются менее чем по N элементам
- Нормализация: вычитание среднего (mean-centering), z-score нормализация
На практике kNN-based CF до сих пор работает удивительно хорошо как baseline и часто используется в production наряду с более сложными моделями.
Итого
- CF рекомендует на основе коллективного поведения, не зная свойств товаров
- User-based CF: ищем похожих пользователей → рекомендуем что нравится им
- Item-based CF: ищем похожие товары → рекомендуем похожее на то что уже нравится
- Cosine similarity и Pearson correlation — основные меры сходства
- Item-based обычно лучше: стабильнее, масштабируемее, объяснимее
- Главные проблемы: разреженность, масштабируемость, popularity bias
- kNN-based CF — хороший baseline, до сих пор используется в продакшене