首页天道酬勤ctr 点击率(新版facebook)

ctr 点击率(新版facebook)

admin 12-01 12:39 234次浏览

本文将带领你重读脸书2014年发表的CTR预测领域的一篇经典论文《Practical Lessons from Predicting Clicks on Ads at Facebook》。

在这篇文章中,脸书提出了GBDT (Gradient Boosting决策树)LR(Logistics revolution)的经典CTR模型结构,可以说开启了特征工程建模和自动化的新阶段。此外,五年前采用的在线学习、在线数据加入器、负向下采样等技术,在今天也具有很强的工程意义。

让我们回顾一下这份当时很流行的报纸,现在我们经常看。

文章00-1010的用户场景是点击率估算的标准场景,只需要强调一点,因为我们需要用CTR来计算准确的出价、ROI等重要的后续估算值,所以CTR模型的估算值需要是具有物理意义的准确CTR,而不仅仅是输出广告排名之间的关系。因此,本文不仅将CTR标定作为一个重要的评价指标,最后还介绍了模型标定的相关方法。

用户场景

计算广告方向的同学应该对GBDT LR模型有所了解,这一点帮助都没有。这是本文最大的贡献。虽然文章其他部分的价值不亚于模型,但是有必要再次回顾模型,清楚地了解它的技术细节。

简而言之,本文提出了一种模型结构,该结构使用GBDT自动过滤和组合特征,然后生成新的特征向量,然后使用该特征向量作为逻辑回归的模型输入来预测CTR。

GBDT左后模型结构

这里需要强调的是,用GBDT构建特征工程和用LR预测CTR这两个步骤是独立训练的。所以,自然不存在LR的梯度如何回到GBDT这样复杂的问题。但是LR预测CTR的过程是显而易见的,这里就不赘述了。让我们关注GBDT如何构造新的特征向量。

众所周知,GBDT是由几棵回归树组成的森林,后一棵树利用前一片森林的结果和真实结果的残差作为拟合目标。每棵树的生成过程都是一个标准的回归树生成过程,所以每个节点的拆分都是一个自然的特征选择过程,多层节点的结构自然进行有效的特征组合,有效解决了以往特征选择和特征组合的难题。

我们使用训练集来训练GBDT模型,然后我们可以使用该模型来构建特征工程。具体过程如下:样本输入到GBDT的一个子树后,最终会按照每个节点的规则落入某个叶子节点。然后我们将这个叶节点设置为1,其他叶节点设置为0,由所有叶节点组成的向量构成树的特征向量,并将GBDT所有子树的特征向量串联起来,构成后续LR输入的特征向量。

例如,例如,GBDT由三个子树组成,每个子树有四个叶节点。训练样本进来后,落入子树1的第三个叶节点,那么特征向量为[0,0,1,0],子树2的第一个叶节点,特征向量为[1,0,0,0]。最后将所有的特征向量串联起来,最终的特征向量为[0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1]。然后我们用这个向量作为LR的输入来预测CTR。

引入GBDT LR车型后,与纯LR和GBDT相比,推广效果非常显著。从下表可以看出,与纯LR或Trees模型相比,混合模型减少了3%的损失。

LR树模型的损失比较

为了确定最佳的GBDT子树大小,facebook绘制了子树大小和损失之间的关系曲线如下:

GBDT子树数量与损失的关系

可以看出,在500个以上的子树规模后,增加子树规模对损失的下降贡献不大。特别是最后1000个子树只贡献了损失下降的0.1%,最后facebook选择了600作为它的子树大小。

该模型的优点已经在上面提到,即特征组合和特征筛选可以自动进行。然而,在实践中,这种模式的缺陷也很明显。与FTRL、FM、NN等可以通过梯度下降训练的模型相比,GBDT缺乏在线学习的能力。

力,因此我们往往只能相隔一天甚至几天才能够 update GBDT 模型,势必影响模型的实效性,那么 Facebook 是如何解决模型更新的问题的呢?

模型的实效性问题和更新策略

虽然我们的直觉是模型的训练时间和 serving 时间之间的间隔越短,模型的效果越好,但为了证明这一点,facebook 的工程师还是做了一组实效性的实验,在结束模型的训练之后,观察了其后 6 天的模型 loss(这里采用 normalized entropy 作为 loss)。

模型更新延迟与 loss 的关系

可以看出,模型的 loss 在第 0 天之后有所上升,特别是第 2 天过后显著上升。因此 daily update 的模型相比 weekly update 的模型效果肯定是有大幅提升的。

但囿于 facebook 巨大的数据量以及 GBDT 较难实施并行化的原因,GBDT 的更新时间往往超过 24 小时,所以为了兼顾 data freshness 和客观的工程要求,facebook 采取了下面的模型更新方法:

The boosted decision trees can be trained daily or every couple of days, but the linear classifier can be trained in near real-time by using some flavor of online learning.

就是说 GBDT 的部分几天更新一次,而 LR 的部分进行准实时的更新,这无疑是很好的工程实践经验。时至今日,我们已经开始使用大量不同的 embedding 方法进行特征编码,facebook 当时的做法也对我们现在的工程实践有重要的参考价值。因为大量深度学习 embedding 方法的更新计算开销也非常大,但对实效性要求并不高,我们也完全可以低频更新 embedding,高频或实时更新基于 embedding 特征的 LR,NN 等预测模型。

facebook 的实时数据流架构

为了实现模型的准实时训练,facebook 专门介绍了其基于 Scribe 的数据流架构,文中称其为 online data joiner。

