如何在 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)。

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

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

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


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

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


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

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

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


结语

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

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

  • 它加快了调试速度。每当您的模型失败时,您都需要确定根本原因。预先构建的仪表板使其更快。
  • 它详细显示了性能。如果在交叉验证中只依赖聚合模型的性能,它可能会掩盖重要的模式。您的模型可能会在特定段上静默失败并需要重建。
  • 它有助于改进模型。您可以探索模型在何处以及如何出错。它有助于确定最佳模型架构、重新训练计划、生成特征工程的想法。或者,向您的主题专家提出正确的问题。
  • 它让你积极主动。数据输入的变化可能是模型质量的最重要指标。我们希望在问题导致模型失败之前发现这些问题。
相关文章
|
6月前
|
机器学习/深度学习 分布式计算 DataWorks
机器学习PAI常见问题之安装pyalink卡在qtconsole 4.0如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
弹性计算 网络安全 Apache
服务器迁移上云实验过程记录
本课程向您介绍了服务器迁移上云的基本概念,这些概念可以帮助您快速了解在企业服务器迁移上云的重要性和应用场景,同时本课程介绍了您可以采用的云上迁移工具、方法和可操作步骤,以帮助您了解企业是如何处理各类服务器迁移上云场景的。
|
1月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
46 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
4月前
|
搜索推荐 开发工具
通用快照方案问题之性能指标的优化如何解决
通用快照方案问题之性能指标的优化如何解决
45 0
|
4月前
|
缓存 前端开发 搜索推荐
通用快照方案问题之快照准确性的保障如何解决
通用快照方案问题之快照准确性的保障如何解决
59 0
|
运维 前端开发 API
耗时一下午,我终于上线了我的 GPT 终端!(内含详细部署方案记录)
耗时一下午,我终于上线了我的 GPT 终端!(内含详细部署方案记录)
462 0
|
机器学习/深度学习 数据采集 数据挖掘
处理缺失数据:详细教程与实例分析
处理缺失数据:详细教程与实例分析
259 0
|
存储 算法 Serverless
GWAS结果自动批量整理算法(上)
GWAS结果自动批量整理算法
|
存储 并行计算 算法
GWAS结果自动批量整理算法(下)
GWAS结果自动批量整理算法(下)
|
数据采集 缓存 数据挖掘
GATK4标准分析流程 丨如何选择合适的线程和内存大小?数据预处理方法与注意事项
GATK4标准分析流程 丨如何选择合适的线程和内存大小?数据预处理方法与注意事项