电信流失用户画像

news2024/11/25 1:03:56

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

文章目录

    • 一、数据读取与分析
      • 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.coloradmin.cn/o/874644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

挤牙膏的iPhone15真不值,实在太敷衍,看完基本没了购买欲望

随着苹果大概会如往年那样在9月13日发布iPhone15&#xff0c;目前iPhone15四款手机的消息已经基本剧透&#xff0c;没啥秘密可言&#xff0c;从透露的消息可以看出低配的iPhone15实在太鸡肋&#xff0c;不值得消费者购买。 据悉iPhone15和iPhone15 plus将采用灵动岛设计&#x…

systrace: 系统级跟踪工具的解析

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、获取systrace文件3.1 通过python命令获取3.1.…

HCIP学习-ospf3

前置内容 HICA学习--ospf动态路由协议_板栗妖怪的博客-CSDN博客 HCIA学习--ospf配置_板栗妖怪的博客-CSDN博客 HCIP学习--ospf1_板栗妖怪的博客-CSDN博客 HICP学习--ospf2_板栗妖怪的博客-CSDN博客 5类、7类路由类型 概念 5、7类的路由会纯在一个类型1和类型2的区别 设备…

Jlink RTT工具打印日志

背景 平常调试代码中使用串口打印log&#xff0c;往往需要接出串口引脚&#xff0c;比较麻烦&#xff0c;并且串口打印速度较慢&#xff0c;串口的中断可能会影响代码的执行效率。 SEGGER RTT支持使用J-link调试器输出来自目标微控制器的信息&#xff0c;也可以接收输入&#…

Python 潮流周刊#15:如何分析异步任务的性能?

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。标题取自其中一则分享&#xff0c;不代表全部内容都是该主题&#xff0c;特此声明。 本周刊精心筛选国内外的…

dubbo3-高级特性

dubbo-admin 1.dubbo-admin管理平台&#xff0c;是图形化的管理页面 2.从注册中心中获取所有的提供者/消费者进行配置管理 3.路由规则&#xff0c;动态配置&#xff0c;服务降级&#xff0c;访问控制&#xff0c;权重调整&#xff0c;负载均衡等管理功能 dubbo-admin是一个前…

一文读懂!一年耗能堪比2个三峡电站的大数据中心,背后竟隐藏着这些秘密......

全国大数据中心1年的能耗规模相当于2个三峡电站一整年的发电量&#xff0c;这是为什么&#xff1f; 大数据中心每耗费1度电&#xff0c;只有一半用在了“计算”上面&#xff0c;其他的都应用在散热、照明等方面到底是怎么回事&#xff1f; 为什么说在算力上每投入1元&#xff0…

【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(下)

基于 JenkinsDockerGit 的简单 CI 流程实践&#xff08;下&#xff09; 5.环境测试 5.1 远程 clone 代码测试 clone 云主机 docker-git 上的仓库 tomcat-java-demo.git&#xff1a; [rootdocker-jenkins ~]# yum install git vim wget -y [rootdocker-jenkins ~]# git confi…

【数据结构】-- 栈和队列

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;数据结构 &#x1f4a8;吾生也有涯&#xff0c;而知也无涯 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 前言一、栈&#x1f4d9;1.1 栈…

windows程序基础

一、windows程序基础 1. Windows程序的特点 1.用户界面统一、友好 2.支持多任务:允许用户同时运行多个应用程序(窗口) 3.独立于设备的图形操作 使用图形设备接口( GDI, Graphics Device Interface )屏蔽了不同硬件设备的差异&#xff0c;提供了设备无关的图形输出能力…

“新基建”重新定义大数据安全

摘要&#xff1a;数字信息经济发展时代,大数据已逐渐成为最新和最重要的生产要素。国家大力支持推进“新基建”发展战略,由此带来的大数据安全挑战俨然愈发严峻。“新基建”重新定义了大数据安全&#xff0c;面对层出不穷的网络安全事件,需要构建主动安全防御体系。 关键词:新…

前端开发环境搭建,换新电脑前端开发的步骤,node环境配置

一、下载安装nodeJS 1、下载地址官方网址 NodeJs 2、下载完成后&#xff0c;双击“node-v11.5.0-x64.msi”&#xff0c;开始安装Node.js&#xff0c;一路next&#xff0c;注意&#xff1a;安装目录看自己需求&#xff0c;本人安装在D:\nodejs目录下 3、测试 键盘按下【winR…

Kotlin读写分离CopyOnWriteArrayList

Kotlin读写分离CopyOnWriteArrayList 基于读写分离思想Copy-On-Write(COW)设计的线程安全ArrayList变体&#xff0c;读读共享、写写互斥、读写互斥、写读互斥。读时直接读&#xff0c;不用加锁同步&#xff0c;线程安全。写/删/修改数据时复制一个副本&#xff0c;在新的List副…

挣钱和赚钱是两个概念

挣钱和赚钱虽然听起来很相似&#xff0c;但实际上是两个完全不同的概念。 挣钱通常指的是通过劳动或者服务换取报酬&#xff0c;比如说工资、兼职、打零工等等。而赚钱则是指通过投资、创业等方式获得利润或者收益。 挣钱是一种被动的收入方式&#xff0c;需要付出时间和劳动才…

政策因子条件列表类型

type:1&#xff08;多选下拉输入&#xff09; 目前选项是本地写死得&#xff0c;传参拼接了carOwner这些东西&#xff0c;形式是多选输入 type:2 &#xff08;普通指定形式&#xff09; type:3&#xff08;普通区间形式&#xff09; type:4 (指定输入) 指定除外得特殊一种&…

Chrome浏览器安装Axure插件无法打开本地axure文件

Chrome浏览器安装Axure插件无法打开本地axure文件 Chrome浏览器按照axure插件即可打开 1&#xff0c;下载axure插件&#xff0c;由于Chrome国内连不了商店&#xff0c;只能另外下载 https://download.csdn.net/download/u013303534/88204888 2&#xff0c;Chrome安装插件&#…

c++11 标准模板(STL)(std::basic_stringbuf)(二)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbuf…

从零开始学习 Java:简单易懂的入门指南之抽象类接口内部类(十一)

面向对象进阶&#xff08;抽象类&接口&内部类&#xff09; 第一章 抽象类1.1 概述1.1.1 抽象类引入 1.2 abstract使用格式1.2.1 抽象方法1.2.2 抽象类1.2.3 抽象类的使用 1.3 抽象类的特征1.4 抽象类的细节1.5 抽象类存在的意义 第二章 接口2.1 概述2.2 定义格式2.3 接…

排序算法——基数排序(C语言)

基数排序的概念&#xff1a; 什么是基数排序&#xff1f;&#xff1f;&#xff1f;基数排序是一种和快排、归并、希尔等等不一样的排序...它不需要比较和移动就可以完成整型的排序。它是时间复杂度是O&#xff08;K*N&#xff09;&#xff0c;空间复杂度是O&#xff08;KM&…

【C语言】memcpy()函数

目录 一.memcpy()函数简介 1.函数功能 2.函数参数 1>.void * destination 2>.const void * source 3>.size_t num 3.函数返回值 4.函数头文件 二.memcpy()函数的具体使用 1.使用memcpy()函数完成拷贝整型数组数据 2.使用memcpy()函数拷贝结构体数据 三.模…