Как система может подобрать подходящий оффер или товар для клиента?

«Как система может подобрать подходящий оффер или товар для клиента?» — вопрос из категории Рекомендательные системы, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моих проектах по рекомендательным системам мы использовали несколько подходов, комбинируя их для лучшего качества.

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") повышает доверие пользователя.