如何使用机器学习进行异常检测和状态监测(附实例)
在行业应用里面，基于先验知识的模型还在应用，但是基于机器学习的模型也在崭露头角。
在本文中，作者将介绍几种不同的技术，包含机器学习和统计分析的应用。
然后说明如何在特定的案例中应用这些方法来解决异常检测和状态监测。
这些都是我们以前听说过或阅读过的术语。
但是，在这些流行的术语背后，主要目标是利用技术和数据来提高生产率和效率 。
设备和传感器之间的信息和数据流互联，可以获得大量可用数据。
关键技术在于如何能够使用这些海量可用数据并实际提取有用的信息，从而尽可能降低成本，优化库存并将停机时间降至最低 。
这是最近有关机器学习和数据分析崭露头角并方兴未艾的地方。
异常检测(或离群值检测)是从事件或观察结果中识别出罕见现象，这些事件由于与大多数数据有着显著差异而被怀疑为异常。
通常，异常数据会与某些问题或罕见事件关联，例如银行欺诈，医疗问题，结构缺陷，设备故障等。
因为从业务角度来看，识别这些事件通常非常有趣，所以这种关联让人们有兴趣找出哪些数据点可以视为异常。
这就要提到关键目标之一: 我们如何确定数据点是正常还是异常
在一些简单的情况下，数据可视化可以为我们提供重要的信息，如下图所示。
但是，从右侧图来看， 无法同时通过只查看一个变量直接识别异常值:而X和Y变量的组合使我们能够轻松识别异常 。
当我们从两个变量扩展到10-100倍的变量时，这使问题变得非常复杂。
而这在异常检测的实际应用中恰恰是常态。
任何机器，无论是旋转机器(泵，压缩机，燃气轮机或蒸汽轮机等)还是非旋转机器(热交换器，蒸馏塔，阀门等)都将最终变成欠健康状态。
有可能不会真的发生故障或停机，但是设备无法处于最佳状态。
这表明可能需要进行一些维护才能恢复最佳运行状态。
简而言之，确定设备的“健康状态”是状态监测的领域。
实施状态监测最常见方法是监控机器上的每个传感器测量值，并对其施加最小和最大值限制。
如果当前值在范围之内，则机器运行状况良好。
如果当前值超出范围，则机器运行不正常，并发送警报。
我们已经发现，硬编码警报上下限会发送大量错误警报，也就是实际上是机器处于健康状态却发出警报。
也会有未警报的情况，也就是明明有问题但未被警报。
第一个问题不仅浪费时间和精力，而且浪费设备的可用性。
第二个问题更为关键，因为它会导致实际损坏以及相关的维修成本和生产损失。
这两个问题都是由相同的原因造成的:复杂设备的健康状况(如上一节中的异常检测中的图1所示)无法根据单个测量的分析来可靠地判断。
我们需要考虑各种测量方法的组合 ，以便真正了解情况。
在不涉及某些技术方面的情况下，我们很难讲解机器学习和统计分析在异常检测的应用。
我们仍将避免过分深入理论背景(但会提供一些更详细说明的链接)。
如果你对状态监控等机器学习和统计分析的实际应用更感兴趣，请随时跳到“状态监控案例”部分。
处理高维数据通常很有挑战性，因此我们需要一些技术来减少变量的数量(降维)。
主要技术之一是主成分分析(PCA)，该方法将数据线性映射到低维空间，以使低维表示中的数据差异最大化 。
实践中会构建数据的协方差矩阵以及计算该矩阵的特征向量。
最大特征值(主成分)相对应的特征向量可以用于重构原始数据方差的主要部分。
之后，原始特征空间已减少到由几个特征向量占据的空间(有一些数据丢失，但希望保留最重要的方差)。
如上所述，在识别异常时，数据可视化在处理一个或两个变量时，通常是一个很好的起点。
但是，如果扩展到高维数据时(在实际应用中多是如此)，这种方法变得越来越困难。
这里多元统计可以解决问题。
在处理数据点集合时，它们通常具有一定的分布(例如:高斯分布)。
为了以更定量的方式检测异常，我们首先计算数据点的概率分布 p (x)。
这在状态监测的背景下就很有趣，因为异常可以告诉我们关于被监测设备“健康状态”的信息: 当设备在接近故障或欠佳状态下运行时，生成的数据通常与“健康”设备数据具有不同的分布 。
如上所述，在考虑估计数据点属于某个分布的概率问题时，第一步是找到采样点的质心 。
凭直觉，所讨论的点越靠近质心，就越可能属于该集合。
但是，我们还需要知道该集合是分布在较大范围还是较小范围内，以便我们可以确定距质心的给定距离是否显著。
一种简单的方法是估计采样点到质心的距离的标准差。
通过将其拟合到正态分布，我们可以得出数据点属于同一分布的概率 。
上述方法的缺点是我们假设采样点以球形方式围绕质心分布。
如果分布确定是非球形的，例如椭球形， 那么我们期望测试点属于集合的概率不仅取决于距质心的距离，还取决于方向。
在椭球短轴的方向上，测试点必须更接近，而在长轴方向上，测试点可以更远离中心。
在数学上可以通过计算样本的协方差矩阵来估计最能代表集合概率分布的椭球。
马氏距离(MD)是测试点到质心的距离除以测试点方向在椭球上的宽度。
采用MD将测试点归类为N个类别中某个类别，通常首先基于已知属于每个类别的样本来估计每个类别的协方差矩阵。
在本案例中，由于我们仅对“正常”与“异常”分类感兴趣， 因此我们使用仅包含正常运行条件的训练数据来计算协方差矩阵。
然后，对于给定的测试样本，我们计算样本距离“正常”类别的MD，如果距离超过某个阈值，则将测试点分类为“异常”。
注意事项: 使用MD意味着可以通过均值和协方差矩阵进行推断，而这仅是正态分布的一个属性。
由于输入变量可能不是正态分布的，因此本案例不一定满足此条件。
但是，我们还是尝试一下，看看效果如何。
第二种方法是使用自动编码器神经网络。
它与上述统计分析的原理类似，但有一些细微的差异。
自动编码器的目的是学习一组数据的表达(编码)，通常用于降维。
解码器和编码器都会学习， 这样自动编码器尝试从降维后的编码中生成尽可能接近其原始输入的表达 。
从结构上讲，自动编码器的最简单形式是前馈，而非递归神经网络。
这和许多单层感知器构成了多层感知器(MLP)类似--都具有输入层，输出层和连接它们的一个或多个隐藏层-- 但自动编码器输出层的节点数与输入层的节点数相同，并且目的是重构其自己的输入 。
自动编码器网络结构 对于异常检测和状态监测来说，基本思想是使用自动编码器将传感器读数“压缩”为较低维的表示形式，该表示形式可捕获各种变量之间的相关性和相互作用。
(基本上与PCA模型相同，但在这里我们还允许变量之间进行非线性交互)。
然后以代表“正常”运行状态的数据对自动编码器网络进行训练，目标是“压缩”之后能重构输入变量。
在降维过程中，神经网络将学习各种变量之间的相互作用，并能够将它们重新构造回原始输入变量。
主要思想是随着受监控设备的性能退化，这将影响变量之间的相互作用(例如，温度，压力，振动等变化)。
当状况发生时，我们将开始看到在神经网络重构输入变量时误差显著增加。
通过监测重构误差，可以获得被监测设备的“健康状况”指示，因为随着设备退化，该误差将增加。
类似于马氏距离，这里使用重构误差的概率分布来确定数据点是正常还是异常。
在本节中，我将介绍使用上述两种不同方法进行状态监测的案例。
由于我们与客户合作的数据都不公开，因此我选择了NASA提供的数据来进行演示，可以在下载。
此案例的目标是检测发动机上的齿轮轴承退化，并发出警告促使采取预防措施以避免齿轮故障(例如设备的计划维护/维修) 。
在恒定负载和运行条件下，三组失效数据(每个数据由四个轴承组成)。
数据集中包含振动测量信号，涵盖轴承的整个使用寿命范围，直到出现故障为止。
因为设备最终运行直至出现故障，所以我们认为运行前两天的数据代表正常和“健康”设备，用作训练数据 。
然后将其余部分直到轴承失效的数据集用作测试数据 ，这样来评估不同的方法是否可以在失效之前检测轴承退化。
如本文“技术部分”中更详细说明所述，第一种方法先进行主成分分析，然后计算马氏距离(MD)，来识别数据为正常或异常(设备退化的迹象) 。
下图说明了代表“健康”设备的训练数据的MD分布。
健康设备的马氏距离分布 根据“健康”设备的MD分布，我们可以设定异常的阈值。
根据上面的分布， 我们将MD>3定义为异常 。
现在，对这种设备性能下降检测方法的评估包括: 计算测试集中所有数据点的MD，并将其与定义的阈值进行比较，判断将其标记为异常与否。
使用上述方法，我们计算了直到轴承出现故障的时间段内测试数据的MD，如下图所示。
采用方法1预测轴承失效 在上图中，绿点表示计算出的MD，而红线代表用于标记异常的阈值。
轴承失效发生在数据集的末尾，由黑色虚线表示。
这说明第一种建模方法能够在实际故障(MD超过阈值)的三天之前检测到即将发生的设备故障。
现在，我们可以使用第二种建模方法进行类似的练习，以评估哪种方法的效果更好。
如本文“技术部分”中所述，第二种方法包括使用自动编码器神经网络来发现异常(通过神经网络的重构误差增加来识别)。
与第一种方法类似，我们在这里也使用表示“健康”设备的训练数据作为输入训练网络，用模型的输出分布来检测异常。
下图显示了训练数据的重构误差(平均绝对误差)的分布: 健康设备的重构误差分布 根据“健康”设备重构误差的分布，我们可以定义异常的阈值。
根据上面的分布， 我们可以将误差>0.25定义为异常 。
现在，对检测设备退化的方法评估包括: 计算测试集中所有数据点的重构误差，并将误差与定义的阈值进行比较以将其标记为异常 。
使用以上方法，我们计算直到轴承出现故障的时间段内测试数据的重构误差，如下图所示。
采用方法2预测轴承失效 上图中蓝点表示重构误差，而红线表示用于标记异常的定义阈值。
这说明该建模方法也能够在实际故障(重构误差超过阈值)的三天之前检测到即将发生的设备故障。
从以上两种异常检测的方法看出，它们都能够在实际故障发生前几天成功检测到即将发生的设备故障。
在现实生活中，这将允许在故障发生之前采取预测措施(维护/维修)，这既节省了成本，又对设备故障的HSE方面具有潜在的重要性。
本文作者Vegard Flovik 是同行翘楚，目前是Axbit公司首席数据科学家，具有博士学位，在莫尔德大学担任助教。
作者具能源行业的扎实实战背景，具有强大的分析能力，可以通过数学模型和计算算法来解决复杂的问题。
在AI /机器学习和使用Python和Matlab进行数据分析方面的丰富经验，精通Scikit-learn，TensorFlow，Keras，PyTorch，Pandas等机器学习工具。
本文代码将在后续文章详解。