该模块最重要的作用是准实时的把来自不同数据流的数据整合起来形成 sample features,并最终与 click 数据进行 join,形成完整的 labeled sample。在整个过程中,我认为最应该注意的有三点:

waiting window 的设定:waiting window 指的是在 impression 发生后,我们要等待多久才能够判定一个 impression 是否有 click。如果 waiting window 过大,数据实时性受影响,如果 waiting window 过小,会有一部分 click 来不及 join 到 impression,导致样本 CTR 与真实值不符。这是一个工程调优的问题,需要有针对性的找到跟实际业务匹配的合适的 waiting window。除此之外,无论怎样我们都会漏掉一部分 click,这就要求我们阶段性的全量 retrain 我们的模型,避免 online learning 误差的积累。分布式的架构与全局统一的 action id:为了实现分布式架构下 impression 记录和 click 记录的 join,facebook 除了为每个 action 建立全局统一的 request id 外,还建立了 HashQueue 缓存 impressions。hashQueue 缓存的 impression,如果在窗口过期时还没有匹配到 click 就会当作 negative sample,这里说的窗口与上面提到的 waiting window 相匹配。facebook 使用 scribe 实现了这一过程,更多公司使用 Kafka 完成大数据缓存和流处理。数据流保护机制:facebook 专门提到了 online data joiner 的保护机制,因为一旦 data joiner 失效,比如 click stream 无法 join impression stream,那么所有的样本都会成为负样本,由于模型实时进行 online learning 和 serving,模型准确度将立刻受到错误样本数据的影响,进而直接影响广告投放和公司利润,后果是非常严重的。为此,facebook 专门设立了异常检测机制,一旦发现实时样本数据流的分布发生变化,将立即切断 online learning 的过程,防止预测模型受到影响。

降采样和模型校正

对于巨型互联网公司来说,为了控制数据规模,降低训练开销,降采样几乎是通用的手段,facebook 实践了两种降采样的方法,uniform subsampling 和 negative down sampling。

uniform subsampling 是对所有样本进行无差别的随机抽样,为选取最优的采样频率,facebook 试验了 0.001,0.01,0.1,0.5 和 1 五个采样频率,loss 的比较如下:

可以看到当采样率是 10% 时,相比全量数据训练的模型,仅损失了不到 1% 的效果。

另一种方法 negative down sampling 保留全量正样本,对负样本进行降采样。除了提高训练效率外,负采样还直接解决了正负样本不均衡的问题,facebook 经验性的选择了从 0.0001 到 0.1 的一组负采样频率,试验效果如下:

大家可以看到,当负采样频率在 0.025 时,loss 不仅优于更低的采样频率训练出来的模型,居然也优于负采样频率在 0.1 时训练出的模型,虽然原文没有作出进一步的解释,但推测最可能的原因是解决了数据不均衡问题带来的效果提升。

负采样带来的问题是 CTR 预估值的漂移,比如真实 CTR 是 0.1%,进行 0.01 的负采样之后,CTR 将会攀升到 10% 左右。而为了进行准确的竞价以及 ROI 预估等,CTR 预估模型是要提供准确的有物理意义的 CTR 值的,因此在进行负采样后需要进行 CTR 的校正,使 CTR 模型的预估值的期望回到 0.1%。校正的公式如下:

其中 q 是校正后的 CTR,p 是模型的预估 CTR,w 是负采样频率。大家可以利用简单的转换关系就可以得出上述公式,有兴趣的同学可以手动推导一下。

至此,我们介绍完了 facebook 这篇经典的 CTR 预估论文,可以看到虽然五年过去了,我们仍能从中汲取不少模型改造和工程实现的经验,就我个人来言,最值得学习的有下面三点:

特征工程模型化。五年前在很多从业者还在通过调参经验尝试各种特征组合的时候,利用模型进行特征自动组合和筛选是相当创新的思路,也几乎是从那时起,各种深度学习和 embedding 的思想开始爆发,一脉相承的发扬着特征工程模型化的思路。模型复杂性和实效性的权衡。对 GBDT 和 LR 采用不同的更新频率是非常工程化和有价值的实践经验,也是对组合模型各部分优点最大化的解决方案。有想法要用数据去验证。这其实是我读完这批文章最大的感触,在做算法工程师的过程中,我们其实是有很多直觉上的结论,比如 data freshness 的影响有多大,GBDT 应该设置多少颗子树,到底是应该用负采样还是 uniform 采样,针对这些问题,facebook 告诉你的是,用数据说话,无论是多么小的一个选择,都应该用数据去支撑,这才是一位工程师严谨的工作态度。

最后惯例提出两个问题供大家讨论:

如果采用 random forest 替代 GBDT,有哪些优点和缺点?GBDT+LR 这个模型结构,是否能够有效处理大量 ID 类特征,为什么?如果希望处理大量 ID 类特征,我们应该如何改进这个模型?

参考资料:

Practical Lessons from Predicting Clicks on Ads at Facebook

Computational Advertising Paper List

作者:dfdjqm,硅谷高级工程师,原文发表在“知乎专栏 dfdjqm的机器学习笔记”上,雷锋网(公众号:雷锋网)获授权转载。

原文链接:https://www.leiphone.com/news/201903/5Z2Hn1mKQ42zSaRr.html

本文来源于人人都是产品经理合作媒体 @雷锋网,作者@dfdjqm

题图来自Unsplash,基于CC0协议。

CentOS 7 升级 gccCentOS 7 安装 Docker-CELinux 环境变量配置全攻略跨境电商:亚马逊和独立站
NetApp HCI:解耦合带来超融合更大想象力 vnr网络(mimoji)
相关内容