R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究

简介: R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究

在数字化时代,顾客信用评估成为商业决策中的重要一环。无论是金融机构的信贷审批,还是电商平台的用户信用管理,都需要对顾客的信用状况进行准确评估点击文末“阅读原文”获取完整代码数据

相关视频

image.png

image.png

随着机器学习技术的不断发展,决策树和神经网络等算法在顾客信用评估中得到了广泛应用。然而,不同的模型具有各自的优势和局限性,因此选择适合的模型对于提高评估准确率至关重要。

决策树作为一种直观且易于理解的机器学习算法,能够自动进行特征选择,并且对于缺失值和异常值具有较强的鲁棒性。这使得决策树在顾客信用评估中成为一种常用的方法。然而,决策树在处理复杂非线性关系时可能表现不佳,且容易过拟合,特别是在树的深度过大时。

另一方面,神经网络以其强大的表示学习能力在顾客信用评估中展现出优势。神经网络能够捕捉数据中的复杂模式和非线性关系,从而在处理大量特征和复杂数据时表现良好。然而,神经网络的训练过程需要大量的计算资源和时间,且模型的可解释性较差,难以确定哪些特征对预测结果有重要影响。

因此,本文旨在对比帮助客户研究神经网络与决策树在顾客信用评估中的性能。我们将使用实际数据集对两种模型进行训练和测试。通过对比分析,我们将探讨不同模型在顾客信用评估中的适用性和局限性,以期为实际应用中的模型选择提供有益的参考。

背景

我们将利用2000个银行顾客的信息,其中好顾客标记为1,坏顾客标记为0,来构建决策树和神经网络模型,以更好地识别顾客的好坏,并预防顾客贷款不还的风险。Training data为70% 和 testing data 为30%

head(data)

首先,我们读取了数据集,并查看了数据的前几行。数据包含了一系列可能影响顾客信用状况的变量,如收入、贷款金额、分期付款比例、信用卡数量、年龄、婚姻状况、就业情况、居住状况等。

042335d0808565a2224e8d3f5c3079ad.png

在对数据集进行初步的探索之后,我们获得了数据的基本结构信息。

17750c5d5a466a5c98e9cf8ca03392a3.png


该数据集包含2000个观测值(即银行顾客的信息),每个观测值都有16个变量(即特征)。这些特征涵盖了顾客的财务状况、贷款历史、人口统计信息以及其他可能影响其信用状况的因素。

具体来说:

  • Good:这是一个标识变量,用于区分好顾客(值为1)和坏顾客(值为0)。这是我们试图预测的目标变量。
  • IncomeAmountInstallment_Percentage:这些变量描述了顾客的收入、贷款金额以及分期付款的比例,它们都是整数类型。
  • ApplicationsLoansCredit_Cards:这些变量分别记录了顾客提交的贷款申请次数、已获得的贷款数量和持有的信用卡数量。其中,Credit_Cards包含缺失值(NA),这可能需要后续处理。
  • Payments:这个分类变量表示顾客的支付状态,有三个可能的水平:“Delayed”(延迟)、“Missed”(错过)和一个未列出的水平(可能是“On Time”即按时)。
  • Age:顾客的年龄,为整数类型。
  • Marital_StatusEmploymentResidential_StatusRepayment_Method:这些都是分类变量,分别描述了顾客的婚姻状况、就业情况、居住状况和还款方式。
  • Time_at_EmploymentTime_at_Address:这两个变量表示顾客在当前工作和住址的停留时间,为整数类型。其中,Time_at_Employment包含缺失值(NA)。
  • Area_Indicator:这是一个分类变量,可能表示顾客所在地区的指标或标识符。

接下来,我们将利用这些数据构建决策树和神经网络模型。在构建模型之前,我们可能需要处理数据中的缺失值,以及根据需要对某些变量进行编码或转换。此外,我们还需要进一步探索数据,了解变量之间的关系以及它们如何影响目标变量Good

