← 返回编程题库
coding-stress-impact-on-cet1-ratio中等免费版2000ms未尝试

压力测试对 CET1 充足率的影响:压测后比率与对基准的变动

Stress Impact on CET1 Ratio: Stressed Ratio and Change-from-Baseline

开始编码

实现 solution(baseline_cet1: float, baseline_rwa: float, stress_pnl_loss: float, stress_rwa_increase: float) -> list[float]。风险管理组每日需要压测顶线指标:在不利宏观情景下,压力测试引擎会产生增量资本损失与增量 RWA 通胀(评级迁徙、违约、操作损失等)。给定基准 CET1 资本与基准 RWA,返回压测后的 CET1 充足率以及相对基准的带符号变动。

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

  1. 基准比率baseline_ratio = baseline_cet1 / baseline_rwa,当 baseline_rwa > 0baseline_rwa == 0baseline_cet1 > 0baseline_ratio = float('inf')baseline_rwa == 0baseline_cet1 == 0baseline_ratio = float('nan')
  2. 压测后 CET1stressed_cet1 = baseline_cet1 - stress_pnl_loss。压测损失超过基准 CET1 时可为负——输出带符号值,不要钳到 0。
  3. 压测后 RWAstressed_rwa = baseline_rwa + stress_rwa_increase。始终非负。
  4. 压测后比率stressed_rwa > 0stressed_ratio = stressed_cet1 / stressed_rwastressed_rwa == 0 时:stressed_cet1 > 0 返回 float('inf')< 0 返回 float('-inf')== 0 返回 float('nan')
  5. 对基准的变动change = stressed_ratio - baseline_ratio,带符号差。两个 ratio 中任一为 inf/-inf/NaN 时,按 IEEE-754:inf - inf = NaNinf - 有限 = inf有限 - inf = -infNaN - 任何值 = NaN。不要写自定义分支——直接做减法。

返回 [stressed_ratio, change]

solution(100.0, 1000.0, 20.0, 200.0) 返回 [0.06666666666666667, -0.03333333333333334]。该行基准 CET1 = 100、基准 RWA = 1000,基准 ratio = 0.10。压测情景下资本损失 20、RWA 增量 200。压测后 CET1 = 100 - 20 = 80;压测后 RWA = 1000 + 200 = 1200;压测后 ratio = 80 / 1200 ~ 0.0667;change = 0.0667 - 0.10 ~ -0.0333。负值就是上送监管的头条指标——压测后 CET1 充足率下降约 333 个基点。

一个压测损失超过 CET1、压测后 ratio 为负的算例:solution(50.0, 500.0, 60.0, 0.0) 返回 [-0.02, -0.12]。基准 ratio = 50/500 = 0.10。压测后 CET1 = 50 - 60 = -10(为负——压测下核心资本被打穿);压测后 RWA = 500;压测后 ratio = -10/500 = -0.02;change = -0.02 - 0.10 = -0.12。输出带符号值,不要钳到 0——负值压测比率正是监管干预信号,也是题目要求的可观测输出。

边界:零压力(stress_pnl_loss = stress_rwa_increase = 0)时返回 [baseline_ratio, 0.0]。基准 RWA 为 0 且 CET1 > 0 时 baseline_ratio = +inf;若压测后 RWA 也为 0,输出 [+inf, NaN](因为 inf - inf = NaN)。基准 RWA 为 0、压测后 RWA 为正时,baseline_ratio = inf、压测后 ratio 有限,change = 有限 - inf = -infstress_pnl_loss == baseline_cet1stressed_cet1 = 0、压测后 ratio = 0,因此 change = -baseline_ratio(恰好抹掉基准比率)。全零输入返回 [NaN, NaN]。对约束区间内的任何输入函数都不抛异常。

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

实践背景

