你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure 机器学习进行模型监控

在本文中,你将了解 Azure 机器学习中的模型监视、可以监视的信号和指标,以及使用模型监视的建议做法。

模型监控案例

模型监视是机器学习端到端生命周期的最后一步。 此步骤跟踪生产中的模型性能,旨在从数据科学和操作角度对性能进行了解。

与传统软件系统不同,机器学习系统的行为不仅受代码中指定的规则的制约,还受从数据中学习的模型行为的制约。 因此,数据分布变化、训练服务倾斜、数据质量问题、环境变化或所有者行为变化都可能导致模型变得过时。 当模型变得过时时,其性能可能会下降到无法增加商业价值或开始在高度监管的环境中导致严重的合规性问题。

Azure 机器学习中模型监视的限制

Azure 机器学习模型监视仅支持使用基于凭据的身份验证(例如 SAS 令牌)来访问数据存储中包含的数据。 若要详细了解数据存储和身份验证模式,请参阅数据管理

模型监视在 Azure 机器学习中的工作原理

为了实施监控,Azure 机器学习通过对流式生产推理数据和参考数据执行统计计算来获取监控信号。 参考数据可能是历史训练数据、验证数据或基准真相数据。 另一方面,生产推理数据是指在生产中收集的模型的输入和输出数据。

每个监视信号都有一个或多个指标。 用户可以为这些指标设置阈值,以便通过 Azure 机器学习或 Azure 事件网格接收有关模型或数据异常的警报。 这些警报可以提示用户在 Azure 机器学习工作室中分析或排查监视信号,从而持续改进模型质量。

以下步骤描述了用于获取生产模型的内置监控信号(例如数据偏移)的统计计算示例。

  • 对于训练数据中的特征,计算其值的统计分布。 此分布是该特征的基线分布。
  • 计算在生产中看到的特征最新值的统计分布。
  • 执行统计测试或计算距离得分,从而将特征在生产中的最新值的分布与基线分布进行比较。
  • 当测试统计信息或两个分布之间的距离得分超过用户指定的阈值时,Azure 机器学习会识别异常并通知用户。

模型监控设置

在 Azure 机器学习中启用和使用模型监控:

  1. 启用生产推理数据收集。 如果将模型部署到 Azure 机器学习联机终结点,可以使用 Azure 机器学习模型数据收集启用生产推理数据收集。 但是,如果将模型部署到 Azure 机器学习外部或 Azure 机器学习批处理终结点,需负责收集生产推理数据。 然后,可以将此数据用于 Azure 机器学习模型监视。
  2. 设置模型监视。 可以使用 Azure 机器学习 SDK/CLI 2.0 或工作室 UI 轻松设置模型监控。 在设置过程中,可以指定首选监视信号,并自定义每个信号的指标和阈值。
  3. 查看并分析模型监视结果。 设置模型监控后,Azure 机器学习会安排监控作业以指定的频率运行。 每次运行都会计算并评估所有选定监视信号的指标,并在超过任何指定阈值时触发警报通知。 你可以单击警报通知中的链接来查看和分析 Azure 机器学习工作区中的监控结果。

模型监视的功能

Azure 机器学习为持续模型监视提供了以下功能:

  • 内置监视信号。 模型监视为表格数据提供了内置监视信号。 这些监控信号包括数据偏移、预测偏移、数据质量、特征归因偏移和模型性能。
  • 使用 Azure 机器学习联机终结点进行现成模型监视设置。 如果在 Azure 机器学习联机终结点中将模型部署到生产,Azure 机器学习会自动收集生产推理数据并将其用于持续监视。
  • 使用多个监视信号获得广泛视图。 可以在一个监视设置中轻松包含多个监视信号。 对于每个监视信号,可以选择首选指标并微调警报阈值。
  • 使用训练数据或最近的生产数据作为参考数据进行比较。 对于监控信号,Azure 机器学习支持使用训练数据或最近的生产数据来设置参考数据。
  • 监视前 N 个特征的数据偏移或数据质量。 如果使用训练数据作为参考数据,则可以定义基于特征重要性进行分层的数据偏移或数据质量信号。
  • 灵活定义监视信号。 如果内置监视信号不适合业务场景,可以使用自定义的监视信号组件定义自己的监视信号。
  • 灵活使用来自任何源的生产推理数据。 如果在 Azure 机器学习外部部署模型,或者将模型部署到 Azure 机器学习批处理终结点,可以收集生产推理数据,以在 Azure 机器学习中使用该数据进行模型监控。

