R语言逻辑回归(Logistic Regression)、回归决策树、随机森林信用卡违约分析信贷数据集...

news2024/12/1 12:31:47

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

本文中我们介绍了决策树和随机森林的概念,并在R语言中用逻辑回归、回归决策树、随机森林进行信用卡违约数据分析(查看文末了解数据获取方式)点击文末“阅读原文”获取完整代码数据)。

决策树是由节点和分支组成的简单树状结构。根据每个节点的任何输入特征拆分数据,生成两个或多个分支作为输出。这个迭代过程增加了生成的分支的数量并对原始数据进行了分区。这种情况一直持续到生成一个节点,其中所有或几乎所有数据都属于同一类,并且不再可能进一步拆分或分支。

视频:从决策树到随机森林:R语言信用卡违约分析信贷数据实例

这整个过程生成了一个树状结构。第一个分裂节点称为根节点。末端节点称为叶子并与类标签相关联。从根到叶的路径产生分类规则。

outside_default.png

假设你是一名员工,你想吃食物。

您的行动方案将取决于多种情况。

如果你不饿,你就不会花钱。但是如果你饿了,那么选择就会改变。你的下一步行动取决于你的下一个情况,即你有没有买午餐?

现在,如果你不吃午饭,你的行动将完全取决于你的下一个选择,即是不是月底?如果是月底最后几天,可以考虑不吃饭;否则,您不会将其视为偏好。

当涉及多个选择来做出任何决定时,决策树就会发挥作用。现在你必须做出相应的选择以获得有利的结果。

outside_default.png

决策树如何工作?

决策树有两个组成部分:熵和信息增益

熵是一个用来衡量信息或无序的概念。我们可以用它来衡量数据集的纯度。

为了更好地理解熵,让我们研究两个不同的示例数据集,它们都有两个类,分别表示为蓝点和红叉。在左侧的示例数据集中,我们混合了蓝点和红叉。在右侧数据集的示例中,我们只有红十字。第二种情况——一个只有一个类样本的数据集——是我们的目标:一个“纯”数据子集。

outside_default.png

熵可以是纯度、无序或信息的量度。由于混合类,左边的数据集不那么纯净,更混乱(更无序,即更高的熵)。然而,更多的混乱也意味着更多的信息。实际上,如果数据集只有一类的点,那么无论您尝试多长时间,都无法从中提取太多信息。相比之下,如果数据集具有来自两个类的点,则它也具有更高的信息提取潜力。所以,左边数据集的熵值越高,也可以看作是潜在信息量越大。

outside_default.png

信息增益为了评估一个特征对分裂的好坏,计算分裂前后的熵差。

决策树中每个拆分的目标是从混淆的数据集移动到两个(或更多)更纯的子集。理想情况下,分裂应该导致熵为 0.0 的子集。然而,在实践中,如果拆分导致子集的总熵低于原始数据集就足够了。

也就是说,我们首先计算分割前数据集的熵,然后计算分割后每个子集的熵。最后,在拆分之前从数据集的熵中减去由子集大小加权的输出熵之和。这种差异衡量了信息的增益或熵的减少。如果信息增益是一个正数,这意味着我们从一个混乱的数据集转移到了一些更纯粹的子集。

然后,在每一步,我们将选择在信息增益值最高的特征上分割数据,因为这会产生最纯粹的子集。

我们将首先分割信息增益最高的特征。这是一个递归过程,直到所有子节点都是纯的或直到信息增益为零。

outside_default.png

随机森林

随机森林是另一种强大且最常用的监督学习算法。

许多比一个好。简单来说,这就是随机森林算法背后的概念。也就是说,许多决策树可以产生比仅仅一棵决策树本身更准确的预测。事实上,随机森林算法是一种有监督的分类算法,它构建了 N 个经过稍微不同训练的决策树,并将它们合并在一起以获得更准确和稳定的预测.

让我们再次强调这个概念。整个想法依赖于多个决策树,这些决策树都经过略微不同的训练,并且所有这些决策树都被考虑到最终决策中。

在一个随机森林中,N 棵决策树在通过获得的原始训练集的一个子集上进行训练自举原始数据集,即通过带放回的随机抽样。

