Popularity baseline
Самая простая модель: рекомендуем всем одни и те же глобально самые популярные фильмы, исключая уже просмотренные.
Теория простым языком
Popularity — это «витрина с хитами»: балл айтема один на всех и не зависит от того, кому мы рекомендуем. Персонализации в модели нет — но итоговые списки у разных людей всё-таки различаются, потому что из общей витрины вычитается личная история. С этого baseline начинают, чтобы было с чем сравнивать.
Что нам вообще дано
Прежде чем что-то рекомендовать, договоримся о словах. Их всего три, и они будут встречаться во всех алгоритмах.
Все взаимодействия удобно представить большой таблицей: строки — пользователи, столбцы — фильмы, в клетке стоит оценка (или пусто, если человек фильм не видел). Такую таблицу называют так:
Идея алгоритма
Popularity не смотрит, кто именно перед ним. Он смотрит только на столбцы матрицы и считает, у скольких людей вообще было взаимодействие с каждым фильмом. Чем больше людей — тем «популярнее» фильм. Дальше берём самые популярные и показываем всем подряд.
▸Зачем нужен popularity baseline
Как считается, по шагам
1. Для каждого фильма складываем, сколько пользователей с ним взаимодействовали — получаем «балл популярности».
2. Сортируем фильмы по этому баллу от большего к меньшему.
3. Конкретному человеку показываем верхние K фильмов, выкидывая те, что он уже видел. Последний шаг — единственное место, где появляется хоть что-то про конкретного человека, и политика этого эксперимента, а не свойство модели: в музыке или в продуктовой корзине повтор — норма, и там этот фильтр выбрасывал бы правильный ответ.
для каждого айтема i:
score[i] = сколько пользователей взаимодействовали с i
ranking = айтемы, отсортированные по score (убыв.)
recommend(пользователь u, K):
вернуть первые K из ranking, которые u ещё не видел▸Формула / строгое определение
Балл популярности айтема — число пользователей, у которых было с ним взаимодействие:
где равно 1, если условие верно, иначе 0. Это «по числу взаимодействий». Более аккуратный вариант — взвешенный рейтинг с байесовским сглаживанием (как у IMDb), чтобы фильм с двумя оценками по 5 не обгонял фильм с тысячей оценок по 4.3:
здесь — число оценок фильма, — его средняя оценка, — средняя оценка по всему каталогу, — «доверительный порог» (сколько оценок нужно, чтобы верить средней).
Зачем он нужен, если такой простой
Это точка отсчёта. Персональная модель по точности обычно должна обыгрывать popularity — иначе её сложность по этой метрике не оправдана. Но это не абсолют: если цель — новизна, разнообразие или охват длинного хвоста, сложная модель может проиграть popularity по одной accuracy-метрике и всё равно быть полезной. Такую отправную модель называют так:
Важно: «популярно» ≠ «понравилось»
Наш popularity считает число взаимодействий. Но фильм могли часто смотреть и часто ругать. Популярность бывает разной, и выбор меняет рекомендации: по числу взаимодействий; по числу положительных оценок; по средней оценке с байесовским сглаживанием; по недавней популярности (тренд за неделю). Мы берём самый простой вариант — это честный baseline, а не «лучший» способ.
Сильные стороны
- Очень просто и быстро, не требует почти ничего.
- Работает для нового пользователя, о котором мы ничего не знаем (показать хиты — разумно).
- Честная планка качества для всех остальных моделей.
Слабые стороны
- Ноль персонализации: фанату ужасов и любителю мультиков — одно и то же.
- Усиливает «эффект богатые богатеют»: популярное показывается → становится ещё популярнее.
- Бесполезно для нишевых вкусов и для новых фильмов, которые ещё никто не смотрел.
⚠️ Что может пойти не так
- Считаем число оценок, а не «понравилось»: нужен ли порог, средняя оценка или сглаживание — зависит от задачи.
- Порог релевантности меняет задачу, а не только строгость: на всех таргетах popularity проигрывает MF, а при пороге «понравилось» — обходит его. Замер по порогам и связь популярности с оценкой — на странице «Как устроен эксперимент».
- Петля обратной связи: показываем популярное → его смотрят больше → оно ещё популярнее, а нишевое не получает шанса.
- Не реагирует на свежесть: вчерашние хиты могли уже надоесть; часто нужна оконная популярность с затуханием.
🧠 Проверь себя: Почему при пороге «релевантно = понравилось» popularity неожиданно силён?
Где встречается в жизни
«В тренде», «Топ недели», «Сейчас смотрят» — это всё popularity. Часто им заполняют ленту новому пользователю, пока о нём ещё нечего знать (это называют проблемой холодного старта — к ней вернёмся в других алгоритмах).
Что дальше
Опирается на этот модуль — здесь он нужен как предпосылка
До финальной сборки не хватает ещё 12 модулей по этому пути.
Порядок здесь — рекомендация из карты курса, ничего не блокируется. Отметка «прочитано» хранится только в этом браузере.
Источники
- The MovieLens Datasets: History and ContextF. M. Harper, J. A. Konstan · 2015 · статьяописание датасета, на котором считаются все числа базовой части
- MovieLens — страница датасетаGroupLens · датасетверсия ml-latest-small: 610 пользователей, 9724 фильма
- Are We Really Making Much Progress? A Worrying Analysis of Recent Neural Recommendation ApproachesM. F. Dacrema, P. Cremonesi, D. Jannach · 2019 · статьяпочему слабый baseline обесценивает любое сравнение — отсюда требование начинать с popularity