logistic回归分析 r_【R语言】Logistic回归——消费者点击广告的行为预测

c37f2ca5c88fbf28925cee6b44e93d67.png

当我们检验分类变量时,会立刻想到用卡方检验,但卡方检验无法对连续性自变量进行检验;而传统的模型框架下,加权最小二乘法不适用于二分类因变量。

当因变量为分类因变量或发生的概率时,此时就要用到Logistic回归。

Logit变换与Logistic回归

  • odds=p/(1-p) 比值或优势,取对数ln(odds) 这就是Logit变换 ,odds是以0.5为对称点,分布在0-1分为内,那么ln(odds)的范围就算正负无穷。大量实践证明ln(odds)往往和自变量呈线性关系,即概率和自变量间的S型曲线关系往往就符合Logit函数关系。
  • 结果变量是类别型的(二值)模型假设Y服从二项分布 Π=μy是y的条件均值(即y=1的概率) Π/(1- Π)为y=1的优势,ln( Π/(1- Π)) 对数优势(即进行logit变换),为连接函数,概率分布为二项分布:

6ddd7c96a04e0d5994b55ca3af5c7e39.png
  • 适用条件:1.因变量为二分类变量或某事发生的概率;2.自变量与ln(odds)之间为线性关系;3.残差合计为0,且服从二项分布;4.各观测间相互独立。

R语句形式为:glm(Y~x1+X2+x3,family=binomial(link="logit"),date=mydata)

案例实践:预测消费者行为

数据预处理

数据集:Advertsing

各列以及含义:

  • #'Daily Time Spent on Site': consumer time on site in minutes
  • #'Age': cutomer age in years
  • #'Area Income': Avg. Income of geographical area of consumer
  • #'Daily Internet Usage': Avg. minutes a day consumer is on the internet
  • #'Ad Topic Line': Headline of the advertisement
  • #'City': City of consumer
  • #'Male': Whether or not consumer was male
  • #'Country': Country of consumer
  • #'Timestamp': Time at which consumer clicked on Ad or closed window
  • #'Clicked on Ad': 0 or 1 indicated clicking on Ad

部分数据预览:

b4e43edb9313fa17ccd6bc79eef4d16b.png

接下来对数据进行预处理,具体包括:

  • 简化列名,各列名变为:"Site_time","Age","Income","Internet_time","Topic","City","Gender","Country","Timestamp","Click"
  • 删除不需要的列(第5,6,8,9列)
  • 查看各列数据属性(各列均为数值型),将Gender改为因子型
  • 查看缺失值(此数据各列无缺失值)

经过一番处理后,得到我们要分析的数据表。

f168e72bacfb1e8515f1771746f5f2bc.png

回归模型

接下来是回归分析过程,首先按照4:1划分训练数据集和验证数据集,使用随机抽样的方式抽出800条数据作为训练数据集,其余200条数据作为验证数据集。

model<-glm(Click~.,family = binomial(),data = train_data)

5个自变量中仅有Gender不显著,各自变量回归系数β及对应的P值如下表所示:

f6a4fd5e796cc9e38594536c176dcde5.png

回归模型可表示为:

ln(p/(1-p))=-0.19897*Site_time + 0.18252*Age – 0.00015*Income – 0.06288*Internet_time

其中P为点击广告的概率

模型解释

上表中不仅列出了回归系数β,还列出了exp(β),这主要是为了更好理解结果。

  • Logitstic回归模型的左边是优势(odds)取对数,回归系数b表示,x每变化一个单位,odds变化量的对数,即ln(odds2)-ln(odds1)=ln(odds2/odds1),即优势比的对数。
  • 那么对系数exp()之后,左边就变成了优势odds,此时右边exp(β)的变化带来的是左边odds变化的倍数。这样把系数exp指数化后,更好理解一些。

因此,本模型的解释为,Site_time每增加一分钟,点击广告的优势(=点击的概率/不点击的概率)变为原来的81.96%;年龄每增加一岁,点击广告的优势变为原来的120.02%。

数据预测

  • 使用上述回归模型,首先验证train_data中的预测准确率
  • y_pre_train<-predict(model,newdata = train_data,type = "response")
  • 这里我们默认以0.5为分界点,如果y_pre_train>0.5取值为1,否则取值为0.
  • y_bio_train<-ifelse(y_pre_train>0.5,1,0)
  • 查看预测值与实际值的差异并计算准确率,得出准确率为97.4%:
  • table(train_data$Click,y_bio_train)
  • Accuracy<-1-sum(y_bio_train!=train_data$Click)/800

dc42fd4bf986507a1f898b4247a40f2d.png

事实上,分界点取值多少最合理,可以通过ROC曲线的最大AUC值找到。下面通过pROC包自动标出最优临界,使用train_data找出的临界值为0.6,即如果y_pre_train>0.6,取值为1,否则取值为0。AUC值为0.992,具备较高的预测价值。

  • modelroc<-roc(train_data$Click,y_pre_train)
  • 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)

ff91cd0c56724f4403b72fa42080153e.png

我们以0.6为分界点,预测test_data的准确率,准确率为96%。

  • y_pre_test<-predict(model,newdata = test_data,type = "response")
  • y_bio_test<-ifelse(y_pre_test>0.6,1,0)
  • table(test_data$Click,y_bio_test)
  • Accuracy<-1-sum(y_bio_test!=test_data$Click)/200

关于ROC曲线与AUC值

横坐标:1-Specificity,伪正类率(False positive rate, FPR),预测为正但实际为负的样本占所有负例样本的比例;

纵坐标:Sensitivity,真正类率(True positive rate, TPR),预测为正且实际为正的样本占所有正例样本的比例。

在一个二分类模型中,假设采用逻辑回归分类器,其给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6,概率大于等于0.6的为正类,小于0.6的为负类。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

AUC (Area Under Curve) 被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围一般在0.5和1之间。简单说:AUC值越大的分类器,正确率越高,可以根据AUC最大值来确定分类边界。但也有观点认为,AUC大,但预测正确率不一定高,正确率和AUC之间,应该选择AUC。如果您有其他的理解,欢迎一起讨论。

参考资料:

  • 《R语言实战》Chapter13广义线性模型
  • 《SPSS统计分析高级教程》第10章二分类Logistic回归模型
  • 数据来源:Kaggle, https://www.kaggle.com/fayomi/advertising

R详细源码详见公众号,欢迎关注一起学习交流~

【R语言】Logistic回归——消费者点击广告行为预测​mp.weixin.qq.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值