决策树在电信客户流失分析中的实战应用

在当今数据驱动的时代,数据分析和机器学习技术在各行业的应用愈发广泛。电信行业面临着激烈的竞争,客户流失问题成为影响企业发展的关键因素之一。如何准确预测客户是否会流失,并采取相应措施挽留客户,是电信企业关注的重点。决策树作为一种经典且直观的机器学习算法,在解决分类问题上表现出色,能够帮助我们从大量数据中挖掘出有价值的信息,从而为决策提供有力支持。本文将结合 Python 代码,详细介绍决策树在电信客户流失分析中的实战应用。

1. 决策树算法概述

决策树是一种基于树结构的监督学习算法,它可以用于分类和回归任务,本文主要聚焦于分类任务。其基本思想是通过对训练数据进行特征选择和划分,构建一棵树形结构,每个内部节点表示一个特征的判断,每个分支表示一个判断结果,而每个叶子节点则表示最终的分类结果。
决策树构建过程中,关键在于如何选择最优的特征进行划分,以使得划分后的子节点尽可能 “纯净”,即同一类别样本尽可能聚集在同一节点。常用的特征选择指标有信息增益、信息增益比和基尼指数。本文代码中使用的是基尼指数(criterion=‘gini’),基尼指数用于度量数据集的不纯度,其值越小,数据集的纯度越高。

2. 数据准备与预处理

在进行数据分析和模型训练之前,首先需要导入必要的库,并加载数据。在本次电信客户流失分析中,数据存储在 Excel 文件 “电信客户流失数据.xlsx” 中,我们使用pandas库的read_excel函数将数据读取到DataFrame对象中。

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import openpyxldatas = pd.read_excel("电信客户流失数据.xlsx")

读取数据后,需要将变量(特征)与结果(标签)进行划分。通过iloc方法,将除最后一列之外的所有列作为特征数据,最后一列作为标签数据。

data = datas.iloc[:,:-1]
target = datas.iloc[:,-1]

为了评估模型的性能,我们需要将数据集划分为训练集和测试集。使用sklearn.model_selection模块中的train_test_split函数,将数据集按照 8:2 的比例划分为训练集和测试集,并设置随机种子random_state = 42,以确保划分的可重复性。

from sklearn.model_selection import train_test_splitdata_train, data_test, target_train, target_test = \train_test_split(data, target, test_size = 0.2,random_state = 42)

3. 决策树模型构建与训练

在完成数据准备后,我们开始构建决策树模型。通过sklearn.tree模块中的DecisionTreeClassifier类创建决策树分类器对象,并设置相关参数。这里我们选择基尼指数作为特征选择标准(criterion=‘gini’),限制决策树的最大深度为 8(max_depth = 8),同时设置随机种子为 42,以保证每次运行结果的一致性。

from sklearn import tree
dtr = tree.DecisionTreeClassifier(criterion='gini', max_depth = 8, random_state = 42)
dtr.fit(data_train, target_train)

使用训练集数据对决策树模型进行训练,通过fit方法让模型学习特征与标签之间的关系。

4. 模型评估

4.1 训练集评估

模型训练完成后,首先使用训练集数据进行预测,并通过多种指标评估模型在训练集上的性能。

训练集预测值

train_predicted = dtr.predict(data_train)
from sklearn import metrics

绘制混淆矩阵

print(metrics.classification_report(target_train, train_predicted))

可视化混淆矩阵

cm_plot(target_train,train_predicted).show()

使用predict方法得到训练集的预测结果,通过sklearn.metrics模块中的classification_report函数生成分类报告,该报告包含精确率、召回率、F1 值等关键评估指标,能够全面评估模型在各个类别上的分类效果。同时,通过自定义的cm_plot函数绘制混淆矩阵,可视化展示模型预测结果与真实标签之间的匹配情况。

4.2 测试集评估

为了更真实地评估模型的泛化能力,使用测试集数据进行预测和评估。

测试集预测值

test_predicted = dtr.predict(data_test)

绘制混淆矩阵

print(metrics.classification_report(target_test, test_predicted))

可视化混淆矩阵

cm_plot(target_test,test_predicted).show()

对决策树测试集进行评分

dtr.score(data_test, target_test)

同样使用predict方法得到测试集的预测结果,生成分类报告并绘制混淆矩阵。此外,通过score方法计算模型在测试集上的准确率,进一步量化模型的性能表现。

5. 决策树可视化

