【python】python商业客户流失数据模型训练分析可视化(源码+数据集+课程论文)【独一无二】

news2025/1/15 2:46:38

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


系列文章目录


目录

  • 系列文章目录
  • 一、设计要求
  • 二、数据分析可视化
  • 三、评价指标
  • 四、模型训练及划分
  • 五、模型训练及搭建


一、设计要求

本项目旨在分析和可视化商业客户流失的数据,探讨不同因素对客户流失的影响,并通过模型预测和评估客户流失情况。数据集来源于某商业机构,包含了客户的基本信息和通话记录,包括客户是否有国际通话计划、语音信箱计划、日间通话时长、傍晚通话时长、夜间通话时长、国际通话时长等多项指标。

在可视化部分,采用了折线图、柱状图、饼状图、箱线图、雷达图和组合图等多种图表类型,从不同角度展示了数据的分布和特征。折线图展示了客户服务呼叫次数随国际通话次数的变化情况,柱状图则展示了不同区号的客户流失情况。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈


二、数据分析可视化

意义:该柱状图展示了不同区号的客户流失情况。每个区号对应的柱形代表在该区号内的客户流失数量。
分析:通过柱状图可以发现,不同区号的客户流失情况有显著差异。某些区号的客户流失数量明显较高,提示这些区域可能存在较高的流失风险,企业可以针对这些区域采取特定的保留措施。
在这里插入图片描述
意义:该饼状图展示了客户是否订阅国际通话计划的分布情况。两个部分分别表示订阅和未订阅国际通话计划的客户比例。
分析:饼状图显示了大部分客户没有订阅国际通话计划(例如,70%),而少部分客户订阅了该计划(例如,30%)。这表明国际通话计划在客户中的普及率较低,企业可以考虑推广该服务以增加其吸引力。
在这里插入图片描述

意义:该箱线图展示了不同流失状态下客户的白天通话时长分布情况。通过对比流失和未流失客户的通话时长,可以了解白天通话时长是否对客户流失有影响。
分析:从箱线图中可以看到,流失客户和未流失客户的白天通话时长分布有一定差异。流失客户的通话时长较为集中,且中位数稍低于未流失客户。说明白天通话时长可能是影响客户流失的一个因素,企业可以关注这一点来优化服务。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈

在这里插入图片描述
意义:该雷达图比较了流失和未流失客户在白天、傍晚、夜间和国际通话时长上的平均值。通过雷达图可以直观地看到不同客户类型的通话行为差异。
分析:雷达图显示了流失客户在各个时间段的通话时长普遍低于未流失客户,特别是在夜间通话和国际通话时长方面差异更为明显。这表明通话时长和客户流失之间存在一定关联,通话较少的客户更容易流失。
在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈

意义:该组合图结合了柱状图和密度图,展示了客户流失的数量和白天通话时长的分布情况。柱状图表示客户流失的数量,密度图表示流失和未流失客户的白天通话时长分布。
分析:组合图显示,未流失客户的白天通话时长分布较为均匀,而流失客户则集中在较低的通话时长范围内。这进一步表明白天通话时长对客户流失有显著影响,企业可以通过增加客户的互动和通话时长来降低流失率。
在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈


三、评价指标

首先,生成了混淆矩阵(Confusion Matrix)来评估模型的分类性能。混淆矩阵是一种直观的工具,可以展示模型在预测客户流失和未流失时的正确和错误分类情况。通过混淆矩阵,可以得到四个重要的指标:真正例(True Positives, TP)、假正例(False Positives, FP)、真负例(True Negatives, TN)和假负例(False Negatives, FN)。这些指标有助于进一步计算模型的准确率(Accuracy)、精确率(Precision)、召回率(Recall)和F1分数(F1 Score)。准确率表示模型预测正确的比例,精确率表示模型预测为正例的样本中实际为正例的比例,而召回率则表示实际为正例的样本中被正确预测为正例的比例。F1分数是精确率和召回率的调和平均数,综合了这两个指标的优点,提供了对模型性能的全面评价。

其次,生成了分类报告(Classification Report),该报告详细列出了模型在不同分类上的精确率、召回率和F1分数。分类报告可以帮助了解模型在预测客户流失(流失类)和未流失(未流失类)时的具体表现。通过比较不同分类上的评价指标,可以识别出模型在哪些方面表现较好,哪些方面需要改进。例如,如果模型在预测客户流失时的召回率较低,这意味着模型未能识别出所有实际流失的客户,可能需要进一步优化以提升召回率。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈

