文章链接: https://quinonero.net/Publications/predicting-clicks-facebook.pdf
- abstract
Facebook日活跃度7.5亿,活跃广告主1百万
特征工程最重要:user和ad的历史信息胜过其他特征
轻微提升模型效果:数据新鲜度、学习率、数据采样
增加一个重要特征和选择正确的模型更关键
- introduction
按点击收费广告效果依赖于点击率预估。相比于搜索广告使用搜索query,Facebook更依赖人口和兴趣特征。
本文发现决策树和逻辑回归的混合模型比其他方法好3%。
线性分类两个要素:特征变换、数据新鲜度
在线学习
延时、可扩展性
- experimental setup
划分训练数据和测试数据模拟在线数据流。
评估指标使用预测精度:归一化熵(Normalized Entropy,NE)和校正度(calibration)
NE = 预测log loss/平均历史ctr;越低效果越好。使用背景ctr(即平均历史ctr)是为了评估相对历史ctr更不敏感。
calibration = 平均估计ctr/历史ctr = 期望点击数/实际点击数。
不用AUC是因为它度量排序效果且没有校正度概念。NE反映了预测精度且隐藏反映校正度。
- prediction model structure
使用决策树做特征变换
更新的数据得到更好效果
SGD:
Bayesian online learning scheme for probit regression (BOPR)的似然和先验:
更新算法:
—— decision tree feature transforms
连续特征:离散化分桶
类别特征:笛卡尔积
每个GBDT输出作为编码某种规则的特征,再用线性分类器:
有GBDT特征变换相对于没有,NE下降3.4%。一般的特征工程只能下降千分之二左右。
使用GBDT特征变换先出减少特征数,代价仅仅减少很少的效果。
—— data freshness
周级别更新改为天级别更新,NE下降1%。因此需要天级别更新。
线性分类器部分可以实时更新
—— online linear classifer
#1,#2,#3 每个特征有独立的学习率
#4,#5 所有特征共享一个学习率
效果排名:#1,#2=#5,#4,#3。
#1是LR,独立学习率。
#5全局统一学习率的问题主要因为不同特征有取值的样本的个数差距大。样本少的特征权重衰减过快。
#3虽然缓解此问题但是仍然差,因为学习率衰减太快导致过早结束训练。
LR和BOPR效果接近,但是LR模型比BOPR小一半。不过BOPR有Bayes形式,更适合explore/exploit方法。
—— online data joiner
结合requestID拼接点击和展示,HashQueue存impression,HashMap存click。展示需要等待点击事件,等待时间窗需要仔细调,过小点击拼接不上、过大需要更多存储且时效性差。
有点击无法拼接意味着历史ctr低于真实值,因此需要校正。
需要做保护机制,比如click数据流卡住,trainer需要断开与joiner的连接。
- containing memory and latency
—— number of boosting trees
#leaves per tree <= 12
500 trees取得大部分提升
而且为了计算和存储效率,数的棵数不要太多。
—— boosting feature importance
一般少量特征贡献大部分提升。top10特征贡献一半特征重要度,last300贡献<1%重要度。
几个特征举例
contextual: local time of day, day of week, device, current page
historical: cumulative number of clicks on an ad, avg ctr of the ad in last week, avg ctr of the user
—— historical features
historical比contextual更有用:top10重要度都是historical特征。
contextual特征更适合处理冷启动问题。
contextual特征更依赖数据新鲜度,当然部分因为historical特征已经包含长期累积的用户行为
- coping with massive training data
亿级别以上样本量
—— uniform subsampling
更多数据效果更好。不过10%数据只有1%效果损失。
—— negative down sampling
类别不均衡需要负例下采样,目前最佳采样率是0.025
—— model re-calibration
因为负采样所以需要ctr校正。