关于算法:拓端tecdatR语言逻辑回归Logistic-Regression回归决策树随机森林信用卡违约分析信贷数据集

45次阅读

共计 3517 个字符,预计需要花费 9 分钟才能阅读完成。

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

在许多网站上都能够找到一个风行的德国信贷数据集_german_credit_,其中蕴含了银行贷款申请人的信息。该文件蕴含 1000 名申请人的 20 条信息。

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

请留神,本例可能须要进行一些数据处理,以便为剖析做筹备。

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

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

这段代码在数据上做了一个小的解决,为剖析做筹备。否则,就会呈现谬误,因为在某些文件的某一列中发现有四类因素。

基本上,任何 4 类因变量都被笼罩为 3 类。持续进行剖析。

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

疾速浏览一下数据,理解一下咱们的工作内容。

str(credit)

你可能会立刻留神到有几个变量很显眼。咱们要排除它们。” 信贷期限(月)”、” 信贷金额 “ 和 “ 年龄 ”。

为什么?

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

对于这些因素,重要的是咱们晓得它们与贷款决定的关系。良好的信用与某些因素的组合无关,从而使咱们能够用概率将新的申请人按其特色进行分类。

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

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

而后咱们创立一个简短的函数,将整数转换成因子。

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')

让咱们描述一下后果。

咱们将通过寻找 AUC 来完结这一部分。

AUCLog1

  

这不是一个蹩脚的后果,但让咱们看看是否能够用不同的办法做得更好。

办法二:另一种 Logistic 模型

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

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

AUCLog2

 包含所有的变量,咱们并没有失去多少改善。一个好的规定是尽可能放弃模型的简略。减少更多的变量会带来很少的改善,所以保持应用更简略的模型。

办法三:回归树

接下来,让咱们试着用回归树的办法来剖析数据。咱们的大部分代码与上述逻辑模型中应用的代码类似,但咱们须要做一些调整。

请再次留神,咱们正在钻研咱们模型中的所有变量,找到它们对咱们感兴趣的变量 – 信用度的影响。

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

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

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

办法四:随机森林

与其建设一棵决策树,咱们能够应用随机森林办法来创立一个决策树 “ 森林 ”。在这种办法中,最终后果是类的模式(如果咱们正在钻研分类模型)或预测的平均值(如果咱们正在钻研回归)。

随机森林背地的想法是,决策树很容易适度拟合,所以找到森林中的 “ 均匀 “ 树能够帮忙防止这个问题。

你能够设想,这比创立一棵决策树在计算上要求更高,但 R 能够很好地解决这一工作。

randomForest(Credit ~)

通过致力,咱们失去了一个有点改良的后果。随机森林模型是咱们所尝试的四个模型中体现最好的。然而,这须要判断后果是否值得付出额定的致力。

办法五:比拟随机森林和 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))

你能够看到,咱们从前四个模型中失去的后果正好处于散布的两头。

这为咱们证实了这些模型都是有可比性的。咱们所心愿的最好后果是 AUC 达到 0.84,而且大多数人给咱们的后果与咱们曾经计算的后果类似。

然而,让咱们试着更好地可视化。

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

咱们创立几个新图。第一个是密度等高线图。

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

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

with(AA, boxplot(V1, V2))

无论咱们以何种形式形容咱们的后果,都必须应用数据来做出正当的贷款决定。这里有一个问题?

这些可能是咱们应用这些模型所能得出的最佳分数,但这些后果对于确定贷款申请人的信用价值是否能够承受?这取决于贷款机构所应用的信用规范。

在最好的状况下,看起来咱们的模型给了 82% 的机会向良好的信用风险提供贷款。对于每 100 万元的贷款,咱们最多可能冀望失去 82 万元的偿还。均匀而言,咱们预计会发出大概 78 万元的本金。换句话说,依据咱们的剖析,有 75% 到 80% 的机会从新取得 100 万元的贷款,这取决于咱们应用的建模办法。

当咱们把贷款申请人退出咱们的数据库时,如果咱们要把他们视为良好的信贷风险,咱们心愿他们汇集在高密度图的最暗区域。

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


最受欢迎的见解

1. 从决策树模型看员工为什么到职

2. R 语言基于树的办法:决策树,随机森林

3.python 中应用 scikit-learn 和 pandas 决策树

4. 机器学习:在 SAS 中运行随机森林数据分析报告

5. R 语言用随机森林和文本开掘进步航空公司客户满意度

6. 机器学习助推快时尚精准销售工夫序列

7. 用机器学习辨认一直变动的股市情况——隐马尔可夫模型的利用

8.python 机器学习:举荐零碎实现(以矩阵合成来协同过滤)

9.python 中用 pytorch 机器学习分类预测银行客户散失

正文完
 0