NDCG

NDCG是一种在信息检索(IR,information retrieval)中常用的指标衡量方法,在推荐系统中,我们也经常拿他来进行离线测评。下面我会参照Wikipedia,讲一下NDCG到底是什么。

CG

先来看一下“NDCG”里的“CG”,上面是CG(Cumulative Gain)的公式。这里的rel是“reality”的意思,是指在i这个位置上的真实得分。如果用CG来衡量一个搜索结果页,那么最简单的方式就是把用户是否点击作为rel,如果有点击就是1,没有点击就是0,这个时候CG的得分就是一次搜索结果中结果被点击的次数。

用CG作为衡量指标有一些致命的弱点,最大的问题是它只能衡量命中情况,而没有办法把排名因素考虑进来。比如两个搜索结果,同样都被点击了3次,一个是1、3、4,一个是1、5、6,显然第一个要更好(把更适合的结果展示在了前面),而这两个结果的CG是一样的。

DCG

针对上面提出的CG无法衡量排名的这个问题,DCG(Discounted Cumulative Gain)应运而生。可以看到,DCG其实是对CG做了个简单的改进,加了一个分母log(i+1),加了这个分母之后,排名的效果就体现出来了,排序i越靠前,分母越小,DCG的得分越大。而且排名越靠前,分母这个惩罚项也越明显。再看上面那个例子你会发现,结果已经可以很好地用DCG这个指标衡量出来了。

当然,DCG也不是十全十美的,它的问题是,如果两次搜索,展现的结果数量不一样,两个数值就不可比,而NDCG就是来解决这个问题的。

NDCG

要看NDCG,需要先了解一下iDCG,iDCG里的i是指ideal,即“理想情况下的”DCG。还是拿上面那个例子,最理想的情况是什么呢,那就是用户点击了1、2、3三个结果,我们把最好的结果排到了最前面。这个时候计算的DCG就是iDCG。

让我们再来看NDCG,可以发现NDCG其实就是把DCG除以iDCG,而iDCG又是DCG的最优情况,所以其实是做了一个“归一化”。至此,我们也解决了DCG无法衡量两个不等长结果的问题。

在推荐结果的评估时,NDCG其实使用的频率并不高,简单的场景,CG其实就可以很好地衡量离线效果,而复杂的场景,还有Average Precision可以用,这个技术后面再介绍。