问题
1.LR,FM都比较适用高维稀疏特征,GBDT不适用。
解释来源于知乎:
2. 为什么采用GBDT而非RF
RF也是多棵树,但从效果上有实践证明不如GBDT。且GBDT前面的树,特征分裂主要体现对多数样本有区分度的特征;后面的树,主要体现的是经过前N颗树,残差仍然较大的少数样本。优先选用在整体上有区分度的特征,再选用针对少数样本有区分度的特征,思路更加合理,这应该也是用GBDT的原因。
RF+LR 可以并行训练,但是RF区分度不高。
3. 如何处理大量id类特征
【如果类别维度较高的话会导致该特征比较稀疏 难以学出有效的分割点】
(1)广告类对user id 的处理:利用出现频率和转化率来替代;
(2)wide&deep思想,id类特征放在lr阶段 ;这样做的好处既利用了GBDT对连续特征的自动离散化和特征组合,同时LR又有效利用了id类离散特征,防止信息损失。
AD ID类特征在CTR预估中是非常重要的特征,直接将AD ID作为feature进行建树不可行,顾考虑为每个AD ID建GBDT树。但互联网时代长尾数据现象非常显著,广告也存在长尾现象,为了提升广告整体投放效果,不得不考虑长尾广告[12]。在GBDT建树方案中,对于曝光充分训练样本充足的广告,可以单独建树,发掘对单个广告有区分度的特征,但对于曝光不充分样本不充足的长尾广告,无法单独建树,需要一种方案来解决长尾广告的问题。
(3)id类特征单独建树训练;对于id类树可以保留头部信息不受损失,对于非id类树,长尾资源可以利用其泛化信息。但这样做有一个缺点,介于头部资源和长尾资源中间的一部分资源,其有效信息既包含在泛化信息中(反馈CTR)中,又包含在id类特征中,而GBDT的非id类树只存下头部的资源信息,所以还是会有部分信息损失。
结论
1. 数据支撑去做决策,收货和实验数量成正比;
2.数据新鲜度:模型天级训练比周级训练在NE下降1%;
3.GBDT和LR模型采用不同的更新频率,解决训练耗时不同。gbdt的embedding肯定每次都不一样,所以gbdt重新训练的话,lr必须一同重新训练。
4.构建特征和lr训练使用同一训练集。
论文阅读
1. 实验设置
离线训练数据:2013年4季度任意一周的数据。尽量跟线上的条件保持一致,把这些数据分为训练集和测试集,并且模拟成线上数据流。本文的所有实验都是基于这个数据。
评估函数:
(1)NE,Normalized entropy
分子是逻辑回归的损失函数,分母是平均的损失,平均的损失实际上等于整个数据集的entropy,所以称为 normalized entropy。消除了不平衡数据集的影响。p代表平均经验CTR。
(2)Calibration = 预测点击数/实际点击数
AUC也是一个非常不错的评价指标,但是它有个问题。比如当我们的模型预测的CTR概率都偏高了2倍,我们可以通过Calibration校准,使用一个全局的0.5的系数来修正。修正之后NE也会提高,而AUC却保持不变。
在实际工作中,我们希望得到的是尽可能准确的预测每个广告被点击的概率,而不是仅仅得到相对的概率排序。所以AUC不如上面的NE、Calibration合适。
2. 预测模型架构
图中共有两棵树,x为一条输入样本,遍历两棵树后,x样本分别落到两颗树的叶子节点上,每个叶子节点对应LR一维特征,那么通过遍历树,就得到了该样本对应的所有LR特征。构造的新特征向量是取值0/1的。举例来说:上图有两棵树,左树有三个叶子节点,右树有两个叶子节点,最终的特征即为五维的向量。对于输入x,假设他落在左树第一个节点,编码[1,0,0],落在右树第二个节点则编码[0,1],所以整体的编码为[1,0,0,0,1],这类编码作为特征,输入到LR中进行分类。
可以把GBDT看作特征的转换器,把现实中的向量转换成紧凑的二值向量。从树根到叶子的路径,可以理解为特征的规则。把转换后的特征向量输入到线性分类器中,本质上是学习这些规则集合的权重。
GBDT用批处理的方式训练。
3. online learning
文章中提到的 Online Learning 包括三个部分: - Joiner 将每次广告展示结果(特征)是否用户点击(标签) join 在一起形成一个完成的训练数据; - Trainer 定时根据一个 small batch 的数据训练一个模型; - Ranker 利用上一个模块得到模型预测用户点击。
(1) waiting window 的设定:waiting window指的是在impression发生后,我们要等待多久才能够判定一个impression是否有click。如果waiting window过大,数据实时性受影响,如果waiting window过小,会有一部分click来不及join到impression,导致样本CTR与真实值不符。这是一个工程调优的问题,需要有针对性的找到跟实际业务匹配的合适的waiting window。除此之外,无论怎样我们都会漏掉一部分click,这就要求我们阶段性的全量retrain我们的模型,避免online learning误差的积累。
(2)分布式的架构与全局统一的action id:为了实现分布式架构下impression记录和click记录的join,facebook除了为每个action建立全局统一的request id外,还建立了HashQueue缓存impressions。hashQueue缓存的impression,如果在窗口过期时还没有匹配到click就会当作negative sample,这里说的窗口与上面提到的waiting window相匹配。facebook使用scribe实现了这一过程,更多公司使用Kafka完成大数据缓存和流处理。
(3)数据流保护机制:facebook专门提到了online data joiner的保护机制,因为一旦data joiner失效,比如click stream无法join impression stream,那么所有的样本都会成为负样本,由于模型实时进行online learning和serving,模型准确度将立刻受到错误样本数据的影响,进而直接影响广告投放和公司利润,后果是非常严重的。为此,facebook专门设立了异常检测机制,一旦发现实时样本数据流的分布发生变化,将立即切断online learning的过程,防止预测模型受到影响。
4.降采样和模型校正
对于巨型互联网公司来说,为了控制数据规模,降低训练开销,降采样几乎是通用的手段,facebook实践了两种降采样的方法,uniform subsampling和 negative down sampling。
(1)uniform subsampling是对所有样本进行无差别的随机抽样,为选取最优的采样频率,facebook试验了0.001,0.01, 0.1, 0.5 和1五个采样频率,loss的比较如下:
可以看到当采样率是10%时,相比全量数据训练的模型,仅损失了不到1%的效果。
(2)negative down sampling 保留全量正样本,对负样本进行降采样。除了提高训练效率外,负采样还直接解决了正负样本不均衡的问题,facebook经验性的选择了从0.0001到0.1的一组负采样频率,试验效果如下:
负采样带来的问题是CTR预估值的漂移,比如真实CTR是0.1%,进行0.01的负采样之后,CTR将会攀升到10%左右。而为了进行准确的竞价以及ROI预估等,CTR预估模型是要提供准确的有物理意义的CTR值的,因此在进行负采样后需要进行CTR的校正,使CTR模型的预估值的期望回到0.1%。校正的公式如下:
其中q是校正后的CTR,p是模型的预估CTR,w是负采样频率。
网友评论