Как считаются метрики MAP и MRR в задачах ранжирования
Что проверяют
Может ли кандидат посчитать метрики руками, а не только расшифровать аббревиатуры, и понимает ли, какой продуктовый сценарий стоит за каждой.
Как отвечать
MRR отвечает на вопрос «как быстро пользователь увидит первый релевантный результат». Для запроса берётся позиция первого релевантного документа, вклад равен 1 / rank; если релевантного в выдаче нет, вклад нулевой. Дальше среднее по запросам:
MRR = (1/Q) * Σ 1/rank_q
Пример: два запроса, первый релевантный документ на позиции 1 и на позиции 3. MRR = (1 + 1/3) / 2 ≈ 0.67.
MAP учитывает все релевантные документы. Для одного запроса считается Average Precision: точность берётся на каждой позиции, где стоит релевантный документ, суммируется и делится на общее число релевантных документов R:
AP = (1/R) * Σ P@k * rel(k)
Пример: выдача из пяти документов, релевантные на позициях 1, 3 и 5, всего релевантных R = 3. Тогда P@1 = 1, P@3 = 2/3 ≈ 0.67, P@5 = 3/5 = 0.6, а AP = (1 + 0.67 + 0.6) / 3 ≈ 0.76. MAP это среднее AP по всем запросам.
def average_precision(relevance, total_relevant):
hits, score = 0, 0.0
for i, rel in enumerate(relevance, start=1):
if rel:
hits += 1
score += hits / i
return score / total_relevant if total_relevant else 0.0
average_precision([1, 0, 1, 0, 1], 3) # 0.7555...Когда что применять: MRR для сценариев с одним верным ответом (навигационный поиск, автодополнение, вопрос и ответ), MAP когда релевантных объектов много и важен весь список (поиск документов, рекомендации).
Ограничения назвать обязательно: обе метрики бинарные и градаций релевантности не различают, для этого берут NDCG. MRR игнорирует всё, что идёт после первого попадания. На практике считают срез @k (MAP@10), и заранее договариваются, делить ли AP на число релевантных в коллекции или на число найденных в топ-k, иначе цифры двух команд не сойдутся.
Где спотыкаются
Делят сумму точностей на длину выдачи вместо числа релевантных документов и путают P@k с AP. Вторая классика: считать MRR по всем релевантным документам, тогда как в неё входит только первый.