R语言基于决策树的银行信贷风险预警模型

2021-06-15 19:51:42 浏览数 (1)

原文链接:http://tecdat.cn/?p=2783

引言

我国经济高速发展,个人信贷业务也随着快速发展,而个人信贷业务对提高内需,促进消费也有拉动作用。有正必有反,在个人信贷业务规模不断扩大的同时,信贷的违约等风险问题也日益突出,一定程度上制约着我国的信贷市场的健康发展。

挑战

近年来,个人消费贷款的类型呈现出多元化的变化与发展,由原本的单一贷款种类发展到今天各式各样的贷款种类,汽车按揭贷款,教育助学贷款,耐用消费品贷款(家电,电脑,厨具等),结婚贷款等在我国陆续开展。违约风险是指债务人由于各种原因不能按时归还贷款债务的风险,对于商业银行来说,违约风险主要是指由于贷款人得还款能力下降或者信用水平降低从而违约。

决策树

决策树(Decision Tree)是用于分类和预测的主要技术,它着眼于从一组无规则的事例推理出决策树表示形式的分类规则,采用自顶向下的递归方式,在决策树的内部节点进行属性值的比较,并根据不同属性判断从该节点向下分支,在决策树的叶节点得到结论。因此,从根节点到叶节点就对应着一条合理规则,整棵树就对应着一组表达式规则。决策树是数据分析中一种经常要用到且非常重要的技术,既能够用于数据分析,也能够作预测。基于决策树算法的一个最大的优点是它在学习过程中不需要使用者了解很多背景知识,只要训练事例能够用属性即结论的方式表达出来,就能使用该算法进行学习。

基于决策树的分类模型有如下几个特点:(1)决策树方法结构简单,,便于理解;(2)决策树模型效率高,对训练集数据量较大的情况较为适合;(3)树方法通常不需要接受训练集数据外的知识;(4)决策树方法具有较高的分类精确度。

预警方案设计

数据在进行操作的过程中,我们一共分了四步,分别是数据分析和分离数据集,建立训练数据集决策树,评估模型性能,提高模型性能。

数据分析和分离数据集

在数据进行分析时,可以从中知道所有申请者的违约情况在分离数据集这一步,我们将数据分成两部分:用来建立决策树训练数据集和用来评估模型性能的测试数据集,按照80%训练集和20%测试集来分离样本。总的来看,这两个数据集的比例是大致相同的,所以分离的两个数据集是合理的。

训练数据集

测试数据集

违约

不违约

违约

不违约

0.31625

0.68375

0.235

0.765

25300

54700

4700

15300

表1

建立训练数据集决策树

图1

图1是训练数据集决策树的基本情况。

图2

图2是训练数据集的部分决策树。

由于我们我们的数据庞大,生成的决策树非常的大,上图的输出显示了决策树的部分分枝,我们用简单的语言来举例解释前五行:

(1)如果支票账户余额是未知的,则归类为不太可能违约。

(2)否则,如果支票账户余额少于0,或者1〜200之间;

(3)月贷款期限少于或等于11个月的

(4)信用记录是危及,好的,优秀的,差的,归类为不太可能违约。

(5)信用记录是非常优秀的,就归类为很有可能违约。

括号中的数字表示符合该决策准则的案例的数量以及根据该决策不正确分类的案例的数量。

在决策树中我们不难发现,为什么一个申请者的信用记录非常优秀,却被判成很有可能违约,而那些支票余额未知的申请者却不太可能违约呢?这些决策看似没有逻辑意义,但其实它们可能反映了数据中的一个真实模式,或者它们可能是统计中的异常值。

在决策树生成后,输出一个混淆矩阵,这是一个交叉列表,表示模型对训练数据错误分类的记录数:

众所周知,决策树有一种过度拟合训练数据模型的倾向,由于这个原因,训练数据中报告的错误率可能过于乐观,因此,基于测试数据集来评估决策树模型是非常重要的。

评估模型性能

在这一步中使用测试数据集做预测,结果如图3所示。

实际值

预测值

行合计

不违约

违约

不违约

125000.625

28000.140

15300

违约

23000.115

24000.120

4700

列合计

14800

5200

20000

表2

从表2中可以得知,在测试集样本中,实际不违约被判为不违约的数量,占比为0.625;实际不违约被判为违约的数量,占比为0.140;而实际违约被判为不违约的数量占比为0.115;实际违约被判为违约的数量,占比为0.120。

