2022年第二届中国高校大数据挑战赛-赛题A

1.摘要

作为制造业的核心,机械设备在工业生产的各个环节都扮演着不可或缺的重要角色。但是,在机械设备运转过程中会产生不可避免的磨损、老化等问题,随着损耗的增加,会导致各种故障的发生,影响生产质量和效率。

对于工业机械设备故障预测时,通过选取特征属性并建立模型、训练模型和预测模型。本文研究了某企业机械设备的使用情况及故障发生情况数据,探究设备故障预测及故障主要相关因素。使用 CatBoost 模型、AdaBoost 模型对故障数据进行训练并预测。

在任务1中,题目要求对数据进行预处理,选取合适的指标用于机械设备故障的预测,我们首先对数据进行预览,了解数据的基本信息,划分出正常数据和故障数据并进行简单的对比。之后对数据进行清洗,分别作出转速-扭矩、时间-转速、时间-扭矩散点图,发现出现故障数据是三种因素共同导致的结果。通过统计数据得出正常数据与故障数据的数量,由于数量相差较大,我们采用SMOTE方法进行处理。通过SMOTE数据均衡处理,建立皮尔森相关系数热谱图,发现“是否发生故障”与其他标签相关性并不强。由此我们又利用基于树的特征排序,最终的特征选取为‘扭矩(Nm)’, ‘转速(rpm)’, ‘使用时长(min)’,‘室温(K)’和室温(K).1’。

在任务2中,题目要求设计模型判别机械设备是否发生故障,有故障的条件下数据情况比较复杂,所以更好的方法是进行预测模型建模,使用 CatBoost 模型,通过网络搜索进行调节,然后训练模型,最后进行预测。并且对于不平衡的数据,使用分层K折交叉验证,输出K 折交叉验证分数及平均交叉验证分数并进行预测,得出模型有很好的性能和泛化能力。

在任务3中,题目要求设计模型判别机械设备发生故障的具体类别,使用AdaBoost 模型,首先将导入的数据进行基本清理,然后对剩下的数据进行数据和标签的切分,代入模型选出最佳参数。带入验证集,对验证集数据各标签进行分数比较,对某些预测值的准确度较低,原因有在于过少的训练数据才导致此类标签的准确度较低。但总体结果较好。对于预测结果不理想的数据,可能是多番方面的因素产生的,不确定性因素很强。

在任务5中,题目要求探究每类故障的主要成因,我们可视化五种故障类别,通过五种故障类别(TWF/HDF/PWF/OSE/RNF)分别与‘扭矩(Nm)’, ‘转速(rpm)’, ‘使用时长(min)’,‘室温(K)’和室温(K).1’绘制折线图,可以得出每个特征属性在一定区域内都会造成故障的产生。

2.数据预览

对数据进行预览,可以得出数据中存在10个属性。分别是机器编号,统一规范代码,工厂温度,机器温度,转速,扭矩,使用时长,是否发生故障和具体故障类别。其中机器编号,转速,使用时长,是否发生故障为int64位;工厂温度,机器温度,扭矩为float64位;一规范代码,机器质量等级,具体故障类别为object类型。

数据信息

列名属性取值范围均值std
机器编号int641-90004462.8758892598.707420
统一规范代码objectNANNANNAN
机器质量等级objectNANNANNAN
工厂温度(k)float64295.7-304.5300.2750781.896469
机器温度(k)float64306.2-313.8310.1850781.418364
转速(rpm)int641168-28861539.195889179.640048
扭矩(Nm)float643.8-76.639.98464410.011911
使用时长(min)int640-253107.88144463.629889
是否发生故障int640-10.0336670.18038
具体故障类别objectNANNANNAN

对整体数据有了大概了解之后,通过划分正常数据和故障数据制作分布图,从可视化角度进一步了解故障数据和正常数据之间的差别。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由可视化的结果可以看到故障数据和正常数据的分布。故障数据数据厂房的温度要高于正常数据的厂房温度。机器的运行温度两者没有较大的差距,在转速中,故障数据的转速分布在小于正常转速和大于正常转速的两边,故障数据的扭矩也是分布于正常转速的两边,使用时间上发生故障的时间段都存在,且在200分钟左右有较大的聚集。

由于没有选取特征值,我们初步判断,厂房温度较高,低转速,高转速,低扭矩,扭矩和使用时间都会对是否发生故障产生影响。

