2022年高校大数据挑战赛A题工业机械设备故障预测求解全过程论文及程序

2022年高校大数据挑战赛

A题 工业机械设备故障预测

原题再现:

  制造业是国民经济的主体,近十年来,嫦娥探月、祝融探火、北斗组网,一大批重大标志性创新成果引领中国制造业不断攀上新高度。作为制造业的核心,机械设备在工业生产的各个环节都扮演着不可或缺的重要角色。但是,在机械设备运转过程中会产生不可避免的磨损、老化等问题,随着损耗的增加,会导致各种故障的发生,影响生产质量和效率。
  实际生产中,若能根据机械设备的使用情况,提前预测潜在的故障风险,精准地进行检修维护,维持机械设备稳定运转,不但能够确保整体工业环境运行具备稳定性,也能切实帮助企业提高经济效益。
  某企业机械设备的使用情况及故障发生情况数据见“train data.xlsx”,用于设备故障预测及故障主要相关因素的探究。数据包含 9000 行,每一行数据记录了机械设备对应的运转及故障发生情况记录。因机械设备在使用环境以及工作强度上存在较大差异,其所需的维护频率和检修问题也通常有所不同。
  数据提供了实际生产中常见的机械设备使用环境和工作强度等指标,包含不同设备所处厂房的室温(单位为开尔文K),其工作时的机器温度(单位为开尔文K)、转速(单位为每分钟的旋转次数rpm)、扭矩(单位为牛米Nm)及机器运转时长(单位为分钟min)。除此之外,还提供了机械设备的统一规范代码、质量等级及在该企业中的机器编号,其中质量等级分为高、中、低(H\M\L)三个等级。对于机械设备的故障情况,数据提供了两列数据描述——“是否发生故障” 和“具体故障类别”。其中“是否发生故障”取值为 0/1,0 代表设备正常运转,1 代表设备发生故障;“具体故障类别”包含 6 种情况,分别是NORMAL、TWF、HDF、PWF、OSF、RNF,其中,NORMAL代表设别正常运转(与是否发生故障”为 0相对应),其余代码代表的是发生故障的类别,包含 5 种,其中TWF代表磨损故障,HDF代表散热故障,PWF代表电力故障,OSF代表过载故障,RNF代表其他故障。
  基于赛题提供的数据,自主查阅资料,选择合适的方法完成如下任务:
  任务 1:观察数据“train data.xlsx”,自主进行数据预处理,选择合适的指标用于机械设备故障的预测并说明原因。
  任务 2:设计开发模型用于判别机械设备是否发生故障,自主选取评价方式和评价指标评估模型表现。
  任 务 3 : 设 计 开 发 模 型 用 于 判 别 机 械 设 备 发 生 故 障 的 具 体 类 别(TWF/HDF/PWF/OSF/RNF),自主选取评价方式和评价指标评估模型表现。
  任务 4:利用任务 2 和任务 3 开发的模型预测“forecast.xlsx”中是否发生故障以及故障类别。数据“forecast.xlsx”。与数据“train data.xlsx”格式类似,要求在“forecast.xlsx”第 8 列说明设备是否发生故障(0 或 1),在第 9 列标识出具体的故障类型(TWF/HDF/PWF/OSF/RNF)。
  任务 5:探究每类故障(TWF/HDF/PWF/OSF/RNF)的主要成因,找出与其相关的特征属性,进行量化分析,挖掘可能存在的模式/规则。
补充说明:
  1. 开发语言不限,推荐使用python 3.7 及以上版本或Java 8 进行开发。
  2.允许使用公开模型/开源代码,但需要在文档中注明出处。
  3.除论文报告外,还需提供完整的程序代码、运行说明(包括依赖包、版本号)、预测结果文件“forecast.xlsx”及其他必要的佐证材料,以压缩包的形式提交。注意:forecast.xlsx不要改名,便于评审专家检测。
  4.提交的支撑材料不得超过 20Mb

