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

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

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

[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]删除
最新教程 更多>
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-04-07
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-04-07
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-04-07
  • 如何在php中使用卷发发送原始帖子请求?
    如何在php中使用卷发发送原始帖子请求?
    如何使用php 创建请求来发送原始帖子请求,开始使用curl_init()开始初始化curl session。然后,配置以下选项: curlopt_url:请求 [要发送的原始数据指定内容类型,为原始的帖子请求指定身体的内容类型很重要。在这种情况下,它是文本/平原。要执行此操作,请使用包含以下标头...
    编程 发布于2025-04-07
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-04-07
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-04-07
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-04-07
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-04-07
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] 剩余_size- = buf_size lines = buffer.split('\ n'....
    编程 发布于2025-04-07
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-04-07
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-04-07
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-07
  • 如何使用Depimal.parse()中的指数表示法中的数字?
    如何使用Depimal.parse()中的指数表示法中的数字?
    在尝试使用Decimal.parse(“ 1.2345e-02”中的指数符号表示法表示的字符串时,您可能会遇到错误。这是因为默认解析方法无法识别指数符号。 成功解析这样的字符串,您需要明确指定它代表浮点数。您可以使用numbersTyles.Float样式进行此操作,如下所示:[&& && && ...
    编程 发布于2025-04-07
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将其...
    编程 发布于2025-04-07
  • 如何将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-04-07

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

Copyright© 2022 湘ICP备2022001581号-3