在上文(https://blog.csdn.net/burstone/article/details/143666876)中,介绍了两个基础的准确率与召回率,本文介绍两个推荐系统中非常重要的两个评价指标:MAP与NDCG,这两个指标与之前的略有不同,它考虑了推荐结果命中用户偏好的位置。例如,对于一个用户,两次推荐结果R1与R2都命中了三个用户感兴趣的项目,哪个更好呢,肯定是top3结果是三个感兴趣项目的是最好的。因而,本文给出几个量化指标。下面分别介绍:
精度均值(Average Precision, AP):
先介绍单个用户下的精度定义:AP(Average Precision),它衡量的是推荐系统对于单个用户的排序质量,AP表示了对一个给定的用户,其推荐列表中相关项目的平均精度。具体地,每次出现相关项目时的精度值,然后取这些精度值的平均。精度(Precision)在这里是指在推荐列表中,用户感兴趣的项目所占的比例。
假设给用户u推荐了N个项目,其中M个是相关的,P(k)表示第k个相关项目出现时的准确率。则AP的形式化定义如下:
AP = 1 M ∑ k ∈ R e l e v a n t P ( k ) \text{AP} = \frac{1}{M}\sum_{k\in Relevant}P(k) AP=M1∑k∈RelevantP(k)
可见,AP考虑了推荐列表中项目的位置,因此它是一个“顺序敏感”的指标,即推荐列表中相关项目的位置越靠前,其对AP的贡献越大。下面举例说明:
例如,对于一个用户,其真实的兴趣列表中有3个项目,推荐系统为该用户推荐了长度为6的项目集:[1, 0, 1, 0, 1, 0],其中三个1表示用户感兴趣的。那么,对于这个用户,其AP值计算如下:
● Precision@1 = 1/1(如果第一个推荐项目是用户感兴趣的)
● Precision@3 = 2/3(如果前三个推荐项目中有二个是用户感兴趣的)
● Precision@5 = 3/5(如果前五个推荐项目中有三个是用户感兴趣的)
因此,该用户的AP值 = (1 + 0.67 + 0.6) / 3 = 0.76。
通常地,AP值越大,说明推荐系统对于该用户的相关项目排序越靠前,推荐效果越好。
平均精度均值(Mean Average Precision, MAP):
有了上述AP的概念,MAP非常简单了。假设用户集合为U,|U|表示用户的总数,因而,MAP是所有用户下AP的平均:
MAP = 1 | U | ∑ i ∈ ∣ U ∣ A P ( u i ) \text{MAP} = \frac{1}{|U|}\sum_{i\in |U|}AP(u_i) MAP=|U|1∑i∈∣U∣AP(ui)
如果有多个用户,可以计算所有用户的AP值的平均,得到整体的MAP(Mean Average Precision)值。
DCG与DNCG是两个常见的用来量化排序结果的评价指标。我们先从CG这个基础指标开始介绍,然后讲解DCG与NDCG。
累积增益(Cumulative Gain, CG)
CG表示推荐系统给出的前p个结果下,与用户感兴趣程度的相关性总和,计算公式如下:
C G p = ∑ i = 1 p r e l i CG_p=\sum_{i=1}^{p}rel_i CGp=∑i=1preli
其中,rel_i表示了每i个结果的相关性分数(典型地,0为不相关,1为相关)。可见,对用户的一次推荐而言,CG越大,推荐效果越好。
折扣累积增益(Discounted Cumulative Gain, DCG)
仔细分析CG,对于两个推荐结果(1,0,1,0,0)与(0,0,0,1,1),其CG值是相同的,因为都包含了两个1,然而,显而易见,每一个推荐结果更好。其实是由于CG并未考虑每个项目所在的位置。因而有了下面DCG与NDCG。
DCG考虑了排序顺序的因素,即排名靠前的项目对用户更有价值,因此对排名靠后的项目进行折损。推荐系统给出的前p个结果下,DCG的计算公式如下:
D C G p = ∑ i = 1 p r e l i l o g 2 ( i + 1 ) DCG_p=\sum_{i=1}^{p}\frac{rel_i}{log_2(i+1)} DCGp=∑i=1plog2(i+1)reli
可见,DCG是在CG的计算公式基础上加了一个分母,排名靠前(i越小)的结果赋予更高的权重,DCG更大。
NDCG(Normalized Discounted Cumulative Gain)
注意到,DCG其实并不是一个介于0到1的值,因而,多次查询的DCG值的scale不同,并不便于比较。为此,提出了NDCG,它是归一化的DCG,它通过将DCG与理想情况下的DCG(称之为IDCG)进行比较来得到一个标准化的评分,从而可以跨不同查询和不同长度的列表进行比较。IDCG一般定义为最符合(最理想)用户偏好的推荐结果 r 1 , r 2 , . . . , r p r_1, r_2, ..., r_p r1,r2,...,rp,按DCGp的公式计算得到结果为IDCG。这样,NDCG的定义如下:
N D C G p = D C G p I D C G p NDCG_p=\frac{DCG_p}{IDCG_p} NDCGp=IDCGpDCGp
可以发现,NDCG值越大,越接近1表示排序质量越好。
实例
下面,使用一个简单的例子来解释,假设推荐系统对用户A有两次推荐结果,每个结果包含5个项目(item)如下:
R
1
=
(
0
,
1
,
1
,
0
,
1
)
R_1=(0, 1, 1, 0, 1)
R1=(0,1,1,0,1)
R
2
=
(
0
,
0
,
1
,
1
,
1
)
R_2=(0, 0, 1, 1, 1)
R2=(0,0,1,1,1)
,其中0表示不相关,1表示相关。而理想的推荐结果为结果中top3全部为用户感兴趣的:
R i d e a l = ( 1 , 1 , 1 , 0 , 0 ) R_{ideal}=(1, 1, 1, 0, 0) Rideal=(1,1,1,0,0)
肉眼可见,R1结果更优,因为它推荐出来相关的项目更靠前。因而,可以计算
● CG值:R1与R2的CG值如下:
C
G
R
1
=
0
+
1
+
1
+
0
+
1
=
3
CG_{R1}=0+1+1+0+1=3
CGR1=0+1+1+0+1=3
C
G
R
2
=
0
+
0
+
1
+
1
+
1
=
3
CG_{R2}=0+0+1+1+1=3
CGR2=0+0+1+1+1=3
从上式看,两个CG值完全相同,不能客观地评价推荐结果的好坏。
● DCG值:
D
C
G
R
1
=
0
+
1
l
o
g
2
(
2
+
1
)
+
1
l
o
g
2
(
3
+
1
)
+
0
+
1
l
o
g
2
(
5
+
1
)
=
1.52
DCG_{R1}=0+\frac{1}{log_2(2+1)}+\frac{1}{log_2(3+1)}+0+\frac{1}{log_2(5+1)}=1.52
DCGR1=0+log2(2+1)1+log2(3+1)1+0+log2(5+1)1=1.52
D
C
G
R
2
=
0
+
0
+
1
l
o
g
2
(
3
+
1
)
+
1
l
o
g
2
(
4
+
1
)
+
1
l
o
g
2
(
5
+
1
)
=
1.32
DCG_{R2}=0+0+\frac{1}{log_2(3+1)}+\frac{1}{log_2(4+1)}+\frac{1}{log_2(5+1)}=1.32
DCGR2=0+0+log2(3+1)1+log2(4+1)1+log2(5+1)1=1.32
从上式可以看出来, C G R 1 CG_{R1} CGR1更大,表示它的结果更好,也符合我们的预期
● NDCG值:
I
D
C
G
=
1
l
o
g
2
(
1
+
1
)
+
1
l
o
g
2
(
2
+
1
)
+
1
l
o
g
2
(
3
+
1
)
+
0
+
0
=
2.13
IDCG=\frac{1}{log_2(1+1)}+\frac{1}{log_2(2+1)}+\frac{1}{log_2(3+1)}+0+0=2.13
IDCG=log2(1+1)1+log2(2+1)1+log2(3+1)1+0+0=2.13
所以,
I
D
C
G
R
1
=
D
C
G
R
1
I
D
C
G
=
1.52
2.13
=
0.71
IDCG_{R1}=\frac{DCG_{R1}}{IDCG}=\frac{1.52}{2.13}=0.71
IDCGR1=IDCGDCGR1=2.131.52=0.71
I
D
C
G
R
2
=
D
C
G
R
2
I
D
C
G
=
1.32
2.13
=
0.62
IDCG_{R2}=\frac{DCG_{R2}}{IDCG}=\frac{1.32}{2.13}=0.62
IDCGR2=IDCGDCGR2=2.131.32=0.62
从这个例子可以看到,NDCG是DCG的归一化版本,取值范围为[0, 1],因而提供了一个标准化的评价指标,使得不同的推荐结果进行公平地对比。对一个推荐系统而言,搜集一批推荐结果,以及理想的推荐结果,可以计算其NDCG,从而对系统进行量化的评价。