”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 决策树分类器示例以预测客户流失

决策树分类器示例以预测客户流失

发布于2025-02-06
浏览:153

[2 决策树分类器示例以预测客户流失

Decision Tree Classifier Example to Predict Customer Churn 概述

该项目演示了如何使用决策树分类器来预测客户流失(是否离开服务)。该数据集包含诸如

月度费用

customer Service call

之类的功能,目的是预测客户是否会流失。 该模型是使用Scikit-Learn的决策树分类器训练的,并且代码可视化决策树,以更好地了解模型如何做出决策。 使用的技术

:用于构建模型的主要语言。


:用于数据操作和处理数据集。

    matplotlib
  • :用于数据可视化(绘制决策树)。 scikit-learn
  • :用于机器学习,包括模型培训和评估。
  • 说明了步骤
  • 1。导入必要的库
  • 将熊猫作为pd导入 导入matplotlib.pyplot作为PLT 进口警告 来自sklearn.model_selection导入train_test_split 从Sklearn.Tre Import DecisionTreeTreclalerifier 来自Sklearn.metrics导入精度_score 从Sklearn Import Tree
  • [2

这用于数据操作和将数据加载到数据框架格式中。数据范围允许您组织和操纵结构化数据,例如表(行和列)。

[2 这是一个用于可视化数据的绘图库。在这里,它用于以图形方式绘制决策树,这有助于理解在树的每个节点上如何做出决策。

import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
[2
  • 警告模块用于抑制或处理警告。在此代码中,我们忽略了不必要的警告,以保持输出清洁和可读。

    [2

    • train_test_split
    • :此功能将数据集拆分为培训和测试子集。培训数据用于拟合模型,测试数据用于评估其性能。
  • dekindertetreeclalsifier
  • :这是用于对数据进行分类和预测客户流失的模型。决策树通过基于功能创建类似树的决策模型来起作用。

    :此函数通过将预测值与目标变量的实际值进行比较(流失)来计算模型的准确性。

    :此模块在训练决策树后包含用于可视化的函数。
    2。
  • 抑制警告
  • warnings.filterwarnings(“忽略”)

      忽略所有警告
    • 。当您运行模型并且不需要警告(例如关于弃用功能的功能的警告)时,它可能会有所帮助。
  • 3。
  • 创建一个综合数据集

    *10,#客户年龄 “月收费”:[50,60,70,80,90,100,100,110,120,130,140]*10,#每月账单金额 “ customerserviceCalls”:[1,2,3,4,0,2,2,3,4,0]*10,#客户服务电话数量 'Churn':['否','no','YES','','','','','','','','','','','','',是']*10#10# } df = pd.dataframe(数据) 打印(df.head())

    • 在这里,我们为项目创建一个的综合数据集。该数据集模拟了电信公司的客户信息,并具有年龄,每月充电,客户维修和目标变量流失等功能(无论客户是否流失)。
    • :客户的年龄。
    • 每月charager :客户的月账单。
    • :称为客户服务的客户的次数。
    • chrurn :客户是否搅动(是/否)。
  • pandas dataframe

4。将数据分解为功能和目标变量

[2 y = df ['搅动']#目标变量
warnings.filterwarnings("ignore")
  • :用于预测目标的自变量。在这种情况下,它包括年龄,每月充电和客户维修。 目标变量(y)
  • :因变量,这是您要预测的值。在这里,这是搅拌列,它指示客户是否会流失。

5。将数据分解为培训和测试集

data = {
    'CustomerID': range(1, 101),  # Unique ID for each customer
    'Age': [20, 25, 30, 35, 40, 45, 50, 55, 60, 65]*10,  # Age of customers
    'MonthlyCharge': [50, 60, 70, 80, 90, 100, 110, 120, 130, 140]*10,  # Monthly bill amount
    'CustomerServiceCalls': [1, 2, 3, 4, 0, 1, 2, 3, 4, 0]*10,  # Number of customer service calls
    'Churn': ['No', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'No', 'Yes']*10  # Churn status
}

df = pd.DataFrame(data)
print(df.head())
  • train_test_split 将数据集拆分为两个部分:a 训练集

    testing set
      (用于评估模型)。
    • :30%的数据用于测试,其余的70%用于培训。
    • 通过修复随机数生成器的种子来确保结果的可重复性。
    • 6。训练决策树模型
    • clf = deciestTreeClalsifier() clf.fit(x_train,y_train)
    • 初始化决策树模型。 使用训练数据训练模型。该模型从X_Train功能中学习模式,以预测y_train目标变量。
    7。
  • 做预测
  • :在训练模型后,它用于对测试集(x_test)进行预测。这些预测的值存储在y_pred中,我们将将它们与实际值(y_test)进行比较以评估模型。

8。评估模型

warnings.filterwarnings("ignore")
  • 通过将预测的搅拌标签(y_pred)与来自测试集的实际搅拌标签(y_test)进行比较来计算模型的准确性。 精度
  • 是对多少预测的度量。它被打印出来进行评估。
  • 9。
  • 可视化决策树

plt.figure(figsize =(12,8)) tree.plot_tree(clf,fill = true,feature_names = ['age',''每月','customerserviceCalls'],class_names = ['no churn','churn','churn'])) plt.show()

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
:可视化训练的决策树模型。填充= true参数颜色基于类标签的节点(Churn/no Churn)。
  • feature_names :指定要在树中显示的功能(自变量)的名称。 class_names :指定目标变量的类标签(Churn)。
      :显示树可视化。
    • 运行代码
    • 克隆存储库或下载脚本。
    • 安装依赖项:
PIP安装pandas matplotlib scikit-learn

运行Python脚本或Jupyter笔记本以训练模型并可视化决策树。

clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
版本声明 本文转载于:https://dev.to/atifwattoo/decision-tree-classifier-example-to-predict-customer-churn-51fc?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html posite:sticky; sticky; .Sticky-1 {[ top:1em; z-index:1; 1; { display:gr...
    编程 发布于2025-05-14
  • 如何高效地在一个事务中插入数据到多个MySQL表?
    如何高效地在一个事务中插入数据到多个MySQL表?
    mySQL插入到多个表中,该数据可能会产生意外的结果。虽然似乎有多个查询可以解决问题,但将从用户表的自动信息ID与配置文件表的手动用户ID相关联提出了挑战。使用Transactions和last_insert_id() 插入用户(用户名,密码)值('test','test...
    编程 发布于2025-05-14
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否需要手动调用“ delete”操作员在heap-exprogal exit exit上。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(HEAP内存)的指针。当应用程序退出时,此内存是否会自动发布?通常,是。但是,即使在这...
    编程 发布于2025-05-14
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-05-14
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-05-14
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-05-14
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-05-14
  • 在Pandas中如何将年份和季度列合并为一个周期列?
    在Pandas中如何将年份和季度列合并为一个周期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 这个目标是通过组合“年度”和“季度”列来创建一个新列,以获取以下结果: [python中的concate...
    编程 发布于2025-05-14
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-05-14
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-05-14
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-05-14
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-05-14
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-05-14
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-05-14
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-05-14

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3