基于聚类融合和过采样的不平衡金融模型研究
2022-04-21朱彩霞
叶 枫 朱彩霞
(浙江工业大学 管理学院,浙江 杭州 310023)
本文在多个金融数据集上将该算法与原始Stacking算法、其他结合过采样处理的Stacking算法和其他传统的集成算法的结果进行比较,结果表明此算法提高了不平衡数据的分类效果。
1 相关算法介绍
1.1 Stacking算法
Stacking 算法是由Wolpert在 1992 年提出的一种集成学习算法,又称为堆叠算法。与 Boosting和Bagging 相比,堆叠算法在较多的情况下进行多个学习器训练,能够结合多个不同的分类算法。堆叠算法核心是将算法分成两层,第一层是基学习器,第二层是元学习器。如图1所示,将训练数据集输入基学习器中,得到基学习分类结果;再将输出结果进行组合,作为元学习器的输入,从而使得下层学习能够被充分应用于上层学习,纠正基学习算法中的分类偏差。
图1 Stacking算法框架
给定T个样本的数据集,表示为D0={(xi,yi),i=1,2,…,T},其中xi为输入样本的特征向量,yi为标签label。通过k折交叉验证法,将数据集随机划分为m个大小基本相等的数据Dj(j=1,2,…,m)。选择m个基学习器Lj(j=1,2,…,m),在训练集Dj上训练第m个学习器,这些基学习器训练共获得m个分类模型,表示为Xj(j=1,…,m),并得到训练的最终结果Cj(j=1,…,m)。在进行交叉检验之后,m个分类器结果与yi进行组合得到新的数据集D1={(C1,C2,…,Cj,yi),j=1,2,…,m,i=1,2,…,T)。D1数据集也就是图1中的数据组合,进一步利用分类算法得到最终分类模型M′,由M′给出最终分类结果。
通过Stacking算法我们可以发现这种算法能够融合任何分类算法,具有较强的融合性和扩展性,叠加的层次可以从一层到多层向上延伸,每一层模型之中,可以融合不同的算法进行分类器构造,通过测试不同分类算法之间的组合,确定最优算法组合。
1.2 k-means聚类算法
经典的k-means算法从提出到现在已超过60年,目前依旧是被运用最广泛的聚类算法之一。k-means算法的基本原理主要是以欧氏距离作为相似度指标,在迭代过程中根据相似度将样本分成不同的簇,同一簇相似度高,不同簇之间相似度低。
定义1 设j=1,2,…,k,Y=(y1,y2,…,yn),X与Y的欧氏距离定义为:
(1)
k-means算法流程如下:
输入:样本集D={x1,x2,…,xn},聚类簇数k
输出:聚类结果C
Step 1:从数据集中随机选择k个样本作为初始聚类中心点{μ1,μ1,…,μk};
Step 2:对于i=1,2,…,n,计算样本点xi和各个聚类中心点的距离,将样本集中其他样本分配到离它最近的簇中心所在的簇;
Step 3:对于i=1,2,…,k,在每个簇中,计算簇中所有数据对象的均值,从而得到新的簇中心;
Step 4:重复Step 2、Step 3,直至聚类中心不再发生变化;
Step 5:输出结果C。
1.3 过采样方法
过采样的主要思想就是通过一系列方法合成新的少数类样本,以达到均衡数据集的目的。过采样的方法有很多种,不同的方法有各自的优缺点。过采样方法中最简单的是随机过采样(Random-Over-Sampling),它主要是随机复制少数类样本以使少数类样本和多数类样本比例均衡。随机过采样虽然方法简单,能在一定程度上提高少数类样本的分类正确率,但是由于新增的少数类样本是直接复制原有的少数类样本,所以这种算法容易造成过拟合。
针对随机过采样的局限性,Chawla等提出SMOTE方法,它是在每个少数类样本与其相邻的k个少数类样本之间进行线性插值,合成新的少数类样本,如图2所示。SMOTE的基本步骤如下:
图2 SMOTE插值说明
(1)首先依次选取每一个少数类样本xi作为新生成样本的原样本;
(2)使用KNN算法找到少数类样本xi的同类别的k(k取值一般默认为5)个邻近样本,记为y1,y2,…,yk;
(3)根据采样倍率N%,在xi的k个邻近样本中随机选择N个样本点;
(4)根据以下公式进行线性插值,生成新的少数类样本xs:
xs=xi+rand(0,1)×(yi-xi)
(2)
其中,s=1,2,…,N;j=1,2,…,k;rand(0,1)表示0到1的随机数;
(5)新生成的少数类样本添加到原始训练数据集中,平衡数据集。
2 本文算法
本研究在Stacking算法框架下,将k-means++聚类算法和过采样方法应用到分类器中,提出结合聚类过采样的Stacking算法。本文算法基本思想就是利用k-means++的无监督算法特点,对基学习算法产生的分类结果进行聚类,从而使得分类结果相一致的训练样本能够聚类至同一个簇中;然后对聚类结果进行SMOTE过采样处理,均衡样本集;最后进行回归训练,得到最终分类结果。该方法将每个基分类器分类概率作为特征集进行聚类,将基分类器的分类结果一致的样本更好地聚集在一个簇类中,以聚类后的簇类中心代表原多数类数据和少数类数据一起构成新的数据集。SMOTE过采样增加人工合成的少数类样本使数据分类平衡,减少了过拟合的可能性,提高了分类器在测试集上的泛化性。另一方面,堆叠算法形成的数据集能够大大降低聚类算法的运算速度。
2.1 k-means++聚类过采样方法
传统的k-means算法只能进行局部最优解,初始化中心的选择将在很大程度上影响找到的最优解的好坏。因此,为更好地找到初始化中心,Arthur和Vassilvitskii提出了k-means++聚类算法。该算法的初始质心选取的基本思路就是,初始的聚类中心之间的相互距离要尽可能远,提高在大规模数据中选择中心的效率。k-means++的具体步骤如下:
(1)从数据集中随机选取一个样本作为初始聚类中心c1;
(3)重复第2步直到选出k个聚类中心;
(4)继续使用k-means算法求出聚类结果。
本文算法就是,不同基学习器产生的分类概率作为特征集通过k-means++的无监督算法进行聚类,k-means++算法能显著减少分类结果的最终误差,从而使得分类结果相一致的训练样本能够聚类至同一个簇中。聚类产生的新的簇类分别作为多数类样本和少数类样本。聚类结果作为标签,结合分类概率的特征集进行SMOTE过采样处理,从而使作为元分类器的输入数据达到均衡。k-means++聚类过采样的具体步骤如下:
(1)将Stacking基学习器输出的分类概率作为新的样本集;
(2)样本集通过k-means++的聚类方法重新聚类,得到新的分类结果,将分类结果作为标签target;
(3)将样本集和标签target结合成为新的样本集,进行SMOTE过采样处理,合成新的少数类样本,平衡样本集;
(4)平衡后的样本集,去掉标签target,作为元分类器的输入数据。
2.2 结合聚类过采样的Stacking算法
集成算法(Ensemble Method)是通过一定策略将多个学习器结合起来。按个体学习器之间的关系,可以分为Bagging、Boosting和Stacking三大类。Bagging和Boosting框架使用同类型的基学习器进行构建,Stacking则是将不同类型的基学习器进行组合构建,因为不同类型基学习器可以从不同的角度观察数据特征,更加全面地学习数据,从而得到一个更准确的结果。其核心思想是对基学习器进行交叉验证训练,然后在基学习器输出结果的基础上,构建二级特征用于训练元学习器。
本研究在Stacking算法框架下,将k-means++聚类算法应用到基分类器分类结果中,提出结合聚类过采样的Stacking算法。本文算法基本思想就是,通过Stacking算法,多种基学习算法可以从不同角度分析训练得到分类概率,根据k-means++的无监督算法特点,使各个基学习算法产生的分类概率作为各个样本的新的特征值进行聚类,从而得到新的簇类作为多数类样本数据和少数类样本数据,然后对聚类结果进行SMOTE过采样处理,均衡样本集;最后将平衡后的数据集作为输入数据进入元分类器回归分析,得到最终分类结果。该方法通过k-means++聚类使得不同基学习器分类的概率作为特征集进行聚类,提高被错分的少数类样本正确分类的概率;再结合SMOTE过采样处理平衡进入元分类器训练的数据集,弥补数据不平衡带来的缺陷。另一方面,堆叠算法形成的数据集是由n个学习器所得到的维度为n的数据,能够大大降低聚类算法的运算速度。算法的具体步骤如下:首先通过Stacking集成算法的基学习算法对训练集S1进行训练,产生分类概率组合得到数据集data。然后随机选取一个样本点作为初始聚类中心c1,遍历数据集,利用欧式距离计算出样本点与目前的聚类中心的距离D(x),计算每个样本点被选为下一个聚类中心的概率,按照轮盘法选择出下一个聚类中心。作为初始聚类簇中心,对data 进行k-means 聚类,得到聚类结果。将聚类结果的label标签与数据集data结合,形成新的数据集new_data。对new_data数据集进行SMOTE过采样处理,合成新的少数类样本,均衡数据集,形成新的数据集final_data。最后对final_data中的特征值data进行回归分类,得到最终分类结果。算法伪代码如下所示。
Input:
原始数据集D0(类别标签0多于1)
基学习分类算法Lj(j=1,2,…,m)
k-means++聚类算法
Logistic算法
Output:
分类结果数据集 result
Begin
Step1k折交叉验证法将D0随机划分为m个大小基本相等的数据集Dj(i=1,2,…,m)。
Step2Cj:利用基学习算法Lj对Dj进行训练及预测,得到分类结果集Cj与分类器Xj。
Step3将结果Cj按列组合,得到新的数据集data。
Step4遍历数据集data,根据欧式距离,对数据集 data 进行k-means++ 聚类,初始聚类簇为d1、d2,组合聚类结果,标签为label。
Step5将data 数据和聚类结果label结合,形成新的数据集new_data。对数据集new_data进行SMOTE过采样处理,合成新的少数类样本,得到新的平衡的数据集final_data,标签为final_label。
Step6对数据集final_data用 logistic方法进行回归分析,得到最终的分类结果数据集result。
End
聚类过采样Stacking算法流程如图3所示。
3 实验设计与结果分析
3.1 数据集
为了确保实验结果的可靠性,采用不同实际应用的金融数据来进行检验。本文选取1个Kaggle数据集、2个UCI数据进行测试。表1是用于实验的数据信息,包括样本数量、特征数、标签统计数。
图3 聚类过采样Stacking算法流程
从表1可以看出,数据集拥有足够大的样本数量。数据集都源自金融方面,从标签0和1的统计比例上能够明显看出这3个数据集都是不平衡数据,可以良好地检验算法的效果,能够帮助对比后续的实验算法。
表1 实验数据
3.2 评价标准
对于平衡数据,一般采用分类精度作为评价指标。然而,对于不平衡数据而言,以分类精度作为算法的评估标准是不合理的。例如,以金融贷款为例,约1%的信用卡交易存在欺诈行为。因此,在预测中,所有的交易模型具有高达99%的准确率。而实际上,这样并没有实际意义,它几乎无法检测出任何欺诈交易。在处理不平衡的分类问题上,目前大多采用混淆矩阵(见表2)。其中,TP表示被分类器正确分类的正类数,TN表示被分类器正确分类的负类数,而FN表示被分类器错误分类的负类数,FP表示被分类器错误分类的正类数。
表2 二分类混淆矩阵
相关的评价指标计算如下:
文献[18]中用ROC曲线来评价不平衡数据的分类算法。横坐标是FPR,纵坐标是TPR。
AUC是ROC曲线面积,是用来度量分类模型好坏的一个标准。AUC的大小能够更加直观地体现结果的好坏。AUC越大,模型越好,分类器分类效果越好。AUC=1,是完美的分类器,效果最好。
本文算法性能用AUC的值、F1值和G-mean值作为衡量结果好坏的指标:
3.3 实验设计与结果分析
测试都在windows 10系统下运行,处理器Intel(R)Core(TM)i5-5200UCPU@2.20GHz2.20GHz,内存12GB。用python 3.7版本,采用Pyc.harm编译器进行运行测试。
为了保证数据的合理以及后续可持续性的测试,将原数据分为训练集和测试集,数据比例为9∶1,从而能够得到合理的数据验证。本文选用Bagging的代表算法随机森林和极端随机数、Boosting的代表算法CatBoost算法和LightGBM算法作为初级分类算法,Logistic 回归算法作为次级分类算法。
图4 Data1数据集在不同Stacking算法下的ROC曲线
图5 Data2数据集在不同Stacking算法下的ROC曲线
图6 Data3数据集在不同Stacking算法下的ROC曲线
为了验证聚类过采样对Stacking算法处理不平衡数据有优化作用,分别使用传统Stacking算法、对原始数据进行SMOTE处理后的Stacking算法(SMO-Stacking)和对基分类器分类概率只使用原始标签进行SMOTE过采样处理的Stacking算法(Y-SMO-Stacking)与本文算法(K-SMO-Stacking)进行对比。
表3 每个数据集在不同Stacking算法下的AUC值
表4 每个数据集在不同Stacking算法下的F1值
表5 每个数据集在不同Stacking算法下的G-mean值
图4、图5、图6表示三个数据集在不同Stacking算法下的ROC曲线,表3、表4和表5中第五列是聚类过采样Stacking算法(K-SMO-Stacking)的结果。从实验结果上可以发现,本文算法的AUC值几乎都略高于其他的Stacking算法,本文算法的F1值和G-mean值都高于其他Stacking算法,证明对基学习器的分类概率进行聚类过采样的方法比原始的Stacking算法处理复杂特征值的海量数据集有一定优势。这充分说明了整体分类效果有了明显提高,算法得到了实际结果的认可。尤其是在F1值和G-mean值上,本文算法的值远高于原始Stacking算法,说明对于传统的Stacking算法的结构,将聚类过采样融合到Stacking结构后对处理不平衡数据更加有效。通过表4、表5的第4列和第5列对比可知,本文算法将基分类器输出的分类概率通过k-means++的聚类算法重新聚类得到新的聚类标签,将新的聚类后的数据集通过SMOTE过采样合成新的少数类样本再进行回归训练得到分类结果,比起将基分类器输出的分类结果和原始数据集的标签相结合进行SMOTE过采样处理,可以更好地均衡数据集,提高少数类数据的分类准确率,提高对不平衡数据集的分类效果。
图7 Data1数据集在不同集成算法下的ROC曲线
将聚类过采样Stacking算法和其他传统集成算法进行对比,得到的结果如图7~9,表6~8所示。除了在data3数据集上表现不佳,在其他数据集上,本文算法在AUC值、F1值和G-mean值上均远高于其他传统算法。这也能证明相比于其他传统的集成算法,本文算法在处理不平衡数据时效果显著。
图8 Data2数据集在不同集成算法下的ROC曲线
图9 Data3数据集在不同集成算法下的ROC曲线
表6 每个数据集在不同集成算法下的AUC值
表7 每个数据集在不同集成算法下的F1值
表8 每个数据集在不同集成算法下的G-mean值
4 结束语
不平衡数据在实际金融项目中普遍存在,这使得不平衡数据在机器学习中成为研究的热点。本文在Stacking集成框架的基础上,通过将k-means++聚类算法和过采样方法相结合,利用k-means++聚类和过采样进行对数据集的优化,使少数类样本增多且更密集,对均衡的数据进行训练。本文在具有大量样本的金融数据集上进行实验研究,证明了结合聚类过采样的Stacking算法比原始Stacking算法、其他结合过采样的Stacking算法和其他传统集成算法有了进一步的提高,在AUC值提高效果相近的情况下,在F1值和G-mean值上有明显提高。
虽然相比于其他算法,本文算法在F1值和G-mean值上都有更好的结果,但在AUC结果上提高的程度还是有所不足。为了进一步提高精度,在生成次级分类器时应当适当增加原始数据集中重要的维度数据,或者增加重要的基学习算法训练数据,以此来提高精度。下一步工作将重点研究基学习算法训练结果如何选择组合重要信息来提高分类精度。