基于Spark的电信客户流失分析

大数据学习路线图

【版权声明】版权所有,严禁转载,严禁用于商业用途,侵权必究。
作者:厦门大学人工智能研究院2021级研究生 刘忻忻
指导老师:厦门大学数据库实验室 林子雨 博士/副教授
相关教材:林子雨、郑海山、赖永炫编著《Spark编程基础(Scala版)》
【查看基于Scala语言的Spark数据分析案例集锦】

本案例针对电信客户数据进行分析,采用Scala为编程语言,采用Hadoop存储数据,采用Spark对数据进行处理分析,并对结果进行数据可视化。

一、背景

1、数据背景

数据来自kaggle电信客户流失WAFn-UseC-Telco-Customer-Churn.csv。可以从百度网盘下载数据集(提取码:ziyu)。
流失用户,是指那些曾使用过电信公司服务的用户,但由于产品或用户个人的因素导致用户最终不再使用。当然,一个公司的产品一定会存在一些自然流失用户,这是用户新老交替中不可避免的,但流失用户的比例和变化趋势能够说明公司当前产品的问题以及未来发展的趋势。
大多数公司都有大量的用户,但不能为每个用户都投入大量时间。如果公司可以预测哪些用户可能提前流失,这样就能将主要的精力聚焦于这类用户,通过产品策略和运营活动等手段将这些用户留下来。最终目的是实施有效的用户挽留策略,并提高用户的黏性,扩大公司产品的覆盖范围。

2、环境准备

①数据预处理:Python3.0 开发工具:Jupyter Notebook
②数据分析:Linux: Ubuntu16.04 、Hadoop: 3.1.3 、Spark:3.2.0
Scala:2.12.1、开发工具:IntelliJ IDEA
③数据可视化:Python3.0 开发工具:Jupyter Notebook

二、数据预处理

数据集总计7043条数据,特征字段21个。
特征含义:
customerID : 用户ID。
gender:性别(Female & Male)
SeniorCitizen :老年用户 (1表示是,0表示不是)
Partner :伴侣用户 (Yes or No)
Dependents :亲属用户 (Yes or No)
tenure : 在职时长(0-72月)
PhoneService : 是否开通电话服务业务 (Yes or No)
MultipleLines: 是否开通了多线业务(Yes 、No or No phoneservice 三种)
InternetService:是否开通互联网服务 (No, DSL数字网络,fiber optic光纤网络 三种)
OnlineSecurity:是否开通网络安全服务(Yes,No,No internetserive 三种)
OnlineBackup:是否开通在线备份业务(Yes,No,No internetserive 三种)
DeviceProtection:是否开通了设备保护业务(Yes,No,No internetserive 三种)
TechSupport:是否开通了技术支持服务(Yes,No,No internetserive 三种)
StreamingTV:是否开通网络电视(Yes,No,No internetserive 三种)
StreamingMovies:是否开通网络电影(Yes,No,No internetserive 三种)
Contract:签订合同方式 (按月,一年,两年)
PaperlessBilling:是否开通电子账单(Yes or No)
PaymentMethod:付款方式(bank transfer,credit card,electronic check,mailed check)
MonthlyCharges:月费用
TotalCharges:总费用
Churn:该用户是否流失(Yes or No)
首先查看数据大致信息

查看是否有缺失值,不同值以及数据类型和内存信息。

可以看到数据是没有缺失值的但是字段TotalCharge总消费金额应该是float类型,但数据集中显示为object,猜测应该是存在空字符串,用0进行替代。

并且有很多object类型的数据,这里将部分文本类型的数据数值化,方便后续分析,包括性别、是否有伴侣、是否有孩子、签约情况、是否采用电子发票以及客户是否流失。

将文件上传到hdfs
预处理结束。

三、数据分析

通过特征情况发现,影响用户流失的因素主要可以分为三个方面:
产品本身
用户属性
用户的使用行为和消费行为

1、首先,从产品方面来看,电信产品的主要使用业务为电话服务和网络服务。这里我们生成以下三种条件下的csv,用于对比客户流失柱状图

①两种业务都开通的

②只开通电话的

③只开通网络的

接下来的代码是对网络业务细分数据进行分割,挑选出同时办理网络服务以及网络细分业务的客户。
val result3 = spark.sql("select OnlineSecurity,OnlineBackup,DeviceProtection,TechSupport,StreamingTV,StreamingMovies,Churn from df where InternetService != 'No'")