此外,输入特征也可能因树而异,作为原始特征集的随机子集。

N 个稍有不同训练的树将对相同的输入向量产生 N 个稍有不同的预测。通常,多数规则适用于做出最终决定。N棵树中的大多数提供的预测被用作最后一棵。

这种策略的优势是显而易见的。虽然来自单个树的预测对训练集中的噪声高度敏感,但来自大多数树的预测却不是——前提是这些树不相关。Bootstrap 采样是通过在不同的训练集上训练树来去相关树的方法。

outside_default.png

接下来,我们在R语言中用逻辑回归、回归决策树、随机森林进行信用卡违约分析。

信贷数据集,其中包含了银行贷款申请人的信息。该文件包含1000名申请人的20条信息。

下面的代码可以用来确定申请人是否有信用,以及他(或她)是否对贷款人有良好的信用风险。有几种方法被应用到数据上,帮助做出这种判断。在这个案例中,我们将看一下这些方法。

相关视频Boosting原理与R语言提升回归树BRT预测短鳍鳗分布

请注意,本例可能需要进行一些数据处理,以便为分析做准备。

我们首先将数据加载到R中。

credit <- read.csv(credit, header = TRUE, sep = ',')

这段代码在数据上做了一个小的处理,为分析做准备。否则,就会出现错误,因为在某些文件的某一列中发现有四类因素。

基本上,任何4类因变量都被覆盖为3类。继续进行分析。

No.of.Credits\[No.of.Credits == 4\] <- 3

快速浏览一下数据,了解一下我们的工作内容。

str(credit)

outside_default.png

你可能会立即注意到有几个变量很显眼。我们要排除它们。"信贷期限(月)"、"信贷金额 "和 "年龄"。

为什么?

我们在这个模型中试图把重点放在作为信用价值指标的数据分类或类别上。这些是分类变量,而不是数字变量。申请人有电话吗?申请人是否已婚?是否有共同签署人?申请人在同一地址住了多长时间?这类事情。

关于这些因素,重要的是我们知道它们与贷款决定的关系。良好的信用与某些因素的组合有关,从而使我们可以用概率将新的申请人按其特征进行分类。

在数据中,这些问题的答案不是 "是 "或 "不是 "或 "十年"。答案被分组为更广泛的分类。

我们需要做的是删除真正的数字数据(时间、金额和年龄),保留分类因素。我们排除选定列。

然后我们创建一个简短的函数,将整数转换成因子。

for(i in S) credit\[, i\] <- as.factor(credit\[, i\])

现在我们有了有用的数据,我们可以开始应用不同的分析方法。

方法一:_逻辑回归_(Logistic Regression)

第一步是创建我们的训练数据集和测试数据集。训练集用于训练模型。测试集则用于评估模型的准确性。

我们把数据集分成任何我们喜欢的大小,在这里我们使用三分之一,三分之二的分割。

(1:nrow(credit))\[-sample(1:nrow(credit), size = 333)\]

在这个阶段,我们将使用glm()函数进行Logistic回归。在这里,我们有选择地使用模型中的变量。但现在只是用五个变量来确定信用度的值。

LogisticModel<- glm(Credit ~ Account + Payment + Purp + Length.of.current + Sex, family = binomial, data = credit)

完成后,我们继续将我们刚刚创建的模型拟合到测试集i_test1上,并准备进行第一次预测。

我们已经拟合了模型。现在我们将使用ROCR包来创建预测,并以曲线下面积(AUC)来衡量性能。AUC越大,说明我们的模型表现越好。

perf1 <- performance(pred1, 'tpr', 'fpr')

让我们描绘一下结果。

outside_default.png

我们将通过寻找AUC来结束这一部分。

AUCLog1

outside_default.png  

这不是一个糟糕的结果,但让我们看看是否可以用不同的方法做得更好。

方法二:另一种Logistic模型

在这种方法中,我们将建立第二个Logistic逻辑模型来利用我们数据集中的所有变量。其步骤与上述第一个模型相同。

perf2 <- performance(pred2, 'tpr', 'fpr')
plot(perf2)

