电信流失用户画像

三大运营商电信、联通、移动,都想扩大自己的客户群体。据研究,获取新客户所需的成本远高于保留现有客户的成本。因此为了满足在激烈竞争中的优势,提前预测出用户是否会流失,采取保留措施成为一大挑战。本文和你一起探索电信流失客户的画像,后续文章会对电信用户进行流失预测。

文章目录

    • 一、数据读取与分析
      • 1 数据集介绍
      • 2 读取数据
      • 3 客户流失概率
      • 4 不同指标下各类别对应的客户流失率
    • 二、流失客户画像分析-明细
      • 1 是否为老年人
      • 2 是否有伴侣
      • 3 是否有家属
      • 4 是否开通电话服务业务
      • 5 是否开通多线业务
      • 6 是否开通互联网业务
      • 7 是否开通网络安全服务
      • 8 是否开通在线备份
      • 9 是否开通设备保护
      • 10 是否订购技术支持服务
      • 11 是否订购网络电视
      • 12 是否订购网络电影
      • 13 签订合同方式
      • 14 是否开通电子账单
      • 15 客户端支付方式
      • 16 使用产品时长
      • 17 月费用
      • 18 总费用
    • 三、流失客户画像分析-总结

  

一、数据读取与分析

  

1 数据集介绍

  
首先介绍一下数据集,它总共包含了7043个用户的信息。每行存储一个用户的样本,每条样本包含21条属性,由用户基本信息、开通业务信息、签署合约信息、目标变量组成,具体如下:

在这里插入图片描述

  

2 读取数据

  
接着把数据读取到Python中进行预处理,读取数据代码如下:

import os
import numpy as np
import pandas as pd os.chdir(r'F:\公众号\电信客户流失')
data = pd.read_csv('Customer_Churn.csv')
data.head(2)

参数解释:
  
import:导入库。
  
os.chdir:设置数据读取的位置。
  
pd.read_csv:读取csv格式的数据。
  
data.head(2):打印data数据的前2行。
  
得到结果:
  
在这里插入图片描述

  
  

3 客户流失概率

  
然后看下客户流失的概率,代码如下:

data.Churn.value_counts()/len(data.Churn)

得到结果:

No     0.73463
Yes    0.26537
Name: Churn, dtype: float64

可以发现流失客户占比0.265。

  
  

4 不同指标下各类别对应的客户流失率

  

最后看下不同指标下各类别客户流失的概率,代码如下:

data['y'] = 0
data['y'][data['Churn'] =='Yes'] = 1
#流失客户y标签值为1否则为0
for i in data.columns[1:-2]:pivot_result = pd.pivot_table(data, values='y', index=[i], aggfunc=['count', np.sum, np.mean], margins=True )#对不同指标求缺失率pivot_result.columns = ['客户数', '流失客户数', '客户流失率']#重命名pivot_table列名pivot_result['客户流失率'] = pivot_result['客户流失率'].apply(lambda x:round(x, 3))#客户流失率值保留3位小数display(pivot_result)#展示结果print('================================')

得到结果(由于循环把全量变量进行了分析,这里只放一个指标进行展示,在后文再展开说明):
  
在这里插入图片描述
  
可以发现在性别指标中,男生和女生分别对应的客户流失率为0.269和0.262,跟整体的客户流失率0.265差别不大。说明性别指标对客户流失的影响不大。

  
  

二、流失客户画像分析-明细

  

1 是否为老年人

  
是否为老年人指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
老年人和非老年人的客户数分别为1142和5901,在客户数上老年人的占比要远小于非老年人。老年人的流失率为0.417,远高于非老年人的流失率0.236。说明如果想增加用户留存,可以考虑给老年人一些优惠活动或采取一些激励措施来减少老用户的流失。

  
  

2 是否有伴侣

  

是否有伴侣指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
有伴侣和没有伴侣的客户数分别为3402和3641,在客户数上两者分布较为均匀。但是没有伴侣的客户流失率为0.33,远高于有伴侣客户的流失率0.197。客户留存的方式可以根据不同地区不同人文习惯采取相应的措施。

  
  

3 是否有家属

  
是否有家属指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
有家属和没有家属的客户数分别为2110和4933,在客户数上有家属的少于没有家属的。同时有家属的客户流失率为0.155,低于没有家属客户的流失率0.313。

  
  