此外,还绘制了ROC曲线(Receiver Operating Characteristic Curve)并计算AUC值(Area Under the Curve)。ROC曲线展示了模型在不同阈值下的假阳性率(False Positive Rate)和真正率(True Positive Rate),可以直观地评估模型的区分能力。AUC值是ROC曲线下的面积,值越大表示模型的区分能力越强。AUC值范围在0.5到1之间,其中0.5表示模型没有区分能力,相当于随机猜测,而1表示模型具有完美的区分能力。通过计算AUC值,可以得到一个综合指标,评价模型在不同阈值下的总体表现。

|

变量名称变量类型描述
State类别型客户所在的州
Account Length数值型账户存在的时长(单位:月)
Area Code类别型区号
Phone类别型电话号码
Int’l Plan类别型是否有国际通话计划(0:没有,1:有)
VMail Plan类别型是否有语音信箱计划(0:没有,1:有)
VMail Message数值型语音信箱消息数量
Day Mins数值型白天通话时长(单位:分钟)
Day Calls数值型白天通话次数
Day Charge数值型白天通话费用
Eve Mins数值型傍晚通话时长(单位:分钟)
Eve Calls数值型傍晚通话次数
Eve Charge数值型傍晚通话费用
Night Mins数值型夜间通话时长(单位:分钟)
Night Calls数值型夜间通话次数
Night Charge数值型夜间通话费用
Intl Mins数值型国际通话时长(单位:分钟)
Intl Calls数值型国际通话次数
Intl Charge数值型国际通话费用
CustServ Calls数值型客户服务呼叫次数
Churn?类别型客户是否流失(False:未流失,True:流失)

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈

数据清洗

数据清洗是数据分析过程中非常重要的一步。清洗数据的目的是确保数据的完整性、准确性和一致性,为后续的分析和建模打下坚实的基础。以下是对数据集进行重复值、缺失值和异常值的统计和处理的详细步骤:

  1. 重复值的统计和处理

重复值是指在数据集中出现多次的完全相同的记录。这些重复记录可能会影响分析结果,因此需要对其进行检查和处理。

# 统计重复值的数量
duplicate_count = data.duplicated().sum()
print(f"重复值的数量: {duplicate_count}")

# 删除重复值
data_cleaned = data.drop_duplicates()
print(f"数据清洗后总记录数: {len(data_cleaned)}")
  1. 缺失值的统计和处理

缺失值是指在数据集中某些记录缺少某些属性值。缺失值的存在可能会影响模型的训练和预测,因此需要对其进行统计和处理。

# 统计每列缺失值的数量
missing_values = data_cleaned.isnull().sum()
print("每列缺失值的数量:")
print(missing_values)

# 处理缺失值(示例:删除含有缺失值的记录)
data_cleaned = data_cleaned.dropna()
print(f"数据清洗后总记录数: {len(data_cleaned)}")

# 或者,可以用其他方法处理缺失值,例如用均值填充
# data_cleaned = data_cleaned.fillna(data_cleaned.mean())

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈

  1. 异常值的统计和处理

异常值是指数据中偏离正常范围的值。异常值可能是由于数据录入错误或其他原因导致的,需要对其进行统计和处理。

import numpy as np

# 定义函数识别异常值
def find_outliers(column):
    Q1 = column.quantile(0.25)
    Q3 = column.quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    return column[(column < lower_bound) | (column > upper_bound)]

# 统计各数值列中的异常值
for col in ['Account Length', 'VMail Message', 'Day Mins', 'Day Calls', 'Day Charge', 
            'Eve Mins', 'Eve Calls', 'Eve Charge', 'Night Mins', 'Night Calls', 
            'Night Charge', 'Intl Mins', 'Intl Calls', 'Intl Charge', 'CustServ Calls']:
    outliers = find_outliers(data_cleaned[col])
    print(f"{col} 列中的异常值数量: {len(outliers)}")

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈


四、模型训练及划分

为了评估模型的性能和避免过拟合,将数据集划分为训练集和测试集,比例为80%和20%。这意味着使用80%的数据来训练模型,并保留20%的数据来测试和验证模型的性能。

将数据划分为训练集和测试集的主要目的是为了模拟模型在真实环境中的表现。在训练阶段,模型通过观察和学习训练集中的数据及其标签来构建预测规则。通过对大量样本的学习,模型能够捕捉到数据中的模式和特征。

from sklearn.model_selection import train_test_split

# 提取特征变量和目标变量
X = data.drop(columns=['State', 'Account Length', 'Area Code', 'Phone', 'Churn?'])
y = data['Churn?'].apply(lambda x: 1 if x == 'True.' else 0)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 输出训练集和测试集的大小
print(f"训练集大小: {X_train.shape[0]},测试集大小: {X_test.shape[0]}")

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈


