生产机器学习系统 (Production ML Systems):数据依赖关系

数据之于机器学习开发者的重要性等同于代码之于传统编程人员的重要性。本课程重点介绍您应该围绕数据询问的各种问题。

数据依赖关系

  • 输入数据(特征)决定机器学习系统的行为。
    • 我们可以针对软件库编写单元测试,但数据呢?
  • 选择输入信号时要谨慎。
    • 甚至比决定要依赖哪个软件库时更谨慎吗?
  • 可靠性
    • 信号不可用时会出现什么情况?您知道吗?
  • 可靠性
    • 信号不可用时会出现什么情况?您知道吗?
  • 版本控制
    • 计算此信号的系统是否发生过变化?多久一次?会出现什么情况?
  • 可靠性
    • 信号不可用时会出现什么情况?您知道吗?
  • 版本控制
    • 计算此信号的系统是否发生过变化?多久一次?会出现什么情况?
  • 必要性
    • 信号的实用性是否能证明值得添加此信号?
  • 相关性
    • 是否有任何输入信号密不可分,以至于需要采取额外策略来梳理它们?
  • 相关性
    • 是否有任何输入信号密不可分,以至于需要采取额外策略来梳理它们?
  • 反馈环
    • 哪个输入信号可能会受到我的模型输出的影响?

机器学习系统的行为取决于其输入特征的行为和品质。当这些特征的输入数据发生更改时,您的模型也会随之变化。有时,这种变化是可取的,有时则反之。

在传统的软件开发中,您的注意力更多地放在代码而非数据上。在机器学习开发中,虽然编码仍是工作的一部分,但您必须同时关注数据。例如,在传统的软件开发项目中,编写单元测试来验证代码是一种最佳做法。而在机器学习项目中,您还必须不断地对输入数据进行测试、验证和监控。

例如,您应该持续监控您的模型以移除不用(或很少使用)的特征。假设某一特定特征对模型贡献很少或没有贡献。如果该特征的输入数据突然发生更改,则您模型的行为也可能会以意想不到的方式突然发生变化。

可靠性

以下是针对输入数据的可靠性询问的一些问题:

  • 信号是否始终可用?信号来源是否不可靠?例如:
  • 信号是否来自因负载过重而崩溃的服务器?
  • 信号是否来自每年 8 月去度假的人群?

版本控制

以下是针对版本控制询问的一些问题:

  • 计算此数据的系统是否发生过变化?如果是:
  • 多久一次?
  • 您如何知道系统发生变化的时间?

有时数据来自上游进程。如果该进程突然发生变化,您的模型可能会受到影响。

请考虑为从上游进程接收的数据创建您自己的副本。然后,只有当您确定这样做安全时,才跳转到下一版上游数据。

必要性

以下问题可以提醒您留意正则化

  • 特征的实用性是否能证明值得添加此特征?

人们往往倾向于向模型添加更多特征。例如,假设您找到一个新特征,添加该特征可让您的模型略微准确一点。较高的准确率听起来当然比较低的准确率更好。不过,现在您只是增加了自己的维护负担。添加的特征可能会意外降级,因此需要对它进行监控。在添加会带来短期利好的特征之前,请谨慎考虑。

相关性

某些特征会与其他特征相关联(正相关或负相关)。问问自己以下问题:

  • 是否有任何特征密不可分,以至于需要采取额外策略来梳理它们?

反馈环

有时,模型会影响其自身的训练数据。例如,来自某些模型的结果反过来是同一模型的直接或间接输入特征。

有时,一个模型会影响另一个模型。以下列两个股价预测模型为例:

  • 模型 A - 不理想的预测模型。
  • 模型 B。

由于模型 A 有误,因此会导致错误地决定购买股票 X 的股票,而购买这些股票会抬高股票 X 的价格。模型 B 将股票 X 的股价用作输入特征,因此它很容易对股票 X 的价值得出错误结论。然后,模型 B 会根据模型 A 的错误行为购买或销售股票 X 的股份,反过来,模型 B 的行为会影响模型 A,而这样很可能会触发郁金香狂热效应或导致 X 公司的股价下滑。