outside_default.png

AUCLog2

outside_default.png

包括所有的变量,我们并没有得到多少改善。一个好的规则是尽可能保持模型的简单。增加更多的变量会带来很少的改善,所以坚持使用更简单的模型。


点击标题查阅往期内容

outside_default.png

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

outside_default.png

左右滑动查看更多

outside_default.png

01

outside_default.png

02

outside_default.png

03

outside_default.png

04

outside_default.png

方法三:回归树

接下来,让我们试着用回归树的方法来分析数据。我们的大部分代码与上述逻辑模型中使用的代码相似,但我们需要做一些调整。

请再次注意,我们正在研究我们模型中的所有变量,找到它们对我们感兴趣的变量--信用度的影响。

TreeModel <- rpart(Creditability ~ ., data = credit\[i_calibration1, \])
library(rpart.plot)
prp(TreeModel, type = 2, extra = 1)

outside_default.png

perf3 <- performance(pred3, 'tpr', 'fpr')
plot(perf3)

outside_default.png

outside_default.png

考虑到我们的树状模型的复杂性,这些结果并不令人满意,所以我们不得不再次怀疑第一个例子中更简单的Logistic Regression模型是否更好。

方法四:随机森林

与其建立一棵决策树,我们可以使用随机森林方法来创建一个决策树 "森林"。在这种方法中,最终结果是类的模式(如果我们正在研究分类模型)或预测的平均值(如果我们正在研究回归)。

随机森林背后的想法是,决策树很容易过度拟合,所以找到森林中的 "平均 "树可以帮助避免这个问题。

你可以想象,这比创建一棵决策树在计算上要求更高,但R可以很好地处理这一工作。

randomForest(Credit ~ )

outside_default.png

outside_default.png

通过努力,我们得到了一个有点改进的结果。随机森林模型是我们所尝试的四个模型中表现最好的。但是,这需要判断结果是否值得付出额外的努力。

方法五:比较随机森林和Logistic模型

好了,我们已经看了使用两种基本分析方法的各种结果--逻辑回归和决策树。我们只看到了以AUC表示的单一结果。

随机森林方法要求我们创建一个决策树的森林,并取其模式或平均值。为什么不利用所有这些数据呢?它们会是什么样子呢?

下面的代码创建了一个图表,描述了我们的随机森林中每棵树的AUC分数和逻辑模型的数百种组合。

首先我们需要一个函数来进行分析。

