Mecanim 发表于 2022-4-12 17:26

如何在工业界优化点击率预估:(八)Debias&Loss&校准

系列文章链接


[*]如何在工业界优化点击率预估:(一)开篇
[*]如何在工业界优化点击率预估:(二)样本
[*]如何在工业界优化点击率预估:(三)特征
[*]如何在工业界优化点击率预估:(四)兴趣|序列建模
[*]如何在工业界优化点击率预估:(五)特征交叉建模
[*]如何在工业界优化点击率预估:(六)多场景建模
[*]如何在工业界优化点击率预估:(七)图建模和预训练
[*]如何在工业界优化点击率预估:(八)Debias&Loss&校准
[*]如何在工业界优化点击率预估:(九)集成学习&模型压缩
一、前言

本文主要介绍模型Debias、Loss优化目标以及预估校准技术,这几个方向都比较大,完全可以单独成一章,之所以聚在一起写主要内外两个因素,外因是本着能用就行的迭代逻辑,我了解的并不全面,内因是这三者存在一定的关联性,Debias领域里一些方法都涉及到修改训练Loss,而Loss一旦偏离基于点击监督的伯努利分布基本都会有打分准度的偏移,需要用到校准技术来进行纠偏。模型预估出现BIAS的原因主要来自于观测数据、训练数据、系统预估三者存在信息差异,因此需要采用的一定的算法技术来进行Debias,尽量保证在离线分布的一致性。如果说样本、特征和模型结构决定了一辆赛车的性能,那么Loss则是赛车的方向盘,如何掌握这个方向盘对于我们想要达到的业务目标至关重要。我们在模型迭代中常常只看排序指标AUC或者GAUC,这些指标和预估准度毫无关系,但由于我们的排序系统实质并非只有PCTR一个因子,比如广告的排序分ECPM=PCTR*BID,因此如果PCTR虽然相对序更好,但打分准度较差,那么我们的ECPM序反而会变差受到影响。因此这三个技术虽然不是日常迭代的核心路线,但是在技术发展到达边际瓶颈区的今天,适当研究一定有所收获,本文主要从以下几个方面展开。


二、Debias

推荐系统的模型训练经历了一个User→Data→Model→User的循环,在整个循环的过程中,会引入7种偏差(biases)。Debias技术有篇比较出名的Survey文章《Bias and Debias in Recommender System: A Survey and Future》对这7种偏差进行了解释:

[*]position bias: 用户在不同位置上的交互倾向和点击偏好不同。
[*]exposure bias(也叫sample selection bias): 用户只能看到曝光后的并产生交互,但数据中没交互的item不代表用户不喜欢,可能是没曝光。
[*]selection bias: 用户评分往往不是随机的,而是习惯在最喜欢和最讨厌的商品上评分,这就会导致评分数据缺失
[*]conformity bias: 指用户评分会受到他人影响,我们观测到的评分并不一定是用户真实偏好
[*]inductive bias: 对模型的各种假设,用于提升泛化性,通常是有利的 ,例如我们常用的奥卡姆剃刀原理、CNN的局部性假设、RNN的时间依赖假设、注意力机制假设等等
[*]popularity bias: 热门物品曝光多,长尾物品得不到有效曝光
[*]unfairness: 数据不均匀导致某些推荐结果有偏,例如在做新闻的时候,种族、宗教类文章
这里需要补充的是,我们工业界日常说的sample selection bias对应这篇文章的exposure bias,而这里的selection bias对应用户的倾向性喜好的行为稀疏性,更多反映一些rating系统,比如豆瓣评分,对应搜推广将曝光即看做负样本的点击率预估模型倒不是很关注。position bias对应多坑的信息流场景尤为显著,也是在工业界关注最多的bias。Popularity Bias对应的推荐系统中的马太效应,使得长尾商品和新品无法获得足够的数据训练充分继而持续弱势。因此本文重点关注(1)exposure bias(2)popularity bias(3)position bias。其他BIAS我个人关注较少,但不代表重要程度低,例如unfairness是最近的研究热门,我们也曾研究过出价高低的两类广告在系统非竞价因子的上的fairness问题,发现出价高的广告确实也能获得一定预估因子上的优势,例如高估的可能性更大,但是现有的训练方案都不能很好的解决这个问题,只能后验校准解决。
Debias有很多学术方案是通过随机投放得到无偏样本,这类方案回流数据量越大效果越好,但是代价对应工业系统不可接受,数据量太小的话虽然有一些Meta Learning的方案,但还仅停留在学术领域,并没有看到合适的实践,因此基于无偏样本的方案本文都不会介绍。


