1. 数据不平衡问题
所谓的不平衡指的是不同类别的样本量差异非常大,或者少数样本代表了业务的关键数据(少量样本更重要),需要对少量样本的模式有很好的学习。样本类别分布不平衡主要出现在分类相关的建模问题上。 样本类别分布不均衡从数据规模上可以分为大数据分布不均衡和小数据不均衡。
分布不均衡两种:
大数据分布不均衡——整体数据规模较大,某类别样本占比较小。例如拥有1000万条记录的数据集中,其中占比5万条的少数分类样本便属于这种情况。
小数据分布不均衡——整体数据规模小,则某类别样本的数量也少,这种情况下,由于少量样本数太少,很难提取特征进行 有/无监督算法学习,此时属于严重的小数据样本分布不均衡。 如拥有100个样本,20个A类,80个B类样本。
2. 典型应用场景
常见的典型场景如下:
- CTR预估:广告点击率,通常只有百分之几,点击的样本占比非常少,大量的未点击样本
- 异常检测:比如恶意刷单、黄牛订单、信用卡欺诈、电力窃电、设备故障等,这 些数据样本所占的比例通常是整体样本中很少的一部分,以信用卡欺诈为例,刷实体信 用卡的欺诈比例一般都在0.1%以内
- 罕见事件的分析:罕见事件分析与异常事件的区别在于异常检测通常都有是预先定义 好的规则和逻辑,并且大多数异常事件都对会企业运营造成负面影响,因此针对异常事 件的检测和预防非常重要;但罕见事件则无法预判,也没有明显的积极和消极影响倾向。
3. 常见处理方法
工程过程中,应对样本不均衡问题常从以下三方面入手:
- 欠采样:在少量样本数量不影响模型训练的情况下,可以通过对多数样本 欠采样,实现少数样本和多数样本的均衡。
- 过采样:在少量样本数量不支撑模型训练的情况下,可以通过对少量样本 过采样,实现少数样本和多数样本的均衡。
- 模型算法:通过引入有倚重的模型算法,针对少量样本着重拟合,以提升 对少量样本特征的学习。
3.1 欠采样
欠抽样(也叫下采样、under-sampling,US)方法通 过减少分类中多数类样本的样本数量来实现样本均衡。 通过欠采样,在保留少量样本的同时,会丢失多数类样本中的一些信息。经过欠采样,样本总量在减少,示意图如下所示:
3.1.1 随机删除
随机地删除一些多量样本,使少量样本和多量样本数量达到均衡,算法流程和代码如下所示,不过这样可能会丢失一些需要的样本信息:
3.1.2原型生成(Prototype generation)
PG 算法主要是在原有样本的基础上生成新的样本来实现样本均衡,具体做法如下:
下图所示为三类共2000个样本点的集合,每个样本维度为2,label1个数为1861,label2个数为108,label3个数为31。利用PG算法完成数据均衡后,样本整体分布没有变化。
3.2 过采样
过抽样(也叫上采样、over-sampling)方法通过增加分类中少数 样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录,这种方法的缺点是如果样本特征少而可能导致过拟合的问题。 经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本,对应的算法会在后面介绍。
3.2.1 随机复制
随机复制即对少量样本进行复制后达到样本均衡的效果以提升模型效果。如下图所示,在进行复制前, Linear SVC只找到一个超平面——即认为样本集中仅两类样本。随机复制后, Linear SVC找到了另外两 个超平面。
3.2.2 样本构建
在随机过采样的基础上,通过样本构造一方面降低了直接复制样本带来的过拟合风险,另一方面 实现了样本均衡。比较典型的样本构造方法有SMOTE(Synthetic minority over-sampling technique)及其衍生算法。 SMOTE算法通过从少量样本集合中筛选的样本和及对应的随机数0< 𝜆 < 1,通过两个样本间的关系来构建新的样本。
由于SMOTE算法构建样本时,是随机的进行样本点的组 合和𝝀参数设置,因此会有以下2个问题:
1)在进行少量样本构造时,未考虑样本分布情况,对于少量样本比较稀疏的区域,采用与少量样本比较密集的区域相同的概率进行构建,会使构建 的样本可能更接近于边界;只是简单的在同类近邻之间插值,并没有考虑少 数类样本周围多数类样本的分布情况,如下图所示:
2)当样本维度过高时,样本在空间上的分布会稀疏,由此可能使构建的 样本无法代表少量样本的特征。
针对上述问题,衍生出SMOTEBoost、Borderline-SMOTE、Kmeans-SMOTE等。
- SMOTEBoost把SMOTE算法和Boost算法结合,在每一轮分类学习过程中增加对少数类的样本的权重,使得基学习器 (base learner) 能够更好地关注到少数类样本。
- Borderline-SMOTE在构造样本时考虑少量样本周围的样本分布,选择少量样本集合(DANGER集合)——其邻居节点 既有多量样本也有少量样本,且多量样本数不大于少量样本的点来构造新样本。
- Kmeans-SMOTE包括聚类、过滤和过采样三步。利用Kmeans算法完成聚类后,进行样本簇过滤,在每个样本簇内利 用SMOTE算法构建新样本。
通过比较不同算法得到的样本构造,可得以下结论:
- 利用样本构建的方法,可以得到新的少量样本;
- 利用不同算法构建的新样本在数量和分布上不同,其中利用SMOTE算法构建的新样本,由于没有考虑原始样本分布情况,构建的新 样本会受到“噪声”点的影响。Borderline-SMOTE算法由于考虑了样本的分布,构建的新样本能够比较好的避免“噪声”点的影响。Kmeans-SMOTE算法由于要去寻找簇 后再构建新样本,可构建的新样本数量受限
3.3 模型算法
上述的过采样和欠采样都是从样本的层面去克服样本的不平衡,从算法层面来说,克服样本不平 衡。在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。 例如:在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯 了“一次错误”,但是后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命 的最佳时机;
为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价” (unequal cost)。代价敏感方法的核心要素是代价矩阵,如下表所示。
从学习模型出发,对某一具体学习方法的改造,使之能适应不平衡数据下的学习,研究者们针对 不同的学习模型如感知机、支持向量机、决策树、神经网络等分别提出了其代价敏感的版本。以 代价敏感的决策树为例,可以从三个方面对其进行改造以适应不平衡数据的学习,这三个方面分 别是决策阈值的选择方面、分裂标准的选择方面、剪枝方面,这三个方面都可以将代价矩阵引入。
3.3.1 MetaCost算法(bagging)
- 在训练集中多次采样,生成多个模型。
- 根据多个模型,得到训练集中每条记录属于 每个类别的概率。
- 计算训练集中每条记录的属于每个类的代价, 根据最小代价,修改类标签。
- 训练修改过的数据集,得到新的模型。
3.3.2 Focal Loss
Focal loss 是在标准交叉熵损失基础上修改得到的,通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本(侧重少量样本的学习)。公式如下所示:
3. 评价指标
错误率(Error Rate):分类错误的样本数占样本总数的比例
混淆矩阵(confusion matrix)
查准率(Precision),又叫精确率,表示的是预测为正的样例中有多少是真正的正样例P=TP/(TP+FP)
召回率(Recall),表示的是样本中的正/负例有多少被预测正确,R=TP/(TP+FN)
准确率(Accuracy):分类正确的样本数占样本总数的比例,Accuracy = (TP+TN)/(TP+FP+FN+TN)。
G-mean:在样本不均衡的情况下,由于少量样本占比较小,如果仅考虑Error Rate或者accuracy,即使模型 全部把少量样本分错,其整体的Error Rate和Accuracy还是比较高的。因此,对于样本不平衡的情 况下,引入另外一个评价指标——G - mean。
ROC与AUC
TPR(True Positive rate) : TP / (TP + FN)
FPR(False Positive rate): FP / (FP + TN)
对于一个特定的分类器和测试数据集,显然只能得到一个分类结果,即一组FPR和TPR结果,而要得到一个曲线,我们实际上需要一系列FPR和TPR的值才能得到这样的曲线,这又是如何得到的呢?我们不断调整概率阈值既可以得到这样的曲线。
AUC表示ROC曲线下方的面积,横轴FPR,纵轴TPR, 这是在实际建模中经常使用的衡量分类模型的效果的指标。AUC是指 随机给定一个正样本和一个负样本,分类器输出该正样本为正的那个概率值 比 分类器输出该负样本为正的那个概率值 要大的可能性。兼顾正例和负例的权衡。
ROC-Curve和PR-Curve的区别
负例增加了10倍,ROC曲线没有改变,而PR曲线则变了很多。作者认为这是ROC曲线的优点,即具有鲁棒性,在类别分布发生明显改变的情况下依然能客观地识别出较好的分类器。
在类别不平衡的背景下,负例的数目众多致使FPR的增长不明显,导致ROC曲线呈现一个过分乐观的效果估计。ROC曲线由于兼顾正例与负例,所以适用于评估分类器的整体性能,相比而言PR曲线完全聚焦于正例。如果有多份数据且存在不同的类别分布,比如信用卡欺诈问题中每个月正例和负例的比例可能都不相同,这时候如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则ROC曲线比较适合,因为类别分布改变可能使得PR曲线发生变化时好时坏,这种时候难以进行模型比较;反之,如果想测试不同类别分布下对分类器的性能的影响,则PR曲线比较适合。
如果想要评估在相同的类别分布下正例的预测情况,则宜选PR曲线。