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

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

相关文章

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