<>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名片即可

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信