Зачем нужна метрика с позиционным дисконтом
Простые метрики типа 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 | ✗ | ✓ | ✗ |