信用风险预测

 

        应用背景:银行中可能存在有信用风险的客户,通过以往积累的一些数据(包括贷款情况、家庭信息、工作等信息)描述客户特征,并与客户信用情况建立关联

        使用算法:随机决策森林(在对特征信息进行初步分析处理后,用随机森林算法得到最优特征建立模型)

 

一:分析客户特征

  1. Utils.R文件中存放函数用于分析以及可视化数值型特征、因子型特征。

 

        Credit_analysis.R分析客户特征:客户信用评级credit_rating: 1为有信用;0为缺乏信用

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zeofi1-6Zeo,size_12,color_FFFFFF,t_70,g_se,x_16

 

        分析特征balance:账户余额

1:没有银行账户

2:账户没有余额

3: 账户余额

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zeofi1-6Zeo,size_20,color_FFFFFF,t_70,g_se,x_16

用列联表查看balance与rating的关系并可视化后,发现二者有关联

        分析特征months:贷款月数(客户欠款时间的中位数高的,信用更差)

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zeofi1-6Zeo,size_17,color_FFFFFF,t_70,g_se,x_16

        分析特征previous_payment:过去的贷款偿付情况(1表示偿贷有问题)

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zeofi1-6Zeo,size_20,color_FFFFFF,t_70,g_se,x_16

有上面的列联表可以看出偿贷有问题的客户更可能有信用问题

        分析特征purpose:贷款用途(1.买新车2.买二手车3.买家庭用品4.其他)

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zeofi1-6Zeo,size_20,color_FFFFFF,t_70,g_se,x_16

可以看出用于买家庭用品和其他用途的客户信用相对较差,但并不是特别明显

        分析特征credit_amount:贷款额

由下图看出信用较差的客户贷款的金额相对更高

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zeofi1-6Zeo,size_17,color_FFFFFF,t_70,g_se,x_16

        分析特征savings:存款(1:没有存款)

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zeofi1-6Zeo,size_20,color_FFFFFF,t_70,g_se,x_16

            从列联表中可以看出没有存款的客户的信用情况更差

……对所有特征分析处理后,将变换后的特征数据集保存为credit_dataset_afterP.csv

 

二:将处理后的数据集分为训练样例与测试样例

# 按6:4将数据分成训练数据集和测试数据集
indexes <- sample(1:nrow(credit.df), size=0.6*nrow(credit.df))
train.data <- credit.df[indexes,]
test.data <- credit.df[-indexes,]

 Data_separation.R : 将1000个样例按照6:4拆分,分别用于训练与测试

 

三:选择特征

feature_selection.R

library(caret)  
library(randomForest) 

#选择特征
run.feature.selection <- function(num.iters=20, feature.vars, class.var){
  set.seed(10)
  variable.sizes <- 1:10
  control <- rfeControl(functions = rfFuncs, method = "cv", 
                        verbose = FALSE, returnResamp = "all", 
                        number = num.iters)
  results.rfe <- rfe(x = feature.vars, y = class.var, 
                     sizes = variable.sizes, 
                     rfeControl = control)
  return(results.rfe)
}

rfe.results <- run.feature.selection(feature.vars=train.data[,-1], 
                                     class.var=train.data[,1])
rfe.results

用递归特征排除法选择特征,用随机森林算法进行模型评估,结果如下:

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zeofi1-6Zeo,size_20,color_FFFFFF,t_70,g_se,x_16

选取出五个特征:account.balance 账户余额,savings银行存款,credit.amount贷款金额,credit.duration.months贷款时长(月数) ,previous.credit.payment.statu(偿贷情况)

 

四、构建random-forest模型

Random_Forest_Predict.R

使用选取的五个最优特征建模:

## 使用选取的五个特征
formula.new <- "credit.rating ~ account.balance + savings +
                                credit.amount + credit.duration.months + 
                                previous.credit.payment.status"
formula.new <- as.formula(formula.new)
rf.model.new <- randomForest(formula.new, data = train.data, 
                             importance=T, proximity=T)

## 建模预测
rf.predictions.new <- predict(rf.model.new, test.feature.vars, type="class")
confusionMatrix(data=rf.predictions.new, reference=test.class.var, positive="1")

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zeofi1-6Zeo,size_20,color_FFFFFF,t_70,g_se,x_16

使用测试数据集对模型进行预测和评估发现:

准确率为74%;特异性为37.4%;灵敏度为90.3%。说明该模型能够较好的预测信用评级差的客户。

 

 

 

 

Logo

更多推荐