通信公司—用户流失分析及预测

一、背景介绍

某通信公司是通信界的巨头,其用户流失率若降低5%,那么公司利润将提升25%-85%。如今随着市场饱和度上升,高居不下的获客成本让公司遭遇了“天花板”,甚至陷入获客难的窘境。增加用户黏性和延长用户生命周期成了该通信亟待解决的问题。
数据来源:https://www.kaggle.com/blastchar/telco-customer-churn

二、分析目的

1、分析流失用户特征,生成易流失用户标签;
2、预测用户留存率随时间的变化,并提出合理化召回建议。

三、分析思路

在这里插入图片描述

分析工具:Tableau、Mysql、python、excel

四、可视化分析用户流失
1、用户属性特征

用户的基本特征有:性别(Gender)、年龄(Senior,1:年长,2:年轻)、有无伴侣(Partner)、有无家属(Dependents),各特征用户的流失率如下图所示:
在这里插入图片描述
从图中看出,年长用户、有伴侣和有家属的用户流失率明显较高,用户性别对流失率的影响不大。

2、用户服务属性

用户服务属性有:电话服务(PhoneService)、多条线路(MultipleLines)、网络服务(InternetService)、网络安全服务(OnlineSecurity),各特征用户的流失率如下图所示:

在这里插入图片描述
从图中可以看出,网络服务为Fiber optic、没有网络安全服务的客户流失率最高,其次是网络服务为DSL、有网络安全服务的客户,没有网络服务和网络安全服务的用户流失率最低。

3、用户交易属性

用户交易属性有:合同期限(Contract)、付款方式(PaymentMethod)、每月付费金额(MonthlyCharges)、总付费金额(TotalCharges),各特征用户的流失率如下图所示:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
从上图看出,合同期限为Month-to-month、付款方式为Electronic check、每月消费金额为70至100元、总消费300元以内的客户流失率最高。

4、小结

以下特征的用户最易流失:
1)年长用户、有伴侣、有家属;
2)网络服务为Fiber optic、没有网络安全服务;
3)同期限为Month-to-month、付款方式为Electronic check、每月消费金额为70至100元、总消费300元以内。

五、生成易流失等级标签
1、量化流失风险系数

各属性对用户流失的影响越大,则流失风险系数越高,具体划分如下:
在这里插入图片描述
用Mysql取出未流失客户,并计算风险系数:

SELECT customerID, IF(SeniorCitizen=1,2,0) as senior, IF(Partner='Yes',2,0) as partner, IF(Dependents='Yes',2,0) as dependents,
CASE 
  WHEN InternetService='Fiber optic' THEN
		2
	WHEN InternetService='DSL' THEN
	1
	ELSE
		0
END as internetservice,
CASE 
	WHEN OnlineSecurity='No' THEN
		2
	WHEN OnlineSecurity='Yes' THEN
	1
	ELSE
		0
END as onlinesecurity,
CASE 
	WHEN Contract='Month-to-month' THEN
		2
	WHEN Contract='One year' THEN
	1
	ELSE
		0
END as contract,
CASE 
	WHEN PaymentMethod='Electronic check' THEN
		2
	ELSE
		0
END as paymentMethod,
IF(MonthlyCharges>=70 and MonthlyCharges <=100,1,0) as monthlycharges,
IF(TotalCharges<300,1,0) as totalcharges
from ha.wa_fn;

查询结果如下:在这里插入图片描述

2、汇总风险系数,求出最终用户流失风险等级

将查询结果导入Excel中,求出最终的流失分析等级(churn_level):
在这里插入图片描述
流失风险等级分布如下:
在这里插入图片描述
接下来,运营部同事就可以根据流失风险等级,分层运营客户。

3、添加高流失风险标签

比如,风险等级大于9的定义为高流失风险客户:
在这里插入图片描述

六、基于生存分析预测用户流失
1、导入模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
# 生存分析模块
from lifelines import NelsonAalenFitter, CoxPHFitter, KaplanMeierFitter
from lifelines.statistics import logrank_test
# cox
from lifelines import CoxPHFitter
from sklearn.metrics import brier_score_loss
from sklearn.calibration import calibration_curve 
# matplotlib与pandas初始设置
plt.rcParams['font.sans-serif'] = ['SimHei']  #设置中文字体为黑体
plt.rcParams['axes.unicode_minus'] = False #正常显示负号
pd.set_option('display.max_columns', 30)
plt.rcParams.update({
   "font.family":"SimHei","font.size":14})
plt.style.use("tableau-colorblind10")

pd
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值