回溯窗口大小和偏移

“回溯窗口大小”是生产或参考数据窗口的持续时间(采用 ISO 8601 格式),从监控运行日期开始回溯。

“回溯窗口偏移”是从监控运行日期开始到数据窗口结束的偏移的持续时间(采用 ISO 8601 格式)。

例如,假设模型正在生产中,你将监视器设置为在 UTC 时间 1 月 31 日下午 3:15 运行。如果你将监视器的生产回溯窗口大小设置为 P7D(7 天),并将生产回溯窗口偏移设置为 P0D(零天)时,则监视器在数据窗口中使用从 UTC 时间 1 月 24 日下午 3:15 到 UTC 时间 1 月 31 日下午 3:15(监视器运行时间)之间的数据。

此外,对于参考数据,如果将回溯窗口偏移设置为 P7D(7 天),则参考数据窗口正好在生产数据窗口开始之前结束,因此不会出现重叠。 然后,可以将参考数据回溯窗口大小设置为你喜欢的大小。 例如,将参考数据回溯窗口大小设置为 P24D(24 天)后,参考数据窗口将包含从 UTC 时间 1 月 1 日下午 3:15 到 UTC 时间 1 月 24 日下午 3:15 的数据。 下图说明了此示例。

显示引用和生产数据的回溯窗口大小和偏移量的示意图。

在某些情况下,你可能会发现将生产数据的“回溯窗口偏移”设置为大于零天的数字很有用。 例如,如果监视器计划每周一下午 3:15 UTC 运行,但你不想在监控运行中使用周末的数据,则可以使用 P5D(五天)作为“回溯窗口大小”,并使用 P2D(两天)作为“回溯窗口偏移”。 然后,数据窗口就会从上周一下午 3:15(UTC 时间)开始,到周五下午 3:15(UTC 时间)结束。

在实践中,应确保参考数据窗口和生产数据窗口不重叠。 如下图所示,可以通过确保参考数据回溯窗口偏移(在本例中为 P10D 天或 10 天)大于或等于生产数据的回溯窗口大小及其回溯窗口偏移的总和(总共 7 天)来确保窗口不重叠。

显示非重叠引用数据和生产数据窗口的示意图。

在 Azure 机器学习模型监控中,你可以使用回溯窗口大小和回溯窗口偏移的智能默认值,也可以自定义它们来满足自己的需求。 此外还支持滚动窗口和固定窗口。

自定义回溯窗口大小

可以灵活地为生产数据和参考数据选择回溯窗口大小。

  • 默认情况下,生产数据的回溯窗口大小是监控频率。 也就是说,将分析在运行监控作业之前在监控期间收集的所有数据。 可以使用 production_data.data_window.lookback_window_size 属性调整生产数据的滚动数据窗口。

  • 默认情况下,参考数据的回溯窗口是完整的数据集。 可以使用 reference_data.data_window.lookback_window_size 属性来调整参考回溯窗口大小。

  • 若要为参考数据指定固定数据窗口,可以使用属性 reference_data.data_window.window_start_datereference_data.data_window.window_end_date

自定义回溯窗口偏移

可以灵活地为生产数据和参考数据选择数据窗口的回溯窗口偏移。 可以使用偏移对显示器使用的数据进行精细控制。 该偏移仅适用于滚动数据窗口。

  • 默认情况下,生产数据的偏移为 P0D(零天)。 可以使用 production_data.data_window.lookback_window_offset 属性修改此偏移。

  • 默认情况下,参考数据的偏移是 production_data.data_window.lookback_window_size 的两倍。 此设置可确保有足够的参考数据来获得具有统计意义的监控结果。 可以使用 reference_data.data_window.lookback_window_offset 属性修改此偏移。

