作者:Reinhard Sellmair
许多从事MLOps领域的人可能都听说过这样一个故事:
公司A启动了一项雄心勃勃的任务,旨在利用机器学习的力量。这一旅程充满挑战,团队努力寻找一个既能发挥机器学习的优势又能带来实际商业价值的主题。经过多次头脑风暴会议后,他们终于确定了一个有望彻底变革其运营的用例。满怀兴奋,他们聘请了业内公认的专家公司B来构建和部署一个ML模型。经过数月严格的开发和测试,该模型通过了所有验收标准,标志着公司A的一个重要里程碑,公司期待未来更多机会。
然而,随着时间的推移,模型开始产生意外的结果,使其无法达到预期的效果。公司A向公司B寻求建议,却发现由于情况的变化需要建立一个新的模型,这将需要与原来一样高的投资。
出了什么问题?是公司B创建的模型没有达到预期吗?还是公司A只是不幸遇到了一些意外情况?
可能问题在于,即使在部署前对模型进行最严格的测试也不能保证该模型能无限期地良好运行。影响模型随时间表现的两个最重要的方面是数据漂移和概念漂移。
数据漂移这也被称为协变量偏移,当输入数据的统计特性随时间变化时就会发生这种情况。如果一个机器学习模型是在特定人群的数据上训练的,但输入数据的人口特征发生了变化,则该模型的表现可能会下降。想象一下你教一个孩子乘法表直到10以内的情况。它可以很快地给出3*7或4*9的答案。然而有一天当你问它4*13等于多少时,尽管乘法规则没有改变,但它可能会给你错误的答案因为它没有记忆这个具体的解。
概念漂移这发生在输入数据与目标变量之间的关系发生变化时。这种情况会导致模型性能下降,因为模型的预测不再与不断变化的数据模式一致。这里的一个例子是拼写改革。当你还是孩子的时候,你可能学过写“co-operate”,但现在它被写作“cooperate”。尽管含义相同,但你在不同时期写出这个词的方式已经发生了改变。
在这篇文章中,我研究了不同数据漂移和概念漂移的情景如何影响模型随时间的性能。此外,我还展示了哪些重新训练策略可以缓解性能下降。
我专注于评估重新训练策略对模型预测性能的影响。实际上还需要考虑如下方面:
需要考虑以确定合适的再培训策略。
为了突出数据漂移和概念漂移之间的差异,我合成了一些数据集,在这些数据集中我可以控制这些方面出现的程度。
我通过100个步骤生成了数据集,在这些步骤中,我逐步改变参数以模拟数据集的演变。每个步骤包含多个数据点,并且可以解释为在一小时、一天或一周内收集的数据量。在每一步之后,模型都会重新评估并可能重新训练。
为了创建数据集,我首先从均值为µ、标准差为σ的正态分布中随机抽取特征,其中均值和标准差依赖于步骤编号s:
特征xi的数据漂移取决于µi和σi随步骤数s变化的程度。
所有功能汇总如下:
其中ci是描述特征xi对X的影响的系数。通过改变这些系数来控制概念漂移,这些变化相对于s进行。添加一个不可用于模型训练的随机数ε,以考虑特征不包含完整的信息来预测目标y。
目标变量y通过将X输入一个非线性函数来计算。这样做为机器学习模型创建了一个更具挑战性的任务,因为特征与目标之间不存在线性关系。在本文的场景中,我选择了一种正弦函数。
我创建了以下场景进行分析:
COVID-19大流行是典型的黑天鹅事件。黑天鹅事件的特点在于其极端的稀有性和不可预见性。在疫情之前,没有人能够预测到它的发生以减轻其影响。许多已经部署的机器学习模型在疫情爆发后突然产生了意想不到的结果,并且不得不重新训练。
对于每个场景,我使用前20步作为初始模型的训练数据。对于剩余的步骤,我评估了三种重新训练策略:
我使用了XGBoost回归模型和均方误差(MSE)作为评估指标。
上面的图表显示了稳态场景的评估结果。由于前20步用于训练模型,因此评估误差远低于后续步骤的误差。性能表现在于:无以及窗口再培训策略在整个场景中保持在类似的水平。_THE_所有数据策略在较高的步骤数上略微减少了预测误差。
在这种情况下所有数据 因为在这种策略下,可以从不断增加的训练数据中获益,而其他策略的模型则是基于固定的训练数据量进行训练。
当输入数据分布发生变化时,我们可以清楚地看到,如果模型没有在最新数据上重新训练,预测误差会持续增加。在整个数据集或数据窗口上进行重新训练会导致非常相似的性能表现。原因是尽管所有数据 在使用更多数据时,旧的数据对于预测最近的数据不再相关。
更改系数意味着特征的重要性随时间变化。在这种情况下我们可以看到 rằng的中文翻译应该为: 更改系数意味着特征的重要性随时间变化。在这种情况下,我们可以看到 что 但由于“ что”在中文语境中不需要直接翻译,并且前文已经提供了完整意思,因此只保留有意义的部分作为输出: 更改系数意味着特征的重要性随时间变化。在这种情况下,我们可以看到None重新训练策略导致预测误差急剧增加。此外,结果还显示,在所有数据上进行重新训练也会导致预测误差持续增加,而窗口重新训练策略保持了预测误差在一个恒定水平。
之所以……的原因是所有数据策略表现随时间下降的原因是训练数据中包含越来越多的相似输入却导致不同输出的情况。因此,模型识别清晰模式以推导决策规则变得更加困难。这对以下情况来说问题较小:窗口 由于忽略了旧数据,策略允许模型“忘记”旧模式并专注于最近的案例。
黑天鹅事件发生在第39步,此时所有模型的错误突然增加。然而,在最新的数据上重新训练新模型后,这些模型的错误所有数据以及窗口策略恢复到之前的级别。这与……的情况不同(句子不完整,保持原样)None重新训练策略在这里,与黑天鹅事件之前相比,误差增加了大约3倍,并且在此水平上一直持续到场景结束。
与之前的场景相反,黑天鹅事件同时包含了数据漂移和概念漂移。值得注意的是,所有数据以及窗口在黑天鹅事件后,策略以同样的方式恢复,而我们在概念漂移场景中发现这些策略之间存在显著差异。可能的原因是数据漂移与概念漂移同时发生。因此,在黑天鹅事件之后,基于旧数据学习到的模式不再相关,因为输入数据已经发生了变化。
一个例子是,你是一名翻译,在接到请求将一种之前从未翻译过的语言进行翻译(数据漂移)时。同时,这种语言正在进行全面的拼写改革(概念漂移)。对于那些多年从事该语言翻译的人来说,可能很难适应这次改革,而你则不会受到影响,因为你甚至在改革前都不知道这些规则。
要重现此分析或进一步探索,您可以查看我的Git仓库.
识别、量化和减轻数据漂移和概念漂移的影响是一个具有挑战性的课题。在本文中,我分析了一些简单的场景来呈现这些概念的基本特征。更全面的分析无疑会为这一主题提供更加深入和详细的结论。
这是我从这个项目中得到的收获:
缓解概念漂移比数据漂移更具挑战性。虽然数据漂移可以通过基本的重新训练策略来处理,但概念漂移需要更谨慎地选择训练数据。讽刺的是,在同一时间发生数据漂移和概念漂移的情况可能比纯粹的概念漂移情况更容易处理。
对训练数据进行全面分析是寻找适当再训练策略的理想起点。因此,有必要根据记录的时间将训练数据划分开来。为了对模型性能进行最现实的评估,最新的数据应仅用作测试数据。为了初步评估数据漂移和概念漂移,可以将剩余的训练数据划分为两个大小相等的数据集,一个包含较早的数据,另一个包含较新的数据。比较这些数据集的特征分布可以让您评估数据漂移。在每个数据集上分别训练一个模型,并比较特征重要性的变化,这将有助于初步评估概念漂移。
不进行再训练在所有场景中都被证明是最低效的选择。此外,在没有考虑模型再训练的情况下,也很有可能用于评估和/或重新训练模型的数据不会以自动化的方式收集。这意味着模型性能下降可能未被察觉或者仅在晚期才被注意到。一旦开发人员意识到模型可能存在潜在问题时,直到收集到可用于重新训练模型的新数据之前,宝贵的时机将会丧失。
在早期阶段识别出完美的再训练策略是非常困难的,如果服务数据出现意外变化,则可能根本无法实现。因此,我认为合理的做法是从一个在分割训练数据上表现良好的再训练策略开始。当遇到该策略未能以最优方式应对变化的情况时,应该对该策略进行审查和更新。持续的模型监控对于迅速发现并响应模型性能下降至关重要。
除非另有说明,所有图片均由作者创作。