← 返回题目列表

排序模型常用的 NDCG、MAP 怎么理解?

中等 第 24 / 25 题 更新于 2026/09/25
模型评估机器学习面试题模型训练
学习 AI 实战项目

简化版

NDCG 用位置折损累计分级相关性,再除以同一候选集合的理想 DCG,适合多级相关标签;MAP 先对每个 query 计算 AP,再做跨 query 平均,常用于二元相关检索。两者都必须按 query 分组,并固定截断位置 K、候选集、无相关结果 query 的处理及公式口径。

详细版

  • NDCG 重视顶部且支持 graded relevance。

  • IDCG=0 的查询需定义跳过或记零。

  • AP 只在相关结果位置累加 Precision@i;使用 AP@K 时还要明确分母是全部相关数还是 min(R,K)。

  • 宏平均让每个 query 权重相等。

  • 指标口径需固定去重、候选集和未标注处理。

完整版教学

一、排序指标同时编码位置与相关性

DCG 让排在前面的高相关结果贡献更大,NDCG 用理想排序归一化,便于不同相关结果数量的 query 比较。

AP 衡量相关文档被逐步找回时的精确率,错误排在早期会拖累后续相关位置。

二者都先在单个 query 内计算再跨 query 聚合,因此候选集、相关标签和无相关结果 query 的处理必须保持同一口径。

二、底层机制与公式

DCG@K=sum_i (2^rel_i-1)/log2(i+1)
NDCG=DCG/IDCG
AP@K=(sum_{i=1..K} Precision@i*rel_i)/R

这里 rel_i∈{0,1},本题约定 R 为评测候选集中该 query 的全部相关结果数。部分实现用 min(R,K) 作 AP@K 分母,两种定义在 R>K 时结果不同,面试和实验报告都应写明口径。NDCG 的增益也可用 rel_i 而非 2^rel_i-1,折损也有其他定义;比较模型时必须保持一致。

三、带数字的推演

采用 gain=2^rel-1、discount=log2(i+1)。相关等级 [3,0,2] 排在前三时,DCG@3=7/log2(2)+0+3/log2(4)=8.5。理想顺序 [3,2,0] 的 IDCG@3=7+3/log2(3)≈8.893,所以 NDCG@3≈8.5/8.893≈0.956。这个数只在上述增益、折损和截断口径下成立。

四、方案对比

方案/对象核心特点代价或边界
NDCG分级相关+位置折损需定义 gain/discount
MAP二元相关、整体召回过程不表达相关等级
MRR只关心首个相关结果忽略后续结果

五、执行流程

按 query 构造候选/标签 -> 排序并截断 K -> 每 query 算指标
-> 处理无相关 query -> 宏/加权汇总 -> 按头尾查询切片

六、边界条件与工程代价

离线未标注不等于不相关;曝光偏差会让旧策略顶部标签更完整,新模型新结果被低估。

不同候选集上 NDCG 不可直接比较,召回阶段变化时应固定评测池或联合报告召回。

记忆钩子:NDCG 看“高相关是否靠前”,MAP 看“每次找回相关结果时有多准”。

七、常见误区与追问

  • 误区:NDCG 只适合二元标签。 它的优势正是支持分级相关。

  • 追问:为什么要归一化? 不同 query 的理想收益不同。

  • 误区:MAP 是把所有结果混在一起算 precision。 先按 query 算 AP,再平均。

  • 追问:IDCG=0 怎么办? 预先规定跳过或记零并报告数量。

  • 追问:K 为什么重要? 业务展示位置有限,折损与截断直接改变目标;AP@K 的分母约定也可能随实现不同。

八、加强记忆

NDCG 看“高相关结果是否靠前”,MAP 看“每次找回相关结果时有多准”。两者都先按 query 算,再跨 query 汇总。回答时还要主动声明 K、候选集、无相关 query 的处理;NDCG 要声明 gain/discount,AP@K 要声明分母。公式口径不同的分数不能直接横向比较。