首页 > 其他分享 >数据分享|R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化|附代码数据

数据分享|R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化|附代码数据

时间:2023-04-14 19:14:10浏览次数:48  
标签:预测 模型 ROC 随机 churn 数据 我们 决策树

原文链接:http://tecdat.cn/?p=26868

最近我们被客户要求撰写关于电信公司用户流失的研究报告,包括一些图形和统计输出。

在本教程中,我们将学习覆盖决策树和随机森林。这些是可用于分类或回归的监督学习算法

下面的代码将加载本教程所需的包和数据集。

library(tidyverse)

# 电信客户流失率数据
churn <- read_rds(chuata.rds))

数据

花点时间探索下面的这个数据集 ( 查看文末了解数据获取方式 ) 。

此数据框中的一行代表一家电信公司的客户。每个客户都从该公司购买了电话和互联网服务。

此数据中的因变量变量 canceled 指示客户是否终止了他们的服务。

图片

决策树

为了演示拟合决策树,我们将使用 churn数据集并使用所有可用的预测变量进行预测。

数据拆分

我们将数据分成训练集和测试集。训练数据将进一步分为 5 折进行超参数调优。

 # 记住一定要设置你的随机数种子。

chuit <- iniplit(cdf)

chining <- chulit %>% trang()

chuest <- chuplit %>% tesg()

#在训练数据集上创建交叉验证的
##这些将被用于调整模型的超参数

chds <- vfcv(chung, v = 5)

特征工程

我们将在训练数据上进行以下转换。

  • 消除数值预测变量的偏度
  • 标准化所有数字预测变量
  • 为所有名义预测变量创建虚拟变量
chu_rep <- recipe(cace_srce ~ ., data = chutann) %>% 
                       stepYeonon(al_nmeric(), -al_utcoms()) %>% 
                       ste_nomaze(all_umic(), -al_oucoes()) %>% 
                       ste_dumy(all_inal(), -al_otcomes())

让我们检查一下特征工程步骤是否正确执行。

模型规格

接下来,我们指定具有以下超参数的决策树分类器:

  • 成本复杂度参数(又名 Cp 或 λ)
  • 树的最大深度
  • 节点中进一步拆分所需的最小数据点数。

工作流程

接下来,我们将模型组合到一个工作流中,以轻松管理模型构建过程。

treow <- workflow()

超参数调优

我们将对决策树超参数进行网格搜索,并在交叉验证期间根据 ROC 曲线下的面积选择性能最佳的模型。

请参见下面的示例,我们在其中创建 tree_grid 对象。

## 创建一个超参数值的网格来测试
tr_gid <- girular(cotolty(),
                          teedeth(),
                          mnn(), 
                          lvs = 2)

调整超参数 tune_grid()

为了从我们的调整网格中找到超参数的最佳组合,我们将使用该 tune_grid() 函数。

在我们的 KNN 示例中,此函数将模型对象或工作流作为第一个参数,将交叉验证折叠作为第二个参数,将调整网格数据框作为第三个参数。

## 调整决策树工作流程
set.seed(314)

tre_tig <- trewolow %>%
               tue_rid(rsampes = chrnols,
                         grid = reegid)

查看我们的超参数调整的结果。

从下面的结果中,我们看到对于我们网格中的每个超参数组合。

下面 mean 结果中的列表示获得的性能指标的平均值。

我们可以使用该 select_best() 模型从我们的调优结果中选择具有最佳整体性能的模型。在下面的代码中,我们指定根据 roc_auc 指标选择性能最佳的模型。

我们看到成本复杂度为 1-10、树深度为 15、最小 n 为 40 的模型产生了最佳模型。

## 根据roc_auc选择最佳模型
besree <- te_uin %>%

完成工作流程

超参数调整的最后一步是 将我们的最佳模型添加到我们的工作流对象中。

可视化结果

为了可视化我们的决策树模型,我们需要使用该 fit() 函数手动训练我们的工作流对象。

此步骤是可选的,因为并非所有应用程序都需要可视化模型。但是,如果目标是了解 模型预测某些值的原因 ,那么建议这样做。

下一节将展示如何拟合模型以 自动获得测试集的性能。

拟合模型

接下来,我们将工作流程与训练数据相匹配。这是通过将我们的工作流对象传递给 fit() 函数来完成的。

               fit(data = chning)

探索我们的训练模型变量的重要性

一旦我们在训练数据上训练了我们的模型,我们就可以使用该 vip 函数研究变量的重要性。

teeit <- tree__it %>% 
            pull_orfowit()

变量重要性

接下来我们传递 tree_fit 给 vip() 函数。

我们从下面的结果中看到最重要的预测因子。

vip(teeit)

图片


点击标题查阅往期内容

图片

PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像

图片

左右滑动查看更多

图片

01

图片

02

图片

03

图片

04

图片

决策树图

我们可以可视化训练好的决策树。

这种可视化是一种工具,用于传达经过训练的决策树的预测规则。

很多时候,决策树图会很大并且难以阅读。有专门的软件包 R 用于放大决策树图的区域。

