基于机器学习的工业制造缺陷分析预测系统
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, cm
scores, reports, cms = [], dict(), dict()
for i, j in zip(models, names):
score, report, cm = training(i)
scores += [score]
reports[j] = report
cms[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 精品实战案例