【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 - 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()

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

skywalking学习

文章目录 前言一、skywalking单体安装部署1. 下载skywalking2. 部署oap和oap-ui服务3. 测试skywalking监控springboot应用 二、搭建swck(skywalking集群)1.安装k8s2.下载swck3.设置pod自动注入java agent 三、skywalking监控python四、skywalking监控cpp总结参考 前言 本文主要…

生气时,你的“心”会发生什么变化?孟德尔随机化分析猛如虎,结果都是套路...

“不生气不生气&#xff0c;气出病来无人替”&#xff0c;不少人遇事常这样宽慰自己。事实上&#xff0c;“气死”真不是危言耸听。越来越多的研究证明了情绪稳定对健康的重要性&#xff0c;那么&#xff0c;当情绪频繁波动时&#xff0c;我们的心血管究竟会发生什么变化&#…

SpringBoot 的多配置文件

文章目录 SpringBoot 的多配置文件spring.profiles.active 配置Profile 和 ActiveProfiles 注解 SpringBoot 的多配置文件 spring.profiles.active 配置 默认情况下&#xff0c;当你启动 SpringBoot 项目时&#xff0c;会在日志中看到如下一条 INFO 信息&#xff1a; No act…

产气荚膜梭菌定植与婴儿食物过敏之间的关联

谷禾健康 牛奶蛋白过敏&#xff08;CMPA&#xff09;是婴儿最常见的食物过敏类型之一。粪便病原菌培养显示产气荚膜梭菌阳性率超过30%&#xff0c;明显高于其他细菌。因此推测产气荚膜梭菌定植可能是婴儿牛奶蛋白过敏的发病因素之一。 一项真实世界的研究&#xff0c;杨敏团队从…

C++全栈聊天项目(21) 滚动聊天布局设计

滚动聊天布局设计 我们的聊天布局如下图 最外层的是一个chatview&#xff08;黑色&#xff09;&#xff0c; chatview内部在添加一个MainLayout&#xff08;蓝色&#xff09;&#xff0c;MainLayout内部添加一个scrollarea(红色)&#xff0c;scrollarea内部包含一个widget&…

【Redis】Redis经典问题:缓存穿透、缓存击穿、缓存雪崩

目录 缓存的处理流程缓存穿透解释产生原因解决方案1.针对不存在的数据也进行缓存2.设置合适的缓存过期时间3. 对缓存访问进行限流和降级4. 接口层增加校验5. 布隆过滤器原理优点缺点关于扩容其他使用场景SpringBoot 整合 布隆过滤器 缓存击穿产生原因解决方案1.设置热点数据永不…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二)

概览 在上篇 Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)博文中,我们讨论了 Swift 语言中序列和集合元素排序的一些基本知识,我们还给出了以自定义类型中任意属性排序的“康庄大道”。 不过在实际的撸码场景中,我们往往需要的是“多属性”同时参与到排序的考…

STM32F103C8T6基于HAL库移植uC/OS-III

文章目录 一、建立STM32CubeMX工程二、移植1、 uC/OS-III源码2、移植过程 三、配置相关代码1、bsp.c和bsp.h2、main.c3、修改启动代码4、修改app_cfg.h文件5、修改includes.h文件6、修改lib_cfg.h文件 四、编译与烧录总结参考资料 学习嵌入式实时操作系统&#xff08;RTOS&…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)

概览 在任何语言中对序列(或集合)元素的排序无疑是一种司空见惯的常规操作,在 Swift 语言里自然也不例外。序列排序看似简单,实则“暗藏玄机”。 要想真正掌握 Swift 语言中对排序的“各种姿势”,我们还得从长计议。不如就先从最简单的排序基本功开始聊起吧。 在本篇博…

9行超强代码用Python工具快速获取放假日期

9行超强代码用Python工具快速获取放假日期 在很多场景下,我们需要获知国内具体的节假日安排情况,而国内每一年具体的放假安排以及调休情况,都依赖于国务院发布的具体公告,如果不想自己手动整理相关数据的话,我们可以用Python来快速获取最新的放假日期. 可以通过调用公开的 API…

spark-3.5.1+Hadoop 3.4.0+Hive4.0 分布式集群 安装配置

Hadoop安装参考: Hadoop 3.4.0HBase2.5.8ZooKeeper3.8.4Hive4.0Sqoop 分布式高可用集群部署安装 大数据系列二-CSDN博客 一 下载:Downloads | Apache Spark 1 下载Maven – Welcome to Apache Maven # maven安装及配置教程 wget https://dlcdn.apache.org/maven/maven-3/3.8…

App UI 风格创新无限

App UI 风格创新无限

如何理解与学习数学分析——第二部分——数学分析中的基本概念——第8章——可微性

第2 部分&#xff1a;数学分析中的基本概念 (Concepts in Analysis) 8. 可微性(Differentiability) 本章讨论梯度(gradients)/斜率(slopes)和切线(tangent)&#xff0c;指出常见的误解并解释如何避免这些误解。将可微性的定义与图形表示联系起来&#xff0c;展示如何将其应用…

什么是2+1退休模式?什么是链动2+1模式?

21退休模式又称链动21模式&#xff0c;主要是建立团队模式&#xff0c;同时快速提升销量。是目前成熟模式中裂变速度最快的模式。21退休模式合理合规&#xff0c;同时激励用户公司的利润分享机制&#xff0c;让您在享受购物折扣的同时&#xff0c;也能促进并获得客观收益。 模…

大模型多轮问答的两种方式

前言 大模型的多轮问答难点就是在于如何精确识别用户最新的提问的真实意图&#xff0c;而在常见的使用大模型进行多轮对话方式中&#xff0c;我接触到的只有两种方式&#xff1a; 一种是简单地直接使用 user 和 assistant 两个角色将一问一答的会话内容喂给大模型&#xff0c…

Large-Scale LiDAR Consistent Mapping usingHierarchical LiDAR Bundle Adjustment

1. 代码地址 GitHub - hku-mars/HBA: [RAL 2023] A globally consistent LiDAR map optimization module 2. 摘要 重建精确一致的大规模激光雷达点云地图对于机器人应用至关重要。现有的基于位姿图优化的解决方案&#xff0c;尽管它在时间方面是有效的&#xff0c;但不能直接…

【python】python电影评论数据抓取分析可视化(源码+数据+课程论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Windows系统问题

Windows系统问题 一、补丁更新提示&#xff1a;0x80070643问题&#xff1a;解决方法&#xff1a;1.以管理员权限运行【cmd】。2.禁用 【Windows RE】&#xff0c;请运行reagentc /disable。3.回收【Windows RE】恢复分区空间。4.准备新的【Windows RE】恢复分区空间。5.配置并启…

如何检测UV胶的均匀性?

如何检测UV胶的均匀性&#xff1f; 检测UV胶的均匀性可以通过以下几种方法来实现&#xff1a; 肉眼目视检查&#xff1a; 这是最简单直接的方法。将UV胶涂在表面上&#xff0c;使用裸眼观察胶层的表面。特别注意是否存在气泡、颜色不均匀、裂纹或其他明显的不均匀性。如凹凸不…