异常检测

什么是异常检测?

设计算法以检测数据中的意外事件或模式

异常检测是识别数据中偏离预期行为的事件或模式的过程。异常通常表示重要行为,如机器故障、安全漏洞或流程效率低下。

异常检测的好处

异常检测方法范围广泛,从简单的离群值检测,到复杂的机器学习算法,这些算法经过训练以揭示大规模多元数据集中隐藏的模式。例如,在具有数千个传感器的工业环境中,时间序列异常检测算法可以揭示人类无法手动识别的模式。异常检测的用例和好处包括:

  • 预测性维护:传感器设备输出(如振动或温度数据)中的异常可能是更严重故障的前兆。及早解决这些异常可以提高设备安全性并避免代价高昂的停机时间。
  • 过程监控:过程数据中的异常检测,如检测电网中的能量异常,可以揭示优化性能和提高资产可用性的机会。
  • 测试数据深度见解:在测试期间,异常检测可用于识别原型中的问题,删除不良传感器读数,以及了解系统性能。这种方法确保产品在投入使用前符合重要标准。
  • 质量控制:在制造业中,异常可能表示生产线中无法通过传统方法来发现的物理缺陷,从而最大限度地减少浪费并优化产能。

面向工程师的异常检测简介

异常指与预期行为的偏差,而仅通过检查可能很难识别异常事件或模式。异常检测算法可以帮助找到这些偏差。通过硬件演示了解如何操作。

继续探索此主题

异常的类型

时间序列数据中的异常通常分为三个主要类别:

点异常,即离群值,是偏离预期值的单个数据点。一个孤立的点异常可能表示需要调查的问题或系统变化,也可能表示未发生问题,除非多个点异常快速连续地发生。

集体异常指一组数据点一起偏离预期模式。例如,功耗中的一系列不规则波动可能表示更大的问题,如组件故障或使用模式的变化。

多元异常仅在同时分析多个数据源时发生。例如,某化学过程中的温度和压力读数单独看来可能表示安全工况,但两者之间关系的变化可能表示问题。

其他数据类型中的异常

了解其他类型数据(如图像、视频和文本)中的异常检测:

使用 MATLAB 进行异常检测

在 MATLAB® 中,有很多方法均可用来设计时间序列异常检测算法。哪种异常检测方法最适用于给定应用,取决于可用异常数据量以及您是否可将异常数据与正常数据区分开来。

数据访问和探查

任何异常检测项目的基础都是数据。MATLAB 支持多种访问数据的方式,无论是导入存储在本地或云中的历史数据集,还是直接从传感器或数据库获取数据。

有时候,您只需查看数据即可执行异常检测。例如,下图显示从风扇收集的信号,您可以轻松看到指示风扇行为异常的突然信号变化。如果您能够通过肉眼检测异常,也许可以使用简单的算法(例如 findchangeptscontrolchart)进行异常检测。

用于异常检测的 MATLAB 图:显示电机电压、风扇转速和温度数据。

使用 MATLAB plot 函数创建的冷却风扇数据,显示易于通过肉眼检测的异常。

数据预处理和特征工程

异常通常很难从原始数据中直观地检测。当今的复杂机器可能有成千上万个传感器。有时,仅当同时考虑多个传感器的情况下,异常才会变得明显。如果标注了数据,您可以检查时域和频域特征的统计分布。您还可以应用无监督特征排名来识别具有最高方差或与其他特征相关性最低的特征,这些特征最可能训练出准确的时间序列异常检测算法。

Predictive Maintenance Toolbox™ 中的诊断特征设计器可以帮助您以交互方式从时间序列数据中提取、分析特征以及进行特征排名。

使用 App 进行异常检测的截图:显示特征排名的条形图和概率的直方图。

使用诊断特征设计器提取、浏览正常三轴振动数据中的特征并进行特征排名。(请参阅 MATLAB 代码。)

设计异常检测算法

异常检测算法可能涉及对历史数据应用统计方法或训练 AI 模型以检测新数据上的异常。MATLAB 提供各种时间序列异常检测方法,分为三个类别:统计和基于距离的方法、一类 AI 模型和聚类。这些都是在设计异常检测算法时可能使用的工具,但您从何处着手将取决于您掌握的数据和您的目标。

下表概述了各个类别的异常检测方法的适用情形以及 MATLAB 中的一些示例函数。列出的各项并非面面俱到,您应尝试多种方法以获得最佳结果。

异常检测方法
类别 示例函数 使用情形
统计和基于距离的方法 isoutlierfindchangeptsmatrixProfilerobustcovmahal
  • 您有大量正常数据,其中混有一些异常。
  • 您要在数据中发现异常。
  • 您需要一种简单、易于解释的方法。
一类 AI 模型

ocsvmiforestrccforestlofdeepSignalAnomalyDetector

  • 您有大量正常数据,但异常很少。
  • 您要训练 AI 模型以检测新数据中的异常。