在美国 CCAR 与欧洲 EBA 压力测试周期中,每家受监管银行都要在基准与不利宏观情景下计算 CET1 充足率。风险管理压测看板上的头条指标就是压测后 CET1 充足率与相对基准的变动——正是 solution(...) 输出的两元组。上游压测引擎给出两个标量冲击:stress_pnl_loss(情景下信用、市场、操作三类风险叠加的增量资本损失)与 stress_rwa_increase(评级迁徙、增长假设与操作风险 RWA 调整带来的增量 RWA)。本函数把监管自查永远会校的几条方向性不变量显式化:压测损失对 CET1 做减法(不是加法)、压测 RWA 增量加到分母(不是减法)、ratio 是资本除以 RWA(不是倒数)、change 是后减前(不是前减后——change 带符号、典型为负)。压测后 CET1 为负的分支正是监管重点关注的极度承压场景,所以函数不把它钳到 0;负的压测比率本身就是信号。本题与基准 Tier-1 姊妹题、多债务人 EL 压测姊妹题在风险看板上并列,但定位不同:本题是逐银行的资本充足率压测,不是逐资产的滚动汇总。两次除法加一次减法,构成日度压测影响的标准 O(1) 计算。

约束条件

  • 0.0 <= baseline_cet1 <= 1e10 且 0.0 <= baseline_rwa <= 1e11
  • 0.0 <= stress_pnl_loss <= 1e10 且 0.0 <= stress_rwa_increase <= 1e10
  • 输出为长度 2 的 `list[float]`:`[stressed_ratio, change]`。每一项可为带符号 float(压测损失超过 CET1 时分子为负、压测后 ratio 低于基准时 change 为负)或 `float('inf')` / `float('-inf')` / `float('nan')`(对应上文 RWA 为 0 的退化情形)
  • 浮点比较器使用 rel_tol=1e-9, abs_tol=1e-9;NaN 等于 NaN;位置有序(索引 0 是 stressed_ratio,索引 1 是 change)

样例

Case 1 · statement-example: mild stress drops CET1 ratio from 0.10 to ~0.0667

输入: [100,1000,20,200]

期望: [0.06666666666666667,-0.03333333333333334]

baseline_ratio = 100/1000 = 0.1;stressed_cet1 = 100-20 = 80;stressed_rwa = 1000+200 = 1200;stressed_ratio = 80/1200 ~ 0.0667;change ~ -0.0333。

Case 2 · statement-example: stress loss exceeds CET1 yields negative stressed ratio

输入: [50,500,60,0]

期望: [-0.02,-0.12000000000000001]

baseline_ratio = 50/500 = 0.1;stressed_cet1 = 50-60 = -10;stressed_rwa = 500;stressed_ratio = -10/500 = -0.02;change = -0.02 - 0.1 = -0.12。

Case 3 · visible: zero stress leaves ratio unchanged with zero delta

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

期望: [0.2,0]

无任何冲击;stressed_ratio 等于 baseline_ratio = 0.2;change = 0。

Case 4 · visible: zero baseline RWA with positive CET1 yields inf baseline; inf-inf=NaN change

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

期望: ["Infinity","NaN"]

baseline_rwa = 0 且 baseline_cet1 > 0 时 baseline_ratio = +inf;stressed_rwa = 0 同样得 +inf;inf - inf = NaN。

最近提交

还没有提交记录。

编码区

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

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

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

Case 1 · statement-example: mild stress drops CET1 ratio from 0.10 to ~0.0667

输入: [100,1000,20,200]

期望: [0.06666666666666667,-0.03333333333333334]

baseline_ratio = 100/1000 = 0.1;stressed_cet1 = 100-20 = 80;stressed_rwa = 1000+200 = 1200;stressed_ratio = 80/1200 ~ 0.0667;change ~ -0.0333。

Case 2 · statement-example: stress loss exceeds CET1 yields negative stressed ratio

输入: [50,500,60,0]

期望: [-0.02,-0.12000000000000001]

baseline_ratio = 50/500 = 0.1;stressed_cet1 = 50-60 = -10;stressed_rwa = 500;stressed_ratio = -10/500 = -0.02;change = -0.02 - 0.1 = -0.12。

Case 3 · visible: zero stress leaves ratio unchanged with zero delta

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

期望: [0.2,0]

无任何冲击;stressed_ratio 等于 baseline_ratio = 0.2;change = 0。

Case 4 · visible: zero baseline RWA with positive CET1 yields inf baseline; inf-inf=NaN change

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

期望: ["Infinity","NaN"]

baseline_rwa = 0 且 baseline_cet1 > 0 时 baseline_ratio = +inf;stressed_rwa = 0 同样得 +inf;inf - inf = NaN。