基于机器学习的工业制造缺陷分析预测系统

2024-08-28 07:28

本文主要是介绍基于机器学习的工业制造缺陷分析预测系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

B站视频及代码下载:基于机器学习的工业制造缺陷分析预测系统-视频-代码

1. 项目简介

        制造缺陷是工业生产过程中面临的重大挑战之一,对产品质量和生产效率产生直接影响。准确预测和分析制造缺陷的发生,可以帮助企业提高生产质量、降低成本,并优化供应链管理。通过机器学习模型分析影响制造缺陷的主要因素,能够为制造业提供有效的改进策略和预防措施,从而提升整体生产效能。本项目,我们提出了一种数据科学方法,使用包括各种生产指标、供应链因素、质量控制评估、维护计划、劳动力生产率指标、能耗模式和增材制造细节的综合数据集,利用 Xgboost建模训练,测试集预测 AUC 达到99.7%,并搭建交互式分析系统来预测制造缺陷。

基于机器学习的工业制造缺陷分析预测系统

2. 数据探索式可视化分析 

        为了更好地理解数据分布和特征之间的关系,我们首先进行了数据探索式的可视化分析。这一步骤对于发现异常值、理解数据分布以及发现潜在的模式至关重要。

        关键技术点:

  • Pandas: 用于数据处理和清洗。
  • Matplotlib: 绘制基本图表。
  • Seaborn: 进行更复杂的统计图形绘制。

2.1 数据集读取与预处理

        本数据集包含了多个与制造缺陷相关的生产参数,数据来自不同的生产批次,旨在通过机器学习模型预测制造缺陷的发生,并分析主要的影响因素。数据集包括了生产量、生产成本、供应商质量、交货延迟、缺陷率、质量评分、维护时间、停机时间百分比、库存周转率等多个变量。

df = pd.read_csv("./manufacturing_defect_dataset.csv")
## 列名汉化
df.rename(columns={"ProductionVolume":"生产量","ProductionCost":"生产成本","SupplierQuality":"供应商质量评分","DeliveryDelay":"交货延迟","DefectRate":"缺陷率","QualityScore":"质量评分","MaintenanceHours":"维护时间","DowntimePercentage":"停机时间百分比","InventoryTurnover":"库存周转率","StockoutRate":"缺货率","WorkerProductivity":"工人生产力",\"SafetyIncidents":"安全事故数","EnergyConsumption":"能源消耗","EnergyEfficiency": "能源效率","AdditiveProcessTime": "附加加工时间","AdditiveMaterialCost": "附加材料成本","DefectStatus": "缺陷状态"
},inplace=True)df.sample(10)

2.2 类别标签数量分布

tmp = df["缺陷状态"].value_counts().to_frame().reset_index().rename(columns={"count":"数量"})tmp["缺陷状态"] = tmp["缺陷状态"].map(lambda x:"是" if x == 1 else "否")
tmp["百分比"] = tmp["数量"].map(lambda x:round(x/tmp["数量"].sum()*100,2))labels,values,percent = tmp["缺陷状态"].tolist(),tmp["数量"].tolist(),tmp["百分比"].tolist()

        可以看出,不存在缺陷的占 15.96%,这是一个类别非常不均衡的二分类问题,需要采用采样算法去平衡数据集的占比。

2.3 特征与目标的相关性分析

fig,ax = plt.subplots(1,1,figsize=(20, 16))
cmap = sns.diverging_palette(230, 20, as_cmap=True)
sns.heatmap(df.corr(), annot= True, cmap=cmap, vmax=.5, center=0,square=True, linewidths=.5, cbar_kws={"shrink": .5})
ax.set_xticklabels(labels=df.columns, rotation=90, fontsize=12)
ax.set_yticklabels(labels=df.columns, rotation=00, fontsize=12)
plt.show()

       可以看出:与观测值(工业制造缺陷)的相关性较高的特征有:生产量、缺陷率、质量评分、维护时间,其中质量评分呈现较强负相关,另外3个呈现较强的正相关,此外,其他特征与观测值的相关性不明显.

2.4 直方图和密度图上的数据分布

2.5 缺陷影响因素分析

num_columns = ['生产量', '缺陷率', '质量评分', '维护时间', '缺货率', '供应商质量评分']
plt.figure(figsize=(15, 10))
for i, column in enumerate(num_columns, 1):plt.subplot(3, 3, i)sns.boxplot(data=df, x='缺陷状态', y=column)plt.title(f'{column} by 缺陷')plt.ylabel(column if i % 3 != 1 else '') plt.tight_layout()
plt.show()

 

3. 样本采样均衡与扩充处理

        在处理不平衡的数据集时,数据集扩充技术显得尤为重要。不平衡数据集是指目标变量的各类别之间存在显著数量差异的数据集,在这种情况下,模型可能会偏向于多数类,导致少数类别的预测性能较差。为了解决这个问题,我们可以使用imbalanced-learn库中的两种常用方法:过采样和欠采样。

        (1)过采样 (RandomOverSampler)

        过采样是指增加少数类样本的数量,通常通过复制现有的样本或合成新的样本实现。RandomOverSampler是一种简单直接的方法,它随机重复少数类样本以平衡数据集。

        (2)欠采样 (RandomUnderSampler)

        欠采样是指减少多数类样本的数量,以平衡各类别之间的比例。RandomUnderSampler同样是一个简单直接的方法,它随机选择多数类样本的一部分,使多数类与少数类的数量相同。

        (3)结合使用过采样和欠采样

        在某些情况下,同时使用过采样和欠采样的方法可以达到更好的效果。例如,先使用RandomUnderSampler减少多数类样本的数量,然后再使用RandomOverSampler增加少数类样本的数量。

