文章连接: https://quinonero.net/Publications/predicting-clicks-facebook.pdf算法
Facebook日活跃度7.5亿,活跃广告主1百万学习
特征工程最重要:user和ad的历史信息赛过其余特征测试
轻微提高模型效果:数据新鲜度、学习率、数据采样ui
增长一个重要特征和选择正确的模型更关键编码
按点击收费广告效果依赖于点击率预估。相比于搜索广告使用搜索query,Facebook更依赖人口和兴趣特征。spa
本文发现决策树和逻辑回归的混合模型比其余方法好3%。.net
线性分类两个要素:特征变换、数据新鲜度3d
在线学习orm
延时、可扩展性blog
划分训练数据和测试数据模拟在线数据流。
评估指标使用预测精度:归一化熵(Normalized Entropy,NE)和校订度(calibration)
NE = 预测log loss/平均历史ctr;越低效果越好。使用背景ctr(即平均历史ctr)是为了评估相对历史ctr更不敏感。
calibration = 平均估计ctr/历史ctr = 指望点击数/实际点击数。
不用AUC是由于它度量排序效果且没有校订度概念。NE反映了预测精度且隐藏反映校订度。
使用决策树作特征变换
更新的数据获得更好效果
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的链接。
—— 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特征已经包含长期累积的用户行为
亿级别以上样本量
—— uniform subsampling
更多数据效果更好。不过10%数据只有1%效果损失。
—— negative down sampling
类别不均衡须要负例下采样,目前最佳采样率是0.025
—— model re-calibration
由于负采样因此须要ctr校订。