聚类方法 kmeansdbscanclusterdatafitgmdist
  • 您数据中正常数据和异常大致平衡。
  • 您要将数据分离为若干可识别的簇。

统计和基于距离的方法

用于异常检测的统计和基于距离的方法依赖对基础数据分布的假设。它们通过确定哪些数据点显著偏离预期行为来识别异常。这些方法包括:

  • 离群值和变化点检测:离群值检测标记落在预期阈值之外的单个数据点,如异常高或低的值。变点检测识别数据的统计属性的变化,如均值或方差的突然变化。这些方法适用于点或集体异常检测,可以帮助您了解或清洗数据,但其稳健性可能不足以捕获更微妙的行为变化。
  • 矩阵和距离轮廓:计算距离轮廓矩阵轮廓是分析时间序列数据以揭示 motif,也就是主题(重复模式)和 discord,也就是不一致(罕见或异常模式)的异常检测方法。它们尤其适用于通过比较数据段来检测长时间序列中的集体异常,并且计算效率非常高。
  • 稳健协方差:稳健协方差对数据的分布进行建模,并检测落在其轮廓之外的点。它会考虑变量之间的关系,对于在多个特征同时偏离导致多元异常的数据集中进行异常检测非常有效。
  • 马氏距离:马氏距离测量数据点与多元分布中心的距离。它特别适合在特征相关的数据集中检测多元异常。

应用 distanceProfile 进行异常检测。距离分析计算一个查询子序列(红色)与时间序列中所有其他子序列之间的距离,以识别最相似 (motif) 和最不同 (discord) 的子序列。(参阅 MATLAB 文档。)

一类 AI 模型

一类模型设计用于无监督异常检测 - 即大多数或所有数据均为“正常”(非异常)。这些一类异常检测模型可以基于机器学习或深度学习 - 它们基于正常数据进行训练,任何偏离正常的行为都标记为异常。当异常很罕见或缺乏良好定义的模式且您有大量正常数据用于训练时,一类模型最适用。它们可以应用于点异常、集体异常或多元异常。

MATLAB 中用于异常检测的常见一类 AI 模型包括:

  • 孤立森林:孤立森林可用于构建将每个观测值隔离到一个叶节点中的树。异常分数作为样本的平均深度进行计算:异常样本需要的决策数比正常样本的要少。这种异常检测方法支持数值特征和分类特征组合,并且适用于高维数据。
  • 一类支持向量机:一类支持向量机在高维特征空间中围绕正常数据点创建边界,将它们与边界外的点分隔,后者归类为异常。这种方法需要数值特征作为输入,而且不适用于高维数据。
  • 自编码器:自编码器是基于正常数据训练且尝试重构原始输入的神经网络。经过训练的自编码器将准确重新构造正常输入,但输入与其重新构造之间的较大差异表示存在异常。自编码器可能使用卷积神经网络或长短期记忆网络。Signal Processing Toolbox™ 提供 deepSignalAnomalyDetector 对象,用于应用这些深度学习方法。
用于异常检测的 MATLAB 绘图的截图:显示三个通道的振动数据之前和之后的情况。

在三轴振动数据中检测到的多元异常示例。此处,维护后立即收集的数据是正常的,而维护前刚收集的数据识别为异常。(请参阅 MATLAB 代码。)

聚类

当您的数据中混入异常但无法进行标注时,您还可以尝试使用无监督聚类方法进行异常检测。聚类算法根据其特征对相似的数据点进行分组。通常,聚类方法应用于从时间序列数据中提取的特征,如主成分。有时,您可以将正常数据和异常数据的簇相关联,但除非数据集是均衡的(包含许多同类型的异常),否则使用一类 AI 方法更有可能获得有用的结果。

测试和验证

测试和验证确保异常检测模型在陌生数据上准确可靠地执行。此过程需要一些已标注的异常数据 - 而这些数据可能很难获得。当异常数据稀缺时,您可以使用基于规则的方法(例如,添加噪声或尖峰)或从基于物理的 Simscape™ 系统模型生成合成时间序列数据。您也可以使用 synthesizeTabularData 生成额外的表特征数据。

工程师通常将数据拆分为训练集、验证集和测试集:训练集教导模型正常行为,验证集在训练期间调节模型,测试集评估其最终性能。精确度、召回率、F1 分数和 ROC-AUC 等性能度量可用来评估模型检测异常的效果。稳健性测试通过评估模型在含噪、不完整或陌生数据模式下的表现,进一步确保可靠性。

部署

您可以通过生成 C/C++ 代码或 Simulink 模块将算法部署到嵌入式设备以进行实时异常检测。如果您需要模型从新数据中持续学习,还可以应用增量异常检测。这种情况下,传入数据需要在几乎没有或根本没有相关信息的情况下进行处理,并且算法需要实时自适应变化。

要对企业范围内的数据进行操作,您还可以将异常检测算法部署到您选择的云环境中。

继续探索此主题