基于机器学习的个人信用借贷风控模型构建

2019-05-24 07:36谭天翔李达陈俊林
求知导刊 2019年6期

谭天翔 李达 陈俊林

摘 要:近年来,随着网络个人贷款在中国蓬勃发展,一些平台出现提现困难、经侦介入、跑路等问题,究其原因主要是平台对风险的控制不过关。文章对国内网络借贷行业的贷款风险数据(来源:拍拍贷官网)进行选择分析,基于机器学习技术提出个人借贷风控模型的构建方案,为投资人提供关键的决策思路。

关键词:xgboost;SVM;逻辑回归模型

中图分类号:F832.4

文章编号:2095-624X(2019)06-0014-03

一、概述

本文的研究目标是根据用户历史行为数据来预测用户在未来6个月内是否会逾期还款的概率。该问题可以转换成二分类问题,从数据表中构建特征,评估指标为AUC,其本质是排序优化问题,所以本文在模型顶层融合也使用基于排序优化的rank_avg融合方法。

本文首先从数据清洗开始,介绍我们对缺失值的多维度处理、对离群点的剔除方法以及对字符、空格等的处理;其次进行特征工程,包括对地理信息特征构建、组合特征构建和数据表的特征提取等;再次进行特征选择,本文采用xgboost,其训练过程即对特征重要性排序过程;最后一部分是模型设计与分析,采用了工业界广泛应用的逻辑回归模型,并基于Large-scale SVM的方法在本课题上的应用,取得了较好的效果。

二、数据清洗

1.缺失值的处理

在个人信贷问题中,用户所提供自身信息的数量对其在信贷体系中的信用等级有着至关重要的作用,所提供的信息越详细则越容易通过审核得到贷款。我们以此为切入点来分析和处理原始数据中的缺失值。

首先,以行为单位统计各样本的属性缺失值个数。按照缺失属性的个数由小到大排序,绘制散点图并分析得出,训练集和测试集中的各样本缺失属性的个数的分布情况基本一致。同时在训练集数据中,序号在80000附近的少量样本的缺失属性个数非常多,可视为离群点删除。其次,以列为单位统计各个属性缺失值个数,并计算相应的缺失率,分析其中两列缺失率达到97%,且这两种属性没有有效的信息,故可直接删除。而缺失率达到63%的三种属性为分类型数据,可以用-1来代替缺失值,从而等价于表示“是否缺失”的新类别。除去前五种缺失率较高的属性,其余属性的缺失率都比较低,因此可用中值代替。补全数据后最终达到了可以研究的目的。最后,缺失值的个数也可以作为一项衡量用户信息详细程度的重要指标。

2.常变量的剔除

题目提供的数据中数值型特征有190个,我们可以计算每个特征的标准差后,将所得结果按照从大到小排序,从而删除标准差最小,即变化较小的特征。

3.离群点的剔除

样本空间中有一些样本点与其他的特征或一般行为不相符,这些点便可称为离群点。由于离群点的不同特征可能是多种因素造成的,在上文中我们就已通过分析处理缺失值的个数来筛选少量离群点。

但在本节中,我们在题目提供的数据上训练xgboost,用得到的xgb模型来评价各个特征的重要性,对其进行由大到小的排序得到前10个最重要的特征,如图1所示。然后分别计算每个样本的这10个特征的缺失值个数。如若缺失值个数大于10个,则将其视为离群点。这些离群点缺失了前10个特征上的取值,给训练模型增加了很多麻烦,不便于处理,故需要删除。

4.其他处理

将数据表中其他数据进行相应处理,如英文字符统一为小写;数据包含了空格字符,是同一种取值,如“中国 电信”与“中国电信”,删除空格字符;含有“长沙市”“长沙”等情况,其意义相同,故统一删除“市”这个字符。

三、特征处理

1.地理信息处理

针对地理位置信息(类别变量),我们想到的处理方法是利用独热编码(one-hot encoding),然而如此会产生较高维的稀疏特征,阻碍模型学习的效率和有效性,对此我们先对数据进行筛选。

