Python数据分析-电信客户流量预测与分析

一、背景介绍

研究背景:在快速发展和高度竞争的电信行业中,客户流失已成为运营商面临的主要挑战之一。电信服务的普及和用户选择的多样性使得保持客户忠诚度变得越来越困难。在这种背景下,准确预测客户流失并采取相应措施,对于运营商保持市场竞争力至关重要。。。

二、研究意义

研究意义:提高客户留存率:通过预测和识别可能流失的客户,电信运营商可以采取针对性的措施来提高客户留存率,比如提供定制化服务或优惠。优化市场策略:深入分析用户行为和特征有助于运营商更好地理解市场需求,从而优化其产品和服务,提高市场竞争力。。。。

三、研究问题

在当前的市场环境下,电信运营商面临的一个主要问题是如何准确预测并有效减少客户流失(churn)。客户流失不仅直接影响运营商的收入,还可能引起品牌价值和市场份额的下降。。。。

四、实证分析

本文数据集的原始图如下:

数据和完整代码

报告代码数据

据集具体指标含义如下:

使用月数:某段时间用户使用服务月数;

流失用户:观测期内用户是否已经流失。1=是,0=否;

套餐金额:用户购买的月套餐金额,1为96元以下,2为96~225 元,3为225 元以上;

额外通话时长:实际通话时长减去套餐内通话时长的月均值(单位:min),这部分需要额外交费;

额外流量:实际流量减去套餐内流量的月均值(单位:ME),这部分需要额外交费;

改变行为:是否曾经更改过套餐金额,1=是,0=否;

服务合约:是否与运营商签订过服务合约,1=是,0=否;

关联购买:用户在移动服务中是否同时办理其他业务(主要是固定电话和宽带业务),1=同时办理一项其他业务,2=同时办理两项其他业务,0=没有办理其他业务;

集团用户:办理的是否是集团业务,相比个人业务,集体办理的号码在集团内拨打有一定优惠。1=是,0=否。

首先导入基础的包:

随后读取数据,并展示数据前后5行:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['KaiTi']  #中文
plt.rcParams['axes.unicode_minus'] = False   #负号

查看数据集整体形状:

其中包括4975个用户,每个用户包括8个特征。

随后查看一下数据类型:

 

接下来进行描述性统计分析,使用describe()函数:

data.describe()

 该函数会将数据集的总计数值、最大最小值、中位数、均值、分位数等等展示计算出来。每列的统计数据描述了该列数据的分布情况。例如,“ID”列显示的计数是4975,意味着数据集中有4975个观测值。。。。

接下来进行数据集的缺失值的可视化:

import missingno as msno
msno.matrix(data)

 

发现数据集很完整,并没有缺失值。

但是为了流程的完整性继续进行处理:

#若是有一行全为空值就删除
data.dropna(how='all',inplace=True)
#缺失到一定比例就删除
miss_ratio=0.3
for col in data.columns:if  data[col].isnull().sum()>data.shape[0]*miss_ratio:print(col)data.drop(col,axis=1,inplace=True)

。。。

填充缺失值:

缺失值有很多填充方式,可以用中位数,均值,众数。

也可以就采用那一行前面一个或者后面一个有效值去填充空的。

data.fillna(data.median(),inplace=True)   #mode,mean
data.fillna(method='ffill',inplace=True)   #pad,bfill/backfill

接下来进行特征工程,首先对训练集取出y。

#剩下的变量独热处理
data=pd.get_dummies(data)

我们还要画图查看每个X的分布,查看特征变量的箱线图分布。 

dis_cols = 4                   #一行几个
dis_rows = len(columns)
plt.figure(figsize=(4 * dis_cols, 4 * dis_rows))for i in range(len(columns)):plt.subplot(dis_rows,dis_cols,i+1)sns.boxplot(data=data[columns[i]], orient="v",width=0.5)plt.xlabel(columns[i],fontsize = 20)
plt.tight_layout()
#plt.savefig('特征变量箱线图',formate='png',dpi=500)
plt.show()

然后还需要查看响应变量y的分布

plt.figure(figsize=(6,2),dpi=128)
plt.subplot(1,3,1)
y.plot.box(title='响应变量箱线图')
plt.subplot(1,3,2)
y.plot.hist(title='响应变量直方图')
plt.subplot(1,3,3)
y.plot.kde(title='响应变量核密度图')
#sns.kdeplot(y, color='Red', shade=True)
#plt.savefig('响应变量.png')
plt.tight_layout()
plt.show()

 箱形图(左图):显示了单个变量的五数概括(最小值、第一四分位数、中位数、第三四分位数和最大值)以及离群点。在这个箱形图中,可以看到一个明显的离群点。直方图(中图):显示了数据的分布情况,这里几乎所有的数据都集中在一个单一的值上

