时序异常情况检测

重要

对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习

从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。

ML 工作室(经典)文档即将停用,将来可能不会更新。

检测输入时序数据中的异常。

类别:时序

注意

仅适用于机器学习 Studio (经典)

可在 Azure 机器学习设计器中获取类似的拖放模块。

模块概述

本文介绍如何使用 机器学习 Studio (经典) 中的时序异常检测模块来检测时序数据中的异常。 该模块了解作为输入提供的时序的正常操作特征,并使用该信息检测与正常模式的偏差。 该模块可以检测总体趋势中的更改,以及值的大小或范围的变化。

检测时序数据的变化具有广泛的应用程序。 例如,可以使用它对传感器、网络或资源使用情况进行准实时监视。 通过跟踪服务错误、服务使用情况和其他 KPI,可以快速响应关键异常。 其他应用程序包括医疗保健和金融。

异常情况检测方法

异常情况检测是发现数据中不符合“正常”行为的模型模式的问题。 检测此类更改的典型方法要么使用简单的人工计算阈值,要么使用平均值和标准偏差来确定数据何时明显偏离平均值。

但是,此类简单方法不容易适应时序数据:

  • 生成大量虚假异常

  • 方法不适用于更改数据值

  • 无法轻松缩放到大型时序

本模块提供了两种用于评估时序趋势差异的其他方法:

  • 测量向上和向下变化的大小

    例如,Web 服务上的请求数可能最好一段时间,然后显著增加。

  • 测量趋势的方向和持续时间:正变化与负变化

    例如,服务队列长度的持久向上趋势可能指示一个根本问题。 尽管总体趋势持续增加,因此可能被视为稳定,但斜率的变化可能会标记为异常。 相反,如果监视服务器的内存使用情况,则可用内存大小的不断减少可能表示出现问题。

时序中异常模式的示例

向上和向下级别更改

例如,假设你一直在监视一段时间内对 Web 服务每天的请求数,并且请求数似乎保持在特定范围内。 但是,更新 Web 服务后,该 Web 服务的请求数会更改。 新趋势可能高于或低于原始趋势:可以检测向上和向下峰值。

upward and downward level changes

正向或负趋势变化

例如,假设你在服务支持站点上监视队列的长度。 持续向上趋势可能表示基础服务问题。

在其他情况下,永久性负趋势可能是异常。 例如,如果在服务器上监视内存使用情况,则当可用内存大小收缩时,这可能表示潜在的内存泄漏。

positive or negative trend change

资源

