RS——从CG到NDCG评估指标


整体说明

  • CG(Cumulative Gain,累计增益),DCG(Discounted Cumulative Gain,折损累计增益)和NDCG(Normalized Discounted Cumulative Gain,归一化折损累计增益)是信息检索和推荐系统中常用的评估指标,用于衡量排序结果的质量

CG(Cumulative Gain,累计增益)

  • 定义 :单纯对前\( k \)个结果的相关性分数求和,不考虑位置的影响
  • 公式
    $$
    CG@k = \sum_{i=1}^k rel_i
    $$
    • \( rel_i \):第\( i \)个结果的相关性分数(如:0不相关,1相关,2非常相关等)
    • \( rel_i \)的准确性尤为重要,通常使用:
      • 人工标注相关性
      • 线上用户真实行为数据(比如点击为1,长时间观看为2,购买/下单为3,跳过为0)
      • 注:特殊场景下也会使用模型预测值
  • 局限性 :未考虑排序顺序对用户体验的影响(例如,相关结果排在后面对用户价值更低)

DCG(Discounted Cumulative Gain,折损累计增益)

  • 定义 :在CG基础上引入位置折损 ,排名越靠后的结果对总增益的贡献越小
  • 公式(常用版本)
    $$
    DCG@k = \sum_{i=1}^k \frac{rel_i}{\log_2(i+1)}
    $$
    • 折损因子 :\( \log_2(i+1) \) 会随着位置\( i \)增大而降低当前结果的贡献
  • 变体(更强调相关性)
    $$
    DCG@k = \sum_{i=1}^k \frac{2^{rel_i} - 1}{\log_2(i+1)}
    $$
    • 适用于相关性分数差异较大的场景(如0/1/3/5分级)

NDCG(Normalized DCG,归一化折损累计增益)

  • 定义 :将DCG除以理想排序下的DCG(IDCG) ,得到归一化分数(0~1之间)
  • 公式
    $$
    NDCG@k = \frac{DCG@k}{IDCG@k}
    $$
    • \( IDCG@k \):将前\( k \)个结果按相关性从高到低排序后计算的DCG(即理论最大值)
  • 特点
    • 值越接近1,排序越接近理想状态
    • 解决了不同查询间DCG无法直接比较的问题(因为不同查询的IDCG可能不同)

使用场景与示例

  • 适用领域
    • 搜索引擎结果排序
    • 推荐系统(如电影、商品推荐)
    • 问答系统答案排序
  • 示例
    • 查询结果的相关性分数:[3, 2, 3, 0, 1](按当前排序)
    • 计算DCG@3
      $$
      DCG@3 = \frac{3}{\log_2 2} + \frac{2}{\log_2 3} + \frac{3}{\log_2 4} \approx 3 + 1.26 + 1.5 = 5.76
      $$
    • 理想排序的相关性分数:[3, 3, 2] -> \( IDCG@3 \approx 6.43 \)
    • \( NDCG@3 = \frac{5.76}{6.43} \approx 0.90 \)

优缺点

  • 优点
    • 考虑相关性分级和位置因素,更贴近用户实际体验
    • NDCG提供标准化比较,适合不同查询间的评估
  • 缺点
    • 需要人工标注相关性分数(成本高)
    • 对相关性分数的定义敏感(如0/1/2还是0/1/3/5)

附录:推荐系统中的其他评估指标

HitRate@K

  • 通常包含 用户粒度HitRate@K 和 物品粒度HitRate@K 两种
    • 用户粒度HitRate@K,也称为二值命中率(Binary Hit Rate):
      • 对单个用户而言,只要推荐列表(TopK)中有至少一个相关物品则该样本(用户)算作为命中 (即Hit = 1),否则为不命中(即Hit=0)
      • 用户粒度HitRate@K是所有用户命中情况的平均值:
        $$ HitRate@K = \frac{兴趣出现在TopK物品的用户数量}{总用户数量} $$
    • 物品粒度HitRate@K,也称为命中次数占比(Hit Ratio)
      • 对被推荐的单个物品而言,如果是用户喜欢的则视为命中 (即Hit = 1),否则为不命中(即Hit=0)
      • 物品粒度HitRate@K是所有推荐物品命中情况的平均值
        $$ HitRate@K = \frac{总命中物品数量}{总推荐物品数量} = \frac{\sum_{i}命中用户i的物品数量}{\sum_{i}给用户i的推荐物品总数} $$

MRR

  • TLDR:MRR(Mean Reciprocal Rank)是对每个查询的相关文档在推荐列表中排名的倒数的平均值
  • 具体计算方法为:
    $$MRR=\frac{1}{|Q|}\sum_{i=1}^{|Q|}\frac{1}{rank_i}$$
    • \(|Q|\)是查询的总数
    • \(rank_i\)是第\(i\)个查询中第一个相关文档在推荐列表中的排名
    • 如果一个查询在推荐列表中没有相关文档,则该查询对MRR的贡献为\(0\)
  • MRR主要用于衡量推荐系统在返回相关结果时的排序能力,它特别关注第一个相关结果在推荐列表中的位置,能够反映出推荐系统将最相关的项目排在前面的能力
  • 举例:假设用户有3个查询,对应的推荐列表及相关文档的排名如下:
    • 查询1:推荐列表为$$D_3,D_1,D_2$$,其中\(D_1\)是相关文档,排名为\(2\),则该查询的\(\frac{1}{rank}=\frac{1}{2}\)
    • 查询2:推荐列表为$$D_2,D_4,D_1$$,相关文档\(D_2\)排名为\(1\),该查询的\(\frac{1}{rank}=1\)
    • 查询3:推荐列表为$$D_3,D_4,D_5$$,没有相关文档,该查询的\(\frac{1}{rank}=0\)
    • 那么\(MRR = \frac{(\frac{1}{2}+1+0)}{3}=\frac{1.5}{3}=0.5\)

AP & mAP