【技术分析】六:搜索排序—指标介绍与选择

  • 2019 年 11 月 4 日
  • 筆記

本文原作者:彭江军,经授权后发布。

导语:

这一节将着重说明,怎样定位线上和线下指标之间的差异,对齐线下和线上指标,得到一个大致的关系。优化线下什么指标,对应的能带来线上什么指标的提升。这样可以避免模型上线的风险。因此也是指标的分析也是十分重要的一个问题。

1:指标介绍

在该系列文章1中列举了几种常见的指标,在这里显示的给出分析和计算的过程。

1.1:NDCG

全称: Normalized discounted cumulative gain。 该衡量指标通过这种归一化的折扣的方式来保证头部的排序的准确性

我们从NDCG的计算式子说起(没办法还是得用公式):

这个式子可以拆分成三个部分,CG,DCG,NDCG。

先说CG,代表着Cumulating Gain. 这个一般会配合着位置来用。因为不限定位置的话,对一个排序不管怎么排,它的CG都是一样的。如下图所示:

假设分值在0.8以上label标记为2, 0.5至0.8记为1,0-0.5记为0。(这里是不是看的很奇怪,一般分值在0-1之间都是以0.5作为阈值,将label分成0,1两类。其实阈值的选取的不同,最终分出来正负样本的比例就不同,而AUC就避免了阈值的选取,后面会讲到。这里只是我自己构造的一个例子,方便讲解NDCG的概念)

例子1:一次搜索排序下面共有5个doc,其真实label和预测的label如上所示:

若是算前5个的CG。

Ground truth 的顺序为:Doc_1,Doc_2,Doc_5,Doc_4,Doc_3

Predict 的顺序为:Doc_2,Doc_1,Doc_5,Doc_4,Doc_3

计算可得:

ground truth:CG = (2^1-1)+(2^2-1)+ (2^1-1)+(2^0-1)+ (2^0-1)=5

Predict:CG=(2^1-1)+(2^2-1)+ (2^1-1)+(2^0-1)+ (2^0-1)=5

这里做三点说明:

1:这里的每个样本的gain 的计算是采用了指数的形式,主要为了拉开label 之间的差异,我们当然也可以直接用label值作为gain 加和得到CG。

2:算CG的时候,是以ground truth 的label来计算,所以虽然predict doc_1和doc_2预测反了,但是在算CG的时候仍以ground truth 的label来计算的。

3:CG配合着位置使用的时候,就能体现出来差异,如

Ground truth : CG@1=2^2-1=3

Predict :CG@1=2^1-1=1

这就是Ground 比predict 要好(这个显然,都是Groundtruth 了。)

接下来在说DCG,相比CG而言,多了D。记得在第一节中说到NDCG更注重对头部的评估,就是根据这个D来的。

为了让label大的数值排在前面,或者说为了惩罚大的数值label排在后面,DCG对位置做了相应的discount,也就是让不同位置的discount 不一样,位次越往后惩罚(discount)越大。

这里可以计算出:

Predict:  DCG = (2^1-1)/1+(2^2-1)/1.58+ (2^1-1)/2+(2^1-1)/2.32+ (2^0-1)/2.58=1.551

Groundtruth: DCG = (2^2-1)/1+(2^1-1)/1.58+ (2^1-1)/2+(2^0-1)/2.32+ (2^0-1)/2.58=3.148

这里做三点说明:

1:每个gain后的除数是上图公式的log(i+1)加上位次的数值

2:之所以计算Groundtruth 的DCG,是为了后面的NDCG服务

最后来到NDCG,因为只算DCG的话,长度比较长的排列列表是明显要占优,因为累积更多,所以需要除以Groundtruth的DCG。来进行归一化

于是,预测的排序结果的NDCG值最后就:

NDCG=1.551/3.1486=0.4925

1.2:MAP

全称为Mean Average Precision。MAP是每个主题的平均准确率的平均值。

MAP 是反映系统在全部相关文档上性能的单值指标。系统检索出来的相关文档越靠前(rank 越高),MAP就可能越高。如果系统没有返回相关文档,则准确率默认为0。

例子:一个主题1:有四个相关的doc,分别被排在了1,2,4,7位置。则MAP=(1/1+2/2+3/4+4/7)/4=0.83。

1.3:MRR

全称为Mean Reciprocal Rank。是把标准答案在被评价系统给出结果中的排序取倒数作为它的准确度,对于top的排序做一个discount,保证头部。

例子:一个主题1:有四个相关的doc,分别被排在了1,2,4,7位置。则MRR=(1/1+1/2+1/4+1/7)/4=0.475。

1.4: AUC

AUC 其实是一个极其常用的评价指标,甚至可以单独拿出来进行阐述。我们为了文章的结构的完整性,把它放在了搜索排序评价指标下面来进行阐述。

AUC本身不关注是不是预测的小于某个阈值,它本身就是用来解决阈值的,所以AUC在下图的代码中即使预测的值都大于0.5依旧可以预测出AUC值。和选取某个阈值无关。

下面来描述一下AUC。

AUC:全称Area Under Curve,这里的Curve 指的是ROC曲线。

ROC曲线:横坐标表示伪阳性率(false positive rate)y轴是真阳性率(true positive rate)。计算不同的阈值下的(x,y)所组成的连线。因此ROC曲线可以转化成随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率。