整体求解过程概述(摘要)

  在工业生产中,机械设备是否稳定工作密切决定着产品的生产效率和企业的经济效益,对其故障进行诊断与预测并及时进行维护更换是至关重要的问题。本文通过选取影响设备故障的指标,建立预测机器是否故障及其具体故障类型的模型,并实现对各影响因素的量化分析,挖掘五类故障的潜在的内部机理。
  针对任务一,首先以数据中唯一的统一规范代码为作为机器标识。将机器三个质量等级、五种故障类型重新编码数字化。剔除发生故障的机器中存在的两组 Normal 类型数据是异常值。随后对指标变量进行相关性分析,得到机器温度与室温相关系数为0.86,因此引入二者做差的新变量温差。再根据转速扭矩的电机学公式,得到功率指标。经过正态检验后对以上八个指标与是否发生故障进行单因素方差检验,得到全部方差分析结果 P 值均<0.1,说明统计结果存在较为显著的差异。因此,选取三个质量等级、温差、转速、扭矩、功率和使用时长八个指标用于后续机械设备故障的预测。
  针对任务二,首先建立朴素贝叶斯判别模型,但由于数据样本分布不均衡的特征,因此选取基于决策树学习器的 CatBoost、XGBoost 以及随机森林算法分别建立模型,通过混淆矩阵并考虑指标的稳定性和解释性,本文选择 F1 Score 值、AUC 值以及描述实际分类与预测分类相关系数的 MCC 值作为判别模型的评价指标,得到随机森林模型的分类效果最好,其 MCC 值为 0.96,使用该模型用于后续是否发生故障的预测。
  针对任务三,在前面任务基础上,继续使用上述四个分类模型,对 train.xlsx 数据集按照五种故障类型划分五次,每次以一种故障类型样本作为正例,所有其他类作为反例来训练四个模型。并仍然使用任务二的三个指标,评价发现随机森林模型最优,且四个模型对于 TWF 和 RNF 故障类型的判别 MCC 值均为 0 或十分接近 0,认为这两种故障类型使用模型的预测效果与随机预测的结果不相上下。
  针对任务四,使用任务三建立的模型,以 train.xlsx 为训练集,forecast.xlsx 为预测集,得到机器所属的 HDF、PWF、OSF 以及 Normal 类型。并由于 TWF 和 RNF 两种故障类型的特殊性,根据两种类型在 train.xlsx 中所占的比例,对预测集数据中的数据进行分析计算,估计预测集数据中存在 4 台或 5 台发生 TWF 的机器以及 0 个或 1个发生 RNF 的机器。
  针对任务五,本文首先通过箱型图对数据可视化,对于 5 种故障类型中个别指标离群的数据进行去除,并得到其分布情况。随后通过 Shapley 值分别计算对 5 种故障类型特征边际贡献最大的一个或几个特征,结合根据目标变量的分布情况计算出的基值,最终得出五种故障类型的成因及其存在的规则。
  最后,对模型的优缺点进行了评价,并提出了改进方法与推广,除了机械故障的预测维护方面,对医疗疾病诊断、电力网络故障预测等领域也提出了一定的参考。

模型假设:

  1. 除了题目所给的指标,其他指标对机器是否发生故障及故障类型没有影响。
  2. 不考虑同一台机器发生多种类型故障的情况。
  3. 数据预处理后 train data.xlsx 中每台机器是否发生故障与具体故障类别均正确无误。

问题分析:

  任务一的分析
  任务一首先要求对数据进行预处理,由于针对不同的统一规范代码机器的存在相同的编号,因此以统一规范代码为机器 id。由于机器三个质量等级是离散、无序的定类变量,因此对它们进行重新编码数字化。删除两组发生故障的机器中的 Normal 类型数据。随后对全部指标变量进行相关性分析,由于机器温度和室温具有较强的相关性,因此对机器温度和室温做差,引入新变量温差。再根据电机学公式,对转速和扭矩及常数相乘,得到功率指标。再对这些指标与是否发生故障进行单因素方差分析,选取通过显著性的指标进行后续预测。
  任务二的分析
  任务二要求建立模型判别机械设备是否发生故障,首先考虑通过朴素贝叶斯建立判别函数模型,由于数据样本量足够,因此考虑集成学习算法,提升基础学习算法的性能,选取了基于决策树学习器的 CatBoost、XGBoost 以及随机森林算法,分别建立模型,并通过混淆矩阵进一步得到模型的评价指标,考虑指标的解释性,本文选择对训练数据处理后得到的权衡精确率与召回率的 F1 Score 值、衡量二分类模型精度的AUC 值以及描述实际分类与预测分类之间的相关系数 MCC 值作为判别模型的评价指标,并对模型进一步分析。
  任务三的分析
  任务三要求建立模型判别机械设备发生故障的具体类别。首先在任务一、任务二的基础上,使用朴素贝叶斯、CatBoost、XGBoost 以及随机森林算法分类模型,对数据集按照五种故障类型划分五次,每次都以其中一种具体的故障类型样本作为正例,所有其他类的样例作为反例来训练四个模型。并仍然使用 F1 Score、AUC、MCC 三个指标对模型进行评价。
  任务四的分析
  任务四在任务二和任务三所建立的判别模型预测“forecast.xlsx”中的机器是否发生故障并标识出具体的故障类型。由于在任务二和任务三中已经得到基于决策树学习器的 CatBoost、XGBoost 以及随机森林算法训练好的模型,且通过比较检验认为随机森林模型最适用于样本不均衡的数据,因此选用随机森林模型,以 train.xlsx 为训练集,forecast.xlsx 为预测集对机器是否发生故障并标识出具体的故障类型进行预测,最终比较检验预测集中的预测结果。
  任务五的分析
  任务五要求分析五类故障的具体成因,首先通过计算 Shapley 值得到每个特征对5 种故障类型 TWF/HDF/PWF/OSF/RNF 的边际贡献,并筛选出对各类故障具有显著影响的特征属性。利用统计分析的方法对各类故障进行特征属性的量化分析,并挖掘每类故障中的可能存在的模式或者机制。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

