归一化折损累计增益(NDCG, Normalized Discounted Cumulative Gain)是一种针对排序的评价指标,用于评价排序的准确性。在推荐系统中通常为某用户返回一个物品列表,假设列表长度为\(K\),这时可以用\(NDCG@K\)评价该排序列表与用户真实交互列表的差距。
计算
累计增益CG
\[ CG_{K} = \sum_{i=1}^{K}r_{i} \]
\(CG_K\)(\(CG@K\))是推荐列表中所有物品的相关性综合,\(r\)表示相似性分数,对应数据集中的打分,比如在显式的打分数据集中,分数取值就是\(r \in [0,5]\),而在隐式数据集中打分的取值就是\(r \in \{0,1\}\)。
折损累计增益DCG
DCG在CG的基础上提出了在推荐列表的靠后的位置出现了相关性排名较高的物品时,应该对评分给予惩罚。
\[ DCG_K = \sum_{i=1}^{k} \frac{r_i}{\log{(i+1)}} \]
还有一种比较常用的公式:
\[ DCG_K = \sum_{i=1}^{K} \frac{2^{r_i}-1}{\log{(i+1)}} \]
后一个公式在工业中被广泛使用,如多数的搜索公司和 Kaggle 等数据科学竞赛平台等
当相关性得分\(r \in \{0,1\}\)时,上述两个公式等价。
归一化折损累计增益nDCG
\[ nDCG_k = \frac{DCG_k}{iDCG_k} \]
\(iDCG_k\)时最大累计增益,其计算方法是将所有的物品根据真实数据集上的分数进行排序,然后取前\(K\)个进行计算\(DCG\)所能得到的最大分数。
\[ IDCG_K = \sum_{i=1}^{|REL_K|} \frac{r_i}{\log(i+1)} \]
其中\(REL_K\)代表按相关性从高到低的真实列表中取前\(K\)个物品