你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
仅为方便起见,提供非英语翻译。 请参阅 EN-US 版本以获取最终版本的此文档。
异常检测器是一项 AI 服务,可用于监视和检测时序数据中的异常。 本文提供了透明度信息,可帮助你了解服务的工作原理、其功能、限制和负责任的使用注意事项。
什么是透明度说明?
AI 系统不仅包括技术,还包括使用它的人员、受其影响的人员以及部署它的环境。 创建一个适合其预期用途的系统需要了解技术的工作原理、功能和局限性,以及如何实现最佳性能。 Microsoft 的透明度说明旨在帮助你了解 AI 技术的工作原理、系统所有者可通过哪些选择来影响系统性能和行为,以及保持系统全局观(包括技术、人员和环境)的重要性。 你可以在开发或部署自己的系统时使用透明度说明,或者与使用你的系统或受其影响的人员共享透明度说明。
Microsoft 的透明度说明是 Microsoft 将其 AI 原则付诸实践的广泛努力的一部分。 若要了解详细信息,请参阅 Microsoft AI 原则。
异常检测器的基础知识
介绍
异常检测器是一项 AI 服务,可用于监视和检测时序数据中的异常,而无需机器学习的技术专业知识。 无论行业、方案或数据量如何,异常检测器 API 都会通过自动识别和应用最适合的数据模型来适应。 异常检测器服务具有两个功能:单变量异常检测和多变量异常检测。
异常检测器 RESTful API 采用时序数据作为其输入,其中的关键部分是时间戳和要分析的指标的数值。 API 的输出包含每个数据点的异常状态,在标识的异常情况下,导致异常状态的变量。
关键术语
| 条款 | 定义 |
|---|---|
| 时序 | 时序是按时间顺序编制索引(或列出或绘制)的一系列数据点。 时序通常是在连续的、均匀间距的时间点生成的序列。 它是离散时间数据的序列,通常包含时间戳、维度(可选)和度量值。 |
| 粒度 | 在单变量异常情况检测中,时序输入数据需要处于相同间隔的时间点。 这意味着数据需要预先聚合到特定的粒度,例如按年份、月、周、日、小时、分钟或秒。 |
| 敏感性 | 在单变量异常检测中,作为系统参数,它通过数值来调整单变量异常检测的容忍度。 降低敏感度会增加识别为正常的范围,从而导致检测到的异常更少 |
| 最大异常比例 | 在单变量异常检测中,这表示从时序检测到的异常的最大比率。 例如,如果设置为 0.25,对于具有 100 点的时序,最大异常点将为 25。 |
| 滑动窗口 | 在多变量异常检测中,此参数指示使用多少个数据点来确定异常。 SlidingWindow 必须是介于 28 和 2,880 之间的整数。 默认值为 300。 |
| AlignMode | 在多变量异常检测中,此参数指示如何在时间戳上对齐多个变量(时序)。 此参数有两个选项:Inner 和 Outer,默认值为 Outer。 |
能力
系统行为
使用异常检测器不需要以前在机器学习方面的经验。 RESTful API 使你可以轻松地将服务集成到应用程序和进程。 可以使用云或容器的智能边缘部署异常检测器 API。
异常检测器 v1.1 支持两种不同的功能:
- 单变量异常检测:检测一个变量中的异常,例如收入、成本等。根据数据模式自动选择模型,无需训练。
- 多变量异常检测:检测具有相关性的多个变量中的异常,这些异常通常是从设备或其他复杂系统收集的。 使用的基础模型是图形关注网络,经过训练的模型性能因训练数据、微调和用例而异。
用例
预期用途
可以将异常检测器用于多种情境,是否需要训练取决于使用的异常检测器功能。 系统的预期用途包括:
- 监视业务指标: 实时跟踪业务指标的性能,以确定实质性或突然变化。 例如,可能会在网站的每日活跃用户、库存或收入中发现意外的数字模式。
- 监视 IT 操作指标 分析和监视遥测数据,例如 IT 操作中的性能计数器,以检测可能影响 IT 系统运行状况和性能的异常。 示例包括 VM 的 CPU 使用率、数据库的吞吐量,甚至包括网站的登录次数和注册数。
- 监视传感器和预测性维护中的 IoT 数据: 可以从工厂车间、生产线、石油钻机和管道上部署的 IoT 传感器读取的传感器数据,甚至可以使用异常检测器来分析和监视汽车和无人机。 从数据中检测到的异常可能表示机械的异常状态。 生成的应用程序可以通知人工审阅者,以便在出现更大的问题之前执行预防性维护作。
选择用例时的注意事项
我们鼓励客户在其创新解决方案或应用程序中利用异常检测器。 但是,在选择任何用例时,下面是一些注意事项:
- 在可能影响人类身体安全的情况下,包括在对任何操作决策之前对输出进行人工审核。 此类用例的示例包括监视和检测工厂车间或生产线机械性能中的异常状态。
- 异常检测器不适合可能具有严重不利影响的决策。 此类用例的示例包括医疗场景,例如监测心跳或血糖水平。 基于错误输出的决策可能会产生严重的负面影响。 此外,建议对可能给个人造成严重影响的决策进行人工审核。
- 由于异常检测器没有定性评估功能,因此它不适合监视或评估人类活动,例如在工作场所。 不建议以这种方式使用它。 此外,工作场所监视可能在你的司法管辖区内不合法。
局限性
技术限制、运行因素和范围
异常检测器有几个限制需要注意:
- 异常检测器是无状态的,不会存储任何客户数据或模型更新。 这意味着每个 API 调用是完全独立的。 具有大量数据的多个 API 调用不会更改服务的准确性。 若要提高准确度,请在单个 API 调用中进行调整。
- 异常检测器不会自动为客户优化参数。 当客户希望依赖服务中的异常检测结果来触发自动动作时,我们强烈建议在将设置应用到您的场景之前,对实际数据进行评估。
- 异常检测器仅使用时间戳和数字来获取时序数据。 该服务不知道收集数据的上下文和环境。 在生产使用中,决策者可能需要考虑超出这些措施的知识。
系统性能
通过评估系统检测到的异常与实际异常事件相对应的程度,可以测量异常检测的准确性。 例如,异常检测器捕获异常,同时客户报告实际的服务中断。 为了测量准确性,客户可能使用一组历史数据,让异常检测器执行检测结果。 然后,客户可以将该信息与真实事件的记录进行比较,并将检测结果分为两种正确(或“true”)异常以及两种错误(或“false”)异常。
| 条款 | 定义 | 示例 |
|---|---|---|
| 真正 (TP) | 系统检测到的异常与实际异常事件正确对应。 | 系统标识与实际服务中断相对应的异常。 |
| 真正 (TN) | 当指标数据遵循处于正常作范围内的历史模式时,系统不会正确检测任何异常。 | 系统在未发生服务中断时找不到异常。 |
| 假正 (FP) | 当没有异常事件时,系统错误地检测到异常。 | 系统在未发生服务中断时检测到异常。 |
| 假负 (FN) | 系统在发生异常事件时无法检测异常 | 发生服务中断时,系统无法捕获异常。 |
精准率和召回率
精准率是指在返回的所有正结果中真正例所占的比例,不考虑其正确性(包括真正和假正)。 它指示检测到的异常数与实际异常事件相对应。 可按如下方式计算:
Precision = TP / (TP + FP)
精度分数为 1.0 意味着检测到的每个异常都对应于实际异常事件。
召回率是指真正例在所有实际正例中所占的比例(包括真正和假正)。 它指示检测到多少个实际异常事件。 可按如下方式计算:
Recall = TP / (TP + FN)
召回分数为 1.0 表示检测到每个实际异常事件。
提高系统性能的最佳做法
很难同时优化精度和召回率。 根据具体方案,客户可能希望将一个方案优先于另一个方案。 例如,监视特定 KPI 的利益干系人可能需要较高的召回率,以便不会错过任何问题。 相比之下,执行级别的利益干系人可能只想在发生严重情况时收到通知,这需要较高的精度率。
需要平衡几个因素才能获得满足业务需求所需的准确性。
单变量异常情况检测
敏感性
敏感度参数(检查 API 参考以获取更多参数说明)是优化检测结果的关键。 通常,高敏感度值意味着模型对离群值更敏感,并且可能会识别更多的异常。 低敏感度值通常意味着模型可以容忍轻微异常。
选择正确的模式
异常检测器提供两种不同的检测模式:“末尾模式”和“全局模式”。 这两个 API作在输入参数和输出格式方面看起来相似。 在选择要使用的模式时,需要考虑检测行为的一个关键区别。 整个过程使用请求中的所有数据点来创建单个统计模型。 /last 操作只能查看传给 API 的数据点范围,该范围通常只是整个数据集的一个子集。 在实践中,整个操作更有可能忽略随机和小噪声,因为它关注全局统计模式。 /last操作只查看你指示的本地窗口,因此更可能将这些噪声点标识为异常。
数据粒度
如果原始数据粒度较低(例如每秒一个数据点,甚至次秒),一种常见做法是聚合(总和/平均值/样本)到更高的粒度。 聚合的优点包括:
- 更便于调整以实现时间上的均匀分布,这是 API 输入的一个协议。
- 增加随机干扰的容忍度。
- 减少数据点和更少的 API 事务。
聚合的缺点是,不考虑较低粒度内的细微变化,这可能会导致缺少重要的异常。
其他因素还可用于提高模型的准确性,例如指定已知的季节性模式。 有关提高单变量异常情况检测的准确性的详细信息,请参阅 使用 Univariate 异常情况检测时的最佳做法。
多变量异常情况检测
数据质量和数量
训练数据集的质量和数量对于模型性能非常重要。
- 当模型从历史数据中学习正常模式时,训练数据应表示系统的整体正常状态。 如果训练数据中的异常过多,模型会很难学习这些类型的模式。 异常率的经验阈值为 1% 或更低,以便获得良好的准确性。
- 一般而言,训练数据的缺失值比率应低于 20%。 丢失的数据过多可能会导致自动填充的值(通常是线性值或常量值)被学习成正常的数据模式。 这可能会导致将实际(未缺失)数据点检测为异常。
- MVAD 的基础模型包含数百万个参数。 它需要最少数量的数据点来学习一组最优参数。 经验规则是,需要为每个变量提供 5,000 个或更多数据点(时间戳),以便训练模型,以便获得良好的准确性。 一般来说,训练数据越多,准确性就越好。 但是,如果无法累积那么多的数据,我们仍然鼓励你尝试较少的数据,并查看准确性是否仍可接受。
滑动窗口
多变量异常情况检测采用一段数据点来确定下一个数据点是否是异常。 段的长度是一个 slidingWindow。 选择滑动Window 值时,请记住两点:
数据的属性:它是否是周期性的,以及它的采样率。 如果您的数据是周期性的,可以将长度设置为 1 到 3 个周期,作为滑动窗口 (slidingWindow)。 如果数据是高频率(小粒度)的,例如分钟级或秒级,则可以设置一个相对较大的滑动窗口值。
训练/推理时间与潜在性能影响之间的权衡。 较大的滑动窗口可能会导致训练/推理时间更长。 不能保证较大的滑动窗口将导致准确性提升。 小型滑动窗口可能会使模型难以聚合到最佳解决方案。 例如,当 slidingWindow 只有两个点时,很难检测异常。
严重性和分数
建议使用严重性作为筛选器来筛选对业务不重要的“异常”。 根据方案和数据模式,不太重要的异常通常具有相对较低的严重性值或独立(不连续)高严重性值,例如随机峰值。
如果需要比针对严重性或持续高严重性值的持续时间的阈值更复杂的规则,可能需要使用分数来生成更强大的筛选器。 了解 MVAD 如何使用分数来确定异常可能有所帮助:我们考虑数据点是否从全局角度和本地角度异常。 如果时间戳的分数高于特定阈值,则时间戳将标记为异常。 如果分数低于阈值,但在段中相对较高,则也会将其标记为异常。
有关提高单变量异常检测的准确性的详细信息,请参阅 使用多变量异常检测时的最佳做法。
评估和集成异常检测器以满足您的使用需求
异常检测器的性能将因客户实现的实际用途而异。 为了确保其方案中的最佳性能,客户应对使用异常检测器实现的解决方案进行自己的评估。 执行此作时,请考虑以下事项:
- 客户可能有自己的首选项来查看异常结果。 如果是这样,则需要开发其他接口元素,以便根据它们的偏好显示结果。
- 异常检测器处理各种指标。 其中一些指标可能很敏感,不应公开访问。 计划实现使用异常检测器的解决方案时,请考虑对不同指标数据的访问控制。 确保解决方案安全且具有足够的控件来保留内容的完整性,并防止未经授权的访问。
- 在将异常检测器部署到方案中之前,请测试它如何使用实际数据执行,并确保它可以满足你尝试实现的目标。
- 验证服务生成的结果的准确性,根据改进准确性的最佳做法进行一些微调,并确保它提供所需的准确性。
- 异常检测器不会为 100% 准确,因此请考虑如何识别和响应可能发生的任何错误。
- 异常检测器提供数据见解,而不建议要执行的操作,因此在响应此服务识别的异常时,应根据你的领域专业知识进行操作。
详细了解负责任 AI
详细了解异常检测器
- 异常检测器 - 异常情况检测系统 |Microsoft Azure
- 使用异常检测器识别异常时序数据 - 训练 |Microsoft Learn
- 什么是异常检测器? - Azure AI 服务 | Microsoft Learn
联系我们
通过电子邮件向我们提供有关本文档的反馈:anomalydetector@microsoft.com