Q1:什么是bias
bias可能来自于很多地方。
在这里bias是个广义的概念:这里bias的含义既可以是统计学意义上的bias(如CTR校准中便有一部分是校准其统计学意义上的bias),也可以是直觉(逻辑)意义上的bias,偏差,差异,天然偏差等等(CTR校准中对位置信息带来天然偏差的校准)。【这里其实也很好理解,在统计学意义上,我们对数据的估计可以是unbiased,但是实际中,很多分布是变化的,我们要详细地分析这些可能带来数据本身就“bias”掉的问题。】
前者是statistically defined,后者是logically defined。Q1.1:Bias的根源是什么
在我们信息不完全(比如没有population,或者缺失一些特征)的时候,或者使用有误差的估计方法时。得到的结果。Q2:为什么要消除bias
其实这个问题也可以换个方式来问:什么时候需要消除bias?
1、需要消除bias的例子:
举个例子,我们希望通过广告历史的曝光点击数据来表征一个广告是否吸引人(ctr),那么历史的广告点击是否能直接表征呢?其实不能,因为在广告行业中,广告的展现位置对广告是否会被spotted到有很大的影响。所以真实的ctr是广告位带来的ctr bias和广告本身的ctr叠加的结果。如果我们希望评估广告本身的ctr时,就需要消除广告位带来的bias
2、不需要消除bias的例子:
同样在上面那个例子中,当我们需要评估广告本身的ctr时,需要消除广告位带来的偏差,但是当我们需要评估某个广告位a投出b广告时期望的ctr时,我们就不需要消除“广告位带来的bias”,因为在这个任务中,广告位只是其中的因素之一,并不是biasQ3:何时,如何消除bias
而如何消除这些bias是机器学习中非常重要的课题,一些场景以及手段如下:
1、特征去偏:【反馈特征为了表征对象(商品,内容,广告)本身的差异,可能会由上层的差异(如曝光位置等)带来bias】
比如广告中的coec:click over excepted click便是一个用广告位或者其他固有属性的expected click做为分母,以此来作为normalizer对click进行去偏的手段。
还有特征上的去偏比如y2b论文中对召回的建模用到了网站各个场景的样本和数据。那么如果将即时的搜索的数据和搜索页的点击样本一起输入,那么模型就很容易学到当前搜索词与用户后续点击的关联性,而以此来作为首页推荐直觉上也是很有问题的(我刚刚搜索完car,那么回到主页就全是car相关的视频?),会导致模型overfitting。所以在其论文中,google去掉了时序信息,并且将用户的所有搜索词作为无序词袋,防止模型直接学习搜索词与用户在搜索页的后续点击的关联关系。(凡事都有对应的场景,当我们在做搜索推荐的排序建模时,搜索词与后续点击的item是有较强关联关系的,这个关系也是需要模型去学习的,而不是一个bias)
其实ctr平滑也是特征去偏的一个体现。因为ctr评估其被点击的概率,但是当后验数据较少时,其计算的ctr置信度较低,即其ctr值偏差的范围较大,那么CTR平滑便是一种降低偏差的方法,也可以被理解去消减bias。
2、用模型感知性输入去偏:【由于模型在预估和训练中的差异,可能会带来bias,比如下面的位置的bias,以及样本偏差的bias:ssb[1],这些需要在模型中有特别的设计来解决】
比如样本中商品展现的位置(顺序)可能直接影响到其点击率。那么在dnn模型的最后一层,将位置信息作为特征与hidden layer拼接后输入模型进行训练(注意其与最后的label最好只有直接的线性关系,不与其他特征交叉)。在预估的时候,再去掉位置信息这个输入,以此来让模型训练时感知位置本身带来的偏差,并且在排序的时候去掉此偏差带来的影响(point wise模型排序打分的时候无法预知其位置,否则预估空间需要放大很多倍=candidate num * impression num)。【让模型学习到这个bias,再在预估的时候去除这个bias】,当然,这个去偏也是要分场景的,例如,位置信息在底层point-wise模型中是一个bias,但是在上层的list-wise模型中,它就是一个特性,并不是bias。讨论bias消除的必要性
在y2b的论文中,同样有类似的方法:为了消除模型对老视频的倾向性(因为训练样本可能都是多天以前的,固然会对之前样本中出现的视频有天然的bias),在训练的时候加入了example age,而在预估的时候去除了example age,或者赋予了一个很小的负值。
3、样本去偏:【这里主要是整体feedback loop形成的偏差,马太效应。这里解决方式是通过我们的认知修改样本,来修正这种bias】
有时候这也不能算作是“偏”,因为有时候样本的分布就是长尾或者“有偏重”的,导致很有可能少数的用户的样本dominate了整个模型。所以我们需要对样本进行reweight,给特别高频的用户降低权重。或者像google在y2b的论文中那样,直接对每个用户产生相同(相近)的样本数量。同时论文中用上全站的数据做样本(包括搜索,等其他渠道,不仅仅只有推荐),也是为了防止模型overly biased towards exploitation。(只有推荐流反馈的话,会让新内容难以曝光,过度exploitation)
4、metric去偏:【metric本身其实也受到当前数据分布的影响,当我们评估的条件,和真实的条件不一致的时候,对评估的metric也需要去偏】
类似高频用户dominate模型训练的问题,metric也可能被dominate,例如AUC做为ctr预估模型的metric时,很可能模型仅仅对“用户是否点击”这个问题进行了判别,并非我们想要的“用户对某个商品是否点击”。那么这个指标与我们实际的预期相比,是有偏的。类似地,其实每个用户都可以计算其单独的AUC,用这个思想,用点击数量对每个用户的AUC加权,得到GAUC即是在此场景下对AUC的去偏
5、训练过程去偏:【训练模型的过程本身,会由算法本身产生bias,为了让特征数据能够充分训练,则需要修正】
由于训练过程中,不同特征出现的概率不同(onehot的每一位,embedding的每一个id)那么训练中,其被更新的次数也不同,高频的特征被更新的次数较多,低频的特征可能训练不充分。高频特征打压中阐述了这种做法。同时,过于低频的特征,也可能泛化能力较弱,影响模型的泛化能力,可以将过低频的特征过滤掉。类似地,在阿里的DIN文章中提出了mini batch aware regularization,其对embedding layer的进行的l2 reg(weight decay)仅对一个batch中出现过的emebdding进行weight decay。虽然原本的intention是优化计算量,提升计算速度。但这样也变相降低了低频embedding被decay的次数,防止其在训练过程中被过度的decay(本身被更新的次数很少),可能也变相提升了效果。
6、对预估值去偏:【这里其一消除了算法本身在数学上的bias,其二的ctr校准也可以当作是去除模型预估的bias】
简述一下就是,当我们对样本采样时,会导致模型预估值有偏,见:非均衡数据分类,以及采样对其的影响,以及不均衡正负样本的训练本身会导致pCtr被低估,见:有偏估计在CTR预估中引入的问题,在CTR校准中有详细的讨论,这里CTR校准即是用一定的手段来消除此偏差,使得预估值更准确,当预估绝对值有意义的时候(例如广告竞价),则这样的去偏是非常必要的。
7、模型选择的去偏:【这是个CV的例子,解释了如何正确地评估“泛化误差”,而不能引入参数selection带来的bias】
当我们使用validation set来选择参数的时候,此参数在validation set上的表现不能作为评估标准,是因为这个选择过程对特定的validation set是aware的(是以此作为标准来选择的),所以在validation set上的评估指标是有偏的。要评估这个模型本身的泛化能力,需要test set来评估。(当然,由于大规模机器学习会消耗太多的资源,一般不会有这么复杂的模型参数评估选择过程)。类似地,我们如果用当前的多个模型预估值进行了公式的组合grid search 出一些超参数,例如我们搜索rankscore= ctr ^ a * cvr ^ b中的a,b参数,用grid search在当前的数据集上搜索出一系列参数,其实这些参数对当前的数据集是aware的,不能作为评估的标准。需要用另一份数据集做评估。
8、数据认知不足带来bias:【这里其实是数据本身不完整准确,或者我们对数据的认知不足造成的偏差,需要我们更深入并严谨地对待并分析数据,避免导致错误的认知(其实这个很常见,也很容易被忽略,结果可能带来错误的特征,结论,与决策)】
有时候,统计数据本身携带了过多的偏差,可能导致我门错误的认知。例如某页面下方有个推荐feed流,feed流前5个数据为兴趣推荐,最后两个为探索推荐。直接统计结果发现兴趣推荐点击率甚至小于探索推荐。追查下去发现很多用户点击此页面并非想看下面feed流推荐,而是点击页面上方别的tab,而点击进来就会记录曝光,而默认曝光的数量<5,所以前面的兴趣推荐有很多无效的曝光,固被拉低了点击率。去除无效曝光(例如用是否下拉进行过滤)后再统计则恢复正常认知。
[1] ssb:sample selection bias :传统cvr模型在点击样本上训练,但是预估的时候会在全量数据上inference
refer : Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate