首页 > 编程语言 >【打破传统授信模型:基于深度神经网络 DNN模型的精确授信额度计算方法】-附完整python代码

【打破传统授信模型:基于深度神经网络 DNN模型的精确授信额度计算方法】-附完整python代码

时间:2024-11-13 22:18:49浏览次数:3  
标签:plt python 模型 DNN test import model data

打破传统授信模型:基于深度神经网络 DNN模型的精确额度计算方法

深度神经网络(Deep Neural Network, DNN),该模型通过 Keras 和 TensorFlow 构建,包含多个全连接层(Dense Layer)和 Dropout 层,以此来减少过拟合。具体的网络结构如下:

模型结构概览

输入层:接收输入特征的数据。输入层的节点数与特征数量一致,这里是 4 个特征(income、debt、credit_history、age)。
隐藏层
第 1 层:128 个神经元,激活函数为 ReLU(Rectified Linear Unit)。
第 2 层:64 个神经元,激活函数为 ReLU。
第 3 层:32 个神经元,激活函数为 ReLU。
每层后面都有一个 Dropout 层,用于减少过拟合,设置的 dropout 比例为 20%(即保留 80% 的神经元,丢弃 20%)。
输出层:最终的输出是单个数值,代表预测的贷款额度,因此只有一个神经元,且没有激活函数(直接输出回归值)。

我们将使用 Keras 和 TensorFlow 来构建和训练模型,涉及的数据处理步骤包括:

数据预处理

特征工程
深度神经网络模型的构建
模型训练和调参
模型评估
最终的额度计算
深度学习模型实现代码

1. 导入必要的库

python

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_absolute_error, mean_squared_error
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping
import seaborn as sns

2. 加载数据

假设我们的数据集包含一些基本的客户信息,包括收入、负债、信用历史等。

python

# 模拟加载数据(在实际使用中,数据通常来自CSV、数据库等)
data = pd.read_csv('customer_data.csv')

# 查看数据概况
print(data.head())
假设数据集包含以下字段:

income: 年收入(万元)
debt: 当前负债(万元)
credit_history: 信用历史(0表示无不良记录,1表示有不良记录)
age: 年龄
loan_amount: 贷款额度(目标变量)

3. 数据预处理

进行缺失值处理、异常值处理和数据标准化。

python

# 检查缺失值
print(data.isnull().sum())

# 填充缺失值
data.fillna(data.mean(), inplace=True)

# 异常值处理(使用Z-score剔除异常值)
from scipy import stats
z_scores = np.abs(stats.zscore(data.select_dtypes(include=[np.number])))
data_no_outliers = data[(z_scores < 3).all(axis=1)]

# 查看处理后的数据
print(data_no_outliers.describe())

# 标准化特征
features = ['income', 'debt', 'credit_history', 'age']
X = data_no_outliers[features]
y = data_no_outliers['loan_amount']

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

4. 构建深度神经网络模型

使用 Keras 构建一个深度神经网络。该网络将包含多个全连接层、激活函数以及 dropout 层来防止过拟合。

python

# 构建深度神经网络模型
model = Sequential()

# 输入层和第一层隐藏层
model.add(Dense(128, input_dim=X_scaled.shape[1], activation='relu'))
model.add(Dropout(0.2))

# 第二层隐藏层
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.2))

# 第三层隐藏层
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))

# 输出层
model.add(Dense(1))

# 编译模型
model.compile(optimizer=Adam(learning_rate=0.001), loss='mean_squared_error')

5. 模型训练与调参

在这里,我们设置一个 EarlyStopping 回调,防止训练过程中发生过拟合。

python

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)

# 训练模型
early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)

history = model.fit(X_train, y_train, epochs=200, batch_size=32, validation_split=0.2, callbacks=[early_stopping], verbose=1)

6. 模型评估

使用测试集来评估模型的性能。这里我们使用均方误差 (MSE) 和均方根误差 (RMSE)。

python

# 模型评估
y_pred = model.predict(X_test)

# 计算评估指标
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)

print(f'Mean Squared Error: {mse:.4f}')
print(f'Root Mean Squared Error: {rmse:.4f}')

# 可视化真实值与预测值的对比
plt.scatter(y_test, y_pred)
plt.xlabel('True Values')
plt.ylabel('Predictions')
plt.title('True vs Predicted Loan Amounts')
plt.show()

7. 可视化训练过程

通过绘制训练过程中的损失曲线,来分析模型的训练表现。

python

# 绘制训练过程中的损失曲线
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.title('Model Loss During Training')
plt.legend()
plt.show()
  1. 额度计算
    根据模型预测的贷款额度,可以计算每个客户的授信额度。

python

# 基于模型预测结果计算授信额度
loan_predictions = model.predict(X_test)

# 显示前10个客户的授信额度预测
for i in range(10):
    print(f"Customer {i+1}: Predicted Credit Limit: {loan_predictions[i][0]:.2f}元")

9. 完整代码

将前述步骤结合在一起,以下是整个银行授信额度模型的完整代码。

python


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_absolute_error, mean_squared_error
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping
import seaborn as sns
from scipy import stats

# 加载数据
data = pd.read_csv('customer_data.csv')
print(data.head())

