作者:黄永刚
ML Phase III: 缓慢提升、精细优化、复杂模型
第二阶段就已经接近结束了。首先你的月收益开始减少。你开始要在不同的指标之间做出平衡,你会发现有的涨了而有的却降了。事情变得有趣了。获取收益变得更难了,机器学习也已经变得更加复杂了。
警告:这一部分比前面有更多的理论虚的东西。我们见过很多团队在机器学习的一二阶段过得还是很愉快的。一旦进入第三阶段,他们就不得不寻找自己的出路了。
Rule #38: 如果目标没有变化就不要在新特征上浪费时间
随着评价进入平稳期,你的团队开始关注系统目标以外的其他问题。像以前的状态一样,如果已存的算法目标没有覆盖产品的目标,你就要改变你的目标或者产品的目标。例如,你或许优化点击、赞、下载,但是都是基于部分人类评委专家做决策的。
Rule #39: 基于产品长期目标做决策
Alice有个想法可以降低安装预测的逻辑损失。她加了一个特征。逻辑损失也降低了。当她做线上实验时,安装率也上升了。但是,当她做审议会议的时候,有人指出日活跃用户数下降了5%。小组没有上线这个模型。Alice比较失望,但是现在认识到做这个决定是基于很多准则的,而只有一部分是可以使用ML来优化的。
事实是真实世界不是地下城与龙:没有‘血量’表示你产品的健康程度。团队必须收集信息作出统计以尝试高效的预测出系统将来会成为什么样子。他们需要关注约定;日活跃用户数,30日活跃用户数,收益,广告商的投资回报。这些可以在自己系统里面使用A/B测试衡量的指标只是长期目标的一个间接衡量,既要满足用户需求,还要用户量的增长,满足合作方的要求,多赚取收益。
当左右指标都上升(至少不降低)时,最容易做决定了。如果团队要在复杂的机器学习算法和简单的启发式方法中选择,如果简单启发式方法能够在这些指标中做的更好,就应该选择它。而且,对于所有可能的指标之间也没有明确的优先级。考虑下面两个场景:
实验 | 日活跃用户数 | 日收益 |
---|---|---|
A | 1 百万 | $4 百万 |
B | 2 百万 | $2 百万 |
如果当前系统是A,那么团队不可能转向B。如果当前系统是B,那团队不可能转向A。这可能和理性的行为是矛盾的。但是,改变指标后预测能不能成功不好说,因此存在巨大的风险。每一个都存在着风险。而且没有哪个指标可以说是最终的,“我的产品5年后是什么样子呢”?
个人来讲,另一方面倾向于可以直接优化的目标。大多的机器学习工具也倾向于这种情况,工程师也能够提取稳定特征。多目标学习问题从开始就强调这个问题。例如,可以针对每个指标建立一个有有约束的问题,之后将对于多个指标的问题结合起来一起优化。但是,并不是所有指标都是可以形成机器学习的目标函数。如果一个文档被点击了,或者一个APP被安装,是因为它们刚好被展示出来了。而且还很难找到为什么用户会访问你的网站。要对一个网站做整体的预测,这是很难的,就像计算机视觉和自然语言处理一样。
Rule #40: 使用简单模型做集成
使用原始数据并直接将内容进行排序,使用这种方式的模型都容易理解和调试。然而,如果讲这些模型集成起来效果会更好。为了尽可能保持简单,集成模型要么所有的输入是其他模型的输出,要么都是原始特征,最好不要两种都存在。而且要能够对这些基模型一起训练,否则会导致差的结果。
只将基模型的输出作为输入的集成最好使用简单的模型。这样也对集成模型性质有保证了。例如,基模型取得了增长,最起码不能集成之后的结果出现下降的情况。最好就是基模型可以某种意义上的解释,以便于基模型的变化不至于把集成模型搞混乱了。这样可以保证,基础分类器的预测概率增长在集成模型的概率上不会出现下降的情况。
Rule #41: 当性能进入瓶颈期,找其他信息源,而不是捣鼓已经有了的信息
你已经添加了用户人口信息,也添加过了文档的词组信息。也经过了模板摸索(指前面的两部分),也已经对正则化进行调节了。但是依然没有在关键指标上看到多于1%的性能提升。
那是时候采取一些激进的做法,对针对不同的特征采取其它方式。如从不同维度对用户在过去一天一周一年中的使用信息进行统计并形成文档。或者使用深度学习模型。根据投入估计期望,并相应的调整投入的精力。作为一个工程项目,你必须对添加新特征所增加的复杂度和增加的收益之间进行权衡。
Rule #42: 不要期盼多样性、个性化,或者相关性和受欢迎程度相关
追求多样性意味很多东西,需要种类多样的内容来源。个性化意味着每个用户都有各自的结果。关联性意味着对一个特定的查询须有特定恰当的结果。因此这三个属性和普通的共性是不同的。
还要一个问题,这种共性很难被打破。
如果你的系统正在度量点击、滞留时长、播放量、分享量等指标,其实你真正的是在度量内容的流行程度。有的时候,团队尝试学习多样性的个性模型。为了实现个性化,他们添加了一些特征想实现系统能够实现个性化(代表用户兴趣的特征)或者多样性,但最终会发现这些特征所获得的权重远远的低于他们期望得到的。
这不是说多样性,个性化等没有价值。如前面指出的规则一样,你可以做一些后处理来增加多样性等。如果在长期目标指数得到了增长,那你就可以说多样性或者其他相关性是有价值的了。也可以继续使用你的后处理,或基于多样性等相关性来直接修改目标函数。
Rule #43: 其他人对不同的产品倾向相似,但你或许不同于此
google团队已经使用另一个产品的模型在另一个产品上,并取得了较好的结果。你可能就遇到了这么一群小伙伴。另一方面,我见过一些团队试图在独立产品中作出个性化特征。是的,按理讲应该是可行的的,但是现在看来,并不是这样。使用一个属性的原始数据来预测另一个属性的行为,有的时候是可行的。要记住,即使知道一个用户在另一个属相上的历史行为对你来说都是有帮助的。
reference:
- http://feisky.xyz/machine-learning/resources/rules_of_ml.html
- Rules of Machine Learning: Best Practices for ML Engineering