Кейс : построение рекомендательной системы шаг за шагом
Представим, что у нас есть классический сет данных: MovieLens 100K — оценки пользователей фильмов («userId», «movieId», «rating», «timestamp») — и мы хотим построить top-N рекомендательную систему, используя библиотеку sota-recommender.
Мы пройдём этапы: загрузка данных → предобработка → обучение модели → рекомендации → оценка качества.
Шаг 1: загрузка и преобразование данных
from recommender import load_movielens, InteractionDataset
df = load_movielens(size='100k')
# df — DataFrame с колонками userId, movieId, rating, timestamp
dataset = InteractionDataset(df, implicit=False)
# explicit задачи: рейтинги. Если бы мы работали с кликами/просмотрами, implicit=True
Здесь важно: библиотека автоматически обрабатывает DataFrame, позволяет указать explicit/implicit режим.
Также делим на train и test:
train, test = dataset.split(test_size=0.2, random_state=42)
Шаг 2: обучение модели
Предположим, мы выбираем один из алгоритмов: например, EASERecommender или SLIMRecommender из библиотеки:
from recommender import EASERecommender
model = EASERecommender(l2_reg=500.0)
model.fit(train.data)
«train.data» — это разреженная матрица взаимодействий. Выбор модели, параметров (например регуляризация l2_reg), влияет на результаты.
Шаг 3: получение рекомендаций
user_ids = [10, 20, 30]
k = 5
recs = model.recommend(user_ids, k=k)
print(recs)
Вывод: для каждого пользователя из списка возвращается список рекомендованных item-ID. Можно затем сопоставить с реальными названиями фильмов, если есть маппинг.
Шаг 4: оценка качества
from recommender import Evaluator
evaluator = Evaluator(metrics=['precision','recall','ndcg'])
results = evaluator.evaluate(model, test, task='ranking', train_data=train)
evaluator.print_results(results)
Здесь важно:
- Мы используем метрики Precision@K, Recall@K, NDCG@K.
- Задача – «ranking», то есть топ-N рекомендаций, а не предсказание рейтинга.
- Перед оценкой не стоит рекомендовать пользователям те фильмы, которые уже были в train_data: это учтено.
- Этот подход соответствует описанию лучших практик в рекомендательных системах.
Шаг 5: анализ результатов и интерпретация
После получения результатов можно сделать:
- Сравнение моделей: например, заменить EASE на SLIM, SVD, или другой алгоритм из библиотеки и посмотреть, как меняются метрики.
- Проверка покрытия: сколько пользователей/товаров было охвачено, сколько рекомендаций реально уникальных.
- Выяснение узких мест: например, холодный старт пользователей или товаров, «длинный хвост» малопопулярных товаров.
- Возможно, визуализация: распределение Precision@K по группам пользователей (активных vs. менее активных), влияние параметров регуляризации и латентных факторов.
Шаг 6: выводы и дальнейшие шаги
- Вы увидите, что даже простая модель (например EASE) с правильным интерфейсом и оценкой может дать неплохие рекомендации.
- Но если данные сложнее (последовательности, графы, множество контекстов) — можно попробовать более сложные модели.
- Дальнейшие шаги:
- попробовать implicit-режим (когда нет рейтингов, только клики)
- добавить негативный sampling, если данных много и задача чисто топ-N
- сравнить продакшн-аспекты: скорость обучения, время рекомендации, ресурсы.
- интегрировать в веб-сервис/приложение: REST API, real-time рекомендации.
Ноутбук с полным примером, можно посмотреть тут https://github.com/hichnicksemen/svd-recommender/blob/master/examples/synthetic_data_example.ipynb

