【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 本文详细介绍了2023年第十三届MathorCup高校数学建模挑战赛A题的解题过程,包括量子计算机在信用评分卡组合优化中的应用,提供了详细的建模方案、QUBO模型的构建方法以及相应的代码实现。

相关信息

(1)建模思路

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建模方案及代码实现

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 建模方案及代码实现

(2)完整论文

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 42页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 赛后总结之31页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】D 题 航空安全风险分析和飞行技术评估问题 27页论文及代码

请添加图片描述
更新信息:2023-4-15 更新了代码

1 题目

在银行信用卡或相关的贷款等业务中,对客户授信之前,需要先通过 各种审核规则对客户的信用等级进行评定,通过评定后的客户才能获得信 用或贷款资格。规则审核过程实际是经过一重或者多重组合规则后对客户 进行打分,这些规则就被称为信用评分卡,每个信用评分卡又有多种阈值 设置(但且只有一个阈值生效),这就使得不同的信用评分卡在不同的阈值 下,对应不同的通过率和坏账率,一般通过率越高,坏账率也会越高,反 之,通过率越低,坏账率也越低。对银行来说,通过率越高,通过贷款资格审核的客户数量就越多,相 应的银行获得的利息收入就会越多,但高通过率一般对应着高坏账率,而 坏账意味着资金的损失风险,因此银行最终的收入可以定义为:最终收入 = 贷款利息收入 - 坏账损失

下表举例 3 个不同的信用评分卡,可以看到每种信用评分卡有 10 个阈值,每种阈值对应不同的坏账率和通过率:

在这里插入图片描述

赛题说明 1:流程简化及示例

由于银行场景的复杂性,往往需要采用选择多个不同的信用评分卡进 行组合来实现最佳的风险控制策略。而实际中的信用评分卡组合是一个非 常复杂的过程,为便于建模,我们将该问题进行做如下简化(本简化只适 用本次比赛赛题,不能完全代表实际场景)。假设贷款资金为 1000000 元,银行贷款利息收入率为 8%,并以上面列举的三个信用评分卡作为选定的信用评分卡组合来测算银行最终收入。由于每一信用评分卡有且只可选择 1 个阈值,假设信用评分卡 1 的阈值设置为 8,则通过表格可知,对应通过率为 70%,坏账率为 4.00%,信用评分卡 2 的阈值设置为 6,则通过率为 50%,坏账率为 2.70%,信用评分卡3 的阈值设置为 7,则通过率为 62%,坏账率为 3.70%。例如如果我们选择三重信用卡组合策略,那么这三种信用评分卡组合 后的总通过率为所有信用评分卡通过率相乘,即:0.7×0.5×0.62 = 0.217。总坏账率为三种信用评分卡对应坏账率的平均值,即:1/3×(0.04+0.027+0.037) = 0.0367。基于以上条件可求得,本次贷款利息收入为:贷款资金×利息收入率×总通过率×(1-总坏账率),即:1000000×0.08×(0.7×0.5×0.62) ×(1-1/3×(0.04+0.027+0.037)) =16758.18(元)。由坏账带来的坏账损失为:贷款资金×总通过率×总坏账率,即:1000000×(0.7×0.5×0.62) ×(1/3×(0.04+0.027+0.037))=7522.666(元)。那么银行的最终收入为:贷款利息收入**-**坏账损失,即

16758.18-7522.666 = 9235.514 (元)

由此可见,选择不同的信用评分卡,不同的阈值组合,会给银行带来 不同的收入与损失,由此决定银行最终收入。因此,银行的目标是选择最 合理的信用评分卡组合以及其阈值,使得银行最终收入最多。

赛题说明2:QUB 模型简介

QUBO 模型是指二次无约束二值优化(Quadratic Unconstrained Binary Optimization)模型,它是一种用于解决组合优化问题的数学模型。在QUBO模型中,需要将问题转化为一个决策变量为二值变量,目标函数是一个二 次函数形式优化模型。

QUBO 模型可以运行在量子计算机硬件上,通过量子计算机进行毫秒级的加速求解。这种模型和加速方式在未来各行业中将得到广泛的实际应 用。因此现阶段研究基于 QUBO 模型的量子专用算法十分有应用价值。例如典型的图着色、旅行商问题、车辆路径优化问题等,都可以转化为 QUBO 模型并借助于量子计算机求解。

相关的 QUBO 的转化方法与例子可参考附件 2 中的参考文献。

赛题说明3:赛题数据

附件 1 中共包含 100 张信用评分卡,每张卡可设置 10 种阈值之一,并对应各自的通过率与坏账率共 200 列,其中 t_1 代表信用评分卡 1 的通过率共 10 项,h_1 代表信用评分卡 1 的坏账率共 10 项,依次类推 t_100 代表信用评分卡 100 的通过率,h_100 代表信用评分卡 100 的坏账率。根据上面的赛题说明及附件 1 中的数据,请你们团队通过建立数学模型完成如下问题 1 至问题 3。

