如何在 20 天内损坏一个模型? 一个生产环境模型分析教程(Evidently)(下)

简介: 假设您训练了一个预测模型,并将其发布到生产环境。现在,您依靠它来做出业务决策。您必须维护、重新训练并密切关注您的模型。它会出现什么问题,以及如何跟踪?让我们来看一个例子。这是一个关于我们如何训练模型、模拟生产环境使用并分析其逐渐退化的故事。

但即使在目标值的已知范围内,模型现在也会出错。 自从训练以来,情况确实发生了变化。

网络异常,图片无法展示
|


我们可以看到模型不能很好地推断。 预测的需求量保持在相同的已知范围内,而实际值正在达到峰值。

网络异常,图片无法展示
|


如果我们放大特定日期,我们可能会认为该错误在一天中的特定(活跃的)时间更高。 我们从晚上 10 点到早上 6 点做得很好!

但是,我们在解释这种模式时应该小心。这也可能是由于其他一些相关因素,例如:在这些相同时间的温度更暖和。

网络异常,图片无法展示
|


Evidently 生成更多图表来显示错误。 在当前情况下,这些是描绘同一个故事的不同方式。 我们有一个很大的错误,而且它明显倾向于低估。

网络异常,图片无法展示
|


网络异常,图片无法展示
|


在过去的几周中,这些相同模型质量问题的早期迹象已经显现。 随着变化的积累,它们被放大了。

‍回归性能报告还生成了一组洞悉,以深入了解表现不佳的段(segments)。 目标是探索特定的特征范围是否可以解释错误。

在我们的示例中,我们特别想了解模型低估了目标函数的段(segments)。

网络异常,图片无法展示
|


误差偏差表提供了更多细节。

我们按“Range%”字段对其进行排序。如果特定特征的值在模型低估或高估的组中存在显着差异,则该特征将排名靠前。

在我们的例子中,我们可以看到极端误差取决于“temp”(温度)和“atemp”(感觉温度)特征。

网络异常,图片无法展示
|


在训练中,情况并非如此。 我们在不同的温度下有各种各样的错误,没有一致的模式。

在这个快速分析之后,我们对模型性能及其弱点有了更具体的了解。 该模型面临着新的、异常高的需求量。 考虑到它是如何训练的,它往往会低估它。 最重要的是,这些错误根本不是随机的。 至少,它们与我们观察到的温度有关。 温度越高,低估的幅度越大。

它提出了模型以前无法学习的与天气相关的新模式。 日子越来越暖和了,模型变得离群了。

如果我们运行目标漂移报表,我们还将看到特征和目标之间的线性相关性的相关变化。 温度和湿度脱颖而出。

网络异常,图片无法展示
|


在这一点上,该模型似乎无用。这是一个生动的例子,说明在有限数据集上训练的模型如何无法捕捉季节性模式。

我们应该尽快重新训练,并经常这样做,直到我们学会所有的模式。 如果我们不习惯频繁的再训练,我们可能会选择更适合时间序列或推理更好的算法。


在它崩溃之前:数据和预测漂移

在实践中,一旦我们获得了ground truth,我们确实可以快速纠正方向。 如果我们在第一周后重新训练模型,它可能不会那么戏剧性地结束。

但是,如果我们没有可用的ground truth怎么办? 我们能提前捕捉到这种退化吗?

在这种情况下,我们可以分析数据漂移。 我们不需要实际值来计算误差。 相反,我们的目标是查看输入数据是否发生了变化。

网络异常,图片无法展示
|


再一次,让我们将生产的第一周数据与训练中的数据进行比较。

当然,我们可以查看我们所有的特征。 但我们也可以得出结论,分类特征(如“季节”、“假期”和“工作日”)不太可能变化。让我们只看数字特征!

我们指定这些特征,以便该工具应用正确的统计测试。 在这种情况下,它将是 Kolmogorov-Smirnov 测试。

column_mapping = {} 
column_mapping['numerical_features'] = numerical_features
复制代码


然后,我们调用所选时间段的漂移报表:

data_drift_dashboard = Dashboard(tabs=[DataDriftTab])
data_drift_dashboard.calculate(
    reference, 
    production.loc['2011-01-29 00:00:00':'2011-02-07 23:00:00'],
    column_mapping=column_mapping)
复制代码