4 是否开通电话服务业务

  
是否开通电话服务业务指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
开通和没开通电话服务业务的客户数分别为6361和682,开通电话服务业务的客户数远超没开通的。开通和没开通电话服务业务分别对应的客户流失率为0.267和0.249,客户流失率没开通电话服务业务的略高于开通的。说明是否开通电话服务业务指标对客户流失的影响不大。

  
  

5 是否开通多线业务

  
是否开通多线业务指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
没有开通、没有电话服务和开通的客户数分别为3390、682和2971,没有开通多线业务的客户数最多,没有电话服务的客户数最少。没有开通、没有电话服务和开通的客户流失率分别为0.25、0.249和0.286,没有开通和没有电话服务的客户流失率非常接近,略低于开通多线业务的客户。说明是否开通多线业务指标对客户流失的影响不大。

  
  

6 是否开通互联网业务

  
是否开通互联网业务指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
开通数字用户线路、光纤和没有开通互联网业务的客户数分别为2421、3096和1526,开通光纤的客户数最多,没有开通互联网业务的客户数最少。客户流失率最高的是开通光纤业务的客户,值为0.419,其次是开通数字用户线路的客户,值为0.19,最低的是没有开通互联网业务的客户,值为0.074。

  
  

7 是否开通网络安全服务

  
是否开通网络安全服务指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
没有开通网络安全服务、没有互联网服务和开通网络安全服务的客户数分别为3498、1526和2019。客户流失率最高的是没有开通网络安全服务的客户,值为0.418,其次是开通网络安全服务的客户,值为0.146,最低的是没有网络服务的客户,值为0.074。

  
  

8 是否开通在线备份

  
是否开通在线备份指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
没有开通在线备份、没有互联网服务和开通在线备份的客户数分别为3088、1526和2429。客户流失率最高的是没有开通在线备份的客户,值为0.399,其次是开通在线备份的客户,值为0.215,最低的是没有网络服务的客户,值为0.074。

  
  

9 是否开通设备保护

  
是否开通设备保护指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
没有开通设备保护、没有互联网服务和开通设备保护的客户数分别为3095、1526和2422。客户流失率最高的是没有开通设备保护的客户,值为0.391,其次是开通设备保护的客户,值为0.225,最低的是没有网络服务的客户,值为0.074。

  
  

10 是否订购技术支持服务

  
是否订购技术支持服务指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
没有订购技术支持服务、没有互联网服务和订购技术支持服务的客户数分别为3473、1526和2044。客户流失率最高的是没有订购技术支持服务的客户,值为0.416,其次是订购技术支持服务的客户,值为0.152,最低的是没有网络服务的客户,值为0.074。

  
  

11 是否订购网络电视

  
是否订购网络电视指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
没有订购网络电视、没有互联网服务和订购网络电视的客户数分别为2810、1526和2707。客户流失率最高的是没有订购网络电视的客户,值为0.335,其次是订购网络电视的客户,值为0.301,最低的是没有网络服务的客户,值为0.074。
  
  

12 是否订购网络电影

  
是否订购网络电影指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
没有订购网络电影、没有互联网服务和订购网络电影的客户数分别为2785、1526和2732。客户流失率最高的是没有订购网络电影的客户,值为0.337,其次是订购网络电影的客户,值为0.299,最低的是没有网络服务的客户,值为0.074。
  
  

13 签订合同方式

  
签订合同方式指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
Month-to-month、One year和Two year的客户数分别为3875、1473和1695。客户流失率最高的是Month-to-month的客户,值为0.427,其次是One year的客户,值为0.113,最低的是Two year的客户,值为0.028。
  
  

14 是否开通电子账单

  
是否开通电子账单指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
没有开通电子账单和开通电子账单的客户数分别为2872和4171。开通电子账单客户流失率较高,值为0.336,没有开通电子账单客户流失率为0.163。

  
  

15 客户端支付方式

  
客户端支付方式指标不同值对应的客户流失率如下:
  
在这里插入图片描述
  
Bank transfer、Credit card、Electronic check和Mailed check的客户数分别为1544、1522、2365和1612。客户流失率最高的是Electronic check(电子支票)的客户,值为0.453,其次是Mailed check(邮寄支票)的客户,值为0.191,Bank transfer(银行转账)和Credit card(信用卡)最低,值分别为0.167和0.152。
  
