样本数据不平衡是我们建模场景中经常遇到的问题,由于目标类别的分布占比差异较大,使得模型训练难以取得较好的拟合效果,甚至模型结果在实际应用中无效。举个最常见的例子,在信贷场景中构建反欺诈模型时,训练样本数据的欺诈目标群体往往是占比很少,必然需要我们对这种正负样本不平衡的情形进行处理,从而保证模型拟合训练的有效性,并获取满足实际需求的模型结果。
解决样本不平衡的常规方法主要有重采样、样本加权等维度,其中重采样包含的过采样与欠采样是我们习惯采用的方法,但需要我们注意的是,过采样后的数据由于反复出现了部分样本,模型会过度学习这些样本数据的信息,从而导致模型产生一定程度的过拟合;欠采样后的数据由于丢失部分样本数据,模型未能学习到所有样本的信息,使模型出现一定程度的欠拟合现象。此外,样本加权的方法虽然未变换样本数据量的多少,但给各类样本赋予合理的权重大小始终是一个难点,而在实际应用中一般是让各个目标分类间的加权损失值近似相等。

1、聚类重采样思路
虽然采用重采样、样本加权等方法都存在一定的局限性,但这些方法仍然是我们日常建模解决样本不平衡问题的主要思路或参考方法,当然也有SMOTE数据合成、OneClass分类等其他方法可供选择,而本文将为大家介绍一种新的方法,即在样本聚类思想下的重采样,这种方法最大的优点是不仅可以解决类之间的不平衡问题,而且还可以解决类内部的不平衡问题,相比单一的重采样方法,聚类下的重采样思路,其应用效果能够更好的提升模型训练效果。
聚类思想下的重采样方法,主要包括两个实现环节,第1步是针对样本数据的正负例分别进行Kmeans聚类(或其他聚类方法),第2步是对聚类后的类别样本数据实施重采样(过采样或欠采样等)。现举个简单样例,说明聚类后的重采样过程,假设某样本数据的正负样本数量为90:10,具体分析过程如下:
(1)采用Kmeans分别对正负样本进行聚类分析,其中正样本的聚类数量为3,各簇样本数量依次为30、50、10;负样本的聚类数量为2,各簇样本数量依次为7、3。这里针对正负样本设置的聚类数量不同,可以根据实际情况综合考虑,比如聚类模型效果、样本数量大小等。
(2)根据正负样本的聚类结果进行过采样,由于正样本最大簇类的样本数量为50,因此正样本的其他2个簇类的样本数量可以扩展至50,即由30和10分别增加至50,这样得到的正样本总数量为50*3=150。
(3)重采样后的正样本数量为150,按正负样本比例1:1均衡的情况下,负样本总数量也应提升至150,则负样本各簇的样本数量为150/2=75,这样只需将2个簇类的样本量分别由7、3依次增加至75,从而达到了整个样本数据的目标类别平衡。

2、实例聚类与分析
为了便于大家对以上聚类后重采样过程的进一步熟悉,我们接下来围绕具体的反欺诈建模样本数据,来完成以上解决样本不平衡的方法。本文选取的样本数据包含6000条样本与8个字段,部分数据样例如图1所示,其中字段Y代表是否欺诈。
风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法-LMLPHP

                                                           图1 样本数据样例

对于以上样本数据,字段Y为欺诈目标变量,取值二分类(1是/0否),现对其频数统计分布进行简单描述,具体实现过程如图2所示,输出结果如图3所示。
风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法-LMLPHP

                                                              图2 目标描述实现


风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法-LMLPHP

                                                                图3 目标频数分布

从目标分布结果可知,正样本(Y=0)与负样本(Y=1)的占比差异较大,是样本不平衡的典型体现。为了解决此类样本偏差较大的情形,我们按照本文聚类下的重采样方法来进行处理,具体流程为先通过Kmeans算法分别对正负样本进行聚类,然后对聚类后的各簇样本实施过采样。
针对正负样本的聚类分析,由于正负样本比例差异较大,这里我们对正样本(Y=1)与负样本(Y=0)的聚类数量K均定义为2,当然也可以根据SSE肘部法来确定更合适的K值。围绕正负样本的聚类分析,以上分析的实现过程详见知识星球代码详情,为了保证模型聚类效果,在模型训练前对建模数据进行特征标准化处理,最终输出的聚类各簇样本数量结果如图5所示。
风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法-LMLPHP

                                                              图5 样本聚类结果

根据上图得到的模型聚类结果,我们先来看样本量最大的簇类是正样本簇类2,对应样本数量为4037,则正样本簇类1的样本数量应由1663扩展至4037;负样本簇类1和2的各簇样本数量应扩展至(40372)/2=4037,当负样本聚类数量为3时,则为(40372)/3=2691。以上针对各簇样本的扩充过程是过采样的结果,具体以上的实现过程详见知识星球代码详情,同时输出重采样后的目标取值分布情况。
风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法-LMLPHP

                                                              图7 重采样目标分布

通过上图重采样后的目标分布结果可知,经过前边聚类分析、分簇过采样等系列流程,最终建模数据宽表的样本数量由原始数据的6000扩展至16148,目标正负样本0:1比例由19:1(图3)调整为1:1(图7),有效解决了样本不平衡的问题,保证了模型训练过程可以更好的学习到正负样本的信息。
聚类后的重采样方法,最大的优点在于可以综合解决类别不平衡、类内不平衡的问题,例如本文样例的目标0/1类别分布得到有效平衡处理,同时对于正负样本每个聚类簇的样本进行了平衡处理,即分类簇内的样本数量越少,相应簇随机复制的样本数据越多,最终使各簇的数据量分布达到平衡。这种聚类分析后的重采样机制,相比直接过采样或欠采样,可以更有效的保证建模样本数据更符合实际业务需求。
综合以上内容,我们围绕聚类分析后的重采样思想,详细介绍了这种方法在处理样本不平衡问题的主要过程,并结合具体的样本数据,完成了模型聚类后的过采样,有效解决了样本不平衡的实际场景。
为了便于大家对以上内容的进一步熟悉,本文额外附带了相关python代码与样本数据,详情请移至知识星球查看相关内容。
风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法-LMLPHP

风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法-LMLPHP

更多详细内容,可继续关注:
风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法-LMLPHP

~原创文章

10-26 11:52