作为萌新, 感觉这次读的论文在业界影响力还蛮大的样子。 Google显示引用数200+, 同时还有一些大神已经做了翻译。
太感谢他们了!
原文Paper: PDF: Practical Lessons from Predicting Clicks on Ads at Facebook
翻译文章: https://note.youdao.com/ynoteshare1/index.html?id=866cda0a11142307c27b6c072a79d3eb&type=note#/
自我总结的要点:
- Feature 远比算法重要
但是保密原因, 论文作者并不能公布他们Feature上面的细节。(下文还是略微提到了一些~) - 对于连续的值,一个技巧是学习非线性变换装箱, 并把bin索引当成一个分类特征。 FB他们使用的一种算法叫做:增强决策树(boosted decision trees )
- 根据作者提供的数据, 单独使用LR或者单独使用BDT效果都很一般。 但是组合之后, 他们的效果拔群, 提升了3.4%. 一般特征工程针对这种问题只能提升1% 这样
- 数据新鲜度
跟我们的预期符合: 数据最好每天训练。 间隔越久, 效果越差。而且下降还挺明显的。 - 因此提出: 在线线性分类器
在线学习时, 相应的调整学习速率效果最好。
并且我发现:全局使用相同的速率,效果差别不是非常大(≈0.4%这样), 因此个人觉得这个调整可以优先级放低一些。 - 注意: 广告也可能有类似“幸存者偏差”的问题
即: 有的选项只提供了“同意”没有提供“不同意” 这种按钮。 比如优酷视频广告只有“点击”没有“跳过/取消”的按钮。 一个解决办法就是调整时间窗口。 - 决策树数量的影响
一般来说, 树的数量越多, 训练精度越高。 但是也要注意是不是过拟合。 同时树的数量越多, 在预测的时候耗时越大、内存消耗也越大。
解决方案: 在训练的时候注意观察曲线,看看什么时候下降开始不太明显, 同时到什么阶段会出现过拟合? (就是误差又开始往上跑了。) - 只保留足够重要的特征
特征也大概符合80-20原理
。 - 历史特征很重要
所谓历史特征: 比如这个用户之前的操作、点击习惯。 除非是一个新用户、新广告(冷启动问题),否则历史特征非常重要。
背景特征/上下午特征简述: 可以是一天中的本地时间、一周中的某一天等,
历史特征可以是广告点击的累积次数等。 上下文特性的价值完全取决于有关广告将要显示的上下文的当前信息,例如用户使用的设备或用户所在的当前页面。相反,历史特征取决于广告或用户以前的交互,例如上周广告的点击率,或者用户的平均点击率。 - 通过负采样提高性能
比如广告点击率是 0.1%, 这个类别是极度极度的不平衡的。 负采样是解决的办法~ 只不过最后要记得做校正(Re-Calibration)
本文原创, 转载请注明出处:
https://www.flyml.net/2019/02/05/facebook-ctr-lesson-sharing/
文章评论