0. 概述
哈希刮取客户案例之一是使用AI模型来减少工厂中出现的不良率。为了更深入和易于理解地解释机器学习模型的预测,我写了这篇文章。
1. 问题定义
1.1. 目标设定
首先,简要描述客户案例,根据128个变量中的数据,在制造产品时,每台机器的不良率有所不同,通过机器学习模型对不良品进行预测,然后分析通过机器学习模型导致哪些变量导致不良率,并调整这些变量以减少不良率是目标。
1.2. 假设设立
在生产过程中,通过机器学习模型提取主要变量并进行调整,将降低不良率的假设设立。
2. 数据收集
2.1. 数据源决定
数据源是客户直接提供了每台机器的数据。
由于这些数据是公司内部数据,直接公开可能会有困难,因此我只能截取文件夹并展示。
2.2. 数据收集
我们请求了至少1万条数据,并希望尽可能多地获得数据。因此,我们收到的原始数据是:1号机3931条,2号机16473条,3号机2072条,4号机16129条,5号机57970条,6号机78781条。总共约175,000条数据用于模型训练。
3. 数据预处理
3.3. 数据清洗
数据的清洗在模型训练中非常重要。我认为,数据清洗占到机器学习学习的80%以上。如果训练的数据不干净,最终得到的模型也不会学习得很好。(简单来说,如果你输入垃圾,就会得到垃圾。)
3.4. 操作顺序
3.4.1.
首先,加载文件,由于csv文件的编码格式各不相同,有些使用'cp949',有些使用'utf-8',因此我们进行了编码并读取。
for file_path in file_paths:
try:
df = pd.read_csv(file_path, encoding='cp949', header=None)
except UnicodeDecodeError:
df = pd.read_csv(file_path, encoding='utf-8', header=None)
3.4.2.
为了进行标记,我们合并日期和时间列,并将其与y轴数据连接。
for i in range(len(result_df_new) - 1):
start_time, end_time = result_df_new['Datetime'].iloc[i], result_df_new['Datetime'].iloc[i + 1]
selected_rows = df_yaxis[(df_yaxis['Datetime'] >= start_time) & (df_yaxis['Datetime'] < end_time)]
results.append(1 if all(selected_rows['결과'].str.contains('OK')) else 0)
results.append(0)
3.4.3.
合并每台机器的预处理数据。
data = pd.concat([df1,df2,df3,df4,df6])
data.reset_index(drop=True,inplace=True)
3.4.4
重复数据可能导致数据集偏向,模型学习数据的多样性可能会有问题。此外,可能会出现过拟合问题,因此删除重复数据。
data = data.drop_duplicates().reset_index(drop=True)
在进行了这些预处理后,我们进行了一些探索性数据分析(EDA)。
3.4.5.
使用missingno库可视化缺失值。我们删除了缺失值较多的列。删除缺失值较多的列的原因与上述类似。缺失值可能导致数据学习多样性受阻,可能导致过拟合。当然,对于数据分析,缺失值也可能是重要值。这取决于分析的数据。
3.5. 特征工程
为了提高模型性能,可以创建新特征或转换现有特征。由于我们无法准确了解每个特征的含义,并且认为每个特征都很重要,因此我们没有进行特征工程。
3.6. EDA(以下是部分安全显示的图像)
数据分布检查
使用直方图、箱线图等图表来检查数据分布。
.png?table=block&id=74533625-35d7-4939-96b3-60c4b3763ea6&cache=v2)
相关性分析
分析特征之间的相关性,以确定重要特征或解决多重共线性问题。
4. 采样类型
4.1. 数据不平衡
由于数据不平衡,我们尝试了多种模型和组合。在数据不平衡时进行欠采样的原因是过拟合问题最为突出。我们的最终选择是应用ENN欠采样。
##### NearMiss 인스턴스 생성
nm = NearMiss()
##### 언더샘플링 수행
X_resampled, y_resampled = nm.fit_resample(data.drop('결과', axis=1), data['결과'])
##### 언더샘플링 결과를 DataFrame으로 변환
data_sample = pd.concat([X_resampled, y_resampled], axis=1)
5. 建模
5.1. 模型选择
根据问题类型(分类、回归、聚类等),选择适当的机器学习模型。
在选择模型时,我们尝试了多个模型,但最终根据pocaret库选择了最佳模型进行参考。PyCaret是Python的开源数据分析和机器学习自动化库。PyCaret可以帮助用户快速构建和实验整个数据分析和机器学习流程,而只需很少的代码。
5.2. 模型训练
使用训练数据训练模型。
最终,我们发现catboost模型的AUC值和f1-score值最高。
- AUC(曲线下面积):
AUC表示ROC(接收器操作特征)曲线下的面积。
ROC曲线将灵敏度(真正例率)放在y轴上,将1-特异度(假正例率)放在x轴上绘制。
AUC值介于0和1之间,值越接近1,说明分类器的性能越好。而0.5表示与随机分类器性能相同。
在不平衡的类分布中,AUC特别有用。
- F1-Score:
F1-Score是精确度(Precision)和召回率(Recall)的调和平均值。
精确度是预测为正例中实际为正例的比例,召回率是实际为正例中被正确预测为正例的比例。
F1-Score表示两个指标的平衡,用于克服只优化一个指标的模型的局限性。
F1-Score的值介于0和1之间,值越高,模型性能越好。
6. 结语:提取变量并增加直观性功能
最终,我们实时接收工厂机器生成的原始数据,并通过该模型进行预测,使用SHAP库提取导致不良品的变量。
此外,为了方便工厂工作人员,我们使用Pyinstaller在一系列步骤中生成Excel文件,使其可以轻松查看,并生成exe文件,使其可以通过单击一次查看有关特定原始数据的变量和是否为不良品的决定。
** SHAP是什么?
SHAP代表SHapley Additive exPlanations,用于解释机器学习模型中每个特征对预测的影响。这提高了模型的“透明度”,从而提高了对预测过程的信任。
在这种情况下,哈希刮取正在基于上述方法的AI模型进行项目。




