AUC上升CTR一定上升么

记得几年前,百度从谷歌挖来了一个非常牛逼的工程师,这位工程师带来了很多机器学习的概念,实在是让自己这种土包子开了眼界,在一次会议上,这位工程师在解释auc和线上ctr的关系时,说 ”我做了这么多年机器学习,还从来没见过算法A在auc上胜过算法B,但是线上表现A比B差。” 必须备注一点,自己当时连auc都没搞清楚的小喽啰,也许记忆会有偏差,所以原话也许有偏差。

事实上,在点击率预估这项工程的开展初期,这句话非常正确,因为有对它的坚定信念,帮助我们fix了类似于线上线下环境不一致等无数工程bug。因此,看到这篇文章的同学们,如果你发现auc上升,点击率却不上升,请优先排查bug。在确定没有bug的情况下,再看下文吧。

在bug逐渐收敛之后,这段时间是令人欣慰的,无数次的找新的特征,加入模型,auc上升,线上ctr提升。可是逐渐的,我们出现了越来越多的AUC上升,但是CTR并不一定提升,甚至是有下降的情况,总结分析有下面几种情况:

  1. 环境特征的引入

    这里的环境特征是指的网民特征,如query,cookie,流量等与广告无关的信息。如果环境特征引入起的作用只是把不会被点击的环境和可能被点击的环境区分开,例如加入了cookie特征,从而把样本拆的更细,而这个特征的加入的表现对评估数据集auc的提升只是表现在命中某些cookie,点击率为0,那么线上多半不会有太显著的变化,因为针对这些cookie,不管出什么广告,点击率都为0,对这部分情况预测的更好并不能对点击产生影响。

    这种原因一般都有几个伴随的现象,相对比较好识别:

    (1) instance变多,被拆的更细

    (2) top auc上升

    (3) ctr的分布左移

  2. 点击率和relevance的偏差

    在Google的一篇paper:User browsing models: relevance versus examination中有很详尽的分析。

    扫描二维码关注公众号,回复: 1568809 查看本文章

    我们在说点击率的时候,实际上:点击率=true relevance * position_bias,在online应用的时候,我们都是将position设为相同,即通过true relevance对广告做的排序,而我们线下评估auc,都是对点击率做的评估。这里解释一下为什么online不用点击率做排序,理想情况下我们按照点击率最大化,应该是对所有候选的M个广告分别计算在排名为1,2,3,n的时候的点击率,然后用greedy的算法去计算怎样从中间选择n个广告使得总的点击率(第一名广告点击率+第二名广告点击率+。。)最高,但是这个计算量太大了,承受不起,所以干脆直接用排除掉位置影响的true relevance去排序。这样做并不会有太大问题,因为直观上,position_bias应该只与位置相关,而与广告相关。

    好的,解释完了,回过来说我们线上用true relevance排序,但是线下评测用的点击率,这意味着算法A比算法B的排序性能好,只是说明true_relevance * position_bias比算法B好,不能说明A的true_relevance的排序性能比B好,除了上线检验,没有别的方法去验证。

    在Google的这篇paper里面还提到position_bias越简单,可能越贴近真实情况(即前面说的position_bias只与位置相关,与环境,历史点击行为,广告本身都没有关系)是最好的。因此,如果我们对position_bias过度建模,比如LR模型里面加入了更多的位置相关的组合特征,会出现auc上升的情况,但是线上ctr反而会下降。事实上,我们曾经尝试去除了与位置相关的组合特征,线下auc有下降,但是线上ctr有了比较大的improve。

  3. 评估集合和线上集合的数据偏差(survival-bias 名词来源于张雷的ppt)

    简言之,就是我们的评估集合是基于线上历史上曾经展现过的样本做的评估,线上未展现过的样本的表现是不清楚的,这其中可能会存在分布的偏差。

    例如A1,A2,A3,B1,B2,B3是六个样本,真实的点击率高低排序应该是A1>A2>A3>B1>B2>B3,历史上只有A1,A2,A3展现过

    算法1的排序:A1>A3>A2>B1>B2>B3

    算法2的排序:B1>B3>B2>A1>A2>A3

    如果基于历史上展现过的样本做评估,算法2(A1>A2>A3)优于算法1(A1>A3>A2),但是如果线上有较多的B1,B2,B3展现,那么算法2很可能表现还不如算法1

    理论很简单,但是实践中,这个原因很难有指标去验证,除非原来的算法和现在的算法有非常大的差异,比如LR换成GBBT,一般历史样本和线上样本的分布本不会有太大的差异,这样你也就很难用线上新展现样本的比例或者A/B test在这部分新展现样本上去做什么比较。这是我最不喜欢的一个因素,因为所有最后查不出原因的auc上升,ctr没变化的case都很无奈的归咎于这个因素。

猜你喜欢

转载自blog.csdn.net/LegenDavid/article/details/80653433