大家好,实际世界的数据集通常是杂乱的,当不同类别之间的样本分布不均匀时,就会出现类别不平衡。或者说,某些类别的样本比其他类别多得多。例如,考虑一个信用卡违约数据集,信用卡违约是一个相对较少发生的事件,而没有违约的情况则占据了绝大多数。这种不平衡可能会对模型的训练和性能产生影响。
在这样的情况下,模型可能会更倾向于学习如何正确地分类没有违约的情况,而对于违约的情况可能学到的信息相对较少。这可能导致在实际应用中,模型对于违约的情况预测效果不佳,因为它没有足够的样本来学习如何准确地识别这个相对较少发生的类别。
在处理类别不平衡的问题时,通常需要采取一些技术手段,如过采样、欠采样、使用不同的损失函数或集成学习方法,以帮助模型更好地处理少数类别的样本。
一、为模型训练和评估选择正确指标
准确率指标
准确率是机器学习模型训练和评估中常用的指标。然而在不平衡的数据集上,高准确率可能是一个误导性的指标,因为模型可以通过大多数时间预测多数类别来获得高准确率分数。
以一个包含1000名信用卡用户数据的数据集为例。在这1000人中,只有50人违约,而950人没有。假设我们的模型只是简单地为每个人预测“不违约”,而没有真正学习数据集中的潜在模式。
通过混淆矩阵的计算,可以得到以下结果:
-
真正例(TP)= 0
-
真负例(TN)= 950
-
假正例(FP)= 0
-
假负例(FN)= 50
-
准确率(Accuracy)=(TP + TN)/(TP + TN + FP + FN)=(0 + 950)/1,000 = 95%
尽管该模型实现了95%的准确率,听起来相当高,但实际上这个模型是完全无用的,因为它在完全未能检测到潜在违约的情况下取得了高准确率。
不平衡数据集的度量指标
在数据集存在类别不平衡的情况下,精确度、召回率和F1分数是更好的度量标准。
精确度(Precision):精确度( the Positive Predictive Value/ PPV)衡量了所有预测为正的观察值中正确预测的数量。
-
精确度(Precision) = TP / (TP + FP) = 0 / (0 + 0)
使用上述混淆矩阵,精确度未定义,或者出于实际目的,可以视为0。
召回率(Recall):召回率(也称为敏感性或真正例率)是实际正例中正确预测的观察数量。
-
召回率(Recall) = TP / (TP + FN) = 0 / (0 + 50) = 0
召回率为0%,这表明模型未检测到任何实际违约。
F1分数(F1-Score):F1分数是精确度和召回率的调和平均数。它是将精确度和召回率结合成一个单一指标的一种方式。
-
F1分数(F1-Score) = 2 × ((精确度 × 召回率) / (精确度 + 召回率))
对于我们的模型,F1分数未定义,因为精确度和召回率都为0。
ROC曲线
当将分类问题建模为回归问题时,模型对样本属于“正”标签的概率可以用来进行分类,其概率在某个阈值以上。ROC曲线是真正例率(TPR)或召回率相对于假正例率(FPR)或误报率在不同阈值设置下的图表。
曲线从点(0,0)开始,并以点(1,1)结束。从点(0,0)到点(1,1)的对角线代表随机分类器的ROC曲线。ROC曲线越靠近左上角,分类器的性能就越好。
ROC曲线下面积(AUC-ROC)提供了模型区分正负类别能力的度量。完美的分类器的AUC为1。完全随机的分类器的AUC为0.5。
曲线的陡峭度表示性能:陡峭的曲线表示模型具有良好的召回率,逐渐增加表示更多的假阳性。
请注意,ROC曲线仅关注正类别,并且较差地反映了模型在负类别上的性能。因此,对于不平衡的数据集,通常认为精确度-召回率曲线(Precision-Recall (PR) curve)曲线比ROC曲线更好。
精确度-召回率曲线
这个曲线是精确度(正预测值/PPV)相对于召回率(敏感性或真正例率)的不同阈值的绘图。
-
在绘图的右上角,精确度和召回率都为1,表示一个完美的分类器。
-
一个随机分类器的精确度等于正样本的比例。
-
精确度-召回率曲线下面积越大(AUC-PR),模型越好。
-
一个完美的分类器的AUC-PR为1,而一个随机分类器的AUC-PR等于正样本的比例。
二、处理类别不平衡
可以使用以下方法来解决类别不平衡:
-
数据层方法:改变给定不平衡数据集的分布。
-
算法层方法:使机器学习模型更能适应类别不平衡。
数据层方法
1.随机重采样(Random Resampling)
在这种方法中,从多数类别中随机删除样本(欠采样),并随机复制少数类别的样本(过采样)。
2.SMOTE 过采样(SMOTE Oversampling)
SMOTE(Synthetic Minority Over-sampling Technique)是一种用于增加数据集中少数类别样本的技术。其工作方式如下:
-
对于少数类别中的每个样本,随机选择其k个最近邻居。
-
计算该样本与其选择的邻居的特征向量之间的差异。
-
将差异乘以0到1之间的随机数。
-
将结果加到样本的特征向量中。这在特征空间中生成一个新点。重复此过程直到解决类别不平衡问题。
3.ADA-SYN 过采样(ADA-SYN Oversampling)
ADA-SYN(Adaptive Synthetic Sampling)是SMOTE的扩展,它根据模型在学习中的难度自适应地生成新样本。在少数类别被多数类别包围且较难学习的区域,生成更多合成数据。
ADA-SYN 过采样的工作方式如下:
-
对于少数类别中的每个样本,随机选择其k个最近邻居。
-
计算这些邻居的类别分布比例,以确定有多少属于多数类别。
-
使用此比例计算每个少数类别样本的权重。具有更多多数类邻居的样本权重更高。
-
对于每个少数类别样本,按其权重生成合成样本(使用 SMOTE 的步骤)。
4.Tomek Links 欠采样(Tomek Links Undersampling)
这是一种欠采样技术,选择多数类别和少数类别中彼此最近的样本。这些配对称为 Tomek Links。一旦找到 Tomek Link,就会删除该链接中多数类别的样本。
5.Edited Nearest Neighbors Rule 欠采样(Edited Nearest Neighbors Rule Undersampling)
对于数据集中的每个样本,识别其k个最近邻。如果样本来自多数类别,并且其大多数最近邻居属于少数类别,则删除该样本。
6.Neighbour Cleaning Rule 欠采样(Neighbour Cleaning Rule Undersampling)
这是一种欠采样技术,结合了 Edited Nearest Neighbors Rule 和 Tomek Links。上述过采样和欠采样方法可以以不同的方式组合,以解决适用于您用例的最佳方法。
算法层方法
1.成本敏感学习(Cost-sensitive Learning)
与所有类别使用相同成本不同,对不同类别分配不同的误分类成本。将少数类别(违约)误分类的成本高于误将多数类别(正常用户)样本误分类,这使得学习算法更加谨慎地对待误将少数类别误分类。
2.类平衡损失(Class Balanced Loss)
类平衡损失的思想是为不同的类别分配不同的权重,这个权重与该类别中的样本数量成反比。这意味着少数类别获得更高的权重,而多数类别获得更低的权重。在计算损失时,每个样本对损失的贡献都会按其类别权重进行缩放。这意味着误将少数类别样本误分类将导致比误将多数类别实例误分类更高的惩罚。
3.焦点损失(Focal Loss)
焦点损失的直觉是集中学习模型错误地预测的样本,而不是那些它可以自信地预测的样本。焦点损失在标准交叉熵准则中添加了因子 (1 − p) ** γ。这折扣了易学样本的损失贡献。
4.集成技术(Ensembling Techniques)
这些技术背后的思想是多个模型的组合可以比任何单个模型更好地实现性能。在平衡随机森林中,每个决策树都在通过对多数类别进行欠采样创建的平衡数据子集上进行训练,最终预测是通过聚合所有树的预测得出的。在EasyEnsemble方法中,通过对原始数据集进行多次随机对多数类别进行欠采样,创建多个平衡子集。然后,在每个平衡子集上训练AdaBoost分类器,并通过聚合每个AdaBoost分类器的预测得出最终预测。其他流行的集成技术包括SMOTEBoost和RUSBoost。
此外,在类别不平衡的实际数据中,模型可能偏向预测多数类别,导致高准确率却无效的情况。因此,精确度、召回率和F1分数成为更合适的评估指标。采用随机重采样、SMOTE过采样、ADA-SYN过采样等数据层方法,或成本敏感学习、类平衡损失、焦点损失等算法层方法,有助于处理类别不平衡。在选择性能指标时,精确度-召回率曲线比ROC曲线更适合,可提高对少数类别的敏感性。综合运用不同方法,可有效应对类别不平衡问题。