目录
- 一、问题描述
- 二、BP神经网络实现个人信贷信用评估原理
- 三、算法步骤
- 3.1 读入数据
- 3.2 划分训练样本与测试样本
- 3.3 样本归一化
- 3.4 创建BP神经网络,并完成训练
- 3.5 测试
- 四、运行结果
一、问题描述
对个人信用的评估方法主要分为定性评估和定量评估两种,前者主要根据信贷人员的主观判断,后者则根据个人客户的资料,利用评分卡和信用评分模型等工具进行分析。
本文采用BP神经网络,以已知用户信息及信用情况为训练样本,学习得出一个抽象模型,然后对新样本进行评估 ,正确率稳定在70%以上。
对所有客户做二分类,只区分好和差两种情况。数据采用德国信用数据库。德国信用数据库由Hans Hofmann教授整理,包含1000份客户资料,每位客户包含20条属性,并给出了信用好或差的标注。
数据集下载地址如下:
http://ftp.ics.uci.edu/pub/machine-learning-databases/statlog/german。
原始数据保存在german.data文件中,包括:
经常账户状况 、账户持续时间 、贷款历史状况 、贷款用途 、贷款数额等。
二、BP神经网络实现个人信贷信用评估原理
数据集中每位客户包含20条属性,其中的数值属性可以直接使用,类别属性经过整数编码后可以使用。此外,该数据库还给出了另一个处理过的文件german.data-numeric,将原始文件的类别属性进行整数编码,形成24个数值属性,可以直接使用。本文主要使用原书数据进行评估,最后也给出结果。
使用MATLAB实现一个三层的BP神经网络。由于每个个人用户拥有24个属性,因此输入层包含24个神经元节点。该问题为针对信用好/差的二分类问题,因此输出层只包含一个神经元。隐含层的神经元个数与网络性能有关,需要通过实验确定。
流程如下:
三、算法步骤
3.1 读入数据
close all;
clear,clc
%% 读入数据
% 打开文件
fid = fopen('german.data', 'r');
% 按格式读取每一行
% 每行包括21项,包括字符串和数字
C = textscan(fid, '%s %d %s %s %d %s %s %d %s %s %d %s %d %s %s %d %s %d %s %s %d\n');
% 关闭文件
fclose(fid);
3.2 划分训练样本与测试样本
在全部1000份样本中,共有700份正例(信誉好),300份负例(信誉差)。划分时取前350份正例和前150份负例作为训练样本,后350份正例和后150份负例作为测试样本。
% 输入向量
x = C1(1:N, :);
% 目标输出
y = C1(N+1, :);
% 正例
posx = x(:,y==1);
% 负例
negx = x(:,y==2);
% 训练样本
trainx = [ posx(:,1:350), negx(:,1:150)];
trainy = [ones(1,350), ones(1,150)*2];
% 测试样本
testx = [ posx(:,351:700), negx(:,151:300)];
testy = trainy;
3.3 样本归一化
使用mapminmax函数对输入样本进行归一化:
% 训练样本归一化
[trainx, s1] = mapminmax(trainx);
% 测试样本归一化
testx = mapminmax('apply', testx, s1);
3.4 创建BP神经网络,并完成训练
代码如下:
% 创建BP网络
net = newff(trainx, trainy);
% 设置最大训练次数
net.trainParam.epochs = 1500;
% 目标误差
net.trainParam.goal = 1e-13;
% 显示级别
net.trainParam.show = 1;
% 训练
net = train(net,trainx, trainy);
3.5 测试
BP网络输出值并不限定为1或2,而是一个实数,因此还需要将输出转换为整数。取1.5为阈值,小于该阈值的输出判为1(信用好),否则判为2(信用差)
y0 = net(testx);
% y0为浮点数输出。将y0量化为1或2。
y00 = y0;
% 以1.5为临界点,小于1.5为1,大于1.5为2
y00(y00<1.5)=1;
y00(y00>1.5)=2;
% 显示正确率
fprintf('正确率: \n');
disp(sum(y00==testy)/length(y00));
四、运行结果
训练过程如下:
性能曲线:
如果需要源代码,可以参考资源:https://download.csdn.net/download/didi_ya/87734937。
制作不易,如果对你有所帮助,记得点个赞哟~