Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python实战|利用生存分析预测用户流失周期(一)

Python实战|利用生存分析预测用户流失周期(一)

作者头像
数据万花筒
发布于 2021-07-29 08:31:58
发布于 2021-07-29 08:31:58
1.2K00
代码可运行
举报
文章被收录于专栏:数据万花筒数据万花筒
运行总次数:0
代码可运行
利用生存分析预测用户流失周期

上篇

1.数据基本情况探索

2.数据来源及预处理

3.数据相关性探索

下篇

1.Cox风险比例模型建模

2. Cox风险比例模型效果评估

3.Cox风险比例模型预测流失用户

4.改善运营策略,防止用户流失

生存分析(survivalanalysis)源于生物医学,早期主要是是对生存时间进行分析,后来该方法也应用于各类商业分析,主要研究用户从一种状态转变到另一种状态所经历的时间。举个例子来说,在互联网行业,用户流失是较为常见的分析主题,生存分析法就可以运用于探究用户从进入互联网产品到流失这一过程的转变时长。这一期内容,小编会运用生存分析方法通过Python预测用户流失周期。

1

数据基本情况探索

此处笔者使用IBM用户流失数据集,该数据及来源于Kaggle,包括每个客户所签署的服务、客户账号信息以及用户个人信息等多个维度的用户属性数据。在该数据集中,流失用户的定义为在上个月之内离开的用户,数据集已经给出用户流失标签。

在正式作数据预处理之前,数据分析师需要了解数据的基本情况,比如查看数据有哪些字段、各个字段是什么类型、有没有缺失值、异常值等情况。数据分析师对数据的基本情况做到心中有底对后续的数据预处理和分析都是有极大帮助的。首先,通过如下代码读入数据并且查看基本情况。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#导入此次分析所需要的包
importmath as mt
importnumpy as np
importpandas as pd
fromscipy.stats import norm
importscipy
importmatplotlib.pyplot as plt
importseaborn as sns
 
survival_data=pd.read_csv("survival_ananlysis_data.csv")
survival_data.info()
 
 
<class'pandas.core.frame.DataFrame'>
RangeIndex:7043 entries, 0 to 7042
Datacolumns (total 21 columns):
Column            Non-Null   Count  Dtype 
customerID        7043 non-null   object
gender            7043 non-null   object
SeniorCitizen     7043 non-null   int64 
Partner           7043 non-null   object
Dependents        7043 non-null   object
tenure            7043 non-null   int64 
PhoneService      7043 non-null   object
MultipleLines     7043 non-null   object
InternetService   7043 non-null   object
OnlineSecurity    7043 non-null   object
OnlineBackup      7043 non-null   object
DeviceProtection  7043 non-null   object
TechSupport       7043 non-null   object
StreamingTV       7043 non-null   object
StreamingMovies   7043 non-null   object
Contract          7043 non-null   object
PaperlessBilling  7043 non-null   object
PaymentMethod     7043 non-null   object
MonthlyCharges    7043 non-null   float64
TotalCharges      7043 non-null   object
Churn             7043 non-null   object
dtypes:float64(1), int64(2), object(18)
memoryusage: 1.1+ MB

由上述的结果可知,IBM用户流失数据集中,包括了数值变量,也包括了分类变量。对于数值变量来说,数据分析师需要了解数值变量的数值范围,而对于分类变量来说,数据分析师则需要知道分类变量有多少种类别。在数值类型字段中,'TotalCharges'字段不仅存在缺失值,而且不是数值类型,所以需要先填补缺失值并将其转换为数值形式。如下代码实现了'TotalCharges'缺失值的填补、数值类型的转换以及数值变量基本信息的展示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
survival_data['TotalCharges']= survival_data[['TotalCharges']].replace([' '], '0')
survival_data['TotalCharges']= pd.to_numeric(survival_data['TotalCharges'])
survival_data.describe().transpose()
 
                  count       mean        std        min          25%        50%      75%          max
SeniorCitizen     7043.0     0.16        0.37       0.00         0.00        0.00     0.00        1.00
tenure            7043.0     32.37       24.56      0.00         9.00        29.00    55.00       72.00
MonthlyCharges    7043.0     64.76       30.09      18.25        35.50       70.35    89.85       118.75
TotalCharges      7043.00    2279.73     2266.79    0.00         398.55      1394.55  3786.60     8684.80
 

了解了数值变量的基本信息,如下代码实现了分类变量的基本信息的展示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
survival_data.describe(include='object').T
                   count                        unique             top                      freq
