样本不平衡问题:数据集中,每个类别下的样本数目相差很大。以下以二分类问题为例进行讨论:
图示:坏样本占比:0.17%( 492(坏样本) : 284315(好样本))
理想的样本应该是50:50,但现实中某些场景就是非平衡数据,如金融领域(一般来说,好客户的样本要远远大于坏客户!)
解决方法总结:
一、数据上处理
二、权重设置
三、集成的思想
四、转化成异常检测问题
五、利用深度学习:自编码器.
六、确定适合样本不平衡问题的评价指标
一、数据上处理:
1.数据源:
搜集更多的数据来使数据达到平衡,但是一般出现样本不平衡问题,就是不太可能以一种简单的方法获取到更多的样本
(在金融领域,可以思考坏用户的定义是否过于严格)
2.数据增广:
目前数据增广主要应用于图像领域,主要包括:水平/垂直翻转,旋转,缩放,裁剪,剪切,平移,对比度,色彩抖动,噪声等
3.欠采样:
随机欠采样:随机去除多数类一些的样本
缺点:会造成信息缺少 or 最后模型的欠拟合
4.过采样:
4.1 随机过采样:随机增加少数类的一些样本
缺点:因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合。
4.2 SMOTE:在随机过采样上进行了改进,利用了K近邻的思想
二、权重设置:
1.设置类别权重:class_weight
2.设置样本权重:sample_weight
三、集成的思想:
1.采用boosting的集成算法:XGB,LGB等(对不平衡数据处理效果较好的模型)
2.模型融合:投票法
利用gbdt/lgb/xgb分别对正负样本按比例(1:2 1:5 1:10)进行训练,然后根据AUC分数的比例得到了三者的比例,最后进行投票得到最终模型
四、转化成异常检测问题:
在样本极度不平衡的情况下,换一个完全不同的角度来看待问题,可以把它看成异常检测问题
利用用异常检测算法(IF、LOF、OneClassSVM)建立一个单类分类器,检测异常点(少数类)。
五、利用深度学习:自编码器
利用AutoEncoder进行特征的抽取,再将抽取的特征送入分类器(LR)
六、确定适合样本不平衡问题的评价指标:
ROC,AUC,F1_score