原始数据:bank

输入变量:
#银行客户资料:
1-年龄(数字)
2-工作:工作类型(分类:“管理”,“未知”,“失业”,“管理”,“女佣”,“企业家”,“学生”,“蓝领”、“个体户”、“退休人员”、“技术人员”、“服务人员”)
3-婚姻:婚姻状况(分类:“已婚”、“离婚”、“单身”;注:“离婚”指离婚或丧偶)
4-教育(分类:“未知”、“中等”、“初级”、“高等”)
5-违约:信用违约吗?(二进制:“是”,“否”)
6-余额:年平均余额,单位:欧元(数字)
7-住房:有住房贷款吗?(二进制:“是”,“否”)
8-贷款:有个人贷款吗?(二进制:“是”,“否”)
#与当前活动的最后一个联系人相关:
9-联系人:联系人通信类型(分类:“未知”、“电话”、“手机”)
10天:每月的最后一个联系日(数字)
11个月:一年中最后一个联系月(分类为:“一月”、“二月”、“三月”、“十一月”、“十二月”)
12-持续时间:上次联系持续时间,以秒为单位(数字)
#其他属性:
13-活动:在此活动期间为此客户执行的联系人数(数字,包括最后一个联系人)
14-pdays:上次从上一个活动联系客户后经过的天数(数字,-1表示以前没有联系过客户)
15-上一页:在此活动之前为此客户执行的联系人数(数字)
16-poutcome:上一次营销活动的结果(分类:“未知”、“其他”、“失败”、“成功”)输出变量(所需目标):
17-y-客户是否已认购定期存款?(二进制:“是”,“否”)
#设置工作空间,导入数据
setwd('D:/bankfull')
bankfull <- read.csv2("bank-full.csv",stringsAsFactors = F) # 数据读取
#查看变量
names(bankfull)
#数据探索
summary(bankfull)
#处理噪声数据
library(outliers)
outlier(as.numeric(bankfull$balance))# opposite = FALSE, logical = FALSE
#检测NA值,并输出其位
which(is.na(bankfull))
#删除含有缺失值的行
bankfull=na.omit(bankfull)
#删掉所有列上都重复的
bankfull<-bankfull[!duplicated(bankfull),]
#将处理后的数据保存
write.csv(bankfull,'bankfull.csv')#提取数据的第一列(年龄),第五列(是否信用违约);将数据按照年龄升序排序
newbankdata <- bankfull[,c(1,5)]
newbankdata=newbankdata[order(newbankdata$age),]#默认升序
write.csv(newbankdata,'newbankdata.csv')
#统计违约人数
weiyuenum<-data.frame(table(newbankdata[,2]))
write.csv(weiyuenum,'weiyuenum.csv')
#将其中违约的提取出来
weiyue <- subset(newbankdata,newbankdata$default == "yes")
write.csv(weiyue,'weiyue.csv')
#age<=12的为小孩;12<age<=30的为青年;30<age<=60的为中年;age>60的为老年
a<-cut(weiyue$age,breaks=c(-Inf,12,30,60,Inf),labels = c("小孩","青年","中年","老年"))
weiyue<-cbind(weiyue,a)
write.csv(weiyue,'weiyue.csv')
#统计违约的人中"青年","中年","老年"的人数及比例
weiyuenum2<-data.frame(table(weiyue[,3]))
#算出占比
weiyuenum2$percent <- weiyuenum2$Freq/sum(weiyuenum2$Freq)
write.csv(weiyuenum2,'weiyuenum.csv')
#绘制饼图
library('vcd')
names <- paste(weiyuenum2$Var1,weiyuenum2$percent,sep="---")
#饼图
pie(weiyuenum2$Freq,labels=names,col= rainbow(10),main="不同年龄段中违约数量统计")
#可以看出中年违约人数最多,信用危机越大,即信用不好。
#将完整数据中的违约的人提取出来
weiyuefull <- subset(bankfull,bankfull$default == "yes")
write.csv(weiyuefull,'weiyuefull.csv')#在全部数据中将是否认购定期存款为yes的提取出来
yyes <- subset(bankfull,bankfull$y == "yes")
write.csv(yues,'yyes.csv')
#提取数据的第三列(婚姻),第十七列(是否认购定期存款);
maritalisyyes <- yyes[,c(3,17)]
write.csv(maritalisyyes,'maritalisyyes.csv')
#统计人数及比例
maritalisyyesnum<-data.frame(table(maritalisyyes[,1]))
#算出占比
maritalisyyesnum$percent <- maritalisyyesnum$Freq/sum(maritalisyyesnum$Freq)
write.csv(maritalisyyesnum,'maritalisyyesnum.csv')
#绘制饼图
library('vcd')
names <- paste(maritalisyyesnum$Var1,maritalisyyesnum$percent,sep="---")
#饼图
pie(maritalisyyesnum$Freq,labels=names,col= rainbow(10),main="不同婚姻状态中认购定期存款数量统计")
#可以看出已婚的人去认购定期存款的几率大#在全部数据中将是否认购定期存款为yes的提取出来
yyes <- subset(bankfull,bankfull$y == "yes")
write.csv(yyes,'yyes.csv')
#提取数据的第四列(教育),第十七列(是否认购定期存款);
educationisyyes <- yyes[,c(4,17)]
write.csv(educationisyyes,'educationisyyes.csv')
#统计人数及比例
educationisyyesnum<-data.frame(table(educationisyyes[,1]))
#算出占比
educationisyyesnum$percent <- educationisyyesnum$Freq/sum(educationisyyesnum$Freq)
write.csv(educationisyyesnum,'educationisyyesnum.csv')
#绘制饼图
library('vcd')
names <- paste(educationisyyesnum$Var1,educationisyyesnum$percent,sep="---")
#饼图
pie(educationisyyesnum$Freq,labels=names,col= rainbow(10),main="不同受教育程度中认购定期存款数量统计")
#可以看出受教育程度为中级去认购定期存款的几率大,其次是高级#把银行已认购定期存款的客户原始数据建立决策树模型,从而预测新一批客户是否会认购定期存款
#设置工作空间,导入数据
setwd('D:/bankfull')
newbank <- read.csv2("bank-full.csv",stringsAsFactors = F) # 数据读取
#获取描述性统计量,可以提供最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计
bankdata<-summary(newbank)
#set.seed()括号里面的参数可以是任意数字,是代表你设置的第几号种子而已,不会参与运算,是个标记而已。
#set.seed()函数是为了保证你随机生成的随机数前后一致
set.seed(1)
#做训练集和测试集
sub<-sample(1:nrow(newbank),round(nrow(newbank)*2/3))
length(sub)#30141
data_train<-newbank[sub,]#取2/3的数据做训练集
data_test<-newbank[-sub,]#取1/3的数据做测试集
dim(data_train)#训练集行数和列数30141    17
dim(data_test) #测试集行数和列数15070    17
table(data_train$y) #看该列分布的   no-26610   yes-3531
table(data_test$y)#看该列分布的   no-26610   yes-3531  #CART ID3决策树
library(sampling)
library(party)
library(rpart)
library(rpart.plot)
library(rattle)
#用训练集建模,观察模型结果
bank_tree<-rpart(as.factor(y)~ .,data=data_train,method='class',minsplit=20,minbucket=150,cp=0.00017)
summary(bank_tree)
print(bank_tree)
#绘制决策树
rpart.plot(bank_tree)#对测试集进行测试
test_pre = predict(bank_tree,newdata = data_test)
test_pre <-data.frame(test_pre)
#写出最终的测试结果
b<-cut(test_pre$no,breaks=c(-Inf,0.5,Inf),labels = c("yes","no"))
test_pre<-cbind(test_pre,b)
write.csv(test_pre,'test_pre.csv')
#将预测结果与真实结果对比并进行分析
ac <- table(test_pre[,3],data_test$y)
#计算出该决策树的accuracy(分类正确的样本数除以总样本数)
acc<-(ac[1,2]+ac[2,1])/(ac[1,1]+ac[1,2]+ac[2,1]+ac[2,2])
acc #0.9019244
#生成规则
asRules(bank_tree)#CART剪枝
cp=bank_tree$cptable[which.min(bank_tree$cptable[,"xerror"]),"CP"]
cp #0.004106485
bank_tree2<-prune(bank_tree,cp=bank_tree$cptable[which.min(bank_tree$cptable[,"xerror"]),"CP"])
#再次绘制决策树
rpart.plot(bank_tree2)
#对测试集进行再次测试
test_pre2 = predict(bank_tree2,newdata = data_test)
test_pre2 <-data.frame(test_pre2)
#写出最终的测试结果
c<-cut(test_pre2$no,breaks=c(-Inf,0.5,Inf),labels = c("yes","no"))
test_pre2<-cbind(test_pre2,c)
write.csv(test_pre2,'test_pre2.csv')
#将预测结果与真实结果对比并再次进行分析
ac2<-table(test_pre2[,3],data_test$y)
#再次计算出该决策树的accuracy(分类正确的样本数除以总样本数)
acc2<-(ac2[1,2]+ac2[2,1])/(ac2[1,1]+ac2[1,2]+ac2[2,1]+ac2[2,2])
acc2 #0.9021234
#再次生成规则
asRules(bank_tree2)

