数据分析中样本类别分布不均衡问题

所谓不均衡指的是不同类别的样本量差异非常大。从数据规模上分为大数据分布不均衡和小数据分布不均衡两种。

大数据分布不均衡:数据规模大,其中的小样本类的占比较少。但从每个特征的分布来看,小样本也覆盖了大部分或全部特征。

例如:1000万条数据,其中占比50万条的少数分类样本属于这种情况。

小数据分布不均衡:数据规模小,其中小样本的占比也较少,这会导致特征分布的严重不平衡。

例如:1000条数据,其中占有10条样本的分类,其特征无论如何拟合也无法实现完整特征值的覆盖,此时属于严重的数据样本分布不均衡。

2. 哪些运营场景中容易出现样本不均衡

1. 异常检测场景

大多数企业中的异常个案都是少量的,比如恶意刷单、黄牛订单、信用卡欺、电力窃电、设备故障等。这些数据样本所占比例通常是整体样本中很少一部分。以信用卡欺诈为例,刷实体信用卡的欺诈比例一般在0.1%以内。

2. 客户流失场景

大型企业流失客户相对于整体客户而言,尤其具有垄断地位的行业。例如:电信、石油、网络运营商等。

3. 罕见事件的分析

罕见事件与异常检测类似,不同在于异常检测通常有预定好的规则和逻辑,大多会对企业造成负面影响。

罕见事件无法预判,没有显著的消极或积极影响。

例如:某网络大V无意转发企业的一条广告导致用户流量明显提升。 

4. 发生频率低的事件

例如:每年的双11会产生较高的销售额,但放到全年看,这个销售额占比可能只有1%不到。

3. 通过过抽样和欠抽样解决样本不均衡

过抽样:又称上采样,其通过增加少数类样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录。这种方法的缺点是当样本特征少,会导致过拟合问题。经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据、通过一定规则产生新的样本。例如:SMOTE算法。

欠抽样:又称下采样,其通过减少多数类样本的数量来实现样本均衡,最直接的方法是随机去掉一些多数类样本来减少多数类的规模,缺点是会丢失多数类样本中的一些重要信息。

总体上,过抽样和欠抽样适合大数据分布不均衡。

4. 通过正负样本的惩罚权重解决样本不均衡

通过正负样本的惩罚权重解决样本不均衡问题的思想:对分类中不同样本数量的类别分别赋予不同的权重(一般小样本量类别权重高,大样本量类别权重低),然后建模计算。

使用这种方法需要对样本本身额外处理。以 scikit-learn 中 SVM 为例,通过在 class_weight : {dict, ‘balanced‘} 中针对不同类别来手动指定权重。如果用其默认的方法 balanced,SVM 会将权重设置为与不同类别样本数量呈反比的权重来进行均衡处理,计算公式:

n_samples / (n_class * np.bincount(y))

5. 通过组合 / 集成方法解决样本不均衡

该方法是在生成训练集时,使用所有分类中的小样本量,同是从分类中的大样本量随机抽取数据来与小样本量合并构成训练集,这样反复多次得到很多训练集和训练模型。最后在应用时,使用组合方法(例如股票、加权股票等)产生分类预测结果。

例如:数据中正、负样本分别为100和10000条,比例 1:100,此时将负样本随机分为100份(也可以分更多),每份100条,然后每次形成训练集时使用所有的正样本和随机抽取的负样本形成新的数据集。如此反复得到100个训练集和对应的训练模型。

这种思路类似于随机森林。在随机森林中,每个小决策树的分类能力很弱,通过大量的“小树”组合成的“森林”有良好的模型预测能力。

6. 通过特征选择解决样本不均衡 

上述方法都是基于数据行的操作,通过多种途径使不同类别的样本数据行记录均衡,还可以考虑使用或辅助基于列的特征选择方法。

 一般情况样本不均衡导致特征分布不均衡,但如果小类别样本量具有一定的规模,那么意味着其特征的分布较均衡,可通过选择具有显著型的特征配合参与解决样本不均衡问题,也能在一定程度上提高模型效果。

 来自:《Python数据分析与数据化运营》

相关推荐