先说结论:一个正确的 VaR 模型必须满足比”突破率等于名义值”强得多的条件:突破必须对昨天之前的一切信息不可预测。Engle 和 Manganelli(2004)的动态分位数(DQ)检验把这个条件变成一个回归——把去中心化的突破序列回归到滞后突破、当期 VaR 等解释变量上,模型正确时所有系数应为零,检验统计量服从 χ²。它是 Christoffersen 一阶马尔可夫检验的严格推广:不止看昨天破没破,还看更远的滞后和 VaR 水平本身。我在 GARCH-t(6) 模拟上实测:静态正态 VaR 的突破序列在 Christoffersen 独立性检验下 p=0.51 安然过关,DQ 检验 p=0.004 直接拒绝;功效实验里 DQ 在高波动持续性下达到 63%,比一阶检验的 40% 高出一半。
突破序列应该是什么样的#
回顾 VaR 回测的逻辑链。定义突破指示 。如果模型的条件分位数是对的,那么:
即在昨天为止的全部信息 条件下,今天突破的概率恒等于 。这一个式子蕴含两层:
- 无条件突破率是 (Kupiec POF 检验的对象);
- 突破对任何 时刻可观测的变量都不可预测——不能用昨天的突破预测、不能用上周的突破预测、不能用当期 VaR 的高低预测、不能用任何市场变量预测。
Christoffersen(1998)检验了第二层的一个特例: 是否独立于 (一阶马尔可夫)。但违背可预测性的方式远不止”昨天破今天更容易破”这一种。两个典型漏网:
- 长程依赖:波动周期长于一天时,突破可能隔 2-5 天再聚集,一阶转移概率看不见;
- VaR 水平依赖:模型在低 VaR(平静期)时突破率偏高、高 VaR 时偏低——突破概率和 VaR 水平相关,但这不体现在相邻两天的转移结构里。
DQ 检验的思路是把”对一切信息不可预测”落实为一个可操作的回归检验。
检验构造:Hit 回归#
定义去中心化突破序列:
模型正确时 是期望为 0 的鞅差序列。把它回归到 时刻已知的解释变量上:
原假设 (所有系数含截距全为零)。Engle-Manganelli 给出的检验统计量:
其中 是回归设计矩阵, 是回归元个数。分母 是 在 下的方差——这不是普通的 OLS F 检验,因为残差是伯努利型的,方差已知为 ,直接代入。
三个解释变量的选择各有分工:
- 滞后 (通常取 4 阶):抓突破聚集,覆盖一阶马尔可夫抓不到的隔日聚集;
- 当期 :抓”突破概率随 VaR 水平变化”——静态模型的典型病灶;
- 截距:抓无条件突破率偏离 ,把 Kupiec 的功能内嵌了进来。
所以 DQ 是个联合检验:频率错、聚集错、水平依赖错,任何一种都会推高统计量。这既是优点(一个检验管三件事)也是代价(拒绝后要额外归因是哪一层错了)。
import numpy as np
from scipy import stats
def dq_test(loss, var, p, n_lags=4):
"""Engle-Manganelli 动态分位数检验
回归元:截距 + 4 阶滞后 Hit + 当期 VaR"""
I = (loss > var).astype(float)
hit = I - p
T = len(hit)
X, y = [], []
for t in range(n_lags, T):
X.append([1.0] + [hit[t-j] for j in range(1, n_lags+1)] + [var[t]])
y.append(hit[t])
X, y = np.array(X), np.array(y)
beta, *_ = np.linalg.lstsq(X, y, rcond=None)
dq = beta @ X.T @ X @ beta / (p * (1 - p))
k = X.shape[1]
return dq, 1 - stats.chi2.cdf(dq, k)python十几行代码。DQ 检验在文献引用里的地位和它的实现难度完全不成比例——这是那种”知道了就是白捡”的工具。
实验:DQ 看见了 Christoffersen 看不见的病#
数据生成过程:GARCH(1,1) + t(6) 创新,1000 天,检验做在 95% VaR 上(层级选择的理由后面说)。三个模型:
- GARCH-t(6):正确模型;
- GARCH-正态:波动路径正确、尾部偏薄;
- 静态正态:无条件波动,完全忽略波动聚集。
结果:
| 模型 | 突破次数(期望 50) | DQ 统计量(df=6) | DQ p 值 | Christoffersen IND p 值 |
|---|---|---|---|---|
| GARCH-t(6)(正确) | 58 | 4.42 | 0.620 | 0.829 |
| GARCH-正态 | 53 | 1.83 | 0.935 | 0.592 |
| 静态正态 | 22 | 19.14 | 0.004 | 0.505 |

最有信息量的一行是静态正态:Christoffersen 独立性检验 p=0.51,完全无罪释放;DQ 检验 p=0.004,毁灭性拒绝。同一个突破序列,为什么结论天差地别?
看突破的时间分布就明白了:

静态正态只突破了 22 次(95% 层级下期望 50 次——静态波动在这条路径上整体偏保守),但这 22 次几乎全部挤在高波动时段。问题在于:突破太稀疏时,相邻两天连续突破()这个事件本身就很少发生,Christoffersen 检验赖以定罪的 估计不出名堂——本例 对 ,差异有但样本撑不起显著性。而 DQ 的定罪证据来自另外两路:截距项(22 次 vs 期望 50 次,频率显著偏低)和 VaR 水平项(突破全部发生在真实波动高、而静态 VaR 相对偏低的时段, 与 显著相关)。这两路证据一阶马尔可夫检验根本没有入口。