图片

训练和评估 

接下来,我们将最终模型工作流程拟合到训练数据并评估测试数据的性能。

该 函数将使我们的工作流程适合训练数据,并根据我们的 chuplit 对象定义的测试数据生成预测。

tre_latit <- fil_tewklow %>% 
                 last_fit(chnpit)

我们可以在测试数据上查看我们的性能指标

tre_lft %>% collect_metrics()

ROC曲线

我们可以绘制 ROC 曲线来可视化我们调整的决策树的测试集性能

treatft %>% collect_predictions() %>%

图片

混淆矩阵

我们看到我们的模型在我们的测试数据集上产生了 80 个假阴性和 57 个假阳性。

tre_pcis <- tre_s_t %>% collect_predictions()

图片

随机森林

在本节中,我们将为 chudf 数据拟合一个随机森林模型。随机森林采用决策树并在预测准确性方面构建更强大的模型。支持该算法的主要机制是对训练数据进行重复采样(替换)以生成一系列决策树模型。然后对这些模型进行平均以获得预测空间中给定值的单个预测。

随机森林模型选择预测变量的随机子集,用于在树构建过程中分割预测空间。算法的每次迭代都会这样做,通常是 100 到 2,000 次。

数据特征工程

我们已经将我们的数据分成训练、测试和交叉验证集,并训练了我们的特征工程,  chucipe. 这些可以在我们的随机森林工作流程中重复使用。

模型

接下来,我们指定具有以下超参数的随机森林分类器:

  • mtry:创建树模型时在每次拆分时随机抽样的预测变量的数量
  • trees:要拟合并最终平均的决策树的数量
  • min_n: 节点进一步分裂所需的最小数据点数

要指定具有 的随机森林模型 ,我们需要该 ranorest() 函数。

工作流程

接下来,我们将我们的模型和配方组合到一个工作流中,以轻松管理模型构建过程。

f_orkflw <- workflow() %>%

超参数调优

随机网格搜索

我们将对随机森林超参数进行网格搜索,并在交叉验证期间根据 ROC 曲线下的面积选择性能最佳的模型。

在上一节中,我们曾经 gridlar() 创建一个超参数值网格。这创建了推荐默认值的常规网格。

另一种进行超参数调整的方法是创建一个 随机 的值网格。许多研究表明,这种方法比常规网格方法做得更好。

在下面的代码中,我们将范围设置为 4 到 12。

## 创建一个超参数值的网格来测试

set.sd(314)