2、之后,从用户维度来看,在用户关系维度中,用户各项属性包括:在职时间、性别、是否为老年人、是否有需要抚养的孩子、是否有伴侣五个方面。

这里我们计算相关性系数,得到一个包含用户属性以及用户消费行为属性与Churn的相关性表格,用于画热力图。
这里以TotalCharges和Churn的相关系数为例:
val df_real = spark.sql("select TotalCharges,Churnfrom df " )
val rdd_real = df_real.rdd.map(x=>(x(0).toString.toDouble ,x(1).toString.toDouble ))
val PM10 = rdd_real.map(x=>x._1.toDouble )
val Air = rdd_real.map(x=>x._2.toDouble )
val cor_pearson:Double = Statistics.corr(TotalCharges, Churn, "pearson")

3、最后,从用户消费行为方面来看,主要包括:签约的期限、是否采用电子发票、支付方式、月消费、总消费。

这里我们分别分割出总消费与月消费排名前一百以及后一百名的客户的流失情况,用于做饼状图。
总消费前一百:
val result = spark.sql("select Churn,TotalCharges from df order by TotalCharges desc limit 100 ")
总消费后一百,因为前文将空数据处理成了0,为了避免因此而造成的数据不准确的情况,这里提取大于0的数据:
val result1 = spark.sql("select Churn,TotalCharges from df where TotalCharges > 0 order by TotalCharges limit 100 ")
月消费前一百
val result2 = spark.sql("select Churn,MonthlyCharges from df where MonthlyCharges order by MonthlyCharges desc limit 100 ")
月消费后一百:
val result3 = spark.sql("select Churn,MonthlyCharges from df where MonthlyCharges order by MonthlyCharges asc limit 100 ")

四、数据可视化

1、从左到右依次为网络于电话业务都开通的、只开通电话业务的和只开通网络业务的客户的客户流失柱状图。

说明只开通电话业务的客户更不容易流失,也就是说需要重点分析一下网络业务中存在的问题,以及网络细分业务对客户的影响。

2、网络服务办理情况对用户流失的影响柱状图

可以发现,办理网络服务中光纤服务的用户流失情况,明显是要高于办理电话拨号服务的用户。据此推测,光纤服务是存在问题的,也是急需改进的。 通过从产品本身方面定位到了网络服务中是存在问题的

3、通过柱状图具体看一下网络服务中的各项细分服务对用户流失会造成怎样的影响。

由上图可以发现,对用户流失有较大影响的附加网络服务是:在线安全、在线备份、设备保护和技术支持。未办理这四种子服务的用户流失情况较为严重。 同时,这种情况也表明,该公司的基础网络服务是存在问题的,如果用户仅办理基础网络服务而不办理附加子服务,很可能在安全和使用体验方面并不好,因此需要附加服务来完善。

4、用户关系属性以及用户消费行为属性与Churn的热力图。

从图中可以看出,性别、是否已有伴侣、是否有孩子以及是否为老年用户对客户流失影响不大,签约时间以及在职时长越久用户越不容易流失,用户在职时间以及月消费、总消费和用户流失之间的相关性较强。

5、用户职业、月消费与用户流失之间的相关性

由上图可以看出,几乎所有在职时长的用户中,月消费较高的用户都更易流失。据此推测原因是,月消费较高的用户消费能力或收入水平也很高,更在乎的是提供的服务用户体验是否好、是否能满足其实际需求。我们在前面发现,该公司的基础网络服务本身是存在问题的,高消费用户在基础服务的体验不好得情况下,也就更容易流失,这也是一个比较严重的问题,直接影响的是该公司的总体收入。

6、用户职业、总消费与用户流失之间的相关性

在总消费金额上,可以发现一部分流失用户在消费500元左右后流失的,另外一部分用户是消费了6000元以上才流失掉的。同时,在在职时长方面与月消费情况大体相同,都是每个在职时长中消费较高的人群流失了。

7、总消费与月消费排名前十以及后十名的客户的流失情况饼状图

从总消费情况来看,当成为消费最高的群体时,基本已经是该公司的铁杆用户,流失率很低,而消费少于100元的群体则流动性很高,而从月消费饼状图可以看出,消费高的群体流失率略高。

五、结论

从产品本身上来看:
网络基本服务存在较大问题,尤其是光纤业务。
从网络子服务来看,未办理在线安全、在线备份、技术支持和硬件保护的用户更易流失。
从用户属性和用户消费行为上来看:
对于大部分的在职时长来说,消费较高的用户更易流失,并且月付费较高的用户有较大概率流失。