机器学习模型在开发期间可以达到95%的精度,在部署后仍然非常出色。
这是机器学习的令人沮丧的现实之一。
你训练模型,在测试组上评价它,看到令人印象深刻的结果,并且认为困难的部分已经结束了.
然后真正的用户开始与之互动.
预测越来越不准确。
为什么?
因为一个模型没有“真实世界”的训练。
它受过你提供的数据培训。
而这两件事并不总是一样。
本质上,机器学习模式是现实的抽象.
下面是业绩良好的模型在生产中可能仍然失败的一些原因。
1.
您的培训数据并不代表生产 假设您建立了一个模型来预测某项交易是否为欺诈。
你的培训数据可能是这样的: Monte Country December Fraud 500 Nigeria Mobile 0 1200 Nigeria Web 0 9000 Nigeria Mobile 1........................
如果您的历史交易大多来自移动用户,该模型可能会学习出对移动交易特别有效的模式.
但部署后,假设公司开始从网络用户那里收到更多的交易.
输入数据的分布已经改变.
你的模型在数学方面并没有突然变差.
它所看到的世界已经改变。
这通常被描述为数据漂移或更广义的分布转移[1].
您的测试集可能与您的培训数据过于相近。
当测试数据与培训数据过于相近时, 模型可以运行极佳。
考虑一个包含2024年和2025年客户记录的数据集.
如果随机将整个数据集分解为培训和测试集,这两年的记录可能会出现在两集中.
这可能适合于某些问题。
但假设顾客的行为随时间而改变。
接受随机混合历史数据培训的模型在评价期间可能看起来非常出色,而在2026年被要求预测行为时则会挣扎.
对于时间问题,如何分割数据。
有时按时间顺序划分比较现实: 培训:2024年1月-2025年12月 测试:2026年1月-2026年3月 目标不仅仅是获得高分的测试分.
目标是建立一个类似于该模型实际使用的评价.
3.
您的预处理可能不是相同的 想象一下您在训练前将数字变量标准化 。
在开发期间,您计算出与培训数据的平均和标准偏差.
但当模型部署时,有人会以不同方式执行预处理.
也许一栏的缩放不正确。
也许缺失的值处理方式不同。
也许用不同的映射来编码一个绝对变量。
模型本身没有改变。
输入模型的数据有。
这就是为什么预处理通常应作为机器学习管道的一部分,而不是作为断开步骤的集合.
例如,通过Scikit-Learn,可以结合预处理和建模: 管道有助于确保始终如一地实施同样的转变。
4.
目标可以改变,有时问题不是输入数据。
目标变量的意义会改变.
想象一个模型预测一个客户是否会拖欠贷款.
如果公司改变其“违约”的定义,历史标签和未来标签就可能不再完全相同。
这个模型仍然在解决它训练来解决的问题.
但问题本身已经改变。
这有时被称为概念漂移[2].
5.
制作有问题,你的笔记本 不是一个模型 在笔记本中只需要 产生预测。
生产系统还有其他要求。
它可能需要:迅速回应;处理上千项请求;处理缺失或出乎意料的值;处理不断变化的数据库;保持一致的预处理;日志预测;监测性能.
一个精度很高但无法接受的转售模型