先说结论:巴塞尔交通灯是把统计检验翻译成监管处罚的转换器:250 个交易日内 99% VaR 突破 0–4 次进绿区(资本乘数 3.0),5–9 次进黄区(乘数升到 3.4–3.85),≥10 次进红区(乘数 4.0 并强制整改)。这套分区的统计基础是 Binomial(250, 1%):模型正确时落入绿区的概率是 89.2%,误入红区的概率只有 0.025%。但它的功效弱得诚实——真实风险被低估一倍(真实突破率 2%)的模型,仍有 43.9% 的概率安然待在绿区。交通灯不是精密仪器,是监管者在”错杀好模型”和”放过坏模型”之间的一次公开定价。
从统计检验到资本处罚#
Kupiec POF 和 Christoffersen 独立性检验回答的是学术问题:“模型与数据相容吗?“监管者面对的问题更粗糙也更现实:全球几千家银行每家都用内部模型计算市场风险资本,监管者既没有能力审查每个模型的数学细节,也不能接受”p 值 0.06 所以不拒绝”这种模糊结论——他需要一个机械的、可执行的、当事银行无法争辩的规则。
1996 年巴塞尔市场风险修正案给出的方案就是交通灯:每年数一次突破次数,查表定区,按区定资本乘数。市场风险资本要求为:
其中乘数 由交通灯分区决定。模型每多突破一次,全行的市场风险资本就贵一档——统计缺陷直接变成资金成本。
分区的统计逻辑:Binomial(250, 1%)#
99% VaR 模型如果正确,250 个交易日内的突破次数 ,期望 2.5 次。分区边界的选取直接读累积分布:
from scipy import stats
T, p = 250, 0.01
print(stats.binom.cdf(4, T, p)) # P(X<=4) = 0.892 → 绿区覆盖
print(stats.binom.cdf(9, T, p)) # P(X<=9) = 0.99975
print(1 - stats.binom.cdf(9, T, p)) # P(X>=10) = 0.00025 → 误入红区python
- 绿区(0–4 次):正确模型有 89.2% 概率落在这里。监管不采取行动。
- 黄区(5–9 次):正确模型误入的概率约 10.8%。突破次数”可疑但不确凿”,乘数按次数阶梯上调,监管可要求解释每次突破的原因。
- 红区(≥10 次):正确模型误入的概率仅 0.025%——到了这里几乎不可能是运气,模型”几乎确凿地”有缺陷。乘数顶格 4.0,且监管通常强制回到标准法或要求重建模型。
注意红区阈值的设计哲学:宁可把第一类错误压到万分之二点五,也要保证红区判决无可争辩。代价是黄区成了一个巨大的灰色地带——这是刻意的:黄区把举证责任转移给银行(“请解释这 7 次突破”),而不是让监管者证明模型有错。
资本乘数阶梯:模型质量的价格表#
黄区内部按次数细分,乘数从 3.4 爬到 3.85:
| 突破次数 | 分区 | 乘数 k |
|---|---|---|
| 0–4 | 绿 | 3.00 |
| 5 | 黄 | 3.40 |
| 6 | 黄 | 3.50 |
| 7 | 黄 | 3.65 |
| 8 | 黄 | 3.75 |
| 9 | 黄 | 3.85 |
| ≥10 | 红 | 4.00 |

从 3.0 到 4.0 意味着市场风险资本上升 33%。对一家 VaR 均值 5 亿的交易账簿,这是 5 亿资本占用的差距——按 10% 的股权成本算,每年 5000 万的真金白银。这个设计的激励含义值得玩味:它给了银行一个用资本换模型宽松度的选择。故意报高 VaR(保守模型)永远待在绿区但日常资本占用高;报低 VaR 日常资本便宜但突破多了乘数惩罚。巴塞尔委员会 1996 年的原文说得直白:乘数的存在就是为了让”低报 VaR”变得无利可图。
功效分析:交通灯有多容易被骗过#
关键问题:一个真实覆盖率不是 1% 而是 q 的坏模型,落入各区的概率是多少?