监视信号和指标

Azure 机器学习模型监控支持以下监控信号和指标列表:

重要

本文中标记了“(预览版)”的项目目前为公共预览版。 该预览版在提供时没有附带服务级别协议,建议不要将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

监视信号 说明 指标 模型任务(受支持的数据格式) 生产数据 参考数据
数据偏移 数据偏移通过将模型的输入数据的分布与模型的训练数据或最近的生产数据进行比较来跟踪模型输入数据的分布变化。 Jensen-Shannon 散度,群体稳定性指标,归一化Wasserstein 距离,双样本柯尔莫哥洛夫-斯米尔诺夫检验,皮尔逊卡方检验 分类(表格数据)、回归(表格数据) 生产数据 - 模型输入 最近的生产数据或训练数据
预测偏移 预测偏移通过将模型预测输出的分布与验证数据、标记的测试数据或最近的生产数据进行比较,来跟踪模型预测输出的分布变化。 Jensen-Shannon 散度,群体稳定性指标,归一化Wasserstein 距离,切比雪夫距离,双样本柯尔莫哥洛夫-斯米尔诺夫检验,皮尔逊卡方检验 分类(表格数据)、回归(表格数据) 生产数据 - 模型输出 最近的生产数据或验证数据
数据质量 数据质量将模型输入与模型的训练数据或最近的生产数据进行比较,从而跟踪该输入的数据完整性。 数据质量检查包括检查是否存在 null 值、类型不匹配或值超出范围的情况。 Null 值率、数据类型错误率、超出范围率 分类(表格数据)、回归(表格数据) 生产数据 - 模型输入 最近的生产数据或训练数据
特征归因偏移(预览版) 特征归因偏移基于特征对预测的贡献(也称为特征重要性)。 特征归因偏移跟踪生产期间的特征重要性的方式是将其与训练期间的特征重要性进行比较。 归一化折损累计增益 分类(表格数据)、回归(表格数据) 生产数据 - 模型输入和输出 训练数据(必需)
模型性能 - 分类(预览版) 模型性能跟踪生产中模型输出的客观性能的方式是将其与收集的地面实况数据进行比较。 准确度、精准率和召回率 分类(表格数据) 生产数据 - 模型输出 地面实况数据(必需)
模型性能 - 回归(预览版) 模型性能跟踪生产中模型输出的客观性能的方式是将其与收集的地面实况数据进行比较。 平均绝对误差 (MAE)、均方误差 (MSE)、均方根误差 (RMSE) 回归(表格数据) 生产数据 - 模型输出 地面实况数据(必需)
生成式 AI:生成安全性和质量(预览版) 使用 GPT 辅助指标评估生成式 AI 应用程序的安全性和质量。 基础性、相关性、流畅性、相似性、一致性 问答 提示、补全、上下文、注释模板 空值

数据质量监控信号的指标

数据质量监控信号通过计算下述三个指标来跟踪模型输入数据的完整性:

  • Null 值率
  • 数据类型错误率
  • 出界率

Null 值率

null 值率是每个特征的模型输入中 null 值的比率。 例如,如果监控生产数据窗口包含 100 行,其中 10 行的特定特征 temperature 的值为 null,则 temperature 的 null 值率为 10%。

  • Azure 机器学习支持计算所有特征数据类型的 Null 值率

数据类型错误率

数据类型错误率是当前生产数据窗口与参考数据之间的数据类型差异率。 在每次监控运行期间,Azure 机器学习模型监控都会从参考数据推断每个特征的数据类型。 例如,如果根据参考数据推断特征 temperature 的数据类型为 IntegerType,但在生产数据窗口中,temperature 的 100 个值中有 10 个值不是 IntegerType(可能是字符串),则 temperature 的数据类型错误率为 10%。

  • Azure 机器学习支持计算 PySpark 中提供的以下数据类型的数据类型错误率:ShortTypeBooleanTypeBinaryTypeDoubleTypeTimestampTypeStringTypeIntegerTypeFloatTypeByteTypeLongTypeDateType
  • 如果此列表中不包含某个特征的数据类型,Azure 机器学习模型监控仍会运行,但不会计算该特定特征的数据类型错误率。

