Ответ
В моих проектах по рекомендательным системам мы использовали несколько подходов, комбинируя их для лучшего качества.
1. Коллаборативная фильтрация (Collaborative Filtering - CF)
Система рекомендует товары, которые понравились похожим пользователям. Мы реализовывали модель матричной факторизации (например, через библиотеку implicit или LightFM), которая хорошо работает с implicit feedback (просмотры, клики).
import implicit
from scipy.sparse import csr_matrix
# Создание sparse-матрицы взаимодействий пользователь-товар
user_item_matrix = csr_matrix((data['weight'], (data['user_id'], data['item_id'])))
# Обучение ALS модели
model = implicit.als.AlternatingLeastSquares(factors=64, iterations=20)
model.fit(user_item_matrix)
# Получение рекомендаций для пользователя
recommendations = model.recommend(user_id, user_item_matrix[user_id], N=10)
2. Контентная фильтрация (Content-Based Filtering) Рекомендации основаны на сходстве атрибутов товаров и профиля пользователя (например, история просмотров категорий). Мы использовали TF-IDF или эмбеддинги для описания товаров и косинусное сходство.
3. Гибридные системы Чаще всего мы комбинировали подходы для компенсации их слабостей (например, "холодный старт" у CF). Одна из архитектур:
- Ранжирование (Ranking): Модель
LightGBMилиCatBoostпринимала сотни признаков: выходы CF-модели, контентные признаки, исторические метрики пользователя, контекст (время, устройство). - Обучение проводилось на логах кликов/покупок.
Ключевые метрики для оценки A/B теста рекомендаций:
- CTR (Click-Through Rate)
- Conversion Rate
- Precision@K / Recall@K (офлайн-метрики на hold-out выборке)
- NDCG@K (учитывает порядок рекомендаций)
Важные аспекты:
- Диверсификация: Добавление случайного шума или механизмов для показа новых товаров.
- Актуальность: Учёт временных трендов и сезонности.
- Интерпретируемость: Возможность объяснить рекомендацию ("потому что вы смотрели X") повышает доверие пользователя.