Зачем нужна метрика с позиционным дисконтом

Простые метрики типа Precision@K не учитывают, на каком месте стоит релевантный результат. Покупатель, которому нужный товар показан на 10-й позиции, скорее всего, его не увидит — но Precision@10 засчитывает это так же, как показ на 1-й позиции.

NDCG решает эту проблему: вклад элемента на позиции i дисконтируется на log2(i + 1). Товар на 1-й позиции вносит полный вклад, на 2-й — вдвое меньший, и так далее.

Формула NDCG

DCG@K = Σ (rel_i / log2(i + 1))  для i от 1 до K

NDCG@K = DCG@K / IDCG@K

где IDCG@K — DCG идеального ранжирования
(все релевантные товары стоят первыми)

Пример для K=4 с релевантностями [3, 2, 3, 0]:

DCG@4 = 3/log2(2) + 2/log2(3) + 3/log2(4) + 0/log2(5)
      = 3/1 + 2/1.585 + 3/2 + 0
      = 3 + 1.26 + 1.5 = 5.76

Идеальный порядок [3, 3, 2, 0] → IDCG@4 = 3 + 1.89 + 1 + 0 = 5.89
NDCG@4 = 5.76 / 5.89 ≈ 0.978

Применение в e-commerce

Оценка поиска. Насколько хорошо алгоритм поиска ставит на первые позиции товары, которые пользователи реально покупают.

Ранжирование PLP. Персонализированная сортировка категорий — нужно убедиться, что товары, интересные конкретному пользователю, стоят выше. NDCG измеряет это напрямую.

Оффлайн-оценка рекомендаций. Перед выкаткой нового алгоритма в A/B-тест — оценка на исторических данных: NDCG нового алгоритма vs. текущего.

Совет: Используйте NDCG@K с K, соответствующим реальному числу отображаемых позиций. Для блока рекомендаций из 6 товаров — NDCG@6. Для страницы каталога, где выше fold видно 8–12 позиций — NDCG@10 или NDCG@12.

Ограничения NDCG

  • Требует оценок релевантности — либо экспертных, либо из логов поведения. Без них метрику не рассчитать.
  • Оффлайн-NDCG не равен онлайн-конверсии. Алгоритм с высоким NDCG на исторических данных может показывать меньший рост CR в A/B-тесте из-за novelty effect или особенностей конкретного сегмента.
  • Не учитывает разнообразие. Показать 10 релевантных, но одинаковых товаров = высокий NDCG, но плохой UX.
Метрика Учитывает позицию Учитывает разнообразие Нужны оценки релевантности
NDCG
MAP ✓ (бинарно)
Precision@K
Coverage