引言
在上一篇文章中,我们探讨了一个用于预测银行贷款违约情况的机器学习模型。虽然模型在训练集上的表现尚可,但在测试集上的准确率却远低于预期。这表明我们的模型可能存在一些问题,其中一类常见的问题是类别不平衡。即数据集中多数类和少数类样本的数量差距较大,导致模型倾向于预测多数类,而忽视了少数类的重要性。这种情况下,我们可以采用过采样的方法来提高模型对少数类的识别能力。
类别不平衡问题
银行贷款数据通常存在类别不平衡问题,即大多数客户能够按时还款(负类),而违约的客户(正类)相对较少。这种不平衡会导致模型倾向于预测大多数客户不会违约,从而忽视了少数违约客户的情况。
在之前的模型中,我们发现尽管模型的整体准确率较高,但针对少数类(即违约客户)的召回率非常低。这意味着模型没有很好地识别出那些可能违约的客户。
即使通过调整不同阈值,最高的召回率也只能达到0.776,那么我们能通过什么样的方式来提高模型的准确率呢?
那就是用 过采集的方法。
什么是过采集?
过采集(Over-sampling)是一种数据预处理技术,用于解决机器学习中数据不平衡的问题。数据不平衡指的是在数据集中,某些类别的样本数量远多于其他类别的情况。这种不平衡会导致模型倾向于预测样本数量较多的那一类,而忽视少数类别的样本。
为了更好地理解过采集,我们可以通过一个简单的例子来解释:
假设你正在构建一个用于预测病人是否有罕见疾病的模型。数据集包含1000个病人的记录,其中只有10个人患有这种疾病(正例),而990个人没有患病(负例)。这是一个非常不平衡的数据集,因为正例的数量远远少于负例。
在这种情况下,过采样的方法可以是:
-
复制正例:你可以简单地复制一些正例样本,直到它们的数量接近负例的数量。例如,你可以复制正例99次,使得正例总数达到990个。
-
合成新样本:更高级的方法是使用如SMOTE(Synthetic Minority Over-sampling Technique)这样的技术来合成新的正例样本。这种方法不是简单复制现有的正例样本,而是根据现有正例样本的特征来创建新的、稍微有所变化的样本。
通过这种方式,我们可以获得一个更平衡的数据集,从而训练出能更好地识别罕见疾病的模型。需要注意的是,虽然过采样有助于提高少数类别的预测准确率,但它也可能引入过拟合的风险,因为模型可能会过度学习重复或合成的样本。因此,在实际应用中还需要结合其他技术和验证方法来确保模型的泛化能力。
解决方案:SMOTE 过采样
为了解决这个问题,我们将使用SMOTE(Synthetic Minority Over-sampling Technique)算法来增加少数类样本的数量,从而提高模型对于少数类的识别能力。
应用 SMOTE
首先,我们需要导入必要的库,并使用SMOTE
方法来过采样少数类。
from imblearn.over_sampling import SMOTE
import pandas as pd
import matplotlib.pyplot as plt
oversampler = SMOTE(random_state=0) # 设置随机种子以保证数据拟合的一致性
x_os, y_os = oversampler.fit_resample(x_w_train, y_w_train) # 对原始训练集的特征和标签数据进行过采样
数据平衡检查
接下来,我们可以通过绘制条形图来检查过采样后的数据是否平衡。
# 设置matplotlib的字体,以便正确显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 计算过采样后各类别的样本数量
labels_count = pd.value_counts(y_os)
# 绘制条形图
plt.title("正负例样本数")
plt.xlabel("类别")
plt.ylabel("频数")
labels_count.plot(kind='bar')
plt.show()
划分数据集
最后,我们将过采样后的数据集重新划分为训练集和测试集,以便后续的建模和评估。
from sklearn.model_selection import train_test_split
x_os_train, x_os_test, y_os_train, y_os_test = \
train_test_split(x_os, y_os, test_size=0.2, random_state=0)
结论
通过使用SMOTE进行过采样,我们可以有效地平衡数据集中的正负例比例,进而提高模型对少数类(违约客户)的识别能力。在实际应用中,这种方法有助于银行更准确地评估客户的信用风险,减少因错误预测造成的损失。
在下一篇文章中,我们将详细介绍如何构建和评估使用过采样数据训练的模型,并比较其与未经过采样的模型之间的性能差异。