在上文(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=1M∑k∈RelevantP(k)\text{AP} = \frac{1}{M}\sum_{k\in Relevant}P(k)AP=M1​∑k∈Relevant​P(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∣AP(ui)\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个结果下,与用户感兴趣程度的相关性总和,计算公式如下:

CGp=∑i=1preliCG_p=\sum_{i=1}^{p}rel_iCGp​=∑i=1p​reli​

其中,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的计算公式如下:

DCGp=∑i=1prelilog2(i+1)DCG_p=\sum_{i=1}^{p}\frac{rel_i}{log_2(i+1)}DCGp​=∑i=1p​log2​(i+1)reli​​

可见,DCG是在CG的计算公式基础上加了一个分母,排名靠前(i越小)的结果赋予更高的权重,DCG更大。

NDCG(Normalized Discounted Cumulative Gain)

注意到,DCG其实并不是一个介于0到1的值,因而,多次查询的DCG值的scale不同,并不便于比较。为此,提出了NDCG,它是归一化的DCG,它通过将DCG与理想情况下的DCG(称之为IDCG)进行比较来得到一个标准化的评分,从而可以跨不同查询和不同长度的列表进行比较。IDCG一般定义为最符合(最理想)用户偏好的推荐结果r1,r2,...,rpr_1, r_2, ..., r_pr1​,r2​,...,rp​,按DCGp的公式计算得到结果为IDCG。这样,NDCG的定义如下:

NDCGp=DCGpIDCGpNDCG_p=\frac{DCG_p}{IDCG_p}NDCGp​=IDCGp​DCGp​​

可以发现,NDCG值越大,越接近1表示排序质量越好。

实例

下面,使用一个简单的例子来解释,假设推荐系统对用户A有两次推荐结果,每个结果包含5个项目(item)如下:
R1=(0,1,1,0,1)R_1=(0, 1, 1, 0, 1)R1​=(0,1,1,0,1)
R2=(0,0,1,1,1)R_2=(0, 0, 1, 1, 1)R2​=(0,0,1,1,1)
,其中0表示不相关,1表示相关。而理想的推荐结果为结果中top3全部为用户感兴趣的:

Rideal=(1,1,1,0,0)R_{ideal}=(1, 1, 1, 0, 0)Rideal​=(1,1,1,0,0)

肉眼可见,R1结果更优,因为它推荐出来相关的项目更靠前。因而,可以计算

● CG值:R1与R2的CG值如下:
CGR1=0+1+1+0+1=3CG_{R1}=0+1+1+0+1=3CGR1​=0+1+1+0+1=3
CGR2=0+0+1+1+1=3CG_{R2}=0+0+1+1+1=3CGR2​=0+0+1+1+1=3

从上式看,两个CG值完全相同,不能客观地评价推荐结果的好坏。

● DCG值:
DCGR1=0+1log2(2+1)+1log2(3+1)+0+1log2(5+1)=1.52DCG_{R1}=0+\frac{1}{log_2(2+1)}+\frac{1}{log_2(3+1)}+0+\frac{1}{log_2(5+1)}=1.52DCGR1​=0+log2​(2+1)1​+log2​(3+1)1​+0+log2​(5+1)1​=1.52
DCGR2=0+0+1log2(3+1)+1log2(4+1)+1log2(5+1)=1.32DCG_{R2}=0+0+\frac{1}{log_2(3+1)}+\frac{1}{log_2(4+1)}+\frac{1}{log_2(5+1)}=1.32DCGR2​=0+0+log2​(3+1)1​+log2​(4+1)1​+log2​(5+1)1​=1.32

从上式可以看出来,CGR1CG_{R1}CGR1​更大,表示它的结果更好,也符合我们的预期

● NDCG值:
IDCG=1log2(1+1)+1log2(2+1)+1log2(3+1)+0+0=2.13IDCG=\frac{1}{log_2(1+1)}+\frac{1}{log_2(2+1)}+\frac{1}{log_2(3+1)}+0+0=2.13IDCG=log2​(1+1)1​+log2​(2+1)1​+log2​(3+1)1​+0+0=2.13

所以,
IDCGR1=DCGR1IDCG=1.522.13=0.71IDCG_{R1}=\frac{DCG_{R1}}{IDCG}=\frac{1.52}{2.13}=0.71IDCGR1​=IDCGDCGR1​​=2.131.52​=0.71
IDCGR2=DCGR2IDCG=1.322.13=0.62IDCG_{R2}=\frac{DCG_{R2}}{IDCG}=\frac{1.32}{2.13}=0.62IDCGR2​=IDCGDCGR2​​=2.131.32​=0.62

从这个例子可以看到,NDCG是DCG的归一化版本,取值范围为[0, 1],因而提供了一个标准化的评价指标,使得不同的推荐结果进行公平地对比。对一个推荐系统而言,搜集一批推荐结果,以及理想的推荐结果,可以计算其NDCG,从而对系统进行量化的评价。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