生产机器学习系统:该问哪些问题#
本节要点:
- 持续监控:在生产环境里不断评估特征的重要性,把没用的特征摘掉,既保住预测质量,也省下资源开销。
- 数据可靠性:数据源稳不稳、上游流程会不会变、要不要自己留一份副本,都是上线前必须想清楚的事。
- 反馈回路:模型的预测会反过来影响后来的输入数据,在相互耦合的系统里尤其容易放大偏差。
- 价值权衡:特征值不值得留下,既要看它有没有用,也要看它值不值那份维护成本。
- 隔离回路:定期评估模型会不会陷入反馈回路,真发现了,就把它隔离开。
模型真正上线之后,工作才算开始。这一节要讲的,就是你应该对数据和模型提出的那些问题。
每个特征真的有用吗?#
模型在跑,你就得一直盯着它,把那些对预测几乎没有贡献、甚至毫无贡献的特征清理掉。为什么不能放着不管?因为只要某个特征的输入数据突然变了,模型的行为就可能跟着突变,而且往往是朝着你不想要的方向突变。
顺着这个思路,我们还要再追问一个相关的问题:这个特征的作用,值得它带来的那份成本吗?
加特征这件事永远有诱惑力。比如你发现一个新特征,加上它之后模型的预测准了一点点。准一点点当然比差一点点好,可与此同时,这个多出来的特征也给你添了一份维护负担。
数据来源可靠吗?#
关于输入数据的可靠性,下面几点值得你逐一追问:
这个信号是不是一直都能拿到?还是来自一个靠不住的来源?比如:
信号来自一台在负载高峰时就会崩溃的服务器?
信号来自一群每年八月都会去休假的人?
计算模型输入数据的那个系统,会不会发生变化?如果会:
多久变一次?
它变了之后,你怎么知道?
有件事值得考虑:把上游传过来的数据自己也留一份副本。这样,只有当你确信切换是安全的,才把上游数据推进到下一个版本。
你的模型是不是处在反馈回路里?#
有时候,模型会影响它自己的训练数据。比如某些模型的输出结果,反过来又成了同一个模型的输入特征,这可能是直接的,也可能是间接的。
还有一种情况,是模型影响到另一个模型。想象有两个用来预测股价的模型:
模型 A,一个预测做得很糟的模型。
模型 B。
模型 A 有 bug,于是它错误地决定买入 X 公司的股票。这笔买入把 X 公司的股价推高了。模型 B 把 X 公司的股价当作输入特征,因此它会对 X 公司的价值做出错误判断。接下来,模型 B 就可能基于模型 A 的错误行为去买卖 X 公司的股票。而模型 B 的行为反过来又会影响到模型 A,甚至可能引发一场郁金香狂热,或者让 X 公司的股价一路崩盘。
练习:检查你的理解#
下面六个模型,哪三个容易陷入反馈回路?
A. 一个面部属性模型,用来检测照片里的人物是否在微笑,它定期在一个每月自动更新的图库素材库上训练。
B. 一个交通预测模型,预测海滩附近高速公路出口的拥堵情况,特征之一是海滩的人流量。
C. 一个书籍推荐模型,根据热度(也就是图书被购买的次数)向用户推荐他们可能喜欢的小说。
D. 一个大学排名模型,评分依据之一是各校的选择性 —— 即申请学生中被录取的比例。
E. 一个房产估价模型,用面积(平方米)、卧室数量和地理位置作为特征来预测房价。
F. 一个选举结果模型,在投票站关闭之后抽样调查 2% 的选民,预测市长竞选的获胜者。