指南

工程师的时间序列异常检测指南

探索如何使用 MATLAB 识别数据中与预期行为不符的事件或模式。

本指南面向设计和部署算法来检测时间序列数据中的异常的工程师。

异常检测简介

什么是异常检测?

异常检测是识别数据中与预期行为不符的事件或模式的过程。这些偏差(称为异常)可以指示重要信息,如机器故障、安全漏洞、早期预警信号或流程效率低下。

从振动信号检测到工业机械异常。来自某时间窗的三轴振动数据得到处理,并通过机器学习模型检测到异常。模型决策边界显示在主成分平面上,其中红点表示异常。

异常检测用例示例

异常检测算法在各行各业和应用中都很有用:

预测性维护:部署在工业设备中的异常检测算法可以识别机器故障的早期迹象,提高安全性并避免高成本的停机时间。

数字健康:检测心电图 (ECG) 信号中的异常可以揭示各种心脏状况,如心律失常、心房颤动和室性心动过速。

飞行测试数据分析:工程师依赖飞行测试来了解系统行为并为设计选项提供信息。异常检测可以标记不稳定的传感器值并识别超出预期性能范围的测试条件。

容错控制:在电机中嵌入的异常检测算法可以实时标记变化情况。这使得控制人员能够调整响应以防止损坏并提高性能。

时间序列数据中异常的类型

尽管异常可能出现在各种类型的数据中,例如图像、视频和文本,但本指南侧重于时间序列数据。这类数据在工程应用中很普遍。时间序列数据记录随时间推移的顺序测量值,例如温度、压力和振动。时间序列数据中的异常有三种主要类型。

MATLAB 图窗:显示一条含噪正弦曲线,用红点标记三个离群值。

点异常,即离群值,是偏离预期值的单个数据点。

MATLAB 图窗:突出显示一个段,将其标记为异常。

集体异常指一组数据点一起偏离预期模式。

MATLAB 图窗:在三条曲线中用突出显示的段标记异常。

多元异常在同时分析多个数据源时发生,它们在单个数据源中可能是异常,也可能不是异常。

选择异常检测算法

MATLAB 提供各种时间序列异常检测算法,分为两个主要类别:统计和基于距离的方法以及一类 AI 模型。这些都是设计异常检测算法时所有可能使用的工具,但选择具体哪种工具取决于您的数据和目标。

统计和基于距离的方法

统计方法依赖于对基础数据分布的假设。它们应用阈值、趋势或概率模型来识别偏离预期统计行为的点。一种简单的统计异常检测方法可能是计算信号的移动均值,并在均值超过某个阈值时标记异常。

基于距离的方法不假设存在特定数据分布;相反,它们通过计算单个观测值或子序列之间的距离来标记异常,识别那些远离典型模式的观测值或子序列。例如,matrixProfile 比较时间序列中的每个子序列,并将那些距离其他子序列最远的子序列识别为异常。

使用 distanceProfile 识别时间序列数据中的异常。

何时使用统计和基于距离的方法

  • 您的训练数据有限
  • 您完全了解数据中的基线统计数据和趋势
  • 您的计算资源有限

特征

+   简单且可解释
+   计算成本低
+   适用于点异常和集体异常
-   可能难以处理复杂模式或非线性动态特性
-   对噪声和数据维度敏感

MATLAB 中的示例方法

  • isoutlier - 查找数据中的离群值
  • findchangepts - 查找信号中的突变
  • robustcov - 计算稳健的多元协方差和均值估计值
  • mahal - 计算到参考样本的马氏距离
  • distanceProfile - 计算查询子序列与时间序列的所有其他子序列之间的距离剖面
  • matrixProfile - 计算多元时间序列中所有子序列对之间的矩阵剖面

浏览示例

使用矩阵剖面检测电机数据中的异常

矩阵剖面适用于在长时间序列中高效检测集体异常。此示例说明如何应用矩阵剖面来检测从退化的直流电机收集的电枢电流测量值中的异常。

电机数据的矩阵剖面,突出显示最相似模体对和异常段

一类 AI 模型

此类别中的异常检测方法基于一组大体正常的基线数据训练机器学习或深度学习模型。模型学习正常行为并将偏差识别为异常。当异常很罕见或缺乏明确定义的模式时,一类 AI 模型最适用。它们可以应用于多通道数据,以检测所有类型的异常。

何时使用一类 AI 模型

  • 您要训练模型,以在新数据到达时识别其中的异常
  • 您有大量正常数据用于训练
  • 异常很罕见、未知或缺乏明确定义的模式

特征

+   适用于所有类型的异常,包括复杂模式和非线性模式
+   对噪声和数据维度稳健
+   深度学习方法不需要特征工程
-   训练时间更长、计算需求更高
-   与统计和基于距离的方法相比,通常可解释性更差

MATLAB 中的示例方法

浏览示例

训练深度学习模型以检测异常

此示例使用深度学习模型检测心电图 (ECG) 数据中的异常心跳序列。

ECG 数据,检测到的异常以红色显示。

ECG 数据,检测到的异常以红色显示。

为异常检测准备数据

高质量数据对于构建准确的异常检测算法至关重要。但是,为异常检测收集、探索和预处理数据具有挑战性 - 它也不是一个放之四海而皆准的方法。您应用的方法取决于数据特征、硬件要求以及您尝试解决的问题。即使有大量数据,检测异常也很困难,因为数据来自成百上千个含噪传感器。在这些情况下,提取特征和降低数据维度至关重要。