问题 1:在 100 个信用评分卡中找出 1 张及其对应阈值,使最终收入

最多,请针对该问题进行建模,将该模型转为 QUBO 形式并求解。

问题 2:假设赛题说明 3 目前已经选定了数据集中给出的信用评分卡1、信用评分卡 2、信用评分卡 3 这三种规则,如何设置其对应的阈值,使最终收入最多,请针对该问题进行建模,将模型转为 QUBO 形式并求解。

问题 3:从所给附录中 100 个信用评分卡中任选取 3 种信用评分卡, 并设置合理的阈值,使得最终收入最多,请针对该问题进行建模,并将模 型转为 QUBO 形式并求解。

2 方案解析

2.1 问题一

这是一个组合优化问题,需要在100张信用评分卡中找到最优的一张卡和对应的阈值,使得最终收入最多。因为每张卡都有10个阈值选项,因此总共有1000个可能的选择。为了将该问题转化为QUBO模型,需要定义一组变量,表示选择第i张卡的第j个阈值时是否为1,其中i∈[1,100], j∈[1,10]。另外,需要定义一个目标函数来最大化最终收入。目标函数的形式为:
$$maximize:\sum_i \sum_i r_{ij} x_{ij}$$
其中 $r_{ij}$​是选择第i张卡的第j个阈值时的收入。$x_{ij}$​表示选择第i张卡的第j个阈值时的变量。

为了使得选择的方案符合题意,需要加入约束条件。首先,每张卡只能选择一个阈值,因此需要添加如下约束:
$$\sum_j x_{ij} = 1 \quad i = 1,2,...,100$$
其次,只能选择一个卡和对应的阈值,因此需要添加如下约束:
$$\sum_i \sum_j x_{ij} = 1$$
最后,
。。。。略,请下载完整文档

2 问题二

对模型进行线性化,将二次项转化为一次项,然后将模型转化为 QUBO 形式。具体地,我们定义 $x_{ij}$表示信用评分卡 i中选择第 j个阈值,其中i∈1,2,3,j∈1,2,…,10,$y_i$表示是否选择信用评分卡i,其中i∈1,2,3,$z_j$表示是否选择第 j个阈值,其中j∈1,2,…,10。同时,我们引入一个变量r表示总收入。

根据前面的分析,可以得到以下约束条件:

每个信用评分卡最多选择一个阈值,即

$$∑_{j=1}^{10} x_{ij} \leq 1, i \in \{1,2,3\} $$

选择某个信用评分卡的同时必须选择该信用评分卡对应的一个阈值,即

$$x_{ij} \leq y_i, i \in \{1,2,3\}, j \in \{1,2,\dots,10\}$$

总共只能选择三个信用评分卡,即

$$∑_{i=1}^{3} y_i = 3 $$
选择某个阈值的同时必须选择对应的信用评分卡,即

$$x_{1j} + x_{2j} + x_{3j} - z_j = 0, j \in \{1,2,\dots,10\}$$
根据信用评分卡的阈值和数据集中给出的通过率和坏账率,计算收入,即

r = 200 ∑ i = 1 3 ∑ j = 1 10 x i j ( t i − h i ) z j r = 200\sum_{i=1}^{3} \sum_{j=1}^{10} x_{ij} (t_i - h_i) z_j r\=200i\=1∑3​j\=1∑10​xij​(ti​−hi​)zj​

其中第 4 个约束条件是一个等式约束,我们可以将其转化为两个不等式约束:

$$x_{1j} + x_{2j} + x_{3j} \leq 1 + z_j, j \in \{1,2,\dots,10\} \\\ x_{1j} + x_{2j} + x_{3j} \geq 1 - 2(1 - z_j), j \in \{1,2,\dots,10\} $$
接下来,我们将每个约束条件转化为 QUBO 表达式。首先,我们考虑将约束条件中的不等式转化为等式。对于一个不等式 a ≤ b ,我们可以引入一个非负变量 s,并将其转化为等式 a + s = b,其中 s表示两边差的绝对值。这样,我们就可以将所有约束条件转化为等式的形式,从而将模型转化为 QUBO 形式。

具体地,我们可以将目标函数表示为:
$$H = A r + ∑_{i=1}^3 ∑{j=1}^{10} B_i x_ij + ∑_{j=1}^{10} C_j z_j + ∑{i=1}^3 D_i y_i + ∑_{i=1}^3 ∑_{j=1}^{10} ∑ _{k=1}^{10} E_{ij}^k x_{ij} x_{ik} + ∑ _{i=1}^3 ∑ _{j=1}^9 ∑_{k=j+1}^{10} F_{ij}^k x_{ij} x_{ik} $$
其中
。。。。略,请下载完整文档

