Идея коллаборативной фильтрации
Урок вводит главную идею классических рекомендаций: предпочтения можно предсказать по поведению похожих пользователей и сходству товаров, не зная их содержания.
Коллаборативная фильтрация (CF) — семейство методов, которые рекомендуют объекты на основе совпадений в поведении многих пользователей, а не на основе свойств самих объектов.
«Сарафанное радио» в коде
Идея проста и человечна: если вкусы Ани и Бориса совпадали в десяти фильмах, то одиннадцатый фильм, который понравился Ане, скорее всего понравится и Борису. Мы не разбираем, почему фильм хорош (жанр, актёры, сюжет) — мы просто замечаем, что люди с похожим поведением ведут себя похоже и дальше. Это коллективная мудрость толпы, превращённая в алгоритм.
Сила подхода в том, что он работает с любыми объектами без понимания их сути: фильмы, товары, песни, статьи. Системе не нужно знать, что такое «киберпанк» — достаточно матрицы взаимодействий.
Два взгляда на одну матрицу
Коллаборативная фильтрация делится на два зеркальных подхода.
- User-based: «найди пользователей, похожих на меня, и порекомендуй то, что нравится им». Похожесть считается между строками матрицы.
- Item-based: «найди товары, похожие на те, что мне уже понравились». Похожесть считается между столбцами матрицы.
товары -->
| i1 i2 i3
u1 | 5 ? 4 user-based: ищем строки, похожие на u1
u2 | 4 1 5
u3 | 1 5 2
^
item-based: ищем столбцы, похожие на i1Маленький пример идеи
Покажем суть на двух пользователях: у кого вкусы ближе к целевому — тот и «советчик».
target = {"Матрица": 5, "Аватар": 4}
friendA = {"Матрица": 5, "Аватар": 5, "Дюна": 5}
friendB = {"Матрица": 1, "Аватар": 2, "Титаник": 5}
def overlap_score(t, f):
common = set(t) & set(f)
return sum(1 for i in common if abs(t[i] - f[i]) <= 1)
print("Совпадений с A:", overlap_score(target, friendA))
print("Совпадений с B:", overlap_score(target, friendB))
print("Советчик:", "A (порекомендуем 'Дюна')")Вывод:
Совпадений с A: 2 Совпадений с B: 0 Советчик: A (порекомендуем 'Дюна')
Как работает под капотом
Любая CF-система делает два шага: считает меру похожести между парами (пользователей или товаров) и затем агрегирует оценки «соседей» во взвешенный прогноз. Качество целиком зависит от того, насколько хорошо мера похожести ловит реальное сходство вкусов на разреженных данных — этому посвящены следующие уроки.
Частые ошибки
- Думать, что CF понимает контент. Она не знает жанров и сюжетов — только паттерны взаимодействий.
- Игнорировать холодный старт. Новому пользователю или товару без истории CF ничего сказать не может.
- Считать похожесть по одному общему товару. Одно пересечение — это шум; нужна устойчивая статистика.
Итоги
- CF рекомендует по совпадениям в поведении, а не по свойствам объектов.
- User-based ищет похожих пользователей, item-based — похожие товары.
- Любая CF состоит из меры похожести и агрегации оценок соседей.
- CF беспомощна без истории — отсюда проблема холодного старта.