R语言学习#2-使用C5.0决策树识别高风险银行贷款

目录

使用C5.0决策树识别高风险银行贷款

实验目的

实验要求

实验原理

实验仪器、设备、材料或软件等

实验内容及步骤

一、环境准备

二、收集数据

三、数据预处理

载入数据文件

查看数据字段定义

看支票余额的分布情况

查看存款余额的分布情况

查看货款期限的月分布情况

查看贷款金额的分布情况

违约分布情况

生成随机数

随机排序样本

拆分出训练集和测试集

检查训练集和测试集的类别分布

四、训练模型

安装C5.0算法包

加载算法库

建模(属性+类别)

查看模型

查看模型性能(训练样本)

五、评估模型

使用测试集样本进行预测

安装和加载混淆矩阵支持包

使用测试集进行评估

六、优化模型

建模(属性+类别)

查看模型

查看模型性能(训练样本)

使用测试集样本进行预测

使用测试集进行评估

七、预测新案例

读取新样本(部署预测)

预测

显示预测结果

end


使用C5.0决策树识别高风险银行贷款

实验目的

根据银行过去的历史数据,包括贷款者的主要特征、贷款金额、是否违约等数据样本,建立决策树模型,用于预测新样本是否可以贷款

实验要求

1、利用已发生的1000多条数据样本,20个条件属性包括支票余额、期限、信用记录、用途、贷款金额、储蓄余额、工作年限、利率、个人状态、债务、居住时间、财产、年龄、还贷计划、住房、信用卡数量、主从卡、有无电话、是否老外、工作;1个结论属性:是否违约。建立决策树分类模型;

2、对于新样本,根据准备贷款人的特征,预测输出审批通过或拒绝。

实验原理

基于R语言与数据样本,建立决策树模型。对模型进行训练、评估和优化。

实验仪器、设备、材料或软件等

1、Windows环境

2、R 3.6.3 安装

3、Rstudio 安装

已装跳过

实验内容及步骤

一、环境准备

  • Windows 环境
  • R3.6.3 安装
  • RStudio 安装

二、收集数据

  • 训练样本和测试样本(文末有链接)
  • 将数据文件放入目录

三、数据预处理

  • 载入数据文件

credit <- read.csv(“credit.csv”)

  • 查看数据字段定义

str(credit)

  • 看支票余额的分布情况

使用指令“table(credit$checking_balance)”,可以看到数据存在四个区间:“< 0 DM”、“> 200 DM”、“1 – 200 DM”和“unknown”。可见,其中有存款,说明风险较低。其中DM是德国马克,一种货币。

  • 查看存款余额的分布情况

“table(credit$savings_balance)”查看存款余额的分布情况,可见五个区间:“< 100 DM”、“101 – 500 DM”、“501 – 1000DM”、“> 1000 DM”和“unknown”。说明银行有存款,贷款风险低。

  • 查看货款期限的月分布情况

使用“summary(credit$months_loan_duration)”可以查看贷款期限的月分布情况

从数据中可以得知:最小值、第一四分位数、中位数、平均数、第三四分位数和最大值。可见其中Mean平均数(20.9)大于Median中位数(18.0),而第三四分位数(24.0)也大于中位数(18.0),则说明数据呈右偏分布,属于中存在一些较大的极端值。

通过直方图可以更好地观测数据“hist(credit$months_loan_duration)”:

从图中可以看出,数据中存在两个较大的极端值。

  • 查看贷款金额的分布情况

使用指令“summary(credit$amount)”查看贷款金额的分布情况。从结果中可以看出Mean > Median,数据呈右偏分布。直方图如下:

  • 违约分布情况

查看违约的分布情况,可以看出数据中是否违约的数量,其中1为正常、2为违约,那么也就是有30%的违约率。

  • 生成随机数

设置随机种子“set.seed(12345)”。

  • 随机排序样本

