压力测试对 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 充足率以及相对基准的带符号变动。
输出由如下可观测公式定义:
- 基准比率:
baseline_ratio = baseline_cet1 / baseline_rwa,当baseline_rwa > 0。baseline_rwa == 0且baseline_cet1 > 0时baseline_ratio = float('inf');baseline_rwa == 0且baseline_cet1 == 0时baseline_ratio = float('nan')。 - 压测后 CET1:
stressed_cet1 = baseline_cet1 - stress_pnl_loss。压测损失超过基准 CET1 时可为负——输出带符号值,不要钳到 0。 - 压测后 RWA:
stressed_rwa = baseline_rwa + stress_rwa_increase。始终非负。 - 压测后比率:
stressed_rwa > 0时stressed_ratio = stressed_cet1 / stressed_rwa。stressed_rwa == 0时:stressed_cet1 > 0返回float('inf'),< 0返回float('-inf'),== 0返回float('nan')。 - 对基准的变动:
change = stressed_ratio - baseline_ratio,带符号差。两个 ratio 中任一为inf/-inf/NaN时,按 IEEE-754:inf - inf = NaN、inf - 有限 = inf、有限 - inf = -inf、NaN - 任何值 = 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 = -inf。stress_pnl_loss == baseline_cet1 时 stressed_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 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
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。