用R语言构建神经网络模型评估银行客户信用的好坏

随着银行业务的扩展、P2P的出现、第三方支付提供个人贷、以及X宝等借贷平台的出现,使得个人信用评估在银行、第三方支付、商业借贷平台等上的应用越来越重要。本文利用BP人工神经网络对商业银行针对个人的信用等级评价进行了探讨,建立了神经网络的评价模型,对此做出了实例分析。

个人信用等级评估指标体系 商业银行个人信用等级评估指标体系设立的目的简述为银行通过评估借款人的“3C”,即品德(Character)、能力(Capacity)以及抵押(Collateral),对借款人在债务期满时偿债能力(Ability to pay)和还款意愿(Willingness to pay)等进行预测。根据指标体系设立原则,参照国际标准、国内外银行经验和企业信用等级评估方法,综合考虑商业银行特点及所在地区情况,通过对以往借款人群的考察,以专家判断为基础,可选择4大类21个指标全面评价个人信用等级。

可行性分析 我国个人信用等级评估起步较晚,相关信息残缺,而BP人工神经网络具有强大并行处理机制,高度自学习、自适应能力,内部有大量可调参数,因而使系统灵活性更强。

进行个人信用等级评估与预测时,有些因素带有模糊性,而BP人工神经网络的后天学习能力使之能够随环境的变化而不断学习,能够从未知模式的大量复杂数据中发现规律,与传统的评价方法相比,表现出更强的功能。

BP人工神经网络方法克服了传统分析过程的复杂性及选择适当模型函数形式的困难,它是一种自然的非线性建模过程,无需分清存在何种非线性关系,给建模与分析带来极大的方便。

BP人工神经网络可以再现专家的经验、知识和直觉思维,较好地保证了评估与预测结果的客观性。

模型建立

R语言AMORE包是个前馈神经网络工具包,类似的还有nnet,RSNNS等。AMORE比nnet参数要丰富一些。AMORE用来构建前馈神经网络的函数是newff()。

newff(n.neurons,
      learning.rate.global,
      momentum.global, 
      error.criterium, 
      Stao, 	
      hidden.layer,
      output.layer, 
      method)

其中。n.neurons是个数值向量,包含在每个层的神经元的数目。第一个数是输入神经元的数量,最后是输出神经元的数量,其余的都是隐藏层神经元的数量。

learning.rate.global全局的学习率。

momentum.global全局的动量值(貌似是步长)

error.criterium误差衡量算法,如用误差平方和,选“LMS”。

hidden.layer隐藏层激活函数。

output.layer输出层激活函数。

method 学习方法,如梯度下降。

数据准备

本文数据下载:

german.data-numeric是德国一家银行的数据集,共1000行,前24个变量是用户的各种存款贷款记录,最后一个变量是信用好坏,只有1和2两种情况。

#加载包

library("AMORE")

#读入数据,因为分隔符不确定,所以不写,空格和制表符都行

x <- read.table("D:/data/german.data-numeric",header=F)

#数据最后一行为1和2表示信用好和信用不好,对其进行归一化

x$V25[x$V25 == 1] <- 0

x$V25[x$V25 == 2] <- 1

#把训练数据和测试数据拆开

T <- x$V25

P <- x[,1:24]

#把输入样本归一化 这里使用y=(x-MinValue)/(MaxValue-MinValue)来处理

maxP <- apply(P,2,"max")

minP <- apply(P,2,"min")

P <- t(P)

mm <- maxP-minP

mm[mm ==0] <- 1 #避免除0

P <- (P-minP)/mm

P <- t(P)

#抽样300作为测试集

testc <- sample(1:nrow(x),300,replace=F)

trainP <- P[-testc,]

trainT <- T[-testc]

testP <- P[testc,]

testT <- T[testc]

#创建网络

net <- newff(n.neurons=c(24,24,1), learning.rate.global=1e-4, momentum.global=0.01,error.criterium="LMS", Stao=NA, hidden.layer="tansig", output.layer="purelin", method="ADAPTgdwm")

#训练

model <- train(net, trainP, trainT, error.criterium="LMS", report=TRUE, show.step=100, n.shows=10 )

#测试testO <- sim(model$net, testP)testO[testO <0.5] <- 0testO[testO >= 0.5] <- 1table(testO,testT)

正确率:(187+42)/(187+42+24+47)=0.76,效果还不错!

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊EurekaRibbonClientConfiguration

spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframewor...

1171
来自专栏谈补锅

记录C#常用的代码片段

using Newtonsoft.Json; using Newtonsoft.Json.Linq;

922
来自专栏DT乱“码”

简单的考勤系统

连接数据库类 package com.lianrui.it; import java.sql.Connection; import java.sql.Driv...

3469
来自专栏跟着阿笨一起玩NET

GB2312转换成UTF-8与utf_8转换成GB2312

1831
来自专栏我和未来有约会

silverlight向服务器post数据类

using System; using System.Net; using System.Windows; using System.Windows.Co...

1955
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

20410
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

23610
来自专栏飞扬的花生

日志帮助类

 1.代码 using System; using System.Collections.Generic; using System.Linq; using S...

1909
来自专栏菩提树下的杨过

MSDN官方的ASP.Net异步页面的经典示例代码

示例1.演示异步获取一个网址的内容,处理后显示在OutPut这一Label上 using System; using System.Web; using S...

1985
来自专栏互联网开发者交流社区

WinForm之窗体应用程序

1843

扫码关注云+社区