import  numpy as np
import pandas as pd
import updown_hanshu
import matplotlib.pyplot as plt
import seaborn as sns

#显示所有列
pd.set_option('display.max_columns',None)
#显示所有行
pd.set_option('display.max_rows',None)
#设置value的显示长度
pd.set_option('max_colwidth',100)
#设置1000列时才换行
pd.set_option('display.width',1000)

data=pd.read_excel("train data.xlsx")
#print(data.info())
print(data['是否发生故障'].value_counts())
#print(data.describe())
#查看总体数据分布
coulmes=['室温(K)','室温(K).1','转速(rpm)','扭矩(Nm)','使用时长(min)']
for i in coulmes:
    fig = plt.figure(figsize=(10, 5))
    sns.boxplot(data['i'], orient="v", width=0.5)
    plt.show()
#转速
#updown_hanshu.updown(1613,1423)
#扭矩
#updown_hanshu.updown(46.8,33.1)
#转速正常波动范围1138.0~1898.0
#扭矩正常波动范围12.550000000000008~67.35
#评判高转速必要条件
zhuansu=data.loc[data['转速(rpm)']>1898,:]
print(zhuansu['是否发生故障'].value_counts())
#评判不正常扭矩为必要条件
niuju1=data.loc[data['扭矩(Nm)']>67.35,:]
niuju2=data.loc[data['扭矩(Nm)']<12.55,:]
list_name=[niuju1,niuju2]
all_niuju=pd.concat(list_name)
print(all_niuju['是否发生故障'].value_counts())
#查看两种数据分布
#查看故障数据分布
guzhang=data.loc[data['是否发生故障']==1,:]
#print(guzhang.describe())
#查看正常数据分布
zhengchang=data.loc[data['是否发生故障']==0,:]
#print(guzhang.info())
#print(zhengchang.describe())
#数据图示
coulmes=['室温(K)','室温(K).1','转速(rpm)','扭矩(Nm)','使用时长(min)']
for i in coulmes:
    plt.figure(figsize=(8, 4))
    plt.title(i)
    sns.distplot(zhengchang[i])
    sns.distplot(guzhang[i])
    plt.legend(["正常数据", "故障数据"])
    plt.show()
#查看正常数据的数据分布情况
coulmes=['室温(K)','室温(K).1','转速(rpm)','扭矩(Nm)','使用时长(min)']
for i in coulmes:
    fig = plt.figure(figsize=(10, 5))
    sns.boxplot(zhengchang[i], orient="v", width=0.5)
    plt.show()
print(zhengchang['具体故障类别'].value_counts())

3.数据清洗

由上一部分得到了数据的基本信息。为了进一步纯化数据,我们建立转速与扭矩的散点图。进一步呈现故障数据与正常数据的差距。
在这里插入图片描述
由图可以看到,故障数据与正常数据在转速与扭矩下的分布范围。在只考虑故障与扭矩的影响因素下。低转速且高扭矩与高转速且低扭矩成为主要故障数据的聚集较多,但在中间范围内故障数据分布较少。但在转速-扭矩分布图中,由于引发故障的原因还存在时间因素。所以导致了故障数据在正常数据的一些地方存在。接下来我们考虑是否去除这一部分数据。考虑时间在扭矩和转速之间的影响情况。
在这里插入图片描述
可以看到在使用时间和转速的分布图下。随着使用时间的增加,故障数据约在175分钟以下数据聚集情况没有明显的变化。但在200分钟左右,故障数据有明显的集中情况。可见时间与转速没有必然的线性关系。
在这里插入图片描述
在时间-扭矩分布图中,在使用时间的增加下。故障数据没有体现出主要的线性变化。可以看到同在200分钟左右故障数据有一个较大聚集增加的变化。在200分钟左右以下,故障数据主要分布在了低扭矩和高扭矩的情况下。

依据以上结论时间并不是造成以上部分分布的主要原因。是三种因素共同导致的结果。我们选择不去除这部分数据。

由于故障数据在扭矩与转速的影响情况下还存在时间的因素,并且故障数据数据量较少。我们主要对正常数据进行清理。
在这里插入图片描述
我们可以看到,数据主要集中于1400转左右到1600转左右。我们去除极大值以后的数据作为正常数据。

