Facebook经典CTR预估模型,特征工程模型化、自动化GBDT+LR

背景/来源/参考:

  • 来自知乎王喆机器学习笔记《回顾Facebook经典CTR预估模型》,和推荐系统的局部更新(相反于全量更新)有关,《如何增强推荐系统模型更新的「实时性」?》
  • Facebook在2014发表的“Practical Lessons from Predicting Clicks on Ads at Facebook”

摘要:

  • 在这篇文章中,Facebook提出了经典的GBDT(Gradient Boosting Decision Trees)+LR(Logistics Regression)的CTR模型结构,可以说开启了特征工程模型化、自动化的新阶段。其在五年前就采用的online learning,online data joiner,negative down sampling等技术时至今日也有极强的工程意义。简而言之,文章提出了一种利用GBDT自动进行特征筛选和组合,进而生成新的feature vector,再把该feature vector当作logistic regression的模型输入,预测CTR的模型结构。
 
模型:
  • 大家知道,GBDT是由多棵回归树组成的树林,后一棵树利用前面树林的结果与真实结果的残差做为拟合目标。每棵树生成的过程是一棵标准的回归树生成过程,因此每个节点的分裂是一个自然的特征选择的过程,而多层节点的结构自然进行了有效的特征组合,也就非常高效的解决了过去非常棘手的特征选择和特征组合的问题。
  • 我们利用训练集训练好GBDT模型,之后就可以利用该模型构建特征工程。具体过程是这样的,一个样本在输入GBDT的某一子树后,会根据每个节点的规则最终落入某一叶子节点,那么我们把该叶子节点置为1,其他叶子节点置为0,所有叶子节点组成的向量即形成了该棵树的特征向量,把GBDT所有子树的特征向量concatenate起来,即形成了后续LR输入的特征向量。
  • 举例来说,比如GBDT由三颗子树构成,每个子树有4个叶子节点,一个训练样本进来后,先后落到了“子树1”的第3个叶节点中,那么特征向量就是[0,0,1,0],“子树2”的第1个叶节点,特征向量为[1,0,0,0],“子树3”的第4个叶节点,特征向量为[0,0,0,1],最后concatenate所有特征向量,形成的最终的特征向量为[0,0,1,0,1,0,0,0,0,0,0,1],我们再把该向量作为LR的输入,预测CTR。
  • 引入了GBDT+LR的模型后,相比单纯的LR和GBDT,提升效果是非常显著的。混合模型比单纯的LR或Trees模型在loss上减少了3%。
  • GBDT子树数量与loss的关系画图,在规模超过500棵子树后,增加子树规模对于loss下降的贡献就微乎其微了,最终facebook选择了600作为其子树规模。
 
模型缺陷
  • 该模型的优势我们上面已经提到,即可以自动进行特征组合和特征筛选,但在实践过程中,模型的缺陷也比较明显,相比FTRL,FM,NN等能够通过梯度下降训练的模型来说,GBDT缺乏online learning的能力,因此我们往往只能相隔一天甚至几天才能够update GBDT模型,势必影响模型的实效性,那么Facebook是如何解决模型更新的问题的呢?

模型的实效性问题

  • 模型的训练时间和serving时间之间的间隔越短。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的部分进行准实时的更新
  • facebook当时的做法也对我们现在的工程实践有重要的参考价值。因为大量深度学习embedding方法的更新计算开销也非常大,但对实效性要求并不高,我们也完全可以低频更新embedding,高频或实时更新基于embedding特征的LR,NN等预测模型。

facebook的实时数据流架构

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

  • 1.waiting window的设定:waiting window指的是在impression发生后,我们要等待多久才能够判定一个impression是否有click。waiting window指的是在impression发生后,我们要等待多久才能够判定一个impression是否有click。
    • 如果waiting window过大,数据实时性受影响,如果waiting window过小,会有一部分click来不及join到impression,导致样本CTR与真实值不符。
    • 这是一个工程调优的问题,需要有针对性的找到跟实际业务匹配的合适的waiting window。
    • 除此之外,无论怎样我们都会漏掉一部分click,这就要求我们阶段性的全量retrain我们的模型,避免online learning误差的积累。
  • 数据流保护机制: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五个采样频率,当采样率是10%时,相比全量数据训练的模型,仅损失了不到1%的效果。
    •  negative down sampling 保留全量正样本,对负样本进行降采样。除了提高训练效率外,负采样还直接解决了正负样本不均衡的问题,facebook经验性的选择了从0.0001到0.1的一组负采样频率。当负采样频率在0.025时,效果最好。
  • 、负采样带来的问题是CTR预估值的漂移,比如真实CTR是0.1%,进行0.01的负采样之后,CTR将会攀升到10%左右(1000次点击一次变成10次点击一次)。而为了进行准确的竞价,CTR预估模型是要提供准确的有物理意义的CTR值的,因此在进行负采样后需要进行CTR的校正,使CTR模型的预估值的期望回到0.1%。校正的公式如下.
  • q =正/(正+负)
  • p = 正/(正 + w负)   另负/正=x,消去x


 
 
 
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/pocahontas/p/11394393.html