← 返回编程题库
coding-tier1-capital-ratio-with-deductions中等免费版2000ms未尝试

一级资本充足率:CET1 扣减、AT1 加回与 RWA

Tier-1 Capital Ratio: CET1 Deductions, AT1 Add-back, and RWA

开始编码

实现 solution(common_equity_tier1: float, additional_tier1: float, capital_deductions: list[float], exposures: list[float], risk_weights: list[float]) -> float。监管报送组每日需要 Basel III 一级资本充足率。两个标量输入分别是毛 CET1 资本与毛 AT1 资本(美元);capital_deductions 是 CET1 扣减项的逐项列表(商誉、递延所得税资产等);exposuresrisk_weights 是等长的并列数组,给出每笔资产的 Exposure-at-Default 与 Basel 风险权重。

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

  1. 扣减后净 CET1net_cet1 = common_equity_tier1 - sum(capital_deductions)。扣减项超过 CET1 时可为负——输出带符号值。
  2. 一级资本tier1_capital = net_cet1 + additional_tier1。AT1 是到分子上。net_cet1 + AT1 < 0 时同样可为负。
  3. 风险加权资产合计total_rwa = sum_i exposures[i] * risk_weights[i]。始终非负。
  4. 最终 Tier-1 ratiototal_rwa > 0ratio = tier1_capital / total_rwatotal_rwa == 0tier1_capital > 0 返回 float('inf')total_rwa == 0tier1_capital < 0 返回 float('-inf')total_rwa == 0tier1_capital == 0 返回 float('nan')

solution(100.0, 20.0, [5.0, 3.0], [200.0, 100.0, 50.0], [1.0, 0.5, 0.2]) 返回 0.4307692307692308。该行毛 CET1 为 100、AT1 为 20、两笔扣减合计 8、三笔资产敞口为 20010050,Basel 风险权重分别为 1.0(公司)、0.5(中评级)、0.2(主权)。净 CET1 为 100 - 8 = 92。一级资本为 92 + 20 = 112。RWA 为 200*1.0 + 100*0.5 + 50*0.2 = 260。ratio 为 112 / 260 ~ 0.4308——远高于 Basel 6% 的最低线。

一个扣减项超过 CET1、ratio 为负的算例:solution(80.0, 10.0, [60.0, 50.0], [100.0], [1.0]) 返回 -0.2。净 CET1 为 80 - 110 = -30;一级资本为 -30 + 10 = -20(为负,监管资本已经穿底——典型的极度承压信号)。RWA 为 100。ratio 为 -20 / 100 = -0.2。输出带符号值,不要钳到 0。

边界exposures 为空(无风险资产)且 Tier-1 资本为正时返回 float('inf');全空(CET1 = AT1 = 0、无扣减、无敞口)返回 float('nan')。RWA 为 0 而 Tier-1 资本为负时返回 float('-inf')。Basel 对部分证券化档次明文规定的 1250% 风险权重(在本题中编码为 12.5)会把敞口乘 12.5 而非 1.0,因此高权重资产会主导 RWA 合计。本函数对约束区间内的任何输入都不抛异常;inf、-inf、nan 哨兵就是 RWA 为 0 退化情形下的合同输出。

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

实践背景

Basel III 监管要求每家银行 Tier-1 资本充足率不低于 6%(其中 CET1 子项不低于 4.5%)。该比率衡量核心监管资本——CET1 加 AT1,再扣除商誉、递延所得税资产、无形资产以及其他监管扣除项后——除以风险加权资产。本函数 solution(...) 输出的就是日度 Tier-1 数字,会接到监管资本看板上,用于实时监控离 6% 最低线的距离,并据此对计划中的资本动作(新发、分红、回购)做规模估计。本函数刻意把"扣减作用于 CET1"这条概念约定显式化:尽管 (CET1 + AT1 - sum(deductions)) / RWA(net_CET1 + AT1) / RWA 在本题数值上等价,但这条扣减约定对任何姊妹指标都重要,比如 CET1 ratio 或 CET1 缓冲层。本函数同时锁住的几条不变量——AT1 是加而非减、RWA 是 exposure 乘以 weight 而非相加、ratio 是资本除以 RWA 而非反过来、扣减项可以让分子为负而这个负号本身就是监管信号——正是工业资本计量管线和监管自查里最常发生的方向性错误。一遍线性扫描(一段对扣减项、一段对敞口,都是 O(100),再做一次常数比)就是该日度合计的标准模式。

约束条件

  • 0.0 <= common_equity_tier1 <= 1e9 且 0.0 <= additional_tier1 <= 1e9
  • 0 <= len(capital_deductions) <= 100 且 0.0 <= capital_deductions[i] <= 1e9
  • 0 <= len(exposures) == len(risk_weights) <= 100
  • 0.0 <= exposures[i] <= 1e9 且 0.0 <= risk_weights[i] <= 12.5
  • 输出为带符号 float(扣减项超过 CET1+AT1 时可为负) 或 float('inf')(RWA 为 0 且 Tier-1 > 0) 或 float('-inf')(RWA 为 0 且 Tier-1 < 0) 或 float('nan')(RWA 为 0 且 Tier-1 == 0);浮点比较器使用 rel_tol=1e-9, abs_tol=1e-9

样例

Case 1 · statement-example: healthy bank ratio about 0.43

输入: [100,20,[5,3],[200,100,50],[1,0.5,0.2]]

期望: 0.4307692307692308

净 CET1 = 100 - 8 = 92;Tier-1 = 92 + 20 = 112;RWA = 200*1.0 + 100*0.5 + 50*0.2 = 260;ratio = 112 / 260 ~ 0.4308。

Case 2 · statement-example: deductions exceed CET1 yields negative ratio -0.2

输入: [80,10,[60,50],[100],[1]]

期望: -0.2

净 CET1 = 80 - 110 = -30;Tier-1 = -30 + 10 = -20;RWA = 100*1.0 = 100;ratio = -20 / 100 = -0.2。

Case 3 · visible: empty exposures and positive Tier-1 returns inf

输入: [100,50,[10],[],[]]

期望: "Infinity"

RWA = 0 且 Tier-1 = 100 - 10 + 50 = 140 > 0,返回 float('inf')。

Case 4 · visible: everything zero returns nan

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

期望: "NaN"

Tier-1 = 0 且 RWA = 0,返回 float('nan')。

最近提交

还没有提交记录。

编码区

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

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

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

Case 1 · statement-example: healthy bank ratio about 0.43

输入: [100,20,[5,3],[200,100,50],[1,0.5,0.2]]

期望: 0.4307692307692308

净 CET1 = 100 - 8 = 92;Tier-1 = 92 + 20 = 112;RWA = 200*1.0 + 100*0.5 + 50*0.2 = 260;ratio = 112 / 260 ~ 0.4308。

Case 2 · statement-example: deductions exceed CET1 yields negative ratio -0.2

输入: [80,10,[60,50],[100],[1]]

期望: -0.2

净 CET1 = 80 - 110 = -30;Tier-1 = -30 + 10 = -20;RWA = 100*1.0 = 100;ratio = -20 / 100 = -0.2。

Case 3 · visible: empty exposures and positive Tier-1 returns inf

输入: [100,50,[10],[],[]]

期望: "Infinity"

RWA = 0 且 Tier-1 = 100 - 10 + 50 = 140 > 0,返回 float('inf')。

Case 4 · visible: everything zero returns nan

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

期望: "NaN"

Tier-1 = 0 且 RWA = 0,返回 float('nan')。