第三章:回溯测试理论基础
3.1 什么是回溯测试
回溯测试,说白了就是拿历史数据来检验你的风险模型。
你建了一个VaR模型,预测明天95%的概率下最多亏100万。但问题是——这个预测准不准?
回溯测试就是回答这个问题的。它把模型"放回"过去,看看如果当时用了这个模型,预测结果和实际结果有多大差距。
我个人习惯把回溯测试比作"后视镜开车"。虽然不能预测未来,但至少能告诉你:你的模型在过去表现如何。如果连过去都拟合不好,那未来就更别指望了。
核心定义:回溯测试(Backtesting)是一种统计方法,通过将风险模型的预测结果与历史实际结果进行比较,来验证模型的准确性和可靠性。
3.2 为什么需要回溯测试
你可能要问:模型建好了,直接用不就完了?干嘛还要费劲去验证?
嗯,这里有个坑。我在项目中遇到过好几次:模型在纸上看起来完美,参数调得漂漂亮亮,但一上线就出问题。
为什么会这样?因为风险模型本质上是个"概率游戏"。你预测的是分布,不是确定值。如果不验证,你根本不知道这个分布靠不靠谱。
回溯测试的必要性,我总结为三点:
- 验证模型准确性:模型预测的VaR值,是否真的覆盖了实际损失?如果实际亏损超过VaR的次数太多,说明模型低估了风险。
- 发现模型缺陷:模型假设是否合理?比如正态分布假设在金融数据中经常不成立。回溯测试能帮你发现这些"隐藏的炸弹"。
- 满足监管要求:这个我下面会详细讲。巴塞尔协议明确要求银行必须做回溯测试,不是可选项,是必选项。
我的经验:曾经有个同事,建了一个看起来很漂亮的VaR模型,但回溯测试时发现异常率高达15%(理论上应该是5%)。后来一查,原来是忽略了尾部风险的肥尾效应。嗯,从那以后,我每次建完模型第一件事就是跑回溯测试。
3.3 监管要求:巴塞尔协议
说到监管,就绕不开巴塞尔协议。这是全球银行业的"基本法"。
巴塞尔协议对回溯测试的要求,说白了就是:你得证明你的模型靠谱。
具体来说,巴塞尔协议II和III都明确要求:
- 银行必须定期对内部模型进行回溯测试
- 测试结果要上报监管机构
- 根据测试结果,模型会被划分到不同"交通灯"区域
这个"交通灯"机制很有意思。我直接给你看表格:
| 区域 | 异常次数(250个交易日) | 监管措施 |
|---|---|---|
| 绿灯区 | 0-4次 | 模型通过,无需调整 |
| 黄灯区 | 5-9次 | 需要关注,可能调整乘数因子 |
| 红灯区 | 10次以上 | 模型不通过,必须重新校准 |
注意,这里的"异常次数"指的是实际亏损超过VaR预测值的次数。理论上,99%的VaR在250个交易日里应该只出现2-3次异常(250×1%=2.5次)。
避坑指南:我曾经见过一家机构,为了"通过"回溯测试,故意把VaR值调得特别高。这样异常次数确实少了,但模型完全失去了预测意义。监管机构不是傻子,他们看的是整个分布,不是单个数字。
3.4 回溯测试的统计框架
好了,理论说完了,咱们来点实际的。回溯测试的统计框架,我习惯用一张图来理解:
这个框架看起来简单,但每个步骤都有讲究。我重点说说第三步的统计检验。
3.4.1 异常次数检验
这是最常用的方法。核心思想是:如果模型正确,那么异常次数应该服从二项分布。
举个例子。你建了一个99%的VaR模型,测试了250天。理论上异常次数应该是250×1%=2.5次。如果实际出现了10次异常,那模型肯定有问题。
具体怎么判断?用Kupiec检验。代码实现很简单:
import numpy as np
from scipy import stats
def kupiec_test(n, x, p):
"""
Kupiec检验
n: 总观测天数
x: 异常次数
p: 理论异常概率(1-VaR置信水平)
"""
# 似然比统计量
LR = -2 * np.log(((1-p)**(n-x) * p**x) /
((1-x/n)**(n-x) * (x/n)**x))
# p值
p_value = 1 - stats.chi2.cdf(LR, 1)
return LR, p_value
# 示例:250天,10次异常,99%VaR
LR, p_value = kupiec_test(250, 10, 0.01)
print(f"LR统计量: {LR:.2f}")
print(f"p值: {p_value:.4f}")
如果p值小于0.05,就拒绝原假设——模型有问题。
3.4.2 独立性检验
异常次数检验只能看"数量",但没法看"分布"。如果异常事件扎堆出现,那模型也有问题。
举个例子。假设250天里出现了5次异常,看起来不多。但如果这5次异常都集中在同一个月,说明模型在市场波动大的时候失效了。
Christoffersen检验就是干这个的。它检查异常事件是否独立分布。
我的建议:实际工作中,我通常把异常次数检验和独立性检验结合起来用。先看数量对不对,再看分布是否随机。两个都通过,模型才算基本合格。
3.4.3 损失分布检验
这个相对高级一些。它不光看异常次数,还看异常的大小。
你想想看,如果模型预测最大损失100万,实际亏损了500万,那就算异常次数不多,模型也是严重低估风险的。
Lopez检验就是基于这个思路。它给每次异常赋予一个"严重程度"权重,然后综合评估。
避坑指南:我曾经见过一个案例,某机构的VaR模型通过了所有标准检验,但金融危机一来就崩了。为什么?因为他们的检验只关注了"正常市场"下的表现,忽略了极端情况。所以我现在做回溯测试,一定会加入压力场景测试。
3.5 小结
回溯测试不是走过场,它是风险模型的"质检员"。没有它,你的模型就是个黑箱。
记住三个要点:
- 回溯测试验证模型的历史表现
- 巴塞尔协议有明确的监管要求
- 统计框架包括异常次数、独立性和损失分布三个维度
嗯,这一章的内容就到这里。下一章我们会动手实现一个完整的回溯测试系统,到时候你会看到这些理论是怎么落地的。
公众号:蓝海资料掘金营,微信deep3321