一旦我们显示报表,它就会返回一个答案。 我们可以在第一周看到特征分布的统计变化。

网络异常,图片无法展示
|


让我们放大我们平常的疑点——温度(temperature)。

该报表为我们提供了关于特征分布如何随时间演变的两个展示。 我们可以注意到观察到的温度是如何一天天变高的。

这些值明显偏离了我们在训练中看到的绿色走廊(与平均值的一个标准偏差)。 从稳定的增长来看,我们可以怀疑有上升的趋势。

网络异常,图片无法展示
|


在这个图表中,我们还看到:天气越来越暖和了。 这不是我们的模型所习惯的!

网络异常,图片无法展示
|


正如我们之前检查的那样,我们在第一周后没有检测到模型预测中的漂移。鉴于我们的模型不擅长推断,我们不应该真的期望它。

这种预测漂移可能仍然会发生,并会发出诸如输入数据损坏之类的信号。在其他情况下,如果我们有一个更敏感的模型,我们会观察到它。

尽管如此,仅数据漂移本身就可以提供出色的早期监控,以检测变化并对其做出反应。


结语

频繁的再训练是解决生产模型维护问题的一种方法。监控和可观察性增加了一层以确保模型质量。

为什么我们应该将它包含在我们的工作流程中?

  • 它加快了调试速度。每当您的模型失败时,您都需要确定根本原因。预先构建的仪表板使其更快。
  • 它详细显示了性能。如果在交叉验证中只依赖聚合模型的性能,它可能会掩盖重要的模式。您的模型可能会在特定段上静默失败并需要重建。
  • 它有助于改进模型。您可以探索模型在何处以及如何出错。它有助于确定最佳模型架构、重新训练计划、生成特征工程的想法。或者,向您的主题专家提出正确的问题。
  • 它让你积极主动。数据输入的变化可能是模型质量的最重要指标。我们希望在问题导致模型失败之前发现这些问题。
相关文章
|
算法 安全 NoSQL
雪花算法的实现原理
一位工作4年的小伙伴,去某东面试时被问到这样一道题,说请你简述一下雪花算法的实现原理。屏幕前的小伙伴,如果你遇到这个问题,你会怎么回答?
560 0
|
5月前
|
开发框架 定位技术 API
AgentScope 与 MCP:实践、思考与展望
AgentScope 作为一款功能强大的开源多智能体开发框架,为开发者提供了智能体构建、工具使用、多智能体编排等全方位支持。
626 37
|
Kubernetes Cloud Native 中间件
什么是多运行时架构?(上)
什么是多运行时架构?(上)
408 0
|
机器学习/深度学习 存储 自然语言处理
|
前端开发 流计算
程序与技术分享:css样式大全,完整的Css样式大全(整理)
程序与技术分享:css样式大全,完整的Css样式大全(整理)
224 1
|
消息中间件 网络协议 Java
springboot+netty+kafka实现设备信息收集(完整demo复制可用)
springboot+netty+kafka实现设备信息收集(完整demo复制可用)
218 0
|
缓存 负载均衡 应用服务中间件
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
在本章内容中,我们将深入探讨 Tomcat 服务器的运行架构、LVS 负载均衡的运行机制以及 Cache 缓存机制,并提供相应的解决方案和指导。通过理解这些关键概念和机制,您将能够优化您的系统架构,提高性能和可扩展性。
459 4
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
|
机器学习/深度学习 自然语言处理 网络架构
神经机器翻译(NMT)
神经机器翻译(NMT)
1103 2
|
架构师 程序员
3天面了20个候选人,聊聊我的感受
没错,从周一到周三,三天时间,我几乎每天都会花一整天去面试,总体下来其实还是挺累的,身体累吗?其实更多的是心累,每个候选人我都会至少聊1个小时左右,期间也并不是说全程都在面试,也有候选人回答不上来的问题,反问我的,一般我都会耐心的给他讲解清楚。通过这几天的面试,结合以往的面试经验,发现很多候选人虽然工作时间不短了,但是在面试过程中的表现却不尽如人意,可能是自己还没准备好吧,也或许是很多问题真的不太会,整体上给我的感觉就是普遍过于浮躁了。
212 2
3天面了20个候选人,聊聊我的感受
【架构质量】可靠性系列#1:可靠性与韧性
【架构质量】可靠性系列#1:可靠性与韧性