部分程序如下:
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import f1_score, recall_score, roc_auc_score, 
accuracy_score, roc_curve, auc
import csv, os
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
listTrainData = [[] for i in range(8998)]
listTestData = [[] for i in range(1000)]
Y = []
rowTrain = csv.reader(open(os.path.join(os.path.dirname(__file__), 
"train_data.csv"), "r", encoding="UTF-8"))
n_row = 0
for r in rowTrain:if n_row != 0:for i in range(0, 8):listTrainData[n_row - 1].append(float(r[i]))Y.append(float(r[13]))n_row += 1
rowTrain = csv.reader(open(os.path.join(os.path.dirname(__file__), 
"forecast.csv"), "r", encoding="UTF-8"))
n_row = 0
for r in rowTrain:if n_row != 0:for i in range(0, 8):listTestData[n_row - 1].append(float(r[i]))n_row += 1
Xtrain, Xtest, Ytrain, Ytest = train_test_split(listTrainData, Y, 
test_size=0.3) # 数据划分
clf = DecisionTreeClassifier(random_state=0) # 决策树实例化
rfc = RandomForestClassifier(random_state=0) # 随机森林实例化
# 训练苏数据集
rfc = rfc.fit(Xtrain, Ytrain)
predicted = rfc.predict(listTrainData) # 测试样本预测
f1_score = f1_score(Y, predicted)
roc_socre = roc_auc_score(Y, predicted)
score_r = rfc.score(Xtest, Ytest)
forecast = rfc.predict(listTestData)
pdResult = pd.DataFrame(forecast)
pdResult.to_csv(os.path.join(os.path.dirname(__file__), 
"Output/Predict.csv"))
print(f1_score)
print(roc_socre)
print("randon forest:{}".format(score_r))
importances = rfc.feature_importances_
indices = np.argsort(importances)[::-1]
feat_labels = ["L", "M", "H", "机器温度-室温", "转速(rpm)", "扭矩(Nm)", 
"功率(kW)", "使用时长(min)"]
for f in range(np.array(Xtrain).shape[1]):print("%2d) %-*s %f" % (f + 1, 30, feat_labels[indices[f]],
importances[indices[f]]))
import xlrd
import numpy as np
import time
start = time.time()
workbook = xlrd.open_workbook(r'train_data.xlsx')
# 根据下标获取 sheet 名称
sheet_name = workbook.sheet_names()[0]
print(sheet_name)
sheetData = workbook.sheet_by_name(sheet_name)
cols = []
cols.append(np.array(sheetData.col_values(1))) # 第一列
cols.append(np.array(sheetData.col_values(2))) # 第一列
cols.append(np.array(sheetData.col_values(3))) # 第一列
cols.append(np.array(sheetData.col_values(4))) # 第一列
cols.append(np.array(sheetData.col_values(5))) # 第一列
cols.append(np.array(sheetData.col_values(6))) # 第一列
cols.append(np.array(sheetData.col_values(7))) # 第一列
cols.append(np.array(sheetData.col_values(8))) # 第一列
X = np.array(cols).T
print(X.shape)
y = np.array(sheetData.col_values(10)) # 9 是是否发生故障,10 是 HDF,11 是
OSF,12 是 PDF,13 是 RNF,14 是 TWF
print(y.shape)
# ================基于 XGBoost 原生接口的分类=============
from sklearn.datasets import load_iris
import xgboost as xgb
from xgboost import plot_importance
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score # 准确率
# 加载样本数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, 
test_size=0.2, random_state=1234565) # 数据集分割
# 算法参数
params = {'booster': 'gbtree','objective': 'multi:softmax','num_class': 3,'gamma': 0.1,'max_depth': 6,'lambda': 2,'subsample': 0.7,'colsample_bytree': 0.7,'min_child_weight': 3,'silent': 1,'eta': 0.1,'seed': 1000,'nthread': 4,
}
plst = list(params.items())
dtrain = xgb.DMatrix(X_train, y_train) # 生成数据集格式
num_rounds = 500
model = xgb.train(plst, dtrain, num_rounds) # xgboost 模型训练
# 对测试集进行预测
dtest = xgb.DMatrix(X_test)
y_pred = model.predict(dtest)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("accuarcy: %.2f%%" % (accuracy * 100.0))
# 显示重要特征
plot_importance(model)
plt.show()
from sklearn import metrics
print('AUC: %.4f' % metrics.roc_auc_score(y_test, y_pred))
print('ACC: %.4f' % metrics.accuracy_score(y_test, y_pred))
print('Recall: %.4f' % metrics.recall_score(y_test, y_pred))
print('F1-score: %.4f' % metrics.f1_score(y_test, y_pred))
print('Precesion: %.4f' % metrics.precision_score(y_test, y_pred))
from sklearn import metrics
print('matthews_corrcoef: %.4f' % metrics.matthews_corrcoef(y_test, 
y_pred))
metrics.confusion_matrix(y_test, y_pred)
workbook = xlrd.open_workbook(r'forecast.xlsx')
# 根据下标获取 sheet 名称
sheet_name = workbook.sheet_names()[0]
print(sheet_name)
sheetData = workbook.sheet_by_name(sheet_name)
cols = []
cols.append(np.array(sheetData.col_values(2))) # 第一列
cols.append(np.array(sheetData.col_values(3))) # 第一列
cols.append(np.array(sheetData.col_values(4))) # 第一列
cols.append(np.array(sheetData.col_values(5))) # 第一列
cols.append(np.array(sheetData.col_values(6))) # 第一列
cols.append(np.array(sheetData.col_values(7))) # 第一列
cols.append(np.array(sheetData.col_values(8))) # 第一列
cols.append(np.array(sheetData.col_values(9))) # 第一列
X = np.array(cols).T
print(X.shape)
# 对预测集进行预测
dtest = xgb.DMatrix(X)
y_pred = model.predict(dtest)
import xlwt
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = book.add_sheet('预测结果', cell_overwrite_ok=True)
for i in range(len(y_pred)):sheet.write(i, 0, str(y_pred[i]))
savepath = 'C:/Users/Desktop/A题/excel 表格.xls'
book.save(savepath)
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经典神经网络——VGGNet模型论文详解及代码复现

