为什么您的 ML 模型在训练中有效但在生产中失败

构建生产 ML 系统的惨痛教训,其中存在数据泄漏、默认值、群体变化以及时间不按我们预期的方式运行。为什么您的 ML 模型在训练中有效但在生产中失败的帖子首先出现在《走向数据科学》上。

来源:走向数据科学

,我为产品公司开发实时欺诈检测系统和推荐模型,这些系统在开发过程中看起来非常出色。离线指标很强。AUC 曲线在整个验证窗口中保持稳定。特征重要性图讲述了一个干净、直观的故事。我们充满信心地发货。

几周后,我们的指标开始发生变化。

推荐的点击率开始下滑。欺诈模型在高峰时段的表现不一致。有些决定让人感觉过于自信,而另一些则奇怪地盲目。模型本身并没有退化。没有突然的数据中断或管道损坏。失败的是我们对系统在现实世界中遇到时间、延迟和延迟真相时如何表现的理解。

这篇文章就是关于这些失败的。只有当机器学习系统与现实发生冲突时,这些安静、平淡的问题才会出现。不是优化器选择或最新架构。这些问题不会出现在笔记本电脑中,但会在凌晨 3 点的仪表板上出现。

我的信息很简单:大多数生产 ML 失败是数据和时间问题,而不是建模问题。如果您没有明确设计信息如何到达、成熟和变化,系统会悄悄地为您做出这些假设。

时间旅行:假设泄露

时间旅行是我见过的最常见的生产机器学习失败,也是最少讨论的具体问题。当你提到泄漏时,每个人都会点头。很少有团队能够指出它发生的确切行。

让我明确地说一下。

想象一个包含两个表的欺诈数据集:

  • transactions: 付款发生时
  • 退款:报告欺诈结果时
  • 我们想要的功能是 user_chargeback_count_last_30_days。

    批处理作业在一天结束时午夜之前运行,并计算过去 30 天的退款计数。对于用户 U123,计数为 1。截至午夜,这实际上是正确的。

    现在查看最终连接的训练数据集。

    这是模型作弊的地方。

    成为信号的功能默认值