R语言-逻辑回归建模

案例1:使用逻辑回归模型,预测客户的信用评级

数据集中采用defect为因变量,其余变量为自变量

1.加载包和数据集

library(pROC)
library(DMwR)model.df <- read.csv(‘E:\\Udacity\\Data Analysis High\\R\\R_Study\\高级课程代码\\数据集\\第一天\\4信用评级\\customer defection data.csv‘,sep=‘,‘,header=T

2.查看数据集,

dim(model.df)
head(model.df)
str(model.df)
summary(model.df)

结论:一共有10000行数据,56个变量,其数据集中没有空值,但是有极大值存在

3,数据清洗

# 将Na的值补0
z <- model.df[,sapply(model.df, is.numeric)]
z[is.na(z)] = 0
summary(z)

# 去掉客户id和defect列
exl <- names(z) %in% c(‘cust_id‘,‘defect‘)
z <- z[!exl]
head(z)
# 将极大值点和取99%分位,极小值取1%分位qs <- sapply(z, function(z) quantile(z,c(0.01,0.99)))system.time(for (i in 1:ncol(z)){  for( j in 1:nrow(z)){    if(z[j,i] < qs[1,i]) z[j,i] = qs[1,i]    if(z[j,i] > qs[2,i]) z[j,i] = qs[2,i]  }})
# 重新构建数据集model_ad.df <- data.frame(cust_id=model.df$cust_id,defect=model.df$defect,z)boxplot(model_ad.df$visit_cnt)  

                   修改前                                                                                                                  修改后

  结论:visit_cnt不再有不符合业务的极大值出现

4.建模

set.seed(123)
# 将数据集分成训练集和测试集,一般是(70%是训练集,30%是测试集)
s <- sample(nrow(model_ad.df),floor(nrow(model_ad.df)*0.7),replace = F)
train_df <- model_ad.df[s,]
test_df <- model_ad.df[-s,]

# 去除掉cust_id
n <- names(train_df[-c(1,34)])
# 生成逻辑回归的公式
f <- as.formula(paste(‘defect ~‘,paste(n[!n %in% ‘defect‘],collapse = ‘ + ‘)))
# 建模
model_full <- glm(f,data=train_df[-c(1,34)],family = binomial)
summary(model_full)
# 模型检验direction 有三类参数both,backword,forward
# backword每次检验都减少一个因子,forword每次增加一个因子
# 同时AIC的值越小说明模型越好
step <- step(model_full,direction = ‘both‘)
summary(step)

5.检验模型

# 使用测试集去预测模型
pred <- predict(step,test_df,type=‘response‘)
head(pred)
fitted.r <- ifelse(pred>0.5,1,0)
# 模型的精度
accuracy <- table(fitted.r,test_df$defect)
#做出roc的图像
roc <- roc(test_df$defect,pred)
roc
plot(roc)

  结论:roc的值是0.75说明模型有较好的的预测功能,一般模型的准确率要达到75%左右,否则需要进行调整

案例2:研究哪类用户是不良用户

1.数据集字段说明

 1 # SeriousDlqin2yrs 超过90天的逾期欠款
 2 # RevolvingUtilizationOfUnsecuredLines 无担保贷款的循环利用,除了车,房除以信用额度的综合的无分期债务的信用卡贷款
 3 # age 贷款人年龄
 4 # NumberOfTime30-59DaysPastDueNotWorse 30~59天逾期次数
 5 # DebtRatio 负债比例
 6 # MonthlyIncome 月收入
 7 # NumberOfOpenCreditLinesAndLoans 开放式和信贷的数量
 8 # NumberOfTimes90DaysLate 大于等于90天逾期的次数
 9 # NumberRealEstateLoansOrLines 不动产的数量
10 # NumberOfTime60-89DaysPastDueNotWorse 60~90天逾期次数
11 # NumberOfDependents 不包括本人的家属数量

2.导入数据集和包

library(pROC)
library(DMwR)cs.df <- read.csv(‘E:\\Udacity\\Data Analysis High\\R\\R_Study\\第二天数据\\cs-data.csv‘,header=T,sep=‘,‘)summary(cs.df)

  结论:月收入这一栏出现的Na值较多

     有一些值有异常值的存在,比如负债比,不动产数量,和家属成员数量,这些值会给模型带来不好的影响,所以要去除

3.数据清洗

# 使用knn邻近算法,补充缺失的月收入
cs.df_imp <- knnImputation(cs.df,k=3,meth = ‘weighAvg‘)
#去除掉 30~60天逾期超过80的极大值
cs.df_imp <- cs.df_imp[-which(cs.df_imp$NumberOfTime30.59DaysPastDueNotWorse>80)]
# 去除掉负债比大于10000的极值
cs.df_imp <- cs.df_imp[-which(cs.df_imp$DebtRatio > 100000)]# 去除掉月收入大于50万的极值
cs.df_imp <- cs.df_imp[-which(cs.df_imp$MonthlyIncome > 500000)]

4.建模

set.seed(123)
# 将数据集分成训练集和测试集,防止过拟合
s <- sample(nrow(cs.df_imp),floor(nrow(cs.df_imp)*0.7),replace = F)
cs.train <- cs.df_imp[s,]
cs.test <- cs.df_imp[-s,]
# 使用逻辑线性回归生成全量模型
# family=binomia表示使用二项分布
# maxit=1000 表示需要拟合1000次
model_full <- glm(SeriousDlqin2yrs~.,data=cs.train,family=binomial,maxit=1000)# 使用回归的方式找出最小的AIC的值step <- step(model_full,direction=‘both‘)summary(step)

  结论:pr的值小于0.05的因子才是有效因子,*越多越重要

5.查看模型

pred <- predict(step,cs.test,type = ‘response‘)
fitted.r <- ifelse(pred>0.5,1,0)
accuracy <- table(fitted.r,cs.test$SeriousDlqin2yrs)
misClasificError <- mean(fitted.r!=cs.test$SeriousDlqin2yrs)
roc <- roc(cs.test$SeriousDlqin2yrs,pred)
plot(roc)
roc

  结论:预测的成功率只有69%

6.修改模型

  6.1 查看数据集

table(cs.train$SeriousDlqin2yrs)
prop.table(table(cs.train$SeriousDlqin2yrs))

  结论:只有6%左右的用户违约,说明数据集并不平衡

  6.2 平衡结果

cs.train$SeriousDlqin2yrs <- as.factor(cs.train$SeriousDlqin2yrs)
# 采用bootstrasp自助抽样法,目的:减小0的个数,增加1的个数,再平衡模型
trainSplit <- SMOTE(SeriousDlqin2yrs~.,cs.train,perc.over = 30,perc.under = 550)
cs.train$SeriousDlqin2yrs <- as.numeric(cs.train$SeriousDlqin2yrs)
prop.table(table(trainSplit$SeriousDlqin2yrs))

  结论:数据集的分布达到了基本平衡

  6.3 重新建模

model_full =  glm(SeriousDlqin2yrs~.,data=trainSplit,family=binomial,maxit=1000)

step = step(model_full,direction = "both")
summary(step)

  结论:找到了8个对结果有影响的变量,不同于开始建模的变量选择

  6.4 预测模型

pred = predict(step,cs.test,type="response")

fitted.r=ifelse(pred>0.5,1,0)
accuracy = table(fitted.r,cs.test$SeriousDlqin2yrs)

misClasificError = mean(fitted.r!=cs.test$SeriousDlqin2yrs)

roc = roc(cs.test$SeriousDlqin2yrs,pred)
plot(roc)
roc

  结论:模型预测的精度从69%提升到了81.6%

原文地址:https://www.cnblogs.com/luhuajun/p/8672928.html

时间: 2024-11-10 20:58:24

R语言-逻辑回归建模的相关文章

利用R语言+逻辑回归实现自动化运营

摘要 逻辑回归是最常见的二分类算法之一,由于是有监督学习,训练阶段需要输入标签,而同时在变量较多的情况下,需要先经过一些降维处理,本文主要讲解如果通过R语言来自动化实现变量的降维以及变量转换,训练,测试,覆盖率以及准确度效果评估,以及生成最终评分配置表,而在标签与训练数据在可以自动化生成的情况下,配置表是能自动生成的.其中每个步骤都有详细的实现代码. 主要步骤 实现细节 1.生成训练数据 如类似下面的格式 lable var1 var2 var3 var4 var5 var6 var7 var8

R语言对回归模型进行协方差分析

原文链接:http://tecdat.cn/?p=9529 目录 怎么做测试 协方差分析 拟合线的简单图解 模型的p值和R平方 检查模型的假设 具有三类和II型平方和的协方差示例分析 协方差分析 拟合线的简单图解 组合模型的p值和R平方 检查模型的假设 怎么做测试 具有两个类别和II型平方和的协方差示例的分析 本示例使用II型平方和 .参数估计值在R中的计算方式不同, Data = read.table(textConnection(Input),header=TRUE) plot(x = Da

R语言时间序列ARMAX建模

建立ARMAX模型需要运用R的dse包,在R的dse包中The ARMA model representation is general, so that VAR, VARX,ARIMA, ARMAX, ARIMAX can all be considered to be special cases. 数据集为天然气炉中的天然气(input)与产生的CO2(output),数据来源为王燕应用时间序列分析第三版附录表A1-24,首先队数据做简要的分析,做出时序图以及协方差图 input<-ts(i

R语言之回归树

rpart包可实现回归树.通常分为两步建立回归树:1.生成一棵较大的树  2.通过统计估计删除一些结点来对树进行修剪. 回归树基础实现 library(rpart) rpart(y~.,data=data1)  参数形式与lm()函数的参数形式相同 图形化展示: plot(rm) text(rm) rpart()函数构建树时,满足下列条件,树构建过程将结束: 1.偏差的减少小于某一个给定界限值时: 2.当结点中的样本数量小于某个给定界限时: 3.当树的深度大于一个给定的界限值 这3个界限值由rp

「数据挖掘入门系列」挖掘建模之分类与预测&ndash;逻辑回归

拿电商行业举例,经常会遇到以下问题: 如果基于商品的历史销售情况,以及节假日.气候.竞争对手等影响因素,对商品的销量进行趋势预测? 如何预测未来一段时间哪些客户会流失,哪些客户可能会成为VIP用户? 如果预测一种新商品的销售量,以及哪种类型的客户会比较喜欢? 除此之外,运营部门需要通过数据分析来了解具有某些特征的客户的消费习惯,管理人员希望了解下一个月的销售收入等,这些都是分类与预测的日志. 分类和预测是预测问题的两种主要类型. 分类主要是预测分类标号(离散值) 预测主要是建立连续值函数模型 挖

信用卡评分模型(R语言)

信用卡评分 一.数据准备 1. 问题的准备 ? 目标:要完成一个评分卡,通过预测某人在未来两年内将会经历财务危机的可能性来提高信用评分的效果,帮助贷款人做出最好的决策. ? 背景: – 银行在市场经济中起到至关重要的作用.他们决定谁在什么条件下可以得到融资,并且可以创造或打破投资决策.而市场.社会,以及个人和企业都需要获得贷款. – 信用评分算法,对默认可能性进行猜测,这是银行用来判断贷款是否应该被授予的方法. ? 准备: – 首先是基于个人借贷的场景,确定"违约"的定义: 根据新的B

大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5)

                                                    大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5) 上一节中,我们讲解了逻辑回归的优化,本节的话我们讲解逻辑回归做多分类问题以及传统的多分类问题,我们用什么手段解决. 先看一个场景,假如我们现在的数据集有3个类别,我们想通过逻辑回归建模给它区分出来.但我们知道逻辑回归本质上是区分二分类的算法模型.难道没有解决办法了吗?办法还是有的,既然想分出3类,我们姑且称这3个类

