【MATLABデータ処理の実践事例を詳しく解説(15)】~BPニューラルネットワークで個人の信用評価を実現~

1. 問題の説明

個人信用度の評価方法は、主に与信担当者の主観的な判断による定性的評価と、スコアカードなどのツールを用いた個人の顧客情報による定量的評価の2つに大別されます。および分析用のクレジット スコアリング モデル。
この論文では、BP ニューラル ネットワークを使用して、トレーニング サンプルとして既知のユーザー情報とクレジット ステータスを使用して抽象モデルを学習し、新しいサンプルを評価します。正解率は 70% 以上で安定しています。
すべての顧客に対してバイナリ分類を行い、良し悪しのみを区別します。データはドイツの信用データベースを使用しています。ドイツの信用データベースは Hans Hofmann 教授によって編集され、1,000 の顧客プロファイルが含まれており、各顧客には 20 の属性が含まれており、信用の良し悪しがマークされています。
データセットのダウンロード アドレスは次のとおりです:
http://ftp.ics.uci.edu/pub/machine-learning-databases/statlog/german .


元のデータは、現在のアカウントのステータス、アカウントの期間、ローンの履歴、ローンの目的、ローンの金額などを含む german.data ファイルに保存されます。

2. BPニューラルネットワークが個人信用度評価の原理を実現

データ セット内の各顧客には 20 個の属性が含まれており、数値属性は直接使用でき、カテゴリ属性は整数エンコード後に使用できます。さらに、データベースは別の処理済みファイル german.data-numeric も提供します。このファイルは、元のファイルのカテゴリ属性を整数でエンコードして、直接使用できる 24 の数値属性を形成します。この記事では、主に元の本のデータを使用して評価し、最終的に結果を示します。

MATLAB を使用して、3 層の BP ニューラル ネットワークを実装します。各ユーザーには 24 個の属性があるため、入力層には 24 個のニューロン ノードが含まれます。この問題は信用度の良し悪しの二項分類問題であるため、出力層にはニューロンが 1 つしか含まれていません。隠れ層のニューロンの数は、ネットワークのパフォーマンスに関連しており、実験を通じて決定する必要があります。
プロセスは次のとおりです。
ここに画像の説明を挿入

3. アルゴリズムの手順

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

4. 走行結果

トレーニング プロセスは次のとおりです。
ここに画像の説明を挿入
パフォーマンス カーブ:
ここに画像の説明を挿入


ソース コードが必要な場合は、https: //download.csdn.net/download/didi_ya/87734937のリソースを参照できます
作るのは簡単ではありませんが、お役に立ったら、忘れずに気に入ってください〜

おすすめ

転載: blog.csdn.net/didi_ya/article/details/130401851