机器学习与网络信贷那些事
注:1. 本文源自笔者 2020年本科毕业论文,已收录在兰州大学图书馆。本文旨在分享学习,请勿作他用
项目简介
-
项目旨在利用机器学习算法,试图通过对网贷平台现有数据的分析,对借贷交易进行预测,判断借款客户违约还款的可能性,为相关网络平台提供借鉴方案,以此减少平台与客户的潜在损失,维护网络贷款交易的安全性
-
首先使用 Python 爬虫从 P2P 网贷平台上获取了 1726 条借贷数据,其中违约数据 571 条,未违约数据 1155 条。接着使用了决策树、支持向量机,线性判别分析来处理网贷违约与否的二分类问题,并且创新性的对线性判别分析法进行了改进,提升了模型性能
-
相关代码使用 Python 语言进行编写,采用十折交叉验证法训练模型,对借款人会否违约进行预测,最终通过 4 种模型的对比,发现改进后的线性判别分析法是处理网贷违约风险预测的最佳分类决策方案 .
-
项目相关结论如下:还款期限、年利率、还清笔数、信用额度等特征对违约预测有相当程度的影响,特别是还款期限 30 月以内,年利率高于 10.9% 的借贷交易很可能发生违约. 与之相反,性别、学历和房贷对违约的影响很小 .
数据分析
经过查阅,近几年人人贷发布的散标多数仍在还款中,而 2016 年初发布的散标都已在 2019 年或之前经过了结算,因此本文选择该时间段前后的散标数据进行收集. 我们从散标号为 NO. 73**** 至 NO. 80**** 和 NO. 200**** 至 NO. 203****( 具体编号这里就不公布了 ) 的 108545 个借贷交易数据中检索得到散标状态为 “ BAD_DEBT ” 的 575 条数据,其余数据的散标状态绝大多数为 “ CLOSED ” 和 “ FAILED ”,以 “ CLOSED ” 居多,其中状态 “ BAD_DEBT ” 代表借款人已违约,“ CLOSED ” 代表借款人已按时还清借款本息,而 “ FAILED ” 代表散标已流标、借贷交易未成功,并不在本文研究范围内. 显然,违约数据与未违约(按时还清)数据数量差距很大,属于类别严重不平衡,若直接进行学习可能导致较大误差,甚至可能由于数量太少被当做噪声处理. 因此我们选择欠采样方法,从上述散标范围中随机抽取了 1200 条未违约数据. 经过筛选,剔除缺失值较多的样本,最终得到了违约与未违约比例为 1:2 的数据样本集,其中违约数据 571 条,未违约数据 1155 条,总计 1726 条数据. 数据部分信息如下
抓取的部分借贷交易信息样本已上传至 github,现对信息中各变量的处理如下.
进一步地,对借贷人信息进行分析,如图 1,我们发现数据集中 2015 年 9 月至 2016 年 6 月的借贷人大多数为男性(76.65%),仅 23.35% 为女性. 年龄以 30-50 岁的中年客户居多,少量青少年与老年. 在婚姻状况方面,65.99% 的用户已婚,25.14% 未婚,8.57% 离异,其余为丧偶. 借贷人的收入水平也参差不齐, 1001-2000 元的占0.23%,2000-10000 元的客户占据了大多数,高达 70.74%,收入 10000 元以上的占 29.03%. 至于工作时长,工作了 1 年 (含) 以下的用户占比 20.10%,1-3 年 (含) 的占 26.71%,3-5 年 (含) 的占 13.90%,工作长达 5 年以上的占比最高,为 39.28%. 在借款原因中,以短期周转,个人消费居多,占比 69.7%,购车借款最少,仅占 2.5%. 借款金额从数百至数万不等,还款期限则大多大于 12 月以上.
模型性能对比
本文先后使用了 LDA、决策树、SVM 和改进的 LDA 算法训练模型,各项指标表现优良,取得了较好的分类效果. 在得到了 3 种主要模型后,需要对各个模型进行综合评价,以遴选出适合实际问题的最优模型. 结合多种模型评价指标,现将各个模型精确率,召回率,F1,准确率比较如下:
模型名称 | 精确率 | 召回率 | F1 | 准确率 |
---|---|---|---|---|
LDA | 0. 965 | 1. 000 | 0. 982 | 0. 988 |
ID3决策树 | 0. 995 | 0. 991 | 0. 993 | 0. 995 |
CART决策树 | 0. 991 | 0. 988 | 0. 990 | 0. 993 |
RBF核SVM | 0. 988 | 0. 998 | 0. 993 | 0. 995 |
线性核SVM | 0. 998 | 0. 998 | 0. 998 | 0. 999 |
改进LDA | 0. 983 | 1. 000 | 0. 991 | 0. 994 |
综上比较,LDA,决策树和 SVM 三种算法各有所长. LDA 胜在对违约样本进行分类的高正确率,但即便改进了算法,LDA 其他性能仍旧相对较低;决策树可以清晰展现决策过程与划分特征,但单棵树不稳定,数据的微小扰动会改变整体的结构;SVM 拥有很好的综合性能,各项指标表现优秀,但分类过程比较抽象,求解二次规划时需要耗费机器较多存储空间与计算时间.
三种算法各有千秋,差距并不明显,总体而言,各项指标都表现很好,分类效果优良. 不过,本文研究的主要是如何能更准确的对借款人进行是否违约预测,期望可以正确找到所有违约客户. 尽管 LDA 模型可能将一个不违约客户误判为违约客户,但却有着很高的召回率,几乎不会将违约客户预测为不违约,能有效减少贷款机构的损失. 随着交易数量的增加,其他模型预测错误造成的损失不断增多,LDA 这一优势会越加明显. 因此,对 P2P 网贷机构而言,或许 LDA 模型是个更好选择. 同时我们也需要借鉴其他模型的结果,例如,从 SVM 中,我们了解到,性别、学历与房贷对是否违约影响很小,还清笔数、信用额度、还款期限和年利率影响较大,应当有针对性的关注. 而通过 ID3 决策树算法,本文发现,还款期限、年利率、还清笔数、成功借款、信用额度和申请借款等 6 个特征在对于人人贷数据的违约预测当中起到了作用,应特别注重还款期限小于等于 30 月且年利率大于 10. 9% 的借款客户,他们有较大的违约可能.
尽管 SVM、决策树综合性能更好,但是由于违约才是实际生活中更加注重的问题,因此,本文认为,改进后的 LDA 模型更加适合处理网贷违约预测问题. 而在借贷过程中,需要多加注意还款期限、年利率、还清笔数等因素.
LDA算法改进
简述下我对 LDA 算法的改进过程:
对 LDA 过程及其预测结果进行分析:首先对训练集样本标准化后,用 LDA 将样本维数降至 1,所有样本点便分布在了一条直线上. 为便于理解,我们将十折交叉验证产生的十个模型对各自测试集的预测结果显示如下,黄色代表实际违约类,紫色代表实际未违约类,横坐标对应测试集的样本经过 LDA 映射至一维直线上的投影坐标值,纵坐标对应模型预测的类别标记 y y y ( 0 为负类,1 为正类 ).
从图中可以看出,在每次训练集、测试集都不同的情况下,LDA 只是将位于两类边界处的未违约样本点错误预测为了正类,而对违约类的召回率则达到了 100%. 那么,如果我们能在直线上两类的边界区域附近找到一个阈值 e,将所有大于阈值 e 的样本投影点预测为正类,否则预测为负类,是否可以提升 LDA 的精度呢?我们将原本高维样本二分类问题转换成了一维直线上重新寻找划分点的问题. 本文尝试找到一个能提高模型精度的可行解 e . 通过比较图 2,可以发现实际上只需在所有预测为正类的样本中找到一个能将黄色点全部正确分类,并尽可能将紫色点分为负类的点. 为方便进一步分析,我们将每一个图中所有 y_predict = 1 的紫色点的横坐标最大值 Max_0 与所有 y_predict = 1 的黄色点的横坐标的最小值 Min_1 标注出 ( 若紫色点全部分类正确则 Max_0 = 0 ):
序号 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
Max_0 | 2. 797987 | 2. 362996 | 2. 297564 | 4. 140052 | 1. 766931 |
Min_1 | 4. 402662 | 2. 109285 | 2. 116322 | 4. 596135 | 4. 386957 |
序号 | 6 | 7 | 8 | 9 | 10 |
Max_0 | 2. 420875 | 0 | 0 | 1. 605299 | 0 |
Min_1 | 3. 236017 | 3. 593514 | 3. 656769 | 4. 235056 | 3. 361579 |
为保证高召回率且具有一定的泛化能力,阈值 e 应在小于等于 Min_1 中最小项的前提下尽可能的小;同时为了使紫色点尽可能少的被分到正类,阈值 e 不能太小,这里我们选取十个 Max_0 的算数平均 u 作为 e 的一项指标,即:
当 min Min_1 < u 时, e = min Min_1;
当 min Min_1 ≥ u 时,取 e 为 min Min_1 与 u 的中点
结合表 2 数据,求得 u=1.739170 , min Min_1 = 2.109285,取 e =1.924 . 使用 e 进行分类后结果如下
可以发现,改进后 LDA 的分类效果明显增强,错误样本数明显减少. 因此,该算法是可行的. 但上述过程中预测结果与实际样本类别的对比使用了测试集数据的类别标记,现实预测中是无法预先知道待测样本具体类别的,不应令测试集的数据参与模型训练的过程,因而算法应稍加改动为如下过程:
-
将整个数据集按一定比例拆分为训练集与测试集;
-
对训练集使用 K 折交叉验证,即将训练集拆分 K 份,训练出 K 个 LDA 模型;
-
找出每个模型的 Max_0 与 Min_1,进而计算出阈值 e;
-
用整个训练集数据生成新的 LDA 模型,得到投影直线 w;
-
将测试集的样本点投影至直线 w上;
-
用阈值 e 对样本投影点进行分类.
我们用新算法将数据集按 9:1 随机分为训练集与测试集,并对训练集进行十折交叉验证,将求得的阈值 e 用于对测试集分类,最终结果如表 3.
改进 LDA 算法 | ||
---|---|---|
实际\预测 | 正类 | 负类 |
正类(违约) | 57. 0 | 0. 0 |
负类(未违约) | 1. 0 | 115. 0 |
模型精确率为 0. 983,召回率为 1. 000,F1值为 0. 991,准确率为 0. 994,各项指标都较原 LDA 有所提高. 不过,该算法虽然可以在保持原 LDA 高召回率的基础上,提升其他各项精度,但是阈值的求解主要通过计算机实现,并不能得到具体的数学表达式,更重要的是,算法仅适用于特定数据集,对于更宽泛的数据来源,有效性仍有待验证.
项目结论
本文基于前人的研究成果,通过人人贷网贷平台的数据,对借款人是否会违约进行了预测,先后使用了 LDA、决策树与 SVM 三种算法训练预测模型,并针对 LDA 算法进行了尝试性改进,经过各项指标权衡,最终选择改进后的 LDA 算法作为最优模型.
在训练模型的过程中,本文得到了如下结论:
-
经过多个模型拟合数据、对比结果,从精确度,召回率,F1值,准确率各方面考量,结合网贷实际情况,本文认为改进的 LDA 模型更加适合处理贷款违约预测问题.
-
根据决策树及 SVM 训练结果,我们发现还款期限、年利率、还清笔数、信用额度等特征对违约预测有相当程度的影响,特别是期限三年以内,年利率较高的贷款较容易发生违约. 与之相反,性别、学历和房贷的影响很小. 相关人员可以加以关注、借鉴.
-
SVM 整体性能最佳,对于更加重视模型总体指标的机构或者借贷交易量较少的小型网贷机构可以优先考虑选择线性 SVM 进行相应业务预测.
本文各个模型取得较高精度的原因:
-
在数获取的过程中,本文使用了爬虫从平台官网采集样本,官方公布的数据经过了平台方面的必要处理,使得数据更加规整.
-
样本多数特征在经过初步筛选后,本身便与个人财务有着直接相关性,与客户是否借贷、会否违约有较强关联.
-
训练模型前对数据进行了标准化,使得各个特征的权重相对均衡,不会因为某些特征在初始数据样本中比重更大而影响了其他特征的分类作用.
纵观整个研究过程,本文也存在以下不足:
-
采集的样本数量较少,噪声对模型有一定程度的影响,训练过程中可能将噪声的特点也学入了模型,影响最终结果.
-
虽然使用十折交叉验证尽可能的减少了模型的偶然性与意外性,但对于是否存在过拟合问题,本文未进行深入探查.
-
在使用 LDA 与 SVM 相关算法时,需要各个特征之间是相互独立的,而本文在默认样本数据满足这一条件的基础上进行了相关训练,虽然最终结果良好,但过程并不严谨. 文中没有进行特征非线性相关性的检测,我们无法断言散标样本的特征之间完全独立.
-
在决策树算法中,每一次交叉验证得到的树结构都不完全相同,即树不够稳定,可以使用随机森林或其他集成方法训练出更加稳定、准确的模型.
对于本文使用的研究方法,事实上还有一些可以进一步提高模型精度的方法,比如利用决策树得到的 6 个划分变量再结合 SVM 或 LDA 进行更细致的预测,但由于现有模型精度已足够,过于追求更高的性能看起来锦上添花,但耗费了资源却没有取得明显效果,实则画蛇添足,也有悖奥卡姆剃刀原理.
随着科学的蓬勃发展,机器学习算法也在不断创新、完善,但不论如何变化,机器学习的初衷是不变的——利用机器强大的运算能力,结合恰当的计算方法更好地解决实际问题,造福人类社会. 基于这一理念,我们应具体问题具体分析,因地制宜,因时而定,不同的场合使用不同的算法,正确灵活地运用算法解决实际问题,才能让机器学习在人们生活中大放异彩.
本文详情可见笔者github:https://github.com/YJY-1997/machine-learning-about-online-debt-
希望这篇文章能给读者们带来收获!