R语言对二分连续变量进行逻辑回归数据分析

原文链接:http://tecdat.cn/?p=10067 教育或医学的标准情况是我们有一项连续的措施,但随后我们对那些具有临床/实践意义的措施有了切入点.一个例子是BMI.您可能有一个成绩测试,合格分数为70.研究人员有时可能会对30岁以上的BMI建模感兴趣,或者对通过/失败作的结果感兴趣.实质性问题通常落在对某人超过/低于此临床上显着阈值的概率进行建模的范畴之内.因此,我们将连续测量结果分为两部分,并使用逻辑回归等方法分析. 回到介绍性统计信息,您会听到类似的信息:大多数人宁愿使用规则线性

R语言使用二元回归将序数数据建模为多元GLM

用于分析序数数据的最常见模型是 逻辑模型 .本质上,您将结果视为连续潜在变量的分类表现.此结果的预测变量仅以一种方式对其产生影响,因此 为每个预测变量获得一个回归系数.但是该模型有几个截距,它们代表将变量切分以创建观察到的分类表现的点. 就像在普通回归模型中一样,每个预测变量都会以一种方式影响结果,这就是比例赔率假设或约束.或者,可以让每个预测变量在每个切入点对结果产生不同的影响. 如何使用单变量GLM软件对此建模?UCLA idre页面上有关于多元随机系数模型的文章.在这里很重要,因为他们使用