R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

秦业
• 阅读 553

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

最近我们被客户要求撰写关于信贷数据的研究报告,包括一些图形和统计输出。在本文中,我们使用了逻辑回归、决策树和随机森林模型来对信用数据集进行分类预测并比较了它们的性能

数据集是

credit=read.csv("gecredit.csv", header = TRUE, sep = ",")

看起来所有变量都是数字变量,但实际上,大多数都是因子变量,

> str(credit)
'data.frame':    1000 obs. of  21 variables:
 $ Creditability   : int  1 1 1 1 1 1 1 1 1 1 ...
 $ Account.Balance : int  1 1 2 1 1 1 1 1 4 2 ...
 $ Duration        : int  18 9 12 12 12 10 8  ...
 $ Purpose         : int  2 0 9 0 0 0 0 0 3 3 ...

让我们将分类变量转换为因子变量,

> F=c(1,2,4,5,7,8,9,10,11,12,13,15,16,17,18,19,20)
> for(i in F) credit[,i]=as.factor(credit[,i])

现在让我们创建比例为1:2 的训练和测试数据集

> i_test=sample(1:nrow(credit),size=333)
> i_calibration=(1:nrow(credit))[-i_test]

我们可以拟合的第一个模型是对选定协变量的逻辑回归

> LogisticModel <- glm(Creditability ~ Account.Balance + Payment.Status.of.Previous.Credit + Purpose + 
Length.of.current.employment + 
Sex...Marital.Status, family=binomia

基于该模型,可以绘制ROC曲线并计算AUC(在新的验证数据集上)

> AUCLog1=performance(pred, measure = "auc")@y.values[[1]]
> cat("AUC: ",AUCLog1,"\n")
AUC:  0.7340997

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

一种替代方法是考虑所有解释变量的逻辑回归

 glm(Creditability ~ ., 
+  family=binomial, 
+  data = credit[i_calibrat

点击标题查阅往期内容

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

R语言基于树的方法:决策树,随机森林,套袋Bagging,增强树

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

左右滑动查看更多

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

01

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

02

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

03

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

04

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

我们可能在这里过拟合,可以在ROC曲线上观察到

> perf <- performance(pred, "tpr", "fpr
> AUCLog2=performance(pred, measure = "auc")@y.values[[1]]
> cat("AUC: ",AUCLog2,"\n")
AUC:  0.7609792

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

与以前的模型相比,此处略有改善,后者仅考虑了五个解释变量。

现在考虑回归树模型(在所有协变量上)

我们可以使用

> prp(ArbreModel,type=2,extra=1)

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

模型的ROC曲线为

(pred, "tpr", "fpr")
> plot(perf)

> cat("AUC: ",AUCArbre,"\n")
AUC:  0.7100323

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

不出所料,与逻辑回归相比,模型性能较低。一个自然的想法是使用随机森林优化。

> library(randomForest)
> RF <- randomForest(Creditability ~ .,
+ data = credit[i_calibration,])
> fitForet <- predict(RF,

> cat("AUC: ",AUCRF,"\n")
AUC:  0.7682367

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

在这里,该模型(略)优于逻辑回归。实际上,如果我们创建很多训练/验证样本并比较AUC,平均而言,随机森林的表现要比逻辑回归好,

> AUCfun=function(i){
+   set.seed(i)
+   i_test=sample(1:nrow(credit),size=333)
+   i_calibration=(1:nrow(credit))[-i_test]


+   summary(LogisticModel)
+   fitLog <- predict(LogisticModel,type="response",
+                     newdata=credit[i_test,])
+   library(ROCR)
+   pred = prediction( fitLog, credit$Creditability[i_test])

+   RF <- randomForest(Creditability ~ .,
+   data = credit[i_calibration,])


+   pred = prediction( fitForet, credit$Creditability[i_test])

+   return(c(AUCLog2,AUCRF))
+ }
> plot(t(A))

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据


R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测|附代码数据

点击文末 “阅读原文”

获取全文完整资料。

本文选自《R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测》。

点击标题查阅往期内容

逻辑回归(对数几率回归,Logistic)分析研究生录取数据实例
R语言使用Metropolis- Hasting抽样算法进行逻辑回归
R语言逻辑回归Logistic回归分析预测股票涨跌
R语言在逻辑回归中求R square R方
R语言逻辑回归(Logistic Regression)、回归决策树、随机森林信用卡违约分析信贷数据集
R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归
R语言进行支持向量机回归SVR和网格搜索超参数优化
R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
在R语言中实现Logistic逻辑回归
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数
R语言逻辑回归logistic模型分析泰坦尼克titanic数据集预测生还情况
R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据
R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析
R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者
R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
秦业
秦业
Lv1
试问岭南好不好。却道。此心安处是吾乡。
文章
4
粉丝
0
获赞
0