提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 随机森林模型
  • 一、随机森林模型
    • 1.数据加载
  • 二、数据清洗
    • 2.1.删除变量
    • 2.2变量数据类型转换
    • 2.3划分训练集和测试集
  • 三、随机森林分析
    • 3.1建模分析
    • 3.2模型优化
  • 总结

随机森林模型

首先:安装需要的几个R语言包:ggplot2,VIM,ggrepel
数据说明:

名称 类型 描述
account string 现有支票帐户的状态(A11:<0 DM,A12:0 <= x <200 DM,A13:> = 200 DM /至少一年的薪水分配,A14:无支票帐户)
duration integer D 持续时间(月)
credit_history string A30:未提取任何信用/已全额偿还所有信用额,A31:已偿还该银行的所有信用额,A32:已到期已偿还的现有信用额,A33:过去的还款延迟,A34:关键帐户/其他信用额现有(不在此银行)
purpose string A40 : car (new) A41 : car (used),A42 : furniture/equipment,A43 : radio/television,A44 : domestic appliances,A45 : repairs,A46 : educationA47 : (vacation - does not exist?),A48 : retraining,A49 : business,A410 : others
credit_amount float
savings string 账户/债券储蓄(A61:<100 DM,A62:100 <= x <500 DM,A63:500 <= x <1000 DM,A64:> = 1000 DM,A65:未知/无储蓄账户
present_employment string 71:待业,A72:<1年,A73:1 <= x <4年,A74:4 <= x <7年,A75:…> = 7年
installment_rate float 分期付款率占可支配收入的百分比
personal string 个人婚姻状况和性别(A91:男性:离婚/分居,A92:女性:离婚/分居/已婚,A93:男性:单身,A94:男性:已婚/丧偶,A95:女性:单身)
other_debtors string A101:无,A102:共同申请人,A103:担保人
present_residence float 至今居住
property string A121:不动产,A122:如果不是,那么A121:建筑协会储蓄协议/人寿保险,A123:如果不是,则A121 / A122:不是属性6的汽车或其他,A124:未知/没有财产
age float 年岁
other_installment_plans string A141:银行,A142:商店,A143:无
housing string A151:租房,A152:自有,A153:免费
existing_credits float 该银行现有信贷的数量
job string 1:失业/A171 : 非技术人员-非居民,A172:非技术人员-居民,A173:技术人员/官员,A174:管理/个体经营/高度合格的员工/官员
dependents integer 承担赡养费的人数
telephone string A191:无,A192:有,登记在客户名下
foreign_worker string A201: 有, A202: 无
customer integer 预测类别:1 =良好,2 =不良

本文利用R语言的广义线性模型和随机森林模型分析网上比较流行的德国信用卡数据,下面的代码可以用来确定申请人是否有信用,以及他(或她)是否对贷款人有良好的信用风险。


提示:以下是本篇文章正文内容,下面案例可供参考

一、随机森林模型

1.数据加载

1.1加载分析包和数据集,数据文件位置在D盘根目录。

library(ggplot2)
library(VIM)
library(ggrepel)
library(randomForest)
library(varSelRF)
library(pROC)
setwd('D:')
data <- read.csv('German Credit.csv')

1.2快速浏览一下数据,了解一下我们的工作内容。可以看到该数据集有1000行,21列数据

dim(data)
[1] 1000   21
str(data)


我们在这个模型中试图把重点放在作为信用价值指标的数据分类或类别上。这些是分类变量,而不是数字变量。申请人有电话吗?申请人是否已婚?是否有共同签署人?申请人在同一地址住了多长时间?等等。
我们需要知道它们与贷款决定的关系。良好的信用与某些因素的组合有关,从而使我们可以用概率将新的申请人按其特征进行分类。

二、数据清洗

2.1.删除变量

你可能会立即注意到有几个变量很显眼。我们要排除"duration",“credit_amount”,"age"这些变量,保留分类因素。

代码如下(示例):

data1 <- subset(data,select=-c(duration,credit_amount,age))
dim(data1)
[1] 1000   18

2.2变量数据类型转换

然后我们将整数转换成因子。
代码如下(示例):

data1$account <- as.factor(data1$account)
data1$credit_history <- as.factor(data1$credit_history)
data1$purpose <- as.factor(data1$purpose)
data1$savings <- as.factor(data1$savings)
data1$present_employment <- as.factor(data1$present_employment)
data1$installment_rate <- as.factor(data1$installment_rate)
data1$personal <- as.factor(data1$personal)
data1$other_debtors <- as.factor(data1$other_debtors)
data1$present_residence <- as.factor(data1$present_residence)
data1$property <- as.factor(data1$property)
data1$other_installment_plans <- as.factor(data1$other_installment_plans)
data1$housing <- as.factor(data1$housing)
data1$existing_credits <- as.factor(data1$existing_credits)
data1$job <- as.factor(data1$job)
data1$dependents <- as.factor(data1$dependents)
data1$telephone <- as.factor(data1$telephone)
data1$foreign_worker <- as.factor(data1$foreign_worker)
data1$customer <- as.factor(data1$customer)

2.3划分训练集和测试集

我们把数据集分成训练集(80%)和测试集(20%)。

set.seed(1234)
nn=0.8
sub<-sample(1:nrow(data1),round(nrow(data1)*nn))
length(sub)
data_train <- data1[sub,]#取0.8的数据做训练集
data_test <- data1[-sub,]#取0.2的数据做测试集
dim(data_train)#训练集行数和列数
dim(data_test) #测试集的行数和列数

三、随机森林分析

3.1建模分析

model.forest <-randomForest(customer ~ ., data = data_train,importance=TRUE,proximity=TRUE)pre.forest=predict(model.forest, data_test)
pre.forest   1   21 130  372  11  22
table<-table(pre.forest,data_test$customer)sum(diag(table))/sum(table)
[1] 0.76

我们可以看到随机森林模型可以识别出76%的客户的信用
下面我们处理这组数据,看看每个变量在建模时的重要性,以下结果仅供参考

model.forest.all <-randomForest(customer ~ ., data =data1,importance=TRUE,proximity=TRUE)
importance(model.forest.all)
varImpPlot(model.forest.all)


MeanDecreaseAccuracy描述的是当把一个变量变成随机数时,随机森林预测准确度的降低程度,该值越大表示该变量的重要性越大。
MeanDecreaseGini通过基尼指数计算每个变量对分类树上每个节点的观测值的异质性影响。该值越大表示该变量的重要性越大。

3.2模型优化

print(model.forest)Call:randomForest(formula = customer ~ ., data = data_train, importance = TRUE,      proximity = TRUE) Type of random forest: classificationNumber of trees: 500
No. of variables tried at each split: 4OOB estimate of  error rate: 25.5%
Confusion matrix:1  2 class.error
1 502 57   0.1019678
2 147 94   0.6099585

构建随机森林时,影响随机森林模型的两个主要因素,第一个是决策树节点分支所选择的变量个数,第二个是随机森林模型中的决策数的数量,使用函数randomForest()时,函数会默认节点所选变量个数以及决策树的数量,但是这些默认值不一定是最优的,从以上结果我们看到默认节点个数为4,决策树的数量为500.根据这个理论。下面我们寻找最优的随机森林模型
首先我们可视化分析构建随机森林模型过程中应该使用的决策树的数量

set.seed(113)
plot(model.forest)


我们看到模型中的决策树数量在200之上时都会趋于稳定,很少会有变化
接下来确定节点的个数

rate = list()
for(i in 1:ncol(data1)/2)
{set.seed(123)model.forest <- randomForest(customer ~ ., data = data_train,mtry=i,importance=TRUE,ntree=500)rate[i] <- mean(model.forest$err.rate)#计算基于OOB数据的模型误判率均值
}rate = unlist(rate)
plot(rate)


我们看到当节点为11的时候达到最小值
我们利用优化后的模型再次测试测试集,看看效果

set.seed(114)
model.forest1 <-randomForest(customer ~ ., data = data_train,mtry=11,ntree=200,importance=TRUE)
print(model.forest1)
Call:randomForest(formula = customer ~ ., data = data_train, mtry = 11,      ntree = 200, importance = TRUE) Type of random forest: classificationNumber of trees: 200
No. of variables tried at each split: 11OOB estimate of  error rate: 27.62%
Confusion matrix:1   2 class.error
1 476  83   0.1484794
2 138 103   0.5726141pre.forest=predict(model.forest1, data_test)
table(pre.forest,data_test$customer)
pre.forest   1   21 124  332  17  26table<-table(pre.forest,data_test$customer)
sum(diag(table))/sum(table)
[1] 0.75

总结

效果还是有的由原先的0.76降低到现在的0.75。效果不行,待继续优化。

讨论了用神经网络的方法解决银行信用评估问题,基本思想也是将数据的70%作为一个训练集训练出一个神经元,之后再测试模型的好坏,正确率大约是76%。个人觉得随机森林的最大优点是不仅能预测还可以得出每个变量的重要性,这对于建模者来说是很有意义的,尤其在商业数据挖掘时,找出最重要的变量就可以为企业创造无限价值。

随机森林分析金融数据相关推荐

  1. 数据分享|R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化...

    全文链接:http://tecdat.cn/?p=22262 在讨论分类时,我们经常分析二维数据(一个自变量,一个因变量)(点击文末"阅读原文"获取完整代码数据). 但在实际生活中 ...

  2. 【金融】【随机森林】使用随机森林对期货数据(涨跌)进行回归

    [金融][随机森林]使用随机森林对期货数据(涨跌)进行回归 RF-RF_train3year3month 读取数据 划分训练集与数据集,3年+3月,以此类推 取特定数据 Exponential smo ...

  3. 随机森林需要分训练集测试集吗_讨论记录用随机森林对生存数据降维,筛选signature...

    昨晚,小伙伴收到了大鱼海棠为我们带来的FigureYa182RFSurv,使用随机森林对生存数据降维,根据变量重要性排序并筛选基因组成prognostic signature. 这是我们第二次众筹随机 ...

  4. 基于Caret和RandomForest包进行随机森林分析的一般步骤 (1)

    Caret构建机器学习流程的一般步骤 Caret依赖trainControl函数设置交叉验证参数,train函数具体训练和评估模型.首先是选择一系列需要评估的参数和参数值的组合,然后设置重采样评估方式 ...

  5. 扩增子16S/ITS/18S微生物多样性课程更新-机器学习随机森林分析

    扩增子16S/ITS/18S微生物多样性课程更新-机器学习随机森林分析 机器学习或者人工智能(AI)是当前计算机领域研究的热点.然而,最近越来越多的研究者开始尝试将 AI 应用于另一个热门领域--微生 ...

  6. sklearn 3. 实例:随机森林在乳腺癌数据上的调参

    .这一节,我们就来使用我们刚才学的,基于方差和偏差的调参方法,在乳腺癌数据上进行一次随 机森林的调参.乳腺癌数据是sklearn自带的分类数据之一. 案例中,往往使用真实数据,为什么我们要使用skle ...

  7. 【2 - 随机森林 - 案例部分:随机森林在乳腺癌数据上的调参】菜菜sklearn机器学习

    课程地址:<菜菜的机器学习sklearn课堂>_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现 第二期:随机森林在sklearn中的实现 ...

  8. 在线分析|在线做随机森林分析

    今天小编给大家介绍的是TUTU(https://www.cloudtutu.com/)网站上新添的randomforest2分析,即随机森林模型分析.目前平台上有两个随机森林的分析,如下图,小伙伴们可 ...

  9. 在线作图|在线做随机森林分析

    随机森林(Random forest) 随机森林(Random forest)是利用多棵决策树对样本进行训练并预测的一种分类器.独木不成林,随机森林可以弥补单个决策树泛化能力弱的问题.在机器学习中,随 ...

最新文章

  1. 买衣服送粉丝,人气美女出新招
  2. C++对象内存模型学习
  3. TF学习——Tensorflow框架之基础概念、设计思路、常用方法之详细攻略
  4. C#中用WebClient.UploadData 方法上载文件数据
  5. 实时计算轻松上手,阿里云DataWorks Stream Studio正式发布
  6. 谷歌开源语音识别AI技术,可以从人群中区分每个人的发言
  7. android性能调优的工具,神兵利器-Android 性能调优工具 Hugo
  8. 移植Andorid4.0.4 - 步骤及问题汇总
  9. 是的,我们真的在遭遇有史以来最大的DDoS攻击,并且还在加剧
  10. 从XmlDocument到XDocument的转换
  11. 数电实验1:五输入表决器
  12. maven项目打包命令
  13. 【网络安全】黑客攻防与入侵检测(练习题)
  14. QComboBox下拉框样式
  15. 读后感之悟道-一位20年IT高管的职场心得
  16. Excel 用函数自定义验证数据的有效性
  17. 【每日蓝桥】17、一三年省赛Java组真题“带分数”
  18. python在线翻译小程序_Python爬虫学习之翻译小程序
  19. 北京交通大学计算机学院硕士导师,北京交通大学计算机与信息技术学院研究生导师:王涛...
  20. 深度学习和神经网络的区别是什么

热门文章

  1. 人工智能,百度AI人脸识别java版
  2. springboot+websocket+sockjs进行消息推送【基于STOMP协议】
  3. 秒拍联合高德地图发起“交警探路vlog”活动 上线“温暖回家路”专区
  4. Python写一个股价计算的脚本
  5. 信道编码与交织(理论与MATLAB实现)
  6. 健身房健身用什么耳机好、五款最好的健身房耳机推荐
  7. 模仿手机淘宝客户端新增地址中的地区选择
  8. 那些年,程序员开发过的好玩的程序
  9. C语言入门---------划水你我他
  10. 分享下offsetLeft和clientLeft和scrollLeft区别的总结