机器学习模型监控工具:Evidently 与 Seldon Alibi 对比

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 每当我们训练和部署机器学习模型时,我们都希望确保该模型在生产中表现良好。模型需要监控,因为现实世界中发生了我们在训练期间无法解释的事情。最明显的例子是当现实世界的数据偏离训练数据时,或者当我们遇到异常值时。我们使用监控来做出决策,例如:何时重新训练或何时获取新数据。

介绍

每当我们训练和部署机器学习模型时,我们都希望确保该模型在生产中表现良好。

模型需要监控,因为现实世界中发生了我们在训练期间无法解释的事情。最明显的例子是当现实世界的数据偏离训练数据时,或者当我们遇到异常值时。我们使用监控来做出决策,例如:何时重新训练或何时获取新数据。

有一些具体的事情需要监控

  • 数据漂移:现实世界中的数据开始与训练数据不同,表明需要用新数据重新训练。
  • 异常值(Outliers):超出我们预期范围的输入。结果,该模型可能会产生无意义的输出。
  • 偏见(Bias):模型以我们在训练期间没有意识到的方式偏向某些预测。我们可能需要用更好的数据重新训练。

在高层次上,有两种模型监控:

  • 离线分析:从生产模型中收集输入和输出的快照并执行一次性分析。这是一个手动过程,但如果我们需要回答关于模型的一次性问题(例如:它是否表现出特定的偏见),它可能会很有用。
  • 实时监控:我们有一个监控服务,可以从模型中收集实时数据,实时进行分析,并在出现特定模型性能问题时提醒我们。

在这篇博文中,我们将主要关注实时监控,比较 Evidently 和 Seldon 的 Alibi Detect 两种工具所采用的方法。


比较标准

我们使用一些东西来评估和比较这些工具:

  • 兼容性:哪些模型服务工具,以及它将与哪些 ML 框架一起使用?
  • 集成:它可以集成到现有的应用程序监控基础设施中吗?
  • 能力:模型监控的哪些方面可以很好地处理?支持哪些数据类型,哪些统计检验可用(在这里,统计测试是指用于评估模型监控系统中的漂移或偏差等事物的算法。有很多这样的算法,但在本文中,我们不会深入研究他们的详细信息)。


Evidently

Evidently是一个在 Apache 2.0 许可下可用的 Python 库。这是一个致力于简化模型监控的工具。Evidently与平台无关,因此它适用于任何模型服务设置和任何机器学习框架。

开箱即用,Evidently 带有一些基本仪表板,告诉我们:

  • 输入数据漂移,
  • 模型输出(又名目标漂移),
  • 模型和数据质量。

这些仪表板使您可以轻松地立即开始使用 Evidently,但对于强大的生产监控,我们可以利用另一个功能,即与 Prometheus 和 Grafana 的集成。 Prometheus 和 Grafana 的结合已经是一种广泛采用的应用程序监控和仪表板解决方案,通过将模型指标与应用程序指标相结合,您可以构建仪表板,实时了解整个软件堆栈。


离线分析

使用 Evidently 的最简单方法。 您将需要一些参考数据,这是用于训练模型的数据样本,以及您从生产模型中收集的一些当前数据。 例如,我们可以在 Jupyter Notebook 中执行数据漂移分析:

from evidently.dashboard import Dashboard 
from evidently.dashboard.tabs import DataDriftTab 
drift_dashboard = Dashboard(tabs=[DataDriftTab(verbose_level=1)]) 
drift_dashboard.calculate(reference_data, current_data, column_mapping=None) 
drift_dashboard.show()
复制代码


这会生成一个如下所示的仪表板:

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


数据漂移仪表板:

  • 显示参考数据和真实数据的分布,
  • 告诉我们参考数据和真实世界数据之间的相似性,
  • 通知我们是否检测到漂移。

为了确定数据是否存在偏差,Evidently 使用统计测试比较了参考分布和实际分布。 许多数据科学家可能熟悉这些测试:为了检测漂移,一种名为 Kolmogorov-Smirnov 的测试用于数值特征,而卡方测试用于分类特征。 值得注意的是,这些测试适用于表格数据,但不适用于其他类型的数据,如图像

尽管启动和运行它很容易,但离线分析对于生产监控并不是很有用。 为此,我们需要实时。


实时监控

Evidently 已经为 Github 上的实时监控提供了一个示例设置。本质上,它的工作方式是你有一个监控服务,它位于你部署的模型旁边。监控服务收集模型的输入和输出,并计算漂移等指标(使用可用于离线分析的相同统计测试)。

提供的示例包括:

  • 用作监控服务的 Flask 应用程序。
  • 监控配置文件,用于定义要执行的监控类型以及感兴趣的特征。
  • Prometheus 和 Grafana 的配置。
  • 将所有这些联系在一起的 docker-compose 配置。

