sklearn中的xgboost_信用洞察|基于XGBoost的用户信用评分模型研究

关注并标星索信达

每天打卡阅读

更快走进金融人工智能世界

━━━━━━

f712f413bd8b45979da53d9281aa8699

我们是索信达集团旗下的金融人工智能实验室团队,微信公众号(datamargin)将不定期推送原创AI科学文章。我们的作品都是由实战经验丰富的AI科学技术人员或资深顾问精心准备,志在分享结合实际业务的理论应用和心得体会。

文 | 索 信 达 杨 健 颖

本文针对银行业的特点,提出了一套分析用户信用数据以建立信用评分的流程方法:首先使用SMOTE过抽样方法对不平衡数据进行调整,将原本不平衡的数据调整为平衡的数据;为保证模型的精度并满足金融行业数据量大的特点,使用XGBoost算法训练数据,并使用AUC值和代价敏感错误率作为评价模型好坏的指标;最后不仅预测用户所属的类别,同时还将模型所报告的用户所属类别概率结合评分卡知识进一步分析用户的信用情况。

dde2c35a81b14c0c9d71428aea5834eb

1.背景介绍

金融行业经常需要对客户的信用风险进行评价,评价时通常是对用户的一些属性特征建立相应模型,根据模型结果来判断用户的信用风险情况。但金融行业实际上拥有自身的一些特点,这使得实际运用模型算法时往往需要进行一些调整,主要特点如下:

要求:对于银行而言,若将一个没有风险的客户判断为有风险的,银行只是损失了一个客户;但若将一个有风险的客户判断为没有风险的,这将面临贷款难以收回的后果。后者的危害远大于前者,所以在评价模型好坏时要考虑到这一点。

实际应用:常见的机器学习算法在分类时往往直接把样本进行了分类,即报告某一用户属于风险低的一类还是风险高的一类。我们可以在此基础上进一步分析用户所属类别的概率,结合评分卡的知识,建立用户信用得分的模型体系,通过用户的信用得分来进一步分析用户的信用情况。

dde2c35a81b14c0c9d71428aea5834eb

2.数据预处理

我们使用的数据来自UCI提供的机器学习公开数据集中的德国信用数据集,它包含1000条贷款申请记录,其中700条是信用好的客户,300条是信用差的客户。 原始的数据由19个属性描述,官方使用独热编码将其中标称属性转换为虚拟变量,转换后的每条记录由24个属性描述,保存于网页上的german.data-numeric.txt文件中。

首先,对数据的分布情况进行分析,数据中信用好的客户数据有700条,信用坏的客户数据只有300条,数据类别明显分布明显不均衡,而这种类不平衡的数据将会对模型的训练有直接影响。

这里举个简单例子说明一下造成影响的原因:极端一点,例如我们的样本中有100条数据,其中正类99条,负类1条,训练过程中若模型把所有样本都分为正类,虽然将负类分错了,但损失其实很小,精度达到了99%,模型也不必再训练下去。这样得到了精度高达99%的模型,但却不能区分出负类,没有实际意义。所以我们在训练时,样本中各个类别的数量越平衡越好。对于类别不平衡的问题,目前主要的思路有三种:

调整阈值:在预测样本类别时,一般要求计算样本属于某一类别的概率,例如计算样本属于正例的概率,通常取阈值=0.5,即认为样本属于正例的概率大于0.5样本为正例,小于0.5样本为负例。但若样本数据本身是不平衡的数据,应该根据正负样本的比例调整阈值,而不再固定为0.5。

欠抽样:从样本量多的类别中随机抽取部分数据和样本量小的类别组合形成新的数据集,即减少样本量大的类别的数据量。实际应用中常常多次抽取,每次抽取组合的数据集训练一个模型,最终结果通过综合多个模型来确定。但这一方法损失了一些数据信息,并且改变了数据的原始分布,精度可能会有所降低,适用于数据量很大的情况。

过抽样:通过一些算法对样本量小的类别是数据进行补充,再和样本量大的类别的数据组合形成新的数据集,即增加样本量小的类别的数据使样本类别达到平衡。常用的算法为SMOTE算法,这一算法精度很高,在学术界和工业界应用较多。但这一方法容易造成过拟合,实际应用中应搭配正则化以防止过拟合。

9926e0598bab415fb4c7982bc049def8

基于上述SMOTE算法的理论,我们对原始数据用SMOTE算法进行过抽样以得到类别平衡的数据,并将过抽样后的数据的按照4:1的比例分成训练集和验证集,再进行之后的模型训练。

77a41191355b4798a33c9342886f8e9a