因此,结合AUC和ROC的定义,我们可以得到AUC解决了传统的计算准确度(accuracy)时,必须先设定阈值,将概率转成类别,才能计算accuracy的问题。因为当样本均匀的时候,阈值很好确定,对于2分类问题而言,选0.5就好;但是当样本不均衡的时候,这个阈值就很难去界定,需要手动选择,就意味着风险。而AUC直接把所有的阈值挨个试一遍,生成ROC曲线。因此AUC更加适合对有偏样本的度量。

实际上,我们计算的时候不是直接将所有的阈值都试一遍,计算ROC下面的面积,而是去计算构造正负样本对,计算正负样本对预测正确的个数占总的正负样本对的总数的比值。转化为公式为:

统计ROC曲线计算AUC和这种方式计算的等价性可参看:https://blog.csdn.net/chjjunking/article/details/5933105。

例子:真实的label和预测的label 如下所示:

画出真值表如下:

挨个设定阈值,画出ROC曲线

其实我们可以直接通过构造正负样本对方式来计算AUC。

由将样本编号为:doc1-doc8,doc1-dc4为正样本,doc5-doc8为负样本。

正负样本对有4*4=16个,统计正负样本对里面预测对的个数为10个,可得到为AUC=0.625。

2:线上线下指标对齐分析

下面以最近做的一个项目进行分析机器学习常见的一个预测线下线上对不齐的问题。

具体项目的背景及机器学习建模见:

2.1:问题的产生

在做模型的过程中发现线上指标和线下对不齐的问题。某个平台下的两个模型的实验结果如下图所示:

这里,计算NDCG,MAP,MRR的时候我们以0-3(无点击,短点击,中点击,长点击)四类label来计算。计算长点击的AUC和GAUC的时,label是按照有无长点击进行计算的;同理,计算点击的AUC和GAUC的时,label是按照有无点击(里面包含短中长点击)进行计算的。线上的指标CTR代表点击率,CVR代表转化率,LCVR代表长转化率。不同的前缀是出于不同的对比对比设置的,但都是立足于长转化率的。

可以发现在计算4类label计算的时候,发现有下面两个现象:

1:模型1的MAP,NDCG,MRR均高于模型2,但是并不能长转化率的提升,线上线下对不齐。

2:从AUC的数值上来看,模型1不管是在长点击的AUC还是点击的AUC都远远的高于模型二,为什么上线后模型1的长点击并没有提升。

2.2:问题的定位

定位了很久,后来想到用模型预测的平均位置来解释。如下图所示:

针对2.1里面的问题1:我们发现模型1会倾向于将整体的点击预测的更好(对应的图中有点击的预测平均位),而对于长点击的预测平均位确实低于模型2的。所以从预测的平均位置上而言,可以看到模型1对于点击的预测效果更好,因此点击的AUC高。这里是不是以为预测的平均位置也可以作为一个衡量排序好坏的指标(我觉得其实是可以的,但是这个指标是离散的,从优化的角度并不好优化,但是离线评估时候应该是可以用的)。

这个时候我们再结合样本的分布图来看。

会发现在我们构造的四类样本中,长点击的占比占总体点击的并不高,从而导致一个模型对于点击的预测效果好,那么整体的NDCG值就会高,这和指标图中NDCG,MAP,MRR等指标和点击的AUC保持一致可以看出来。

问题1至此可以得到解答,因为label的构造中,长点击的总量不占优,导致NDCG值并不能很好反应这种label设置的长点击的效果。

问题2:在前面的表中,我一直没有谈有一个指标GAUC的。在琢磨好久之后,才找到了GAUC的。后面在准备写这系列文章的时候,发现公司已经有好几篇博文中已经提到并且用了GAUC作为评价的指标。

在上面的图中,我们会发现GAUC是可以和线上保持一致的,而AUC是失效的。这就回答了第二个问题。接下来将花一个小段详细介绍GAUC和AUC的区别。

3:GAUC

GAUC全称为Group AUC。它相对于AUC的改变是不在算整体的AUC,而是计算每一个Group下的AUC然后计算AUC的均值。

CAUC的公式如下所示:

在机器学习算法中,很多情况我们都是把AUC当成最常用的一个评价指标,而AUC反映整体样本的排序能力,但是有时候AUC这个指标可能并不能完全说明问题,有可能AUC并不能真正反映模型的好坏,

以CTR预估算法(排序算法一般把这个作为一个很重要的指标)为例,把用户点击的样本当作正样本,没有点击的样本当作负样本,把这个任务当成一个二分类进行处理,最后模型输出的是样本是否被点击的概率。

将所有的用户不同时刻的样本混合到一起,来计算模型对用户点击的正样本来负样本预测的正确性得到AUC值,并不能很好的适配单词搜索下的排序效果,因为可能这个搜索用户展示的结果就只是A(点击),B,C, 下次搜索的结果展示的是D,E(点击),F。将这两次搜索展示的结果融合到一起来预测,可能得到AUC不能很好的反应单次搜索的效果,因此在单次的搜索结果中用户当时看到只是那一次搜索下面的结果,其他次搜索的结果的排序顺序不应该应该这次排序的结果的评估的。

给出一个具体的例子:

排序的结果为:

在这种情况下,模型A,B对于甲乙两个用户的单次搜索下的体验是没有差别的。因为在各自的搜索情况下,他们点击的doc都是排在没有点击的前面的。而在AUC下差异就会很大。

于是最终选择用GAUC作为评估优化的指标。

至于GAUC的上涨和线上指标上涨的定量关系,还得花比较长的时间的观察。