分享

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

 拓端数据 2024-03-20 发布于浙江

全文链接:https:///?p=35403

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

相关视频

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

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

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

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

背景

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

head(data)

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

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

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

具体来说:

  • Good:这是一个标识变量,用于区分好顾客(值为1)和坏顾客(值为0)。这是我们试图预测的目标变量。

  • IncomeAmount 和 Installment_Percentage:这些变量描述了顾客的收入、贷款金额以及分期付款的比例,它们都是整数类型。

  • ApplicationsLoans 和 Credit_Cards:这些变量分别记录了顾客提交的贷款申请次数、已获得的贷款数量和持有的信用卡数量。其中,Credit_Cards包含缺失值(NA),这可能需要后续处理。

  • Payments:这个分类变量表示顾客的支付状态,有三个可能的水平:“Delayed”(延迟)、“Missed”(错过)和一个未列出的水平(可能是“On Time”即按时)。

  • Age:顾客的年龄,为整数类型。

  • Marital_StatusEmploymentResidential_Status 和 Repayment_Method:这些都是分类变量,分别描述了顾客的婚姻状况、就业情况、居住状况和还款方式。

  • Time_at_Employment 和 Time_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


 在您提供的代码中,您使用了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 是相对于根节点的相对误差。

  • xerror 和 xstd 是通过交叉验证得到的误差估计和标准差。

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


点击标题查阅往期内容

数据分享|PYTHON用决策树分类预测糖尿病和可视化实例

左右滑动查看更多

01

02

03

04

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

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

变量重要性(Variable Importance)

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

fit$variabance

library("rparcation Tree",cex = 0.5)

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

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

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

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

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

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

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

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

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

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

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

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

决策树

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

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

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

神经网络

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

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

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



本文中分析的数据分享到会员群,扫描下面二维码即可加群!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多