找回密码
 会员注册
查看: 23|回复: 0

一文搞懂CTR建模

[复制链接]

1

主题

0

回帖

4

积分

新手上路

积分
4
发表于 2024-9-20 19:34:41 | 显示全部楼层 |阅读模式
作者:coreyzhong,腾讯IEG应用研究员本文分为三个部分:Part1是前菜,帮助没接触过相关内容的同学快速了解我们要做什么、为什么做;Part2适合刚刚接触pCTR建模想要完成项目的算法同学;Part3适合正在做CTR建模项目且想要进一步优化效果的算法同学。Part1计算广告广告是互联网流量变现的重要手段,也是互联网产品进行推广的重要方式。互联网广告行业经历了合约广告时期、精准定向广告时期、竞价广告时期等多阶段的发展,现在行业内已经普遍采用了自动化竞价的广告投放模式。在计算广告的投放和交易中,除了用户是被动参与其中,还有媒体和广告主两方进行交易,其中媒体希望通过广告的形式将自己的流量变现,广告主希望通过广告来付费推广自己的产品。同时整个链路中还有针对媒体方设计的供给方产品(SSP)和针对广告主设计的需求方平台(DSP)。上图为行业内供需之间多种接口与产品的形式(来源于刘鹏的《计算广告》一书),而一个成熟的广告平台通常需要具备上图中的一整套功能。比如需要提供广告主建立广告的投放界面、需要具备SSP的与媒体APP对接的功能、需要提供可以给媒体APP集成的广告SDK以及需要提供DSP的广告竞价功能等等。其中DSP中的广告竞价系统是计算广告中最核心的模块之一,而CTR模型也将在这里发挥它的重要作用。广告竞价系统计算广告的核心是广告的竞价系统,也就是需要对每一次广告请求,都要在100ms内从广告库中选取一个最合适的广告,计算好本次曝光的价格,并返回给媒体。这个过程主要需要经历召回、粗排、精排、出价几个步骤:召回每个优化师都可以随时建立新的广告,通常来讲广告库中的广告数量可以达到几万、几十万、甚至几百万的量级。由于精确计算该次请求中每个广告的pCTR、pCVR比较耗时,如果针对广告库中所有广告都计算其pCTR、pCVR,一方面十分浪费计算资源,而且几乎不可能在100ms内将结果返回给媒体。所以广告系统通常会先采用一些耗时低的方案,用精度换时间。从全量广告库中召回几百条广告进入后续模块的竞价过程,这样精排过程只需要针对几百个广告计算pCTR、pCVR即可,就可以实现100ms内完整全部广告竞价过程。粗排粗排的作用与召回类似,主要是进一步减少广告条数。如果广告库中广告数量特别大,比如达到百万量级,因为召回模型必须重点考虑时延问题,只能牺牲精度,如果仅通过召回模块让候选集从百万降低到几百,则不可避免的会导致精度下降过大。这种情况下会在召回和精排中间加入粗排过程,粗排模型的复杂度和精度通常介于召回模型和精排模型之间,目的是在效率和精度上进行权衡取舍。精排到了精排这一步,一般就只剩下几百个广告,我们只需要针对每个广告,调用pCTR模型和pCVR模型,精确计算pCTR、pCVR的值,计算ECPM并排序(这一部分下一节介绍)。出价通常来讲有了精排给出的ECPM值就可以进行曝光和结算了,但是由于精排过程中深度模型无法进行更高层面的全局考虑。通常广告平台为了成本达成、预算平滑等目的的考虑,会在精排之后对ECPM进行调整。这一环节中通常策略更多一些。ECPM与精排在竞价系统中,每次请求究竟哪个广告胜出,通常是根据ECPM公式来计算。ECPM(EffectiveCostPerMille)是用来衡量一次曝光价值的指标,具体含义为假设该次曝光重复1000次的价格(单位为元)。比较基础的计算公式如下:其中price是广告主设定的价格,比如在oCPA投放时,用户指定预期每个转化40元,那这里的price就等于40;至于pCTR和pCVR就是此次曝光的点击率和转化率,分别由pCTR模型和pCVR模型进行估计。不同的业务会根据自己的业务需求对ECPM公式进行修改,比如如果要进行ROI的优化,可能会考虑用户LTV的影响:以及例如我们之前与AMS的合作项目中,广告主来估计用户的价值分级,回传给广告平台后,广告平台会直接在ECPM上乘一个系数;有时广告主需要平滑预算,会将ECPM进行进一步修正平滑作为最终出价。但是不论对ECPM进行哪些修改,都不影响其含义本质,都是衡量曝光的价值,以及作为双方进行经济结算的重要依据。在精排中,就是要将召回回来的0.8105),点击率相对提升了5.6%。下图为点击率对比图,蓝色线为对照组,橙色线为加入了交叉特征后的实验组。模型结构交叉在行业内中已经有了大量关于特征自动交叉的研究成果,从FM到FFM再到DeepFM,以及后续基于Attention的各种交叉变种,本文在这里就不再赘述。我们在模型结构交叉上有过几个版本的迭代:DeepFM、AutoInt变种、DCN变种。首先第一版特征交叉结构就是采用业内非常常用的DeepFM模型,在全量竞胜请求上可以达到AUC=0.8左右的效果。虽然此时的绝对AUC达到了比较高的值,但因为数据分布不同,不同业务之间对比AUC绝对值意义不大。第二版交叉结构中,采用了AutoInt结构中的AttentionLayer,但是我们除此以外还进行了一些调整:一方面继续维持了DeepFM中的一阶部分,删除DeepFM中的二阶部分,你也可以称这种结构为Wide&AutoInt。这样做是为了提高模型的泛化性另一方面并不是所有特征都经过AttentionLayer进行交叉,而是剔除了一些主观认为不需要交叉的连续型统计类特征(如用户近3天被曝光次数),这样做是为了减小模型参数量,加快线上推导速度,同时一定程度上避免过拟合经过以上改动,模型AUC显著大幅提高了0.01,线上CTR相对提升了约3%。第三版交叉结构中,采用DCNv2的CrossLayer替换之前的AttentionLayer,同时保留之前的Wide部分,也同样剔除部分变量不进行CrossLayer交叉。这一改动使模型AUC显著提升了0.004,CTR相对提升了2%。下图为线上点击率对比图特征冗余共线在特征中不可避免的会出现特征之间的共线性,比如“用户近24h的点击数”和“用户近72h的点击数”,又比如“用户在该媒体上的历史点击率”和“用户近3天历史点击率”,不可避免的会有较高的共线性。高度共线的特征会使模型很容易在局部最小值处提前收敛,而且可能会导致模型参数量增加,但没有增加有效的信息,从而出现过拟合现象。通常处理特征共线的方法是通过大量离线实验,不断地删除可能导致共线的特征(可通过相关系数分析),并观察AUC的变化。从而在保证AUC不降低的前提下,剔除掉共线性最强的特征。但是这样做仍然存在问题:既然剔除了特征,就不可避免的造成信息损失,降低了模型效果的天花板加入A、B、C三个特征共线,那应该剔除他们三个中的哪个呢?如果仅以剔除后的AUC来衡量,可能会在不同天的数据集上得出不同的答案(第一天剔除A最好,第二天剔除C最高)。即共线特征的重要性,可能是变化的,直接剔除特征无法反应这种变化针对这种情况,我们借鉴了《GateNet:Gating-EnhancedDeepNetworkforClick-ThroughRatePrediction》中的方案,在模型内部添加一个Gate层,本质上是为每个特征增加了一个“可学习的权重”。读者可能会问:既然深度学习模型本身的学习机制就可以让无关特征的影响降低,从而起到变量筛选的作用,为什么还要单独一个GateLayer来给变量赋权呢?答案就是:“假设空间太大”,一个全连接层的参数量与前后两层节点数的乘积成正比,参数量很大,不容易学习。相比之下GateLayer中的参数量就少了很多,假设空间更小,更容易学习。考虑到实际上在共线性的情况下,一个特征的权重不仅与自身有关,还与其他特征有关。所以我们采用Bit-WiseFeatureEmbeddingGate结构:实验验证,经过改进后模型的效果更好(原文结构AUC提升0.00101,改进结构AUC提升0.00129)。线上AB实验显示,新增改进后的GateLayer,使得线上点击率提升约2.37%。下图为线上点击率对比图:序列建模截至目前,我们在特征方面还引入了序列类型的特征:用户点击游戏序列、用户点击游戏品类序列、用户点击创意序列、用户点击广告序列、用户点击计划序列、用户点击广告类型序列这6个序列。针对每个序列先对其Embedding化,然后分别进行Max-Poolling和DIN-Attention,并最终进行concat,作为序列建模层的输出。通过加入DIN-Attention来优化序列建模过程,模型的AUC稳定提升了0.0012。多任务建模在不同的场景中,我们可以采用不同的辅助任务,来辅助CTR模型训练。如朋友圈广告中可以进行“点赞”、“评论”等交互动作。在联盟类流量的广告投放中,因为所对接的媒体类型繁杂,很难推行统一的“交互行为”。我们尝试利用预测视频播放的标签来作为辅助任务,视频播放标签分为:“未播放到75%”、“播放至75%到100%之间”、“完成播放”、“其他”这四个标签,其中“其他”主要表示非视频类曝光。模型结构上,我们将Cross层的输出和序列建模层的输出进行concat,然后经过一个MMoE层,后为两个任务分别接两个FC层形成子塔。经过以上优化,模型离线AUC稳定提升了0.0006。素材特征用户刷到广告后,与用户体验相关性最强的就是素材。我们也加入了一些素材的Embedding特征,我们尝试将单个用户近期点击过的素材ID看作一个集合,同处在一个集合中的素材ID看作是一次“共现”。这个关系与NLP中,一个句子中词的共现是类似的,只不过素材ID的共现中没有前后顺序的联系。所以我们建立了一个简单的W2V模型,根据素材ID之间的共现关系,学习每个素材ID的Embedding,并将该Embedding加入到pCTR模型中,给模型的AUC稳定地带来了约0.0003的提升。另外我们也尝试过对视频素材内容进行理解,从而提取视频素材的标签或Embedding,从而辅助CTR建模,目前取得了离线AUC提升0.0015的效果,这部分内容比较多本文不做详细介绍,以后会专门写一篇相关文章。最终模型结构经过以上多方面的改进优化,我们目前的模型结构示意图如下:图中诸如SeqTower和MMoETover的具体结构已经在前文中有所介绍,所以在这里就一笔带过。模型校准为什么需要校准?偏差是指模型对于整体数据集或部分数据集的预测结果,整体偏高或偏低。在广告系统中,我们不仅需要把最合适的广告排在前面,还需要精确计算这一次曝光的“价格”。所以对于广告系统中,偏差指标与衡量排序的AUC都很重要。如果偏差>0,说明我们多花了冤枉钱来买低质量曝光机会,如果偏差0.5时产生低估)。这种情况的原因也很好解释,我们考虑如下一个非常简单的LR模型的例子:当样本非冷启动时,w1和w2都是训练充分的,整个LR模型没有偏差,或偏差很低。但当样本为冷启动时(假设x1,x2是ID类特征),w1和w2的取值都是随机生成的随机数(通常均值为0),而x1和x2都为1,这时w1x1+w2x2的均值自然为0,从而y的均值为0.5。总结来说就是,模型中未受训练的随机数,会让魔性的预测结果向“瞎猜”方向移动,而对于二分类来说,模型“瞎猜”的均值就是0.5。所以冷启动会带来偏向0.5的偏差。对于这种情况,一种方案是在项目迭代中逐步用泛化性特征取代ID类特征,另外一种方案就是在线学习。数据分布迁移随着时间的推移线上数据分布发生变化,包括线上的特征分布、特征与点击的条件分布都已经改变了,这时模型就会有偏差(比如极端情况下,我用去年的数据训模型,在今年的环境上线,明显是不合理的)。这种偏差和前面介绍的“冷启动偏差”类似,也会一定程度上偏向于0.5。对于这种情况,需要我们及时更新模型,在线学习是解决这个问题的法宝。模型收敛到局部最优解理论上,当模型学习的恰如其分,当LogLoss取到最小值,且未出现过拟合的情况,模型输出的期望一定等于真实标签的期望。所以当模型仅是收敛到局部最优解时,势必存在一个子数据集上的偏差期望是非零的。对于这种情况我们只能尽量通过模型结构、正则等方式去避免。模型假设空间越大,越容易收敛到局部最优解,所以我们在进行模型版本迭代时,尽可能不要以引入大量参数为代价,去追求细微的效果提升。这短期看是可以取得更好的效果,但长期看其实是给自己挖坑。缩放校准公式常用的校准方案IsotonicRegression和PlattCalibration。但是本文主要想介绍另一种更简单的方案——在论文《PracticalLessonsfromPredictingClicksonAdsatFacebook》中,作者采用了一种缩放公式来进行校准:其中x为校准前CTR,w为负样本采样率。该校准公式虽然简单,但是却具有良好的性质:无偏性:只要x在采样后的数据集上是无偏的,那x‘就是在未采样数据集上就是无偏的,这一性质在IsotonicRegression中是无法保证的一一映射:任意x可以得到唯一x‘,且任务x’也可以得到唯一x,这在PlattCalibration中是无法保证的连续性:IsotonicRegression是非参数的阶梯函数,相比之下该公式是一个连续函数,不需要对x进行分桶以上都是很好的性质,但是该公式也存在问题,就是他只有一个表示缩放比例的参数w,它只能够解决“训练样本采样”带来的偏差,或缓解“整体数据分布迁移”带来的偏差。对于由于模型训练不充分导致的分桶偏差(如对A部分样本高估,对B部分样本低估,但总体上互相抵消了)就无法解决了。我们通过reliabilitydiagram来对比下缩放公式校准与IsotonicRegression的效果。下图中蓝色线是未校准的pCTR,橙色线是缩放公式校准的结果,绿色线是Isotonic校准的结果,可以看出校准缩放公式的整体校准效果,完全可以和IsotonicRegression匹敌。另外因为他是连续的,可以支持梯度训练,对未来的在线学习有更好的兼容性。而且他不需要对pCTR进行分桶,不会存在高pCTR处因为样本量太少而导致波动大的问题。真是一个好方法呢!校准模型的改进对于分桶偏差,TEG发表的《Field-awareCalibration:ASimpleandEmpiricallyStrongMethodforReliableProbabilisticPredictions》理论上可以缓解这个问题。原文将分段离散的IsotonicRegression改进为分段连续的多段线性函数,结合一个输入为样本特征的DNN,一起得到校准结果。因为在校准模型中,通过DNN的方式考虑到了其他特征(如媒体ID等),所以可以缓解模型对桶A高估,桶B低估但总体抵消的情况。但是我们在业务中发现,我们的分桶偏差(分媒体、分游戏、分广告展示形式)也都维持在比较低的水平,与整体偏差差不太多,所以暂时没有必要针对该问题进行专门优化。Part3在线学习前文中提到了偏差产生的原因,其中“冷启动”与“数据分布偏移”产生的偏差都可以靠及时更新模型来消除,而提高模型更新频率的终极解决方案就是在线学习。线上模型进行服务的同时,利用线上实时样本实时地训练模型,并实时的利用最新模型部署服务的方案。在线学习可以将模型的更新频率提升到分钟级甚至秒级。整体机制上图为在线学习的整体机制,主要分为四个部分:DSP预测:通过tf.Serving进行线上预测服务,同时上报曝光、点击、特征日志特征及样本:实时消费曝光、点击、特征日志,通过request_id进行实时join,拼接实时训练样本,并上报tdbank模型实时训练:实时消费前置模块上报的实时样本(感谢TEG数平同学dockerzhang和gosonzhang同学提供的tubemq-python-sdk),可实现不同的训练触发策略、参数冻结、样本回放策略,以及实时调整模型训练过程中LR、优化器等参数模型上线管理:接收实时产出的模型文件,并根据策略对其进行评估、上线、回滚等操作其中模型训练部分与算法或策略相关性最高,下面详细介绍该模块的一些功能设计。主要挑战在线学习与离线训练的最大区别就是,在线学习的样本是实时获取的,所以实时样本无法和离线样本一样进行全局shuffle。这使每一时刻下的实时样本分布与全局整体分布有很大差异。举个例子:随着时间的推移,上午的数据分布和下午的数据分布就有很大的差异,下两图展示了以13点区分的上午、下午的所有曝光中,游戏的占比和媒体的占比。可以看出,随着时间的推移,首先媒体流量分布就会产生变化,加之预算、频控等策略影响,Item分布也会产生变化。如果直接采用简单增量训练(直接load旧模型,train新数据的方式),很容易产生灾难性遗忘(CatastrophicForgetting),也就是模型“学飞了”。具体表现我们在下一节介绍。参数冻结由于实时数据无法进行全局shuffle,导致实时样本与离线样本分布差异很大,所以如果模型直接采用简单增量训练会产生灾难性遗忘的问题。我们基于以下三条假设提出参数冻结的方案:Embedding主要学习User/Item的表征;复杂的交叉结构(如FC、Cross等结构),主要学习用户与Item的交叉信息(如“男性喜欢玩枪战游戏”)线上分布的变化,主要体现在Item/User分布的变化(新建广告/新接入媒体等);而不是用户偏好的变化(比如男性用户上午喜欢打CF,下午突然集体改玩爱消除)在离线模型中,模型已经用大量的数据,比较好的训练了交叉结构我们在实时训练时,冻结模型的FC层、Cross层等交叉结构的参数,令其不进行更新,仅使用实时样本更新Embedding层的参数。离线实验效果如下:横轴是小时,纵轴是AUC,橙色线是采用简单增量训练,蓝色线是离线模型,灰色线是采用了参数冻结的增量训练。可以看出在没有进行参数冻结的情况下,模型效果始终不如离线模型,且到了后期模型的AUC甚至会低至0.5-0.6之间。这说明数据分布的变化对模型训练的影响十分严重。而采用了参数冻结后,模型没有出现灾难性遗忘的情况,且模型AUC平均提高了0.0007(即灰色线比蓝色线高0.0007,图中很难看出来)。在多日的线上AB实验中显示,采用了参数冻结后,线上点击率相对离线模型提升了约2.8%左右。另外需要注意的是,参数冻结的方案是以牺牲模型学习能力的方式来换取模型的稳定性,冻结的参数越多模型越稳定,但是学习能力也会大打折扣。所以该方案是一把双刃剑,还需要其他方案的配合才能取得较好的效果。样本回放仅仅进行参数冻结也不能完全解决灾难性遗忘的问题,仅仅是以牺牲学习能力来换取稳定性。即使采用了参数冻结后,我们依然发现了问题:模型的效果在一天内并不稳定。如下图所示,实验组的效果上午好,下午差,下图为一天内对照组的点击率提升幅度(对照组CTR-实验组CTR)。虽然一天内平均后总体向好,但是这并不是我们期望的结果。考虑到前面介绍的,一天内数据分布变化极大,模型确实存在“学了上午,忘了下午”的情况,所以我们添加了样本回放功能,即从昨天的样本中根据一定策略,选取部分离线样本,与在线实时样本一起给模型进行增量训练。离线样本的选取策略为:过去一天当前小时以后的样本(即~{YYYYMM(DD-1)23}的样本)进行采样,与实时样本按照一定比例混合。之所以采用这样的策略,是考虑到样本回放主要是让模型不要仅仅“着眼于当下”,还要考虑“未来的数据分布”。比如现在是下午1点,那实时样本都是1点左右的样本,而1点之前的样本模型已经训练过了,但是模型不知道1点之后的数据会是什么样子。所以我们就从昨天的样本中选取1点之后的样本加入进去。下图为AUC提升幅度对比图,蓝色线为仅冻结参数未添加回放,橙色线为冻结参数+样本回放。可见添加样本回放后,模型的效果进一步提升,AUC相对离线模型平均提升约0.001。另外多日的线上的AB实验显示,加入样本回放后线上点击率相对提升3%-6%,而且成功解决了前面提到的,模型效果在一天内“上午好,下午坏”的灾难性遗忘问题。下图为优化后对照组的点击率提升幅度(对照组CTR-实验组CTR)。蒸馏学习前面提到的两种方法中,参数冻结需要牺牲模型学习能力,样本回放需要牺牲样本的实时性(因为混入了早期离线样本),都涉及到一种权衡取舍。我们的最终目的无非是希望模型能够在学习的过程中“不要忘本”,不要忘记那个“最初的自己”。而蒸馏学习正好可以用teacher模型来影响student模型,让其学习teacher模型的信息,这与我们的目的不谋而合。我们采用离线模型作为teacher,实时训练模型作为student,在loss上除了student的Logloss损失,添加了teacher与student之间的交叉熵损失,两个损失的权重比为1:0.2,目的就是让student模型不要离teacher“太远”。下图为蒸馏学习的离线实验效果对比图,纵轴为AUC提升幅度(对照组AUC-实验组AUC),横轴是小时。两个灰色线是前面提到的参数冻结和样本回放的效果,蓝色线和橙色线是蒸馏学习的实验结果。可见蒸馏学习的效果提升十分显著,平均AUC提升0.0025以上(不放回蒸馏0.0025+,放回蒸馏0.0027+)。灵魂拷问AUC与CTR关系?在模型优化过程中,我们曾遇到过**AUC很高(或提升很多)但CTR效果不理想;或AUC提升幅度不大,但CTR提升幅度很大的情况,这是为什么呢?**想要回答这个问题,我们先来看AUC与CTR的关系。引入BaseAUC前面提到我们的特征中包含User特征、Item特征、Scene特征和交叉特征,而广告系统的任务就是为了从广告库中选取最合适的Item进行展示。也就是说,如果我们把Item特征和交叉特征删掉,pCTR的预估就完全不会考虑Item相关的信息,仅仅是给用户的“点击习惯”打个分而已。理论上这种情况下的点击率与随机推荐的点击率是相同的,因为对于每个Item都是相同的ECPM(假设不考虑pCVR、pLTV等其他环节的影响)。但是实际上这种情况下,因为模型中还有大量User特征和Scene特征,模型的AUC依然不等于0.5(实际上依然很高,假设能达到0.78)。说明从0.5->0.78这么多的AUC提升,其实对于CTR的提升没有半毛钱直接作用,因为模型只能对多个请求之间进行排序,而点击率提升需要模型对一个请求内部的多个Item进行排序。这种情况模型的主要作用应该是降低了偏差,我们称这时的AUC为BaseAUC。AUC提升的效果AUC的提升与线上CTR的效果并不是线性的。一般在项目初期,AUC的提升很容易,但对CTR的贡献一般会很小。因为这种情况下的提升,一般主要是靠User侧的特征撑起来的,关于Item侧以及交叉特征的贡献相对较小。这个阶段的优化,对PV间的排序优化比较明显,但是对PV内的排序优化不大。而在达到了BaseAUC之后,AUC再想继续提升,难度会很大,但是对CTR的贡献会非常明显,可能AUC提升0.0001就可以给CTR带来收益了。因为这时的提升主要是靠交叉特征,以及模型深度挖掘用户偏好带来的,这部分提升可以直接作用在一个PV内部。关于GAUC有同学肯定了解过《OptimizedCostperClickinTaobaoDisplayAdvertising》中提出的GAUC指标,这个指标就是为了解决前面提到的PV内/PV间的问题,该指标其实就是针对每个用户的行为算一个AUC,然后把所有用户的AUC算一个加权平均:GAUC同样的道理,我们也构造了一个SessionGAUC,即把每一个PV上(满足同一用户、同一媒体、同一广告形式内)的曝光行为算一个AUC,最后加权平均,但是我们遇到了一个问题。在淘宝的场景中,一个用户的行为可能相对更长,而且不会与其他广告主进行竞争,不涉及“竞得”的问题,所以单个用户也可以有足够的曝光点击次数来计算AUC。行为序列对比但是在联盟广告场景下,我们只有成功曝光情况下才能收集到曝光样本(我们无权拿到用户在媒体APP上其他行为的数据,只能拿到广告相关曝光、点击等数据),而且由于存在外部竞争以及内部的底价过滤等策略的影响,我们有大量广告请求无法成功展示,每个用户的平均曝光、点击次数非常少。如果想要达到能够计算AUC的要求(至少2次曝光,且至少1次点击),绝大多数的用户都被过滤了。剩余的用户中,也是绝大多数只有2次曝光和1次点击的边界情况。这种情况下计算得到的AUC代表性极差,用少量曝光行为计算的AUC来代表该用户的效果,用少数行为丰富的用户效果来代替整体大盘的用户效果。结果就是大部分的用户都“被代表”了。所以在联盟广告的场景下,GAUC的思路并不合适。实际上只要AUC突破了一个门槛(即类似前面提到的BaseAUC),将User特征和Scene特征压榨干净,后续的AUC提升与CTR的提升是有很强的正相关的。所以我们大可放心继续使用AUC这个指标,只是在项目初期要清楚,前期的AUC提升主要效果是降bias,而不是提升CTR。偏差与CTR的关系?前一节介绍了AUC和CTR的关系,但实际上影响CTR的还有偏差。完全有可能在AUC不变的情况下,通过优化偏差来提升CTR,这是为什么呢?偏差本身和CTR没有直接关系,但是在竞价环境下,偏差可以影响我们竞得的流量质量,从而影响整体CTR。举个简单例子,偏差是高估的,我们就花了更多钱买来低价值(低点击率)的曝光,但是整体曝光量会上升,而点击率下降;偏差是低估的,我们就舍弃了一些ECPM在竞得门槛附近的的曝光,留下来的都是ECPM更高的曝光,所以曝光量下降,但整体CTR提升。所以本质上这其实是一个量与质的权衡,当然权衡的最佳状态当然是偏差为0最好。AB实验你真的会用么?AB实验中的设备分流与请求分流在AB实验中,我们经常会需要选择根据设备分流还是请求分流。如果按照设备分流,通常需要先做AA实验,确保AB两组没有天然的差异性(即A组用户天然就比B组用户更活跃等因素的影响)。而且这个差异性可能是随时间变化的,可能工作日的时候两组差异小,周末两组差异大。所以设备分流实验中,这个因素的影响通常是不可忽略的。有的同学会认为如果用户量足够大,是不是就可以抹平两组间的天然差异?答案是肯定的,但是所需要的用户量会比预想的大。举一个极端的例子,在广告中如果要做ROI的AB实验,由于付费行为本身非常稀疏,且付费金额分布极其偏态(少数几个用户可能付费几十万,绝大多数付费只是首充),即使你广告大盘有1个亿的设备数,真正经过竞价、曝光、点击、转化后可能只剩几千个,再算上付费的可能就几十个,而这几十个里面可能只有一两个付费超过1000的大R。也就是说,虽然总体用户数很多,但是真正“有影响力的关键用户”会少很多。大盘用户量需要足够大到足以使“关键用户”足够多,才能抹平AB两组的差异,这通常比人们直观感觉中的量级要大。相反如果按照请求分流,好处是AB两组绝对不会存在差异性(除非代码有BUG),省去了AA实验的步骤,可以完全避免组间天然差异带来的影响。但是有些研究用户长期行为的实验(比如品牌实验),要求用户需要长期被分到同一个组中,就不适用请求分流,必须用设备分流。AB实验中的辛普森悖论如果实验组每一天的CTR都更高,就说明实验组更好么?答案是:不一定!设想这样一种情况,如果实验组模型对某个本来点击率就很高高的Item(比如一个很火的新游戏,很好看的素材等等)产生了高估,那实验组中这个Item(游戏/素材)的占比就会更高。那实验组的整体点击率就会更高。这并不是因为模型排序排的更准,而是模型更倾向于把“曝光机会”分配给优质的Item。所以我们在看AB实验结论的时候,还是要多留一个心眼,尝试下钻去看一看是否存在辛普森悖论造成的美好的假象。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:13 , Processed in 0.568375 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表