2.3 问题三

首先,我们定义三个二元变量 x1​,x2​,x3​,表示我们是否选择了每个评分卡。

其次,我们需要定义一个阈值 T ,表示最小的信用评分得分,只有评分高于此阈值的评分卡才会被选择。

最后,我们需要定义一个目标函数,表示我们希望最大化的收入。在这个问题中,我们可以将收入定义为三个选择的信用评分卡的得分之和。

因此,我们的目标是将以下函数最大化:
$$f(x1,x2,x3)=s1x1+s2x2+s3 $$
其中s1​,s2​,s3​ 分别表示我们选择的三个信用评分卡的得分。

接下来,我们需要定义约束条件。首先,我们需要确保只选择了三个信用评分卡:
$$x1+x2+x3=3∗x∗1+∗x∗2+∗x∗3=3$$
其次,我们需要确保选择的评分卡的得分都高于阈值 T:
$$s1x1≥T,s2x2≥T,s3x3≥T∗s∗1∗x∗1≥∗T∗,∗s∗2∗x∗2≥∗T∗,∗s∗3∗x∗3≥∗T∗$$

最后,我们需要确保变量x1​,x2​,x3​ 都是二元变量:
$$x12=x1,x22=x2,x32=x3∗x∗12=∗x∗1,∗x∗22=∗x∗2,∗x∗32=∗x∗3 $$
将目标函数和约束条件转换为 QUBO 形式:
。。。。略,请下载完整文档

3 代码实现

data = readmatrix('附件1:data_100.csv');
rates = data(:,1:100);
loss_rates = data(:,101:200);

R = rates .* loss_rates;

Q = zeros(100,100);
for i = 1:100
    for j = i:100
        for k = 1:10
            for l = 1:10
                Q(i,j) = Q(i,j) + R(k,l)*rates(k,i)*rates(l,j);
            end
        end
        Q(j,i) = Q(i,j);
    end
end

C1 = zeros(100,100);
for i = 1:100
    for j = 1:100
        for k = 1:10
            C1(i,j) = C1(i,j) + rates(k,i)*rates(k,j);
        end
        C1(i,j) = C1(i,j)*(sum(rates(:,i))-1)^2;
    end
end

C2 = (sum(sum(rates))-1)^2;

QUBO = Q - C1 - lambda*C2;
%qubo_solver 通常用于解决二次无约束二元优化问题(QUBO)或二次无约束整数规划问题(QUIP)
solution = qubo_solver(qubo_matrix, 'qbsolv', 'timeout', 30, 'num_reads', 100);

。。。略,请下载完整代码

4 下载

查看知乎文章最底部的,或者私信我

zhuanlan.zhihu.com/p/621628668

目录
相关文章
|
3天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
14 3
|
5天前
|
开发框架 供应链 监控
并行开发模型详解:类型、步骤及其应用解析
在现代研发环境中,企业需要在有限时间内推出高质量的产品,以满足客户不断变化的需求。传统的线性开发模式往往拖慢进度,导致资源浪费和延迟交付。并行开发模型通过允许多个开发阶段同时进行,极大提高了产品开发的效率和响应能力。本文将深入解析并行开发模型,涵盖其类型、步骤及如何通过辅助工具优化团队协作和管理工作流。
|
6天前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
10天前
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
68 2
|
12天前
|
机器学习/深度学习 自然语言处理 JavaScript
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
30 2
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
|
6天前
|
设计模式 PHP 开发者
PHP中的设计模式:桥接模式的解析与应用
在软件开发的浩瀚海洋中,设计模式如同灯塔一般,为开发者们指引方向。本文将深入探讨PHP中的一种重要设计模式——桥接模式。桥接模式巧妙地将抽象与实现分离,通过封装一个抽象的接口,使得实现和抽象可以独立变化。本文将阐述桥接模式的定义、结构、优缺点及其应用场景,并通过具体的PHP示例代码展示如何在实际项目中灵活运用这一设计模式。让我们一起走进桥接模式的世界,感受它的魅力所在。
|
5天前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
16 1
|
6天前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
24 2
|
9天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与应用
【10月更文挑战第8天】 在软件开发的浩瀚宇宙中,设计模式如同星辰指引,照亮了代码设计与架构的航道。本文旨在深入探索PHP语境下策略模式(Strategy Pattern)的精髓,不仅剖析其内核原理,还将其融入实战演练,让理论在实践中生根发芽。策略模式,作为解决“如何优雅地封装算法族”的答案,以其独特的灵活性与扩展性,赋予PHP应用以动态变换行为的能力,而无需牵动既有的类结构。
13 2
|
8天前
|
JavaScript 调度
Vue事件总线(EventBus)使用指南:详细解析与实战应用
Vue事件总线(EventBus)使用指南:详细解析与实战应用
22 1

推荐镜像

更多