NDCG解决的不是“前K个结果有没有命中”这么简单,而是带分级相关性的排序是否把更相关的结果放在更靠前的位置。计算先从DCG开始。采用指数增益版本时,第i位的贡献是二的相关性分数次方减一,再除以log二的i加一。相关性越高,增益越大;位置越靠后,折扣越强。
IDCG使用同一批候选和同一组相关性标签,只是把标签按从高到低排列,再按相同公式计算。这代表当前候选集合在截断位置k下能达到的理想排序得分。NDCG就是实际DCG除以IDCG,用理想值归一化后,不同查询的原始增益规模更容易比较。若一个查询在k以内所有标签都为零,IDCG也为零,系统必须预先规定跳过该查询还是把结果记为零。
用相关性三、二、三、零、一的五个结果复算。首位相关性三的增益是七。位置二相关性二的贡献是三除以log二的三,约一点八九。位置三相关性三的贡献是七除以log二的四,也就是三点五。第四位为零没有贡献,第五位贡献是一除以log二的六,约零点三九。相加得到DCG约十二点七八。
理想顺序是三、三、二、一、零。对应贡献是七,加七除以log二的三,再加三除以log二的四,以及一除以log二的五,结果约十三点三五。因此NDCG约等于十二点七八除以十三点三五,也就是零点九五八。旧结果若写成IDCG十五点八九和NDCG零点八,和给定公式并不一致。
搜索中,NDCG适合评估多级人工相关性;推荐中可以把不同强度的反馈映射为gain,但映射规则要固定。它不是Recall@K,后者更关心相关项目有没有被召回。一个系统可能召回很差却把少数已召回结果排得很好,也可能召回足够但头部顺序不佳,所以常把Recall、NDCG、MRR和线上指标一起看。
落地时还要固定标签尺度、gain公式、折扣函数、候选集合和截断k,并检查标注一致性。不同团队若一个使用线性gain、另一个使用指数gain,数字不能直接比较。对无点击曝光数据还要考虑位置偏差,不能把历史点击原样当成无偏相关性。
汇总多个查询时还要说明采用宏平均还是按查询权重加权。宏平均让每个查询贡献相同,流量加权更接近线上分布,却可能掩盖长尾退化。报告时最好同时给均值、分桶结果和置信区间,避免单个总数隐藏问题。