一、定义与公式
P@K 全称是 Precision at K,即“前K个结果的精确率”。
它衡量的就是:在系统返回的排名列表里,只看前 K 个结果,其中有多少是相关的。
公式非常简单:

-
如果总结果数不足 K 个,通常就按实际数量计算。
-
值域是 0 到 1,越高说明前 K 个结果里“干货”越密集。
二、计算举例
假设某次查询,系统返回前 5 个结果如下(✅ 相关,❌ 不相关):
| 排名 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 相关性 | ✅ | ❌ | ✅ | ✅ | ❌ |
-
P@3:看前 3 个,相关文档在第 1、3 位,共 2 个 → P@3 = 2/3 ≈ 0.67
-
P@5:看前 5 个,相关文档在第 1、3、4 位,共 3 个 → P@5 = 3/5 = 0.6
你会发现,P@K 只关心相关文档的数量,完全不管它们在 K 里面的具体排序。第 1 位和第 K 位对 P@K 的贡献完全一样。
三、和MRR、MAP 对比
可以这样理解:
-
MRR(单兵):只关心“第一个冲过去的士兵”排在第几位。第1位和第5位天差地别。
-
MAP(团队):关心“所有士兵的整个队形”是否整体尽量靠前,精确率随着每个相关士兵的位置动态计算。
-
P@K(阵地内点名):完全不关心过程和队形,只管“在前 K 个冲过线的士兵里,清点一下有多少是自己人”。只要在这 K 个里面,无论你是第1个还是第K个,价值相同。
具体区别见下表:
| 指标 | 关心范围 | 是否关心内部排序 | 对相关文档遗漏的态度 |
|---|---|---|---|
| MRR | 只看第 1 个相关文档 | 极度敏感,排名越前越好 | 完全忽略其他相关文档 |
| MAP | 所有相关文档 | 敏感,越靠前,对 AP 贡献越大 | 惩罚遗漏,遗漏越多 AP 越低 |
| P@K | 只看前 K 个结果 | 不敏感,在 K 内的排序不影响分数 | 只看 K 内,K 外任何相关文档都不管 |
四、应用场景与局限
适用场景:
-
搜索结果首页评估:用户通常很少翻页,所以 P@10 或 P@20 直接反映首页的“含金量”。
-
推荐系统的“首屏”评估:衡量用户第一眼看到的东西里,有多少是感兴趣的。
-
需要简单对比的场景:只给一个数字,清晰明了。
主要局限性:
-
不考虑排序:两个系统 P@5 相同,但一个把最好的全放在第 4、5 位,另一个放在 1、2 位,P@5 看不出差别。
-
K 值难以确定:K 选小了(如 P@1),等同于只看第一个,丧失信息;K 选大了,又可能稀释掉排序顶部优势。
-
忽略召回:一个查询总共有 10 个相关文档,系统 A 前 5 个里塞了 5 个相关(P@5=1.0),系统 B 前 5 个只找到 3 个相关(P@5=0.6),但 B 把另外 7 个都排在 6-10 位,A 完全遗漏了它们。P@5 会认为 A 更好,但如果用户想看全,B 可能更优。
五、P@K 与 MAP 的关系
MAP 计算中的 AP(平均精确率),就是在多个“截断位置”上的精确率平均值。实际上:
-
AP 可以理解为:在每个相关文档出现的位置,计算一次 P@(该位置),然后取平均。
-
而固定 K 的 P@K,只是 AP 计算过程中某一个点的快照。
所以,P@K 是构成更全面指标(如 MAP)的基本“积木”。当评估要求非常简单,只需要一句“用户只看前 K 个结果,里面有多少是想要的”时,P@K 就是最直接、最实用的回答。