案例11:基于相似性的剩余寿命估计

本案例将展示出构建剩余寿命估计的完整工作流,包括数据预处理、选择趋势特征、通过传感器融合构建健康因子、训练剩余寿命估计模型并评估模型预测能力。本案例使用的数据来自PHM2008的挑战赛数据,可通过以下NASA的链接下载本数据集https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/

第一步:数据准备

由于本数据集较小,因此可以将整个数据集都导入到内存中。之后可以通过helperLoadData辅助函数将训练数据文件中的数据导入到timetable型的cell数组中。训练数据包含了218条运行至失效的模拟数据,测量数据的组合被称为集成数据ensemble

helperLoadData辅助函数如下:

导入数据:

每个集成数据中的元素都是一个table,包含了26列数据,列分别表示机械ID、时间戳、3种操作工况量、21种传感器测量量,如下:

接下来,将退化数据划分为训练数据集和验证数据集,以便验证模型表现

为变量分组

使用辅助函数helperPlotEnsemble可视化查看集成数据中的一组数据

辅助函数为:

从图上可以看出,仅凭图中的信息完全看不出传感器的变化趋势

第二步:按工况聚类

本节中,将从原始的传感器数据中根据运行工况提取清晰的退化趋势

注意到,每个集成数据中的元素都包含了三个工况量,”op_setting_1“、”op_setting_2“、”op_setting_3“。首先可以将每个元素中的所有量提取出来并组合成一个新的table

之后借助辅助函数helperPlotClusters将操作工况量画成3D散点图,从图中可以清晰地看出所有数据呈现出6种不同的操作工况,并且每种工况中的样本点都聚拢得非常紧

helperPlotClusters辅助函数如下:

之后可以使用聚类的方法自动定位这6簇聚类。此处使用K-Means聚类算法,作为最流行的聚类方法之一,K-Means算法会导致局部最优。因此为避免这种情况的出现,我们可以多次运行该算法,并每次设置不同的初始点。本案例中,我们运行了5次该算法, 最后得到的结果都相同

之后同样使用辅助函数helperPlotClusters,可视化得到的聚类中心和聚类结果

绘图显示,聚类算法成功识别出了这6种不同的操作工况

第三步:按工况归一化

接下来,按照上一节中识别到的不同工况类型,进行传感器数据的归一化处理。首先按照样本被划分的聚类类型计算不同类型下传感器数据的均值和标准差

每种操作工况类型下的统计数据可以被用来归一化训练数据。对于集成数据中的元素而言,提取每一行数据的操作工况数据,并计算其到6个聚类中心的距离,并依次找到它对应聚类簇。然后,用传感器测量量减去该簇对应的传感器均值并除以其对应的标准差(z-score归一化)。如果某簇中某传感器测量量的标准差为0,则将对应的传感器数据归一化结果都设置为0,因为这表明该传感器对应的测量值为恒定,而恒定的测量值对估计寿命没有帮助

下面,使用辅助函数regimeNormalization归一化数据

使用之前的辅助函数helperPlotEnsemble可视化归一化后的数据,此时某些传感器的退化趋势可见

figure
helperPlotEnsemble(trainDataNormalized, timeVariable, dataVariables(1:4), nsample)

第四步:趋势分析

下面,从所有的传感器中选出趋势最明显的几个用来构造预测剩余寿命的健康因子。对每一种传感器,用线性退化模型估计它们,并根据模型的梯度排序出最重要的几种传感器

之后按照传感器模型的梯度绝对值排序,并选出最具有趋势的8种传感器

借助辅助函数helperPlotEnsemble可视化所选传感器的测量值

可以看到,有些传感器呈现正梯度趋势,有些呈现负梯度趋势

第五步:构造健康因子

本节聚焦如何将传感器测量值融合成一个单一的健康因子变量,然后基于该健康因子变量训练相似性模型

假设所有运行至失效的数据始于健康状态。然后将健康状态下的健康因子设定为1,将失效时的健康因子设定为0。同时健康因子随时间线性地从1退化到0。改线性退化将用来融合传感器值,更多精巧的传感器融合技术可以参考文献19202122

可视化健康因子

figure
helperPlotEnsemble(trainDataNormalized, timeVariable, "health_condition", nsample)

可以看出,所有的传感器以不同的退化速度从健康因子为1退化到0

现在使用选出来的最具有趋势性的传感器值作为自变量,拟合得到健康因子的线性回归模型,方程如下:


HealthCondition ∼ 1 + Sensor2 + Sensor3 + Sensor4 + Sensor7 + Sensor11 + Sensor12 + Sensor15 + Sensor17

之后通过将传感器值乘上对应的权重构造出单一的健康因子

使用到的辅助函数degradationSensorFusion如下:

之后可视化融合得到的训练数据健康因子

多传感器的数据被融合成了单一的健康因子变量。同时健康因子量被移动平均滤波器平滑化处理。可参考辅助函数dagradationSensorFusion查看更多细节

第六步:对验证数据采取同样操作

在验证数据集上重复根据工况归一化和传感器融合的过程

可视化验证数据的健康因子

figure
helperPlotEnsemble(validationDataFused, [], 1, nsample)
xlabel('Time')
ylabel('Health Indicator')
title('Validation Data')

第七步:构建相似性模型

现在,可以使用训练数据构建基于残差的相似性模型。在此设定中,模型尝试使用二阶多项式拟合每个融合数据

i个数据和第j个数据的距离通过1-范数残差定义为:
d(i, j) = ||yjj, i||1
其中yj为第j台机器的健康因子,j, i为使用第i台机器建立的二阶多项式模型在第j台机器上的健康因子估计值

相似性得分通过以下公式计算:
score(i, j) = e − d(i, j)2
给定验证集中的一条数据,模型将寻找到训练集中最近的50条训练数据集结果。之后基于这50条数据集的结果做出概率分布,并使用分布的均值作为剩余寿命的估计值

第八步:模型评估

为评估相似性模型,使用50%、70%、90%数据量的验证数据来预测剩余寿命

先使用该数据的前50%部分

然后可视化前50%部分的验证数据及其最近的训练数据

画出剩余寿命的真值、估计值的对比并给出估计值的概率分布

辅助函数helperPlotRULDistribution如下:

可以看出,当机器处于中等健康状态时,剩余寿命的估计值和真值之间还存在一定较大误差。本案例中,最相似的10条曲线在一开始表现得很近,但在它们接近失效时,曲线分叉成了两股,也就造成了剩余寿命估计值的分布粗略的有两种模式

之后使用第二个断点,即使用验证数据的前70%数据

当数据量增加时,剩余寿命的预测也就更准确

最后使用90%的断点,即验证数据的前90%验证模型

当机器临近于失效时,剩余寿命的预测结果又比70%时更准确

现在对整个验证集数据重复相同评估过程,并对每种断点情况计算剩余寿命的估计值和真实值的差

可视化对每种断点,它所对应的预测误差概率分布柱状图

之后使用25-75为主部分的箱形图可视化预测误差,并给出均值及离群点分布

计算并比较预测误差的均值和标准差

对每种断点画出其估计误差和标准差范围

可以看出,当足够的数据可知时,预测的误差均值收敛于0附近

参考:https://ww2.mathworks.cn/help/predmaint/ug/similarity-based-remaining-useful-life-estimation.html