整体说明
- 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的推荐物品总数} $$
- 用户粒度HitRate@K,也称为二值命中率(Binary Hit Rate):
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\)