NDCG指标讲解
NDCG
NDCG是Normalized Discount Cumulative Gain
NDCG可以在搜索和推荐任务中衡量返回的Item列表是否优秀
G-CG-DCG-NDCG
G代表Gain
表示一个列表中的Item的相关性分数,rel(i)表示item(i)相关性得分
Gain=rel(i)
CG就是Cumulative Gain表示对K个item的Gain进行累加
\(CG_k=\sum_{i=1}^krel(i)\)
DCG就是Discount Cumulative Gain 考虑排序的因素,使得排名靠前的item增益更高,对排名靠后的item进行折损
\(DCG_k=\sum^k_{i=1}\frac{rel(i)}{log_2(i+1)}\)
相当于给每个item的相关性打个折扣,item越靠后,折扣越大
IDCG 就是理想的DCG,是根据rel(i)进行降序排列,即排列到最好状态,算出最好排列的DCG,就是IDCG
计算方式为:
\(IDCG=\sum_{i=1}^{|REL|}\frac{2^{rel_i}-1}{log_2(i+1)}\)
K为NDCG@K中的K
NDCG就是归一化的DCG
\(NDCG=\frac{DCG}{IDCG}\)
额外讲一下个人理解,不一定正确:
在普通推荐中,测试集中正样本有一些交互的物品,取之中的k个,若k不足K就剩下的取负样本,把预测结果的分数从大到小排列,每有一个是在正样本中,就对DCG进行累加,IDCG的计算与正样本的排列顺序无关,因为正样本的相关系数都是1,\(IDCG=\sum_{i=1}^{k}\frac{1}{log_2(i+1)}\)
在序列推荐中,因为正样本只有1个,剩下K-1个为抽取的负样本,计算了有K个分数,然后按这个分数从大到小进行排列,若第k个为正样本,则\(DCG=\frac{1}{log_2(k+1)},IDCG=1\),若预测的前K个都没正样本,则这个用户的NDCG=0
参考资料:https://zhuanlan.zhihu.com/p/371432647
除此以外,顺便记录一下推荐系统的其他指标
Recall
\(Recall=\frac{TP}{TP+FN}\)
在推荐系统中:
TP代表推荐列表中正确推荐的项目总数
FN代表未被推荐但用户感兴趣的项目数
所以,Recall实际上就是:
\(Recall=\frac{推荐结果中正确推荐的项目数}{用户实际感兴趣的项目数}\)
但这个不是很适用于序列推荐,因为序列推荐的正确数量就1个,recall非1即0
HR
HR也就是hit rate,用于衡量推荐系统是否能够命中用户的兴趣点,关注的是推荐列表中是否有用户感兴趣的项目,而不考虑推荐列表的排序。
\(HR=\frac{命中用户兴趣项目的用户数}{用户总数}\)
分子表示推荐列表中至少有一个用户感兴趣的项目的用户数量。
这个指标对推荐列表比较敏感,因为只要列表中有命中的就行
在序列推荐中,因为目标只有一个,所以HR=Recall
MRR
MRR是Mean Reciprocal Rank。用于衡量推荐列表中正确结果出现的排序位置,重点关注命中结果的排名靠前程度。它是一个基于位置的指标,与推荐列表的排序密切相关。
对于每个查询(或用户)来说,Reciprocal Rank (RR) 表示第一个相关项目的倒数排名:
\(RR=\frac{1}{第一个正确推荐项目的排名}\)
MRR 是对所有用户的 RR 取平均值:
\(MRR=\frac{1}{N}\sum_{i=1}^N\frac{1}{rank_i}\)
这个适用于序列推荐