Основы и классика
~12 мин

Метрики ранжирования

NDCG, MAP, MRR, Precision@K, Recall@K, Hit Rate — как оценивать качество рекомендаций.

Метрики ранжирования — как измерить качество рекомендаций

Загрузка интерактивного виджета...

В рекомендациях важен не просто ответ «релевантно/нет», а порядок: лучшие айтемы должны быть наверху. Пользователь смотрит первые 5-10 позиций — если там мусор, качество модели не имеет значения.

Precision@K и Recall@K

Precision@K — какая доля из K рекомендованных айтемов релевантна. Recall@K — какую долю всех релевантных айтемов мы нашли в топ-K. Просто, но не учитывает позицию: релевантный айтем на 1-м и на 10-м месте вносят одинаковый вклад.

Из K рекомендаций — сколько угадали

NDCG — учитывает позицию

NDCG: релевантные айтемы наверху ценнее
Слева — плохое ранжирование: релевантные айтемы внизу. Справа — хорошее: наверху. NDCG учитывает позицию.

NDCG (Normalized Discounted Cumulative Gain) — золотой стандарт метрик ранжирования. Идея: релевантный айтем на 1-й позиции ценнее, чем на 10-й. «Скидка» (discount) растёт с позицией — далёкие результаты вносят меньший вклад.

IDCG — идеальный DCG (если бы ранжирование было идеальным). NDCG от 0 до 1

На собесе: NDCG vs MAP

MAP работает с бинарной релевантностью (0/1). NDCG — с градуированной (0, 1, 2, 3...). Если у тебя есть оценки — NDCG. Если только клик/не клик — можно и MAP. На практике NDCG используют чаще.

MAP и MRR

MAP (Mean Average Precision) — среднее AP по всем пользователям. AP — площадь под Precision-Recall кривой для одного запроса. MRR (Mean Reciprocal Rank) — среднее 1/позиция_первого_релевантного. Полезна, когда нужен ровно один правильный ответ (поиск).

Первый релевантный на 1-м месте → 1.0, на 3-м → 0.33

Hit Rate и Coverage

  • Hit Rate@K — доля пользователей, получивших хотя бы один релевантный айтем в топ-K
  • Coverage — какую долю каталога модель вообще рекомендует (10% = «пузырь»)
  • Novelty — насколько рекомендации неожиданные (не только популярное)
  • Diversity — насколько рекомендации в одном списке различаются между собой
import numpy as np
def ndcg_at_k(relevance, k):
    rel = np.array(relevance[:k])
    dcg = np.sum(rel / np.log2(np.arange(2, k + 2)))
    ideal = np.sum(sorted(rel, reverse=True) / np.log2(np.arange(2, k + 2)))
    return dcg / ideal if ideal > 0 else 0.0

Офлайн vs онлайн метрики

Офлайн (NDCG, MAP) — считаешь на исторических данных. Онлайн (CTR, время на платформе, конверсия) — на живом трафике через A/B-тест. Офлайн улучшение не гарантирует онлайн рост! Но без хорошего офлайна в A/B-тест выходить не стоит.

🎯 Суть для собеса

• NDCG vs MAP — когда что? (NDCG учитывает graded relevance, MAP — бинарную. NDCG — стандарт для поиска/рекомендаций) • Что такое NDCG@K? (нормализованный DCG по top-K, идеальный = 1.0. Штрафует за релевантное на низких позициях) • Офлайн метрики врут — почему? (не учитывают позицию, контекст, пользовательское восприятие → нужны A/B) • MRR — когда использовать? (когда важен один правильный ответ: поиск, QA, саджесты) • Какие метрики для рекомендаций в e-commerce? (NDCG, покрытие каталога, revenue per session)