五、模型训练及搭建

在模型训练及搭建阶段,选择了随机森林分类器(RandomForestClassifier)作为预测模型。随机森林是一种集成学习方法,通过构建多棵决策树来提高模型的准确性和稳定性。具体来说,随机森林通过随机采样和特征选择生成多棵树,然后将各树的预测结果进行综合,从而得到最终的预测结果。

print("预测概率")
y_pred_prob = model.predict_proba(X_test)[:, 1]

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈

生成混淆矩阵
在这里插入图片描述

基于混淆矩阵,可以计算一系列模型效果评估指标,这些指标包括:
精确率(Precision):表示被模型预测为正类的样本中实际为正类的比例。计算公式为:Precision = TP / (TP + FP)
召回率(Recall):表示实际为正类的样本中被模型正确预测为正类的比例。计算公式为:Recall = TP / (TP + FN)
F1分数(F1 Score):精确率和召回率的调和平均数,用于综合评价模型性能。计算公式为:F1 Score = 2 * (Precision * Recall) / (Precision + Recall)
准确率(Accuracy):表示被正确分类的样本占总样本的比例。计算公式为:Accuracy = (TP + TN) / (TP + FP + TN + FN)
使用 classification_report 函数生成这些评估指标:

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈

在这里插入图片描述

fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC曲线 (AUC = %0.2f)' % auc(fpr, tpr))
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('假阳性率')
plt.ylabel('真正率')
plt.title('接收者操作特征(ROC)曲线')
plt.legend(loc="lower right")
plt.show()

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “客户流失” 获取。👈👈👈

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

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

相关文章

btstack协议栈实战篇--GAP Link Key Management

btstack协议栈---总目录-CSDN博客 目录 1.GAP 链接密钥逻辑 2.蓝牙逻辑 3.主应用程序设置 4.log信息 展示了如何遍历存储在 NVS 中的经典链接密钥&#xff0c;链接密钥是每个设备-设备绑定的。如果蓝牙控制器可以交换&#xff0c;例如在桌面系统上&#xff0c;则每个控制器都需…

Vue2入门(安装Vue、devtools,创建Vue)以及MVVM分层思想

文章目录 1.下载并安装Vue2.使用Vue2.1 创建Vue以及挂载Vue2.2 模板语句的数据来源&#xff1a;data2.3 template配置项详解2.4 Vue实例和容器的关系 3.安装devtools4.MVVM分层思想 1.下载并安装Vue &#xff08;1&#xff09;Vue是一个基于JavaScript&#xff08;JS&#xff…

数仓开发:如何计算投放效果?

背景介绍 业务介绍&#xff1a;用户是通过低价引流进来&#xff0c;然后通过复购购买高价商品&#xff0c;可以多次购买。低价商品和高价商品均可以退款&#xff0c;高价商品由于各种复杂的场景&#xff0c;可能会有多次退款。低价商品如果退款是全退&#xff0c;不存在多次退…

手猫助手Agent技术探索总结

随着LLM的发展&#xff0c;ChatGPT能力不断增强&#xff0c;AI不断有新的概念提出&#xff0c;一种衍生类型的应用AI Agent也借着这股春风开启了一波话题热度&#xff0c;各种初创公司&#xff0c;包括Open AI内部也都在密切关注着AI Agent领域的变化。阿里集团内的AI团队也有很…

容器运行nslookup提示bash: nslookup: command not found【笔记】

在容器中提示bash: nslookup: command not found&#xff0c;表示容器中没有安装nslookup命令。 可以通过以下命令安装nslookup&#xff1a; 对于基于Debian/Ubuntu的容器&#xff0c;使用以下命令&#xff1a; apt-get update apt-get install -y dnsutils对于基于CentOS/R…

【Vue】如何提供访问vuex的数据

文章目录 一、提供数据二、访问Vuex中的数据通过$store访问的语法1&#xff09;模板中使用2&#xff09;组件逻辑中使用3&#xff09;js文件中使用 三、通过辅助函数 - mapState获取 state中的数据 一、提供数据 State提供唯一的公共数据源&#xff0c;所有共享的数据都要统一…

6.7 输入输出流

输入&#xff1a;将数据放到程序&#xff08;内存&#xff09;中 输出&#xff1a;将数据从程序&#xff08;内存&#xff09;放到设备中 C的输入输出分为3种形式&#xff1a; 从键盘屏幕中输入输出&#xff0c;称为标准IO 对于磁盘进行标准输入输出&#xff0c;称为文件IO…