R语言(把银行已认购定期存款的客户原始数据建立决策树模型,从而预测新一批客户是否会认购定期存款)相关推荐

  1. R语言使用pwr包的pwr.f2.test函数对线性回归模型进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量

    R语言使用pwr包的pwr.f2.test函数对线性回归模型(Linear models)进行效用分析(power analysis).在已知效应量(effect size).显著性水平(sig).效 ...

  2. R语言使用caretEnsemble包的caretStack函数把多个机器学习模型融合成一个模型、构建融合(集成)预测模型、使用融合模型进行预测推理

    R语言使用caretEnsemble包的caretStack函数把多个机器学习模型融合成一个模型.构建融合(集成)预测模型.自定义融合模型的trainControl参数.method参数.评估指标参数 ...

  3. R语言广义线性模型函数GLM、(Model fit and regression diagnostics)、模型充分性评估方法、使用plot函数以及car包函数

    R语言广义线性模型函数GLM.(Model fit and regression diagnostics).模型充分性评估方法.使用plot函数以及car包函数 目录

  4. R语言使用pwr包的pwr.f2.test函数对线性回归模型(Linear models)进行效用分析(power analysis)的语法

    R语言使用pwr包的pwr.f2.test函数对线性回归模型(Linear models)进行效用分析(power analysis)的语法 目录

  5. R语言Eta squared计算实战:Eta squared表示可以用模型中给定的变量解释的方差的比例、拟合方差分析模型(two-way ANOVA)、计算Eta Squared

    R语言Eta squared计算实战:Eta squared表示可以用模型中给定的变量解释的方差的比例.拟合方差分析模型(two-way ANOVA).计算Eta Squared 目录

  6. R语言时间序列(time series)分析实战:简单指数平滑法预测

    R语言时间序列(time series)分析实战:简单指数平滑法预测 目录

  7. R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列

    R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列 目录

  8. R语言 面板数据分析 plm包实现(一) ——LSDV和固定效应模型

    系列文章 R做面板数据分析:R语言 面板数据分析 plm包实现(一) --LSDV和固定效应模型 如果想看随机效应模型怎么做,参见这篇文章 R语言 面板数据分析 plm包实现(二)--随机效应模型 如 ...

  9. R语言使用mgcv包的gam函数拟合广义加性模型回归模型:使用predict函数和训练好的模型进行预测推理、使用ggplot2可视化预测值和实际值的曲线进行对比分析

    R语言使用mgcv包的gam函数拟合广义加性模型回归模型:使用predict函数和训练好的模型进行预测推理.使用ggplot2可视化预测值和实际值的曲线进行对比分析 目录

