新闻中心

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

2023-11-18
浏览次数:
返回列表

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

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

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

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

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

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

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

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

决策树如何工作?

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

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

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

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

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

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

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

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

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

随机森林

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

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

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

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

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

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

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

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

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

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

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

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

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

credit 

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

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

No.of.Credits\[No.of.Credits == 4\]

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

str(credit)

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

为什么?

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

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

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

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

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

for(i in S) credit\[, i\]

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

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

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

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

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

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

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

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

perf1 

让我们描绘一下结果。

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

AUCLog1

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

方法二:另一种Logistic模型

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

perf2 

plot(perf2)

AUCLog2

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

搜索