在置信度 alpha 下的 Vasicek ASRF 资本因子(Basel IRB)
Vasicek ASRF Capital Factor at Confidence Level Alpha (Basel IRB)
开始编码实现 solution(z_unconditional_pd: float, asset_correlation: float, z_alpha: float) -> float。信贷风险团队对每个对手方、每个监管置信度都调用一次此函数,把对手方的无条件违约阈值与银行选定的资产相关性,转换成在置信度 alpha 下的 Vasicek ASRF 资本因子。这就是 Basel IRB 资本公式 capital = K * LGD * EAD 中的 K(按每单位 EAD 计算;LGD 与 EAD 的缩放在上游完成):在渐近单一风险因子(ASRF)框架下,组合条件违约率的 (1 - alpha) 分位。它与条件 PD 姐妹题在结构上对称,但参数化方式不同——这里以置信度为参数,而非已实现的宏观抽样。
输入:
z_unconditional_pd—— 对手方的标准化违约触发阈值,等于Phi^-1(unconditional_pd)。调用方已经对无条件 PD 做过反正态变换;本函数只消费这个标量阈值(带符号;低 PD 时为负)。按约束区间,输入非正(PD <= 0.5)。asset_correlation—— 参数R,落在[0.0, 1.0]:对手方资产收益与系统因子相关系数的平方。R越大,对手方对宏观态越敏感。R = 1.0是退化端点,由下面的 NaN 哨兵处理。z_alpha—— 选定尾部置信度alpha的置信 z-scorePhi^-1(alpha)。在alpha > 0.5时为正。例如:z_alpha ≈ 3.090对应 Basel IRB 99.9% 资本分位,z_alpha ≈ 2.326对应alpha = 0.99,z_alpha ≈ 1.645对应alpha = 0.95。
输出由如下可观测公式定义:
- 参数:
arg = (z_unconditional_pd + sqrt(asset_correlation) * z_alpha) / sqrt(1 - asset_correlation)。 - 标准正态 CDF:
capital_factor = Phi(arg),其中Phi(x) = 0.5 * (1 + erf(x / sqrt(2)))。
退化模型的哨兵:
- 若
asset_correlation == 1.0,分母sqrt(1 - R)为零,资本因子数学上未定义。返回float('nan')。
只要 asset_correlation < 1.0,分母严格为正,除法良定义。输出是 [0, 1] 内的概率。
例
solution(-3.0, 0.20, 3.09) 返回约 0.0352175818403454。对手方的无条件 PD 为 Phi(-3.0) ≈ 0.135%;资产相关性 R = 0.20;置信 z 为 z_alpha = 3.09(alpha = 0.999,即 Basel IRB 资本分位)。参数为 (-3.0 + sqrt(0.20) * 3.09) / sqrt(0.80) = (-3.0 + 1.382) / 0.894 = -1.810,Phi(-1.810) ≈ 0.0352 = 3.52%。99.9% 分位资本因子约为无条件 PD 的 26 倍:Vasicek 尾部放大被压缩进了一个闭式表达。
标准 Basel IRB 单元算例:solution(-2.326347874040841, 0.20, 3.090232306167813) 返回约 0.14552526613107125。PD = 1%(典型中等级对手方)、R = 0.20(Basel 风格大型企业资产相关性)、alpha = 0.999。参数为 (-2.326 + sqrt(0.20) * 3.090) / sqrt(0.80) = -1.058,Phi(-1.058) ≈ 14.55%。99.9% 尾部资本因子约为无条件 PD 的 14.5 倍;乘以 LGD 与 EAD 后即为对手方 IRB 资本要求(再叠加期限调整)。
R = 1 哨兵算例:solution(-2.326347874040841, 1.0, 3.090232306167813) 返回 float('nan')。资产相关性达到了退化的上限;分母 sqrt(1 - 1) = 0,资本因子未定义。返回 NaN——不要返回 0.0,不要抛异常。
R = 0 吸收边界算例:solution(-2.326347874040841, 0.0, 3.090232306167813) 返回约 0.01。R = 0 时 sqrt(R) * z_alpha = 0、sqrt(1 - R) = 1,公式塌缩为 Phi(z_unconditional_pd) = Phi(-2.326) = 1%——也就是无条件 PD。系统因子完全不起作用,因为零资产相关性下对手方资产收益与宏观因子独立。这是"无穷颗粒度、零相关"极限:系统资本恰好等于平均 PD。
较低置信度算例:solution(-2.326347874040841, 0.20, 1.6448536269514722) 返回约 0.0377。同一对手方(PD=1%)、同样 R=0.20,但 alpha=0.95(z_alpha ≈ 1.645)而非 0.999。参数为 (-2.326 + sqrt(0.20) * 1.645) / sqrt(0.80) = -1.778,Phi(-1.778) ≈ 3.77%。资本因子相对 0.999 单元下降约 4 倍——尾部置信度的代价正是 Vasicek 公式带来的成倍资本上调。
边界:asset_correlation == 1.0 返回 NaN(退化;完全协同)。asset_correlation == 0.0 无论 z_alpha 取多少都返回无条件 PD。z_unconditional_pd = 0(PD = 50%)配合 R = 0.5 产生恒等式 arg = z_alpha,因此 capital_factor = Phi(z_alpha) = alpha,恰好——一个闭式正确性快检。z_unconditional_pd 很负时,资本因子保持很小,除非 z_alpha 也很大。本函数对约束区间内任何输入都不抛异常;NaN 哨兵是 R = 1 情形的合同输出。
实现细节由 stubs/stub.py 提供。
实践背景
Vasicek 单因子高斯 Copula 模型——由 Oldrich Vasicek 提出,被采纳为 Basel II/III IRB 资本框架的解析骨架——把每个对手方的标准化资产收益分解为系统成分 sqrt(R) * M 和特异成分 sqrt(1 - R) * eps_i,其中 M 与 eps_i 是独立的标准正态。当资产收益跌破阈值 z_unconditional_pd = Phi^-1(unconditional_pd) 时违约。在渐近单一风险因子(ASRF)极限下——无穷多对手方,每个无穷小份额——在已实现系统因子 M = m 下的条件违约率为 Phi((z_unconditional_pd - sqrt(R) * m) / sqrt(1 - R))。组合在置信度 alpha 下的资本要求即为该条件违约率的 (1 - alpha) 分位;由对 m 的单调性,该分位在系统因子取 (1 - alpha) 分位时达到;代入 m = -z_alpha(其中 z_alpha = Phi^-1(alpha) 为正)化简,得到 ASRF 资本因子 K(alpha) = Phi((z_unconditional_pd + sqrt(R) * z_alpha) / sqrt(1 - R))。这正是本原语计算的公式。监管设 alpha = 0.999(IRB 99.9% 资本分位,即千年一遇损失),并把得到的 K 喂入 capital = K * LGD * EAD * MaturityAdjustment,得到逐对手方的资本要求;同一原语也用于较低置信度(alpha = 0.99 或 0.95)的经济资本单元、ICAAP 情景及压力测试阈值。本原语刻意把以下几条实现陷阱显式化——分子是加 sqrt(R) * z_alpha(与条件 PD 姐妹题相比的符号翻转,因为那里宏观抽样 M 是带符号被减去的)、分母是 sqrt(1 - R) 而非 sqrt(R)(特异标准差,不是系统)、输出是 Phi 而非 erf([0, 1] 内的概率,不是 [-1, 1] 内的值)、输入是反正态阈值与反正态置信 z,而不是 PD 或 alpha 本身——这些正是生产信贷风控回归测试反复抓到的方向性与维度错误。纯 O(1) 实现(两次开方、一次乘、一次加、一次除、一次 erf、一次平移缩放)就是标准原语;面对几百万对手方的生产 IRB 引擎按同一递推式做向量广播,但每次调用的合同完全相同。与条件 PD-给定-系统因子姐妹题的区别在于:本题以置信度为参数,而非已实现的具体宏观抽样。
约束条件
- -5.0 <= z_unconditional_pd <= 0.0
- 0.0 <= asset_correlation <= 1.0
- 0.5 <= z_alpha <= 5.0
- 输出:float —— 资本因子,落在 [0, 1],或当 asset_correlation == 1.0 时为 NaN
- 浮点比较器使用 rel_tol=1e-9, abs_tol=1e-9, nan_equals_nan=true
样例
Case 1 · statement-example: 0.1% PD R=0.20 alpha=0.999 (Basel-style)
输入: [-3,0.2,3.09]
期望: 0.0352175818403454
z = -3.0(PD ≈ 0.135%),R = 0.20,z_alpha = 3.09(alpha = 0.999)。arg = (-3.0 + sqrt(0.20)*3.09)/sqrt(0.80) ≈ -1.809,Phi ≈ 3.52%。99.9% 分位资本因子约为无条件 PD 的 26 倍。
Case 2 · statement-example: Basel IRB 1% PD R=0.20 alpha=0.999
输入: [-2.326347874040841,0.2,3.090232306167813]
期望: 0.14552526613107125
标准 Basel IRB 单元:PD = 1%,R = 0.20,alpha = 0.999。z = Phi^-1(0.01) ≈ -2.326,z_alpha = Phi^-1(0.999) ≈ 3.090。arg = (-2.326 + sqrt(0.20)*3.090)/sqrt(0.80) ≈ -1.058,Phi ≈ 14.55%。IRB 99.9% 尾部资本因子约为无条件 PD 的 14.5 倍。
Case 3 · statement-example: R=1 returns NaN sentinel
输入: [-2.326347874040841,1,3.090232306167813]
期望: "NaN"
asset_correlation = 1.0 -> sqrt(1 - R) = 0,模型退化(完全协同),资本因子未定义 -> NaN。
Case 4 · typical: 1% PD R=0.20 alpha=0.99
输入: [-2.326347874040841,0.2,2.3263478740408408]
期望: 0.07525078943549607
同一对手方(PD=1%、R=0.20)在 alpha=0.99 而非 0.999。arg ≈ -1.439,Phi ≈ 7.5%。尾部置信度更低 -> 资本因子更小。
Case 5 · typical: 1% PD R=0.20 alpha=0.95
输入: [-2.326347874040841,0.2,1.6448536269514722]
期望: 0.03766013284479769
同样 PD=1%、R=0.20,alpha=0.95。arg = (-2.326 + sqrt(0.20)*1.645)/sqrt(0.80) ≈ -1.778,Phi ≈ 3.77%。
Case 6 · typical: 1% PD R=0.20 alpha=0.69 (z_alpha=0.5 sub-tail)
输入: [-2.326347874040841,0.2,0.5]
期望: 0.009363127405697558
同样 PD=1%、R=0.20,低置信度(z_alpha = 0.5,alpha ≈ 0.69)。arg ≈ -2.350,Phi ≈ 0.94%——接近但略低于 1% 基准。
Case 7 · typical: 0.1% PD R=0.30 alpha=0.999 (high-grade Basel)
输入: [-3.090232306167813,0.3,3.090232306167813]
期望: 0.04741002826550367
投资级对手方:PD=0.1%、R=0.30(Basel 高等级公司风格),alpha=0.999。arg ≈ -1.671,Phi ≈ 4.74%。尾部资本因子约为无条件 PD 的 47 倍。
Case 8 · typical: 5% PD R=0.15 alpha=0.999
输入: [-1.6448536269514722,0.15,3.090232306167813]
期望: 0.31350590793678823
中等级对手方 PD=5%、R=0.15、alpha=0.999。arg = (-1.645 + sqrt(0.15)*3.090)/sqrt(0.85) ≈ -0.486,Phi ≈ 31.35%。资本因子约为无条件 PD 的 6.3 倍。
Case 9 · typical: 10% PD R=0.10 alpha=0.999 (high-yield)
输入: [-1.2815515655446004,0.1,3.090232306167813]
期望: 0.37418229587186175
高收益对手方:PD=10%、R=0.10、alpha=0.999。arg ≈ (-1.282 + sqrt(0.10)*3.090)/sqrt(0.90) ≈ -0.321,Phi ≈ 37.4%。低 R 压缩尾部放大(约 3.7 倍无条件)。
Case 10 · typical: 2% PD R=0.24 alpha=0.999 (regulatory R)
输入: [-2.053748910631823,0.24,3.090232306167813]
期望: 0.2678755331614806
PD=2% 对手方,监管风格 R=0.24,alpha=0.999。arg ≈ -0.619,Phi ≈ 26.79%。资本因子约为无条件 PD 的 13.4 倍。
Case 11 · boundary: R=0 returns unconditional PD irrespective of z_alpha
输入: [-2.326347874040841,0,3.090232306167813]
期望: 0.010000000000000009
R = 0 -> sqrt(0)*z_alpha = 0 且 sqrt(1-0) = 1,所以 capital_factor = Phi(z_pd) = 无条件 PD = 1%。系统因子通道完全关闭。
Case 12 · boundary: R=0 with low alpha=0.69 still returns Phi(z)
输入: [-1.6448536269514722,0,0.5]
期望: 0.050000000000000044
R=0 完全吸收:无论 z_alpha = 0.5 与否,capital_factor = Phi(-1.645) = 5%。
Case 13 · boundary: z=0 (PD=50%) R=0.5 z_alpha=0.5 gives Phi(sqrt(0.5))
输入: [0,0.5,0.5]
期望: 0.6914624612740131
z = 0(PD=50%),R=0.5,z_alpha=0.5。arg = (0 + sqrt(0.5)*0.5)/sqrt(0.5) = 0.5,Phi(0.5) ≈ 69.15%。
Case 14 · boundary: z=0 R=0.5 alpha=0.95 returns exactly 0.95
输入: [0,0.5,1.6448536269514722]
期望: 0.95
z=0、R=0.5:arg = sqrt(0.5)*z_alpha/sqrt(0.5) = z_alpha。Phi(1.645) = 0.95,恰好。漂亮的恒等式。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · statement-example: 0.1% PD R=0.20 alpha=0.999 (Basel-style)
输入: [-3,0.2,3.09]
期望: 0.0352175818403454
z = -3.0(PD ≈ 0.135%),R = 0.20,z_alpha = 3.09(alpha = 0.999)。arg = (-3.0 + sqrt(0.20)*3.09)/sqrt(0.80) ≈ -1.809,Phi ≈ 3.52%。99.9% 分位资本因子约为无条件 PD 的 26 倍。
Case 2 · statement-example: Basel IRB 1% PD R=0.20 alpha=0.999
输入: [-2.326347874040841,0.2,3.090232306167813]
期望: 0.14552526613107125
标准 Basel IRB 单元:PD = 1%,R = 0.20,alpha = 0.999。z = Phi^-1(0.01) ≈ -2.326,z_alpha = Phi^-1(0.999) ≈ 3.090。arg = (-2.326 + sqrt(0.20)*3.090)/sqrt(0.80) ≈ -1.058,Phi ≈ 14.55%。IRB 99.9% 尾部资本因子约为无条件 PD 的 14.5 倍。
Case 3 · statement-example: R=1 returns NaN sentinel
输入: [-2.326347874040841,1,3.090232306167813]
期望: "NaN"
asset_correlation = 1.0 -> sqrt(1 - R) = 0,模型退化(完全协同),资本因子未定义 -> NaN。
Case 4 · typical: 1% PD R=0.20 alpha=0.99
输入: [-2.326347874040841,0.2,2.3263478740408408]
期望: 0.07525078943549607
同一对手方(PD=1%、R=0.20)在 alpha=0.99 而非 0.999。arg ≈ -1.439,Phi ≈ 7.5%。尾部置信度更低 -> 资本因子更小。
Case 5 · typical: 1% PD R=0.20 alpha=0.95
输入: [-2.326347874040841,0.2,1.6448536269514722]
期望: 0.03766013284479769
同样 PD=1%、R=0.20,alpha=0.95。arg = (-2.326 + sqrt(0.20)*1.645)/sqrt(0.80) ≈ -1.778,Phi ≈ 3.77%。
Case 6 · typical: 1% PD R=0.20 alpha=0.69 (z_alpha=0.5 sub-tail)
输入: [-2.326347874040841,0.2,0.5]
期望: 0.009363127405697558
同样 PD=1%、R=0.20,低置信度(z_alpha = 0.5,alpha ≈ 0.69)。arg ≈ -2.350,Phi ≈ 0.94%——接近但略低于 1% 基准。
Case 7 · typical: 0.1% PD R=0.30 alpha=0.999 (high-grade Basel)
输入: [-3.090232306167813,0.3,3.090232306167813]
期望: 0.04741002826550367
投资级对手方:PD=0.1%、R=0.30(Basel 高等级公司风格),alpha=0.999。arg ≈ -1.671,Phi ≈ 4.74%。尾部资本因子约为无条件 PD 的 47 倍。
Case 8 · typical: 5% PD R=0.15 alpha=0.999
输入: [-1.6448536269514722,0.15,3.090232306167813]
期望: 0.31350590793678823
中等级对手方 PD=5%、R=0.15、alpha=0.999。arg = (-1.645 + sqrt(0.15)*3.090)/sqrt(0.85) ≈ -0.486,Phi ≈ 31.35%。资本因子约为无条件 PD 的 6.3 倍。
Case 9 · typical: 10% PD R=0.10 alpha=0.999 (high-yield)
输入: [-1.2815515655446004,0.1,3.090232306167813]
期望: 0.37418229587186175
高收益对手方:PD=10%、R=0.10、alpha=0.999。arg ≈ (-1.282 + sqrt(0.10)*3.090)/sqrt(0.90) ≈ -0.321,Phi ≈ 37.4%。低 R 压缩尾部放大(约 3.7 倍无条件)。
Case 10 · typical: 2% PD R=0.24 alpha=0.999 (regulatory R)
输入: [-2.053748910631823,0.24,3.090232306167813]
期望: 0.2678755331614806
PD=2% 对手方,监管风格 R=0.24,alpha=0.999。arg ≈ -0.619,Phi ≈ 26.79%。资本因子约为无条件 PD 的 13.4 倍。
Case 11 · boundary: R=0 returns unconditional PD irrespective of z_alpha
输入: [-2.326347874040841,0,3.090232306167813]
期望: 0.010000000000000009
R = 0 -> sqrt(0)*z_alpha = 0 且 sqrt(1-0) = 1,所以 capital_factor = Phi(z_pd) = 无条件 PD = 1%。系统因子通道完全关闭。
Case 12 · boundary: R=0 with low alpha=0.69 still returns Phi(z)
输入: [-1.6448536269514722,0,0.5]
期望: 0.050000000000000044
R=0 完全吸收:无论 z_alpha = 0.5 与否,capital_factor = Phi(-1.645) = 5%。
Case 13 · boundary: z=0 (PD=50%) R=0.5 z_alpha=0.5 gives Phi(sqrt(0.5))
输入: [0,0.5,0.5]
期望: 0.6914624612740131
z = 0(PD=50%),R=0.5,z_alpha=0.5。arg = (0 + sqrt(0.5)*0.5)/sqrt(0.5) = 0.5,Phi(0.5) ≈ 69.15%。
Case 14 · boundary: z=0 R=0.5 alpha=0.95 returns exactly 0.95
输入: [0,0.5,1.6448536269514722]
期望: 0.95
z=0、R=0.5:arg = sqrt(0.5)*z_alpha/sqrt(0.5) = z_alpha。Phi(1.645) = 0.95,恰好。漂亮的恒等式。