然后对X异常值处理,先标准化:

scaler = StandardScaler()
X_s = scaler.fit_transform(data)

相关系数热力图查看

深紫色的格子表示两个变量之间有较强的负相关性。相关系数可能是-0.97、-0.98这样的低值,意味着这些变量之间存在强烈的反向关系,一个变量的增加往往伴随着另一个变量的减少。。。。。

接下来模型构建与评估

from sklearn.naive_bayes import BernoulliNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import AdaBoostClassifier  ##自适应提升Adaboost
for i in range(3):model_C=model_list[i]name=model_name[i]model_C.fit(X_train_s, y_train)s=model_C.score(X_val_s, y_val)print(name+'方法在验证集的准确率为:'+str(s))

第一个模型的评分为0.914572864321608。

第二个模型的评分为0.9668341708524714。

第三个模型的评分为0.9829145728643216。

分析这些结果,我们可以看出:

所有模型在验证集上的得分都相当高,意味着它们对数据有很好的预测能力。

第三个模型具有最高的评分(约0.983),这可能表明它在这三个模型中预测验证集的效果最好。从以上结果可以看出,三种机器学习方法的最终预测结果都较好,准确率均在90%以上,其中分类情况最优的是自适应提升方法随后是KNN,其次是二项朴素贝叶斯。

五、总结

在这个案例中,我们针对某电信运营商的用户手机号码的使用数据进行了分析和研究,旨在预测客户是否会在未来一段时间内流失。我们采用了三种机器学习模型,包括二项朴素贝叶斯模型、K最近邻(KNN)模型和自适应提升模型,并对它们的预测效果进行了比较。最终,我们发现自适应提升模型在预测客户流失方面表现最优。。。。。

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

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

相关文章

深入理解Java中的Collectors(Stream流)

引言 在 Java 的 Stream API 中,Collectors 是一个非常强大的工具类,它提供了许多静态方法,用于将 Stream 的元素收集到集合、字符串或其他类型的结果中。使用 Collectors,我们可以轻松地进行数据聚合和转换操作。 文章目录 引言…

【threejs】火焰特效制作

2024-06-26 08-57-16火焰 shader 来源 //shadertory:https://www.shadertoy.com/view/ctVGD1//shadertory:https://www.shadertoy.com/view/ml3GWs 代码 import { DoubleSide, ShaderChunk, ShaderMaterial } from "three";export default fu…

华为OD机试【高矮个子排队】(java)(100分)

1、题目描述 现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或…

利用BFS解决每个零售店到仓库最短距离之和问题

1、题目 矩阵中有3种类型:0仓库,-1障碍,1零售店。现在每个零售店要去距离它最近的仓库取货物,请计算出所有零售店到最近仓库距离之和,假设矩阵中每个单元格之间距离为1。如果遇到障碍物,则表示无法通过。可…

图神经网络实战(15)——SEAL链接预测算法

图神经网络实战(15)——SEAL链接预测算法 0. 前言1. SEAL 框架1.1 基本原理1.2 算法流程 2. 实现 SEAL 框架2.1 数据预处理2.2 模型构建与训练 小结系列链接 0. 前言 我们已经学习了基于节点嵌入的链接预测算法,这种方法通过学习相关的节点嵌…

2024年上半年软件设计师上午真题及答案解析

1.在计算机网络协议五层体系结构中,( B )工作在数据链路层。 A.路由器 B.以太网交换机 C.防火墙 D.集线器 网络层:路由器、防火墙 数据链路层:交换机、网桥 物理层:中继器、集线器 2.软件交付之后&#xff…

数据可视化期末考试(编程)

1.KNN 1.新增数据的分类 import pandas as pd # 您的原始数据字典 data { 电影名称: [电影1, 电影2, 电影3, 电影4, 电影5], 打斗镜头: [10, 5, 108, 115, 20], 接吻镜头: [110, 89, 5, 8, 200], 电影类型: [爱情片, 爱情片, 动作片, 动作片, 爱情片] } …

uni-app uni-data-picker级联选择器无法使用和清除选中的值

出现问题&#xff1a; 使用点击右边的叉号按钮无法清除已经选择的uni-data-picker值 解决办法&#xff1a; 在uni-app uni-data-picker使用中&#xff0c;要添加v-model&#xff0c;v-model在官网的示例中没有体现&#xff0c;但若不加则无法清除。 <uni-data-picker v-m…