自相关图进一步展示了”隔日聚集”:静态模型的突破序列在滞后 1-5 阶都有正自相关,其中不少超出置信带——这正是 4 阶滞后回归元的猎物,而一阶转移矩阵只能看到滞后 1。
顺带一提,GARCH-正态在 95% 层级安然通过(p=0.94)是正常的:它的病在深尾(97.5% 之外),95% 分位点上正态和 t(6) 差别不大。这就是上一篇 Acerbi-Szekely ES 检验里 幅度检验存在的理由——尾部形状的错要用幅度信息抓,突破序列的 0/1 结构对它天然低敏。
功效对比:滞后阶数买来了什么#
固定待检模型为静态正态 VaR,让真实过程的波动持续性 从 0 扫到 0.98,每档 250 次独立试验,对比 DQ(4 阶滞后 + VaR 项)和 Christoffersen 一阶独立性检验的拒绝率:
| 波动持续性 | DQ 功效 | Christoffersen IND 功效 |
|---|---|---|
| 0.00(无聚集) | 0.020 | 0.076 |
| 0.50 | 0.048 | 0.100 |
| 0.80 | 0.160 | 0.176 |
| 0.90 | 0.276 | 0.208 |
| 0.95 | 0.428 | 0.252 |
| 0.98 | 0.628 | 0.396 |

两个读法:
高持续性区间 DQ 显著占优。真实市场的日频波动持续性普遍在 0.95-0.99,正是 DQ 领先幅度最大的区间(0.43 vs 0.25,0.63 vs 0.40)。波动周期越长,突破聚集越”弥散”在多阶滞后上,多阶回归的信息优势越大。
低持续性区间 DQ 略逊——这是自由度的价格。DQ 用 ,Christoffersen IND 用 ;当真实的偏离恰好集中在一阶转移上时,DQ 把检验功效摊薄到了六个方向。没有免费午餐:解释变量越多,覆盖的备择假设越广,单个方向上的功效越低。这也是实务上滞后阶数取 4 而不是 20 的原因——Engle-Manganelli 原文用 4 阶,后续功效研究(Berkowitz et al., 2011)确认 4 阶附近是覆盖面和功效的合理折中。
还是那个诚实的提醒:即便是占优的 DQ,在 1000 天、持续性 0.98 的设定下功效也只有 63%。单个样本、单次检验定罪坏模型的概率从来不高,回测检验的正确用法是滚动窗口 + 多期累积证据,而不是一锤定音。
工程实现清单#
- 层级选择:DQ 依赖突破序列有足够的”事件密度”。99% 层级 250 天期望才 2.5 次突破,滞后 几乎全是 常数列,回归退化。监管口径在 99% 报数,诊断口径在 95% 甚至 90% 跑 DQ,分层回测定位问题。
- 回归元可以扩展: 里任何变量都是合法回归元——滞后收益的绝对值、已实现波动、VIX。怀疑模型对哪类信息失明,就把那个变量加进去。DQ 本质是个开放框架,标准配置只是默认菜单。
- 别用 OLS 的 F 检验 p 值:残差是移位伯努利,不是高斯。统计量的分母必须用 ,服从 。拿 statsmodels 跑 OLS 然后读 F-test 是常见错误。
- 样本前 q 天丢弃:滞后回归元需要 warmup, 时丢 4 天无所谓,但要在代码里显式处理,别让 NaN 静默传播。
- 拒绝后的归因:DQ 拒绝只说”有病”,不说病在哪。看单个系数的 t 值:截距大→频率错(换分布尺度);滞后项大→聚集(换波动模型);VaR 项大→水平依赖(模型对市场状态失明,考虑加状态变量或换 CAViaR 类模型)。
与检验家族的分工#
到这篇为止,VaR/ES 回测工具箱的拼图完整了:
- Kupiec POF:突破次数对不对(无条件覆盖);
- Christoffersen:突破是否相邻聚集(一阶条件覆盖);
- DQ(本篇):突破是否对广义信息集不可预测(一般条件覆盖,涵盖前两者);
- Acerbi-Szekely Z1/Z2:突破之后的幅度对不对(ES 校准);
- 巴塞尔交通灯:把统计证据翻译成资本处罚(监管执行层)。
如果只能挑两个进生产:DQ 管突破的时间结构,Z2 管突破的幅度结构——这两个组合的覆盖面最大,且互相正交。
诚实边界#
- 线性回归只能抓线性可预测性。如果突破概率是某个变量的非线性函数(如仅在极端 VIX 时失效),线性 DQ 可能漏检。扩展方向是把回归元做非线性变换,或干脆用 logit 链接(Berkowitz 的 CaViaR-based 变体)。
- 回归元选择是研究者自由度。滞后阶数、是否加 VaR 项、加哪些外生变量——不同配置给出不同 p 值。诚实的做法是预注册标准配置(4 阶 + VaR 项),把探索性的变量扫描明确标注为诊断而非检验。
- 是渐近分布。 且 时有限样本下 size 会偏离名义水平,小样本要用蒙特卡洛模拟临界值(模拟 i.i.d. Bernoulli() 序列跑同一个回归)。
- 检验对了不等于模型有用。DQ 全绿只说明 VaR 序列与数据相容,不说明它是最优的——一个恒等于经验分位数的宽松模型也可能通过。回测检验是模型的下限守门员,不是上限裁判。
DQ 检验的元教训值得单独记一笔:“正确校准”的完整定义是对信息集条件化的,任何只检验边际性质的工具(次数、相邻转移)都只覆盖了必要条件的一角。把原假设写成条件期望形式、再把条件信息显式搬进回归——这个”检验即回归”的构造思路,在计量经济学里反复出现(鞅差检验、事件研究、预测评估皆然),学会一次,处处能用。