谷歌机器学习最佳工程实践

  |  

摘要: 一篇谷歌的机器学习工程最佳实践论文

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


这是 Martin Zinkevich在NIPS 2016 Workshop 分享的谷歌机器学习工程实践法则。

Martin Zinkevich 是 google 的研究科学家。

这份文档类似于《Google C++ Style Guide》,如果你的工作是基于机器学习模型的,那么建议你阅读一下这份资料。

ML phase 0: Before Machine Learning

Rule: #1: 不要害怕开发没有应用机器学习技术的产品

Rule: #2: 设计评价指标并设立优先级

Rule: #3: 先使用复杂的启发式规则,然后选择机器学习方法

ML phase 1: Your First Pipeline

Rule #4: 初版模型要简单,主要任务是确定系统流程的正确性

Rule #5: 系统运行状况要和算法的状况保持独立,以便之后算法迭代不会对系统造成较大影响。

Rule #6: 系统工作各阶段过度时,丢弃数据要谨慎

Rule #7: 寻找特征或者从外部补充其他相关数据

监控 (Monitoring)

Rule #8: 了解系统的时效性

算法运行对于数据的时效性有差异,如热榜需要每天更新数据,点击率预估更新部分数据频率更高。

Rule #9: 导出模型之前检测问题

Rule #10: 当心未被报告的失败

某些错误是不会有类似程序出错的异常,只会影响模型的性能,所以部署监控。

Rule #11: 文档化每个特征及其维护者

第一个目标

Rule #12: 不要过多的考虑优化指标的选择

起初的时候,只要选择正确的方法所有指标都会提升,没有必要刚开始对于指标的选择过多考虑。

Rule #13: 选择简单、可观察、可归因的指标作为第一个优化目标

Rule #14: 开始时使用可解释的模型,以便于调试

Rule #15: 对垃圾邮件过滤和质量排序,在策略上要区分开

对于垃圾邮件过滤,需要关注正反两类样本;但质量排序中只需要关注正常的样本,纵然也会存在违规、广告等,请记住,你的模型是排序,不是进行过滤。

ML Phase 2: 特征工程(Feature Engineering)

Rule #16: 对模型重建和迭代做出规划

Rule #17: 开始时,使用可直接观察或者记录的特征(而不是算法学习得到的特征)

Rule #18: 挖掘能够在不同的上下文中泛化的特征

Rule #19: 尽可能使用具体的特征

如评价博文的热度,首选博文近几天的浏览量,而不是博文表达的主题是不是流行。

Rule #20: 使用可理解的方式修改或组合新特征

如 Titanic生还预测中,姐妹个数+孩子个数表示家庭人口大小。

Rule #21: 在线性模型中学习到的特征权重数量和使用到的数据量成比例

Rule #22: 清除掉不会再使用的特征

人工系统分析(Human Analysis of the System)

Rule #23: 你不能代表大多数的用户

所以你不能代表用户做判断模型的表现好坏,要做A/B Test。

Rule #24: 评估模型间的差异

Rule #25: 选择模型时,实用性比预测能力更重要

如果模型不能达到业务的性能要求,即使指标再高也不会让你上线的。

Rule #26: 观察模型误判的数据,寻找规律,抽取新特征

Rule #27: 量化观察到的不利行为

Rule #28: 注意区分短期行为和长期行为

如端午节很多人在购物中购买粽子,这并不代表这些人是个吃货,为此专门构造特征表示购买粽子的行为是不合适的。

训练偏差(Training-Serving Skew)

Rule #29: 为保证服务和训练效果相同,最好将服务时的特征集合保存以作训练

Rule #30: 对采样样本加权而不是随意丢弃

Rule #31: 模型训练之后才上线,在此过程中数据有可能已经发生变化

如果训练特征有一个特征表示博文的浏览量,那么等到模型训练完,浏览量已经发生变化了。

Rule #32: 尽可能在训练和服务时复用代码

Rule #33: 使用不同数据集做训练和测试

Rule #34: 在二值分类过滤中(垃圾邮件检测),不要为了纯净数据过大的牺牲性能

Rule #35: 认识排序问题中的固有偏差

如下载排行榜中靠前的APP在本质上就诱导用户下载

Rule #36: 避免位置特征的回馈循环

内容的位置会显著影响用户与它交互的可能性(置顶App的下载量通常下载量更大)
处理这类问题的有效方法是加入位置特征
注意要保持位置特征和其他特征的分离性
不要交叉(cross)位置特征
理想情况下,让模型变成位置特征函数和其他特征函数的和

Rule #37: 评估训练和服务之间的偏差

ML Phase 3: 缓慢提升、精细优化、复杂模型

Rule #38: 如果优化目标没有包含此信息,就不要浪费时间在这些新特征上。

Rule #39: 基于多个指标做决策

Rule #40: 保持集成模型Simple

每个模型只能选择其一:只接收其他模型输入或只接收原始特征,不能两者兼有

Rule #41: 当性能平稳后,寻找新方向而不是精炼已有信息

Rule #42: 不要期望多样性、个性化和受欢迎程度有紧密联系

在以受欢迎程度为目标的系统上,多样性和个性化通常得到更低的权重
这并不是说多样性、个性化不重要,而是可以通过后处理来提高或者根据多样性和相关性改进目标

Rule #43: 其他人对不同的产品倾向相似,但你或许不同于此


Share