# Separate features and target variable
X = df.drop(columns=['缺陷状态'])
y = df['缺陷状态']# Count the occurrences of each class
class_counts = y.value_counts()# Calculate the target count for each class
target_count = min(class_counts)#########
# 省略部分代码
########## Apply resampling
print('X:', X.shape)
X_over, y_over = over_sampler.fit_resample(X, y)
print('X_over:', X_over.shape)
X_resampled, y_resampled = under_sampler.fit_resample(X_over, y_over)
print('X_resampled:', X_resampled.shape)# Concat
df_resampled = pd.concat([pd.DataFrame(X_resampled, columns=X.columns), pd.DataFrame(y_resampled, columns=['缺陷状态'])], axis=1)
df_resampled.shape

4. 基于机器学习的工业制造缺陷建模

4.1 切分出训练集、验证集和测试集

y_train_all = df_resampled['缺陷状态']
X_train_all = df_resampled.drop(columns=['缺陷状态'])X_train, X_valid, y_train, y_valid = train_test_split(X_train_all, y_train_all, test_size=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X_train, y_train, test_size=0.1, random_state=42)print('train: {}, valid: {}, test: {}'.format(X_train.shape[0], X_valid.shape[0], X_test.shape[0]))
train: 4410, valid: 545, test: 491

4.2 多模型预测性能对比初探

        初步选择 AdaBoost、GBT、LR、SVC、Xgboost这五类模型集成初步试验,选择性能最好的模型,以后续针对性的优化:

abc = AdaBoostClassifier()
gbc = GradientBoostingClassifier()
lgr = LogisticRegression()
svc = SVC()
xgb_clf = XGBClassifier()models = [abc, gbc, lgr, svc, xgb_clf]names = ["Ada Boost", "Gradient Boosting","Logistic Regression", "Support Vector Machine", "XGBoost"]def training(model):# 省略部分关键代码cm = confusion_matrix(pred, y_test)return score*100, report, cmscores, reports, cms = [], dict(), dict()
for i, j in zip(models, names):score, report, cm = training(i)scores += [score]reports[j] = reportcms[j] = cm

        可以看出,在默认参数下, XGBoost 的性能最好,达到99.39%.

4.3 XGBoost 模型优化

        通过调优XGBoost模型参数,通过验证集的预测性能进行参数调优:

df_columns = X_train.columns.values
print('===> feature count: {}'.format(len(df_columns)))xgb_params = {'eta': 0.5,'colsample_bytree': 0.4,'max_depth': 8,# 'lambda': 2.0,'eval_metric': 'auc','objective': 'binary:logistic','nthread': -1,'silent': 1,'booster': 'gbtree'
}dtrain = xgb.DMatrix(X_train, y_train, feature_names=df_columns)
dvalid = xgb.DMatrix(X_valid, y_valid, feature_names=df_columns)watchlist = [(dtrain, 'train'), (dvalid, 'valid')]model = xgb.train(dict(xgb_params),dtrain,evals=watchlist,verbose_eval=10,early_stopping_rounds=100,num_boost_round=4000)
[0]	train-auc:0.87004	valid-auc:0.85053
[10]	train-auc:0.99983	valid-auc:0.99744
[20]	train-auc:1.00000	valid-auc:0.99973
[30]	train-auc:1.00000	valid-auc:0.99993
[40]	train-auc:1.00000	valid-auc:0.99997
[50]	train-auc:1.00000	valid-auc:0.99993
[60]	train-auc:1.00000	valid-auc:0.99995
[70]	train-auc:1.00000	valid-auc:0.99993
[80]	train-auc:1.00000	valid-auc:0.99992
[90]	train-auc:1.00000	valid-auc:0.99995
[100]	train-auc:1.00000	valid-auc:0.99995
[110]	train-auc:1.00000	valid-auc:0.99995
[120]	train-auc:1.00000	valid-auc:0.99995
[130]	train-auc:1.00000	valid-auc:0.99995
[138]	train-auc:1.00000	valid-auc:0.99996

4.4 特征重要程度分布

4.5 模型性能评估

4.5.1 AUC 指标评估
# predict train
predict_train = model.predict(dtrain)
train_auc = evaluate_score(predict_train, y_train)# predict validate
predict_valid = model.predict(dvalid)
valid_auc = evaluate_score(predict_valid, y_valid)# predict test
dtest = xgb.DMatrix(X_test, feature_names=df_columns)
predict_test = model.predict(dtest)
test_auc = evaluate_score(predict_test, y_test)print('训练集 auc = {:.7f} , 验证集 auc = {:.7f} , 测试集 auc = {:.7f}\n'.format(train_auc, valid_auc, test_auc))
训练集 auc = 1.0000000 , 验证集 auc = 0.9999596 , 测试集 auc = 0.9971614

4.5.2 测试集预测 ROC 曲线

4.5.3 测试集预测结果混淆矩阵计算 

5. 基于机器学习的工业制造缺陷预测系统

5.1 系统首页

5.2 特征与目标的相关性分析

5.3 缺陷影响因素分析

5.4 工业制造缺陷预测

6. 结论

        本项目,我们提出了一种数据科学方法,使用包括各种生产指标、供应链因素、质量控制评估、维护计划、劳动力生产率指标、能耗模式和增材制造细节的综合数据集,利用 Xgboost建模训练,测试集预测 AUC 达到99.7%,并搭建交互式分析系统来预测制造缺陷。

  B站视频及代码下载:基于机器学习的工业制造缺陷分析预测系统-视频-代码

 欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的师姐 QQ 名片 :)

精彩专栏推荐订阅:

1. Python数据挖掘精品实战案例

2. 计算机视觉 CV 精品实战案例

3. 自然语言处理 NLP 精品实战案例

这篇关于基于机器学习的工业制造缺陷分析预测系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114114

相关文章

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实