通过构建和训练这两个模型,我们希望能够识别出影响顾客信用状况的关键因素,并准确地预测哪些顾客是好顾客,哪些可能是坏顾客。这将有助于银行制定更有效的贷款政策,降低贷款风险。

决策树和神经网络中哪些变量是重要的和需要用哪些变量来建立这个模型

处理缺失值

if(length(missing)!=0 && class(x)=="integer")x0[missing]=as.numeric(mean(x[nmissing]))  
  if(length(missing)!=0 && class(x)=="factor")x0[missing]= names(table(x[nmissing]))[which

为了构建模型,我们将数据集分为训练集和测试集,其中训练集占70%,测试集占30%。训练集用于训练模型,而测试集则用于评估模型的性能。

index=sample(1:dim(data)[1],dim(data)[1]*0.7,replace=F)#对样本随机抽样70%作为测试集  
test=as.data.frame(data[index,])#测试集  
train=as.data.frame(data[-index,])#训练集
printcp(fit) # display the results


2146e646549245ffe8bc57bea00d25ee.png

在您提供的代码中,您使用了rpart包来拟合一个分类决策树模型,并使用printcpplotcp函数来显示和可视化交叉验证的结果。下面是对这些输出的解释:

printcp(fit) 的输出解释:

  • Classification tree: 表示这是一个分类决策树。
  • rpart(formula = Good ~ ., data = train, method = "class") 是您用来拟合模型的rpart函数调用。Good ~ .表示使用Good作为响应变量,.表示使用train数据集中的所有其他变量作为预测变量。
  • Variables actually used in tree construction: 列出了在构建树时实际使用的变量。
  • Root node error: 100/600 = 0.16667 表示在根节点(即整个数据集)中,错误分类的样本数量是100,总样本数量是600,因此错误率是0.16667(或16.67%)。
  • n= 600 表示训练数据集中有600个观测值。
  • CP 是复杂度参数,用于控制树的剪枝。较小的CP值会导致更复杂的树,而较大的CP值会导致更简单的树。
  • nsplit 是树中发生的分割次数。
  • rel error 是相对于根节点的相对误差。
  • xerrorxstd 是通过交叉验证得到的误差估计和标准差

44df2ed6f513de11d9171de5005a8c92.png

这个函数会生成一个图形,展示了不同复杂度参数(CP)下的交叉验证误差。这可以帮助您选择最佳的剪枝参数。通常,您会选择交叉验证误差最小的CP值,因为它意味着模型既不太复杂也不太简单,从而达到了最佳的泛化能力。


在图形中,您可以观察到随着CP值的增加,交叉验证误差通常先减小后增大。这是因为当CP值很小时,树可能过于复杂,导致过拟合;而当CP值很大时,树可能过于简单,导致欠拟合。您需要找到那个使得交叉验证误差最小的CP值,并使用这个值对树进行剪枝。

首先访问了决策树模型的变量重要性(fit$variable.importance),然后使用rpart.plot库绘制了决策树的图形表示。

变量重要性(Variable Importance)

变量重要性是决策树算法在构建模型时赋予每个预测变量的权重,它反映了每个变量在预测目标变量时的相对贡献。

fit$variabance

library("rparcation Tree",cex = 0.5)

5f7305b6e22bea0d7aa343c614fe3368.png

IncomeInstallment_Percentage等变量具有较高的重要性得分,这意味着它们在模型中的影响更大。而Payments变量的重要性得分较低,说明它在模型中的影响相对较小。变量重要性的具体得分可以根据不同的算法实现和数据集而有所不同,因此重要的是要理解这些得分是相对的,它们提供了关于变量对模型贡献的一个概览。在实际应用中,您可能会根据这些得分来决定是否保留或移除某些变量,以简化模型或提高预测性能。

72565c172687342ae8b792be1397e8c1.png


图形表示中,每个节点代表一个决策点,节点之间的连线表示决策路径,叶节点(通常是矩形)表示最终的分类结果。节点的颜色、大小和标签等信息可以提供关于节点的重要性和决策依据的额外信息。通过查看图形,您可以清楚地看到模型是如何根据输入变量的值来做出分类决策的。

用ROC来看两个模型中的表现。

计算两个模型的ROC曲线下的面积(AUC)

formance( ROCR::prediction( as.numeric(z

4615fd8810860319926e379ab1ad6ca3.png

AUC值介于0和1之间,值越高表示模型的性能越好。一个完美的分类器会有AUC值为1,而一个随机猜测的分类器会有AUC值接近0.5。

performaCR::prediction( as.nuain[,1])), "auc" )@y.values[[1]]

9acfbfde6640f8a6482754d2e379b5c7.png

训练10个隐藏神经元的神经网络

net <- net(  Good ~Income+Amount+Ins
                             ,train, hidden=10, threshold=0.01)  
  print(net.rt)


ea3b9f7b7bdb10cfa0811a2a900b57e0.png

threshold参数用于控制权重更新的阈值,它并不直接控制隐藏层神经元的数量。隐藏层神经元的数量是通过hidden参数来设置的。

此外,print(net.sqrt)将输出神经网络的详细信息,包括权重、偏置项等。如果您想要查看模型的性能或进行预测,您可能需要使用其他函数或方法,比如compute函数来计算训练集或测试集上的预测值。

用testing data来预测,预测顾客好坏准确率为多少

决策树

z <- predict(flass")  
   
   
tab=table(as.numic(test[,1]))

#准确度  
sum(diag(tab))/sum(tab)

57ea7eff28207640791da6ca16903eba.png

对于决策树模型,您已经展示了如何使用测试集进行预测,并计算了预测的准确率。

神经网络

返回的是一个包含预测值的列表,您可能需要提取net.result来得到最终的预测得分。然后,您可以将这些得分转换为分类标签(在本例中为0或1),并计算准确率。

pute(net.sqrt, test[,c("Income","A

26fe969430ebd5a81d589a85db779b6c.png

发现决策树模型的准确率高于神经网络模型,并且模型的可解释性对您来说很重要(例如,您需要理解哪些特征对预测结果有影响),那么您可能会倾向于推荐决策树模型。决策树模型通常更容易理解和解释,而且它们的构建过程相对简单。

相关文章
|
1月前
|
机器学习/深度学习 数据可视化 Windows
深度学习笔记(七):如何用Mxnet来将神经网络可视化
这篇文章介绍了如何使用Mxnet框架来实现神经网络的可视化,包括环境依赖的安装、具体的代码实现以及运行结果的展示。
50 0
|
3月前
|
数据可视化 数据挖掘 图形学
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
|
3月前
|
数据可视化 数据挖掘 数据处理
R语言高级可视化技巧:使用Plotly与Shiny制作互动图表
【8月更文挑战第30天】通过使用`plotly`和`shiny`,我们可以轻松地创建高度互动的数据可视化图表。这不仅增强了图表的表现力,还提高了用户与数据的交互性,使得数据探索变得更加直观和高效。本文仅介绍了基本的使用方法,`plotly`和`shiny`还提供了更多高级功能和自定义选项,等待你去探索和发现。希望这篇文章能帮助你掌握使用`plotly`和`shiny`制作互动图表的技巧,并在你的数据分析和可视化工作中发挥更大的作用。
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
1月前
|
机器学习/深度学习 数据可视化 Linux
Seaborn可视化学习笔记(一):可视化神经网络权重分布情况
这篇文章是关于如何使用Seaborn库来可视化神经网络权重分布的教程,包括函数信息、测试代码和实际应用示例。
41 0
|
3月前
|
数据可视化
R语言可视化设计原则:打造吸引力十足的数据可视化
【8月更文挑战第30天】R语言可视化设计是一个综合性的过程,需要综合运用多个设计原则来创作出吸引力十足的作品。通过明确目标、选择合适的图表类型、合理运用色彩与视觉层次、明确标注与引导视线以及引入互动性与动态效果等原则的应用,你可以显著提升你的数据可视化作品的吸引力和实用性。希望本文能为你提供一些有益的启示和帮助。
|
3月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
56 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。