论文地址:1409.1556.pdf。 (arxiv.org);1409.1556.pdf (arxiv.org) 项目地址:Kaggle Code 一、背景 ImageNet Large Scale Visual Recognition Challenge 是李飞飞等人于2010年创办的图像识别挑战赛,自2010起连续举办8年&#xf…

C/C++ 内存管理(1)

文章目录 C/C 内存划分静态和动态内存C语言的动态内存分配函数mallocfreecallocrealloc 常见内存使用错误 C/C 内存划分 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结 束时这些存储…

【数据结构】初识排序 直接插入排序

初识排序 & 直接插入排序 🐟排序在现实中的应用🐟排序的概念🐟常见的排序算法🐟直接插入排序💦举例--直接插入排序在现实种的应用💦单趟直接插入排序讲解💦直接插入排序算法 🐟排…

应用于智慧零售的AI边缘计算盒子+AI算法软硬一体化方案

中国是世界上最大的消费市场,零售行业拥有极大的发展潜力,阿里、腾讯两大互联网巨头正在加紧、加大布局; 信迈智慧零售方案可涵盖快消行业、服饰行业、餐饮行业、酒店行业、美家行业、消费电子行业、新零售商行业、服饰连锁、大卖场/商超、百…

fastmock如何判断头信息headers中的属性值

fastmock可以快速提供后端接口的ajax服务。 那么,如何判断头信息headers中的属性值呢? 可以通过function中的参数_req可以获得headers中的属性值,比如 User-Agent,由于User-Agent属性带有特殊符号,因此使用[]方式而不…

生成式 AI 与数据融合:亚马逊云科技的前沿探索与应用

目录 前言1 生成式AI和数据2 亚马逊云科技的AI创新2.1 数据与生成式 AI 的协同创新2.2 多模态融合与创新驱动2.3 构建创新平台与工作智能助手2.4 数据整合与安全保障 3 生成式AI结合企业数据的典型技术Amazon Q4 展望未来 授权声明:本篇文章授权活动官方亚马逊云科技…

经典神经网络——ResNet模型论文详解及代码复现