function(i){
        i_test2 <- sample(1:nrow(credit), size = 333)

        summary(LogisticModel.3)
        fitLog3 <- predict(LogisticModel.3, type = 'response', newdata = credit\[i_test2,

这部分代码的运行需要一段时间,因为我们要对数百个单独的结果进行列表和记录。你可以通过改变VAUC对象中的计数来调整模型中的结果数量。在这里,我们选择计算200个x-y对,或400个单独的结果。

plot(t(VC))

outside_default.png

你可以看到,我们从前四个模型中得到的结果正好处于分布的中间。

这为我们证实了这些模型都是有可比性的。我们所希望的最好结果是AUC达到0.84,而且大多数人给我们的结果与我们已经计算的结果相似。

但是,让我们试着更好地可视化。

首先,我们将对象转换成一个数据框架。

我们创建几个新图。第一个是密度等高线图。

plot(AA, aes(x = V1, y = V2)

outside_default.png

第二张是高密度等高线图,给我们提供了数据的概率区域。

with(AA, boxplot(V1, V2))

outside_default.png

无论我们以何种方式描述我们的结果,都必须使用数据来做出合理的贷款决定。这里有一个问题?

这些可能是我们使用这些模型所能得出的最佳分数,但这些结果对于确定贷款申请人的信用价值是否可以接受?这取决于贷款机构所使用的信用标准。

在最好的情况下,看起来我们的模型给了82%的机会向良好的信用风险提供贷款。对于每100万元的贷款,我们最多可能期望得到82万元的偿还。平均而言,我们预计会收回大约78万元的本金。换句话说,根据我们的分析,有75%到80%的机会重新获得100万元的贷款,这取决于我们使用的建模方法。

当我们把贷款申请人加入我们的数据库时,如果我们要把他们视为良好的信贷风险,我们希望他们聚集在高密度图的最暗区域。

除非我们收取大量的利息来弥补我们的损失,否则我们可能需要更好的模型。

数据获取

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

outside_default.png

点击文末“阅读原文”

获取全文完整资料。

本文选自《R语言逻辑回归(Logistic Regression)、回归决策树、随机森林信用卡违约分析信贷数据集》。

outside_default.png

outside_default.png

点击标题查阅往期内容

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)回归树检测异常值

outside_default.png

outside_default.png

outside_default.png

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

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

相关文章

MVSNet、PatchMatchNet中的 eval.sh文件超参数解释

下面以PatchMatchNet为例, 打开PatchMatchNet程序中的 eavl.sh文件, 可以看到文件设置了数据集路径,及超参数设置(超参数,也可以不写,会使用默认参数) 上图中各参数意思如下: 执行文件python eval.py; 数据集加载方方式使用dtu_yao_eval ; batch_size=1 ,视图数N设…

【C++】命名空间 ( namespace )

目录搁这 什么是命名空间命名空间的作用如何定义命名空间命名空间的种类如何使用命名空间内的成员作用域限定符命名空间展开命名空间全部展开命名空间部分展开 总结 什么是命名空间 命名空间是一种用来避免命名冲突的机制&#xff0c;它可以将一段代码的名称隔离开&#xff0c…

中国地图使用心得

中国地图使用心得 注册地图是注册在echarts对象上而非 自己构建的echarts dom上、。 请求本地json文件 ​ vue项目的public打包时不会动&#xff0c;所以线上和本地地址直接指向了public同级目录&#xff0c;请求时直接相对路径 绘制中国地图时&#xff0c;如何在各个省会地方…

「深度学习之优化算法」(十三)蝙蝠算法

1. 蝙蝠算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   蝙蝠算法(Bat Algorithm)是受蝙蝠回声定位的特性启发而提出的新兴算法,提出时间是2010年,虽然距今(2020)有近10年,但与其它的经典算法相比仍算一个新算法。算法也已有一定规模的研究和应用,但仍…

【LLM系列之LLaMA2】LLaMA 2技术细节详细介绍!

Llama 2 发布&#xff01; Meta 刚刚发布了 LLaMa 2&#xff0c;它是 LLaMA 的下一代版本&#xff0c;具有商业友好的许可证。&#x1f92f;&#x1f60d; LLaMA 2 有 3 种不同的尺寸&#xff1a;7B、13B 和 70B。 7B & 13B 使用与 LLaMA 1 相同的架构&#xff0c;并且是商…

年CTF—初五

0x00 前言 CTF 加解密合集&#xff1a;CTF 加解密合集 0x01 题目 神秘人送来了半个世纪前的无线电信号&#xff0c;但是只能分别出以下的密文&#xff1a; YDHML_QKA_PDK_HVD_NAHI_OQ_K_GR 据说上面的无线电信号代表的是中文&#xff0c;由红岸基地发往半人马星系 半个世纪过…

数据容器入门(set)

集合的定义&#xff1a; 语法&#xff1a;变量名称 {元素&#xff0c;元素&#xff0c;元素.........元素} 定义空集合&#xff1a; 变量名称 set&#xff08;&#xff09; set {“abc”&#xff0c;123&#xff0c;“def”} 集合的特点&#xff1a; 可以容纳多个数据可以容…

数据结构01-线性结构-链表栈队列-栈篇

文章目录 参考&#xff1a;总结大纲要求线性结构-栈回文匹配小猫钓鱼的故事 参考&#xff1a; 线性结构-栈 总结 本系列为C数据结构系列&#xff0c;会介绍 线性结构&#xff0c;简单树&#xff0c;特殊树&#xff0c;简单图等。本文为线性结构部分。 大纲要求 线性结构 【…

回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(不调用工具箱函数)

回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(不调用工具箱函数) 文章目录 回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(不调用工具箱函数)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 GRU神经网络是LSTM神经网络的一种变体&#xff0c;LSTM 神经网 …

集合面试题--二叉树,红黑树,散列表

目录 二叉树 二叉搜索树 时间复杂度 总结 红黑树 红黑树特质 复杂度 总结 散列表 散列函数 哈希冲突 散列冲突-链表法&#xff08;拉链&#xff09; 时间复杂度 ​总结 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是…

Mapbox GL JS学习之路(一):初识 Mapbox GL JS

文章目录 1 什么是Mapbox GL JS2 Mapbox GL JS 可以用来做什么2.1 在交互式地图上使用自己的数据自定义设计的地图样式2.2 商店定位器&#xff08;Store locator&#xff09;2.3 故事讲述&#xff08;Storytelling&#xff09;2.4 用于基于位置的数据可视化的仪表板&#xff08…

C++ deque/queue/stack的底层原理

deque容器的存储结构 和 vector 容器采用连续的线性空间不同&#xff0c;deque 容器存储数据的空间是由一段一段等长的连续空间构成&#xff0c;各段空间之间并不一定是连续的&#xff0c;可以位于在内存的不同区域。 deque采用一块所谓的map数组&#xff08;注意&#xff0c…

Lua 批量修改文件夹下文件名

local s io.popen("dir C:\\Users\\lizhiyuan\\Desktop\\国家知识产权局ftp法律状态数据\\data /b/s") local filelist s:read("*a")local start_pos 0while 1 do_,end_pos,line string.find(filelist, "([^\n\r].xml)", start_pos)if not e…

VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】

VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】 介绍修改注册表添加右键打开文件属性修改注册表添加右键打开文件夹属性修改注册表添加右键空白区域属性 介绍 鼠标右击文件或者文件夹&#xff0c;可直接用VSCode打开&#xff0c;非常方便。但如果我们在安装VSCo…

动态规划---子序列问题

一)最长递增子序列: 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 算法原理: 1.定义一个状态表示:经验题目要求 dp[i]表示&#xff0c;以i位置为结尾&#xff0c;最长递增子序列的长度 中心思路就是找到以i位置为结尾的所有递增子序列&#xff0c;然后找到递增…

使用Adfind和powerview查询域内特殊的ACL

Adfind 使用adfind查询具备有Dcsync权限的账户 AdFind.exe -s subtree -b "DC=hacktest,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes All";; -recmute AdFind.exe -s subtree -b "DC=hacktest,DC…

《Pytorch深度学习和图神经网络(卷 2)》学习笔记——第一章

学习基于如下书籍&#xff0c;仅供自己学习&#xff0c;用来记录回顾&#xff0c;非教程。 <PyTorch深度学习和图神经网络&#xff08;卷2&#xff09;——开发应用>一书配套代码&#xff1a; https://github.com/aianaconda/pytorch-GNN-2nd- 百度网盘链接&#xff1a;…

【有功功率、无功功率】可再生能源配电馈线的鲁棒经济调度研究[IEEE13节点](Matlab代码实现)

&#x1f4a5;1 概述 "有功功率和无功功率" 是与电力系统中能量传输和功率控制相关的两个重要概念。 有功功率&#xff08;Active Power&#xff09;是指电力系统中传输和消耗能量的功率&#xff0c;也被称为实功功率。它负责提供电力系统中的实际电能需求&#xf…

Python使用select模块/asyncio库实现轮询机制

一、轮询机制概念 在操作系统中&#xff0c;用户态轮询机制是一种等待系统中某个资源就绪的方式&#xff0c;它通常用于非阻塞式I/O操作。这种机制允许用户进程在等待I/O操作完成时继续执行其他任务&#xff0c;而不是一直阻塞等待。用户进程可以使用系统调用将I/O操作请求提交…

数学分析:换元详解

这一端文章没有写详细的证明。意思是说n维空间下的k个向量围成的多面体的体积&#xff0c;都可以用公式(3)进行计算。详细证明过程参考&#xff1a;行列式的一种推广 - 知乎 这里简述下过程&#xff1a; 首先要把这n个m维向量进行格拉姆斯密特正交化&#xff0c;得到正交后的…