1、Exposure BIAS

产生曝光偏差的原因有很多,主要是推荐系统中排序优先的展示机制,使得参竞末尾出不来,排序末尾看不到。在不引入无偏样本的情况下,目前的解决方案主要是【1】IPS【2】联合建模曝光率,某种意义上后者也是在估计IPS中的Propensity Score。
(1)IPS(Inverse Propensity Scoring)方案
Propensity Scores是一种传统的debias策略。核心思想是得到每个样本的倾向性评分后,利用倾向性评分对样本重新加权。即在训练推荐模型时,利用Propensity score来减轻选择偏差,它们直接以基于IPS的无偏估计量为目标并优化特定的loss。因此这里就要求制定非常准确的Propensity score规则。以点击率模型为例,假如我们简单的以商品类型统计后给对应样本进行逆倾向加权。我们会发现效果并不理想,因为广告的排序机制还受BID影响。因此张伟楠曾经提出的BId-Aware的校准,即引入BID因子,并利用生存分析里的KMPL方法对胜出率进行估计。但在自动出价的背景下,BID因子和预估因子相互耦合,Propensity score的准确性依旧受到挑战。
(2)联合建模曝光率
这类方法最典型的工作是我们团队之前提出的ESMM,虽然模型名里面定义Multi-Task,但他也是一个解决CVR模型exposure bias的工作。由于CVR样本只会存在于点击后,因此存在大量未点击数据并没能成为CVR样本导致Exposure Bias。因此ESMM通过ctr和ctrcvr求解cvr

https://www.zhihu.com/equation?tex=%5Cqquad+%5Cqquad+%5Cqquad+%5Cqquad+%5Cqquad+p%28z%3D1%2Cy%3D1%7Cx%29+%3D+p%28y%3D1%7Cx%29p%28z%3D1%7Cy%3D1%2Cx%29
而这里的CTR模型即CVR模型的"曝光率"。因此整个方法核心思想如下


同样我们对于点击率预估模型也可以如此拆解 https://www.zhihu.com/equation?tex=+p%28click%7Ccandidate%29+%3D+p%28pv%7Ccandidate%29+%C3%97+p%28click%7Cpv%29%E3%80%82 我们貌似只需建模参竞到曝光的概率就可以成功Debias,可事实是由于推荐的排序竞得机制,曝光率不同于点击率难以通过点估计预估,因此想要成功建模的难度极大,需要考虑很多因素。我们团队在早期层有过一系列尝试但未取得显著进展。
(3)对比约束
对于曝光偏差,我们从结果出发是大量的未曝光样本并未得到模型训练,单从结构化的角度观测,我们又能明确看到部分曝光商品和未曝光商品存在一定的相似性,无论是商品类型还是预估点击率。因此我们能否借助这些结构化的信息,给予未曝光样本模型训练机会,从而缓解Exposure bias问题。


我在样本那一章也介绍了我们的一个想法,即寻找曝光未曝光样本的中相似样本组成正例Pair,不相似样本组成负例Pair采用对比学习训练shallow layer即提高了底层Encoder的泛化性又可一定程度上解决Exposure bias的问题。
2、popularity bias

对应的推荐系统中的马太效应,使得长尾商品和新品无法获得足够的数据训练充分继而持续弱势,而优势或者热门商品可以持续拿量,解决的方法当然也可以采用IPS,具体方法和exposure bias类似,这里就不再赘述,但是对此业界有一些更直接的方案就是E&E,而且对于广告营销来说更合适,因为对于广告这样一个三方博弈场景来说,商品持续无法拿量是无法满足广告主诉求的。这里简单介绍一下我们团队的E&E架构。


本质是一种基于对抗梯度的探索方法以综合衡量样本的潜在价值,以及其对模型后续的影响,并将其用于精排模型,一定程度上从数据回流角度解决了长尾和新品的拿量问题。