论文地址:Deep Residual Learning for Image Recognition (thecvf.com) PyTorch官方代码实现:vision/torchvision/models/resnet.py at main pytorch/vision (github.com) B站讲解: 【精读AI论文】ResNet深度残差网络_哔哩哔哩_bilibili …

NXP iMX8M Plus Qt5 双屏显示

By Toradex胡珊逢 简介 双屏显示在显示设备中有着广泛的应用,可以面向不同群体展示特定内容。文章接下来将使用 Verdin iMX8M Plus 的 Arm 计算机模块演示如何方便地在 Toradex 的 Linux BSP 上实现在两个屏幕上显示独立的 Qt 应用。 硬件介绍 Verdin iMX8M Plu…

C++的explicit和隐式转换

隐式转换是指在某些情况下,编译器会自动进行类型转换,将一种类型的值转换为另一种类型,以满足表达式的要求。这种转换是隐式进行的,不需要显式地调用转换函数或构造函数。 int a 5; double b a; // int 到 double 的隐式转换上…

支持Upsert、Kafka Connector、集成Airbyte,Milvus助力高效数据流处理

Milvus 已支持 Upsert、 Kafka Connector、Airbyte! 在上周的文章中《登陆 Azure、发布新版本……Zilliz 昨夜今晨发生了什么?》,我们已经透露过 Milvus(Zilliz Cloud)为提高数据流处理效率, 先后支持了 Up…

【Redis】Redis高并发高可用(主从复制、哨兵机制)

Redis高并发高可用 复制 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis 副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制…

java类库的废弃API

java语言一直在进化,java类库也越来越庞大,给人的感觉是一直在做加法。 有没有做减法呢?当然也有,一些是设计失误需要撤回的,如可能引起线程安全问题的Thread.stop()等方法;还有是随着时代发展而被淘汰的&…

cocos 关于多个摄像机,动态添加节点的显示问题,需要动态修改layer。(跟随摄像机滚动)(神坑官网也不说明一下)

参考文章:Cocos 3.x 层级Layer - 简书 2D镜头跟随应该怎么实现呢 - Creator 3.x - Cocos中文社区 关于多个摄像机,动态添加节点的显示问题,需要动态修改layer? 场景:在制作摄像机跟随角色移动功能时,新增…

1.qml-3D入门讲解介绍

本章我们来学习QML 3D教程,QML 3D能够支持windows linux等多平台跨平台并且显示效果大部分一致,非常方便,学习的qt版本最低为qt6.5。 要使用qml 3D类,需要导入QtQuick3D模块。 这是使用空间渲染器和场景图的 QML 前端。目前&…

SQL Server 2016(分离和附加数据库)

1、实验环境。 基于上一个实验《SQL Server(创建数据库)》 2、需求描述。 class数据库的数据文件和事务日志文件都位于C:\db_class目录下。现在需要把class数据库的数据文件和事务日志文件分开存放,数据文件class.mdf存放于原位置&#xff0…

网传滴滴系统崩了,是因为k8s版本升级错误?

11月27日晚间,滴滴因系统故障导致App服务异常登上热搜,不仅无法显示定位、无法打车,有司机的后台还显示收入超690亿。28日和29日,滴滴两次发文致歉,称初步确定事故起因是底层系统软件发生故障。 相较于一些网友戏谑的…

Android 应用程序无响应定位ANR原因

废话不多说,直接上方案: 第一步: 执行adb命令 adb bugreport /Users/mac/Desktop/anr 解压后FS/data/anr下就会有相关anr文件 /Users/mac/Desktop/anr 是电脑存储文件的路径,可以随便定义,这个没有影响。我的电脑是…

人工智能-优化算法之学习率调度器

学习率调度器 到目前为止,我们主要关注如何更新权重向量的优化算法,而不是它们的更新速率。 然而,调整学习率通常与实际算法同样重要,有如下几方面需要考虑: 首先,学习率的大小很重要。如果它太大&#xf…

Todesk 无法登录,无法联网

前言 我习惯用todesk远程ubuntu,但是突然发现掉线了,但是ssh还能连接 问题查找 1.ping 一下主机ip 2.ssh连接后,ping 一下百度,查看是否外网正常 3.输入一下命令 ps -ef | grep todesk #查看todesk 进程 sudo kill -9 ....…

HTML5 的全局属性 hidden 和 display:none 的关系

目录 1,hidden 和 display:none 的关系2,其他隐藏元素的方式2.1,语意上的隐藏2.2,视觉上的隐藏 1,hidden 和 display:none 的关系 hidden - MDN 参考 一句话总结:hidden 是HTML5 新增的全局布尔属性&…