“Credit_rand <- credit[order(runif(1000)),]”,其中runif返回0`1之间1000个数;order按1000个数排列大小并返回位置。

  • 拆分出训练集和测试集

训练集“credit_train <- credit_rand[1:900,]”:

测试集“credit_train <- credit_test[901,1000,]”:

图片所示只是其中一部分。

  • 检查训练集和测试集的类别分布

分别使用指令“prop.table(table(credit_train$default))”和“prop.table(table(credit_rest$default))”来查看训练集和测试集的类别分布,可见两者均接近原始比例。

四、训练模型

  • 安装C5.0算法包

install.packages(“C50”)

  • 加载算法库

library(C50)

  • 建模(属性+类别)

将类别转换为因子形式(default列中存在的yes或no转换):

credit_train$default <- as.factor(credit_train$default)

生成模型,排除结论属性

Credit_model <- C5.0(credit_train[-17],credit_train$default)

  • 查看模型

credit_model

  • credit_model:这是创建的C5.0分类模型的对象或名称。
  • Call:这是模型的调用信息,显示了模型的构建方式。在这里,它指明了使用了C5.0算法,对credit_train[-17](即去掉第17列的特征)进行分类,目标变量是credit_train$default。
  • Classification Tree:这表明构建的是一棵分类树,用于将数据分为不同的类别。
  • Number of samples:这表示模型训练时使用的样本数量,这里是900个样本。
  • Number of predictors:这是指模型用于进行分类的预测变量(特征)的数量,这里是20个。
  • Tree size:这是生成的分类树的大小,即树中的节点数目,这里是57个。
  • Non-standard options:这是一些非标准选项的提示信息,其中包括“attempt to group attributes”,这可能是指模型在构建树时尝试将某些属性(特征)进行分组或处理。

  • 查看模型性能(训练样本)

summary(credit_model)

这里,树的大小为57,产生了127个错误,错误率为14.1%,则训练集准确度为85.9%。

五、评估模型

  • 使用测试集样本进行预测

Credit_pred <- predict(credit_model,credit_test)

  • 安装和加载混淆矩阵支持包

install.packages(“gmodels”)

library(gmodels)

  • 使用测试集进行评估

CrossTable(credit_test$default,credit_pred,prop.chisq = FALSE,prop.c = FALSE,prop.r = FALSE,dnn = c('actual default','predicted default'))

从得出的交叉表中可以看出,在实际贷款违约状态为1(违约)的68个样本中,模型正确预测为1的有54个,模型错误预测为2的有14个。

  • 54个被正确分类为违约,占了实际违约总数的0.540(54%)。
  • 14个被错误分类为不违约,占了实际违约总数的0.140(14%)。

在实际贷款违约状态为2(不违约)的32个样本中,模型正确预测为2的有21个,模型错误预测为1的有11个。

  • 21个被正确分类为不违约,占了实际不违约总数的0.210(21%)。
  • 11个被错误分类为违约,占了实际不违约总数的0.110(11%)。

那么测试集的准确率为:54% + 21% = 75%。

六、优化模型

采用集成学习的方法,进行优化;本次使用AdaBoosting方法,简单说就是生成多颗决策树,对结果进行投票,准确率更高;生成多棵树的输入依据是样本权值的不同,每次迭代后对判断错误的样本升高权重。(Adaptive Boosting,自适应增强)

  • 建模(属性+类别)

生成模型,排除结论属性。

credit_boost15 <- C5.0(credit_train[-17],credit_train$default,trials=15)

  • 查看模型

credit_boost15

  • 查看模型性能(训练样本)

summary(credit_boost15)

  • 使用测试集样本进行预测

credit_pred_boost15 <- predict(credit_boost15,credit_test)

  • 使用测试集进行评估

CrossTable(credit_test$default,credit_pred_boost15,prop.chisq = FALSE,prop.c = FALSE,prop.r = FALSE,dnn = c('actual default','predicted default'))

由图可知,在实际贷款违约状态为1(违约)的68个样本中,模型正确预测为1的有61个,模型错误预测为2的有7个。

  • 61个被正确分类为违约,占了实际违约总数的0.610(61%)。
  • 7个被错误分类为不违约,占了实际违约总数的0.070(7%)。

在实际贷款违约状态为2(不违约)的32个样本中,模型正确预测为2的有19个,模型错误预测为1的有13个。

  • 19个被正确分类为不违约,占了实际不违约总数的0.190(19%)。
  • 13个被错误分类为违约,占了实际不违约总数的0.130(13%)。

综上,测试集准确率:61% + 13% = 80%

七、预测新案例

  • 读取新样本(部署预测)

credit_new <- read.csv(“credit_new.csv”)

  • 预测

credit_pred_boost15_results <- predict(credit_boost15,credit_new)

  • 显示预测结果

credit_pred_boost15_results

其中,Levels为1表示违约,为2表示不违约。

那么,也就是说针对新样本中的数据,模型得出结果针对1可以进行贷款,而针对2则不能进行贷款。

end

文中数据:

链接:https://pan.baidu.com/s/11o4YASVH_5opamlsGaaF_Q?pwd=5eo4
提取码:5eo4

学习记录,勿喷。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值