← 返回编程题库
coding-gsib-systemic-importance-score中等免费版2000ms未尝试

G-SIB 系统重要性评分与可替代性上限

G-SIB Systemic-Importance Score with Substitutability Cap

开始编码

实现 solution(size: float, size_total: float, interconnectedness: float, interconnectedness_total: float, substitutability: float, substitutability_total: float, complexity: float, complexity_total: float, cross_jurisdictional: float, cross_jurisdictional_total: float) -> float。监管报送组每日需要 Basel G-SIB 系统重要性评分(单位:基点)。十个输入是五对 (bank_value, system_total),对应 G-SIB 五个指标类别:规模(size)、关联度(interconnectedness)、可替代性(substitutability)、复杂度(complexity)、跨境业务(cross_jurisdictional)。

输出 score 由如下可观测公式定义:

  1. 逐类别基点份额:对每个类别计算 share_bps_i = (bank_value_i / system_total_i) * 10000。这是本行在该类别上占全系统的份额,单位为基点。
  2. 可替代性封顶(除后封、仅此一类):若 share_bps_substitutability > 500,钳到 500.0。其余四类不封顶;恰好等于 500 不动。
  3. score(等权平均)score_bps = (size_bps + interconnectedness_bps + substitutability_bps_capped + complexity_bps + cross_jurisdictional_bps) / 5。五个类别每类权重 1/5
  4. 零分母哨兵:任何一个 *_total 等于 0.0,返回 float('nan')。本函数不抛 ZeroDivisionError

solution(50.0, 1000.0, 30.0, 1000.0, 80.0, 1000.0, 40.0, 1000.0, 60.0, 1000.0) 返回 460.0。每类份额按 (value / 1000) * 10000 计算:size 500、interconnectedness 300、substitutability 800、complexity 400、cross-jurisdictional 600。substitutability 800 > 500 钳到 500。score = (500 + 300 + 500 + 400 + 600) / 5 = 2300 / 5 = 460.0。封顶比不封顶((500 + 300 + 800 + 400 + 600) / 5 = 520)少 60 bps。

一个所有类别均为 100% 份额的算例:solution(1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0) 返回 8100.0。每个原始份额都是 10000 bps;substitutability 被钳到 500;score = (10000 + 10000 + 500 + 10000 + 10000) / 5 = 40500 / 5 = 8100.0。当每个 bank 值都不超过对应 system_total 时,这是 score 的最大值;若 bank 值大于系统总量(口径不一致),仍按公式计算,未封顶类别的份额可超过 10000,从而 score 可能超过 8100

边界:所有 bank 值为 0、总量为正时返回 0.0(本行对任何类别都没有贡献)。substitutability 份额恰好等于 500 时位于封顶边界,触发钳制(封顶是单边严格大于)。任意一个 *_total 等于 0.0 返回 float('nan')——系统口径未定义、所占份额也无意义。某类别 bank 值与该类别总量相等时该类别份额为 10000 bps(若是 substitutability 则为封顶后的 500)。

实现细节由 stubs/stub.py 提供。

实践背景

在 Basel Committee 的全球系统重要性银行(G-SIB)框架下,监管者每年为每家大型银行计算一个基点制的系统重要性评分。该评分对五个等权指标类别——规模、关联度、可替代性/金融基础设施、复杂度、跨境业务——取均值,每个指标都是该行在全球大型银行样本上报口径中所占的份额。可替代性类别封顶 500 bps,目的是让某家在单一服务(托管、支付、承销)上独大的银行不能仅凭这一类就把分数抬到很高。score 进而映射到桶(日常使用为 1~4 桶;第 5 桶是空置的威慑桶),桶位决定该行在 Basel III 标准最低线之上还要额外持有的 CET1 资本附加费。本函数 solution(...) 输出的就是基点制 score,下游代码再把 score 映射到桶并算附加费。本函数刻意锁住的几条概念约定——封顶在除完之后、且只对 substitutability 生效;五类等权;score 是均值不是总和;单位是基点不是分数——正是会把桶位算错、从而把资本要求算错的实现性错误。一遍 O(1) 计算(五次除、一次封、一次均值)就是该日度看板的标准合计模式。

约束条件

  • 0.0 <= size, interconnectedness, substitutability, complexity, cross_jurisdictional <= 1e12
  • 0.0 <= size_total, interconnectedness_total, substitutability_total, complexity_total, cross_jurisdictional_total <= 1e14
  • 输出为按上述公式计算的基点 float 或 float('nan')(任一系统总量为 0 时)。当每个正的 bank 值都不超过对应 system_total 时,score 落在 [0, 8100](最大值 8100 由 substitutability 钳到 500、其余四类各取 10000 得到);若输入存在 bank_value > system_total(数据口径不一致),仍按公式计算,未封顶类别的份额可超过 10000、最终 score 也可能超过 8100,按原样返回。浮点比较器使用 rel_tol=1e-9, abs_tol=1e-9。

样例

Case 1 · statement-example: cap binds on substitutability gives 460 bps

输入: [50,1000,30,1000,80,1000,40,1000,60,1000]

期望: 460

shares = 500, 300, 800, 400, 600 bps;substitutability 800 > 500 钳到 500;score = (500+300+500+400+600)/5 = 460。

Case 2 · statement-example: all 100 percent shares give max score 8100 bps

输入: [1000,1000,1000,1000,1000,1000,1000,1000,1000,1000]

期望: 8100

每类原始份额 10000 bps;substitutability 钳到 500;score = (10000+10000+500+10000+10000)/5 = 8100。

Case 3 · visible: zero substitutability_total returns nan

输入: [50,1000,30,1000,80,0,40,1000,60,1000]

期望: "NaN"

substitutability_total = 0,返回 float('nan')。

Case 4 · visible: all bank values zero gives score zero

输入: [0,1000,0,1000,0,1000,0,1000,0,1000]

期望: 0

每类份额都是 0,score = 0。

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

加载编辑器...
计时0:00

默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。

Case 1 · statement-example: cap binds on substitutability gives 460 bps

输入: [50,1000,30,1000,80,1000,40,1000,60,1000]

期望: 460

shares = 500, 300, 800, 400, 600 bps;substitutability 800 > 500 钳到 500;score = (500+300+500+400+600)/5 = 460。

Case 2 · statement-example: all 100 percent shares give max score 8100 bps

输入: [1000,1000,1000,1000,1000,1000,1000,1000,1000,1000]

期望: 8100

每类原始份额 10000 bps;substitutability 钳到 500;score = (10000+10000+500+10000+10000)/5 = 8100。

Case 3 · visible: zero substitutability_total returns nan

输入: [50,1000,30,1000,80,0,40,1000,60,1000]

期望: "NaN"

substitutability_total = 0,返回 float('nan')。

Case 4 · visible: all bank values zero gives score zero

输入: [0,1000,0,1000,0,1000,0,1000,0,1000]

期望: 0

每类份额都是 0,score = 0。