Популярность и эвристики как baseline
Урок показывает, почему простые рекомендации по популярности — обязательная точка отсчёта, и какие эвристики делают их умнее.
Baseline — это самая простая модель, относительно которой измеряют пользу всех сложных алгоритмов. В рекомендациях базовым обычно служит топ по популярности.
Зачем нужен baseline
Прежде чем строить матричное разложение или нейросеть, надо ответить на вопрос: а насколько вообще трудна задача? Может, простой топ популярного уже даёт 90% качества, и сложная модель добавит лишь пару процентов ценой огромных усилий. Baseline даёт честную точку отсчёта: если ваша «умная» модель не бьёт популярность, что-то не так.
Чистая популярность
Берём счётчик взаимодействий по каждому товару и сортируем. Это работает мгновенно, не требует данных о пользователе и всегда есть что показать новичку.
from collections import Counter
events = ["A","B","A","C","A","B","D","A","B","C","A","E"]
pop = Counter(events)
print("Топ-3 популярных:")
for item, c in pop.most_common(3):
print(f" {item}: {c}")Вывод:
Топ-3 популярных: A: 5 B: 3 C: 2
Эвристики поверх популярности
Чистый топ имеет недостатки: он «застывает» (старые хиты вечно наверху) и не учитывает свежесть. Поэтому популярность часто комбинируют с эвристиками:
- Свежесть. Учитывать только взаимодействия за последние N дней — так в топ попадают новые тренды.
- Сглаживание малых чисел. Товар с одной покупкой и 100% «конверсией» не должен обгонять товар с тысячей покупок. Помогает байесовское сглаживание (добавить «виртуальные» средние голоса).
- Контекст. Топ можно считать не глобально, а по сегменту: город, устройство, категория.
# байесовское сглаживание рейтинга
def smoothed(sum_ratings, n, global_mean=3.5, m=10):
# m — сила «приора», тянет малые выборки к среднему
return (sum_ratings + m * global_mean) / (n + m)
# товар с 1 отличной оценкой против товара с 50 хорошими
print("1 оценка 5.0 ->", round(smoothed(5, 1), 2))
print("50 оценок (ср. 4.2) ->", round(smoothed(4.2 * 50, 50), 2))Вывод:
1 оценка 5.0 -> 3.64 50 оценок (ср. 4.2) -> 4.08
Видно, как сглаживание справедливо «прижимает» товар с единственной оценкой к среднему, а товар с большой выборкой почти не трогает.
Как работает под капотом
Популярностный baseline почти бесплатен: один проход по логам и сортировка. В продакшене его часто оставляют как фолбэк — когда персональная модель не успевает или у пользователя нет истории, показывают сглаженный топ нужного сегмента.
Частые ошибки
- Пропустить baseline. Без него вы не знаете, окупается ли сложная модель.
- Сравнивать сырые средние без сглаживания. Малые выборки дают обманчиво высокие средние.
- Считать популярность вечной. Без окна свежести топ застывает и перестаёт ловить тренды.
Итоги
- Топ по популярности — обязательный baseline и надёжный фолбэк.
- Сложная модель обязана измеримо превосходить популярность.
- Свежесть, сглаживание и сегментация делают популярность заметно умнее.
- Байесовское сглаживание защищает от обманчивых средних по малым выборкам.