有关此方法的基础研究的详细信息,请参阅以下文章:

  • Shen-Shyang Ho;Wechsler,H.,“通过测试可交换性检测数据流变化的马丁加尔框架”,模式分析和机器智能,IEEE 事务,vol.32,no.12,pp.2113,2127,2010 年 12 月

    Microsoft 学术) (的源和引文

  • Valentina Fedorova、Alex J. Gammerman、Ilia Nouretdinov、Vladimir Vovk、“插件马丁加尔用于测试在线可交换性”,ICML 2012

    Microsoft 学术) (的源和引文

  • 弗拉基米尔·沃夫克、Ilia Nouretdinov、Alex J. Gammerman、“测试可交换性在线”、ICML 2003。

    Microsoft 学术) (的源和引文

如何配置时序异常情况检测

  1. 时序异常情况检测 模块添加到试验中,并连接包含时序的数据集。

    用作输入的数据集必须至少包含一列,其中包含字符串格式的日期/时间值,另一列包含趋势值,采用数字格式。 其他列将被忽略。

    由于每一行对应于表示当时值的时间序列中的数据点,因此时间值应是唯一的。

  2. 数据列:在数据集中选择包含数字数据值的单个列。 这些值是想要建模的趋势中的数据点,例如随时间推移的总人口、每月成本或某些时间段内的温度。

  3. 时间列:在数据集中选择包含关联时序值的单个列。

    该列必须包含有效的日期/时间值,这意味着所有日期必须位于.NET Framework支持的日期范围内。

    “时间”列必须使用 DateTime 数据类型。 如果日期采用字符串格式,则可以使用“应用SQL转换”模块强制转换日期,或使用“执行 R 脚本”模块转换它们。 如果日期表示为整数,则还必须使用适当的日期/时间转换函数来表示使用有效的日期/时间格式的值。

    例如,以下SQL语句将Excel串行日期值更改为日期/时间格式:

     SELECT CAST([SerialDate]  AS SmallDateTime) as [NewValidDate] from t1;  
    

    日期值格式正确后,使用“编辑元数据”模块将列类型设置为 DateTime。

  4. 马丁加尔类型:选择要使用的马丁加尔函数。

    • PowerAvg。 此选项是权力马丁格尔的边缘化实施。

      默认值为 PowerAvg ,没有其他参数。 此选项提供更稳定的异常检测器,并且应适合大多数需求。

    • 电源。 权力马丁格尔的非边缘化实施。

      Power 选项为用户提供了一个选项,用于为 Epsilon 参数提供介于 0 和 1 之间的值来控制检测器的敏感度。 通常,较高的 epsilon 值意味着对异常的敏感度更高,但确定性较低。

    有关马丁格尔的定义和本模块中使用的方法,请参阅: 使用机器学习检测时序数据中的异常情况

  5. 奇怪函数类型:此选项用于特定不同类型的异常。 支持三个选项,无需进一步参数:

    • RangePercentile

      这是默认设置,主要用于检测级别更改。

    • SlowPosTrend。 选择此选项可检测正趋势变化。

    • SlowNegTrend。 选择此选项可检测负面趋势更改。

  6. 马丁加尔和奇怪值长度:指定历史窗口的大小,用于计算回溯历史记录的马丁加尔值。

    默认值为 500,但可以指定介于 0 和 5000 之间的任意整数。 对于大型时序,默认值应正常工作。 对于较小的时序,可以尝试估计异常行为的预期长度的值。

    建议通常将这两个参数设置为相同的值。

  7. 奇怪值的长度:指定用于计算每个数据点的奇怪性的历史记录窗口的长度。

    默认值为 500,但可以指定介于 0 和 5000 之间的任意整数。

    此参数的限制与 Martingale 的长度相同。 也就是说,应将该值设置为了解“正常”行为所需的估计数据点数。

    大多数情况下,500 的默认值非常有效,但如果度量“正常性”的刻度变化,则使 “奇怪值长度 ”的值大于 马丁加尔的长度可能很有用。

    例如,如果你正在监视错误,并且假定数据点以 15 分钟间隔捕获,则了解正常趋势所需的时间可能会因月到月而有所不同。

    一般情况下,使用较大的窗口大小会导致性能降低,因为模块必须通过较大的数据集进行学习。

    建议通常将这两个参数设置为相同的值。

  8. 警报阈值:指定异常分数生成警报的值。

    默认值为 3.25,这意味着为每个包含分数为 3.25 或更高版本的行生成警报。 是

    可以指定介于 0 和 100 之间的任意浮点数。 但是,在阈值选择方面,敏感度与置信度之间存在权衡:

    • 较低的阈值会使检测器对异常更敏感,并生成更多警报。

    • 较低的阈值可能会导致正常更改错误地分类为异常。

  9. 运行试验。

    请注意,无需单独训练此模型;该算法从你提供的数据中学习模式作为此模块的输入。

结果

训练完成后,模块输出与输入时序长度相同的时序;但是,添加了两列来指示可能异常的值。

  • 异常分数:第一列包含一个分数,表示时序值异常的可能性。

  • 警报:此列包含值为 0 或 1 的标志,其中 1 表示检测到异常。 可以设置基于分数列生成警报的阈值,但设置 警报阈值 参数。

示例

以下示例演示如何设置马丁格尔函数以检测异常以及如何解释结果。

检测级别更改

为了说明不同设置的影响,此示例中使用的示例数据集包含 8870 个数据点,三个级别更改。 根据此数据,我们使用以下参数创建了两个模型。

  • Martingale 类型PowerAvg

  • 奇怪函数类型RangePercentile

  • Martingale 的长度 = 50

  • 奇怪值的长度 = 50

模型已针对传入数据进行了训练,但针对 警报阈值应用了不同的值。 预测结果绘制在模型 1 和模型 2 的下图中。 在这些图中,蓝线表示数据值,红线表示为异常引发的 警报

警报阈值为 0.9

level change with alert of 0.9

在此模型中,阈值较低,因此即使暂时更改,也会引发警报 () 检测到的异常。

根据要监视的时序类型,其中一些警报可能被视为 false 警报。 但是,如果无法忽略任何异常,则可能最好降低阈值。

警报阈值为 3.25

level change with alert of 3.25

在此模型中,警报阈值要高得多,因此,模型只检测那些持续更长时间的更改。 在只想捕获更持久的更改的情况下,警报的阈值可能更理想。

检测正斜率变化

为了演示此选项进行异常情况检测,我们使用了包含 300 个数据点的示例数据集。 所有点都形成了整体正趋势,有两个异常。

同样,我们使用除警报阈值外相同的参数创建了两个模型。

  • Martingale 类型PowerAvg

  • 奇怪函数类型SlowPosTrend

  • Martingale 的长度 = 50

  • 奇怪值的长度 = 50

在这些图中,蓝线表示数据值,红线表示为异常引发的警报。

警报阈值为 4.25

positive trend with alert of 4.25

警报阈值为 6.0

positive trend with alert threshold of 6.0

建议尝试使用不同的警报阈值来查找异常检测方案的适当敏感度级别。

预期输入

名称 类型 说明
包含时间戳和值的输入数据 数据表 包含日期时间戳和值的输入数据。

模块参数

名称 类型 范围 可选 默认 说明
值列 ColumnSelection 必需 选择要跟踪的时序的列
窗口大小 Integer 必需 指定一个值,该值控制分析窗口的大小
阈值 Float 可选 指定一个值,该值确定分数的阈值以识别异常

Outputs

名称 类型 说明
用异常分数批注的时序 数据表 具有异常间隔的数据集。

另请参阅

异常检测
单类支持向量机
基于 PCA 的异常情况检测