R语言逻辑回归详细代码:预测双十一顾客是否使用天猫优惠券
R语言逻辑回归详细代码:预测双十一顾客是否使用天猫优惠券
#[1,] “age” 年龄
#[2,] “job” 工作
#[3,] “marital” 婚姻状况
#[4,] “default” 花呗是否违约
#[5,] “returned” 是否有过退货
#[6,] “loan” 是否使用花呗结账
#[7,] “coupon_used_in_last6_month” 过去六个月优惠券使用数量
#[8,] “coupon_used_in_last_month” 过去一个月优惠券使用数量
#[9,] “coupon_ind” 本次活动中是否使用优惠券
数据源链接,提取码:1ib7
rm(list = ls())
#导入数据--------------------
data = read.csv(‘天猫优惠券.csv’,colClasses = c(‘integer’,‘integer’,‘factor’,‘factor’,
‘factor’,‘factor’,‘factor’,‘integer’,‘integer’,‘numeric’))
data1 = data[,-1]
#定义目标值
target = data$coupon_ind
class(target)
#数据清洗--------------------
#找出是否有缺失值变量
nanumber = sapply(data,function(x)sum(is.na(x)))
summary(nanumber)
nanumber
#五数图
summary(data1)
#提取列名
as.matrix(colnames(data1))
#进一步筛选变量--------------
#计算x1的IV值 IV表示衡量变量预测能力 WOE衡量变量某个属性的区分能力
x1= data1$age
hist(x1)
x1 = binning(x1,bins = 8,method = ‘quantile’)
temp1 = table(x1,target)
temp1
#将频数统计表转化为数据框,矩阵的长度为水平的个数
temp2 = as.data.frame(matrix(temp1,length(unique(x1)),2))
temp2
#计算比例
temp3 = sapply(temp2,function(x) x/sum(x))
temp3
woe = log(temp3[,2]/temp3[,1])*100
iv = sum((temp3[,2]-temp3[,1])*woe)
#由单变量iv值扩展到所有自变量iv值
var.iv = function(x,target){
if(is.factor(x))
{ #做出频数统计表
temp4 = table(x,target)
#转化为数据框形式
temp5 = as.data.frame(matrix(temp4,length(unique(x)),2))
#计算比例
temp6 = sapply(temp5,function(x) x/sum(x))
woe = log(temp6[,2]/temp6[,1])*100
iv = sum((temp6[,2]-temp6[,1])[!is.infinite(woe)]*woe[!is.infinite(woe)])
}
#如果x是数值型,则对其分组,分为8段,按照分位数分
if(is.integer(x))
{
x= binning(x,bin = 8,method = ‘quantile’)
#做出频数统计表
temp1 = table(x,target)
#转化为数据框形式
temp2 = as.data.frame(matrix(temp1,length(unique(x)),2))
#计算比例
temp3 = sapply(temp2,function(x) x/sum(x))
#如果有不是矩阵的,则直接默认iv为0
if(!is.matrix(temp3)) {iv = 0} else
{
woe = log(temp3[,2]/temp3[,1])*100
iv = sum((temp3[,2]-temp3[,1])[!is.infinite(woe)]*woe[!is.infinite(woe)])
}
}
return(iv)
}
#利用自编函数验证x值
var.iv(dataage,dataage,dataage,datacoupon_ind)
var.iv(datajob,datajob,datajob,datacoupon_ind)
#检查所有自变量的iv值
iv.value = sapply(data1[,-9],function(x)var.iv(x,data1$coupon_ind))
summary(iv.value) #查看筛选变量阀点
#由于变量较少,因此筛选IV值大于2的变量
input = names(which(iv.value>2))
length(input)
##确定最终进入模型的变量——————————————————————————
#数据整理
data1_input = data1[,input]
n=nrow(data1_input)
#分割数据:训练样本和测试样本
set.seed(1234)
#随机抽样序号
train_number = sample(1:n,round(n*0.8))
#构造训练集
train_x = data1_input[train_number,]
train_y = data[train_number,‘coupon_ind’]
table(train_y)
train = data.frame(train_y,train_x)
#构造测试集
test_x = data1_input[-train_number,]
test_y = data[-train_number,‘coupon_ind’]
table(test_y)
#查看训练接数据
str(train_y)
str(train_x)
#建立广义逻辑回归模型————————————————————————------------------------------
logitfit = glm(train_y~.,data = train,family = ‘binomial’)
summary(logitfit)
#查看模型参数
coef(logitfit)
#系数的含义其实是优势比的增加量 实际上指的是1和0的相对风险 如下是为了更方便看出数值大小
sapply(coef(logitfit),function(x) round(exp(x),3))
##模型评估——————————————————————
#过度离势 overdispersion = 残差偏差/残差自由度,若大于1,则表明参数检验精度下降
overdispersion = logitfitdeviance/logitfitdeviance/logitfitdeviance/logitfitdf.residual
overdispersion
#逐步回归,删除相关性强的变量
logitfitstep = step(logitfit)
#检验回归后的模型各自的系数是不是同时为0。H0:所有系数均为0
anova(logitfitstep,test = ‘Chisq’)
#查看模型参数
coef(logitfitstep)
#逐步回归后构建新的模型
logitfit = glm(train_y ~ job + marital + returned + loan +
coupon_used_in_last6_month +
coupon_used_in_last_month,data = train,family = ‘binomial’)
summary(logitfit)
summary(logitfit)
#VIF 方差膨胀因子检验 查看是否还存在多重共线性,一般的:当VIF^1/2>2表明存在多重共线性
vif(logitfit)
sqrt(vif(logitfit))>2
#模型预测-----------------------------
logit_fitted_train = logitfit$fitted.values
logit_fitted_test1 = predict(logitfit,newdata = test_x,type = ‘response’)
#找出概率临界值,以此区分优惠券是否响应-----------------------------------
#样本内聚类,样本内0和1的概率
p = table(train_y)/length(train_y)
#以p[2]作为临界值划分
logit.cluster = factor(logit_fitted_train >p[2],levels = c(F,T),
labels = c(0,1))
#查看分类结果
table(logit.cluster)
#训练集预测准确率
pre.pre.train = table(train_y,logit.cluster,dnn = c(‘Actual’,‘Predicted’))
p11 = pre.pre.train[2,2]/sum(pre.pre.train[2,]) #优惠券使用命中率,真正率
p12 = pre.pre.train[1,1]/sum(pre.pre.train[1,]) #优惠券未使用命中率,真负率
accuracy = (pre.pre.train[1,1]+pre.pre.train[2,2])/sum(pre.pre.train) #整个模型的预测准确率
#样本外预测
#逻辑分类
logit.pred = factor(logit_fitted_test1 >p[2],levels = c(F,T),
labels = c(0,1))
table(logit.pred)
#对比预测和真实值
table_pre.test = table(test_y,logit.pred,dnn = c(‘Actuall’,‘Predicted’))
#测试集0和1的正确率
accuracy = (table_pre.test[1,1]+table_pre.test[2,2])/sum(table_pre.test)
#上述的临界值是根据训练集数据得出的,主观性较强,根据最终目的,我们是想找提高模型预测精度,
#然后对优惠券做对应的商业活动,所以真正率和真负率之间的取值需要权衡
#下面画roc曲线和lift曲线
#roc曲线
modelroc = roc(test_y,logit_fitted_test1,plot =TRUE) #横轴为真负率,纵轴为真正率
plot(modelroc,print.auc = TRUE,auc.polygon = TRUE,grid = c(0.1,0.2),
grid.col = c(‘green’,‘red’),max.auc.polygon = TRUE,
auc.polygon.col = ‘skyblue’,print.thres = TRUE)
#lift曲线
pr = prediction(logit_fitted_test1,test_y)
plot(performance(pr,‘lift’,‘rpp’),col = ‘red’,lty = 1,
add = FALSE,main =‘lift’ )
#阀值最终可以取0.137,兼顾提升度、真正率和真负率,最终的训练模型如下,输出0和1
logitfit = glm(train_y ~ job + marital + returned + loan +
coupon_used_in_last6_month +
coupon_used_in_last_month,data = train,family = ‘binomial’)
xin.xn = ifelse(logitfit$fitted.values >0.137,1,0)
roc曲线图
提升度折线图
R语言逻辑回归详细代码:预测双十一顾客是否使用天猫优惠券相关推荐
- R语言逻辑回归Logistic回归分析预测股票涨跌
最近我们被客户要求撰写关于逻辑回归的研究报告,包括一些图形和统计输出. 视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠心病风 ...
- R语言逻辑回归logistic regression对付费用户进行预测
对于某企业新用户,会利用大数据来分析该用户的信息来确定是否为付费用户,弄清楚用户属性,从而针对性的进行营销,提高运营人员的办事效率. 最近我们被客户要求撰写关于付费预测的研究报告,包括一些图形和统计输 ...
- 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险
最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...
- R语言逻辑回归、方差分析 、伪R平方分析
目录 怎么做测试 假设条件 并非所有比例或计数都适用于逻辑回归分析 过度分散 伪R平方 测试p值 Logistic回归示例 模型拟合 系数和指数系数 方差分析 伪R平方 模型的整体p值 标准化残差图 ...
- R语言逻辑回归 logistic regression
R语言逻辑回归代码示例 rm(list=ls()) require(kernlab) data(spam) data <- spam n <- nrow(spam) id <- sa ...
- 数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...
全文链接:http://tecdat.cn/?p=27384 在本文中,数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息(点击文末"阅读原文"获取完整代 ...
- R语言逻辑回归的预测概率怎么算
在R语言直接通过predict 计算 概率 手动计算可能不会, 我的逻辑回归模型如上所示, 预测就是 predict(fit.logit,newdata = data.frame(Pregnancie ...
- R语言逻辑回归logistic regression对用户收入进行预测
逻辑回归对用户收入进行预测 对于某企业新用户,会利用大数据来分析该用户的信息来确定是否为付费用户,弄清楚用户属性,从而针对性的进行营销,提高运营人员的办事效率. 对于付费用户预测,主要是思考收入由 ...
- R语言----逻辑回归各统计量解读
逻辑回归是回归模型,其中响应变量(因变量y)具有诸如True / False或0/1的分类值. 它实际上基于将其与预测变量(自变量x)相关的数学方程测量二元响应的概率,作为响应变量的值. 逻辑回归的一 ...
最新文章
- (康托展开解释)+ NYOJ 139 我排第几个
- IOS NSString 操作
- [翻译] - Inside SQL Server 2000's Memory Management Facilities
- java应用系统正确的连接DM主备集群
- 【ArcGIS风暴】ArcGIS中制作GPS点位轨迹线及多边形
- This is my first time to write blog
- 7种用户界面UI原则
- oracle 创建字段自增长——两种实现方式汇总(转)
- 102. 二叉树的层次遍历
- idea离线安装lombock插件
- 在计算机中怎么找到打字的文件,想在电脑上打字,然后把电脑上写的字,弄到纸上怎么做...
- 深入理解GBDT回归算法
- 遗传算法和神经网络算法区别与联系
- POJ1753(枚举)
- StringWriter介绍
- 信号完整性之浅谈理解(一)
- MySQL MVVC多版本并发控制
- 建筑信息化模型BIM经典《BIM Handbook》中文翻译第一章第二节(持续更新)
- 准备奔向新时代的技术nodejs+express+mongodb+json
- 【熬夜肝了】一篇数据库规范,你应该用的上
热门文章
- 第46届世界技能大赛网络系统管理项目江苏省选拔赛赛题-模块A样题v1.4(debian)
- 国电智深dcs c语言编程,国电智深DCS手册.pdf
- 解决:matplotlib画图时,横坐标日期太多重叠在一起,减少横坐标数量
- 变幻多端云彩高清动态壁纸分享
- Studio One6.1.1免费中文版电子音乐、摇滚乐制作软件
- RecyclerView打造抖音效果
- css制作炫酷的罗盘时钟特效(附代码)
- DHU VC++ Learning Operation Section【1】
- 自动驾驶系统入门(二) - 车辆定位与高精地图
- 基于百度UNIT的微信智能问答聊天机器人小程序