mport numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from collections import Counter
from imblearn.over_sampling import SMOTE

data=pd.read_excel('train data.xlsx')
guzhang=data.loc[data['是否发生故障']==1,:]
zhengchang=data.loc[data['是否发生故障']==0,:]
#由上一步可知故障数据主要特征为(相对于正常数据)
#为高扭矩低转速,依据此可以清洗正常数据
#散点图
plt.scatter(zhengchang['转速(rpm)'],zhengchang['扭矩(Nm)'],alpha=0.5)
plt.scatter(guzhang['转速(rpm)'],guzhang['扭矩(Nm)'],alpha=0.5)
plt.legend(["正常数据", "故障数据"])
plt.show()
#故障扭矩范围
fig = plt.figure(figsize=(10, 5))
sns.boxplot(guzhang['扭矩(Nm)'], orient="v", width=0.5)
plt.show()
#故障转速范围
fig = plt.figure(figsize=(10, 5))
sns.boxplot(guzhang['转速(rpm)'], orient="v", width=0.5)
plt.show()
#查看时间对故障的影响转速
plt.scatter(zhengchang['转速(rpm)'],zhengchang['使用时长(min)'],alpha=0.5)
plt.scatter(guzhang['转速(rpm)'],guzhang['使用时长(min)'],alpha=0.5)
plt.legend(["正常数据", "故障数据"])
plt.show()
#查看时间对故障的影响扭矩
plt.scatter(zhengchang['扭矩(Nm)'],zhengchang['使用时长(min)'],alpha=0.5)
plt.scatter(guzhang['扭矩(Nm)'],guzhang['使用时长(min)'],alpha=0.5)
plt.legend(["正常数据", "故障数据"])
plt.show()

3.1是否发生故障

删除无用列‘机器编号’,‘统一规范代码’,由于故障类别是基于是否发生故障之后进行分类。对是否发生故障影响不大,选择删除。

我们对数据集中的“是否会发生故障”进行统计。得到故障数据为303条数据,正常数据为8353条数据。由于标签数量相差较大,我们选用SMOTE方法,对数据进行均衡处理避免模型预测偏向于单一标签。最终处理完的数据为故障数据和正常数据都为8353 条。

处理前正常数据(条)处理后正常数据(条)
3038353
处理前故障数据(条)处理后故障数据(条)
83538353

3.2故障具体类别

删除无用列‘机器编号’,‘统一规范代码’。通过对‘具体故障类别’这一列进行数据值统计查看。得到的结果为normal为8699个,HDF为95个,OSF为85个,PWF为74个,TWF为41个,RNF为6个。

具体故障值统计表

个数个数
Normal8699HDF95
OSF85PWF74
TWF41RNF6

我们单独选出故障数据进行针对故障数据的数据处理。由于数据集以选出全部故障数据,故‘是否发生故障’列为单一值‘1’,并删除了‘是否发生故障’列,之后使用SMOTE算法对每个故障数据进行扩充,避免模型趋向于单一故障类别,通过数据均衡化处理使模型的泛华能力进一步增强。最终提高模型的准确效果。

处理前个数处理后个数
PWF8595
OSF4195
HDF9595
TWF7495
RNF695

最终使每类标签值都达到95个。

#SMOTE数据均衡处理
chuli_trainX=new_train.iloc[:,0:6]
chuli_trainY=new_train.iloc[:,6]
print('处理前数据后的比例:')
print(Counter(chuli_trainY))
smo=SMOTE(random_state=42)
chuli_trainX_smo,chuli_trainY_smo=smo.fit_resample(chuli_trainX,chuli_trainY)
train_alarm=chuli_trainX_smo.join(chuli_trainY_smo,how='outer')
train_alarm.to_csv('二分类数据集.csv')
print('处理完数据后的比例:')
print(Counter(chuli_trainY_smo))

4.特征选择

4.1是否发生故障

通过SMOTE数据均衡处理,我们建立皮尔森相关系数热谱图。

在这里插入图片描述
我们由图可以看到‘是否发生故障’与其他特征标签的相关性并不强。相关性较强的为‘机器质量等级’和‘扭矩(Nm)’。之后建立基于树的特征排序对特征根据相关性进行排序。并选取挂点较大以上的特征,作为最终的是否发生故障的特征。
在这里插入图片描述
我们选取80到469拐点以上的特征作为‘是否发生故障’的特征。最终的特征选取为‘室温(K)’,‘室温(K).1’,‘转速(rpm)’,‘扭矩(Nm)’和‘使用时长(min)’。