用于异常检测的数据集

与许多传统机器学习任务相比,异常检测的训练数据要求相当灵活,例如您无需标注数据。异常检测算法仅使用正常数据进行训练,或者使用混入了一些异常的、绝大多数为正常的数据进行训练。使用这种类型的数据,您需要训练异常检测模型来识别什么是正常的,任何不正常的内容都分类为异常。

如果您有平衡的标注数据集,其中包含两个或更多类,请应用一种称为有监督学习的方法进行多类故障检测。

适合异常检测的正常数据和大体正常数据的图。平衡的标注数据可用于有监督学习。

适合异常检测的数据。

了解有关这些方法的更多信息:

探查和预处理数据

在设计算法之前,您需要理解数据所传达的信息。探查和可视化您的数据有助于识别有用的数据源、辨别数据模式、揭示数据质量并确定必需的预处理步骤。您可以使用信号分析器以交互方式探查和预处理时间序列数据。

从传感器采集的数据通常含噪、混乱且无组织。MATLAB 提供的许多方法和交互式 App 可用于预处理步骤,如重采样、平滑、组织、填充缺失数据等。

了解有关使用 MATLAB 进行数据预处理的更多信息:

从原始数据中提取特征

虽然一些 AI 模型可以直接对时间序列数据执行操作,但从数据中提取特征可以通过突出显示区分正常和异常数据的关键量来改善模型性能。特征提取涉及将原始数据变换为有意义的数值特征,您可以用这些特征来训练模型。

例如,您可以计算特征,如均值、标准差、峰值振幅或主频。这些特征总结时间序列数据中的重要行为,使模型更容易学习何为正常数据。

熟悉其数据的工程师通常已经知道哪些特征最有用。但是,您也可以使用自动特征提取过程,该过程提取常见特征(描述性统计量、频谱测量值等),然后对它们进行排序。Predictive Maintenance Toolbox 中的诊断特征设计器可以帮助您以交互方式提取、比较特征以及进行特征排名,然后使用这些特征训练 AI 模型。

降低数据维度

在收集数据和提取特征后,通常最终会得到大量特征 - 有时每个信号可获得成百上千个特征。这种高维度会使模型训练速度更慢、更难解释且更容易出现过拟合。通过仅选择或组合最具信息量的特征来降低维度有助于简化模型并将模型训练集中在指示异常的关键特征上。降维方法,如主成分分析 (PCA) 或特征排名,可以帮助识别哪些特征对异常检测贡献最大。

浏览示例

使用三轴振动数据检测工业机械中的异常

此真实示例训练三个不同的一类 AI 模型。该过程包括数据探查、特征提取、训练模型和评估其性能。

三个绘图:显示三个通道在维护前后的振动数据。

在工业设备维护前后的三轴振动数据。维护后的数据表示正常运行,而维护前的数据表示存在异常。

真实世界实现

工程师设计异常检测算法的目的是方便他们检测真实系统中的异常。开发这些算法是一个迭代的过程。

本指南涵盖开发异常检测算法的基本步骤:探查和预处理数据、提取特征以及选择算法。在开发后,您可以基于新数据评估算法以确保其泛化良好。最后,您可以将其部署用于实时应用,并根据需要通过增量学习更新它。

包含五个步骤的循环工作流:获取和探查数据、开发异常检测算法、基于新数据进行测试、部署到硬件以及更新模型。

为真实应用开发和部署基于 AI 模型的异常检测模型的工作流。

部署到嵌入式硬件

使用 MATLAB 实现嵌入式 AI,您可以创建 Simulink 模块或生成 C/C++ 代码,将异常检测算法部署到嵌入式设备(如微控制器或 ECU)以进行实时异常检测。在将这些算法部署到嵌入式硬件之前,请务必在仿真中测试它们以确保其有效性。Simulink 提供了一个平台,可用于将异常检测算法与其他系统组件集成,实现系统级实时仿真。

示意图:将异常检测算法部署到 Raspberry Pi。

将 Simulink 模块 Deep Signal Anomaly Detector 部署到 Raspberry Pi® 以进行实时噪声检测。

增量异常检测

增量异常检测方法持续处理传入数据并实时根据数据流计算异常分数。增量模型对数据进行拟合。MATLAB 提供 incrementalRobustRandomCutForestincrementalOneClassSVM 模型对象以用于增量异常检测。首先,训练模型以计算异常分数。然后,基于从用于训练的数据获得的异常分数计算并调整阈值。随着新批量数据流入,模型将进一步检测异常、重新训练自身并调整阈值。

了解有关增量异常检测的更多信息。

MATLAB 图窗:在模型拟合、阈值学习和在线估计阶段中,异常分数、阈值和检测到的异常随迭代次数的变化情况。

对时间序列数据应用增量学习方法的模型拟合、阈值学习和在线估计阶段。

关键要点

时间序列异常检测涉及识别与预期模式的偏差,这可以指示关键问题,如机器故障、健康风险或流程效率低下。MATLAB 提供了用于检测时间序列数据中异常的完整工作流,包括数据探查和预处理、降维和特征提取以及选择适当的算法。使用 Simulink,您可以将异常检测算法集成到更大的系统模型中,以通过仿真验证整体系统行为。该工作流还支持嵌入式部署,使您能够生成 C/C++ 代码,以在边缘设备上或实时应用中部署异常检测算法。

发现有关异常检测预测性维护的更多信息。