2020年国赛高教杯数学建模C题中小微企业的信贷决策解题全过程文档及程序

2020年国赛高教杯数学建模

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

原题再现

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

  附件1 123家有信贷记录企业的相关数据
  附件2 302家无信贷记录企业的相关数据
  附件3 银行贷款年利率与客户流失率关系的2019年统计数据

  附件中数据说明:
  (1) 进项发票:企业进货(购买产品)时销售方为其开具的发票。
  (2) 销项发票:企业销售产品时为购货方开具的发票。
  (3) 有效发票:为正常的交易活动开具的发票。
  (4) 作废发票:在为交易活动开具发票后,因故取消了该项交易,使发票作废。
  (5) 负数发票:在为交易活动开具发票后,企业已入账记税,之后购方因故发生退货并退款,此时,需开具的负数发票。
  (6) 信誉评级:银行内部根据企业的实际情况人工评定的,银行对信誉评级为D的企业原则上不予放贷。
  (7) 客户流失率:因为贷款利率等因素银行失去潜在客户的比率。

整体求解过程概述(摘要)

  中小微企业信贷风险是商业银行投资中重大的风险。信贷风险产生的根源是借贷双方信息的不对称,建立信贷风险量化模型是提高信息对称度的重要手段。本文建立了信贷决策模型,通过朴素贝叶斯算法及多元因子分析,对各企业信贷风险进行量化,给出贷款额度、利率等信贷策略。
  针对问题一,首先对附件1中的数据进行处理,再对信誉等级、盈利额以及营运能力等指标进行量化分析,建立朴素贝叶斯分类模型。根据不同企业的信誉等级、盈利额以及营运能力,将贷款额度进行量化分配得到信贷分配策略。
  针对问题二,我们将问题一中求得的数据进行拟合,来预测附件二中无信贷记录企业的贷款额度和年利率。基于问题一的朴素贝叶斯模型,将企业的贷款额度根据盈利额的占比进行量化分配,得到信贷分配策略。
  针对问题三,对附件2中的企业依据关键词及税率进行行业划分。分别从多方面综合考虑新型冠状病毒对各个行业的影响,通过SPSS软件进行多元因子分析,结果显示,医药医疗业、互联网行业经济迅速得到增长,但其余行业受疫情影响较严重。最终,根据附件二中302家企业所归行业类别及该企业经济涨跌情况,给出合理化贷款分类策略调整。最后,引用精确率、召回率和得分数来验证模型的准确性。

模型假设:

  1. 假设该银行为一般商业银行,以获取盈利为目的;
  2. 忽略道德风险对银行信贷业务的影响;
  3. 假设发票中的税额全部按时缴纳;
  4. 假设问题一、二中企业未受到突发因素的影响;
  5. 假设不考虑费用支出等对企业盈利的影响。

问题分析:

  问题一的分析
  我们运用机器学习算法对附件1中数据进行量化分析(量化分析可以帮助我们更加直观的衡量风险和收益)。问题中,首先将企业贷款信誉等级分为6个级别,根据附表中的数据,筛选出有效发票的数据之后,计算该123家有信贷记录企业的公司的盈利额。其次,由盈利企业的盈利情况、企业贷款信誉等级和企业开票数量,使用分类算法中的朴素贝叶斯算法编程,分析得出该银行对这些企业在年度信贷总额固定时的信贷策略。
  问题二的分析
  对于问题二,运用问题一中的模型对附件2的数据进行量化分析。用附件1中的企业盈利额和企业开票数量分别与银行贷款额度、年利率作拟合曲线图,分析各个特征条件之间的相关性。因附件2中的企业无信誉等级,我们只能通过企业的盈利亏损情况和企业开票数量,用机器学习算法进行数据整合、分析和计算,来给出银行对其贷款额度的分配策略。
  问题三的分析
  本题对附件2中的企业依据关键词及税率进行行业划分。我们分别从房地产业、制造业、基础建设业、服务业、旅游业、医药医疗业、互联网业等多个行业综合考虑新型冠状病毒疫情的影响,通过SPSS软件做多元因子分析,得出,医药医疗业、互联网行业经济迅速得到增长,其他行业受疫情影响,收到严重打击。最终,根据附件二中321家企业所归行业类别及该企业经济涨跌情况,给出合理化贷款分类策略调整。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:(代码和文档not free)

#导入excel文件处理库
import openpyxl
#读入企业信贷记录相关数据
wb = openpyxl.load_workbook('附件1:123家有信贷记录企业的相关数据.xlsx')
#选择df1,企业信息
df1 = wb['企业信息']
#定义存储公司名称列表
name_list = []
#循环读入公司名称
for row in df1.iter_rows(min_row=2, max_row=124,min_col=1, max_col=1):
 for cell in row:
 #遍历读取公司名称存入列表中
 name_list.append(cell.value)
#定义存储信誉评级、是否违约列表
leavel_list = []
weiyue_list = []
#循环读入信誉评级与是否违约
for row in df1.iter_rows(min_row=2, max_row=124,min_col=3, max_col=4):
 #展示存储每一行数据
 tmp = []
 #遍历读取数据
 for cell in row:
 tmp.append(cell.value)
 #取第一项数据即为信誉评级
 leavel_list.append(tmp[0])
 #取第二项数据即为是否违约
 weiyue_list.append(tmp[-1])