数据中包含了六个字段的用户地理信息,当中的两个字段为省份,另外四个为城市信息。我们计算各省份和城市的违约率,违约率最大的几个地区分别为吉林、天津、山东、湖北、湖南以及四川,由此,我们设立6个二维特征,分别为:“是否为吉林省”“是否为天津市”“是否为山东省”等,取其值为0或1。即对其地理信息进行了独热编码处理,保留其中判别性特征。之后,由于城市信息建立二值特征产生的稀疏特征维度较高,分析难度较高。因此我们对独热编码处理后的高维稀疏特征进行xgb模型训练,根据输出的特征重要性筛选出二值特征。

根据城市等级合并。因类别特征取值个数太多,对其独热编码处理后所得稀疏特征维度较高,我们还使用了与上面不同的合并变量方法。

城市特征向量化。统计城市特征中城市数,并取对数,之后等值离散化到6~10个区间内。

地理信息差异特征。地理信息中有4列为城市。因此我们设置城市差异特征,如diff_12表示1、2列的城市是否一致。

2.成交时间特征

依日期来统计训练集中每日借贷成交量,正负样本分别计算,得到如下的曲线图2,横坐标是日期(20131101至20141109),纵坐标是每日借贷量。count_1曲线是违约样本每日数量(为了体现对比,将量扩大一倍),coun_o曲线对应未违约数量。

由图中可以看到拍拍贷业务量总体呈增长趋势,而违约量前期有缓慢增长,之后基本趋于平稳,总体上违约率为平稳甚至下降趋势。在300~350对应的日期区间内,有一些借贷量非常大的情况出现,其中可能隐藏着我们尚未挖掘出来的某些信息。

3.特征组合

训练完成xgboost后可以输出特征重要性,我们发现第三方数据特征“ThirdParty_Info_Period_XX”的feature score較高(见图1),即判别性比较高,于是用这部分特征构建了组合特征:将特征相除得到6000多个特征,之后使用xgboost对其单独进行模型训练,得到特征重要性排序,取其中前450个特征线下cv能达到0.73以上的AUC值。将其添加到初始体系中,线下cv的AUC值从0.777提高到0.7833。另外,也组合了乘法特征(取对数):log(x*y),筛选出其中的240多维,加入初始体系中,单模型cv又提高到了0.785左右。

4.其他特征

我们将剩余类别特征均做独热编码处理,提取了用户修改信息特征,比如:修改次数,修改时间到成交时间的间隔,各信息修改次数等特征。我们提取了用户登录信息特征,如时间天数,平均登录间隔以及各操作代码的次数等。对初始特征中190维数值型特征按数值从小到大进行排序,得到排序特征。排序特征对异常数据有更强的抗变换性,使模型更加稳定,降低过度拟合的风险。

四、特征选择

在特征工程部分,我们构建了一系列位置信息相关的特征、组合特征、成交时间特征、排序特征、类别稀疏特征等,所有特征加起来将近1500维,这么多维特征可能会导致维数灾难,需要做降维处理,此处通过特征选择来降低特征维度。特征选择的方法很多:最大信息系数(MIC)、正则化方法(L1,L2)、基于模型的特征排序方法。比较高效的是最后一种,即基于学习模型的特征排序方法,这种方法有一个好处:模型学习的过程和特征选择的过程是同时进行的,因此我们采用这种方法基于xgboost来做特征选择,xgboost模型训练完成后可以输出特征的重要性,据此我们可以保留前N个特征,从而达到特征选择的目的。

五、模型设计

本次研究所收集到的数据共有9万个,将此数据分为三个集合,分别为训练数据(训练集)、测试数据(测试集)和验证数据(验证集合)。其中训练集8万数据,测试集1万数据,验证集1万数据。其中7万的训练集用于模型的调参,本次实验主要采用7折交叉验证进行调参,而验证数据主要是为了方便进行线上模拟实验,在得到单个的模型结果后,可在验证数据的基础上做进一步的模型融合。

1.logistic回归

logistic回归即逻辑回归,它与多重线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本差不多。最为常用的就是因变量二分类的logistic回归,这就为本次实验的模型选取提供了可选择性。