由于使用产品时长、月费用、总费用三个指标的值个数较为分散,应用上面的pivot_table分析得不出结论,于是采用IV分析法。
  
  

16 使用产品时长

  

首先定义计算IV的函数,代码如下:

#切割变量
def bin_cut(data,x,y,n=10): #x为待分箱的变量,y为target变量.n为分箱数量total = y.count()         #计算总样本数bad = y.sum()             #计算坏样本数good = total-bad          #计算好样本数if x.value_counts().shape[0]==2:d1 = pd.DataFrame({'x':x,'y':y,'bucket':pd.cut(x,2)})elif x.value_counts().shape[0]<=50:cutOffPoints = ChiMerge_MaxInterval_Original(data, i, 'flag')cutOffPoints.append(max(data[i]))cutOffPoints.insert(0, min(data[i])-0.1)d1 = pd.DataFrame({'x':data_1[i],'y':data_1['flag'],'bucket':pd.cut(data_1[i],cutOffPoints)})else:d1 = pd.DataFrame({'x':x,'y':y,'bucket':pd.qcut(x,n,duplicates='drop')}) #用pd.cut实现等频分箱d2 = d1.groupby('bucket',as_index=True)     #按照分箱结果进行分组聚合d3 = pd.DataFrame(d2.x.min(),columns=['min_bin'])d3['min_bin'] = d2.x.min()  #箱体的左边界d3['max_bin'] = d2.x.max()  #箱体的右边界d3['bad'] = d2.y.sum()      #每个箱体中坏样本的数量d3['total'] = d2.y.count()  #每个箱体的总样本数d3['bad_rate'] = d3['bad']/d3['total']  #每个箱体中坏样本所占总样本数的比例d3['badattr'] = d3['bad']/bad           #每个箱体中坏样本所占坏样本总数的比例d3['goodattr'] = (d3['total'] - d3['bad'])/good    #每个箱体中好样本所占好样本总数的比例d3['woe'] = np.log(d3['badattr']/d3['goodattr'])   #计算每个箱体的woe值iv = ((d3['badattr']-d3['goodattr'])*d3['woe']).sum()      #计算变量的iv值d4 = (d3.sort_values(by='min_bin')).reset_index(drop=True) #对箱体从大到小进行排序cut = []cut.append(float('-inf'))for i in d4.min_bin:cut.append(i)cut.append(float('inf'))woe = list(d4['woe'].round(3))return iv,cut,woe,d4

然后计算使用产品时长的IV值,代码如下:

i = 'tenure'
iv,cut,woe,d4 = bin_cut(data,data[i],data['y'],n=10)
print('===========', i, '============')
print('iv=', iv)
d4

入参详解:
  
data:数据集
  
data[i]:待计算IV的变量
  
data[‘y’]:因变量y
  
得到结论:
  
在这里插入图片描述
  
使用产品时长变量的IV值为0.823,一般变量IV值高于0.3,属于强变量,即对于客户流失有强相关。从bad_rate一列可以看出,入网时长越短,客户流失率越高。

  
  

17 月费用

  
计算月费用的IV值,代码如下:

i = 'MonthlyCharges'
iv,cut,woe,d4 = bin_cut(data,data[i],data['y'],n=10)
print('===========', i, '============')
print('IV=', iv)
d4

得到结论:
  
在这里插入图片描述  
月费用变量的IV值为0.364,一般变量IV值高于0.3,属于强变量,即对于客户流失有强相关。从bad_rate一列可以看出,月费用越低,客户流失率越低,但是当月费用高于100元时,流失率有所下降。
  
  

18 总费用

  
计算总费用的IV值,代码如下:

i = 'TotalCharges'
data[i] = data[i].fillna(0)
data[i] = data[i].replace(' ', 0).astype(float)
iv,cut,woe,d4 = bin_cut(data,data[i],data['y'],n=10)
print('===========', i, '============')
print('IV=', iv)
d4

得到结论:
  
在这里插入图片描述
  
总费用变量的IV值为0.332,一般变量IV值高于0.3,属于强变量,即对于客户流失有强相关。从bad_rate一列可以看出,总费用越低,客户流失率越高,可能和客户是新用户相关。
  
  

三、流失客户画像分析-总结

  
总结的流失客户画像如下:
  
在这里插入图片描述
  
至此,电信流失客户画像已讲解完毕。后续文章会对电信客户流失进行预测,敬请期待图片。