rf_gd <- grid_random(mry() %>% range_set

图片

调整超参

为了从我们的调整网格中找到超参数的最佳组合,我们将使用该 tugid() 函数。

## 调整随机森林工作流程
set.seed(314)

rftin <- rfwoflow %>% 
             tune_grid(resamples = cu_olds,
                       grid = r_id)

查看我们的超参数调整的结果。

我们可以使用模型从我们的调优结果中选择具有最佳整体性能的模型。在下面的代码中,我们指定根据 rocauc 指标选择性能最佳的模型。

## 根据roc_auc选择最佳模型
berf <- rftunng %>% 
           select_best

完成工作流程

超参数调整的最后一步是 将我们的最佳模型添加到我们的工作流对象中。

fina_rkflow <- rfow %>% 
                     finaflow(betrf)

变量重要性

为了可视化随机森林模型的可变重要性分数。

拟合模型

接下来,我们将工作流程与训练数据相匹配。这是通过将我们的工作流对象传递给 fit() 函数来完成的。

rf_it <- fnalrfrlow %>% 
             fit(data = crnranng)

一旦我们在训练数据上训练了我们的模型,我们就可以研究变量的重要性。

第一步是从我们的工作流拟合中提取训练好的模型。

rf <- ft %>% 
          pll_orfow_fit()

变量重要性

从我们的模型返回一个 ggplot 具有可变重要性分数的对象。重要性分数基于通过超参数随机选择的具有最大预测能力的预测变量。

图片

训练和评估

接下来,我们将最终模型工作流程拟合到训练数据并评估测试数据的性能。

使我们的工作流程拟合训练数据,并根据测试数据生成预测。

我们可以在测试数据上查看我们的性能指标

rf_tfit %>% cole_trcs()

ROC曲线

我们可以绘制 ROC 曲线来可视化随机森林模型的测试集性能。

rflafit %>% collepedions() %>% 
                roc_ve(trth  = cncele_srice, estimate = .rd_es) %>% 
                autplot()

图片

混淆矩阵

我们看到我们的模型在我们的测试数据集上产生了 61 个假阴性和 48 个假阳性,优于我们的决策树模型。

conf_mat(predis, truth = cncervice, estimate = .prd_las)

图片

数据获取

在下面公众号后台回复“流失数据”,可获取完整数据。

图片

点击文末 “阅读原文”

获取全文完整资料。

本文选自《R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化》。

点击标题查阅往期内容

从决策树到随机森林:R语言信用卡违约分析信贷数据实例
PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化
R语言基于树的方法:决策树,随机森林,Bagging,增强树
R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
spss modeler用决策树神经网络预测ST的股票
R语言中使用线性模型、回归决策树自动组合特征因子水平
R语言中自编基尼系数的CART回归决策树的实现
R语言用rle,svm和rpart决策树进行时间序列预测
python在Scikit-learn中用决策树和随机森林预测NBA获胜者
python中使用scikit-learn和pandas决策树进行iris鸢尾花数据分类建模和交叉验证
R语言里的非线性模型:多项式回归、局部样条、平滑样条、 广义相加模型GAM分析
R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类
R语言ISLR工资数据进行多项式回归和样条回归分析
R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型
R语言用泊松Poisson回归、GAM样条曲线模型预测骑自行车者的数量
R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
如何用R语言在机器学习中建立集成模型?
R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测在python 深度学习Keras中计算神经网络集成模型R语言ARIMA集成模型预测时间序列分析R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者
R语言基于树的方法:决策树,随机森林,Bagging,增强树
R语言基于Bootstrap的线性回归预测置信区间估计方法
R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间
R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析
R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化
Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线
matlab使用分位数随机森林(QRF)回归树检测异常值

标签:预测,模型,ROC,随机,churn,数据,我们,决策树
From: https://www.cnblogs.com/tecdat/p/17319335.html

相关文章

  • Java接收到MySQL数据库查询出的date类型的数据输出格式不对
    问题查询某条数据,里面有个effective_time字段,数据库里保存的该条数据的effective_time的值是2023-04-13,但是使用postman调用接口,返回的确是2023-04-12T16:00:00.000+00:00,不仅格式不对,而且时间还慢了一天。但是在application.yml中配置数据库连接的时候,确实指定了时区......
  • 华为云网站安全方案为企业数据保驾护航
    随着云计算技术的快速发展,更多企业选择将业务迁移上云,而保障网站业务安全,成为诸多企业重点关注的问题。根据Gartner调查报告显示,信息安全中超过75%都发生在Web应用层上,可能造成的危害结果包括数据信息泄露、数据被篡改、网站被篡改、域名被劫持、大流量DDoS、黑客导致网站无......
  • 未来源码|什么是数据集成?超全的SeaTunnel 集成工具介绍
    以下文章来源于大数据与云原生技术分享,作者liugp推荐语:随着互联网流量爆发式增长,越来越多的公司业务需要支撑海量数据存储,对高并发、高可用、高可扩展性等特性提出了更高的要求。这也促使各种类型的数据库快速发展,至今常见数据库已经达到200多个。与之相伴的便是,各种数据库之间......
  • 【专题】2022年中国制造业数字化转型研究报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32145原文出处:拓端数据公众号本文中所说的制造业数字化转型,指的是在制造企业的设计、生产、管理、销售及服务的每一个环节中,将新一代信息技术应用到制造企业的设计、生产、管理、销售及服务的每一个环节中,并可以以每一个环节中产生的数据为基础,展开......
  • 解决帆软Report连接数据库是出现未下载驱动问题
    1.在帆软Report连接数据库的时候一直出现问题,还有就是版本11的不太好用,建议使用版本10的下载驱动在官网都是英文看不懂,直接在csdn上搜即可,然后需要把下载下来的驱动放在这个目录下,这样帆软连接数据库的问题解决 ......
  • 数据类型和运算符
    1.整数类型TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、BIGINT2.浮点数类型和定点数类型浮点类型:FLOAT、DOUBLE。定点类型:DECIMAL3.日期与时间类型DATETIME、DATE、TIMESTAMP、TIME、YEAR4.字符串类型CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET5.二进制类型BI......
  • oracle查找重复数据和删除重复数据sql
    查找重复数据sql(思路就是根据需要判断重复数据的字段分组,根据having大于2的就是重复的)--查找某表重复数据selectBUSS_TYPE_ID,BUSS_TYPE,TRADE_VARIETY_ID,TRADE_VARIETY,TRADE_SUBVARIETY_ID,TRADE_SUBVARIETY,......
  • MySQL数据库实现主主同步
    前言MySQL主主同步实际上是在主从同步的基础上将从数据库也提升成主数据库,让它们可以互相读写数据库,从数据库变成主数据库;主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程,只要对方数据改变,自己就跟着改变。1.主主同步的优与劣事实上每个技术都有它的优劣势,我们......
  • 批量给mycat配置文件增加数据库节点
    #!/bin/bash#修改mysqlschemamycat_schema_file=/opt/mycat/conf/schema.xmlcp$mycat_schema_file${mycat_schema_file}.bakdatabase_list='messagexuejie'#找到usercenter的行号,由于schema成对出现有可能换行,在其上一行增加schema更可靠last_schema_row_number=`sed......
  • redis里使用lua脚本对hash里的数据进行排序
    注意:本脚本只适用于数据量较少的集合进行排序,数据量太大会严重影响redis的性能。localt=redis.call('hgetall',KEYS[1]);localarr={};fori,vinpairs(t)doifi%2==0thenlocalj=cjson.decode(v)ifj.language==ARGV[1]thenj.lan......