[*]在参竞集合中,针对每一个参竞广告,我们衡量其曝光后作为样本对模型训练带来的正向梯度作为扰动方向
[*]通过MC-Dropout衡量该计划预估的不确定度作为扰动方向的步长
[*]为了控制Explore的平台损失,我们需要权衡探索价值,我们后验发现新计划的冷启现象是CTR逐渐上升的,对应popularity bias,只有低估广告才会无法拿量,因此考虑最有探索价值的回流数据即高于历史平均CTR的流量,对应我们建设了基于平均CTR作为阈值的Explore门控
[*]叠加探索扰动后,最后的预估分为 https://www.zhihu.com/equation?tex=Final%5C_Score+%3D+f%28H%28x%29+%2B+I%28pctr%3Ey%5C_s%29%5Clambda_0%5Cdelta%5Coverset%7B%5Crightharpoonup%7D%7Bg%7D%29
以上即这个工作的简单流程,具体可以参考AGE论文。
3、position bias

用户在浏览的过程中,因视觉注意力具有一定倾向性,以及不同位置的页面环境不一样,使得不同位置获得的曝光和点击不同,这些点击行为不能真实或平等地反映出推荐质量和用户喜好,从而会对基于CTR预估的推荐系统造成影响。但大家在分析Position Bias是否存在的时候是通过可视化分坑后验点击率,这种做法往往把Order Bias叠加进去了。


因为推荐系统中排序优化的展示机制,使得我们将质量最优点击率最高的商品天然的放置在了最靠前的位置,因此才能看到位置由前到后,点击率由高到底的Position差异,但实质上这里面叠加了排序质量的Order Bias。只是因为这两者天然耦合很难分开建模。目前解决Position Bias的主要有三类方案,第一类是显式消除Position的影响,公平打分排序,第二类是假设已知Position精准建模,第三类基于对抗消偏。
(1)消除Position Bias
消除Position Bias的方法业界现在比较流行即将其作为特征加入模型,然后在线Infer的时候再将其去掉。这里主要有两类方案,一类是谷歌的BIAS Tower方案,另一类是华为的PAL。


这两分别以线性叠加以及乘积的形式建模位置偏置,当然PAL在论文讲了个基于建模位置曝光率的故事,但是他那个假设存在矛盾,一边认为存在位置偏差要进行研究,一边又假定 https://www.zhihu.com/equation?tex=p%28y%3D1%7Cx%2Cseen%29+%3D+p%28y%3D1%7Cx%2Cpos%2Cseen%29 。不过无所谓,这种消偏的方法本质都是认为对于同一个位置不同的商品消除的偏置幅度是一样的:

https://www.zhihu.com/equation?tex=++%5Cqquad++++%5Cqquad+%E8%A6%81%E4%B9%88ctr_%7Bbefore%7D%5E1+-+ctr_%7Bafter%7D%5E1+%3D+ctr_%7Bbefore%7D%5E2+-+ctr_%7Bafter%7D%5E2 ,https://www.zhihu.com/equation?tex=%E8%A6%81%E4%B9%88%5Cfrac%7Bctr_%7Bbefore%7D%5E1%7D%7Bctr_%7Bafter%7D%5E1%7D+%3D+%5Cfrac%7Bctr_%7Bbefore%7D%5E2%7D%7Bctr_%7Bafter%7D%5E2%7D+
这两种方法在Inference的时候,BIAS Tower直接去掉或者Hack一个固定Position,PAL将 https://www.zhihu.com/equation?tex=p%28seen%7Cpos%29 置1,这样真的消掉了Position Bias得到真实CTR预估值了吗?答案是没有,得到的PCTR只是消掉了position bias的影响,但由于前文说的一般情况下position bias叠加了order bias的影响,因此输出并非真实PCTR。即 https://www.zhihu.com/equation?tex=Pctr_%7Breal%7D+%3D+Pctr%2Ag%28position%5C_%7Bbias%7D%29+%5C+%21%3D++Pctr-+f%28position%5C_%7Bbias%7D%2C+order%5C_%7Bbias%7D%29++%5C+or+%5C++Pctr+%2Af%28position%5C_%7Bbias%7D%2C+order%5C_%7Bbias%7D%29+%5C+
那么问题来了,既然并非真实PCTR,如何带来效果的提升呢,首先我们要肯定的是确实消掉了不同计划在position上的bias,使得Pctr可以公平的比较,如果推荐算法的排序规则只由Pctr决定,是没有问题且能看到提升的,但是今天很多的推荐排序是有其他因子的,比如考虑GMV或者ECPM,以ECPM为例RANK_Score = PCTR*BID,对这两种方案,我们看看输出非真实PCTR对排序影响:
【1】BIAS Tower
假如和偏差较大,则可能会影响排序结果。
即 https://www.zhihu.com/equation?tex=pctr_%7Breal%7D%5E1%2Abid%5E1++-+pctr_%7Breal%7D%5E2%2Abid%5E2++%3C++f%28position%5C_bias%2C+order%5C_bias%29+%2A%28bid%5E2+-+bid%5E1%29
所以我们看到大量bias_tower取得效果的工作都会通过经验科学选取合适的位置特征Hack,尽量减小和的偏差,比如选取第4,5坑。当然也可以再配合校准技术。
【2】PAL
PAL这种乘积消偏的形式是更适合乘积组合的排序因子,几乎不会影响最终的排序结果。