【限时免费进群】 在群内免费讨论学习Python、玩转Python、风控建模、人工智能学习、数据分析等内容,也可交流工作中遇到的相关问题。需要的朋友添加微信号19967879837,加时备注想进的群,比如风控建模。

  
你可能感兴趣:
用Python绘制皮卡丘
用Python绘制词云图
用Python绘制520永恒心动
Python人脸识别—我的眼里只有你
Python画好看的星空图(唯美的背景)
【Python】情人节表白烟花(带声音和文字)
用Python中的py2neo库操作neo4j,搭建关联图谱
Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/66397.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7.1 动手实现AlexNet

AlexNet引入了dropput层 代码 import torch from torch import nn from d2l import torch as d2lnet nn.Sequential(# 样本数为1,通道数为96,11x11的卷积核,步幅为4&#xff0c;减少输出的高度和深度。 LeNet的通道数才6&#xff0c;此处96&#xff0c;为什么要增加这么多通…

VS2017 查看dll

dumpbin /exports xxxx.dll 导出函数 dumpbin /dependents xxxx.dll 依赖关系

打造数字化营销闭环,破解精准获客难题

现阶段&#xff0c;企业需要进行数字化营销闭环&#xff0c;以实现更精确的客户获取。随着数字技术的迅猛发展&#xff0c;企业需要将在线广告、社交媒体营销和数据分析等工具相互结合&#xff0c;建立一个完整的数字化营销流程。通过使用客户细分、精准定位和个性化广告等手段…

layui的基本使用-日期控件的业务场景使用入门实战案例一

效果镇楼&#xff1b; 1 前端UI层面&#xff1b; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&…

基于K8S环境部署Dolphinscheduler及简单应用

一、Dolphinscheduler简介 Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用…

学C的第三十三天【C语言文件操作】

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十二天【动态内存管理】_高高的胖子的博客-CSDN博客 1 . 为什么要使用文件 以前面写的通讯录为例&#xff0c;当通讯录运行起来的时候&#xff0c;可以给通讯录中增加、删…

Java课题笔记~ JSP开发模型

MVC 1.JSP演化历史 1. 早期只有servlet&#xff0c;只能使用response输出标签数据&#xff0c;非常麻烦 2. 后来有了jsp&#xff0c;简化了Servlet的开发&#xff0c;如果过度使用jsp&#xff0c;在jsp中即写大量的java代码&#xff0c;有写html表&#xff0c;造成难于维护&…

生信豆芽菜-单基因与基因集的关系

网址&#xff1a;http://www.sxdyc.com/panCancerGeneSet 该工具主要用于查看单基因在泛癌中与各个不同基因集的相关性 提交后等待运行成功即可&#xff0c;还可以关注公众号&#xff1a;豆芽数据分析

runtime error: member access within misaligned address(力扣最常见错误之一)

runtime error: member access within misaligned address&#xff08;力扣最常见错误之一&#xff09; 前言原因和解决办法总结 前言 最近博主在刷力扣时&#xff0c;明明代码逻辑都没问题&#xff0c;但总是报下面这个错误&#xff1a; runtime error: member access within…

vscode的ros拓展(插件)无法渲染urdf

文章目录 1.事件背景2.资料调查3.解决方案3.1.使用0.9.4版本3.2.使用脚本自己调用rviz渲染 1.事件背景 之前在vscode中一直用得好好的urdf预览功能&#xff0c;突然在某一天&#xff0c;不行了。 执行 URDF Preview之后&#xff0c;虽然弹出了一个URDF Preview的窗口&#xff…

JAVA Android 正则表达式

正则表达式 正则表达式是对字符串执行模式匹配的技术。 正则表达式匹配流程 private void RegTheory() {// 正则表达式String content "1998年12月8日&#xff0c;第二代Java平台的企业版J2EE发布。1999年6月&#xff0c;Sun公司发布了第二代Java平台(简称为Java2) &qu…

掌握Python的X篇_33_MATLAB的替代组合NumPy+SciPy+Matplotlib

numPy 通常与 SciPy( Scientific Python )和 Matplotlib (绘图库)一起使用&#xff0c;这种组合广泛用于替代 MatLab&#xff0c;是一个强大的科学计算环境&#xff0c;有助于我们通过 Python 学习数据科学或者机器学习。 文章目录 1. numpy1.1 numpy简介1.2 矩阵类型的nparra…