数据不平衡问题的处理

引言

在分类问题中正负样本比例不平衡是很常见的问题,例如在预测CVR的时候,会有大量的负例,但是正例的数目缺不多,正负样本比例严重失衡。这是一个值得思考的问题。

解决思路

首先我们需要思考的是我们可否通过扩大数据集,得到更多的比例较小的样本,使新的训练集样本分布较为均衡,如果可行的话,那么这种方法值得我们考虑。
若不可行的话,可以试着从如下两个角度出发考虑:

  • 数据的角度
  • 算法/模型的角度

数据的角度

故名思议,从数据的角度出发就是,想办法使得数据的比例较为均衡,可以做的是对数据进行采样。

  • 欠采样
  • 过采样

欠采样和过采样都是随机采样,欠采样选择少量的多数类样本与少数类样本构成新的训练样本,但是若少数类样本确实太少的话,不建议使用这种方法,虽然使得样本整体的比较均衡,但是会由于样本数太少会导数信息缺失,让某些特征的不能很好的表现出来,使得欠拟合。过采样相反,是在少数类样本中做随机采样,扩大少类样本的数量,但是由于数据量的提升使得训练过程的计算量增加,也可能导致过拟合问题。

EasyEnsemble算法

考虑到欠采样可能导致信息缺失的缺点,我们提出了一种集成学习的方法–EasyEnsemble算法
算法原理:
从多数类中有放回的随机采样 n 次,每次选取与少数类数目近似的样本,那么可以得到 n 个样本集合记作 {S1,S2,...,Sn} ,然后其中的每一份与少数类样本结合组成 n 训练样本 {D1,D2,...,Dn} ,然后再每一个训练集上得到一个模型,最后取这 n 个模型的均值

SMOTE算法

考虑到过采样可能导致过拟合的缺点,提出了一种合成少数类过采样技术—SMOTE算法
算法的原理:
对少数类的样本做KNN算法,求出他的K近邻为 Sknn ,然后从这K个邻居中选择若干样本,若少数类的样本为 x ,从K近邻中选择的样本为, x

xnew=x+rand(0,1)(xx)

注意点:

  1. 求KNN的时候是对全集 S 上求而并不是仅选出 x 在少数类集的K近邻。
  2. x 应该选少数类边界上的一些数据,即 K2<SSknn<K

其他的一些方法

  • 换一种思路,将少数类样本看成异常,将其转换成一个异常检测的问题,异常检测

算法的角度

  1. 重构训练集的方法。不改变已有算法,而是根据样本的不同错分代价给训练集中的每一个样本赋一个权值,接着按权重对原始样本集进行重构。
  2. 引入代价敏感因子,设计出代价敏感的分类算法。通常对小样本赋予较高的代价,大样本赋予较小的代价,期望以此来平衡样本之间的数目差异。

代价敏感学习方法

数据不平衡情况下的评估指标

在数据不均衡情况下我们如果参考准确率,和召回率的话不能很好的衡量模型的性能。
我们可以参考一下几个指标:

总结

这其实都是一些方法论的东西,具体的选择哪一种方法,还要依据实际的情况来定,希望能够活学活用。

参考资料

SMOTE算法
EasyEnsemble算法
大牛的分析1
大牛的分析2
专业的数术语

点赞