import numpy as np
import pandas as pd
import  matplotlib.pyplot as plt
import seaborn as sns
from lightgbm import plot_importance
from lightgbm import LGBMClassifier

data=pd.read_csv('二分类数据集.csv')
data=data.drop(['Unnamed: 0',],axis=1)
#皮尔森相关系数
corr1=data.corr()
fig = plt.figure(figsize = (20,15))
sns.heatmap(corr1,cmap="RdBu_r")
plt.show()
#基于树模型的特征排序
data_1=data.iloc[:,0:6]
label=data.iloc[:,6]
model = LGBMClassifier()
model.fit(data_1,label)
plot_importance(model, max_num_features=29, figsize=(10, 5), importance_type='split')
plt.show()
feature_importance = pd.DataFrame({
                'feature': model.booster_.feature_name(),
                'gain': model.booster_.feature_importance('gain'),
                'split': model.booster_.feature_importance('split')}).sort_values('gain', ascending=False)

4.2故障具体类别

通过SMOTE数据均衡处理,我们建立皮尔森相关系数热谱图。
在这里插入图片描述
我们由图可以看到‘故障具体类别’与其他特征标签的相关性并不强。相关性较强的为‘室温(k)’。之后建立基于树的特征排序对特征根据相关性进行排序。并选取挂点较大以上的特征,作为最终的故障具体类别的特征。
在这里插入图片描述
我们选取287到1216拐点以上的特征作为‘是否发生故障’的特征。最终的特征选取为‘扭矩(Nm)’, ‘转速(rpm)’, ‘使用时长(min)’,‘室温(K)’和室温(K).1’。

import numpy as np
import pandas as pd
import  matplotlib.pyplot as plt
import seaborn as sns
from lightgbm import plot_importance
from lightgbm import LGBMClassifier

data=pd.read_csv('故障数据集.csv')
data=data.drop(['Unnamed: 0',],axis=1)
#皮尔森相关系数
corr1=data.corr()
fig = plt.figure(figsize = (20,15))
sns.heatmap(corr1,cmap="RdBu_r")
plt.show()
#基于树模型的特征排序
data_1=data.iloc[:,0:6]
label=data.iloc[:,6]
model = LGBMClassifier()
model.fit(data_1,label)
plot_importance(model, max_num_features=29, figsize=(10, 5), importance_type='split')
plt.show()
feature_importance = pd.DataFrame({
                'feature': model.booster_.feature_name(),
                'gain': model.booster_.feature_importance('gain'),
                'split': model.booster_.feature_importance('split')}).sort_values('gain', ascending=False)

5.模型建立

5.1设备是否发生故障

考虑到有故障的条件下数据情况比较复杂,所以更好的方法是进行预测模型建模, 从收集到的数据中进行筛选,从对数据的理解角度寻找必要的因素,去除不相关因素,从统计角度寻找对结果拟合的最好的因素,并进行必要的数据变形、拓展。

读取处理完成的最新数据之后先要做一个判断,将有故障和没有故障的数据分为两类,通过总体数据中的有故障和没有故障的比例来划分训练集和测试集,从而达到比例一致的效果。相当于是先通过训练整体的模型去做一个多分类,这样预测出来的分数不会太高,但对于是从总体数据去进行一个多分类的情况下这也是正常的。

根据特征选取,删除训练集和测试集不必要的‘Unnamed:0’列和只作为一个比例依据的“机器质量等级”两列数据,然后对训练集和验证集进行数据和标签的划分并输出。

使用 CatBoost 模型,通过网络搜索(一种常见的参数调优方法,其根本目的是通过遍历不同的超参数组合,达到模型最优化的效果)进行参数调节,再训练模型从而输出预测模型的最佳分数为 0.982298614674192 和 最 佳 参 数 为 {‘depth’: 10, ‘learning_rate’: 0.15, ‘task_type’: ‘GPU’}。对总体数据进行切分,用最优参数拟合数据再次建立模型、训练模型、预测模型。