# 数据预处理
data.fillna(data.mean(), inplace=True)
z_scores = np.abs(stats.zscore(data.select_dtypes(include=[np.number])))
data_no_outliers = data[(z_scores < 3).all(axis=1)]
print(data_no_outliers.describe())

# 标准化特征
features = ['income', 'debt', 'credit_history', 'age']
X = data_no_outliers[features]
y = data_no_outliers['loan_amount']
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 构建深度神经网络模型
model = Sequential()
model.add(Dense(128, input_dim=X_scaled.shape[1], activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(optimizer=Adam(learning_rate=0.001), loss='mean_squared_error')

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)

# 训练模型
early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
history = model.fit(X_train, y_train, epochs=200, batch_size=32, validation_split=0.2, callbacks=[early_stopping], verbose=1)

# 评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
print(f'Mean Squared Error: {mse:.4f}')
print(f'Root Mean Squared Error: {rmse:.4f}')

# 可视化训练过程
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.title('Model Loss During Training')
plt.legend()
plt.show()

# 显示预测结果
for i in range(10):
    print(f"Customer {i+1}: Predicted Credit Limit: {y_pred[i][0]:.2f}元")

这个深度神经网络模型通过多个隐藏层(128、64、32 个神经元),每层使用 ReLU 激活函数,并且使用 Dropout 防止过拟合。通过 Adam 优化器和 均方误差 损失函数进行训练,最终用于预测银行授信额度。这个模型能够处理复杂的非线性关系,并且适应大规模数据集。在实际银行信用评估中,深度神经网络可以通过学习更复杂的客户特征之间的关系来提供更精确的额度预测。

标签:plt,python,模型,DNN,test,import,model,data
From: https://blog.csdn.net/viviwiky/article/details/143753847

相关文章

  • Anaconda 和 conda 是什么关系?就像 pip 和 python 一样吗
    Anaconda和conda是AnacondaDistribution还是MinicondaAnaconda和condaAnaconda和conda之间的关系有点类似于pip和Python,但又有所不同。Anaconda是一个数据科学和机器学习的发行版,它包含了Python、conda以及许多预装的库和工具,如JupyterNotebo......
  • 基于大数据 Python 智能水果销售系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • 简单上手python爬虫实战:阜阳市历史天气数据爬取
        这里我们学校开始了见习,搞的是阜阳市历史天气数据看板,加了点大数据方面的技术栈,我这里就不讲了,出一期非常简单的爬虫代码吧。1数据来源    这里我们用的网站是天气后报里的,网站如下:历史天气查询|天气记录|天气预报|气温查询|过去天气_天气后报http://ti......
  • 带你理解Python面向对象
    一、面向对象编程1.1面向过程与面向对象面向过程:更加注重通过函数来组织代码,适合任务明确、结构简单的程序。面向对象:则注重通过对象和类来组织代码,适合复杂且需要长期维护和扩展的大型项目。面向过程和面向对象都是一种编程方式,只不过再设计上有区别。三大基本特性:封装......
  • Transformer加载预训练模型实践
    以使用google-bert/bert-base-chinese模型为例下载预训练模型官方站点:https://www.huggingface.co/(如果无法访问,使用镜像站点)镜像站点:https://hf-mirror.com/搜索框内搜索自己需要的模型,点击Filesandversions, 一般下载config.json、pytorch_model.bin、tokenizer.json、t......
  • 【Python教程】python如何把数据导出生成excel
    博主介绍:✌全网粉丝21W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。感兴趣的可以先......
  • Python——专栏:跳动的心跳(橘粉爱心)——完整代码
    运行展示完整代码importrandomfrommathimportsin,cos,pi,logfromtkinterimport*CANVAS_WIDTH=980#画布的宽CANVAS_HEIGHT=720#画布的高CANVAS_CENTER_X=CANVAS_WIDTH/2#画布中心的X轴坐标CANVAS_CENTER_Y=CANVAS_HEIGHT/2#画布中......
  • Python 面向对象编程
    一、面向对象编程1.1面向过程与面向对象在理解面向对象编程(OOP)之前,我们先要了解 面向过程(POP) 和 面向对象(OOP) 的区别。1.1.1面向过程(POP)-面向过程的编程思想将一个功能分解为一个一个小的步骤,我们通过完成一个一个的小的步骤来完成一个程序-这种编程方式,符合我们......
  • 【进阶系列】带你看懂python的面向对象编程#类 #对象 #继承 #封装 #多态
    进阶系列一、面向对象编程1.1面向过程与面向对象1.1.1面向过程pop:1.1.2面向对象oop:1.2类、对象1.2.1类的定义与实例化对象1.2.2访问属性/方法1.2.3对象与类的关系1.2.5⭐魔方——构造函数与析构函数1.2.6⭐类属性/方法与实例对象属性/方法与静态方法小练习1......
  • 【Unity怪物角色资源包】Fantasy Monsters Animated [Megapack] 丰富的怪物模型,快速充
    FantasyMonstersAnimated[Megapack]是一款为Unity开发的怪物角色资源包,包含了大量动画怪物模型,特别适合RPG、幻想冒险和动作游戏。该资源包不仅提供了种类丰富的怪物模型,还包括多种动画,帮助开发者快速创建复杂且生动的敌人角色。此资源包非常适合想要打造魔幻或中......