非平衡数据(Imbalanced Data)指目标类观测值在数据集中呈现不均匀分布特征,即一类标签具有非常多的观测值,称之为多数类别(Majority Classes),另外一种只有少数观测值,称为少数类别(Minority Classes),Google对这类数据作了简单分类,可以看出极端情况下,部分非平衡数据少数类占比不到1%。常见非平衡数据集,比如信用卡欺诈、客户流失预测、疾病诊断等,往往这些数据集中少数类别比例很少,这时候需要对这类数据进行处理,为什么需要处理?因为由于少数类数据量很少,直接套用模型,不能对少数类别数据进行有效训练,模型倾向于预测多数类别,最终导致模型性能表现不佳。
1.选择合适的性能评估指标
在机器学习里,会生成一个混淆矩阵(Confusion Matrix)来分析模型性能,2 x 2矩阵表格显示有真阳性(TP)、真阴性(TN)、假阳性(FP)和假阴性(FN)的数量;
我们在评估数据最常见的指标叫准确率(Accuracy),也就我们传统认知的正确率的概念,即预测对的总数占全体样本总数的比例,但由于非平衡的数据数量类别之间差异很大,假如(少数类:多数类=1:99),这时候,你会发现模型得出的准确率也是99%,这个指标本身意义不是很大了,所以需要新的指标评估。
1.1性能评估指标:
1.1.1精确率(Precision):预测所有的阳性数量中是真正阳性有多少,即预测的真实阳性有多少是真阳性的概率
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP
1.1.2.召回率(Recall)、又称真阳性率(TPR):所有实际为阳性的数量是真正阳性有多少,即原本真实阳性被分辨出来的概率
R e c a l l = T P T P + F N Recall = \frac {TP}{TP + FN} Recall=TP+FNTP
精确率与召唤率如何选择?
答:根据业务场景来选择,举个例子,新冠大流行检测试剂,假设这个试剂敏感度是可以调节的,低敏感度意味着会将非新冠人群容易检测为新冠患者,(对应指精确率很低,一般来说这时候召回率很高)这对被检测出的非新冠患者是不利的,由于非新冠患者会进行集中隔离,那么会导致非新冠患者感染上,同时,被检测出新冠人群周边居住区域、工作场所进行管制,那么带来的成本比较高;反过来,看另外一种情况,高敏感度指的是可以将新冠患者精确检测出来,但是会存在漏网之鱼,一些新冠患者存在漏检(对应的精确率很高,召回率很低),这时候会增加疫情扩散的风险,可能会形成潜在的更大的社会成本,这个时候作为决策者,通过精确率和召回率人为去调节这款产品的敏感度,来选择可接受的成本方案,根据这个思路和现实感受,简单猜测一下新冠试剂、疫苗对大部分人的作用?以及潜在的社会成本?
1.1.3 F1 score:
F
1
=
2
⋅
p
r
e
c
i
s
i
o
n
⋅
r
e
c
a
l
l
p
r
e
c
i
s
i
o
n
+
r
e
c
a
l
l
F1 = 2 \cdot \frac{precision \cdot recall}{precision + recall}
F1=2⋅precision+recallprecision⋅recall
F1得分从公式形式可以看成是精确率和召回率加权,这个指标试图找出精确率和召回率之间的平衡,但如果你对精确率、召回率和业务比较理解的话,从精确率和召回率很容易猜测出F1怎么样
1.1.4 ROC曲线和AUC值:
FPR又称假阳性率,在实际负样本总数中,有多少是将真实负样本错误分到正样本类别数量
F P R = F P T N + F P FPR = \frac {FP} {TN+FP} FPR=TN+FPFP
可以设置不同的模型的阀值(Threshold),计算不同阀值的TPR和FPR构造出ROC曲线,AUC值指的是ROC曲线下的面积,如图所示,面积越大,指标越好,最完美的分类的是TPR等于1,FPR等于0,样本都被正确分类出来
2.过采样(Over Sampling)
给少数类别增加更多的示例,比如复制或者合成少数类别样本到一定的比例使得数据达到平衡;例如随机过采样(Random Over Sampling)、SMOTE
优点:由于增加少数类别样本数,少数类别性能指标表现更好
缺点:复制或者合成少数类别样本,并未遵循原始数据分布,本质上都没有新信息的增加,而且合成数据引入更多的“噪声”;可能会使模型过度拟合少数类别;此外,就是由于新增较多的数据,一定程度上降低了模型运行效率
2.1 SMOTE(合成少数类别)
SMOTE(Synthetic Minority Oversampling Technique):与简单复制添加少数类重复记录不同,在SMOTE中,新增信息是根据少数类别数据合成的,通过聚类使用K个最近邻来选择,并在特征空间中随机创建一个合成实例,合成点在样本点和K个紧邻之间通过差值计算形成。
2.2 SMOTETomek
由于少数类别会存在与多数类混合的情况,没有明显有效的边界,为了保证分类模型性能,需要删除数据边界的点,SMOTETomek指的是在SMOTE的基础找出Tomek Link,若少数类别接近多数类别数据时,从而使得界限模糊不清,需要对少数类别数据进行删除;SMOTETomek也叫综合采样;
Tomek Links:1.观察a最近邻居是b;2.观察值b的最近邻是a;3.观察a和b属于不同的类别,也就是说,a和b分别属于少数类和多数类,那么称之为Tomek Link
从数学上来说,它表达如下:
假设
d
(
x
i
,
x
j
)
d(x_i,x_j)
d(xi,xj)表示
x
i
x_i
xi和
x
j
x_j
xj之间的欧氏距离,
x
i
x_i
xi表示属于少数类的样本,
x
j
x_j
xj表示属于多数类样本
1.
d
(
x
i
,
x
k
)
<
d
(
x
i
,
x
j
)
d(x_i,x_k)<d(x_i,x_j)
d(xi,xk)<d(xi,xj),或
2.
d
(
x
j
,
x
k
)
<
d
(
x
i
,
x
j
)
d(x_j,x_k)<d(x_i,x_j)
d(xj,xk)<d(xi,xj)
那么
(
x
i
,
x
j
)
(x_i,x_j)
(xi,xj)
对
对
对 就是Tomek Link
还有一种基于SMOTE改进的方法,叫ADASYN(Adaptive Synthetic Sampling)自适应综合采样,计算最近邻域多数类别样本之间的差距,为不同的少数类别样本赋予不同的权重(SMOTE对样本权重赋值是一样的),距离边界附近样本距离越近,这时候会生成更多的样本,比较SMOTE在生成策略有更大的灵活性
3.欠采样(Under Sampling)
欠采样指通保留少数类数据,减少多数类的大小,来平衡不均匀数据集
优点:数据会变少,更快速对数据分析获取有价值的见解
缺点:可能删除多数类别有价值的信息,删除后样本无法准确代表真实情况,导致分析结果表现不佳
实际运行需要对欠采样进行深度探索,且信息丰富十分丰富情况下,才会考虑采样欠采样技术
3.1随机欠采样(Random Under-Sampling) 从多数类中的随机删除多类别数据,直到多数类和少数类达到平衡为止。
3.2 Near-Miss 计算多数类与少数类的平均距离时,保留少数类的数据,删除离少数实例较远实数例,有三种算法表示
NearMiss-1.计算多数类别和最近少数的类别的距离,平均距离越小越好
NearMiss-2.计算多数类别与最远少数类别的距离,平均距离越小越好
NearMiss-3.首先,针对少数类别实例,计算该样本与多数类别中所有样本之间的距离,会找到m个最近邻多数类实例;然后计算平均距离,最后,从少数类别中选择那些平均距离最大的样本,这些样本与少数类别样本的平均距离最远,移除掉多类别样本点,保证数据平衡。
3.3 Cluster Centroids:通过聚类方法来移除多数类中不重要数据的方法,首先将多数类别数据进行聚类,形成不同的簇,从每个簇中选择聚类中心作为新的样本,这些聚类中心代表了多数类别样本的特征和属性,那些远离聚类中心的实例被认为是不重要的,将多数类别聚类中心样本和少数类别样本合并,形成一个新数据。
3.4 Tomek 通过找出多数类别和少数类别边界的Tomek Links 对,这个时候通过删除多数类别样本,让数据达到平衡
3.4.1 有没有发现,Near-Miss与Tomek在欠采样的思路是有点相反味道?确实如此,这个取决于对目标问题的特点和数据分布情况来做选择
4.调节分类权重(Class-weights)
由于数据集存在不平衡,但我们希望在模型训练中更关注具少数类别,这时候在模型内设置不同权重参数,来加大对少数类别样本的惩罚,来保证模型训练过程中更加努力的提高预测少数类别的性能,这是Cost-sensitive(对成本调整) 学习方法。
4.1为什么使用采样,直接调整惩罚成本不好吗?
1.现在算法都没有对代价成本进行有效控制,一堆数据进去,只有跑出来大概率才能看出模型性能,难以通过精准控制来达到想要的结果;
2.如果数据分布极端,比如多数类别和少数类别占比达到10万,由于数据数量巨大,必须减小训练集的大小才能使其进行学习,这时候,欠采样是一种合理的有效策略
5.集成学习方法(Ensemble learning)
可以参考ChatGPT给出的回答,其实不管数据的是否平衡,集成学习都是比较好的选择