Normalized Discounted Cumulative Gain(归一化折损累计增益)
NDCG用作排序结果的评价指标,评价排序的准确性。
推荐系统通常为某用户返回一个item列表,假设列表长度为K,这时可以用NDCG@K评价该排序列表与用户真实交互列表的差距。
C G K = ∑ i = 1 K r e l i C G_{K}=\sum_{i=1}^{K} r e l_{i} CGK=i=1∑Kreli
考虑一个长度为K的列表, r e l i rel_i reli代表 i i i位置物品的相关度。(在推荐系统里就是0、1)
这个评价指标有一个问题,我推荐的物品聚集在列表的尾部和头部得分一样,这不合适。
DCG提出如果有效结果在列表中排的较低的话,应该对列表的评分惩罚,惩罚和有效结果的排位有关。所以就加了衰减因子:
D C G p = ∑ i = 1 p r e l i log 2 ( i + 1 ) = r e l 1 + ∑ i = 2 p r e l i log 2 ( i + 1 ) D C G_{p}=\sum_{i=1}^{p} \frac{r e l_{i}}{\log _{2}(i+1)}=r e l_{1}+\sum_{i=2}^{p} \frac{r e l_{i}}{\log _{2}(i+1)} DCGp=i=1∑plog2(i+1)reli=rel1+i=2∑plog2(i+1)reli
或者
D C G p = ∑ i = 1 p 2 r e l i − 1 log 2 ( i + 1 ) D C G_{p}=\sum_{i=1}^{p} \frac{2^{r e l_{i}}-1}{\log _{2}(i+1)} DCGp=i=1∑plog2(i+1)2reli−1
后一个公式广泛在工业界用。当得分是0/1,即 r e l i ∈ { 0 , 1 } r e l_{i} \in\{0,1\} reli∈{0,1}时,二者是等价的。
DCG没有考虑到推荐列表和每个检索中真正有效结果(test items list)的个数,所以最后引入NDCG,就是标准化后的DCG。
N D C G k = D C G k I D C G k N D C G_{k}=\frac{D C G_{k}}{I D C G_{k}} NDCGk=IDCGkDCGk
其中 I D C G IDCG IDCG是指ideal DCG,即完美结果下的DCG。
比如给用户推荐7部电影: M 1 , M 2 , M 3 , M 4 , M 5 , M 6 , M 7 M_{1}, M_{2}, M_{3}, M_{4}, M_{5}, M_{6}, M_{7} M1,M2,M3,M4,M5,M6,M7
该用户对这七部电影的评分是: 5 , 3 , 2 , 1 , 2 , 4 , 0 5, 3, 2, 1, 2, 4, 0 5,3,2,1,2,4,0
那么完美的推荐结果应该是按评分排序的: 5 , 4 , 3 , 2 , 2 , 1 , 0 5,4,3,2,2,1,0 5,4,3,2,2,1,0,所以此时的IDCG:
I D C G 5 = 2 5 − 1 log 2 2 + 2 4 − 1 log 2 3 + 2 3 − 1 log 2 4 + 2 2 − 1 log 2 5 + 2 2 − 1 log 2 6 = 31 + 9.5 + 3.5 + 1.3 + 1.2 = 46.5 I D C G_{5}=\frac{2^{5}-1}{\log _{2} 2}+\frac{2^{4}-1}{\log _{2} 3}+\frac{2^{3}-1}{\log _{2} 4}+\frac{2^{2}-1}{\log _{2} 5}+\frac{2^{2}-1}{\log _{2} 6}\\=31+9.5+3.5+1.3+1.2=46.5 IDCG5=log2225−1+log2324−1+log2423−1+log2522−1+log2622−1=31+9.5+3.5+1.3+1.2=46.5
所以 N D C G : NDCG: NDCG:
N D C G 5 = D C G 5 I D C G 5 = 38.5 46.5 = 0.827 N D C G_{5}=\frac{D C G_{5}}{I D C G_{5}}=\frac{38.5}{46.5}=0.827 NDCG5=IDCG5DCG5=46.538.5=0.827
P r e c i s i o n = 预 测 正 确 的 推 荐 列 表 长 度 Precision = \frac{预测正确的}{推荐列表长度} Precision=推荐列表长度预测正确的
R e c a l l = 预 测 正 确 的 用 户 实 际 点 击 列 表 长 度 Recall = \frac{预测正确的}{用户实际点击列表长度} Recall=用户实际点击列表长度预测正确的
H R = 测 试 集 中 的 i t e m 出 现 在 T o p − N 推 荐 列 表 中 的 用 户 数 量 用 户 总 数 HR = \frac{测试集中的item出现在Top-N推荐列表中的用户数量}{用户总数} HR=用户总数测试集中的item出现在Top−N推荐列表中的用户数量