精华内容
下载资源
问答
  • 基于神经网络算法的中小微企业信贷决策.pdf
  • 基于大数据分析的银行对中小微企业信贷决策.pdf
  • 2020全国大学生数学建模C题初尝试——基于 PaddlePaddle LSTM 的中小微企业信贷决策模型

    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(DATA_NUM * ratio)
    test_len = DATA_NUM - train_len
    
    train_data = data[:train_len]
    test_data = data[train_len:]
    

    数据归一化,由于标签值的解算较为特殊,故对归一化公式做出一些改动

    def normalization(data):
        avg = np.mean(data, axis=0)
        max_ = np.max(data, axis=0)
        min_ = np.min(data, axis=0)
        #result_data = (data - avg) / (max_- min_)
        result_data = data / (max_- min_)
        print(len(result_data))
        print(result_data[:][4])
        return result_data
    train_data = normalization(train_data)
    test_data = normalization(test_data)
    

    构造 paddlepaddle 的 reader

    def my_train_reader():
        def reader():
            for temp in train_data:
                yield temp[:-1], temp[-1]
        return reader
        
    def my_test_reader():
        def reader():
            for temp in test_data:
                yield temp[:-1], temp[-1]    
        return reader
    

    定义 batch size 大小

    # 定义batch
    train_reader = paddle.batch(
        my_train_reader(),
        batch_size=30000)
    

    搭建LSTM模型

    DIM = 1
    hid_dim2 = 1
    x = fluid.layers.data(name='x', shape=[DIM], dtype='float32', lod_level=1)  
    label = fluid.layers.data(name='y', shape=[1], dtype='float32')
    fc0 = fluid.layers.fc(input=x, size=DIM * 4)
    fc1 = fluid.layers.fc(input=fc0, size=DIM * 4)
    lstm_h, c = fluid.layers.dynamic_lstm(
        input=fc1, size=DIM * 4, is_reverse=False)
    
    # 最大池化
    lstm_max = fluid.layers.sequence_pool(input=lstm_h, pool_type='max')
    # 激活函数
    lstm_max_tanh = fluid.layers.tanh(lstm_max)
    # 全连接层
    prediction = fluid.layers.fc(input=lstm_max_tanh, size=hid_dim2, act='tanh')
    # 代价函数
    cost = fluid.layers.square_error_cost(input=prediction, label=label)
    avg_cost = fluid.layers.mean(x=cost)
    # acc = fluid.layers.accuracy(input=prediction, label=label)
    

    开始训练,PASS_NUM 为轮数,这里设置为两百

    from paddle.utils.plot import Ploter
    train_title = "Train cost"
    test_title = "Test cost"
    plot_cost = Ploter(train_title, test_title)
    
    # 定义优化器
    adam_optimizer = fluid.optimizer.Adam(learning_rate=0.002)
    adam_optimizer.minimize(avg_cost)
    
    # 使用CPU
    #place = fluid.CPUPlace()
    # 使用CUDA
    place = fluid.CUDAPlace(0)
    exe = fluid.Executor(place)
    exe.run( fluid.default_startup_program() )
    feeder = fluid.DataFeeder(place=place, feed_list=[x, label])
    
    def train_loop():
        step = 0 # 画图
        PASS_NUM = 200
        for pass_id in range(PASS_NUM):
            total_loss_pass = 0#初始化每一个epoch的损失值初始值为0
            for data in train_reader(): #data表示batch大小的数据样本          
                avg_loss_value, = exe.run(
                    fluid.default_main_program(), 
                    feed= feeder.feed(data), 
                    fetch_list=[avg_cost])
                total_loss_pass += avg_loss_value
            # 画图
            plot_cost.append(train_title, step, avg_loss_value)
            step += 1
            plot_cost.plot()
        fluid.io.save_inference_model(SAVE_DIRNAME, ['x'], [prediction], exe)
    train_loop()
    

    训练误差如图

    在这里插入图片描述

    模型训练效果验证

    def convert2LODTensor(temp_arr, len_list):
        temp_arr = np.array(temp_arr) 
        temp_arr = temp_arr.flatten().reshape((-1, 1))
        print(temp_arr.shape)
        return fluid.create_lod_tensor(
            data=temp_arr,
            recursive_seq_lens =[len_list],
            place=fluid.CPUPlace()
            )
        
    
    def get_tensor_label(mini_batch):  
        tensor = None
        labels = []
        
        temp_arr = []
        len_list = []
        for _ in mini_batch:   
            labels.append(_[1]) 
            temp_arr.append(_[0]) 
            len_list.append(len(_[0])) 
        tensor = convert2LODTensor(temp_arr, len_list)    
        return tensor, labels
    
    my_tensor = None
    labels = None
    
    # 定义batch
    test_reader = paddle.batch(
        my_test_reader(),
        batch_size=400000)
    
    
    for mini_batch in test_reader():
        my_tensor,labels = get_tensor_label(mini_batch)
     
    # 选择CPU或者CUDA进行验证   
    #place = fluid.CPUPlace() 
    place = fluid.CUDAPlace(0)
    
    exe = fluid.Executor(place)
    inference_scope = fluid.core.Scope()
    with fluid.scope_guard(inference_scope):
        [inference_program, feed_target_names, fetch_targets] = (
            fluid.io.load_inference_model(SAVE_DIRNAME, exe))
        results = exe.run(inference_program,
                          feed= {'x': my_tensor}, 
                          fetch_list=fetch_targets)
    

    最后绘制图像,由于标签之前被归一化了,这里我们需要对其进行解算

    label = label*3 # 标签解算
    result_print = results[0].flatten()
    result_print = 3*result_print # 预测结果解算
    plt.figure()
    plt.plot(list(range(len(labels))), labels, color='b')  #蓝线为真实值
    plt.plot(list(range(len(result_print))), result_print, color='r')  #红线为预测值
    plt.show()
    

    验证结果如下,其中蓝色为真实评级,红色为模型的预测评级

    在这里插入图片描述
    误差不是很大,效果感觉还可以

    未标注公司的评估

    由于数据量实在是太大了,导致图片有些难以辨认

    在这里插入图片描述
    但是,通过上图仍然可以看出大部分数据还是聚集在 [1.5,1.7] 这个区间,说明大部分企业仍然处在评级 A 到评级 B 之间。个人认为还是比较合理的。

    该模型其实只考虑了发票记录中的几个较为明显的元素,如果输入网络的属性元素能够更为详细,模型的评估性能应该会更准确一些。

    写在最后

    本人以后会发布一些关于机器学习模型算法,自动控制算法的其他文章,也会聊一聊自己做的一些小项目,希望读者朋友们能够喜欢。

    展开全文
  • 2020年国赛c题
  • 全国大学生数学建模竞赛,中小微企业信贷决策问题,国奖论文,值得拥有
  • 基于数据挖掘的中小微企业信贷评估决策研究.pdf
  • 2020C-中小微企业信贷决策.docx
  • 大数据时代不同行业的中小微企业信贷决策探析.pdf
  • C题 中小微企业信贷决策 在实际中,由于中小微企业规模相对较,也缺少抵押资产,因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力,向实力强、供求关系稳定的企业提供贷款,并可以对信誉高...

    C题 中小微企业的信贷决策

    在实际中,由于中小微企业规模相对较小,也缺少抵押资产,因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力,向实力强、供求关系稳定的企业提供贷款,并可以对信誉高、信贷风险小的企业给予利率优惠。银行首先根据中小微企业的实力、信誉对其信贷风险做出评估,然后依据信贷风险等因素来确定是否放贷及贷款额度、利率和期限等信贷策略。

    背景分析:首先题目说明银行目前是根据信贷政策、企业的交易票据信息和上下游企业的影响力评估企业的,判断出怎样的企业是强、供求关系稳定的企业。银行会对其中好的企业给予利率优惠。

    然后,题目说明了银行具体的评估方式:第一步是,对实力和信誉做出评估,评估结束后,根据评估结果,进行第二步。第二步是,根据一些因素来确定一些策略(之后应该要建立其中的一些模型)放贷及贷款额度、利率和期限等信贷策略。

    某银行对确定要放贷企业的贷款额度为万元;年利率为4%~ 15%;贷款期限为1年。附件1~ 3分别给出了123家有信贷记录企业的相关数据、302家无信贷记录企业的相关数据和贷款利率与客户流失率关系的2019年统计数据。该银行请你们团队根据实际和附件中的数据信息,通过建立数学模型研究对中小微企业的信贷策略,主要解决下列问题:

    背景分析:问题的条件为:贷款额度为万元;年利率为4%~15%;贷款期限为1年。题目设定好了之后,千万不要改变上述的所有条件,不然可能会导致与正确结论之间存在很大出入。

    附件(数据集)分析:

    附件一sheet1(企业信息)提供了123家有信贷记录企业的相关数据。一共有四个指标,分别为:企业代号、企业名称、信誉评级、是否违约。其中企业代号为id,企业的唯一标识符;企业名称中附有所属的领域,可能需要在后面提取一下,然后做做相同或相似行业间的聚类分析(此处为猜测);信誉评级为abcd四个等级,为离散型数据,可以做聚类分析或者问题可能会需要做预测。我的建议是可以将离散型数据进行量化(比如a100,b80,c60,d40或其他方式做数据映射,方便后期利用一些算法做预测);是否违约为离散型数据,后面可能需要关注评级与违约之间的一种关系,做相关分析之类的。

    Sheet2(进项发票信息)提供了企业代号、发票号码 开票日期、销方单位代号、金额、税额、价税合计、发票状态。具体就不一一展开说了,在后面的思路中用到再说,注意这里的所有数据根据评级是可以和附件三对应以下的。且每一个id的数量、比例等等,或许也可以添加到最后的模型当中,而且有效发票那一列,应该是在数据预处理时用的,应该剔除掉有作废发票的那些记录。(另外,如果一个企业多次出现作废发票,是否可以降低一些这个企业的信誉度,这个大家可以思考一下)负数发票应该是在计算时需要减去的部分(看看是否有与之对应的有效发票)在这里需要具体对题目中说的进项和销项做说明:

    进项发票:进项票是指增值税中列进项额的发票。购买方。

    销项发票:销项指销售货物或劳务给客户,我们需要开给客户的发票。

    其实增值税发票不分“销项发票”和“进项发票”的。所谓销项,无非是一般纳税人销售时开出的发票,而所谓进项,则是一般纳税人购进货物收取的发票. 当月,该纳税人要缴纳的税金等于销项减去进项,意即:只对“增值”部分纳税。

    举例:

    购进一件服装,价格100元,税金17元,这17元即为进项税。销售这件服装,价200元,税金34元,这34元为销项税。

    假设本月你只销售这一件服装,那么应纳税=34-17=17元。】Sheet3(销项发票记录)类同sheet2。

    附件二为302家无信贷记录企业的相关数据。这里sheet1只有id和企业名称,应该是需要根据后面的sheet2和3来进行预测。这里也许可以利用一下企业名中的行业信息,将其作为一个指标进行预测。比如附件一给出的,哪些行业的信誉度更高一些,这可能是需要在后期做的,可以加分的东西。Sheet2和3类同前面附件1sheet2的分析。

    这里可以明显看出需要利用一些机器学习算法做预测,需要大家最好会用python或者matlab,最好用python,因为python有很多集成好的机器学习库以及数据可视化库,大家可以直接调用,非常简单。

    附件三为贷款利率与客户流失率关系的2019年统计数据,除了用于做预测之外,大家或许可以关注一下附件三内部的变化关系。比如随着信誉评级的下降,客户流失率呈现出了怎样的规律,能否量化。相同的信誉评级下,客户流失率又是怎样根据贷款年利率发生变化的。这些东西可能会对解题有所帮助。

    (1) 对附件1中123家企业的信贷风险进行量化分析,给出该银行在年度信贷总额固定时对这些企业的信贷策略。

    分析:问题一首先要求,此题目必须是根据数据集做量化分析(也就是做数据处理,所有的东西依托的都是数据,最后的模型结果也必须得是数值型数据才行)。

    此问的条件是年度信贷总额固定,求出信贷策略。此时的题目可以理解为:根据附件1中的sheet1,2,3与附件3,去建立信贷风险模型,风险低于某一阈值说明可以进行贷款。这样就可以判断出是否可以贷款给此企业。这里提供三方面的建议:

    数据处理方面:sheet1中的评级进行量化(数据映射),是否违约映射为0,1(二分类)当作要预测的目标,计算出企业进项总金额、企业销项总金额、企业总税额、企业进项数、企业销项数(注意,如果是作废发票或者负数发票,需要做相应的处理,见前文)、下面这些是可以加入模型的,但大家可以自己想想有哪些需要加入:月均进项(销项)金额(税额、总金额、总税额)、最高月(也算是旺季)进项(销项)金额(税额、总金额、总税额)。

    模型建立方面和数据可视化方面,及后续思路,大家可以看看我的知乎签名,里面隐藏着获取方式哦!

    (2) 在问题1的基础上,对附件2中302家企业的信贷风险进行量化分析,并给出该银行在年度信贷总额为1亿元时对这些企业的信贷策略。

    (3) 企业的生产经营和经济效益可能会受到一些突发因素影响,而且突发因素往往对不同行业、不同类别的企业会有不同的影响。综合考虑附件2中各企业的信贷风险和可能的突发因素(例如:新冠病毒疫情)对各企业的影响,给出该银行在年度信贷总额为1亿元时的信贷调整策略。

    最后注意:上文的所有数据,大家应该关注到数据的预处理,有哪些数据是需要进行标准化之类的,必须要关注哦。

    解题思路和模板范文回复 论文
    在这里插入图片描述

    点击上面,然后回复论文领取本题必用工具,你懂的!!

    记得关注哦 , 考试期间持续更新ing
    记得关注哦 , 考试期间持续更新ing
    记得关注哦 , 考试期间持续更新ing
    记得关注哦 , 考试期间持续更新ing

    展开全文
  • 2020年数学建模国赛C题:中小微企业信贷决策

    万次阅读 热门讨论 2020-09-10 19:19:27
    C题 中小微企业信贷决策 在实际中,由于中小微企业规模相对较,也缺少抵押资产,因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力,向实力强、供求关系稳定的企业提供贷款,并可以对信誉高...

    2020年高教社杯全国大学生数学建模竞赛题目

    (请先阅读全国大学生数学建模竞赛论文格式规范

     

     

    C题  中小微企业的信贷决策

    在实际中,由于中小微企业规模相对较小,也缺少抵押资产,因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力,向实力强、供求关系稳定的企业提供贷款,并可以对信誉高、信贷风险小的企业给予利率优惠。银行首先根据中小微企业的实力、信誉对其信贷风险做出评估,然后依据信贷风险等因素来确定是否放贷及贷款额度、利率和期限等信贷策略。

    某银行对确定要放贷企业的贷款额度为10~100 万元;年利率为4%~15%;贷款期限为1年。附件1~3分别给出了123家有信贷记录企业的相关数据、302家无信贷记录企业的相关数据和贷款利率与客户流失率关系的2019年统计数据。该银行请你们团队根据实际和附件中的数据信息,通过建立数学模型研究对中小微企业的信贷策略,主要解决下列问题:

    (1) 对附件1中123家企业的信贷风险进行量化分析,给出该银行在年度信贷总额固定时对这些企业的信贷策略。

    (2) 在问题1的基础上,对附件2中302家企业的信贷风险进行量化分析,并给出该银行在年度信贷总额为1亿元时对这些企业的信贷策略。

    (3) 企业的生产经营和经济效益可能会受到一些突发因素影响,而且突发因素往往对不同行业、不同类别的企业会有不同的影响。综合考虑附件2中各企业的信贷风险和可能的突发因素(例如:新冠病毒疫情)对各企业的影响,给出该银行在年度信贷总额为1亿元时的信贷调整策略。

     

    附件123家有信贷记录企业的相关数据

    附件302家无信贷记录企业的相关数据

    附件银行贷款年利率与客户流失率关系的2019年统计数据

     

    附件中数据说明:

    (1) 进项发票:企业进货(购买产品)时销售方为其开具的发票。

    (2) 销项发票:企业销售产品时为购货方开具的发票。

    (3) 有效发票:为正常的交易活动开具的发票。

    (4) 作废发票:在为交易活动开具发票后,因故取消了该项交易,使发票作废。

    (5) 负数发票:在为交易活动开具发票后,企业已入账记税,之后购方因故发生退货并退款,此时,需开具的负数发票。

    (6) 信誉评级:银行内部根据企业的实际情况人工评定的,银行对信誉评级为D的企业原则上不予放贷。

    (7) 客户流失率:因为贷款利率等因素银行失去潜在客户的比率。

    展开全文
  • 2020年高教社杯全国大学生数学建模竞赛题目 C题 中小微企业信贷决策
  • 2020年数学建模国赛C题——中小微企业信贷决策(参赛获奖作品)
  • C题 中小微企业信贷决策 在实际中,由于中小微企业规模相对较,也缺少抵押资产,因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力,向实力强、供求关系稳定的企业提供贷款,并可以对信誉高...
  • 【机器学习】解决中小微企业信贷决策问题(一) 文章目录 概述 问题重述 问题分析 数据预处理说明 模型假设 未完待续! 参考 概述 中小微企业对我国国民经济发展做出巨大贡献,但由于其自身存在规模较、可以 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,067
精华内容 1,626
关键字:

中小微企业的信贷决策