用决策树识别信贷风险
一、概述
决策树的准确性高,广泛的应用于信贷业中,本文以C4.5决策树建立一个信贷违约预测模型。
数据来源:数据来自Packt出版社credit.csv.
另一下载地址:
链接:https://pan.baidu.com/s/1rvl1z5xFCGjDSEascmnK3A 提取码:h8j3
二、建模前准备
2.1数据导入和探索
rm(list = ls())
gc()
setwd("D:")
data<-read.csv("credit.csv")
str(data)##1000*21
names(data)
summary(data)
#分类变量的探索
table(data$checking_balance)
table(data$savings_balance)
table(data$default)
#数值变量的探索
summary(data$months_loan_duration)
summary(data$amount)
数据1000条记录,21个特征
2.3 划分数据集
数据划分
set.seed(123)
data_sample<-sample(1000,900)#向量
str(data_sample)
data_train<-data[data_sample,]
data_test<-data[-data_sample,]
prop.table(table(data_train$default))
prop.table(table(data_test$default))
三、建立模型
#建模
library(C50)
data_model<-C5.0(data_train[-17],data_train$default)
str(data_train$default)
data_train$default<-as.factor(data_train$default)
str(data_train$default)
data_model<-C5.0(data_train[-17],data_train$default)
data_model#产生了54颗树
summary(data_model)#查看信息
四、模型评估
#评估模型性能
data_pred<-predict(data_model,data_test)
library(gmodels)
CrossTable(data_test$default,data_pred,prop.chisq = FALSE,prop.c = FALSE,
prop.r = FALSE,dnn = c('actual default','predicted default'))
五、模型性能提升
5.1 增加boosting算法提高性能
#1.增加boosting算法提高性能
data_boost10<-C5.0(data_train[-17],data_train$default,trials = 10)#10是一个事实标准数字
data_boost10#生成10颗树
summary(data_boost10)
data_boost_pred10<-predict(data_boost10,data_test)
CrossTable(data_test$default,data_boost_pred10,prop.chisq = FALSE,prop.c = FALSE,
prop.r = FALSE,dnn=c('actual default','predicted default'))
CrossTable(data_test$default,data_boost_pred10,dnn=c('actual default','predicted default'))
5.2 增加代价矩阵提高性能
#2.增加代价矩阵提高性能
matrix_dim<-list(c("no","yes"),c("no","yes"))
names(matrix_dim)<-c("predicted","actual")
matrix_dim$predicted
error_cost<-matrix(c(0,1,4,0),nrow=2,dimnames = matrix_dim)
error_cost
#增加代价矩阵建立模型
data_cost<-C5.0(data_train[-17],data_train$default,costs = error_cost)
data_cost_pred<-predict(data_cost,data_test)
CrossTable(data_test$default,data_cost_pred,prop.chisq = FALSE,prop.c = FALSE,
prop.r = FALSE,dnn=c('actual default','predicted default'))