三个刻度值得记住:
- q = 2%(风险低估一倍):绿区概率仍有 43.9%,红区概率只有 3.0%。也就是说,一个把风险低估了 100% 的模型,接近一半的年份不会受到任何处罚。
- q = 3%(低估两倍):红区概率才爬到 22.1%,绿区概率仍有 12.2%。
- q = 1%(模型正确):有 10.8% 的概率被冤枉进黄区多缴资本。
这就是 250 天样本的统计现实:突破是万分之一量级的稀有事件,一年的数据根本不足以精确区分 1% 和 2% 的覆盖率。Kupiec(1995)的原始论文早就算过这笔账,巴塞尔委员会也在 1996 年的说明文件里坦率承认了这一点——交通灯不是设计来抓坏模型的,是设计来让持续的坏模型付出累积代价的。一年 43.9% 的逃脱概率,五年连续逃脱只剩 1.6%。
模拟:好模型与坏模型的十年监管生涯#
模拟一家银行十年的回测记录:合格模型用 t(5) 尾部计算 99% VaR;坏模型用正态假设且低估波动率 25%。
import numpy as np
from scipy import stats
rng = np.random.default_rng(11)
nu, T = 5.0, 250
scale = np.sqrt((nu-2)/nu)
for year in range(10):
r = rng.standard_t(nu, T) * scale # 真实收益: t(5)
var_good = stats.t.ppf(0.01, nu) * scale # 正确尾部
var_bad = stats.norm.ppf(0.01) * 0.75 # 正态 + 低估波动25%
x_good = (r < var_good).sum() # 每年数一次
x_bad = (r < var_bad).sum()python
十年结果:好模型的突破序列是 1, 4, 3, 4, 4, 2, 2, 3, 1, 4——十年全绿,一次黄区都没进。坏模型是 7, 11, 6, 11, 12, 9, 14, 10, 9, 12——十年里 5 次红区、5 次黄区、零次绿区。单年判决可能出错(坏模型第 1 年只有 7 次,仅仅黄区),但十年的累积记录不会撒谎。这正是交通灯的工作方式:它是慢性处罚机制,不是即时检测器。
FRTB 之后:交通灯的现代形态#
2016 年定稿(2023 年起陆续实施)的 FRTB(市场风险基本审查)大幅改造了内部模型法,但交通灯逻辑被保留并加密了:
- 回测层级下沉到交易台(trading desk):每个台子单独回测,97.5% 和 99% VaR 双水平各数一次突破,任何一个水平 12 个月超过 12 次(99%)或 30 次(97.5%),该台子直接丧失内部模型资格,回退到标准法——这比全行层面的乘数惩罚狠得多。
- 资本度量换成 Expected Shortfall(97.5% ES),但回测仍然做在 VaR 上——因为 ES 的直接回测在统计上远比 VaR 困难(可引出性 elicitability 问题),监管者选择了”用 VaR 回测间接验证 ES 模型”的务实路线。
- 新增 P&L 归因检验(PLA test):比较风险模型 P&L 与前台实际 P&L 的相关性和分布差异,堵住”回测用一个模型、报资本用另一个模型”的空子。
对量化从业者的启示:即使你不在银行,交通灯框架也是策略风险模型验收的好模板——用二项分布定阈值、把统计证据翻译成明确的行动分区(继续运行 / 降杠杆观察 / 下线重建),并接受单期功效有限、靠多期累积定罪的现实。
局限#
交通灯只数次数,突破扎堆和突破幅度它都看不见——250 天 4 次突破全挤在一周内照样绿区,这在统计上已被 Christoffersen 检验解决但监管框架为了简单性放弃了。250 天窗口的功效低是结构性缺陷,靠拉长年份累积弥补,意味着坏模型平均能逍遥一到两年。乘数阶梯的具体数值(3.0 起步、4.0 封顶)没有严格的理论推导,是委员会谈判的产物——Stahl(1997)事后用切比雪夫不等式给出的辩护也只能算”事后合理化”。最后,规则明确的地方就有博弈:年末临近黄区边界的银行有动机临时调高 VaR 报告值压突破,FRTB 的台级回测部分正是对这类操纵的回应。
延伸阅读:
- Basel Committee on Banking Supervision (1996). “Supervisory Framework for the Use of ‘Backtesting’ in Conjunction with the Internal Models Approach to Market Risk Capital Requirements”.
- Kupiec, P. (1995). “Techniques for Verifying the Accuracy of Risk Measurement Models”. Journal of Derivatives 3(2).
- Kupiec POF 检验:用失败次数的似然比给 VaR 模型做体检
- Christoffersen 独立性检验:VaR 突破是否扎堆出现