customerID         7043                         7043                6128-AQBMT               1
gender             7043                         2                       Male                  3555
Partner            7043                         2                       No                    3641
Dependents         7043                         2                       No                    4933
PhoneService       7043                         2                       Yes                   6361
MultipleLines      7043                         3                       No                    3390
InternetService    7043                         3                       Fiberoptic            3096
OnlineSecurity     7043                         3                       No                    3498
OnlineBackup       7043                         3                       No                    3088
DeviceProtection   7043                         3                       No                    3095
TechSupport        7043                         3                       No                    3473
StreamingTV        7043                         3                       No                    2810
StreamingMovies    7043                         3                       No                    2785
Contract           7043                         3               Month-to-month                3875
PaperlessBilling   7043                         2                       Yes                   4171
PaymentMethod      7043                         4               Electronic check              2365
Churn              7043                         2                       No                    5174

对于较为重要的字段,我们进行数据可视化展示,如下代码实现了用户留存时间、每月付费、总付费三个字段在流失用户和留存用户之间的差异对比以及整个数据集中流失和留存用户的数量展示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fig,axes= plt.subplots(nrows=2,ncols=2, figsize=(10,8))
keyvalue= survival_data[['tenure','MonthlyCharges','TotalCharges']]
for ax,column in zip(axes.ravel(),keyvalue):
    sns.boxplot(x=survival_data['Churn'],
          y=keyvalue[column], ax=ax)
    plt.tight_layout()
sns.countplot(x=survival_data['Churn'],alpha=.95)

如图1所示,该数据集中留存用户远远多于流失用户,留存用户的留存时间、总消费金额长于流失用户,但留存用户的月付费金额少于流失用户。