分层 K 折交叉验证:对于不平衡数据非常有效:分层交叉验证中的每个折叠都会以,与整个数据集中相同的比率表示所有类别的数据。最后,通过分层 K 折交叉验证(交叉验证折数 n_splits=5)进行模型的评估,输出 K 折交叉验证分数及平均交叉验证分数: 0.9902387640449437,说明模型的预测具有很好的性能和泛化能力。
在这里插入图片描述

import numpy as np
import pandas as pd
import catboost as cb
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
from sklearn.metrics import classification_report
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import  GridSearchCV
from sklearn.model_selection import cross_val_score,StratifiedKFold
from sklearn.metrics import confusion_matrix
from sklearn.metrics import roc_curve,auc

data=pd.read_csv('二分类数据集.csv')
data=data.drop(['Unnamed: 0','机器质量等级'],axis=1)
train,verify=train_test_split(data,train_size=0.7,stratify=data['是否发生故障'])
train_data=train.iloc[:,0:5]
train_label=train.iloc[:,5]
verify_data=verify.iloc[:,0:5]
verify_label=verify.iloc[:,5]
#CatBoost模型(CatBoost原本的参数配置)
#调参,用网格搜索调出最优参数
params = {'depth': [4, 7,10], 'learning_rate': [ 0.1,0.15,0.3], 'task_type':['GPU'] }
cb=cb.CatBoostClassifier()
cb_model=GridSearchCV(cb,param_grid=params,scoring="accuracy",cv=3)
cb_model.fit(train_data,train_label)
#查看最佳分数
print(cb_model.best_score_)
#查看最佳参数
print(cb_model.best_params_)
#0.982298614674192
#{'depth': 10, 'learning_rate': 0.15, 'task_type': 'GPU'}
#切分整体数据
train1_data=data.iloc[:,0:5]
train1_label=data.iloc[:,5]
#用最优参数拟合数据
cb=cb.CatBoostClassifier(eval_metric='AUC',depth=10, learning_rate= 0.15, task_type='GPU')
model=cb.fit(train_data,train_label)
model.save_model('二分类.model')
predict_label1=cb.predict(verify_data)
#分层K折交叉验证
stratifiedkf=StratifiedKFold(n_splits=5)
score=cross_val_score(cb,train1_data,train1_label,cv=stratifiedkf)
print("Cross Validation Scores are {}".format(score))
print("Average Cross Validation score:{}".format((score.mean())) )
#Cross Validation Scores are [0.94943148 0.8784795  0.83448069 0.93175696 0.97575576]
#Average Cross Validation score:0.9139808780916997
#Roc曲线
clf=cb.CatBoostClassifier()
clf.load_model('二分类.model')
predict_label1=clf.predict(verify_data)
fpr,tpr,threshould=roc_curve(verify_label,predict_label1,pos_label=1)
plt.figure()
roc_auc=auc(fpr,tpr)
plt.plot(fpr,tpr,color='darkorange',lw=2,label='ROC curve(area=%0.2f)'%roc_auc,)
plt.plot([0,1],[0,1],color='navy',lw=2,linestyle='--')
plt.xlim([0,1.0])
plt.ylim([0,1.05])
plt.xlabel('假阳性率')
plt.ylabel('真阳性率')
plt.legend(loc='lower right')
plt.show()

5.2具体故障判断

AdaBoost 模型是基于决策树模型的优化模型。AdaBoost 模型分类精度高,构造简单且不容易发生过拟合的情况。

AdaBoost 在使用过程中,先将导入的数据进行基本清理。删除了没有作用的 Unnamed:0 列。对剩下的数据进行数据和标签的切分,代入模型选出最佳参数。
在这里插入图片描述
由图可知,AdaBoost 模型在 n_estimators=6的情况下,AdaBoost 模型的分数达到最高。在 n_estimators=6的情况下,带入验证集,对验证集数据各标签进行分数比较。 通过 r2_score 分数得到模型拟合度 0.8591549295774648,整体准确度为 0.92。

AdaBoost 模型各标签在验证集运行值

标签precisionrecallF1-score标签precisionrecallF1-score
PWF111TWF0.970.970.97
OSF0.930.970.95RNF0.9610.98
HDF0.970.900.93

对某些预测值的准确度较低,原因有在于过少的训练数据才导致此类标签的准确度较低。但总体结果较好。个别标签的模型准确度预测达到了1的准确度。对于预测结果不理想的数据,还有可能相关特征下标签的数据没有很强的代表性,用通俗的话说,这个故障的产生是更多的因素产生的,不确定性因素更强。