由于此时1000条数据划分训练集和预测集时并未设置随机种子,这是随机划分,每次划分出来的训练集和验证集所包含的样本可能不会完全一样,所以大家用同样的代码跑出的结果可能存在细微差异。本文所用到的数据和代码都可以在笔者的github上获取(https://github.com/Johnyee94/2019blog1.git)。

dde2c35a81b14c0c9d71428aea5834eb

3.XGBoost训练模型

准备好数据之后,我们使用XGBoost算法来训练模型,XGBoost是一种集成了多棵决策树的加法模型,拥有很高的精度和使用率;同时又引入了正则化项,防止模型过拟合;并且加入了CPU的多线程进行并行运算,极大提高了运算速度。XGBoost算法分步骤优化目标函数,首先对初始数据建立第一棵树,完了之后以第一棵树的残差为数据再建立第二棵树,再以第i-1棵树的残差为数据建立第i棵树,直至建立完t棵树,再根据所有树的结果相加输出最后结果。该算法原理的简要介绍如下:

add21a3a8a0d4dd584b55c9aded75f18
dcc5a596c5be419bbb8f106f11d5acb6

树的节点时,根据特征的分布取其分位点作为分割的候选点,再计算每个特征被它所对应的所有候选分割点分割后的信息增益值Gain,最大的Gain所对应的特征和候选分割点就是这个节点的最优特征和最佳分割点,再按此方法继续分割。其中,Gain定义如下:

57ade5be262e4e799d505b398bf5a923

至此,我们把XGBoost的理论介绍完了,现在将使用该算法来训练本文的数据,在训练过程中需要对参数进行调整,以得到最优的参数。一般来说,我们调节的主要参数如表1所示:

f63ed4d5d2de40f7ba5335c7afcb6c57

本文使用xgboost包来训练模型,并结合sklearn包的网格搜索函数来寻找最优参数。调参时,先给每个参数一个固定的取值,再给出需要调节的参数的取值范围同时保持其他参数值不变,由此计算该参数的不同取值下模型的AUC评分,最大的AUC分数对应的参数值即为该参数的的最优取值,将此时的最优参数值替代模型中该参数的给定值再按此方法进行下一个参数的调节。按上述方法得出的最优参数如表2所示:

a824577936d44cf7bee0f371d54667fe

我们从上述调参顺序的模型得分可以看出,从最开始的learning_rate到colsample_bytree,模型的得分一直在上升,这说明随着最优参数的不断调节模型模型越来越好。到reg_alpha和eg_lambda这里,模型得分有些下降,这是因为我们调节了L1正则化和L2正则化的最优参数来防止模型过拟合,所以得分有些下降。我们将各个参数的最优值输入到模型中去,以此得到最优模型,接下来用包含最优参数的XGBoost模型对预测集数据进行预测和精度评价。

我们使用剩下的20%数据作为验证集来验证模型的精度。不过这里一定要注意的是,对于银行而言,若将一个没有风险的客户判断为有风险的,银行只是损失了一个客户;但若将一个有风险的客户判断为没有风险的,这将面临贷款难以收回的后果。后者的危害远大于前者,所以在评价模型好坏时不能使用常用的错误率,这里我们推荐使AUC值和代价敏感错误率作为评价指标。

AUC值实际就是ROC曲线的面积,它是一种独立于类别分布的评价指标,比较适用于评价类别不平衡学习问题,关于AUC的介绍已经很多了,这里不再详述。代价敏感错误率E(以二分类为例)的定义如下:

03e4d24ab4f448ecb68e817b04a29967

图1 预测结果的混淆矩阵图

预测结果的AUC值和代价敏感错误率E的平均变化幅度如表3所示:

表3 预测结果精度评价表

9a4cd51ab7de48e59197bb6b265299eb

由此我们看到,XGBoost模型的AUC=0.901,这说明模型精度很好。随着k的变化,代价敏感错误率E=0.086变化幅度很小,这说明XGBoost的误判主要表现在将信用好的用户判断为信用差的,而将信用差的用户误判为信用差好的情况较少;并且从混淆矩阵也可以看出,模型将信用好的用户判断为信用差的误判人数比将信用差的误判为信用好的人数多了9个,这都说明模型在误判时更倾向于将信用好的误判为信用差的。综合来看,XGBoost模型不论是从精度还是误判来看表现都很好。

dde2c35a81b14c0c9d71428aea5834eb

4.用户信用评分

由于通常情况下我们一般都是根据模型输出的用户类别的预测值来直接判断用户所属的类别,例如用户属于信用好或信用差。但模型在做判断时往往是根据用户所属类别的概率来判断的,例如用户属于信用好的类别概率为0.55,属于信用不好的类别概率为0.45,这时模型给出的结果是该用户信用好,但实际这样的判断在银行这种需要非常强的风险管控的的行业是有点武断的。

所以在金融行业中我们不仅可以使用模型给出的用户的类别的信息,还可以将模型中用户所属类别的概率利用起来,将这一概率与银行的信用评分卡相结合,不仅判断用户的信用类别,还可以建立用户信用评分体系。

在用户信用评分体系中,设违约的概率为p,则正常的概率为1-p,违约与正常的概率比odds=p/1-p,从而定义评分卡的刻度:score=A-Blog(odds)

a33161becfb94e23889a6c5c909ca451

计算出的信用分值概况如表4所示,信用分值分布表5所示,其中风险客户比率值指60分以下的用户占比。

参考资料:

[1]Chawla N V , Bowyer K W , Hall L O , et al. SMOTE: Synthetic Minority Over-sampling Technique[J]. Journal of Artificial Intelligence Research, 2011, 16(1):321-357.

[2]Chen T , Guestrin C . XGBoost: A Scalable Tree Boosting System[C]// Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM, 2016.

[3]周志华.机器学习[M]北京:清华大学出版社,2016.

[4] (美)Mamdouh Refaat著.信用风险评分卡研究[M].王奇松等译.北京:社会科学文献出版社2013.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值