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

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深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

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发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用