通常,您需要为每个模型部署一个监控服务。使用提供的示例,我们能够为 Data Drift 创建一个简单的监控服务,只需要对代码和配置进行少量修改。

最后,提供的示例演示了如何将 Evidently 与 Prometheus 和 Grafana 一起使用。正如我们之前提到的,这是一个非常强大的功能,因为它意味着您可以将模型指标与软件堆栈中其他组件的应用程序指标结合起来,并构建统一的仪表板。

下面显示了一个简单的例子:

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


Alibi Detect

Alibi Detect 是由 Seldon 开发的 Python 库,可在 Apache 2.0 许可下使用。该库旨在成为“Python 中异常值、对抗性和漂移检测的首选库”。

Alibi 是围绕称为检测器(detectors)的东西构建的。检测器解决了一种特定类型的模型监控用例。这些类似于 Evidently 的监控服务理念。 Alibi 包括许多预制检测器:

  • 异常值检测器,
  • 漂移探测器,
  • 对抗检测器。

这些都适用于各种数据类型:

  • 表格(具有数字和分类特征),
  • 图片,
  • 时间序列,
  • 文本,
  • 图表。

与 Evidently 相比,Alibi 提供了更丰富的数据类型和统计测试。但是,重要的是要知道它与平台无关。 Alibi 旨在与 Seldon Core 一起使用。相比之下,Evidently 的目标是在任何地方工作。


离线分析

与 Evidently 类似,Alibi 可以直接用于 Python 脚本或 notebook 中进行离线分析。用法和功能看起来与 Evidently 的非常相似,因此我们没有在此处包含代码示例。

接下来开始实时监控!

实时监控

实时监控是 Alibi Detect 真正大放异彩的地方。实施成熟且相对容易设置。但是,由于它与 Seldon Core 紧密相关,因此只有在您还使用 Seldon 进行模型服务时才使用 Alibi。

如果您不熟悉它,请快速解释一下 Seldon Core:它是一个构建在 Kubernetes 之上的模型服务框架。 Seldon 使部署模型变得非常容易; Alibi 增加的是在模型旁边部署检测器的能力。检测器就像 Evidently 的监控服务一样,它观察模型输入和输出,并计算与模型性能相关的指标。

与 Evidently 不同的是,Alibi 带有一组预训练的检测器,涵盖常见的监控任务。您可以使用这些,也可以自己构建,具体取决于您的需要。


结论

这两种工具都在开发中,我们希望在未来看到很多新功能。

的确,Alibi 在功能方面比 Evidently 更进一步。但 Evidently 旨在提供一种可在任何平台上运行的可靠监控方法,这是一个更雄心勃勃的目标。我们认为 Evidently 会在功能方面迅速赶上。

根据任务,我们可以就哪种工具更合适提供一些建议。

对于离线分析:

  • 如果您还没有将 Seldon 用于其他事情,那么 Alibi 的基础设施开销很难证明离线分析是合理的。
  • 如果您想要仅包含几行代码的特征丰富的报告,并且您使用数字或分类表格数据,那么Evidently可以满足您的需求。
  • 如果您的数据不是表格的,或者您需要使用更广泛的统计测试,还有其他选择,但您可以考虑在 Evidently 中实现您需要的内容并成为贡献者。

对于实时监控:

  • Alibi Detect 与 Seldon Core 结合使用效果最佳。如果您已经使用 Seldon Core,这将是一个不错的选择。否则,它会带来大量的基础架构开销。
  • 如果您有非表格数据、需要异常值检测或某些 Evidently 中不可用的统计测试,Alibi Detect 也是一个更好的选择。我们预计 Evidently 会在这些方面迅速赶上。
  • Evidently,这是一个灵活的通用解决方案,适用于任何地方,使其成为 Seldon 生态系统之外的全面选择。


相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
相关文章
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【10月更文挑战第4天】Scikit-learn凭借高效、易用及全面性成为数据科学领域的首选工具,简化了数据预处理、模型训练与评估流程,并提供丰富算法库。本文通过实战教学,详细介绍Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优等关键步骤,助你快速掌握并优化数据分析与机器学习模型。从环境搭建到参数调优,每一步都配有示例代码,便于理解和实践。
85 2
|
29天前
|
机器人
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领精美计时器
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领精美计时器
85 3
|
1月前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
【10月更文挑战第6天】如何使用机器学习模型来自动化评估数据质量?
|
8天前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
如何使用机器学习模型来自动化评估数据质量?
|
5天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
21 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
9天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
28 1
|
1月前
|
数据采集 移动开发 数据可视化
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
这篇文章介绍了数据清洗、分析、可视化、模型搭建、训练和预测的全过程,包括缺失值处理、异常值处理、特征选择、数据归一化等关键步骤,并展示了模型融合技术。
53 1
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
|
18天前
|
机器学习/深度学习 数据采集 Python
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
56 1
|
21天前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
如何使用机器学习模型来自动化评估数据质量?
|
22天前
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
38 2