https://www.zhihu.com/equation?tex=%5Cqquad++%5Cqquad++%5Cqquad++%5Cqquad++++%5Cfrac%7BPctr_%7Breal%7D%5E1bid%5E1%7D%7BPctr_%7Breal%7D%5E2bid%5E2%7D+%5Cpropto+%5Cfrac%7BPctr%5E1bid%5E1f%28position%5C_bias%2Corder%5C_bias%29%7D%7BPctr%5E2bid%5E2f%28position%5C_bias%2Corder%5C_bias%29%7D
这也印证了PAL论文中离线提升虽然不如BIAS Tower但是在线效果更好的原因。
(2)基于Position建模
这个方向比较有代表性的工作是美团的Deep Position-wise Interaction Network for CTR Prediction。该模块的作用是用来计算每个候选广告在每个位置的点击率预估值,其中广告j在位置k的点击率预估值为:




在得到广告在每个位置的点击率矩阵后,同时根据每个广告的出价bid,依次贪婪地计算每个位置收益最大的排序结果。我们团队也做过类似的工作,结构大概如下。我们发现有个核心的问题在于, https://www.zhihu.com/equation?tex=p%28y%3D1%7Cx%2Cpos%3Di%29依旧不是真实PCTR,而是包含了的信息(感兴趣的可以打印下分坑的PCTR结果,看看和以Order为Group的统计平均值的关系)。但是由于文我们在PAL有效性中的推论,如不出意外并不会影响提升排序能力。


我们很有幸看到DPIN也是广告团队的工作,即追求排序Score同样是ECPM=PCTR*BID,所以我以ECPM来看一下可能存在的问题。今天的广告策略都会有自动出价的能力,即广告主授权平台根据流量价值进行BID的上下浮动因此https://www.zhihu.com/equation?tex=Bid%3Df%28bid_%7Binit%7D%29 ,而我们的广告策略团队一直在策略调价模式上引领业界,在autobid这块充分考虑很多客户侧以及平台侧的因子,因此我们的 https://www.zhihu.com/equation?tex=Bid%3Df%28bid_%7Binit%7D%2Cpctr%29 。好这里问题就来了,上述方案的分坑PCTR并非真实PCTR,且都带有的的偏差分布不同,因此调价因子是不公平的,需要调价策略单独适配才能公平即 https://www.zhihu.com/equation?tex=Bid_i+%3D+f_i%28bid_%7Binit%7D%2Cpctr_i%29 ,对此我们最后上线了分坑拍卖策略。不过可见的增加了迭代和维护的复杂度。后来我们也因为各种系统问题将这样一个模块进行了下线。
(3)对抗消偏
除了上述方法以外,还有文章认为历史方法只消除了预估上的position bias,但没有消除特征层面的poisiton bias,比如某个商品的出价一直很高的,曝光在首坑的占比远大于其他坑位,因此其特征统计信息会隐含位置信息。所以希望采用对抗的形式消掉输入的位置信息。代表性工作是《Modeling and Simultaneously Removing Bias via Adversarial Neural Networks》




