2020全国大学生数学建模C题初尝试——基于 PaddlePaddle LSTM 的中小微企业信贷决策模型
本文目录
项目地址
https://aistudio.baidu.com/aistudio/projectdetail/906384
题目简析
C题题目
首先让我们来回顾一下题目:
在实际中,由于中小微企业规模相对较小,也缺少抵押资产,因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力,向实力强、供求关系稳定的企业提供贷款,并可以对信誉高、信贷风险小的企业给予利率优惠。银行首先根据中小微企业的实力、信誉对其信贷风险做出评估,然后依据信贷风险等因素来确定是否放贷及贷款额度、利率和期限等信贷策略。
某银行对确定要放贷企业的贷款额度为 10 至 100 万元;年利率为 4% 至 15%;贷款期限为 1 年。附件1~3 分别给出了123家有信贷记录企业的相关数据、302 家无信贷记录企业的相关数据和贷款利率与客户流失率关系的 2019 年统计数据。该银行请你们团队根据实际和附件中的数据信息,通过建立数学模型研究对中小微企业的信贷策略,主要解决下列问题:
(1) 对附件 1 中 123 家企业的信贷风险进行量化分析,给出该银行在年度信贷总额固定时对这些企业的信贷策略。
(2) 在问题 1 的基础上,对附件 2 中 302 家企业的信贷风险进行量化分析,并给出该银行在年度信贷总额为1亿元时对这些企业的信贷策略。
(3) 企业的生产经营和经济效益可能会受到一些突发因素影响,而且突发因素往往对不同行业、不同类别的企业会有不同的影响。综合考虑附件 2 中各企业的信贷风险和可能的突发因素(例如:新冠病毒疫情)对各企业的影响,给出该银行在年度信贷总额为 1 亿元时的信贷调整策略。
简单解析
先让我们看看附件 1 的数据

其中发票号码,开票具体日期,销方单位代号属于无用信号。同时信号本身属于时序信号,故需要选用适合处理时序信息的神经网络。由于 RNN 在处理长依赖问题具有较为严重的局限性,故最终决定选用 LSTM。
简单说说 LSTM
LSTM 的 全称为 Long Short Term Memory networks,即长短期记忆网络。LSTM 是一种特殊的循环神经网络(Recurrent Neural Networks),该网络设计出来是为了解决 RNN 未能解决的长依赖问题。
所有循环神经网络都具有神经网络的重复模块链的形式。 在标准的 RNN 中,该重复模块将具有非常简单的结构,例如单个 tanh 层。标准的 RNN 网络如下图所示

LSTM 也具有这种链式结构,但是它的重复单元不同于标准 RNN 网络里的单元只有一个网络层,它的内部有四个网络层,同时具有遗忘门、输入门和输出门等几个部分。LSTM 的结构如下图所示

其中

项目代码
笔者使用百度的 AIStudio 线上平台进行模型的训练,环境配置为 Python 2.7 与 PaddlePaddle 1.6.2
数据预处理
由于题目数据量较为庞大,数据预处理部分的工作比较繁杂,处理好的数据如下所示

从左到右分别为金额,税额,价税合计与发票状态(0 为有效发票,1 为作废发票),标签为公司评级ABCD,分别用1234表示
不想自己处理的小伙伴可以直接白嫖已经处理好的训练数据,提取码如下
链接:https://pan.baidu.com/s/1RLhF5N3EW_xkiO7QZvNH4A
提取码:fit5
数据的导入与训练
引用库文件
import numpy as np
import math
import matplotlib.pyplot as plt
import paddle
import paddle.fluid as fluid
from __future__ import print_function
文件读入
SAVE_DIRNAME = 'model'
f = open('work/data.txt') #修改数据集文件路径
df = f.readlines()
f.close()
data = []
for line in df:
data_raw = line.strip('\n').strip('\r').split('\t')
data.append(data_raw)
data = np.array(data, dtype='float32')
打印出来查看一下
print('数据类型:',type(data))
print('数据个数:', data.shape[0])
print('数据形状:', data.shape)
print('数据第一行:', data[0])

划分训练集和验证集,由于数据量较大,故将训练集的比例划分到 99%,剩余两千左右的数据作为验证
ratio = 0.99
DATA_NUM = len(data)
train_len = int(<

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