决策树的优势之一在于其可解释性,通过可视化决策树,我们可以直观地了解模型的决策逻辑和特征重要性。使用sklearn.tree模块中的plot_tree函数,结合matplotlib库,对训练好的决策树模型进行可视化展示。

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree#决策树的绘图
fig, ax= plt.subplots(figsize=(32,32))
plot_tree(dtr,filled = True, ax=ax)
plt.show()

通过设置合适的图形大小,并启用filled = True参数,使决策树可视化结果更加美观和清晰。从可视化的决策树中,我们可以清晰地看到每个节点的特征判断条件、样本数量以及分类结果,有助于深入理解模型的决策过程。

运行结果

在这里插入图片描述

6. 总结与展望

本文通过 Python 代码实现了决策树在电信客户流失分析中的完整应用流程,从数据准备、模型构建与训练,到模型评估和可视化,全面展示了决策树算法的实际应用价值。通过分析模型的评估指标和可视化结果,我们可以了解模型的性能表现,并发现数据中隐藏的规律和特征重要性。
然而,决策树算法也存在一些局限性,例如容易过拟合。在实际应用中,可以通过剪枝、集成学习(如随机森林、梯度提升树等)等方法来改进模型性能。未来,我们可以进一步探索更复杂的机器学习算法和技术,结合更多的业务场景和数据,不断优化模型,为电信企业提供更准确、有效的客户流失预测和决策支持,助力企业在激烈的市场竞争中取得优势。
上述博客涵盖了决策树从原理到实践的核心内容。你对博客的内容深度、篇幅长短是否满意?若有修改方向或补充需求,可随时告知。

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

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

相关文章

【HCIA】VRRP

前言 二层交换机为了破环发明了堆叠,把几台实际的交换机视作一个虚拟的交换机,实现了链路的复用和环路的破坏。那么对应到三层的路由器,我们有 VRRP(Virtual Router Redundancy Protocol),它可以让路由器分…

第15讲:基础柱状图与分组柱状图美化指南

目录 🧭 一、为什么要关注柱状图的“美化”? 🧱 二、基础柱状图的构建逻辑(以 ggplot2 为例) 🎨 三、美化细节全面升级 ✅ 1. 自定义配色与透明度 ✅ 2. 添加数值标签 ✅ 3. 设置 y 轴刻度与坐标轴美学 👨‍🔬 四、分组柱状图(Grouped Bar Plot) 💎 五…

SV 仿真的常识

文章目录 SV对verilog的扩展📘 标准文档名称: 从SV到仿真通用过程解读实例解读 SV的仿真过程并行仿真颗粒度SV仿真调度调度区域 SV对verilog的扩展 SystemVerilog 和 Verilog 的语法标准由 **IEEE(美国电气和电子工程师协会)**制…

苏德战争前期苏联损失惨重(马井堂)

苏德战争前期(1941年6月22日德国发动“巴巴罗萨行动”至1941年底至1942年初)是苏联在二战中损失最惨重的阶段之一。以下是主要方面的损失概述: ‌一、军事损失‌ ‌人员伤亡与俘虏‌ 至1941年底,苏军伤亡约‌300万人‌&#xff…

联邦学习的收敛性分析(全设备参与,不同本地训练轮次)

联邦学习的收敛性分析 在联邦学习中,我们的目标是分析全局模型的收敛性,考虑设备异构性(不同用户的本地训练轮次不同)和数据异质性(用户数据分布不均匀)。以下推导从全局模型更新开始,逐步引入假设并推导期望损失的递减关系,最终给出收敛性结论。 1. 全局模型更新与泰…

多线程爬虫中实现线程安全的MySQL连接池

多线程爬虫中实现线程安全的MySQL连接池 在日常开发中,数据库操作频繁建立/关闭连接会带来性能损耗,尤其在多线程场景中更容易出现连接复用、阻塞等问题。因此,本文介绍如何使用 Python 封装一个 线程安全的 MySQL 连接池,并通过…

HTML:常用标签(元素)汇总

文章目录 一、标签分类1、块标签与行标签 二、排版标签三、文本标签1、常用2、不常用 四、图片标签五、超链接1、跳转页面2、跳转文件或下载文件3、跳转到锚点4、唤起本地应用 六、列表七、表格八、表单九、框架十、HTML实体十一、全局属性十二、meta元信息 一、标签分类 1、块…