出界率

出界率是每个特征的值超出由参考数据确定的适当范围或集合的比率。 在每次监控运行期间,Azure 机器学习模型监控会根据参考数据确定每个特征的可接受范围或集合。

  • 就数值特征来说,合适的范围是参考数据集中的最小值到最大值的数值区间,例如 [0, 100]。
  • 就分类特征(例如 color)来说,合适的范围是参考数据集中包含的所有值的集合,例如 [red, yellow, green]。

例如,如果你有一个数值特征 temperature,其中的所有值都落在参考数据集中的 [37, 77] 范围内,但在生产数据窗口中,temperature 的 100 个值中有 10 个落在 [37, 77] 范围之外,那么 temperature 的出界率为10%。

  • Azure 机器学习支持计算 PySpark 中提供的以下数据类型的出界率:StringTypeIntegerTypeDoubleTypeByteTypeLongTypeFloatType
  • 如果此列表中不包含某个特征的数据类型,Azure 机器学习模型监控仍会运行,但不会计算该特定特征的出界率。

Azure 机器学习模型监控支持 null 值率、数据类型错误率和出界率的计算,其精准率高达 0.00001。

每个机器学习模型及其用例都具有唯一性。 因此,模型监视对于每种情况都具有唯一性。 下面是推荐的模型监视最佳做法列表:

  • 将模型部署到生产环境后立即开始模型监控。
  • 与熟悉模型的数据科学家合作,设置模型监视。 深入了解模型及其用例的数据科学家最适合推荐监控信号和指标,并为每个指标设置正确的警报阈值(以避免警报疲劳)。
  • 在监视设置中包含多个监视信号。 使用多个监视信号,可以获得监视的广泛视图和精细视图。 例如,可以结合使用数据偏移和特征归因偏移信号,从而获取模型性能问题预警。
  • 使用模型训练数据作为参考数据。 对于用作比较基线的参考数据,Azure 机器学习支持使用最近的生产数据或历史数据(例如训练数据或验证数据)。 为了进行有意义的比较,建议将训练数据用作数据偏移和数据质量的比较基线。 对于预测偏移,请将验证数据用作比较基线。
  • 根据生产数据随时间推移的增长情况指定监控频率。 例如,如果生产模型每天都有大量流量,并且每日数据累积足以进行监视,可以将监视频率设置为每日。 否则,可以根据生产数据随时间推移的增长情况考虑每周或每月的监视频率。
  • 监视前 N 个重要特征或特征子集。 如果使用训练数据作为比较基线,可以轻松为前 N 个特征配置数据偏移监视或数据质量监视。 对于具有大量特征的模型,请考虑监视这些特征的子集,从而降低计算成本和监视干扰。
  • 当你可以访问地面实况数据时,请使用模型性能信号。 如果你可以根据机器学习应用程序的具体情况访问地面实况数据(也称为实际数据),我们建议你使用模型性能信号将地面实况数据与模型的输出进行比较。 这种比较可以客观地了解模型在生产中的性能。

模型监控与 Azure 事件网格的集成

可以使用 Azure 机器学习模型监控运行生成的事件,通过 Azure 事件网格设置事件驱动型应用程序、流程或 CI/CD 工作流。

当模型监视器检测到偏移、数据质量问题或模型性能下降情况时,你可以使用事件网格跟踪这些事件并以编程方式采取操作。 例如,如果生产中的分类模型的准确度低于某个阈值,你可以使用事件网格开始使用收集的地面实况数据进行再训练作业。 若要了解如何将 Azure 机器学习与事件网格集成,请参阅在 Azure 机器学习中执行连续模型监控