Skip to content

NPgreatest/Predictive_Maintenance

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Predictive_Maintaince

An unbalanced dataset binary classification task

1.任务背景:预测性维护

数据集是若干个设备的时序数据,每个设备都有一定概率出现故障,且出现故障的设备的比例很少(1:10)

任务是根据设备的时序数据预测设备是否出现故障,是一个不平衡数据集的二分类问题(Positive:Negative = 1000:1)

由于存在多个设备,也存在时间序列,所以我为该任务设两种解决方案:

  1. 训练一个机器学习模型,给定任意一个机器、任意时间的状态,预测机器是否故障 评价:实现简单,但是不符合逻辑定义。

由于机器的损坏可能是逐步发生的,所以时间序列信息可能有用

可能有些机器状态一直良好,不存在损坏的可能性,所以机器型号信息可能有用

  1. 训练一个RNN模型,用来提取时间序列信息,构造双向LSTM和GRU模型,输入前N天的机器状态,预测第N天机器是否故障

评价:该方案可以充分利用时序信息和设备信息。每个输入的batch可以为同一设备的信息

2.模型架构

  • 简单机器学习模型:Logistic、随机森林、AdaBoost、SVM(无法收敛) 由于Positive数据量太少,首先利用SMOTE进行过采样,再忽略时间和型号进行训练

  • 深度学习模型:

首先针对每个设备绘制折线图,查看每个设备失败的趋势 。可以看出,存在故障的机器的数据,在机器发生故障后基本就结束采样了。

device

​ 分别查看有损坏情况的设备和没损坏情况的设备的数据量情况,发现平均数集中在100左右。

  • 模型构想 首先我设想构建N个cell,每一个cell存储一种设备、在时间序列上的点的9个特征信息 由于失败的数量过少,所以在构造数据时默认认为这N个时间戳下设备都没有损坏。
  • 输入数据 经过观察发现有损坏的设备的数据特征如下:大多数数据在损坏后就没什么数据了,所以我想只用损坏那天前的所有数据来训练。 因为是二分类问题,所以输入的数据分为两类: 第一类是在第N天设备损坏的情况,最后的输出为1;;第二类是在第N天设备没有损坏的情况,最后输出为0
  • 输入不平衡的问题 由于存在损坏的设备:没有存在损坏的设备的比为1:10 (107:1064) 所以需要一个方法来平衡数据集,我的几个思路
  1. 数据增强:对于每个损坏设备构造多个样本 对于第一类设备,可以取损坏当天和前后3天的数据都作为最终输出。且为了过采样,可以从前M天中抽取N天作为样本,这样对于每个设备就能构造出很
  2. SMOTE 对于从来没有损坏的设备,如果强行构造损坏的数据点感觉不符合事实 对于有损坏的设备,在状态正常的时间线上构造损坏的数据点感觉也不符合事实
  • 采样函数

构建一个采样函数,给定一个值n,从0到n随机取m个不同的数字,但是要求离n越近的数字概率越高。比如

n=20 m=5
[ 3 10 18 19 20]
[ 1 13 17 19 20]

权重函数利用$w(x)=e^{\text{scale}\times x}$ 不过当x很大时,采样效果仍不理想,故引入强制选择参数,强制选取故障/查看状态前N天的状态

sample

  • 抽样方法

先从start_idx到end_idx之间选取一个最后的索引,再从0到最后的索引之间按照时间顺序选取10个样本点(必须包括最后一个索引),append到samples中。 其中进行的抽样逻辑如下: 如果一共样本数量小于10,那么在抽取所有样本后随机抽取,填充到10个(按照时间顺序),并且抽取$min(C^n_{10},5)$次 如果样本数量大于10,那么抽取$min(C^{10}_N /8 , 100)$次

这样发现P和F的比例基本为1

3.模型训练

  1. 归一化:由于是时间序列数据,采用Layer Normalization。
  2. 利用CUDA进行GPU并行加速
  3. Optimizer:利用Adam优化器

4.结果

这几个机器学习模型的效果如下:

Model Precision Recall Specificity F1-score Roc_Auc
Logistic Regression 0.003571 0.50 0.910304 0.007092 0.742415
Random Forest 0.080000 0.25 0.998151 0.121212 0.860282
AdaBoost 0.008547 0.75 0.944060 0.016901 0.919728

在分别利用LSTM,BiLSTM,GRU,BiGRU,Transformer进行训练后,结果如下

Model Accuracy Precision Recall Specificity F1 Score ROC AUC
LSTM 0.990791 0.985729 0.996907 0.984018 0.991287 0.999734
BiLSTM 0.990249 0.987705 0.993814 0.986301 0.990750 0.999138
GRU 0.983207 0.976650 0.991753 0.973744 0.984143 0.998681
BiGRU 0.986999 0.989648 0.985567 0.988584 0.987603 0.997828
Transformer 0.505417 0.516184 0.937113 0.027397 0.665690 0.543827

5.结论

对于前几个机器学习模型(Logistic、随机森林、Adaboost),由于没有利用时间序列的信息和设备型号的信息导致模型效果不佳。我在利用SVM训练时,尝试了很多的核函数都没法短时间内收敛。

对于构造的深度学习模型,可以看到最终F1-score很高,在自己构造的数据集下表现很好。目前来看该模型能做到的任务是:

给定任意前N-forced天的数据内容,以及range(N-forced,N)天的数据内容,可以通过模型较为精准的预测第N天机器是否会有故障。

About

An imbalanced dataset, binary classification task

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published