在日常学习或工作中经常会使用线性回归模型对某一事物进行预测,例如预测房价、身高、GDP、学生成绩等,发现这些被预测的变量都属于连续型变量。然而有些情况下,被预测变量可能是二元变量,即成功或失败、流失或不流失、涨或跌等,对于这类问题,线性回归将束手无策。这个时候就需要另一种回归方法进行预测,即Logistic回归。

一、Logistic模型简介

Logistic回归模型公式如下:


这个模型其实就是一个条件概率模型函数,即已知
的情况下,兴趣变量y=1时的概率。显然,该模型是一个非线性模型,具有S型分布,可见下图:

#绘制Logistic曲线

x <- seq(from = -10, to = 10, by = 0.01)

y = exp(x)/(1+exp(x))

library(ggplot2)

p <- ggplot(data = NULL, mapping = aes(x = x,y = y))

p + geom_line(colour = 'blue')

+ annotate('text', x = 1, y = 0.3, label ='y==e^x / 1-e^x', parse = TRUE)

+ ggtitle('Logistic曲线')


由于是非线性模型,从而就少了像线性模型那样的约束,如自变量与因变量具有线性关系、随机误差满足方差齐性等。

以上的模型公式其实是可以变换成线性形式的,只需要一个简单的logit变换即可,即:

二、模型用途

Logistic模型主要有三大用途:

1)寻找危险因素,找到某些影响因变量的"坏因素",一般可以通过优势比发现危险因素;

2)用于预测,可以预测某种情况发生的概率或可能性大小;

3)用于判别,判断某个新样本所属的类别。


三、模型应用

下文使用Logistic模型对电信行业的客户流失数据进行建模,数据来源为R中C50包自带数据集churnTrain和churnTest。

#使用C50包中自带的电信行业客户流失数据

library(C50)

data(churn)

train <- churnTrain

test <- churnTest

str(train)

数据集中包含了19个变量,其中变量洲(state)、国际长途计划(international_plan)、信箱语音计划(voice_mail_plan)和是否流失(churn)为因子变量,其余变量均为数值变量,而且这里的区域编码变量(area_code)没有任何实际意义,故考虑排除该变量。

#剔除无意义的区域编码变量

train <- churnTrain[,-3]

test <- churnTest[,-3]

#由于模型中,更关心的是流失这个结果(churn=yes),所以对该因子进行排序

train$churn <- factor(train$churn,levels = c('no','yes'), order = TRUE)

test$churn <- factor(test$churn, ,levels = c('no','yes'), order = TRUE)

#构建Logistic模型

model <- glm(formula = churn ~ ., data =train, family = 'binomial')

summary(model)

发现有很多变量并不显著,故考虑剔除这些不显著的变量,这里使用逐步回归法进行变量的选择(需要注意的是,Logistic为非线性模型,回归系数是通过极大似然估计方法计算所得)。

#step函数实现逐步回归法

model2 <- step(object = model, trace = 0)

summary(model2)

从结果中发现,所有变量的P值均小于0.05,通过显著性检验,保留了相对重要的变量。模型各变量通过显著性检验的同时还需确保整个模型是显著的,只有这样才能保证模型是正确的、有意义的,下面对模型进行卡方检验。

#模型的显著性检验

anova(object= model2, test = 'Chisq')

从上图中可知,随着变量从第一个到最后一个逐个加入模型,模型最终通过显著性检验,说明由上述这些变量组成的模型是有意义的,并且是正确的。

虽然模型的偏回归系数和模型均通过显著性检验,但不代表模型能够非常准确的拟合实际值,这就需要对模型进行拟合优度检验,即通过比较模型的预测值与实际值之间的差异情况来进行检验。

Logistic回归模型的拟合优度检验一般使用偏差卡方检验、皮尔逊卡方检验和HL统计量检验三种方法,其中前两种检验适合模型中只有离散的自变量,而后一种适合模型中包含连续的自变量。拟合优度检验的原假设为“模型的预测值与实际值不存在差异”。

#模型的拟合优度检验

library(sjmisc)

HL_test <- hoslem_gof(x = model)

HL_test

从模型的拟合优度检验结果可知,该模型无法拒绝拟合优度检验的原假设,即可以认为实际值与模型的预测值之间比较接近,不存在显著差异。

以上各项指标均表示模型对电信行业客户流失数据拟合的比较理想,接下来就用该模型对测试集进行预测,预测一个未知的客户是否可能流失,从而起到流失预警的作用。

#模型对样本外数据(测试集)的预测精度

prob <- predict(object = model2, newdata= test, type = 'response')

pred <- ifelse(prob >= 0.5, 'yes','no')

pred <- factor(pred, levels =c('no','yes'), order = TRUE)

f <- table(test$churn, pred)

f

从上图中我们发现:

1).模型对非流失客户(no)的预测还是非常准确的(1408/(1408+35)=97.6%);

2).模型对流失客户(yes)的预测非常不理想(42/(182+42)=18.8%)

3).模型的整体预测准确率为87.0%((1408+42)/(1408+35+182+42)),还算说得过去。

模型对非流失客户预测精准,而对流失客户预测非常差,我认为的可能原因是模型对非平衡数据非常敏感。即构建模型的训练集中流失客户为483例,而非流失客户为2850例,两者相差非常大。

上文对模型偏回归系数、模型整体和模型拟合优度进行了显著性检验,结果均表明模型比较理想,同时也对模型的预测精度进行验证,也说明了模型的整体预测能力比较理想。接下来我们通过另一种可视化的方法衡量模型的优劣,即ROC曲线,该曲线的横坐标和纵坐标各表示1-反例的覆盖率正例的覆盖率。