#将信誉评级与是否违约合并为一个等级
cls = ['leavel_list[i]'+'weiyue_list[i]' for i in range(len(leavel_list))]
#标准的公司分类为6类
cls_normal = ['A否','B是','B否','C是','C否','D是']
#定义存储不同分类的所属公司
cls_gs = []
#遍历获取不同类别的所属公司
for item in cls_normal:
 tmp = []
 for i in range(len(cls)):
 #若分类存在标准分类中,则提取公司名称
 if item == cls[i]:
 tmp.append(name_list[i])
 #存储类别与所属的公司
 cls_gs.append([item,tmp])
 
'''
分类情况
['A否', ['E1', 'E2', 'E6', 'E7', 'E8', 'E9', 'E13', 'E15', 'E16', 'E17', 'E18', 'E19', 'E22', 'E24', 
'E26', 'E27', 'E31', 'E42', 'E48', 'E54', 'E59', 'E64', 'E81', 'E84', 'E88', 'E89', 'E91']]
['B是', ['E45']]
['B否', ['E5', 'E10', 'E12', 'E20', 'E21', 'E23', 'E28', 'E30', 'E32', 'E33', 'E34', 'E35', 'E37', 
'E38', 'E43', 'E51', 'E57', 'E58', 'E60', 'E61', 'E62', 'E63', 'E65', 'E66', 'E67', 'E70', 'E71'

'E74', 'E76', 'E79', 'E83', 'E85', 'E93', 'E95', 'E97', 'E98', 'E106']]
['C是', ['E29', 'E87']]
['C否', ['E3', 'E4', 'E11', 'E14', 'E25', 'E39', 'E40', 'E41', 'E44', 'E46', 'E47', 'E49', 'E50', 
'E53', 'E55', 'E56', 'E68', 'E69', 'E72', 'E73', 'E75', 'E77', 'E78', 'E80', 'E86', 'E90', 'E92', 
'E94', 'E96', 'E104', 'E105', 'E110']]
['D是', ['E36', 'E52', 'E82', 'E99', 'E100', 'E101', 'E102', 'E103', 'E107', 'E108', 'E109', 
'E111', 'E112', 'E113', 'E114', 'E115', 'E116', 'E117', 'E118', 'E119', 'E120', 'E121', 
'E122', 'E123']]
'''
#导入pandas库读取excel
import pandas as pd
#定义函数用于获取行标,返回被查找值的第一个行号
def find_row(num_value,file_name):
 #使用read_excel函数读取文件
 demo_df = pd.read_excel(file_name)
 #遍历索引
 for indexs in demo_df.index:
 for i in range(len(demo_df.loc[indexs].values)):
 #如果行中的值与你所查询值相等则返回该值对应的行号
 if (str(demo_df.loc[indexs].values[i]) == num_value):
 row = str(indexs+2).rstrip('L')
 return row
#提取出进项、销项的数据到单独的excel用于提取行号
filejin_name = '进项发票信息.xlsx'
filechu_name = '销项发票信息.xlsx'
#定义存储进项、销项行号的列表
jin_point = []
chu_point = []
#遍历公司名称,用于获取此公司对应的行号,用于读取价税合计信息
for item in name_list:
 print(name_list.index(item))
 #将行号追加到列表中
 jin_point.append(find_row(item,filejin_name))
 chu_point.append(find_row(item,filechu_name))
#获取附件1中sheet2 进项发票信息
sheet2 = wb['进项发票信息']
#获取附件2中sheet3 销项发票信息
sheet3 = wb['销项发票信息']
#定义函数,用于获取有效发票的税额合计
def getMoney(min_row,max_row):
 #定义存储税额合计的列表
 money = []
 #遍历读取某一个公司的税额合计
 for row in sheet2.iter_rows(min_row=min_row, max_row=max_row,min_col=7, 
max_col=8):
 tmp = []
 for cell in row:
 tmp.append(cell.value)
 #如果为有效发票,则存储此项对应的税额合计
 if tmp[1] == '有效发票':
 money.append(tmp[0])
 #返回此公司的均值
 return round(sum(money)/len(money),2)
#定义存储进项税额合计的列表
In_name = []
#遍历获取进项税额合计
for i in range(len(jin_point)):
 try:
 #存储税额合计的均值
 In_name.append(getMoney(jin_point[i],jin_point[i+1]))
 except:
 pass
 
#定义存储销项税额合计的列表
chu_mean = []
#遍历获取销项税额合计
for i in range(len(chu_point)):
 try:
 #存储税额合计的均值
 chu_mean.append(getMoney(chu_point[i],chu_point[i+1]))
 except:
 pass
print(In_name,chu_mean)
#计算盈亏情况,盈亏情况为销项平均值 - 进项平均值
profit_loss = chu_mean - In_name
print(profit_loss)
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

猜你喜欢

转载自blog.csdn.net/weixin_43292788/article/details/131531123