首先,对原始特征和构建的多维特征进行添加和形式的变换。其次,就本次实验来说,关键在于动态地根据交叉验证的反馈来处理特征,这个基本思想贯穿整个建模的过程。对于xgboost模型训练后输出的重要性与特征进行单因素分析和数值特征的离散化,对于连续性变量在分析过程中常常需要采用OCDD离散化方法进行离散化后变成等级特征然后进行独热编码。为了提高模型的表达能力,如果单纯用线性模型来对问题进行刻画会有失准确性,因此构建并加入上文中描述的组合特征,特征组合正好可以加入非线性表达,以此来增强模型的表达准确性。最后,在高维特征上进行模型的训练,单模型验证集得到的AUC为0.772左右。

2.xgboost

xgboost的全称是extreme Gradient Boosting(极端梯度提升),它能够自动利用CPU的多线程进行并行,同时在算法上加以改进提高精度,有着出众的效率与较高的预测准确度,值得我们在GBDT(Gradient Boosting Decision Tree:梯度提升决策树)的基础上对其进一步探索学习。

之前的原始特征和构建的特征共有1439维特征,在此基础上训练xgboost,单模型线下交叉验证的ACU值为0.7833左右。我们又对模型做进一步改进。在之前模型得到的参数基础上,让参数在小范围内随机波动,并对特征进行随机抽样。例如,之前模型的子样品参数取值为0.75,而得到的新模型的子样品参数在0.7~0.8随机取值;原模型所用到的特征为1439维,而新模型则在随机抽样部分进行训练。经过改进,线下模拟的ACU值达到了0.787。

3.大规模数据的SVM尝试

SVM即支持向量机,它是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。但是,SVM存在的问题就是不能处理大规模的数据,本次实验我们收集了8万的数据,对于SVM来说数据规模过大,因为当处理大规模的数据时它受到训练时间和实验硬件设施的限制。因此,要解决数据过大而造成的时间过长问题,具体的做法就是采用工作集方法、训练集分解方法、增量学习方法等。实验中我们训练了30个SVM,在此中采用Bootstrap抽样产生子集。这种方法实质上减小了计算复杂度。假设原始数据有n,则原方法训练的复杂度是O(n2),将数据集n分为p份,则每一份数据量为n/p,每一份训练一个子SVM,复杂度为O((n/p)2),全部相加,则复杂度减小了p倍。在此种方法上得到的AUC为0.77左右,在一定程度上减少了训练时间。

4.模型融合

我们实现模型融合的基本框架,基于3个方案的融合。

方案1:bagging xboost,通过参数扰动生成不同30个xgb模型,对同一数据集进行训练产生结果,采用均值融合产生M1结果。

方案2:Large-Scale SVM,通过shuffle将数据集划分为30子数据集,根据复杂度分析,这个方式的时间复杂度进一步降低,对30个svm结果输出取平均产生M2结果。

方案3:单模型,根據线下CV验证,调试2个不同版本的最优单模型,S_XGB_1, S_XGB_1分别为陈天奇版本的xgboost和graphlab版本的模型,生成不同的单模型结果。

模型融合的关键在于模型差异性。框架中体现出模型差异性主要是3个部分:不同模型、相同模型不同参数和训练数据集不同。因此每次在ensemble之前需要参考下各个模型的相关性,可以采用person系数评价等。

最上层的融合方式可以采用均值融合,rank均值融合等简单方式,最终我们选用的是线下效果最好的1/rank加权融合(按score降序)。

六、结语

根据本文研究,通过数据预处理—特征处理—模型选择—模型融合这样一个过程,我们实现算法和方案的有效建立。其实模型与数据是相辅相成的,只有更加了解数据才能更好地使用模型。投资人根据本文提供的模型,结合实际数据,可以更好地对用户借贷行为进行预测。

参考文献:

[1]赵花.基于组合模型的用户是否二次贷款预测应用研究[D].上海:上海师范大学,2018.

[2]王磊.社交数据驱动的P2P借贷风险评估模型[D].杭州:浙江大学,2017.

[3]李洋,郑志勇.量化投资:以MATLAB为工具[M].北京:电子工业出版社,2015.

[4]卓金武,周英.量化投资:MATLAB数据挖掘技术与实践[M].北京:电子工业出版社,2017.

基金项目:湖南商学院2017年度大学生研究性学习和创新性实验计划项目。

作者简介:谭天翔(1997—),男,湖南岳阳人,湖南商学院数学与应用数学专业1501级学生。