3. 情景设计方法论:历史情景法、假设情景法、蒙特卡洛模拟法、宏观情景生成
各位同行,今天我们来聊聊压力测试里最核心、也最考验功力的部分——情景设计。
说白了,情景设计就是给银行体系“出难题”。你得想清楚:未来可能发生什么?最坏能坏到什么程度?我见过不少团队,模型建得漂漂亮亮,结果情景设计一塌糊涂,最后测试出来的数字根本没人信。嗯,这里面的坑,我踩过不少。
3.1 历史情景法:最朴素的“照镜子”
历史情景法,就是拿过去发生过的危机事件来模拟未来。比如2008年全球金融危机、2015年中国股灾、2020年新冠疫情。
核心逻辑:历史会重演,但不会简单重复。
我个人习惯,第一步先拉出历史上5-10次重大危机事件。然后提取关键变量的变化幅度:
- GDP增速下滑了多少?
- 失业率跳升了几个百分点?
- 房价跌幅有多大?
- 信用利差走阔了多少?
举个例子,2008年金融危机期间,美国GDP季度环比年化跌幅一度达到8.4%,失业率从4.7%飙到10%。这些数字,就是你的压力参数。
所以,历史情景法需要做“校准”。我的做法是:把历史冲击幅度乘以一个调整系数,这个系数要考虑当前市场的杠杆率、期限错配程度、监管约束等因素。
3.2 假设情景法:自己编故事,但要讲逻辑
假设情景法,说白了就是“如果……会怎样?”
比如:如果中国房地产销售面积下降30%,同时房企融资渠道全面收紧,会怎样?如果美联储加息到6%,同时中美贸易摩擦升级,会怎样?
这里有个关键点——假设情景不能天马行空。你得有逻辑链条。
我建议用“冲击传导链”来设计:
- 定义初始冲击:比如“原油价格暴涨至150美元/桶”
- 追踪传导路径:油价涨→生产成本上升→PPI走高→CPI上行→央行被迫加息→企业融资成本上升→违约率攀升
- 量化终端影响:最终落到银行的NPL(不良贷款率)、资本充足率、流动性覆盖率等指标上
3.3 蒙特卡洛模拟法:让随机性帮你找“尾部”
蒙特卡洛模拟,本质上就是“暴力枚举”。你设定好关键风险因子的概率分布,然后让计算机随机生成成千上万种可能的情景。
为什么需要它?因为历史情景和假设情景都只能覆盖有限的几种情况。而蒙特卡洛可以帮你探索那些“从未发生过但理论上可能发生”的极端事件——也就是尾部风险。
具体怎么做?我简单说下步骤:
- 确定风险因子:比如利率、汇率、房价、GDP增速等
- 拟合分布:每个因子设定一个概率分布(正态分布、t分布、或者带厚尾的分布)
- 设定相关性:因子之间不是独立的。比如GDP下行时,房价通常也会跌。这里要用到Copula函数来建模相关性结构
- 随机抽样:生成10万组情景
- 计算损失:对每组情景,跑一遍风险模型,算出银行可能遭受的损失
- 提取分位数:看99%分位数、99.9%分位数对应的损失有多大
下面是一个简化的Python代码示例,展示蒙特卡洛模拟的核心逻辑:
import numpy as np
# 设定参数
n_simulations = 100000
mean_gdp = 0.02 # 基准GDP增速2%
std_gdp = 0.015 # 标准差1.5%
mean_rate = 0.03 # 基准利率3%
std_rate = 0.01 # 标准差1%
correlation = 0.6 # GDP与利率的相关系数
# 生成相关随机变量
cov_matrix = [[std_gdp**2, correlation*std_gdp*std_rate],
[correlation*std_gdp*std_rate, std_rate**2]]
samples = np.random.multivariate_normal([mean_gdp, mean_rate], cov_matrix, n_simulations)
gdp_shocks = samples[:, 0]
rate_shocks = samples[:, 1]
# 计算违约率(简化模型)
default_rate = 0.01 - 0.5 * gdp_shocks + 0.3 * rate_shocks
default_rate = np.clip(default_rate, 0, 1)
# 提取尾部风险
var_99 = np.percentile(default_rate, 99)
print(f"99%置信度下违约率不超过: {var_99:.2%}")
3.4 宏观情景生成:VAR模型与DSGE模型
前面几种方法,要么依赖历史,要么依赖主观判断,要么依赖随机抽样。但宏观情景生成,是要用经济学模型来“内生”地生成情景。
这里我重点讲两个工具:VAR模型和DSGE模型。
3.4.1 VAR模型:数据驱动的“黑箱”
VAR(向量自回归)模型,说白了就是把一堆宏观经济变量放在一起,让它们互相解释。比如GDP、通胀、利率、房价,这四个变量之间可能存在复杂的动态关系。
VAR模型的优势在于:
- 不需要太多经济学理论假设
- 能捕捉变量之间的线性互动
- 做脉冲响应分析很方便——你可以看“一个单位的利率冲击,会对GDP产生多大影响,持续多久”
我举个例子。假设你构建了一个包含GDP、CPI、利率的三变量VAR模型。然后你施加一个“利率上升100bp”的冲击,模型会告诉你:GDP在未来4个季度内累计下降0.8%,CPI在2个季度后下降0.3%。这些数字,就是你压力测试的输入参数。
3.4.2 DSGE模型:理论驱动的“白箱”
DSGE(动态随机一般均衡)模型,是宏观经济学家的“终极武器”。它从微观主体的优化行为出发——家庭最大化效用、企业最大化利润、央行制定货币政策——然后把这些行为方程联立起来,形成一个完整的宏观经济系统。
DSGE模型的优势:
- 有坚实的经济学理论基础
- 能解释“为什么”会这样,而不是仅仅描述“是什么”
- 可以做反事实模拟——比如“如果央行提前加息,结果会怎样?”
但DSGE也有明显的短板:
- 模型假设太强(理性预期、完全竞争等)
- 参数校准困难
- 对金融危机等非线性事件拟合效果差
我个人建议:在实际工作中,把VAR和DSGE结合起来用。用DSGE提供理论框架和长期均衡关系,用VAR捕捉短期动态和数据的统计特征。这叫“混合方法”,我在好几个大型银行的项目里都这么干过,效果不错。
3.5 知识体系总览
下面这张图,我把四种情景设计方法的核心逻辑和适用场景梳理了一下:
3.6 方法对比与选择建议
最后,我整理了一张对比表,方便你根据实际情况选择合适的方法:
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 历史情景法 | 简单直观,易于沟通 | 历史可能不重演,参数需校准 | 常规压力测试、监管报送 |
| 假设情景法 | 灵活,可覆盖极端事件 | 主观性强,逻辑链需验证 | 前瞻性分析、风险管理决策 |
| 蒙特卡洛模拟法 | 全面覆盖尾部风险 | 计算量大,依赖分布假设 | 量化尾部风险、资本规划 |
| 宏观情景生成(VAR/DSGE) | 有经济学逻辑支撑 | 模型复杂,参数校准困难 | 系统性风险分析、政策评估 |
我个人建议:别只依赖一种方法。实际项目中,我通常先用历史情景法搭框架,再用假设情景法补充极端情况,然后用蒙特卡洛模拟法做敏感性分析,最后用VAR或DSGE模型做宏观一致性检验。四管齐下,出来的结果才经得起推敲。