#绘制ROC曲线

library(pROC)

roc_curve <- roc(test$churn,prob)

names(roc_curve)

x <- 1-roc_curve$specificities

y <- roc_curve$sensitivities

library(ggplot2)

p <- ggplot(data = NULL, mapping = aes(x= x, y = y))

p + geom_line(colour = 'red') +geom_abline(intercept = 0, slope = 1)

+ annotate('text', x = 0.4, y = 0.5, label =paste('AUC=',round(roc_curve$auc,2)))

+ labs(x = '1-specificities',y = 'sensitivities', title = 'ROC Curve')

这里的AUC为ROC曲线和y=x直线之间的面积。在实际应用中,多个模型的比较可以通过面积大小来选择更佳的模型,选择标准是AUC越大越好。对于一个模型而言,一般AUC大于0.8就能够说明模型是比较合理的了

更多有关数据分析分享请点击“阅读原文”,链接跳转为数据人网

四、参考资料:

统计建模与R语言

Logistic回归模型—方法与应用

http://www.douban.com/note/284051363/?type=like

运用Logistic模型实现客户流失预警分析相关推荐

  1. 逻辑回归模型——股票客户流失预警模型

    1.读取数据 import pandas as pd df = pd.read_excel('股票客户流失.xlsx') df.head() 2.划分特征变量和目标变量 X = df.drop(['是 ...

  2. 客户流失预警模型怎么做?

    客户流失预警模型怎么做? 贷中策略除了跟调额.营销相关外,与客户流失相关及营销相关的还有一个客户流失预测模型,是我们全流程中必不可少的一个客群分析. 目前,银行都面临着极大的优质客户流失的危险.这将对 ...

  3. 金融风控-- >客户流失预警模型-- >金融数据分析

    从这篇博文开始,我将介绍机器学习,深度学习在金融风控这个行业上的应用.其实机器学习,深度学习在一些相关场景上的应用,其解决方法都是大同小异,差不多都是固定的解决套路,但是需要结合这个场景这个行业领域的 ...

  4. python数据分析实例:客户流失预警模型

    python数据分析实例:客户流失预警模型 客户流失是电信行业最重要的服务方面之一.客户流失的广义说法是因为客户自己或运营商违反服务协议而终止客户服务的行为. 流失预测流程一共分为四个步骤,分别为(1 ...

  5. 数学建模学习(2)—— 客户流失预警模型案例评估 ROC曲线与KS曲线(2022.7.19)

    昨天晚上做了个梦,梦到被老师臭骂了一顿,可以说当时把我直接吓醒了,醒过来后,惊叹一声,还好是个梦.在上个笔记中学习了逻辑回归的运用,这节课再来看一看对模型评估的方法. 文章目录 目录 文章目录 一.R ...

  6. python数据分析案例-利用生存分析Kaplan-Meier法与COX比例风险回归模型进行客户流失分析与剩余价值预测

    目录 1. 概述 1.1 背景 1.2 目的 1.3 数据说明 2. 相关概念 2.1 事件 2.2 生存时间 2.3 删失 2.4 生存概率 2.5 中位生存时间 2.6 风险概率 3. 数据处理 ...

  7. 客户流失预警模型-GBDT模型

    GBDT模型参数问题,这里我们以sklearn里面的GBDT为例来说,打开网址sklearn.ensemble.GradientBoostingClassifier.这里我们不关注GBDT里面的所有参 ...

  8. [转载] 使用神经网络和ml模型预测客户流失

    参考链接: Keras中的深度学习模型-探索性数据分析(EDA) This story is a walk-through of a notebook I uploaded on Kaggle. Or ...

  9. python之客户流失预警

    背景 客户流失率问题是电信运营商面临的一项重要的业务.根据测算,招揽新的客户比保留住既有客户花费大得多(通常5-20倍的差距).因此,如何保留住现在的客户对运营商而言是一项非常有意义的事情. 数据字段 ...

最新文章

  1. vue项目中keep-alive的使用,从详情页返回列表时保存浏览位置
  2. solaris 中挂载usb移动硬盘
  3. 电子病历系统厂家排名_指挥大厅音响系统方案,会议话筒厂家-麦纳电子科技
  4. UVALive7670 Asa's Chess Problem,上下界费用流,另类解法
  5. 倒计时小工具_这款高颜值的 APP 可以让小仙女/男神们的日子过得更精致
  6. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列
  7. Google Developers可以访问了?
  8. C语言丨线性查找(顺序查找)
  9. python安装opencv出错_python 3安装opencv 3时出错?
  10. 函数的单调性与极值点
  11. php编网页版计算器,php编程实现简单的网页版计算器功能
  12. 密评(商用密码应用安全性评估)
  13. sigmod函数求导
  14. LATEX 幻灯片入门
  15. 献给那些没有自信的人。
  16. Java中violate关键字详解
  17. c语言链表用处,c语言链表的用途是什么
  18. 招聘工作者和面试官的特征
  19. 724便利店系统完整项目及讲解
  20. 美团张川:做了8年平台,我总结了平台的5道坎

热门文章

  1. Apriori算法的实现
  2. JAVA打包软件exe4j使用教程
  3. Ionic - API
  4. 非正常情况下的移动加权平均算法
  5. 离岸换汇_离岸业务便宜吗? 揭露另一个管理神话
  6. 老吕架构-2021年文章精选
  7. 单片机中绝对地址的访问 CBYTE
  8. 华为Smart Link与Monitor Link原理与配置
  9. python实现删除空行
  10. 春季 3 月 · CSM 认证周末班【提前报名特惠】“全球金牌课程”CST 导师亲授