Информационный поиск
Оценка качества поиска
Команда поиска задеплоила новый алгоритм ранжирования. Офлайн-оценка: NDCG вырос на 3%. A/B тест через неделю: пользователи ищут чаще, кликают реже. Что пошло не так? Без понимания метрик оценки невозможно ответить на этот вопрос.
- **Google:** оценщики выставляют relevance по шкале 0-4, NDCG используется как ключевая метрика
- **Spotify:** MRR для playlist search (нужен один конкретный плейлист)
- **Amazon:** MAP для поиска товаров (пользователь просматривает несколько релевантных)
- **Bing:** CTR и dwell time в real-time для детекции деградации качества
NDCG: normalized discounted cumulative gain
Поиск вернул 10 результатов. Как понять, хороший это результат или плохой? Можно спросить экспертов оценить каждый документ по шкале от 0 до 3 (0 - нерелевантен, 3 - идеально отвечает на запрос). **NDCG** измеряет, насколько реальный порядок близок к идеальному.
Идея в двух шагах. Во-первых, **DCG**: суммируем релевантность документов с логарифмическим дисконтом по позиции - документ на позиции 1 ценится в log(2)/log(2)=1 раз, на позиции 2 в log(2)/log(3)≈0.63, на позиции 5 в log(2)/log(6)≈0.39. Во-вторых, нормируем на **IDCG** - DCG идеального ранжирования.
**NDCG vs Precision@k.** Precision@k считает документ либо релевантным, либо нет. NDCG поддерживает **грaded relevance** - оценки 0, 1, 2, 3. Это важно: документ с оценкой 3 и с оценкой 1 нельзя ставить в один ряд. NDCG лучше коррелирует с удовлетворённостью пользователей.
NDCG@5 = 0.95 означает:
MAP: Mean Average Precision
NDCG требует многоуровневых оценок релевантности. MAP работает с бинарной релевантностью: документ либо релевантен (1), либо нет (0). Зато MAP хорошо отражает recall: важно не просто найти релевантный документ, но найти **все** релевантные документы.
**Average Precision (AP)** для одного запроса: считаем precision в каждой позиции, где встречается релевантный документ, и усредняем. **MAP** - среднее AP по всем запросам в тестовом наборе.
**MAP vs NDCG на практике.** MAP хорошо работает для оценки recall-ориентированных систем (нужно найти все релевантные документы - юридический поиск, медицинский). NDCG лучше для precision-ориентированных (нужен один хороший ответ - веб-поиск, Q&A). Большинство систем считают обе метрики.
AP делится на количество релевантных документов (а не найденных). Зачем?
MRR: Mean Reciprocal Rank
Иногда нужна только одна вещь: первый релевантный ответ. FAQ-поиск, прямые ответы, voice assistants - там пользователь хочет один правильный результат как можно выше. **MRR** (Mean Reciprocal Rank) измеряет именно это: на какой позиции первый релевантный документ?
**RR** (Reciprocal Rank) для одного запроса = 1 / позиция_первого_релевантного. Если релевантный на позиции 1 - RR=1.0. На позиции 3 - RR=0.333. Не найден в топ-K - RR=0. **MRR** = среднее RR по всем запросам.
| Метрика | Что измеряет | Когда применять |
|---|---|---|
| NDCG | Качество всего ранжирования с учётом позиции | Веб-поиск, рекомендации |
| MAP | Точность + полнота по всему списку | Юридический поиск, recall-критичные задачи |
| MRR | Позиция первого правильного ответа | FAQ, голосовые ассистенты, Q&A |
**MRR ограничения.** MRR считает только первый релевантный документ и игнорирует все последующие. Если пользователю нужно несколько разных ответов - MRR не отразит качество второго и третьего результата. Для таких задач MAP или NDCG информативнее.
MRR системы A = 0.9, системы B = 0.5. Что это означает на практике?
Онлайн-метрики: CTR, dwell time, abandonment
NDCG, MAP, MRR - офлайн-метрики: они требуют экспертной разметки и не показывают, что реально делают пользователи. **Онлайн-метрики** собираются автоматически из поведения пользователей и дают прямой сигнал о качестве системы в продакшне.
**CTR (Click-Through Rate)** - доля запросов, по которым пользователь кликнул хотя бы на один результат. Высокий CTR - результаты привлекательны. Но CTR легко оптимизировать заголовками - кликбейт повышает CTR, но вредит пользователю.
**Dwell time** - время, проведённое на странице после клика. Короткий dwell (<30 сек) - pogo-sticking: пользователь вернулся обратно, документ не помог. Длинный dwell (>2 мин) - документ полезен. **Abandonment rate** - доля сессий без кликов и без переформулировки: пользователь сдался.
**A/B тестирование vs офлайн-метрики.** Новый алгоритм ранжирования может улучшить NDCG в офлайн-оценке, но ухудшить CTR в A/B тесте. Причины: оценщики и пользователи расходятся во мнениях, выборки различаются, офлайн-разметка устарела. Финальное решение о деплое принимается по онлайн-метрикам.
Pogo-sticking в контексте поиска - это:
Оценка качества поиска
- NDCG: взвешенный по позиции gain с graded relevance, нормированный на идеальное ранжирование
- MAP: среднее Average Precision - учитывает и позицию, и полноту охвата всех релевантных
- MRR: обратная позиция первого релевантного - для задач типа Q&A и FAQ
- CTR: доля кликнувших сессий; высокий CTR не гарантирует качество
- Dwell time: время на странице после клика; <30 сек = pogo-sticking, документ не помог
- Abandonment rate: не кликнул и не переформулировал - пользователь сдался; <10% норма
Связанные темы
Метрики оценки нужны для измерения всего IR pipeline - от индексирования до ранжирования.
- Query Autocomplete и Suggest — Suggest тоже оценивается через MRR и CTR
- Ранжирование и BM25 — Алгоритмы ранжирования, качество которых измеряется NDCG/MAP
- Learning to Rank — ML-подход к ранжированию, оптимизирующий NDCG напрямую
Вопросы для размышления
- Почему рост NDCG в офлайн-оценке не всегда коррелирует с улучшением CTR в A/B тесте?
- Как position bias искажает интерпретацию CTR и как это корректируется?
- В каких продуктах abandonment rate является нормой, а не проблемой?