平均精确率(MAP)全称是 Mean Average Precision,是信息检索和推荐系统中另一个非常基础且重要的评估指标。
MRR只关心第一个正确答案排在哪里。而 MAP 则更全面,它关心的是 所有正确答案是否都排在了列表的前面。
它的核心思想是:在多次查询中,系统返回的相关文档排序质量的平均水平。
一、单次查询的“平均精确率” (Average Precision, AP)
要理解 MAP,必须先搞懂 AP。AP 是针对单个查询的打分,它衡量的是:随着你从上往下浏览搜索结果,每当遇到一个相关文档时,当前“查准率”的平均水平。
计算步骤如下:
-
找出所有相关文档的位置
假设对于某个查询,系统返回了 10 个结果。其中,第 2、4、5、10 位是相关文档(共4个)。 -
计算在“每个相关文档位置”上的精确率
精确率 = 当前已看到的相关文档数 / 已查看的总文档数。-
在第2位:看过了 2 个文档,其中 1 个相关。精确率 = 1/2 = 0.5
-
在第4位:看过了 4 个文档,其中 2 个相关。精确率 = 2/4 = 0.5
-
在第5位:看过了 5 个文档,其中 3 个相关。精确率 = 3/5 = 0.6
-
在第10位:看过了 10 个文档,其中 4 个相关。精确率 = 4/10 = 0.4
-
-
将这些精确率求算术平均
这个查询的 AP = (0.5 + 0.5 + 0.6 + 0.4) / 4 = 2.0 / 4 = 0.5。AP 的值直观上可以理解为:如果我们在随机的一个相关文档处停下来,当前精确率的期望值。AP 值越高,说明所有相关文档越集中地排在列表顶端。
二、MAP 是对所有查询的 AP 求算术平均
有了 AP,MAP 就非常简单了。如果一个测试集有 QQ 个查询,那么:

-
如果某个查询没有相关文档,通常规定其 AP 为 0。
-
MAP 的值域在 0 到 1 之间,越高表示系统在所有查询上,都能稳定地把相关结果排在前面。
三、MAP 与 MRR 的关键区别
| 特性 | MRR (平均倒数排名) | MAP (平均精确率) |
|---|---|---|
| 关注点 | 第一个相关文档的排名 | 所有相关文档的整体排序质量 |
| 适用场景 | 用户急需一个答案,一点即走(如语音问答、事实查询) | 用户希望看到尽可能多的相关信息(如法律检索、文献综述、专利查询) |
| 对后续相关文档 | 完全忽略 | 非常敏感,会奖励把更多相关文档排在前面的系统 |
| 统计本质 | 倒数的算术平均 | AP 是精确率的算术平均,MAP 是 AP 的算术平均 |
举例说明区别:
假设一个查询有 3 个相关文档。
-
系统 A:结果排在第 1、10、20 位。
-
系统 B:结果排在第 5、6、7 位。
看 MRR:系统 A 的 MRR = 1/1 = 1.0;系统 B 的 MRR = 1/5 = 0.2。A 完胜。
看 MAP:系统 A 的 AP 会被第1位的完美精确率拉高,但第10、20位的低精确率会将其拉低,计算得 AP 约 0.44。系统 B 的 AP 计算约 0.52。B 完胜。
这清楚地展示了,MAP 会奖励像系统 B 这样虽然第一个答案不够快,但能把所有答案集中呈现的系统。
四、特点与局限性
-
优点:能综合反映系统在精确率和召回率上的双重表现,对整体排序质量敏感,是一个单一的、直观的标量指标。
-
局限:假设用户有耐心浏览所有相关文档,这在很多现代搜索场景中不成立。同时,它没有考虑相关文档的“分级”(是高度相关还是弱相关),对此有更复杂的指标如 NDCG (归一化折损累计增益)。
总结:MAP 是 AP 的算术平均,AP 是不同召回点上精确率的算术平均。它评估的是一个系统能否“不遗漏、且尽量靠前地”把所有好东西呈现给用户,是信息检索领域衡量排序质量的经典基石。
五、示例
通过一个包含两个查询的简单例子,来完整走一遍 MAP(Mean Average Precision) 的计算流程。
数据准备
假设测试集有两个查询 Q1 和 Q2,系统各返回了 10 个文档。已知的相关文档如下表(✅ = 相关,❌ = 不相关):
| 排名 (Rank) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| Q1 | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| Q2 | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
-
Q1 有 4 个相关文档,位置在:2、4、5、10。
-
Q2 有 3 个相关文档,位置在:1、3、7。
1. 计算 Q1 的 Average Precision (AP)
AP 计算的是:在每个相关文档出现的位置,计算当前的精确率,然后求这些精确率的算术平均。
对于 Q1:
-
位置 2:第一个相关。看了 2 篇,1 篇相关 → 精确率 = 1/2 = 0.5
-
位置 4:第二个相关。看了 4 篇,2 篇相关 → 精确率 = 2/4 = 0.5
-
位置 5:第三个相关。看了 5 篇,3 篇相关 → 精确率 = 3/5 = 0.6
-
位置 10:第四个相关。看了 10 篇,4 篇相关 → 精确率 = 4/10 = 0.4
Q1 的 AP = (0.5 + 0.5 + 0.6 + 0.4) ÷ 4 = 2.0 ÷ 4 = 0.5
2. 计算 Q2 的 Average Precision (AP)
对于 Q2:
-
位置 1:第一个相关。看了 1 篇,1 篇相关 → 精确率 = 1/1
-
位置 3:第二个相关。看了 3 篇,2 篇相关 → 精确率 = 2/3
-
位置 7:第三个相关。看了 7 篇,3 篇相关 → 精确率 = 3/7
Q2 的 AP = (1 + 2/3 + 3/7) ÷ 3≈ 0.6984
3. 计算 MAP
MAP 就是所有查询 AP 的算术平均。

计算得MAP ≈ 0.5992
直观理解
-
Q1 的第一个正确答案在位置 2,MRR 会关注这个 1/2;而 MAP 看到它还有三个相关文档被埋没在较后的位置(5 和 10 的精确率拖了后腿),所以 Q1 的 AP 只有 0.5。
-
Q2 的排序非常出色,第一个就是相关文档,并且全部三个相关文档集中在前 7 位,AP 高达约 0.698。
-
系统整体的 MAP 约 0.6,意味着在两次查询中,系统平均在列表的各个截断点都能保持约 60% 的精确率,是一个对排序质量综合衡量的结果。
可以这样理解:
MRR看单兵响应,MAP看团队素质