从银行角度出发,申请人实际不违约被判为违约的影响远没有实际违约被判为不违约的影响大。原因有以下几点:一,申请人实际不违约被判为违约,银行可能不会通过贷款申请,从而不发放贷款,这样银行不会遭受贷款发放出去却收不回来的风险,只是少收部分贷款利息而已。二,申请人实际违约被判为不违约,银行可能会同意申请人的贷款申请同意发放贷款,在发放贷款后,被判为不违约的申请人可能会因为缺乏诚信,不遵守合约规定按时还款,这样银行不仅损失了利息的收入,连本金都有可能收不回来三,在测试数据集数据中,实际不违约的数量,占比0.183;而实际违约的数量,被判为不违约的数量,占比0.489。

由以上三点可以得出结论,基于训练测试集得出的模型,用测试数据集中的数据进行检验,最终出来的结果并不是很好。从银行角度出发,如果使用该模型引用到实际生活中,会因为申请人实际违约被误判为不违约的概率太大,而使银行做出错误的决定,从而产生损失。

模型优化方案 - 增加迭代次数,代价矩阵

由上面的评估模型性能可以得知,基于训练数据集得出的模型不太理想,因此我们来提高模型的性能。

1,迭代10次

首先我们选择使用迭代10次的方法进行对模型性能的提高。

实际值

预测值

行合计

不违约

违约

不违约

133000.665

20000.100

15300

违约

23000.115

24000.120

4700

列合计

15600

4400

20000

表3

由表3可以知道经过10次迭代,实际违约被判为不违约的数量占比0.115,与训练数据集的模型相比没有变化;而实际不违约被判为违约的数量,占比0.100。

从银行角度出发,这次的模型性能提高没有很大的实际意义,因为影响银行是否亏损的最主要因素是看实际违约被判为不违约的比重,而这次的性能提高并没有减少实际违约被判为不违约的数量,所以我们还要继续提高模型的性能。

2,迭代100次

根据上面的步骤知道,迭代10次出来的模型效果并不是很好,所以我们在这一步进行迭代100次的操作。

实际值

预测值

行合计

不违约

违约

不违约

129000.645

24000.120

15300

违约

24000.120

23000.115

4700

列合计

15300

4700

20000

表4

经过迭代100次的过程出来的结果由表4所示,与训练数据集的结果图相比,由此可以看出该次模型性能的提升没有较大效果。

3,代价矩阵

由于上述两次操作均没有使得模型的性能得到较大的提升,所以在这一步我们决定采用代价矩阵的方式来进行。

这里我们假设将一个违约用户错误的分类为不违约相比于将不违约用户错误的分类为违约来说,前者相较于后者会给贷款方造成4倍的损失,故代价矩阵为:

上述矩阵行表示真实值,列表示预测值,第一列和第一行代表不违约,第二列和第二行代表违约。假如该算法正确分类时,则没有分配代价。图6是加入代价矩阵的模型分类结果汇总。

实际值

预测值

行合计

不违约

违约

不违约

76000.380

77000.385

15300

违约

10000.050

37000.185

4700

列合计

8600

11400

20000

表5

相较于前面的结果,在加入代价矩阵后的模型效果不错,在实际违约被判为不违约的比例上得到了较大程度的下降。

图3

图3是测试数据集的部分决策树。

建议

现今,我国的生活水平逐步提升,个人的消费水平也跟着上升,但仍有很多人的工资薪酬涨幅跟不上消费的增长,就会从商业银行贷款作为经济生活维持,已提升自己的生活水平,不仅是车辆按揭贷,房产按揭贷款,教育助学贷款,耐用消费品贷款,结婚贷款等在我国陆续开展,数量与规模也越来越庞大。商业银行要从贷款中获利,就必须加强对于贷款的风险管理,在进行单一评估的同时从大量规律中获取经验,对于人力无法理解的大规模数据,就需相关研究来获取有用的规律,帮助商业银行及其他金融机构做出决策,而决策树对银行及金融机构来说就是一种很好的决策管理方法。

通过决策树的每一个子节点可以看出哪一个自变量会对贷款违约有多大的影响,从而商业银行可以更加的关注客户的这一方面,在这方面严格把关。算法能够为影响较大的错误分类进行误判代价值的设定,从而使模型在这类误判中的增加重视,降低这类错误发生的概率。假设银行将实际上不违约的客户判成了违约,银行仅仅是少获得几笔贷款的利息,不至于把整笔贷款都亏掉变成坏账;但假如银行使用了这种算法,对客户的违约可能性做出更为准确的判断,便能减少银行对实际违约的客户错判成不违约的情况,降低银行出现贷款无法追收的情况。

0 人点赞