中小微企业的信贷决策
摘 要
本文针对中小微企业的信贷决策问题,建立了基于层次分析法的信贷策略优化模型,解决了银行对 123 家企业贷款金额分配的问题。构建了 0-1 整数规划的信贷策略模型,实现了无信贷记录企业贷款金额的分配。建立了基于道格拉斯函数的信贷调整策略模型,制定了突发情况下一亿元信贷额度的分配方案。
针对问题一,建立了基于层次分析法的信贷策略优化模型,解决了银行对 123 家企业贷款金额分配的问题。首先,对数据进行筛查,保留有效发票的资金来往数据,并根据进项、销项发票信息,剔除利润率异常的企业;其次,由信誉评级、月利润公差、利润率、利润金额和销售金额构造判断矩阵,基于层次分析法得出各因素的权重系数,进而完成对各企业的综合评分,实现信贷风险量化分析。再次,运用 K 均值聚类分析法对综合评分进行聚类分析,将企业划分为十个类别;最后,以银行获利最大构建信贷策略最优化模型,最终利用遗传算法实现模型的求解。结果显示:共 60 家企业获得贷款,占 48.8%,其中,获得 100 万元贷款的企业共计 1 家,占 1.6%,贷款利率为 5.84%;获得 10 万元贷款的企业共计 28 家,占 46.7%,贷款利率为 6.56%。经计算银行的平均收益率为 4.33%。在此基础上,将企业进一步细分为二十个类别,对贷款额度进行重新分配,结果显示银行的平均收益率为 4.36%,因此,类别的细分对收益率变化影响较小,验证了信贷策略结果的可靠性。
针对问题二,构建了 0-1 整数规划的信贷策略模型,实现了无信贷记录企业贷款金额的分配。首先,运用神经网络,构建附件一中销售金额、进项金额与企业信誉评级的关系函数;其次,基于该函数得到无信贷记录企业的信誉评级;再次,利用层次分析法得到五个因素的权重系数,进而得出各企业的风险分析;最后,将贷款金额划分为十个类别并计算出企业的投资指数,以投资指数为目标函数建立 0-1 规划的信贷策略模型。结果显示:银行共对 173 家企业划拨贷款,占 57.2%。其中,获得 100 万元贷款的企业共计 25 家,占 14.45%;获得 10 万元贷款的企业共计 25 家,占获批贷款企业数的 14.45%;银行可获 435.44 万元的利息。最后,小幅度改变判断矩阵中的权重值大小,并重新对模型进行计算,计算结果表明仅有 1%企业贷款金额改变,其余企业贷款金额与原模型一致,检验了分配方案的健壮性。
针对问题三,建立了基于道格拉斯函数的信贷策略调整模型,制定了突发情况下一亿元信贷额度的分配方案。首先,依据附件二中 302 家的企业信息,将企业划分为服务业、运输业、医药类等八大类;其次,以新冠肺炎疫情冲击为例,将国家特殊时期对相关企业的政策支持纳入考虑范畴,并同时网络查阅各行业企业的商业报告数据,分析其销售额和利润走向,以此作为划分的八大类企业在今年的销售额和利润;再次,运用道格拉斯函数计算出每个企业安全的贷款金额范围;最后,建立以银行利润最大化为目标的信贷调整策略模型,并利用隐枚举法进行求解。计算结果表明:银行可获利 429.13 万元,对 6 家医疗企业分别放贷 100 万元,贷款利息为 4%;对受疫情影响较大的 E137 服务类企业放贷 30 万元,贷款利率为 5.84%。最后,利用蒙特卡罗法对模型进行重新求解,解得银行可获得 427.65 万元,变化率为 0.3%,检验了隐枚举法求解的可信性。
关键词:层次分析法;K 均值聚类分析;遗传算法;0-1 整数规划;神经网络
一、问题重述
1.1 问题背景
在实际中,由于中小微企业规模相对较小,也缺少抵押资产,因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力,向实力强、供求关系稳定的企业提供贷款,并可以对信誉高、信贷风险小的企业给予利率优惠。银行首先根据中小微企业的实力、信誉对其信贷风险做出评估,然后依据信贷风险等因素来确定是否放贷及贷款额度、利率和期限等信贷策略。
1.2 问题条件
某银行对确定要放贷企业的贷款额度为10~100万元;年利率为4%~15%;贷款期限为1年。附件 1~3 分别给出了 123 家有信贷记录企业的相关数据、302 家无信贷记录企业的相关数据和贷款利率与客户流失率关系的 2019 年统计数据。
1.3 问题内容
该银行请你们团队根据实际和附件中的数据信息,通过建立数学模型研究对中小微企业的信贷策略,主要解决下列问题:
(1)对附件 1 中 123 家企业的信贷风险进行量化分析,给出该银行在年度信贷总额固定时对这些企业的信贷策略。
(2)在问题 1 的基础上,对附件 2 中 302 家企业的信贷风险进行量化分析,并给出该银行在年度信贷总额为 1 亿元时对这些企业的信贷策略。
(3)企业的生产经营和经济效益可能会受到一些突发因素影响,而且突发因素往往对不同行业、不同类别的企业会有不同的影响。综合考虑附件 2 中各企业的信贷风险和可能的突发因素(例如:新冠病毒疫情)对各企业的影响,给出该银行在年度信贷总额为 1 亿元时的信贷调整策略。
二、问题分析
该题属于综合评价优化分析类问题,主要研究如何在复杂的社会环境中,制定科学严谨的信贷策略来解决对中小微企业的放贷问题,共分为三个问题。问题一要求在银行年度信贷总额固定时,对 123 家有信贷记录的企业的信贷风险进行量化分析后,制定合理的信贷策略来解决的放贷问题。问题二是在问题一的基础上,要求对 302 家无信贷记录企业的信贷风险进行量化分析,以一亿元年度信贷固定总额为前提,解决对这些无信贷记录企业的放贷资金分配问题。问题三是在问题一、问题二的基础上进一步拓展,要求更加周密的考虑一些突发因素对企业的生产经营效益的影响,并对上述解决问题二的策略作出调整,来更好的解决对 302 家无信贷记录的中小微企业的放贷问题,更加人性化,贴合实际情况,助力企业渡过难关。综上所述,这三个问题属于层层递进,步步深入的关系。
2.1 问题一的分析
问题一属于综合评价方面的建模类型,需要设计在信贷总额固定时,对企业的信贷策略。这一类问题有主成分分析法、层次分析法[1]、因子分析法进行解决。根据这一题条件,比较适宜选择层次分析法。首先,因作废发票的数据与结果无关,所以将剔除进项发票中的作废发票,保留有效发票的资金来往数据;其次,将根据信用评级、月利润公差、利润率、利润金额、销售金额五个因素的重要程度来构造判断矩阵,通过层次分析法计算出符合一致性检验的各元素权重;再次,依据附件 1 的数据计算出五个因素的值并结合生活实际,制定标准,将利润率明显不合理的企业剔除。具体标准为:筛选出利润率大于 50 倍的企业,该部分中,信誉评级为 C 和 D 的一律剔除;对于利润率大于 50 倍,小于 100 倍的企业,保留信誉评级为 A 和 B 的;对于利润率大于 100 倍的企业,只保留信誉评级为 A 的。接着,对所有数据进行标准化处理并结合各个因素所占的权重对各个企业进行评分,运用K均值聚类分析法对综合评分进行 K 均值聚类分析[2],将企业划分为十个类别;最后,以银行利益最大化为目标完成各企业贷款资金分配的设计。最后,运用遗传算法[3],以银行利益最大化为目标来完成各企业贷款资金分配的设计。根据这个模型可制定出银行对有借贷记录企业的借贷方案,并实现利益最大化。为验证策略的合理性,不妨再次使用K均值聚类分析法进行检验。
2.2 问题二的分析
问题二在问题一的基础上要求对 302 家无信贷记录的企业进行量化分析并完成贷款资金的分配。其难点有两处:第一处,302 家企业无信贷记录,无法知道这些企业的信誉评级,不能对信贷风险进行量化分析;第二处,问题一没有给出具体的银行年度贷款的总额,而问题二给出的银行年度贷款总额为一亿元,这就需要银行更好的把控企业的贷款额度。首先,将运用 K 近邻算法[4],构建了附件一中的销售金额、进项金额与企业信誉评级的函数;其次,将根据信用评级、月利润公差、利润率、利润金额、销售金额五个因素的重要程度来构造判断矩阵,通过层次分析法计算出符合一致性检验的各因素权重。再次,依据附件 1 的数据计算出五个因素的值并结合生活实际,制定标准,将利润率明显不合理的企业剔除。具体标准为筛选出利润率大于1000倍的企业,该类企业一律剔除;对于利润率大于100倍,小于1000 倍的企业,保留信誉评级为A和B的。接着,对所有数据进行标准化处理并结合各个因素所占的权重对各个企业进行综合评分。最后,将企业划分为 10 个类别并计算出投资指数,投资指数=利润×综合评分,以投资指数最大为目标函数,以使得目标函数最大为优化,再利用 0-1 规划[5]得到贷款金额分配方案。最后,重新评估五个因素的重要程度,调整判断矩阵,从而改变权重系数,对标准化数据和投资策略进行检验。
2.3 问题三的分析
问题三是在问题二模型制定的信贷策略的基础上,将考虑一些突发因素可能会对不同行业、不同类别的企业的生产经营产生影响,为此合理的调整信贷策略必不可少。首先,将 302 家无信贷记录企业划分为个体经营、建筑业、制造业、服务业、运输业、科技类、贸易类、医药类八类;为更好的抗击新冠肺炎,将依据国家相关政策对医药类企业给予最大的贷款利率优惠和最大的贷款额度,即给予医疗类企业 100 万元贷款额度和 4%的贷款利率;其次,将查阅企业的财务报表,在每一个类别种选取一批具有代表性的企业,计算出其销售额和利润走向,据此预测各企业在今年的销售额和利润。考虑到疫情期间出现了较为明显的通货膨胀,此处将通过查阅中国人民银行公布的疫情期间的通货膨胀率并将其计算在内,以保证贷款策略的合理性;再次,运用道格拉斯函数[6]计算出每个企业贷款最大金额,可运用 0-1 规划,对剩余的 296 家企业以银行利润最大化为目标放贷。计算可得出银行收益及方案。最后,利用蒙特卡罗法对模型进行重新求解,检验隐枚举法求解可信。
三、模型假设
1.假设企业不存在偷税、漏税情况;
2.假设所有企业的资金需求都高于一百万元人民币;
3.假设表格中所有数据真实可信;
4.假设所有企业在一年贷款期内稳健经营;
5.未来经济形势与近几年相近;
四、符号说明
𝐶𝑟:表示企业信誉度;
𝑃𝑟:表示企业利润率;
𝑆𝑡:表示月利润标准差;
𝑦𝑝:表示企业年利润;
𝐶𝑠:表示企业年销售额;
𝐶:表示进项金额;
𝐿𝑟:表示贷款利率;
𝐿:表示贷款金额;
𝐷𝑟:表示客户流失率;
W:表示标准化处理后的数据;
𝐺:表示企业的综合评分;
𝐿𝑚𝑎𝑥:表示企业接受的最大贷款额度;
𝑃:表示该企业员工人数;
五、模型的建立与求解
5.1 问题一的模型建立与求解
首先,对数据进行清洗,保留有效发票的资金来往数据,并根据进项、销项发票信息,剔除利润率明显不合理的企业;其次,依据发票中的数据,计算出信誉评级、月利润公差、利润率、利润金额、销售金额五个因素的值;其次,根据上述五个因素的重要程度,构造判断矩阵,通过层次分析法得出符合一致性检验的各因素权重系数,进而得到各企业的综合评分。再次,运用 K 均值聚类分析法对综合评分进行聚类分析,将企业划分为十个类别;最后,运用遗传算法,以银行利益最大化为目标完成各企业资金分配的设计。结果显示:信誉评级为 A 的企业贷款利率为 5.84%,信誉评级为 B 的企业贷款利率为 6.56%,信誉评级为 C 的企业贷款利率为 4.74%。运用 K 均值聚类分析法对综合评分进行聚类分析,将企业更加细化地划分为二十个类别,进行资金分配设计来检验。
5.1.1 模型的建立
5.1.1.1 问题一第一小问的模型建立
1.层次分析的一般方法
层次分析法解决问题的基本思想与人们对一个多层次、多因素、复杂的决策问题的思维过程基本一致,最突出的特点就是分层比较,综合优化。其解决问题的基本步骤如下:
(1)分析系统中各因素之间的关系,建立系统的递阶层次结构,一般层次结构分为三层,第一层为目标层,第二层为准则层,第三层为方案层;
(2)构造两两比较矩阵(判断矩阵),对于同一层次的各因素关于上一层中某一准则(目标)的重要性进行两两比较,构造出两两比较的判断矩阵;
(3)由于比较矩阵计算被比较因素对每一准则的相对权重,并进行判断矩阵的一致性检验;
(4)计算方案层对目标层的组合权重和组合一致性检验,并进行排序。
2.层次结构图
利用层次分析法研究问题时,首先要把各种与问题有关的各种因素层次化,然后构造出一个树状结构的层次结构模型,称为层次结构图。一般问题的层次结构图分为三层:
(1)最高层为目标层(O):问题决策的目标或理想结果,只有一个元素。
(2)中间层为准则层(C):包括为实现目标所涉及的中间环节各因素,每一因素为一准则,当准则多于 9 个时可分为若干个子层。
(3)最低层为方案层(P):方案层是为实现目标而选择的各种措施,即为决策方案。
一般来说,各层次之间的各因素,有的相关联,有的不一定相关联;各层次的因素个数也未必一定相同。实际中,主要是根据问题的性质和各相关因素的类别来确定。
3.比较矩阵的构造
构造比较矩阵主要是通过比较同一层次上的各因素对上一层相关因素的影响作用,而不是把所有因素放在一起比较,即将同一层的各因素进行两两相比。同时,
要尽量依据实际问题的具体情况,减少由于决策人主观因素对结果造成的影响。
设要比较𝑛个因素𝑐1, 𝑐2, ⋯ , 𝑐𝑛对上一层(如目标层)𝑂的影响,即要确定它在𝑂中所占的比重。
对任意两个因素𝑐𝑖和𝑐𝑗 ,用𝑎𝑖𝑗表示𝑐𝑖和𝑐𝑗对𝑂的影响程度之比,按1~9的比例标度来度量𝑎𝑖𝑗(𝑖, 𝑗 = 1,2, ⋯ , 𝑛).于是,可得到两两成对比较矩阵𝐴 = (𝑎𝑖𝑗)𝑛×𝑛,又称为判断矩阵,显然
因此,又称判断矩阵为正反互联矩阵。
比例标度的确定:𝑎𝑖𝑗1~9的9个等级,而, 𝑎𝑗𝑖取𝑎𝑖𝑖的倒数(如表 5-1)。
表 5-1 比例标度值
标度 | 含义 |
1 | 𝑐𝑖与𝑐𝑗的影响相同 |
3 | 𝑐𝑖比𝑐𝑗的影响稍强 |
5 | 𝑐𝑖比𝑐𝑗的影响强 |
7 | 𝑐𝑖比𝑐𝑗的影响明显地强 |
9 | 𝑐𝑖比𝑐𝑗的影响绝对地强 |
2,4,6,8 | 𝑐𝑖与𝑐𝑗的影响之比在上述两个相邻等级之间 |
1/2,…,1/9 | 𝑐𝑖与𝑐𝑗的影响之比为𝑎𝑖𝑗上面的倒数 |
由正互反矩阵的性质可知,只要确定𝐴的上(或下)三角的
个元素即可。
在特殊情况下,如果判断矩阵𝐴的元素具有传递性,即满足:
𝑎𝑖𝑘𝑎𝑘𝑗 = 𝑎𝑖𝑗(𝑖, 𝑗, 𝑘 = 1,2, … , 𝑛) 则称𝐴为一致性矩阵,简称一致阵。在实际中,层次分析法应用的效果如何,比较矩阵的合理性起着决定性作用。因此,对于应用中比较矩阵的确定要尽量减少其主观性,增加其客观性。任意两个元素的比较结果都应该给出详实的说明,或经过专家咨询和论证来确定。
4.相对权重向量的确定
通常确定相对权重的方法都是近似的,常用的有合法求根法和特征根法等。
(1)和法:
取判断矩阵
个列向量归一化后的算术平均值,近似作为权重,即:
类似地,也可以对按行求和所得向量作归一化,得到相应权重向量。
(2)求根法(几何平均法):
将判断矩阵
的各列(或行)向量求几何平均后归一化,可以近似作为权重,即:
(3)特征根法:
设想把一块大石头
分成
个小块
,其重量分别为
,则将
块小石头两两比较,记
的相对质量为
,于是可得到比较矩阵:
显然,
为一致性正互反矩阵,记
,即为权重向量。且:
则:
这表明
为矩阵
的特征向量,且
为特征根。
对于一般的判断矩阵
有
,
(
为 A 的最大特征根,W 为
对应的特征向量。
将
作归一化后可近似地作为
的权重向量,这种方法称为特征根法(这是一种最常用的方法)。
由线性代数的知识,如果
为一致的正互反矩阵,则有下列性质:
-
,即
的每一行(或列)均为任一指定行(或列)的整数倍; -
的最大特征根为
,其余的特征根均为 0;
(3)若
的最大特征根
对应的特征向量为:
则:
由此可得定理:n阶正互反矩阵𝐴 = (𝑎𝑖𝑗)𝑛×𝑛是一致性的充要条件𝜆𝑚𝑎𝑥 = 𝑛
5.一致性检验
通常情况下,由实际得到的判断矩阵不一定是一致的,即不一定满足传递性。实际中,也不必要求一致性绝对成立,但要求大体上是一致的,即不一致的程度应在容许的范围内。主要考察以下指标;
(1)一致性指标:
(2)随机一致性指标:𝑅𝐼,通常由实际经验给定,如表 5-2 所示:表 5-2 随机一致性指标
1 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
1 |
0 |
|
1 |
1 |
|
1 |
2 |
|
R |
I |
|
0 |
|
0 |
|
0 |
.58 |
|
0 |
.90 |
|
1 |
.12 |
|
1 |
.24 |
|
1 |
.32 |
|
1 |
.41 |
|
1 |
.45 |
|
1 |
.49 |
|
1 |
.51 |
|
1 |
.54 |
|
(3)一致性比率指标:
当𝐶𝑅 < 0.10时,认为判断矩阵的一致性是可以接受的,则𝜆𝑚𝑎𝑥对应的特征向量可以作为排序的权重向量。此时:
其中,(𝐴𝑊)𝑖表示𝐴𝑊的第𝑖个分量。
6.数据清洗
数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。
7.数据标准化
数据标准化是企业或组织对数据的定义、组织、监督和保护进行标准化的过程。数据标准化分为开发(D)、候选(C)、批准(A)、驳回(R)、归档(X)几个过程。
数据标准化的分类有Min − max 标准化和z − score 标准化。
z − score标准化:这种方法基于原始数据的均值和标准差进行数据的标准化。将 A 的原始值x使用z − score标准化到𝑥′。z − score标准化方法适用于属性 A 的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
步骤如下:
(1)求出各变量(指标)的算术平均值(数学期望)𝑥𝑖和标准差𝑠𝑖;
(2)进行标准化处理:
其中:𝑧𝑖𝑗为标准化后的变量值;𝑥𝑖𝑗为实际变量值。
(3)将逆指标前的正负号对调:
标准化后的变量值围绕 0 上下波动,大于 0 说明高于平均水平,小于 0 说明低于平均水平。
5.1.1.2 问题一第二小问的模型建立
1.𝐊均值聚类分析
K 均值聚类分析[7]是一种迭代求解的聚类分析算法,其步骤是,预将数据分为 K 组,则随机选取 K 个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
如果用数据表达式表示,假设簇划分为(𝐶1,𝐶2 ⋯ ⋯ 𝐶3),则我们的目标是最小化平方误差𝐸:
𝑘
2
𝐸 = ∑ ∑||𝑥 − 𝜇𝑖||2
其中𝜇𝑖是簇𝐶𝑖的均值向量,有时也(𝑖=1)称为(𝑥𝜖𝐶𝑖)质心,表达式为:
如果我们想直接求上式的最小值并不容易,这是一个 NP 难的问题,因此只能采用启发式的迭代方法。
2.傅立叶变换拟合
离散傅立叶拟合法是基于离散傅立叶变换的谐波分析法,可对呈周期性波动
NDVI 时间序列的波动特征进行分析,并可对高噪声的 NDVI 时间序列数据进行降噪。
非对称高斯函数拟合法是使用分段高斯函数(曲线)组合来模拟植被季相生长(物候)规津,一个组合代表一次植被盛衰过程,最后通过平滑连接各高斯拟合曲线,实现时间序列重建。具体过程包括:区间提取(在时间维选择一最大值或最小值区间作为局部拟合区间)、局部拟合(使用高斯拟合函数对局部区间数据进行拟合)、整体连接(将局部拟合结果合并)。
3.遗传算法
遗传算法[8]为一种基于自然选择原理和自然遗传机制的搜索算法,它是模拟自然界中的生命进化机制,在人工系统中实现特定目标的优化。遗传算法的实质是通过群体搜索技术,根据适者生存的原则逐代进化,最终得到最优解或准最优解。它必须做以下操作:初始群体的产生、求每一个体的适应度、根据适者生存的原则选择优良个体、被选出的优良个体两两配对,通过随机交叉其染色体的基因并随机变异某些染色体的基因生成下一代群体,按照此方法使群体逐代进化,直到满足进化终止条件。其实现方法如下:
(1)根据信贷策略问题确定可行解域,确定一种编码,能用数值串或字符串表示可行解域每一解。
(2)对每一解应有一个度量好坏的依据,它用一种函数表示,叫做适应度函数,一般由目标函数构成。
(3)确定进化参数群体规模、交叉概率、变异概率、进化终止条件。为方便计算,应设定进化在某一代结束,或找出近似最优解。
表 5-3 生物遗传概念在算法中的对应关系
生物遗传概念 | 遗传算法中的作用 |
适者生存 | 算法停止时,最优目标值的可行解有最大的可能性被留住 |
个体 | 可行解 |
染色体 | 可行解的编码 |
基因 | 可行解中每一分量的特征 |
适应性 | 适应度函数值 |
种群 | 根据适应度函数值选取的一组可行解 |
交配 | 通过交配原则产生一组新可行解的过程 |
变异 | 编码的某一分量发生变化的过程 |
5.1.2 模型的求解
5.1.2.1 问题一第一小问的模型求解
1.递阶层次结构的建立
第一层为目标层,最高层为目标层
:负责投资决策;第二层为准则层,
表示企业信誉度标准化值,
表示企业利润率标准化值,
表示月利润标准差标准化值,
表示企业的年利润标准化值,
表示企业年销售额标准化值,
表示标准化处理后的标准化值。第三层为方案层,
、
,是银行对各企业的具体信贷策略。
2.第一层两两比较判断矩阵并做一致性检验的构造
(1)两两比较判断矩阵:
。
个元素
,
,
,两两比较其重要性共要比较
次。第
个元素
与第
个元素
重要性之比为
。根据两两比较通过转嫁打分的方法得到如下结果,即为投资决策的判断矩阵
:
得出权重如表 5-4 所示:
表 5-4 各因素权重表
类别 | 权重 |
信誉评级 | 0.49 |
利润率 | 0.27 |
利润金额 | 0.13 |
销售金额 | 0.06 |
月利润公差 | 0.04 |
由表 5-4 得,信誉评级所占权重最高,利润率所占权重为较高,销售金额所占权重较低,月利润公差所占权重最低。
(2)一致性检验:
一致性指标:
随机一致性指标:𝑅𝐼;通常由实际经验给定,如表 5-5 表 5-5 随机一致性指标
𝑛 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
1 |
0 |
|
1 |
1 |
|
1 |
2 |
|
R |
I |
|
0 |
|
0 |
|
0 |
.58 |
|
0 |
.90 |
|
1 |
.12 |
|
1 |
.24 |
|
1 |
.32 |
|
1 |
.41 |
|
1 |
.45 |
|
1 |
.49 |
|
1 |
.51 |
|
1 |
.54 |
|
一致性比率指标:
当𝐶𝑅 < 0.10时,认为判断矩阵的一致性是可以接受的,因此,此矩阵具有一致性。
3.数据的标准化处理:公式:
得到标准化处理后的结果:
𝑊 = 𝐶𝑟 × 0.49 + 𝑃𝑟 × 0.27 + 𝑦𝑝 × 0.13 + 𝐶𝑠 × 0.06 − 𝑆𝑡 × 0.03
其中,𝐶𝑟表示企业信誉度标准化值,𝑃𝑟表示企业利润率标准化值,𝑆𝑡表示月利润标准差标准化值,𝑦𝑝表示企业的年利润标准化值,𝐶𝑠表示企业年销售额标准化值,
W表示标准化处理后的数据标准化值。如表 5-6 所示:
表 5-6 标准化处理数据(部分)
公司代号 | 信誉 | 利润率 | 利润额 | 销售额 | 标准差 |
E64 | 1.28 | -0.26 | 9.79 | 0.01 | -0.22 |
E15 | 1.28 | 0.21 | 2.07 | 0.73 | 0.17 |
E16 | 1.28 | 0.20 | 0.45 | 0.70 | 0.16 |
E48 | 1.28 | -0.15 | -0.19 | 0.16 | -0.10 |
E20 | 0.34 | -0.05 | -0.12 | 0.56 | 0.15 |
E67 | 0.34 | -0.22 | -0.22 | -0.08 | -0.22 |
E35 | 0.34 | -0.21 | 0.94 | 0.13 | -0.16 |
E9 | 1.28 | 0.02 | -0.04 | 1.08 | 0.42 |
E8 | 1.28 | 0.18 | -0.19 | 0.68 | 0.49 |
E6 | 1.28 | 0.47 | -0.20 | 0.33 | 0.65 |
由表 5-6 可知:64 号企业的综合评分最高,15 号企业评分较高,6 号企业的综合评分最低;可以依据此评分做进一步研究,制定出合理的信贷资金分配方案。
4.量化分析的结果
表 5-7 量化分析结果(部分) | ||||||||||||||||||||
公司代号信誉评级 | E64 A | E15 E16 E48 E20 E67 E35 A A A B B B |
|
|
| |||||||||||||||
综合评分 | 3.27 | 1.28 0.84 0.60 0.22 0.09 | 0.78 | 0.69 | 0.64 |
|
0.43 |
|
根据标准化处理得到的数据,对企业信贷风险进行量化分析,部分结果如下:由表 5-7,可知 E64 企业综合评分最高,为 3.27;E15 企业综合评分较高,为
1.28;E6 企业的综合评分最低,为 0.64。
5.1.2.2 问题一第二小问的模型求解
1.通过 K 均值聚类分析将企业分为十类,以拾万元为一类。
如果用数据表达式表示,假设簇划分为(𝐶1,𝐶2 ⋯ ⋯ 𝐶3),则我们的目标是最小化平方误差𝐸:
其中𝜇𝑖是簇𝐶𝑖的均值向量,有时也称为质心,表达式为:
如果我们想直接求上式的最小值并不容易,这是一个 NP 难的问题,因此只能采
用启发式的迭代方法。
2.利用傅立叶变换对流失率进行拟合:
𝐷𝑟𝐴 = −992300 + 992300𝑐𝑜𝑠(0.01241𝑥) + 1772𝑠𝑖𝑛(0.01241𝑥) − 0.7574 𝐷𝑟𝐵 = −1725000 + 1725000𝑐𝑜𝑠(−0.008875𝑥) − 2277𝑠𝑖𝑛(−0.008875𝑥) − 0.6996 𝐷𝑟𝐶 = −30330 + 30330𝑐𝑜𝑠(0.06494𝑥) + 301.4𝑠𝑖𝑛(0.06494𝑥) − 0.6806
图 5-1 拟合度曲线图
利用傅立叶变换对流失率进行拟合,如图 5-1 所示,随着放贷利率的增加流失
率也随之增加,但在放贷利率接近最大值处增幅趋于平缓。拟合的准确率为 95%,体现了利用傅立叶变换进行拟合的准确性。
对于信誉评级为 A 类的企业目标函数:
对于信誉评级为 B 类的企业目标函数:
对于信誉评级为 C 类的企业目标函数:
适应度函数:
1
15 − 目标函数
遗传算法的参数设定如下:
(1)初始种群大小:100
(2)区间:(0.04,0.14)
(3)二进制编码长度:10
(4)迭代次数:30000
(5)杂交率:0.7
(6)选择率:0.5
(7)变异率:0.001
图 5-2 初始种群图
如图 5-2 所示,随着放贷利率的增加,目标函数先增大后减小,即银行的利润先增大后减小。
图 5-3 终止种群图
如图 5-3 随着放贷利率的增加,适应函数的值先增大后减小,当放贷利率最大时适应函数的值约为最大值的一半。
其中,𝐿𝑟表示贷款利率,𝐷𝑟𝐴表示信誉评级为 A 的企业的流失率,𝐷𝑟𝐵表示信誉评级为 B 的企业的流失率, 𝐷𝑟𝐶表示信誉评级为 C 的企业的流失率。
计算结果为:银行共对60家企业进行借贷,放贷金额100万元的企业为一家,占比为1.6%,利率为5.84%;放贷金额10万元的企业为28家,占比为46.7%,利率为6.56%;银行总收益率为4.33%。部分企业放贷金额表如表 5-7 所示:表 5-8 放贷策略(部分)
公司代号 | E64 | E15 | E16 | E48 | E20 | E67 | E35 | E9 | E8 | E6 |
信誉评级 | A | A | A | A | B | B | B | A | A | A |
类别 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
放贷金额 | 100 | 90 | 80 | 40 | 20 | 10 | 30 | 70 | 60 | 50 |
由表 5-8,可知,1 类企业放贷金额最多,为 100 万元;2 类企业放贷金额较多,为 90 万元;6 类企业放贷金额最少,额为 10 万元。
5.1.3 模型的检验与分析
1.运用𝐊均值聚类分析法对模型进行检验,对综合评分进行聚类分析。
将企业更加细化地划分为二十个类别,重新进行资金分配设计。与将企业划分为十个类别得出的放贷策略进行对比检验,发现结果有很好的一致性。
表 5-9 放贷策略的检验(部分)
公司代号 | E64 | E15 | E16 | E48 | E20 | E67 | E35 | E9 | E8 | E6 |
信誉评级 | A | A | A | A | B | B | B | A | A | A |
类别 | 1 | 2 | 7 | 10 | 12 | 14 | 15 | 17 | 19 | 20 |
放贷金额 | 100 | 95 | 70 | 55 | 45 | 35 | 30 | 20 | 15 | 10 |
将表 5-9 与表 5-8 中的数据作比较,发现放贷策略结果具有较好的一致性。从而验证了此模型的合理性。
2.对贷款策略进行检验
将企业更加细化地划分为二十个类别,再运用遗传算法计算出企业的贷款利率,以此得出放贷策略与将企业划分为十个类别得出的放贷策略进行对比检验。计算结果为:信誉评级为A的企业贷款利率为 5.84%,信誉评级为B的企业贷款利率为 6.56%,信誉评级为C的企业贷款利率为4.74%。重新进行资金分配设计后,发现新方案使银行的总收益率为 4.36%。总收益增加并不明显。因此,问题一模型成立。
5.1.4 小结
运用了层次分析法、遗传算法、K均值聚类分析法,构建了基于层次分析法的综合评价模型,设计了有信贷记录企业贷款金额的分配方案。结果显示:银行共对 60 家企业进行放贷,占总企业数的 48.8%。其中,得到 100 万元的最大放贷金额的企业数量共计 1 家,占比为 1.6%,贷款利率为 5.84%;得到 10 万元的最小放贷金额的企业数量共计 28 家,占比为 46.7%,贷款利率为6.56%;银行的平均收益率为 4.33%。在此基础上,将企业进一步细分为二十个类别,进行资金的重新分配,结果显示银行的平均收益率为4.36%,变化幅度较小,验证了信贷策略结果的可信性。
5.2 问题二的模型建立与求解
基于 0-1 整数规划,构建信贷策略模型,完成对无信贷记录的企业贷款金额分配方案的制定问题。运用 K 近邻算法,利用层次分析法、0-1 规划得到贷款金额分配方案。结果显示:银行共对 190 家企业进行借贷,占总企业数的 62.9%。其中,得到 100 万元最大放贷金额的企业共计 25 家,占比为 13.16%;得到 10 万元的最小放贷金额的企业为 25 家,占比为 13.16%;银行年总收益为 435.44 万元。最后,通过调整判断矩阵来改变权重,对标准化数据和投资策略进行检验。
5.2.1 模型的建立
5.2.1.1 问题二第一、二小问的模型建立
1.K 近邻算法
K 最近邻分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:在特征空间中,若一个样本附近的 K 个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。
K 近邻算法使用的模型实际上对应于对特征空间的划分。K 值的选择,距离度量和分类决策规则是该算法的三个基本要素:
(1) K 值的选择会对算法的结果产生重大影响。K 值较小意味着只有与输入实例较近的训练实例才会对预测结果起作用,但容易发生过拟合;如果 K 值较大,优点是可以减少学习的估计误差,但缺点是学习的近似误差增大,这时与输入实例较远的训练实例也会对预测起作用,使预测发生错误。在实际应用中,K 值一般选择一个较小的数值,通常采用交叉验证的方法来选择最优的 K 值。随着训练实例数目趋向于无穷和 K=1 时,误差率不会超过贝叶斯误差率的 2 倍,如果 K 也趋向于无穷,则误差率趋向于贝叶斯误差率。
(2)该算法中的分类决策规则往往是多数表决,即由输入实例的 K 个最临近的训练实例中的多数类决定输入实例的类别
(3)距离度量一般采用
距离,当 p=2 时,即为欧氏距离,在度量之前,应该将每个属性的值规范化,这样有助于防止具有较大初始值域的属性比具有较小初始值域的属性的权重过大。
2.0-1 整数规划
如果整数线性规划问题的所有决策变量
仅限于取 0 或 1 两个数值,则称此问题为 0-1 线性整数规划[9],简称 0-1 规划。变量
称为 0-1 变量,或二进制变量,其变量取值的约束可变为
或 1 等价于
和
且为整数。于是 0-1 规划的一般模型为
3.隐枚举法原理:
隐枚举法从所有变量集等于零出发,然后,依次指定一些变量取值为 1,直到获得一个使目标函数下降(或上升)的可行解。于是可认为这个可行解是迄今为止最好的可行解。如此试探地选择变量,用这种方法依次检查变量集等于
或
的各种组合,并对可行解加以改进,直到获得最优解。由于许多不可能得到较好可行解的变量组合并没有被检查,因而称为隐枚举法。隐枚举法较显枚举法的好处是运算次数大大减少。
步骤:第
步,化成 0-1 规划的标准形式。
(1)目标函数化为求极小,约束条件均化为
形式.这只要对需要变换的约束式或目标函数乘以-1 即可。
(2)若目标函数中变量的系数是负值,则通过,使系数化为正值。
(3)目标函数中,按变量系数从小到大排列,约束条件中的各项也按目标函数中变量的顺序排列,不妨设重新排列后变量的顺序为
,
,
.
这就把原始问题化成了线性规划的标准形式。
第 2 步(分枝定界),首先令所有的变量均取值为 0,求出目标函数值,并检查变量的取值是否满足约束条件,将此问题分成两个子问题:一个分枝为,一个分枝为,其余变量仍然取
,求出目标函数值,并检查变量的取值是否满足约束条件,按照下面原则决定是否继续分枝:
(1)当分枝的子问题为可行解时,则该分枝即停止继续分枝,并保留所有可行解中目标值最小的分枝,将可行解中边界值(分支的最后一个目标函数)大的分枝去掉。
(2)不管是否为可行解,只要该分枝的边界值大于保留下来的可行解的边界值时,则该分枝停止分枝。
当分枝中某些变量的值已确定,而其他变量无论取什么值,都至少有一个约束条件不被满足时,则该分枝即停止分枝,否则继续分枝,直到除了保留的分枝外,其余分枝已全去掉,这时保留下来的可行解值即为所求问题的最优解。
隐枚举法从所有变量集等于零出发,然后,依次指定一些变量取值为
,直到获得一个使目标函数下降(或上升)的可行解。于是可认为这个可行解是迄今为止最好的可行解。如此试探地选择变量,用这种方法依次检查变量集等于0或1的各种组合,并对可行解加以改进,直到获得最优解。隐枚举法较显枚举法的优点是运算次数大大减少。
5.2.2 模型的求解
5.2.2.1 问题二第一、二小问的模型求解
1.K 近邻算法的求解
将问题一中给出的有信贷记录的企业的销项额度,进项额度以及所得的评定信用级别输入 K 近邻算法[10],通过机器学习进行训练得到训练结果。再将问题二中的无信贷数据企业的销项额度和进项额度输入进训练结果中,得到企业的信用评级结果:运用 K 近邻算法,构建附件一中的销售金额、进项金额与企业信誉评级的函数;利用该函数及无信贷记录企业的销售金额、进项金额得到无信贷记录的企业的信誉评级;得出企业的信用评级结果:E68 企业的信誉评级为 A,E156、E203 等企业的信誉评级为 B,E69、E121 等企业的信誉评级为 C。
2.数据的标准化处理
将数据根据模型一的公式进行标准化处理,得出数据在如下表格:
表 5-10 标准化数据
企业编号 | 信誉 | 销售额 | 年利润 | 利润率 | 标准差 | 综合评分 |
E19 | 1.67 | 4.64 | 9.23 | 5.04 | 6.84 | 3.34 |
E13 | 0.39 | 0.15 | 0.85 | 7.57 | 0.51 | 2.33 |
E14 | 0.39 | -0.46 | -0.29 | 6.61 | -0.54 | 1.93 |
E33 | 0.39 | 0.43 | 1.34 | 0.71 | 0.75 | 0.56 |
E123 | 0.39 | 0.63 | 1.00 | -0.23 | 1.30 | 0.24 |
E26 | 0.39 | 0.62 | 1.73 | 1.83 | 1.76 | 0.88 |
E18 | 0.39 | -0.41 | -1.58 | -0.29 | -0.15 | -0.11 |
E24 | 1.67 | -0.25 | 0.10 | 2.74 | -0.02 | 1.56 |
E20 | 0.39 | 0.64 | 1.77 | 3.65 | 1.49 | 1.38 |
E274 | 1.67 | 9.89 | -1.44 | -0.27 | 3.75 | 1.00 |
由表 5-10,可知:19 号企业的综合评分最高,13 号企业评分较高,18 号企业的综合评分最低;可以依据此评分做进一步研究,制定出合理的信贷资金分配方案。
3.量化分析的结果
|
2. |
33 |
|
8 |
|
- |
0.11 |
|
表 5-11 量化分析结果(部分)公司代号 E19 E13 E14 E33 E123 E26 E18 E24 E20 E274 信誉评分 1.67 0.39 0.39 0.39 0.39 0.39 0.39 0.39 0.39 0.39 综合评分 3.34 1.93 0.56 0.24 0.8 1.56 1.38 1.00
由表 5-11,可知:E19 企业综合评分最高,为 3.34;E13 企业综合评分较高,为
2.33;E18 企业的综合评分最低,为-0.11。
3.目标函数与约束条件的解释
(1)目标函数:
将对企业的投资额,房贷利率,企业流失率及量化分析的乘机定义为投资指数,以投资指数最大化为目标函数建立 0-1 整数规划模型。
代表投资
十万元,
代表房贷利率,
代表企业流失率,
代表是否对第
个企业投资
十万元。得到目标函数:
(2)约束条件:
对企业的投资额度为 1 亿,约束条件为:
为了确保投资的多样性,投资的企业应大于 150 家,每等级投资的公司在 15 到 25 家之间,约束条件为:
将上述约束条件连列为:
个企业投资
十万元
对第
个企业投资
十万元
{
得出企业放贷金额部分结果,如表 5-8 所示:
表 5-12 企业放贷金额表(部分)
公司代号 | E121 | E93 | E88 | E68 | E156 | E203 | E59 | E69 | E96 | E19 |
信誉评级 | C | B | B | A | B | B | B | C | C | B |
放贷金额 | 100 | 90 | 80 | 70 | 60 | 50 | 40 | 30 | 20 | 10 |
由表 5-12 可知,E121 企业放贷金额最大,为 100 万元;E93 企业放贷金额较大,为 90 万元;E19 企业放贷金额最小,为 10 万元。
5.2.3 模型的检验与分析
1.标准化数据的检验
该问题的检验可以通过改变判断矩阵从而改变权重系数,在将数据标准化后发现,标准化数据没有改变,从而验证了模型的合理性。
此处通过讨论并结合中国人民银行公开的数据,发现在实际情况中利润率相对于利润金额的重要程度可以加大,于是对判断矩阵做出如下调整:
原来的判断矩阵: 改动后的判断矩阵:
原来的权重:信用评级 0.49,利润率 0.27,利润金额 0.14,销售金额 0.06,月利润标准差 0.04;改动后的权重:信用评级 0.51,利润率 0.26,利润金额 0.13,销售金额 0.06,月利润标准差 0.04。
表 5-13 标准化数据检验(部分)
企业编号 | 信誉 | 销售额 | 年利润 | 利润率 | 标准差 | 综合评分 |
E19 | 1.67 | 4.64 | 9.23 | 5.04 | 6.84 | 3.34 |
E13 | 0.39 | 0.15 | 0.85 | 7.57 | 0.51 | 2.26 |
E14 | 0.39 | -0.46 | -0.29 | 6.61 | -0.54 | 1.87 |
E33 | 0.39 | 0.42 | 1.344 | 0.71 | 0.75 | 0.55 |
E123 | 0.39 | 0.63 | 1.00 | -0.23 | 1.30 | 0.25 |
E26 | 0.39 | 0.62 | 1.73 | 1.83 | 1.76 | 0.86 |
E18 | 0.39 | 0.07 | 0.70 | 5.31 | 1.41 | 1.62 |
E24 | 1.67 | -0.25 | 0.10 | 2.74 | -0.02 | 1.56 |
E20 | 0.39 | 0.64 | 1.77 | 3.65 | 1.49 | 1.35 |
E274 | 1.67 | 9.89 | -1.44 | -0.27 | 3.75 | 1.09 |
将表 5-13 与表 5-11 中的数据作对比,发现标准化后的数据趋于一致,较好的检验了模型的合理性。
2.投资策略的检验
该检验方法仍然建立在权重改变的基础上,通过遗传算法得到贷款资金的分配策略。将此分配策略与原策略对比发现资金的分配策略基本相同,验证了模型的合理性。
表 5-14 投资策略的检验(部分)
公司代号 | E121 | E207 | E88 | E91 | E24 | E62 | E59 | E46 | E177 | E19 |
信誉评级 | B | B | B | B | C | B | B | B | B | A |
类别 | 5 | 5 | 5 | 5 | 8 | 5 | 5 | 5 | 5 | 1 |
放贷金额 | 100 | 90 | 80 | 70 | 60 | 50 | 40 | 30 | 20 | 10 |
将表 5-14 与表 5-12 中的数据作对比后发现,投资策略比较相似,验证了投资策略的可靠性。
5.2.4 小结
运用了 K 近邻算法、0-1 整数规划构建了信贷策略模型,完成了对无信贷记录的企业贷款金额分配方案的制定问题。结果显示:银行共对 190 家企业进行借贷,占总企业数的 62.9%。其中,得到 100 万元最大放贷金额的企业共计 25 家,占比为 13.16%;得到 10 万元的最小放贷金额的企业为 25 家,占比为 13.16%;银行年总收益为 435.44 万元。最后,重新评估五个因素的重要程度,调整判断矩阵对标准化数据和投资策略进行检验,验证了模型的合理性。
5.3 问题三的模型建立与求解
建立基于道格拉斯函数的信贷策略调整模型,制定突发情况下一亿元信贷额度的分配方案。首先,依据附件二中 302 家的企业信息,将企业划分为个服务业、运输业、医药类等八大类;其次,以新冠肺炎疫情冲击为例,将国家特殊时期对相关企业的政策支持纳入考虑范畴,并同时网络查阅各行业企业的商业报告数据,分析其销售额和利润走向,以此作为划分的八大类企业在今年的销售额和利润;再次,运用道格拉斯函数计算出每个企业安全的贷款金额范围;最后,建立以银行利润最大化为目标的信贷调整策略模型,制定出对各企业的放贷方案。
5.3.1 模型的建立
5.3.1.1 问题三第一小问的模型建立
1.聚类分析
将附件二中的 302 家企业分为个体经营,建筑业,制造业,服务业,运输业,科技类,贸易类,医药八类类企业,寻找新冠肺炎疫情对这八类企业中具有代表性的企业的营收影响,以及各个产业的人均产值率。去反映新冠肺炎对各个行业整体的影响程度,来预测出各行业中企业在新冠肺炎冲击下营业收入和利润的变化。考虑到对新冠肺炎的抗击对医药企业进行支持,对六家医药企业予以 100 万,4%的最低房贷利率进行放贷,以鼓励医药企业对呼吸机,疫苗等产品的研发。
2.基于层次分析法的综合评价。
将预测的企业的营收数据,利润变化就,利润标准差及信誉度评分进行标准化处理,得到标准化后的数据。利用层次分析法的判断矩阵:
计算出权重,得到量化分析的结果。
3.道格拉斯经济增长模型
该模型首先建立产值与资金劳动力的关系,然后研究资金与劳动力的最佳分配,使投资效益最大。
用 Q(t),K(t),L(t)分别表示该企业该年在时刻 t 的产值、资金和劳动力,它们的关系可以表示为:
𝑄(𝑡) = 𝐹(𝐾(𝑡), 𝐿(𝑡))
其中 F 为待定函数。对于固定的时刻 t,上述关系可写作:
𝑄 = 𝐹(𝐾, 𝐿)
记 z 为每个劳动力的产值,y 是每个劳动力的投资,则:
由上述等式即可得到 F 的具体表达形式:
𝑄 = 𝑐𝐾𝛼𝐿1−𝛼 (1)
记
表示单位资金创造的价值;
代表单位劳动力创造的产值, 由(1)式可得:
其中,𝛼为资金在产值中所占的份额,1 − 𝛼为劳动力在产值中所占的份额。
4.0-1 整数规划
将对企业的投资额,放贷利率,企业流失率及量化分析的乘机定义为投资指
数,以投资指数最大化为目标函数建立 0-1 整数规划模型。𝐿𝑖代表投资𝑖十万元,𝐿𝑟 代表房贷利率,𝐷𝑟代表企业流失率,𝑥𝑖𝑗代表是否对第𝑗个企业投资𝑖十万元。得到目标函数:
对企业的投资额度为 1 亿,约束条件为:
为了确保投资的多样性,投资的企业应大于 150 家,每等级投资的公司在 15 到 25 家之间,约束条件为:
每家企业所接受的到款额不得超过其最大额度:
将上述约束条件连列为:
个企业投资
十万元
对第
个企业投资
十万元
{
5.3.2 模型的求解
5.3.2.1 问题三的模型求解
1.行业的划分
将各企业以行业分为八类,如下表 5-所示:
表 5-15 行业的划分及其代表企业(部分)
类别 个体类 建筑类 制造类 服务类 运输类 科技类 贸易类 医药类
E1 E11 E13 E31 E19 E20 E22 E72 企
E79 E60 E57 E137 E40 E99 E75 E74 业
E116 E103 E146 E187 E78 E182 E220 E128
由表 5-15 可知,共将附件表格中的企业划分为八类,分为:个体类、建筑类、制造类、服务类、运输类、科技类、贸易类、医药类。
2.相关数据的汇总与分析
收集国家统计局发布的上述八类行业除去医药行业的年营收变化,年利润变化、人均工资及人均产值数据。如下表 5-16 所示:
表 5-16 各行业的相关数据(部分)
| 个体类 | 建筑类 | 制造类 | 服务类 | 运输类 | 科技类 | 贸易类 |
平均营收 | -34.40% | 17.00% | -10.03% | -47.14% | 37.38% | 21.90% | -0.92% |
平均利润 | -32.80% | 5.30% | -11.60% | -85.87% | 12.65% | 12.65% | -0.92% |
人均工资 | 6.07 万 | 5.09 万 | 5.8 万 | 8.28 万 | 8.28 万 | 13.35 万 | 5.4 万 |
人均产值 | / | 40 万 | 87 万 | 26.5 万 | 76.48 万 | 92 万 | 64.83 万 |
由表 5-16 发现,疫情[11]期间服务类企业平均营收、利润下滑最多,个体类行业和制造类企业利润减少较多,运输类行业平均营收涨幅明显。
3.道格拉斯经济增长模型的运用
根据上表 5-16 中各产业营业额和利润的变化预测出遭遇疫情变化下这 302 家企业的营收额及年利润。并利用问题二中的基于层次分析法的综合评价模型,得到量化结果。利用道格拉斯经济增长模型。假设资金来自于贷款,利率为 r,每个劳动力需付工资
,于是当资金 K、劳动力 L 产生产值 Q 时,得到的效益为:
𝑆 = 𝑄 − 𝑟𝐾 − 𝑤𝐿
问题化为求资金与劳动力的分配比例问题,使效益 S 最大化。用微分法求解可得:
再利用(2)式并化简可得:
其中,k 为该企业所接受的最大贷款金额,z 为该企业产值,P 为该企业员工人数,w 为人均工资,r 为放贷利率。部分数据如表 5-17 所示:表 5-17 各企业接受最大贷款额度(部分)
公司类别 | 个体类 | 建筑类 | 制造类 | 服务类 运输类 科技类 | 贸易类 |
公司代号 | E8 | E11 | E216 | E153 E166 E120 | E22 |
最大贷款额 | 68 万 | 120 万 | 44 万 | 52 万 184 万 326 万 | 87 万 |
由表 5-17 可得:个体类行业所接受贷款额度相对较少,科技类企业和建筑类企业需求较大。其中,建筑类、运输类与科技类企业银行放贷额度无法全部满足。
4.0-1 规划的求解
考虑到疫情影响,为更有效的抗击新冠肺炎,对医疗企业放贷金额为最大,借贷 100 万元,利率为优惠利率,4%。医疗企业共有 6 家,其中 E275 的企业信誉评级为
D,虽原则上不予放贷,但依旧对其进行借贷。
以投资指数最大化为目标函数,解得 0-1 规划,对剩余 7 类企业进行放贷,得到放贷策略如下表 5-18 所示:
表 5-18 放贷策略金额表(部分)
公司类别 个体类 建筑类 制造类 服务类 运输类 科技类 贸易类公司代号 E79 E11 E13 E137 E19 E20 E22
放贷金额 60 万 100 万 60 万 30 万 80 万 90 万 50 万 由表 5-18 可得,企业 E11 放贷金额最多为 100 万元,企业 E20 放贷金额为 90 万元,不同行业的不同类别企业获得的金额不尽相同。
5.3.3 模型的检验分析
将 0-1 整数规划用蒙特卡罗法即计算机随机模拟方法进行求解。它基于对大量时间的统计结果来实现对一些确定性问题的检验。使用计算机生成十万个满足约束条件的随机数,带入到目标函数中求得投资指数的最大值为 22175,银行可获取的最大利润为 427.65 万元,利用隐枚举法求得的投资指数的最大值为 22186,银行获取的最大利润为 429.13 万元,由此可见利用隐枚举法求解具有优越性。
5.3.4 小结
建立了基于道格拉斯函数的信贷策略调整模型,制定了突发情况下一亿元信贷额度的分配方案。首先,将企业划分为八大类,并新冠肺炎疫情冲击为例,将国家特殊时期对相关企业的政策支持纳入考虑范畴,运用道格拉斯函数计算出每个企业安全的贷款金额范围;最后,建立以银行利润最大化为目标的信贷调整策略模型,计算结果表明:银行可获利 429.13 万元,对 6 家医疗企业分别放贷 100 万元,贷款利息为 4%;对受疫情影响较大的 E137 服务类企业放贷 30 万元,贷款利率为
5.84%。
六、模型的评价与推广
6.1 模型的评价
6.1.1 模型的优点
1.问题一所建立的综合评价模型,较为客观合理地解决了对有信贷记录企业的贷款金额分配问题。运用了层次分析法、
均值聚类分析法,将企业评级,并对他们提供不同的利率方案,具有较强的针对性。运用了遗传算法,以银行收益最大化为目标,设计放贷方案,对于银行方面,具有较强的现实意义。
2.问题二建立了基于 0-1 整数规划的信贷策略的设计模型,以银行获得利润最大为目标函数,从银行的角度设计了贷款策略,既在最大程度上满足了银行的利益要求,又有效的缓解了无信贷记录的中小微企业的资金困难境地,双方实现了共赢。
3. 问题三建立的模型考虑了新冠病毒疫情这一突发因素对不同企业可能产生的影响,将问题二的信贷策略作出调整。疫情期间,在尽量满足银行利益要求的前提下,积极响应国家对扶持中小微企业资金扶持的号召,并对抗击疫情的一些重点保障企业提供特殊的优惠。虽然银行的利益可能会有一定的亏损,但符合国家的发展利益,符合全人类共同的利益,具有一定的发展的眼光。
6.1.2 模型的改进
1.在剔除利润率异常的企业时,仅从数据角度进行分析,因时间仓促,没有对被剔除的企业进行实地调查,具有一定的局限性。若要剔除更加合理应全面的了解这些企业;
2.在建立问题三的模型时,对企业类别划分时不够细致,可对企业类别进行更加细致的划分。
6.2 模型的推广
本题模型较好的解决了对企业的信贷风险进行量化分析的问题以及对企业的信贷策略的制定问题。科学放贷,助力有信誉的中小微企业发展,并尽可能的使银行收益最大化。模型考虑到了疫情期间企业的受影响程度,为企业提供了特殊的优惠,也为其他银行在紧急状态下做出让利提供学习思路。本模型还可应用于解决大学科研费用合理分配、学生奖学金的评级[,政府土地最优规划等资源分配问题,在实际应用中具有较强的实用性与通用性。
参考文献
- 李水清, 侯一筠, 王俊琰. 基于层次分析法的海堤防御能力评估模型[J]. 海洋科
学, 2020, 44(8):8-13.
- 臧艳辉, 席运江, 赵雪章. 基于 MapReduce 的分治 k 均值聚类方法[J]. 计算机工
程与设计, 2020, 41(5):1345-1351.
- Kaidi Wan, Luc Vervisch, Zhenxun Gao, Pascale Domingo, Chongwen Jiang, Jun Xia, Zhihua Wang. Development of reduced and optimized reaction mechanism for potassium emissions during biomass combustion based on genetic algorithms[J].
Energy, 2020, 211(1):69-76.
- Hassan Sarmadi, Abbas Karamodin. A novel anomaly detection method based on adaptive Mahalanobis-squared distance and one-class kNN rule for structural health monitoring under environmental effects[J]. Mechanical Systems and Signal Processing, 2020,316 (6):140-143.
- 李西宁, 赵志浩, 仝梦佳, 王守川. 基于 0-1 整数规划的航空薄壁件定位布局优化[J]. 航空制造技术, 2018, 61(7):36-41.
- 邢胜龙. 基于柯布-道格拉斯生产模型下的对外开放与区域经济增长关系研究[J]. 商业经济研究, 2019(08):140-143.
- Ichiro Kuriki. Emergence and separation of color categories:an NIRS study in prelingual infants and a k-means analysis on Japanese color-naming data[J]. Current Opinion in Behavioral Sciences, 2019, 412(7):30-37.
- 张馨. 计算机网络优化设计中遗传算法的应用[J]. 数字技术与应用, 2020, 38(6):
105-106.
- Ricardo J. Gomes,Andreia P. Guerreiro, Tobias Kuhn, Lusí Paquete. Implicit enumeration strategies for the hypervolume subset selection problem[J]. Computers and Operations Research,2018, 73(7):26-30.
- 周芸, 杜景林, 陶晔. 基于属性加权 k 最近邻算法的降雨预测[J]. 计算机工程与设计, 2020, 41(6):1605-1609.
- 汪德华. 新冠肺炎疫情的经济影响及财政对冲政策思路探讨[J]. 中国财政, 2020,
(10):22-24.
附录
附录一
计算月进项额
[num1,txt,cell] = xlsread('附件 1 剔除作废发票.xlsx','sheet1');
[num2,data]=xlsread('日期.xlsx','sheet1'); [num3,qiye]=xlsread('企业.xlsx','sheet1'); for i=1:123 for j=1:38 sum(i,j)=0; end end for i=1:203339 for j=1:123 if strcmp(cell(i,1),qiye(j,1))==1 for k=1:38 if strcmp(cell(i,3),data(k,1))==1 sum(j,k)=num1(i,1)+sum(j,k); end end end end end xlswrite('月进项额.xlsx',sum);
计算月销售额
[num1,txt,cell] = xlsread('附件 1 剔除作废发票.xlsx','sheet2');
[num2,data]=xlsread('日期.xlsx','sheet1');
[num3,qiye]=xlsread('企业.xlsx','sheet1'); for i=1:123 for j=1:38 sum1(i,j)=0; end end for i=1:151278 for j=1:123
if strcmp(cell(i,1),qiye(j,1))==1 for k=1:38
if strcmp(cell(i,3),data(k,1))==1 sum1(j,k)=num1(i,1)+sum1(j,k); end end end end end
xlswrite('月销售额.xlsx',sum1);
附录二
层次分析法
B=[1,2,5,8,9;1/2,1,2,5,8;1/5,1/2,1,2,5;1/8,1/5,1/2,1,2;1/9,1/8,1/5,1/2,1]; [n,m]=size(B);
%判别矩阵具有完全一致性 for i=1:n for j=1:n if B(i,j)*B(j,i)~=1 fprintf('i=%d,j=%d,B(i,j)=%d,B(j,i)=%d\n',i,j,B(i,j),B(j,i)) end end
end
%求特征值特征向量,找到最大特征值对应的特征向量
[V,D]=eig(B); tz=max(D); tzz=max(tz); c1=find(D(1,:)==max(tz));
tzx=V(:,c1);%特征向量
%权
quan=zeros(n,1); for i=1:n
quan(i,1)=tzx(i,1)/sum(tzx);
end Q=quan;
%一致性检验
CI=(tzz-n)/(n-1);
RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59];
%判断是否通过一致性检验
CR=CI/RI(1,n); if CR>=0.1
fprintf('没有通过一致性检验\n');
else
fprintf('通过一致性检验\n'); end
附录三
标准化数据
data = xlsread('评价因素.xlsx','sheet1','A2:E287'); st=zscore(data); xlswrite('标准化数据.xlsx',st); 附录四
遗传算法
clear;clc;close all;
%%遗传参数设置
NUMPOP=100;%初始种群大小
irange_l=0.04; %问题解区间
irange_r=0.14;
LENGTH=10; %二进制编码长度
ITERATION = 30000;%迭代次数
CROSSOVERRATE = 0.7;%杂交率
SELECTRATE = 0.5;%选择率 VARIATIONRATE = 0.001;%变异率
%初始化种群
pop=m_InitPop(NUMPOP,irange_l,irange_r); pop_save=pop;
%绘制初始种群分布
x=linspace(0.04,0.15,1000); y=m_Fx(x); plot(x,y);
ylabel('目标函数值') xlabel('放贷利率')
hold on for i=1:size(pop,2) plot(pop(i),m_Fx(pop(i)),'ro'); end
hold off
title('初始种群');
%开始迭代
for time=1:ITERATION
%计算初始种群的适应度 fitness=m_Fitness(pop);
%选择
pop=m_Select(fitness,pop,SELECTRATE);
%编码
binpop=m_Coding(pop,LENGTH,irange_l);
%交叉
kidsPop = crossover(binpop,NUMPOP,CROSSOVERRATE);
%变异
kidsPop = Variation(kidsPop,VARIATIONRATE);
%解码
kidsPop=m_Incoding(kidsPop,irange_l);
%更新种群
pop=[pop kidsPop]; end figure x=linspace(0,0.2,1000); y=m_Fx(x);
plot(x,y); hold on for i=1:size(pop,2) plot(pop(i),m_Fx(pop(i)),'ro'); end
hold off title('终止种群'); ylabel('适应度函数值')
xlabel('放贷利率')
disp(['最优解:' num2str(max(m_Fx(pop)))]);
disp(['最大适应度:' num2str(max(m_Fitness(pop)))]);
function binPop=m_Coding(pop,pop_length,irange_l)
%% 二进制编码(生成染色体)
% 输入:pop--种群
% pop_length--编码长度
pop=round((pop-irange_l)*10^4); for n=1:size(pop,2) %列循环 for k=1:size(pop,1) %行循环 dec2binpop{k,n}=dec2bin(pop(k,n));%dec2bin 的输出为字符向量;
%dec2binpop 是 cell 数组
lengthpop=length(dec2binpop{k,n}); for s=1:pop_length-lengthpop %补零 dec2binpop{k,n}=['0' dec2binpop{k,n}]; end end
binPop{n}=dec2binpop{k,n}; %取 dec2binpop 的第 k 行
end
function fitness=m_Fitness(pop)
%% Fitness Function
%y=xsin(3x)在[-1,2]上,最大值也不会超过 2
%所以计算函数值到 2 的距离,距离最小时,即为最优解
%适应度函数为 1/距离
for n=1:size(pop,2)
fitness(n)=1/(15-m_Fx(pop(:,n))); end
end function y=m_Fx(x)
%% 要求解的函数
y=100*x.*(1-(-1725000+1725000*cos( -0.008875*x)+-2277*sin( -0.008875*x)-
0.6996));
end
function pop=m_Incoding(binPop,irange_l)
%% 解码
popNum=1;
popNum = 1;%染色体包含的参数数量 for n=1:size(binPop,2) Matrix = binPop{1,n};
for num=1:popNum pop(num,n) = bin2dec(Matrix); end end
pop = pop./10^4+irange_l;
function pop=m_InitPop(numpop,irange_l,irange_r)
%% 初始化种群
% 输入:numpop--种群大小;
% [irange_l,irange_r]--初始种群所在的区间 pop=[]; for i=1:numpop
pop(:,i)=irange_l+(irange_r-irange_l)*rand; end end
function parentPop=m_Select(matrixFitness,pop,SELECTRATE)
%% 选择
% 输入:matrixFitness--适应度矩阵
% pop--初始种群
% SELECTRATE--选择率
sumFitness=sum(matrixFitness(:));%计算所有种群的适应度
accP=cumsum(matrixFitness/sumFitness);%累积概率
%轮盘赌选择算法
for n=1:round(SELECTRATE*size(pop,2))
matrix=find(accP>rand); %找到比随机数大的累积概率 if isempty(matrix) continue end
parentPop(:,n)=pop(:,matrix(1));%将首个比随机数大的累积概率的位置的个体遗
传下去
end end
Dr=xlsread(' 附件 3 :银行贷款年利率与客户流失率关系的统计数据
1.xlsx','sheet1','A3:D31'); x=Dr(:,1); y=Dr(:,2)
[xData, yData] = prepareCurveData( x, y ); % Set up fittype and options.
ft = fittype( 'fourier1' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' ); opts.Display = 'Off'; opts.StartPoint = [0 0 0 57.1198664289053]; % Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );
% Plot fit with data. figure( 'Name', 'untitled fit 1' ); h = plot( fitresult, xData, yData );
legend( h, 'y vs. x', 'untitled fit 1', 'Location', 'NorthEast' );
% Label axes xlabel x ylabel y
grid on
%% 子函数
%
%题 目:Variation
%
%
%输 入:
% pop 种群
% VARIATIONRATE 变异率
%输 出:
% pop 变异后的种群
%%
function kidsPop = Variation(kidsPop,VARIATIONRATE) for n=1:size(kidsPop,2) if rand<VARIATIONRATE
temp = kidsPop{n};
%找到变异位置
location = ceil(length(temp)*rand); temp = [temp(1:location-1) num2str(~temp(location))...
temp(location+1:end)]; kidsPop{n} = temp; end end
附录五傅里叶变化拟合
Dr=xlsread(' 附件 3 :银行贷款年利率与客户流失率关系的统计数据
1.xlsx','sheet1','A3:D31'); x=Dr(:,1); y=Dr(:,2)
[xData, yData] = prepareCurveData( x, y ); % Set up fittype and options.
ft = fittype( 'fourier1' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' ); opts.Display = 'Off';
opts.StartPoint = [0 0 0 57.1198664289053]; % Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts ); % Plot fit with data. figure( 'Name', 'untitled fit 1' );
h = plot( fitresult, xData, yData ); legend( h, 'y vs. x', 'untitled fit 1', 'Location', 'NorthEast' );
% Label axes xlabel x ylabel y grid on 附录六信誉评分
[num,dengji] = xlsread('附件 1 剔除作废发票.xlsx','企业信息'); for i=1:123 xinyu(i,1)=0; end for i=1:123
if strcmp(dengji(i,3),'A')==1 xinyu(i,1)=100; end
if strcmp(dengji(i,3),'B')==1 xinyu(i,1)=80; end
if strcmp(dengji(i,3),'C')==1 xinyu(i,1)=60; end
if strcmp(dengji(i,3),'D')==1 xinyu(i,1)=40; end end
xlswrite('信誉评分.xlsx',xinyu) 附录七
第二问 0-1 规划 model: sets:
num/1..190/:A; a1/1..10/:L; b(a1,num):x; endsets data:
A=@ole('C:\Users\86138\Desktop\CUMCM2020Probelms\ 第 二 问 \ 标 准 化 数据.xlsx','K2:K191');
L=@ole('C:\Users\86138\Desktop\CUMCM2020Probelms\ 第 二 问 \ 标 准 化 数据.xlsx','L2:L11');
enddata
min=@sum(b(i,j):-L(i)*A(j)*x(i,j)); @for(b(i,j):@bin(x(i,j)));
@sum(b(i,j):L(i)*x(i,j))=10000;
@sum(b(i,j):x(i,j))=190;
@for(num(j):@sum(a1(i):x(i,j))=1);
@for(a1(i):L(i)>=10);
@for(a1(i):L(i)<=100);
@for(a1(i):@sum(num(j):x(i,j))>=15); @for(a1(i):@sum(num(j):x(i,j))<=25); b1=@sum(num(j):x(1,j)); b2=@sum(num(j):x(2,j)); b3=@sum(num(j):x(3,j)); b4=@sum(num(j):x(4,j)); b5=@sum(num(j):x(5,j)); b6=@sum(num(j):x(6,j)); b7=@sum(num(j):x(7,j)); b8=@sum(num(j):x(8,j)); b9=@sum(num(j):x(9,j)); b10=@sum(num(j):x(10,j)); end
第三问 0-1 规划 model: sets:
num/1..190/:A; a1/1..10/:L; b(a1,num):x; endsets data:
A=@ole('C:\Users\86138\Desktop\CUMCM2020Probelms\ 第二问\标准化数据(检验).xlsx','K2:K191');
L=@ole('C:\Users\86138\Desktop\CUMCM2020Probelms\ 第二问 \ 标准化数据(检验).xlsx','L2:L11'); enddata
min=@sum(b(i,j):-L(i)*A(j)*x(i,j)); @for(b(i,j):@bin(x(i,j)));
@sum(b(i,j):L(i)*x(i,j))=10000;
@sum(b(i,j):x(i,j))=190;
@for(num(j):@sum(a1(i):x(i,j))=1);
@for(a1(i):L(i)>=10);
@for(a1(i):L(i)<=100);
@for(a1(i):@sum(num(j):x(i,j))>=15); @for(a1(i):@sum(num(j):x(i,j))<=25); b1=@sum(num(j):x(1,j)); b2=@sum(num(j):x(2,j)); b3=@sum(num(j):x(3,j)); b4=@sum(num(j):x(4,j)); b5=@sum(num(j):x(5,j)); b6=@sum(num(j):x(6,j)); b7=@sum(num(j):x(7,j)); b8=@sum(num(j):x(8,j)); b9=@sum(num(j):x(9,j)); b10=@sum(num(j):x(10,j)); end
附录八
K 近邻算法
function [trainedClassifier, validationAccuracy] = trainClassifier(trainingData)
% [trainedClassifier, validationAccuracy] = trainClassifier(trainingData)
% returns a trained classifier and its accuracy. This code recreates the
% classification model trained in Classification Learner app. Use the % generated code to automate training the same model with new data, or to % learn how to programmatically train models.
%
% Input:
% trainingData: a table containing the same predictor and response % columns as imported into the app.
%
% Output:
% trainedClassifier: a struct containing the trained classifier. The % struct contains various fields with information about the trained % classifier.
%
% trainedClassifier.predictFcn: a function to make predictions on new % data.
%
% validationAccuracy: a double containing the accuracy in percent. In
% the app, the History list displays this overall accuracy score for % each model.
%
% Use the code to train the model with new data. To retrain your % classifier, call the function from the command line with your original % data or new data as the input argument trainingData.
%
% For example, to retrain a classifier trained with the original data set % T, enter:
% [trainedClassifier, validationAccuracy] = trainClassifier(T)
%
% To make predictions with the returned 'trainedClassifier' on new data T2,
% use
% yfit = trainedClassifier.predictFcn(T2)
%
% T2 must be a table containing at least the same predictor columns as used % during training. For details, enter: % trainedClassifier.HowToPredict
% Auto-generated by MATLAB on 2020-09-11 20:31:53
% Extract predictors and response
% This code processes the data into the right shape for training the
% model.
inputTable = trainingData;
predictorNames = {'VarName1', 'VarName2'}; predictors = inputTable(:, predictorNames); response = inputTable.A;
isCategoricalPredictor = [false, false];
% Data transformation: Select subset of the features
% This code selects the same subset of features as were used in the app.
includedPredictorNames = predictors.Properties.VariableNames([true false]); predictors = predictors(:,includedPredictorNames); isCategoricalPredictor = isCategoricalPredictor([true false]);
% Train a classifier
% This code specifies all the classifier options and trains the classifier.
classificationTree = fitctree(... predictors, ... response, ...
'SplitCriterion', 'gdi', ...
'MaxNumSplits', 100, ...
'Surrogate', 'off', ...
'ClassNames', categorical({'A'; 'B'; 'C'; 'D'}));
% Create the result struct with predict function predictorExtractionFcn = @(t) t(:, predictorNames); featureSelectionFcn = @(x) x(:,includedPredictorNames);
treePredictFcn = @(x) predict(classificationTree, x);
trainedClassifier.predictFcn = @(x)
treePredictFcn(featureSelectionFcn(predictorExtractionFcn(x)));
% Add additional fields to the result struct
trainedClassifier.RequiredVariables = {'VarName1', 'VarName2'}; trainedClassifier.ClassificationTree = classificationTree; trainedClassifier.About = 'This struct is a trained model exported from Classification Learner R2017a.';
trainedClassifier.HowToPredict = sprintf('To make predictions on a new table, T, use: \n yfit = c.predictFcn(T) \nreplacing ''c'' with the name of the variable that is this struct, e.g. ''trainedModel''. \n \nThe table, T, must contain the variables returned by: \n c.RequiredVariables \nVariable formats (e.g. matrix/vector, datatype) must match the original training data. \nAdditional variables are ignored. \n \nFor more information, see <a href="matlab:helpview(fullfile(docroot, ''stats'', ''stats.map''), ''appclassification_exportmodeltoworkspace'')">How to predict using an exported model</a>.');
% Extract predictors and response
% This code processes the data into the right shape for training the % model.
inputTable = trainingData; predictorNames = {'VarName1', 'VarName2'}; predictors = inputTable(:, predictorNames); response = inputTable.A;
isCategoricalPredictor = [false, false];
% Perform cross-validation partitionedModel = crossval(trainedClassifier.ClassificationTree, 'KFold', 5);
% Compute validation predictions
[validationPredictions, validationScores] = kfoldPredict(partitionedModel);
% Compute validation accuracy validationAccuracy = 1 - kfoldLoss(partitionedModel, 'LossFun', 'ClassifError');