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

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈: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 - Q1lower_bound = Q1 - 1.5 * IQRupper_bound = Q3 + 1.5 * IQRreturn 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.mzph.cn/diannao/24981.shtml

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

相关文章

基本通信设备

1、 网卡 &#xff08;1&#xff09;负责将终端机连入网络 &#xff08;2&#xff09;计算机通过网卡接入网络&#xff08;有线、无线&#xff09; 2、 交换机 &#xff08;1&#xff09;连接终端机&#xff0c;构建网段 &#xff08;2&#xff09;负责网段内…

CentOS 7基础操作08_Linux查找目录和文件

1、which命令——查找用户所执行的命令文件存放的目录 which命令用于查找Linux命令程序并显示所在的具体位置.其搜索范围主要由用户的环境变量PATH决定(可以执行言echo sPATH”命令查看),这个范围也是Linux操作系统在执行命令或程序时的默认搜索路径。 which命令使用要查找的命…

论文复现:Track to Detect and Segment: An Online Multi-Object Tracker

论文下载链接&#xff1a;链接 简单介绍&#xff1a;大多数在线多目标跟踪器在神经网络中独立执行目标检测&#xff0c;无需任何跟踪输入。在本文中提出了一种新的在线联合检测和跟踪模型TraDeS&#xff08;TRAck to DEtect and Segment&#xff09;&#xff0c;利用跟踪线索…

一个例子了解c++的指针数组和数组指针

c的指针数组和数组指针容易混淆&#xff0c;所以我们加个字&#xff1a; 指针的数组和数组的指针 所谓指针数组&#xff0c;就是指针的数组&#xff0c;就是由指针组成的数组。重点在后面的两个字&#xff1a;数组 所谓数组指针&#xff0c;就是数组的指针&#xff0c;就是指向…

基于协调过滤算法商品推荐系统的设计#计算机毕业设计

基于协调过滤算法商品推荐系统的设计#计算机毕业设计 管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品管理&#xff0c;论坛管理&#xff0c;商品资讯管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;论坛&#xf…

MySQL-二进制部署-配置systemctl管理脚本(一)

一 二进制部署MySQL 参考二进制部署mysql 二 MySQL启动&关闭命令 mysqld_sqfe 是 mysqld 父进程&#xff0c;用那个启动都可以 ##启动命令 /usr/local/mysql/bin/mysqld_safe --defaults-file/data/mysql/conf/my.cnf & /usr/local/mysql/bin/mysqld --defaults-fil…

数字校园的优势有哪些

数字化时代下&#xff0c;数字校园已成为教育领域一股显著趋势。数字校园旨在借助信息技术工具对传统校园进行改造&#xff0c;提供全新的教学、管理和服务方式。那么&#xff0c;数字校园究竟具备何种优势&#xff1f;现从三个方面为您详细介绍。 首先&#xff0c;数字校园为教…

STM32项目分享:智能家居(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

如何使用ERC-20与Sui Coin标准创建Token

区块链使用tokens作为传递价值的基本手段。它们可以是区块链的原生交换单位&#xff0c;也可以是应用中的交换单位&#xff0c;甚至可以在游戏世界中用作货币。tokens还支持Sui和其他区块链上的强大DeFi活动。 以太坊使用ERC-20标准来创建tokens&#xff0c;借用智能合约&…

步态控制之ZMP

零力矩点(Zero Moment Point,ZMP)概述 ZMP步态控制是人形机器人步态控制中的一个关键概念,旨在确保机器人在行走或站立过程中保持平衡。ZMP是指机器人接触面上力矩为零的点,确保在该点上机器人不会倾倒。这个示例展示了ZMP步态控制的基本原理和实现方法。实际应用中,机器…

Redisson 源码分析 —— 调试环境搭建

本文基于 Redisson 3.11.4-SNAPSHOT 版本 依赖工具 MavenGitJDKIntelliJIDEA 源码拉取 从官方仓库 https://github.com/redisson/redisson Fork 出属于自己的仓库。 为什么要 Fork &#xff1f;既然开始阅读、调试源码&#xff0c;我们可能会写一些注释&#xff0c;有了自…

【Spring Cloud】Ribbon详细介绍及底层原理分析

目录 核心功能 Ribbon 的工作原理 底层原理及代码详解 1. ServerList 2. IRule 3. IPing 4. ServerListUpdater 使用场景 实际使用示例 1. 使用 RestTemplate 与 Ribbon 集成 2. 使用 Feign 与 Ribbon 集成 Ribbon 是 Netflix 开源的一款客户端负载均衡器&#xff0…

算法训练营day04

一、24. 两两交换链表中的节点 题目链接&#xff1a;https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 文章讲解&#xff1a;https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.h…

国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上Vim的详解03–使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插…

【数据可视化系列】使用Python和Seaborn绘制相关性热力图

热力图&#xff08;Heatmap&#xff09;是一种数据可视化工具&#xff0c;它通过使用颜色的深浅来展示数据矩阵中数值的大小或密度。在热力图中&#xff0c;每种颜色的深浅代表数据的一个特定值或值的范围&#xff0c;通常使用红色、黄色和绿色等颜色渐变来表示数据的热度&…

frida timed out

从Android Q(10)开始&#xff0c;Google引入了一种新的机制&#xff0c;加快了app的启动时间 Android USAP 进程启动流程 adb shell su ps -A | grep usaproot 9917 1032 6577052 13676 __skb_wait_for_more_packets 0 S usap64 root 9928 1032 6577052…

1、项目介绍:为什么要做此项目。

项目介绍&#xff1a;为什么要做此项目。 全栈开发博客实战项目&#xff1a;前后端开发流程以及项目部署 随着互联网的蓬勃发展&#xff0c;全栈开发成为了越来越受欢迎的趋势。前端开发和后端开发之间的紧密合作和协同工作已经成为了现代软件开发中的重要组成部分。然而&…

【TB作品】MSP430F5529 单片机,数字时钟设计与实现,整点时通过蜂鸣器播放音乐进行报时

基于单片机的数字时钟设计与实现 作品名称 基于MSP430单片机的OLED显示数字时钟 作品功能 本作品实现了一个具有时间显示和整点报时功能的数字时钟。通过OLED屏幕显示当前时间&#xff0c;用户可以通过按键设置时间&#xff0c;并在整点时通过蜂鸣器播放音乐进行报时。 作…

Emacs Verilog mode 简单使用指南

Emacs 是一个强大的文本编辑器,以其高度可定制和扩展能力著称。在硬件描述语言(HDL)的开发中,Verilog 是一种广泛使用的语言,而 Emacs 的 Verilog mode 为 Verilog 开发提供了强有力的支持。本文将详细介绍如何使用 Emacs Verilog mode 来高效编写 Verilog 代码,帮助读者…

MySQL JDBC编程

前言&#x1f440;~ 上一章我们介绍了数据库的索引与事务&#xff0c;本章节我们介绍JDBC编程&#xff0c;使用java代码和数据库打交道 如果各位对文章的内容感兴趣的话&#xff0c;请点点小赞&#xff0c;关注一手不迷路&#xff0c;如果内容有什么问题的话&#xff0c;欢迎各…