当协方差按预期下降,那么我们认为无法从特征表达 https://www.zhihu.com/equation?tex=Z_A 中获取隐式的位置信息,从而实现了特征层面的position bias消除。
三、Loss

开头所述,如果说样本、特征和模型结构决定了一辆赛车的性能,那么Loss则是赛车的方向盘,如何掌握这个方向盘对于我们想要达到的业务目标至关重要。那么我们先来看看Loss定义:是用来估量模型的预测值f(x)与真实值Y的不一致程度,通常由损失项和正则项组成。 Loss构建一般基于以下目标

[*]经验风险最小化
[*]结构风险最小化
[*]邻域风险最小化
当然我们点击率预估常用的交叉熵Loss就属于经验风险最小化,LTR对应的Pairwise|Listwise就属于结构风险最小化,KNN就属于邻域风险最小化,本节想基于这三点简单介绍并引出一些可以辅助交叉熵Loss带来点击率模型提升的Loss。
1、经验风险最小化之后验信息Distill

受启发于CVR建模中的优势特征蒸馏,即训练教师模型利用一些点击后特征,去指导实际服务在线无法拿到点击后特征的模型学习,我认为点击率建模中也存在类似的建模方法,即将一些展示时的后验信息作为特征,这些特征可以是position bias,contextbias,甚至期待这种方法可以Debias。具体结构如下


这里的后验信息例如位置信息,广告序,上下文商品信息等无法在预测获取但又影响用户点击的信息。如果将position bias中介绍的两种方法叫做"视而不见"(PAL)和“所见所得”(DPIN),那么还有一种方法是“猜你所见”。即如下图所示拟合一个期望值去弥补缺失。


而且这种Distill消除bias的方法不会出现打分准度的问题。因为teacher的分布也在相同数据基础上满足伯努利分布。
2、结构风险最小化之精排ECPM Pairwise Loss

大家在迭代点击率的时候往往评估的指标是AUC和GAUC,都是排序指标,因此常常思考把LTR中的Loss引入进来,将整体优化升级为 https://www.zhihu.com/equation?tex=Loss%3DL_%7Bpointwsie%7D+%2B+L_%7Bpairwise%7D 确实能看到明显的GAUC或AUC上涨,但是线上结果却出现波动。其本质原因在于pairwise Loss只要求pctr满足结构约束,却并不要求pctr满足伯努利约束,因此使得打分准度出现偏差,导致我们真正反映线上效果的ECPM GAUC并没有上涨(以ECPM为Score)。因此如果我们既要兼顾打分准度的交叉熵Loss,又能优化ECPM排序结果则可以直接带来效果提升。因此改进后的Loss如下

https://www.zhihu.com/equation?tex=Loss%3DL_%7Bpointwise%7D+%2B+%5Csum_%7Bi%2Cj+%5Cin+session%7D+max%280%2CCost_i-Cost_j%29max%280%2Cmarigin+-+%28bid_ipctr_i-bid_jpctr_j%29%29
大概思路即引入ECPM Loss,至于何种pairwise loss选型,大家自己决定。
3、邻域风险最小化之邻域鲁棒adversarial Loss

我们在进行点击率模型预估的时候往往不希望模型出现过拟合,因此希望模型具备一定的鲁棒性,所以我们可以设计一些邻域风险最小化的Loss来平滑解空间。例如扰动对抗 https://www.zhihu.com/equation?tex=Loss_%7Badv%7D%3DKL%28f%28x%2B+%5Clambda%5Cnabla%28loss%28f%28x%29%2Cy%29%29%EF%BC%8Cf%28x%29%29


当然除上面这些Loss以外还有很多基于后验质量更改样本权重的Loss。只不过这些Loss如果不在权重上实时Normalize平衡分布的话,都会导致打分准度的问题,因此我们需要下面一小节来进行校准。
四、校准

所谓校准即将模型预估值校正到更合理的区间,那为什么会存在校正的空间,抛开点击率理论里面的单点估计准确性存疑(因为模型预测无法完整观测因变量X),我认为是两个因素