AdaBoost 模型测评值

Attributeprecisionrecallf1-scoresupport
accuracyNANNAN0.97143
macro avg0.970.970.97143
weighted avg0.970.970.97143

由图表可以看出宏平均(macro avg)和加权宏(weighted avg)的四个运行参数。对所有类别平均精确度为 0.97。加权平均加入样本分配比例,准确度达到 0.97。此数据中存在多类不同类别标签。且各类标签个数分布不均,加权宏成为主要判断标准。且在 K 折交叉验证中,K 折交叉验证的平均分达到: 0.9005879692446858。

import pandas as pd
import  numpy as np
import catboost as cb
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score,StratifiedKFold
import seaborn as sns
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import r2_score
from sklearn.metrics import classification_report
from sklearn.model_selection import  GridSearchCV

#读取train.csv的数据
train_1=pd.read_csv('故障数据集.csv')
train_alarm=train_1.drop(['Unnamed: 0'],axis=1)
#数值转换
train_alarm.replace(['PWF','OSF','HDF','TWF','RNF'],['1','2','3','4','5'],inplace=True)
#train_alarm['具体故障类别']=train_alarm['具体故障类别'].astype(np.int)
train,verify=train_test_split(train_alarm,train_size=0.7)
train_data=train.iloc[:,1:6]
train_label=train.iloc[:,6]
verify_data=verify.iloc[:,1:6]
verify_label=verify.iloc[:,6]
#Sklearn Adaboost模型(分类)
test_score=[]
clf1=DecisionTreeClassifier()
for i in range(20):
    bdt=AdaBoostClassifier(clf1,n_estimators=i+1)
    bdt=bdt.fit(train_data,train_label)
    score=bdt.score(verify_data,verify_label)
    test_score.append(score)
plt.plot(range(1,21),test_score,label="n_estimators")
plt.xticks(range(1,21))
plt.legend()
plt.show()
#n=5
#建立模型
clf1=DecisionTreeClassifier()
bdt=AdaBoostClassifier(clf1,n_estimators=6)
bdt=bdt.fit(train_data,train_label)
predict_label=bdt.predict(verify_data)
print("Sklearn Adaboost模型的拟合度")
print(r2_score(verify_label,predict_label))
print(classification_report(verify_label, predict_label))

#分层K折交叉验证
stratifiedkf=StratifiedKFold(n_splits=5)
score=cross_val_score(bdt,train_data,train_label,cv=stratifiedkf)
print("Cross Validation Scores are {}".format(score))
print("Average Cross Validation score:{}".format((score.mean())) )
#网格调优
params = {'depth': [4, 7,10], 'learning_rate': [ 0.1,0.15,0.3], 'task_type':['GPU'] }
cb=cb.CatBoostClassifier()
cb_model=GridSearchCV(cb,param_grid=params,scoring="accuracy",cv=3)
cb_model.fit(train_data,train_label)
#查看最佳分数
print(cb_model.best_score_)
#查看最佳参数
print(cb_model.best_params_)
#0.9426972426972426
#{'depth': 4, 'learning_rate': 0.3, 'task_type': 'GPU'}

6.故障主要成因分析

我们可视化五种故障类别。由室温的对比图可以看到,室温偏高会导致故障问题的产生其中对HDF和RNF故障的影响较大。
在这里插入图片描述
由运行温读的对比图可以看到,温度偏高会导致故障问题的产生,其中对HDF和RNF故障的影响较大。
在这里插入图片描述
通过转速对比图可以看到,转速在1400rpm左右时会导致故障问题的产生,其中对HDF和OSF故障的影响较大。
在这里插入图片描述
通过使用时长对比图可以看出,使用时长会导致故障问题的产生,其中对TWF和OSF故障的影响较大。
在这里插入图片描述
通过扭矩对比图可以看出,扭矩在40-60Nm时会导致故障问题的产生,其中对HDF、OSF、RNF和TWF故障的影响都比较大。

通过五种故障分别与‘扭矩(Nm)’, ‘转速(rpm)’, ‘使用时长(min)’,‘室温(K)’和室温(K).1进行对比可以得出每个特征属性在一定区域内都会造成故障的产生。

更多推荐