Ответ
Оценка рекомендательной системы — это всегда компромисс между оффлайн-метриками на исторических данных и онлайн-метриками в A/B тестах.
1. Оффлайн-оценка (на тестовой выборке): Использую эти метрики для быстрого сравнения моделей.
- Precision@k и Recall@k: Какая доля из топ-k рекомендаций релевантна (Precision) и какая доля всей релевантной истории пользователя была захвачена в топ-k (Recall).
- NDCG@k (Normalized Discounted Cumulative Gain): Моя основная метрика, так как она учитывает не только релевантность, но и позицию в списке. Релевантные товары в начале списка ценятся выше.
import numpy as np from sklearn.metrics import ndcg_score
Пример расчета NDCG для одного пользователя
true_relevance = np.asarray([[2, 1, 0, 0, 1]]) # Релевантность товаров (например, 2=клик, 1=просмотр) predicted_scores = np.asarray([[0.9, 0.8, 0.7, 0.6, 0.5]]) # Скоры модели ndcg = ndcg_score(true_relevance, predicted_scores, k=3) print(f"NDCG@3: {ndcg:.3f}")
**2. Онлайн-оценка (A/B тест):**
Оффлайн-метрики не всегда коррелируют с бизнес-результатом, поэтому финальный вердикт выносят A/B тесты.
* **Основные метрики:** Конверсия в целевое действие (покупка, клик, просмотр), средний чек, общая выручка с пользователя (ARPU).
* **Вспомогательные метрики:** Вовлеченность (время на сайте, глубина просмотра), диверсификация рекомендаций.
**Мой подход:** Сначала отбираю несколько моделей с лучшими NDCG/Precision на валидации, а затем запускаю их в A/B тесте для измерения реального влияния на бизнес.