当你将一个模型投入实际使用后,它可能会逐渐退步。这时我们应该如何应对?
你可能已经知道,数据是成功实现机器学习(ML)系统的关键因素。然而,这些数据提供的准确预测能持续多久呢?在所有ML项目中,预测数据如何随时间变化是一个关键问题。在一些项目中,我们往往低估了这一点,从而难以达到高准确率。在我看来,在PoC(概念验证)阶段之后,一旦你对自己的项目充满信心,就应该制定一个计划来保持模型的更新。
事实上,模型在首次使用时通常是最准确的。这种现象被称为“概念漂移”,尽管学术界对此进行了大量研究,但在工业实践中仍然经常被忽视。
当模型试图预测的目标变量的统计特性随着时间以不可预见的方式发生变化时,就会发生概念漂移。这会导致预测准确性随时间下降。
例如,如果你使用ML来预测商店的需求和价格,你最好考虑本周的天气、日历以及竞争对手的行为。在概念漂移的情况下,我们对数据的解释会随时间变化,而数据本身的分布却保持不变。这使得最终用户认为模型的预测质量在下降。数据和概念都可以同时漂移,从而使问题变得更加复杂。
我发现,依赖人类行为的模型特别容易退步。当然,风险会根据项目的性质有所不同。在大多数情况下,必须制定定期的模型评审和再训练计划。
此外,大多数模型只能捕捉到它们所看到的训练数据的形式。一个好的模型能够捕捉这些数据的核心部分,忽略不重要的部分,从而实现泛化功能。但任何模型都有一定的局限性。
指模型能够适当地适应新的、以前未见过的数据。这与过拟合的概念密切相关。如果模型过度拟合,那么它就不能很好地泛化。
这看起来似乎显而易见,但在部署之后监视ML系统的性能非常重要。如果监视所有特征听起来像是一个耗时的任务,那么我们可以只关注那些数据分布变化可能会影响模型结果的关键特征。我强烈建议在投入生产前为这个过程创建一个策略。
模型监控是一个持续的过程。如果你观察到模型性能下降,那么是时候重新设计模型了。重新设计模型并不是最难的部分,真正困难的是考虑新的特征,这些特征可能会提高模型的性能,使其更加可靠和准确。
完成上述步骤之后,可以使用新的或修改过的一组特征和模型参数重新创建模型。目标是确定一个最优的模型,它能够提供最佳的精度。
我发现,在某些情况下,重新创建模型并不能提高其性能。在这种情况下,分析模型出错的例子并寻找当前特征集之外的趋势可以帮助识别新的特征。基于这些知识创建新特征可以使模型获得新的学习经验。
我们常常使用新数据来维护模型的一个解决方案是,采用与最初构建模型相同的流程来训练和部署模型。这被称为手工学习。你可以想象这个过程会非常耗时。我们多久需要对模型进行一次再训练?每周?每天?这取决于你的ML应用。
当我们手动对模型进行再训练时,可能会发现新的算法或一组不同的特征,这些可以提高准确性。理想情况下,定期回顾处理过程是个好主意。你可能会找到一种不同的算法或一组新的特征来改进预测,而这正是连续学习系统所不擅长的。
也许你可以每个月或每年使用之前收集的数据来更新模型。这还涉及到对模型进行反向测试,以便在重新拟合静态模型时选择适当数量的历史数据。
另一种解决方案可能是给数据加权重。理论上,有些算法允许你权衡输入数据的重要性。
使用与数据年龄成反比的加权系统可能会很有意思,这样会更多地关注最近的数据(权重更高),而较少关注较旧的数据(权重更低)。
我最喜欢的方法是拥有一个可以持续评估和重新训练模型的自动化系统。持续学习系统的好处是它可以完全自动化。
一般来说,合理的模型监控与缜密的模型检查计划相结合,对于保持生产模型的准确性至关重要。对关键变量进行优先级检查,并为发生更改时设置警告,这将确保你不会对环境的变化感到意外,而这些变化会破坏模型的有效性。
对于数据点具有高度独立性的输入变量,可以使用控制图来检测过程的变化,这是统计过程控制中常用的方法。
我坚持认为,你的ML成功也取决于你计划如何维护训练好的模型。在多个项目中,我发现缺乏模型工作经验的商业领导可能无法预料到这种需求。
一个产品化的模型包括监控和维护。应该定期评估新数据集上的模型性能。应该定期对这些性能指标进行可视化和比较,以便确定何时需要干预。有许多度量标准可以用来衡量ML系统的性能。
模型退步的原因可以被明确地发现和建模。可以研究、理解和应用周期性的时间效应。一旦模型收集了足够的性能数据,数据科学团队就可以处理这个问题。假设你一直在跟踪它们。
定期思考性能指标并触发重新训练或重建模型的过程也是必要的,因为没有它,你将看到性能损失,但没有适当的系统来处理它。
除了技术方面,我强烈建议在项目投入生产后,将最好的数据科学家和工程师留在项目中。与传统的软件项目不同,在部署之后,你的运营团队处理它,工程师继续构建下一个大项目,ML和AI系统中的许多技术挑战在于保持它们的准确性。
你还需要投入资源,以保持客户使用的机器学习产品和服务的准确性。这意味着与传统软件相比,ML产品的运营边际成本更高。
为了维护高质量的模型,应该在每次数据交付时对算法进行再训练。另一方面,为了优化成本,应该尽量减少这种操作。
显然,某些机器学习开发需要更多的技术债务,因此需要比其他开发更多的未来维护。特定于机器学习的技术债务风险因素包括大量的概率变量、数据依赖性、递归反馈循环、管道流程、配置设置等,这些都会增加机器学习算法性能的不可预测性。
这些复杂性越多,就越难以进行有效的维护。你不能完全自动化地处理维护负担。在任何情况下,维护机器学习模型都需要仔细检查、批判性思维和手工工作,而这只有受过高度训练的数据科学家才能提供。