OpenAI用GPT-4o打造癌症筛查AI助手;手机就能检测中风,准确率达 82%!中国气象局发布AI气象大模型...

AI for Science 企业动态速览—— * 皇家墨尔本大学用 AI 检测患者中风&#xff0c;准确率达 82% * OpenAI 用 GPT-4o 模型打造癌症筛查 AI 助手 * 中国气象局发布 AI 气象大模型风清、风雷、风顺 * AI 药企英矽智能&#xff1a;小分子抑制剂已完成中国 IIa 期临床试验全部患者…

GPT-5智能新纪元的曙光

在美国达特茅斯工程学院周四公布的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&#xff0c;给出了肯定答案并表示将在一年半后发布。穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的成长。 这一爆炸性的消息&#xff0c;震动了整体…

linux下进度条的实现

目录 一、代码一版 1.processbar.h 2.processbar.c 3.main.c 二、代码二版 1.processbar.h 2.processbar.c 3.main.c 三、改变文字颜色 一、代码一版 使用模块化编程 1.processbar.h #include<stdio.h> #define capacity 101 //常量使用宏定义 #define style…

代码随想录——买股票的最佳时机Ⅱ(Leecode122)

添加链接描述 贪心 局部最优&#xff1a;手机每天的正利润 全局最优&#xff1a;求最大利润 class Solution {public int maxProfit(int[] prices) {int res 0;for(int i 1; i < prices.length; i){res Math.max(prices[i] - prices[i - 1], 0);}return res;} }

webstorm无法识别tsconfig.json引用项目配置文件中的路径别名

问题 vite项目模板中&#xff0c;应用的ts配置内容写在tsconfig.app.json文件中&#xff0c;并在tsconfig.json通过项目引用的方式导入 {"files": [],"references": [{"path": "./tsconfig.app.json"},{"path": "./t…

2024年第十五届蓝桥杯青少组大赛8月24日开启

据蓝桥杯青少组官网显示&#xff0c;2024年第十五届蓝桥杯青少组大赛8月24日开启。 蓝桥杯青少组历届题库地址&#xff1a;http://www.6547.cn/question/cat/2 蓝桥杯青少组历届真题下载&#xff1a;http://www.6547.cn/wenku/list/10

统一视频接入平台LntonCVS视频共享交换平台智慧景区运用方案

随着夏季的到来&#xff0c;各地景区迎来了大量游客&#xff0c;而景区管理面临的挑战也愈加严峻&#xff0c;尤其是安全问题显得格外突出。 视频监控在预防各类安全事故方面发挥着重要作用&#xff0c;不论是自然景区还是人文景区&#xff0c;都潜藏着诸多安全隐患&#xff0…

排序之插入排序----直接插入排序和希尔排序(1)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 排序之插入排序----直接插入排序和希尔排序(1) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨…

图形编辑器基于Paper.js教程04: Paper.js中的基础知识

背景 了解paper.js的基础知识&#xff0c;在往后的开发过程中会让你如履平地。 基础知识 paper.js 提供了两种编写方式&#xff0c;一种是纯粹的JavaScript编写&#xff0c;还有一种是使用官方提供的PaperScript。 区别就是在于&#xff0c;调用paper下的字对象是否需要加pa…

Windows server 由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开。

问题现象&#xff1a; 解决办法 临时远程方式1: 打开 mstsc 时带上 /admin 等参数&#xff0c;如下图所示&#xff1a; 使用“mstsc /admin /v:目标ip”来强制登录服务器&#xff0c;但只能是管理员身份。 远程方式2&#xff1a; 通过VM远程登陆系统后&#xff0c;运行输入R…

Python编程编辑器PyCharm 界面介绍

PyCharm 界面介绍 当你打开 PyCharm 后&#xff0c;会看到以下主要界面区域&#xff1a; 1&#xff09;菜单栏&#xff1a; 位于界面最顶端&#xff0c;包含文件&#xff08;File&#xff09;、编辑&#xff08;Edit&#xff09;、查看&#xff08;View&#xff09;、导航&a…

ICMAN液位检测——WS003B管道检测模组

ICMAN液位检测之WS003B管道检测模组 体积小&#xff0c;成本低&#xff0c; 液位检测精度高&#xff0c; 有水输出低电平无水高电平&#xff0c; 适用于饮水机、咖啡机、扫地机器人、洗地机等&#xff0c; 有需要朋友快联系我吧&#xff01; AWE展会不容错过的ICMAN检测模组…