安装ps提示vcruntime140.dll丢失的解决方法,总结5种解决方法

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到vcruntime140.dll”。这个问题可能会导致程序无法正常启动或运行&#xff0c;因此了解其原因和解决方法是非常必要的。小编将从多个方面对“找不到vcruntime140.dll”这一问题进行详细…

端午与高考的交汇点:家的温暖与梦想的起点

当端午节的粽香弥漫在街头巷尾&#xff0c;高考的脚步也悄然而至。这两个看似毫无关联的时刻&#xff0c;却在每年的六月&#xff0c;奇妙地交汇在一起&#xff0c;为我们带来了一段特别的记忆。这不仅是家的温暖与梦想的起点相遇的时刻&#xff0c;更是传统文化与现代追求共融…

用户输入表格数据设计(XPTable控件使用说明九)

XP Table控件可以编辑数据&#xff0c;程序也可以使用编辑后的数据&#xff0c;但是程序新建时又从初始化数据到模型到显示&#xff0c;这两步有点绕&#xff0c;做了一个实例来说明这块内容。 流程1&#xff1a;初始化数据--> model--> UI show 流程2&#xff1a;UI--…

【面试官】知道synchronized锁升级吗

一座绵延在水上的美术馆——白鹭湾巧克力美术馆。它漂浮于绿水之上&#xff0c;宛如一条丝带轻盈地伸向远方 文章目录 可重入锁synchronized实现原理 synchronized缺点保存线程状态锁升级锁升级优缺点 1. 可重入锁 面试官&#xff1a;知道可重入锁有哪些吗? 可重入意味着获取…

【Git】之 【Bug】clone 克隆失败 过早的文件结束符

问题 解决 参考&#xff1a;git clone报错 过早结束问题解决方法 git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 git config --global http.postBuffer 10024288000 git config --list

wireshark 标记自己想要的数据包

1:点击视图 2:点击视图-着色规则 点击新增一行,双击名称-进行编辑 过滤器规则-编辑自己想要看到的 点击前景-选择凸出显示颜色 点击背景--选择凸出显示颜色 点击确定按钮

LDR6020一拖二快充线:高效充电的新选择

LDR6020一拖二快充线&#xff1a;高效充电的新选择 随着移动设备的普及和功能的日益增强&#xff0c;电池续航成为了用户关注的重点之一。为了满足用户对于快速充电的需求&#xff0c;各大厂商纷纷推出了各种快充技术和产品。在这个背景下&#xff0c;LDR6020一拖二快充线凭借…

PowerDesigner导入Excel模板生成数据表

PowerDesigner导入Excel模板生成数据表 1.准备好需要导入的Excel表结构数据,模板内容如下图所示 2.打开PowerDesigner,新建一个physical data model文件,填入文件名称,选择数据库类型 3.点击Tools|Execute Commands|Edit/Run Script菜单或按下快捷键Ctrl Shift X打开脚本窗口…

台湾合泰原装BS66F360 封装LQFP-44 电容触摸按键 AD+LED增强型触控

BS66F360是一款由Holtek Semiconductor Inc.生产的微控制器&#xff08;microcontroller&#xff09;&#xff0c;具有触摸检测和LED驱动功能。其应用领域广泛&#xff0c;包括但不限于以下几个方面&#xff1a; 1. 触摸按键应用&#xff1a;BS66F360内置了触摸按键检测功能&am…

记一个ESP12-F芯片的坑

这两个都叫ESP-12F从外观上很难区分他们的差别&#xff0c;甚至背面的引脚都是一样的 这个单独的芯片就是从板子上拆下来的&#xff0c;使用这颗芯片按住FLASH按键LED灯会亮&#xff0c;很离谱&#xff0c;led灯的引脚是GPIO2 flash引脚是GPIO0&#xff0c;他们之间的内部封装…

matplotlib 动态显示训练过程中的数据和模型的决策边界

文章目录 Github官网文档简介动态显示训练过程中的数据和模型的决策边界安装源码 Github https://github.com/matplotlib/matplotlib 官网 https://matplotlib.org/stable/ 文档 https://matplotlib.org/stable/api/index.html 简介 matplotlib 是 Python 中最常用的绘图…

el-table合计行前置在首行,自定义合计行方法

背景 el-table原生合计行是在标签内增加show-summary属性&#xff0c;在表尾实现设计合计&#xff0c;且只对表格当前页面显示的列数据进行合计。element-UI效果如下图所示。 现要求在首行显示合计行&#xff0c;并自定义合计逻辑实现如下效果。 图示表格中&#xff0c;成本…

数据结构--线性表和串

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…