图1流失与费流失用户各个特征对比

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据万花筒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python实战|利用生存分析预测用户流失周期(二)
Cox风险比例模型是用户流失分析中较为常用的方法,该模型不仅可以预测用户是否会流失,还能预测用户何时流失,下面一起来看看Cox风险比例模型如何预测用户流失。
数据万花筒
2021/07/29
1.5K0
做COX生存分析是否需要把连续值变成高低二分组?
在进行Cox回归分析时,是否需要将连续变量转化为分类变量(如高低二分组)取决于研究目的和数据特性。Cox回归模型可以处理连续变量,但有时将连续变量转化为分类变量可以提供更明确的临床意义和更易解释的结果。
生信技能树
2025/01/07
2730
做COX生存分析是否需要把连续值变成高低二分组?
基于生存分析模型的用户流失预测
生存模型就能很好的地解决上面的问题,生存分析(Survival analysis)是指根据历史数据对人的生存时间进行分析和推断,研究生存情况与众多影响因素间的关系。本文参考自python数据分析案例-利用生存分析Kaplan-Meier法与COX比例风险回归模型进行客户流失分析与剩余价值预测[1]。
HsuHeinrich
2023/05/25
1.4K1
实例 | 教你用Python写一个电信客户流失预测模型
今天教大家如何用Python写一个电信用户流失预测模型。公众号后台,回复关键字“电信”获取完整数据。
CDA数据分析师
2020/09/22
2.6K6
实例 | 教你用Python写一个电信客户流失预测模型
万字案例 | 用Python建立客户流失预测模型(含源数据+代码)
客户流失是所有与消费者挂钩行业都会关注的点。因为发展一个新客户是需要一定成本的,一旦客户流失,成本浪费不说,挽回一个客户的成本更大。
Ai学习的老章
2020/06/04
11.6K3
一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码)
https://mp.weixin.qq.com/s/_20MN6V6aV1T3Ekd7C9neQ
Crossin先生
2020/06/28
4.9K0
一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码)
基于XGBoost的用户流失预测
在日常业务挖掘中,XGBoost具有准确性高、数据友好等优点,可以快速地对历史数据进行训练,数据分析师也往往是基于业务角度去进行数据挖掘,因此特征都是具有业务意义的统计数据,数据质量较高。当然这种逻辑思维也会有一定的缺陷,那就是考虑的特征不全面。
HsuHeinrich
2023/03/29
1.3K0
基于XGBoost的用户流失预测
电信流失用户画像
因此为了满足在激烈竞争中的优势,提前预测出用户是否会流失,采取保留措施成为一大挑战。
阿黎逸阳
2023/08/21
7100
电信流失用户画像
用户增长分析——用户流失预警
1 前言 针对用户增长分析这个课题,本文主要从用户防流失的角度,阐述如何基于QQ社交网络数据构建用户流失预警模型,找出高潜流失用户,用于定向开展运营激活,从而有效控制用户流失风险,提升大盘用户的留存率和活跃度。本文所涉及到的分析框架和方法论等具有较强的通用性,可供有需要的同学了解参考。 2 分析背景 “根据美国贝恩公司的调查,在商业社会中5%的客户留存率增长意味着公司利润30%的增长,而把产品卖给老客户的概率是卖给新客户的3倍。所以在‘增长黑客’圈内有一句名言:留住已有的用户胜过拓展新的客户,也就是俗称的
腾讯云大数据
2018/10/09
15.5K0
用户增长分析——用户流失预警
开启机器学习懒人模式——AutoGluon小试某数据挖掘训练赛
近来在浏览DataCastle竞赛平台时,注意到了上面挂载的一些数据挖掘训练赛题目,因为是定位于训练赛,主要用于帮助初学者快速熟悉和练手机器学习技能,所以赛题难度相对基础,也没有提供实质性的竞赛奖励。
luanhz
2022/09/19
1.1K0
开启机器学习懒人模式——AutoGluon小试某数据挖掘训练赛
PyCaret 可轻松搞定机器学习!
PyCaret 是由 Moez Ali 创建并于2020年4月发布的 python 开源低代码机器学习库。它只需要使用很少的代码就可以创建整个机器学习管道。
郭好奇同学
2021/08/26
1.1K0
PyCaret 可轻松搞定机器学习!
Python实战:利用Uplift模型识别营销敏感用户提升转化率(一)
营销增益模型(Uplift)是用户转化分析中常用的模型,今天的文章基于营销数据利用Python进行实战识别营销敏感客户群体,以在实际营销活动中降低企业成本。
数据万花筒
2021/08/25
2.1K0
Python实战:利用Uplift模型识别营销敏感用户提升转化率(一)
生存分析——跟着lifelines学生存分析建模(三)
github地址:CamDavidsonPilon/lifelines 文档地址:lifelines
悟乙己
2021/12/07
3.3K1
生存分析——跟着lifelines学生存分析建模(三)
kaggle实战-银行用户流失预测
近年来,不论是传统行业还是互联网行业,都面临着用户流失问题。一般在银行、电话服务公司、互联网公司、保险等公司,经常使用客户流失分析和客户流失率作为他们的关键性业务指标之一。
皮大大
2023/08/25
2.2K0
数据导入与预处理-第8章-实战演练-数据分析师岗位分析
本案例数据为招聘网站上收集的有关数据分析师岗位的数据,对该数据集从数据分析的角度出发,利用pandas、pyecharts库处理与展现数据,开发一个完整的数据分析项目。
IT从业者张某某
2022/11/12
1.2K0
数据导入与预处理-第8章-实战演练-数据分析师岗位分析
开启机器学习的第一课:用Pandas进行数据分析
翻译 | AI科技大本营 参与 | 林椿眄 本课程的目的并不是要开发一门全新的机器学习或数据分析的综合入门课程,也不是想借此来取代基础教育、在线/离线课程或一些专业和书籍。我们推出本系列文章是为了让初学者快速地回顾一些基础知识,并帮助你找到进一步学习的方向。 首先用简短通俗的语言回顾数学和机器学习的基础知识,并引用了一些其他资源,这种教学的方法与一些深度学习书籍类似。 此外,课程不单单注重理论的讲解,更强调完美地平衡理论与实践。因此,每个理论主题讲解后都有一个对应的练习专题,方便初学者通过自己动手来巩
AI科技大本营
2018/04/26
1.6K0
开启机器学习的第一课:用Pandas进行数据分析
Kaggle Titanic 生存预测比赛超完整笔记(上)
一直想在Kaggle上参加一次比赛,奈何被各种事情所拖累。为了熟悉一下比赛的流程和对数据建模有个较为直观的认识,断断续续用一段时间做了Kaggle上的入门比赛:Titanic: Machine Learning from Disaster。 总的来说收获还算是挺大的吧。本来想的是只简单的做一下,在整个进行的过程中发现有很多好的Kernels以及数据分析的流程和方法,但是却鲜有比较清晰直观的流程和较为全面的分析方法。所以,本着自己强迫症的精神,同时也算对这次小比赛的一些方式方法以及绘图分析技巧做一个较为系统的
AI研习社
2018/03/16
2.9K0
Kaggle Titanic 生存预测比赛超完整笔记(上)
期末大作业:客户流失数据可视化分析与预测
在二元问题中,你必须猜测一个示例是否应该归类到特定类别(通常是正类 (1) 和负类 (0)。在本例中,churn 是正类。
数据STUDIO
2024/08/01
4130
期末大作业:客户流失数据可视化分析与预测
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型
有人离职是因为“世界那么大,我想去看看”,也有人觉得“怀有绝技在身,不怕天下无路”。
CDA数据分析师
2022/11/17
7480
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型
Forest plot(森林图) | Cox生存分析可视化
Meta分析的结果使用森林图进行可视化展示很常见,其实COX生存分析也能用森林图展示。
生信补给站
2020/08/06
3K0
推荐阅读
相关推荐
Python实战|利用生存分析预测用户流失周期(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验