20250430在ubuntu14.04.6系统上完成编译NanoPi NEO开发板的FriendlyCore系统【严重不推荐,属于没苦硬吃】

【开始编译SDK之前需要更新源】 rootrootubuntu:~/friendlywrt-h3$ sudo apt update 【这两个目录你在ubuntu14.04.6系统上貌似git clone异常了】 Y:\friendlywrt-h3\out\wireguard Y:\friendlywrt-h3\kernel\exfat-nofuse 【需要单线程编译文件系统,原因不明】 Y:…

【AI论文】CipherBank:通过密码学挑战探索LLM推理能力的边界

摘要:大型语言模型(LLMs)已经展现出非凡的能力,尤其是最近在推理方面的进步,如o1和o3,推动了人工智能的发展。尽管在数学和编码方面取得了令人印象深刻的成就,但在需要密码学专业知识的领域&…

艺术与科技的双向奔赴——高一鑫荣获加州联合表彰

2025年4月20日,在由M.A.D公司协办的“智艺相融,共赴价值巅峰”(Academic and Artistic Fusion Tribute to the Summit of Value)主题发布会上,音乐教育与科技融合领域的代表人物高一鑫,因其在数字音乐教育与中美文化交流方面的杰出贡献,荣获了圣盖博市议员Jorge Herrera和尔湾市…

【深度学习的灵魂】图片布局生成模型LayoutPrompt(1)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目…

Compose笔记(二十)--TextField

这一节主要了解一下Compose的TextField,TextField 是一个用于接收用户文本输入的 UI 组件,允许用户通过键盘输入、编辑或删除文本。简单用法总结如下: API value:当前输入的文本内容。 onValueChange 含义:当用户输入文本时触发的回调函数,参…

在Linux虚拟机下使用vscode,#include无法跳转问题

总结:需要通过Linux指令来添加编译器和压缩文件,解压,这样获得的编译器会具有可执行权限类似于 -rwxr-xr-x 1 user user 12345 Apr 26 14:22 myscript.sh 如果你直接从window中拖入文件到Linux文件下,你需要自己来再度开启可编译…

ArcGIS+GPT:多领域地理分析与决策新方案

技术点目录 AI大模型应用ArcGIS工作流程及功能prompt的使用技巧AI助力工作流程AI助力数据读取AI助力数据编辑与处理AI助力空间分析AI助力遥感分析AI助力二次开发AI助力科研绘图ArcGISAI综合应用了解更多 ——————————————————————————————————…

基础术语说明

车间:工厂内集中进行加工或装配的独立空间,配备设备、工具及人员,是生产活动的核心载体。 比如装配车间、总装车间、油漆车间等 生产线:以流水作业形式将原材料转化为成品的设备与人员的组合系统,强调连续性和效率。…

Splunk 使用Role 实现数据隔离

很多人知道 Splunk 有很多自带的Role, 今天我就要说说定制化的Role: 1: 在创建新role 的界面: 2: 在如下的界面,可以定制allow index name: 3: 创建好新Role 后,在SAML 添加新的group 的时候,就可以看到Role 给某个group: 4: 这样一个特定组的人来申请Splunk 权限,就可…

利用李雅普诺夫稳定性理论设计模型参考自适应系统(2.0)

上一篇介绍了利用李雅普诺夫稳定性理论设计模型参考自适应系统,通过在被控对象前面添加一个可调增益,然后利用李雅普诺夫稳定性理论设计增益的自适应率,使得被控对象输出与参考模型输出一致。本文将介绍在系统结构中引入前馈和反馈的结构&…

前端封装WebSocket工具n

Web API 提供的 WebSocket 类,封装一个 Socket 类 // socket.js import modal from /plugins/modal const baseURL import.meta.env.VITE_APP_BASE_WS; const EventTypes [open, close, message, error, reconnect]; const DEFAULT_CHECK_TIME 55 * 1000; // 心…

TCP和UDP传输层协议

TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是两种常见的传输层协议,它们在网络通信中发挥着不同的作用。二者在连接建立、可靠性、传输效率等方面存在显著差异,适用于不同的应用场…

空域伦理与AI自主边界的系统建构

在AI无人系统逐步参与城市空域治理的过程中,系统的“自主性”已不再仅是技术指标,而是直接影响合规性、安全性与社会接受度的伦理边界议题。AI决策系统是否拥有“强干预能力”?行为触发责任应归属何方?算法可否调优至“自我纠偏”…