[*]训练不充分或有偏,前者主要是数据稀疏,后者主要有两个原因,一个是上文中为了更好的学习排序能力引入了其他优化目标导致分布漂移,另一个是目前业界比较关注的复杂模型过分拟合后导致的over-confidence问题。
[*]服务数据存在相位差:模型训练和模型服务存在相位差,这类时间BIAS可能导致用户,可展示商品,用户心性发生变化。因此预估值存在偏差。
对以上原因,我们总结了三种可行的校准方案,一是基于传统类簇划分的进化算法MBCT,另一种主要解决训练有偏的neural calibrate算法,最后一种是解决相位差的算法refine model。
1、MBCT

我们常用的保序线性回归SIR就是基于类簇划分的校准算法,但如果划分的Group较粗校准意义不大,划分的较细又会导致数据不置信,存在波动,因此工程的实践方案就是设计一些规则实现校准粒度的退化,比如该商品曝光量不足就退化为品类粒度校准。但这类方案存在灵活度不足、效率低和校准效果不理想的缺陷。因此是否有一种算法能实现自动化组织和交叉各种划分方式以进行更精细化类簇划分。这就是策略团队斯光同学提出的MBCT。


其核心思想是基于树结构学习合理的Group分组,且考虑单棵树的校准能力有限,可生成多棵树Boosting校准。我们知道树模型的划分往往需要定义增益熵如基尼系数。同样本文也定义了对应指标MDCE。



[*]输入统计样本 https://www.zhihu.com/equation?tex=%28pctr%2Clabel%29 ,基于候选特征分类簇,以及分裂目标MDCE构建树模型 https://www.zhihu.com/equation?tex=f_1%28pctr%29 ,树建好后得到校准 https://www.zhihu.com/equation?tex=pctr_1+%3D+f_1%28pctr%29 ,将统计样本https://www.zhihu.com/equation?tex=%28pctr1%2Clabel%29构建下一棵树得到https://www.zhihu.com/equation?tex=f_2%28pctr_1%29,以此类推
[*]在线服务的时候校准结果即为 https://www.zhihu.com/equation?tex=f_m%28f_%7Bm-1%7D%28...f_1%28pctr%29%29%29
2、Neural Calibrate

这个方案主要利用validate数据集的二次训练解决over-confidence以及辅助优化目标导致的训练有偏问题。首先是Over Confidence的解决方案。有篇经典文章《On Calibration of Modern Neural Networks》认为在于复杂模型训练后模型准确率和置信度不匹配所致,因此在validate集合上基于Negtive Log likehood训练Softmax的Temperature参数


引入T后排序结果依旧保持单调性,但PCTR取值将更合理。但对于一些LTR LOSS学习得到PCTR可能分布偏差更大,想通过一个简单的参数T难以成功校正。因此可以将其复杂化为


3、Refine Model

Refine Model是我们团队曾经想发的一篇文章,其中有个思路就是解决服务数据存在相位差的问题。我们OL模型上线一般存在一小时差距(训练数据和上线服务数据的时间差),所以一般为了快速校准到实时分布,会将SIR的更新频率缩短到分钟级,我们已知SIR是基于一些特征簇的统计信息,因此我们是否能实现一个小的LR模型进行快速分布学习适配,即我们根据模型复杂度拥有两个更新上线频次的模型前后级联,从而实现更准确高效的校准,整体示意图如下:


References

1. Bias and Debias in Recommender System: A Survey and Future
2. On Calibration of Modern Neural Networks
3. MBCT: Tree-Based Feature-Aware Binning for Individual Uncertainty Calibration
4. Distilled CTR: Accurate and scalable CTR prediction model through model distillation
5. Learning to Rank: From Pairwise Approach to Listwise Approach
6. Recommending What Video to Watch Next: A Multitask Ranking System
7. Generalized Loss Functions for Generative Adversarial Networks
8. PAL: a position-bias aware learning framework for CTR prediction in live recommender systems
9. Recommendations as treatments: Debiasing learning and evaluation.
10. Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate
11. Adversarial Gradient Driven Exploration for Deep Click-Through Rate Prediction
页: [1]
查看完整版本: 如何在工业界优化点击率预估:(八)Debias&Loss&校准