这四个是信息检索(IR)和推荐系统中最常用的排序质量评估指标。它们的共同目标是:衡量“把相关结果排在前面”的能力。下面按从简单到复杂的顺序讲清楚。
1. Precision@K(前K个里有多少是相关的)
定义:在返回的前 K 个结果中,相关结果所占的比例。
Precision@K=前K个结果中相关结果的数量K \text{Precision@K} = \frac{\text{前K个结果中相关结果的数量}}{K}Precision@K=K前K个结果中相关结果的数量
例子:返回前 5 个结果,其中 3 个相关 → Precision@5 = 3/5 = 0.6
关注点:准确性——你推出来的东西里,有多少是用户真正想要的。
局限:只看前 K 个,不关心相关结果有没有被漏掉。
2. Recall@K(所有相关结果里,前K个覆盖了多少)
定义:前 K 个结果中覆盖了多少比例的全部相关结果。
Recall@K=前K个结果中相关结果的数量全部相关结果的总数 \text{Recall@K} = \frac{\text{前K个结果中相关结果的数量}}{\text{全部相关结果的总数}}Recall@K=全部相关结果的总数前K个结果中相关结果的数量
例子:系统里一共有 10 个相关结果,前 5 个里命中了 3 个 → Recall@5 = 3/10 = 0.3
关注点:覆盖率——有没有把该找的都找出来。
局限:如果把所有东西都返回,Recall 会很高,但 Precision 很差。所以通常和 Precision 配合看。
Precision 与 Recall 的权衡:
- K 增大 → Recall 通常上升,Precision 通常下降。
- 实际中常用F1@K或P-R 曲线来综合。
3. MRR(平均倒数排名)
定义:对每个查询,看第一个相关结果排在第几位,取倒数;再对所有查询求平均。
MRR=1∣Q∣∑q=1∣Q∣1rankq \text{MRR} = \frac{1}{|Q|}\sum_{q=1}^{|Q|} \frac{1}{\text{rank}_q}MRR=∣Q∣1q=1∑∣Q∣rankq1
其中rankq\text{rank}_qrankq是第qqq个查询中第一个相关结果的位置。
例子:
- 查询1:第一个相关结果排第 2 → 1/2 = 0.5
- 查询2:第一个相关结果排第 1 → 1/1 = 1.0
- 查询3:第一个相关结果排第 4 → 1/4 = 0.25
- MRR = (0.5 + 1.0 + 0.25) / 3 ≈ 0.583
关注点:第一个相关结果出现得有多早。
适用场景:用户通常只关心“找到第一个能用的答案”,比如问答系统、导航、事实查找。
局限:只关心第一个相关结果,后面的相关结果排得再好也不加分。如果一个问题有多个相关答案,MRR 就不太合适。
4. nDCG@K(归一化折损累计增益)
这是最全面、也最常用的排序指标。它同时考虑:
- 相关性等级(不只是相关/不相关,可以分等级)
- 位置越靠前越重要(折损)
- 归一化,方便跨查询比较
分步理解
① CG(累计增益)
前 K 个结果的相关性分数直接相加。
② DCG(折损累计增益)
对每个位置的相关性除以一个随位置增长的折损因子:
DCG@K=∑i=1Krelilog2(i+1) \text{DCG@K} = \sum_{i=1}^{K} \frac{rel_i}{\log_2(i+1)}DCG@K=i=1∑Klog2(i+1)reli
其中relirel_ireli是第iii个结果的相关性分数(可以是 0/1,也可以是 0~4 这样的等级)。
③ IDCG(理想 DCG)
把同一批结果按最理想顺序排列后算出的 DCG。
④ nDCG
nDCG@K=DCG@KIDCG@K \text{nDCG@K} = \frac{\text{DCG@K}}{\text{IDCG@K}}nDCG@K=IDCG@KDCG@K
取值范围 0~1,越接近 1 越好。
例子
假设相关性等级为 3、2、0、1:
| 位置 i | rel_i | 折损 log₂(i+1) | 贡献 |
|---|---|---|---|
| 1 | 3 | 1.000 | 3.000 |
| 2 | 2 | 1.585 | 1.262 |
| 3 | 0 | 2.000 | 0 |
| 4 | 1 | 2.322 | 0.431 |
DCG = 3.000 + 1.262 + 0 + 0.431 = 4.693
理想排序:3, 2, 1, 0
IDCG = 3/1 + 2/1.585 + 1/2 + 0 = 3 + 1.262 + 0.5 = 4.762
nDCG@4 = 4.693 / 4.762 ≈ 0.985
关注点:整体排序质量,尤其是高相关结果有没有排在前面。
优点:支持多级相关性,位置折损合理,归一化后可比。
四个指标对比总结
| 指标 | 关心什么 | 是否考虑位置 | 是否支持多级相关 | 典型场景 |
|---|---|---|---|---|
| Precision@K | 前K个里相关比例 | 只区分前K/后 | 否 | 推荐列表准确率 |
| Recall@K | 相关结果覆盖率 | 只区分前K/后 | 否 | 搜索召回评估 |
| MRR | 第一个相关结果多早出现 | 是 | 否 | 问答、导航 |
| nDCG@K | 整体排序质量 | 是(折损) | 是 | 搜索、推荐排序 |
怎么选?
- 只关心有没有找到→ Recall@K
- 只关心推出来的准不准→ Precision@K
- 只关心第一个正确答案→ MRR
- 关心整个排序列表的质量,且相关性有等级→ nDCG@K
实际工作中,搜索和推荐系统通常同时看多个指标,比如 Recall@20 + nDCG@10,一个看召回,一个看排序。
如果你有具体场景(比如推荐系统、RAG 检索、问答),我可以帮你分析该重点用哪个。