最新文章

  1. React 开发环境搭建
  2. [每日短篇] 1D - 消除 if 的一种方法
  3. Spark+hadoop+mllib及相关概念与操作笔记
  4. 怎么检查python是否安装成功-检查python以及django是否安装配置成功
  5. HTML全面深入学习-select的optgroup分组
  6. window环境下mysql配置参数_Window下mysql环境配置问题整理
  7. 简单实用一分钟上手级权限控制
  8. 功放音量调节原理_玩汽车音响,功放和喇叭,应该如何做好匹配?
  9. 怎么用python编程前二n-1项的等差数列的和_python— 等差数列末项计算方式
  10. 在微信中调用ajax出现的问题
  11. lisp用entmake生产圆柱体_投石科技圆柱体全息幻象装置
  12. eyoucms 网页制作软件有哪些 这些你都知道吗
  13. CodeForces - 869A The Artful Expedient
  14. AndroidStudio 自带avd模拟器WiFi网络受限无法连接
  15. 给你的Blog加条小金鱼
  16. PR-颜色遮罩-透明度-渐闪效果
  17. HDU 1083 Coures(二分图匹配)
  18. LaTeX中的希腊字母表
  19. php有几个单词,PHP-如何选择一个句子的前10个单词?
  20. 盲盒系统搭建——玩转盲盒系统

热门文章

  1. 基于Qt的待办软件开发
  2. 03 请给我寄一张明信片 04 激动人心的旅行
  3. 关于java的mongoDB插入去重以及高并发问题
  4. mysql 数据横向拼接,MYSQL实现不关联表横向拼接
  5. acrobat给pdf加多行水印_adobe acrobat pro dc给PDF文档添加水印的方法
  6. web开发——css京东图片列表和左侧导航条的演示
  7. Linux下VCS和Verdi的联合仿真实例教程
  8. linux crossover教程,CrossOver Linux版如何安装已知应用程序?CrossOver Linux版安装已知应用程序教程...
  9. 吐血推荐!那些书里不会教你的工业物联网开发经验
  10. Python量化投资——mplfinance实现全功能动态交互式K线图(蜡烛图)【源码+详解】