波动率建模:GARCH 家族方法与风险预测
1. 为什么要建模波动率
在金融序列里,“均值可预测性”往往弱于“方差可预测性”。
GARCH 的目标不是预测涨跌方向,而是预测风险强度(条件波动率)。
2. GARCH(1,1) 的核心形式
$$ \varepsilon_t = \sigma_t z_t,\quad z_t\sim iid(0,1) $$
$$ \sigma_t^2=\omega+\alpha\varepsilon_{t-1}^2+\beta\sigma_{t-1}^2 $$
解释:
- $\alpha$ 衡量“新冲击”对波动率的影响。
- $\beta$ 衡量“历史波动”惯性。
- $\alpha+\beta$ 越接近 1,波动持续性越强。
3. 建模流程
- 先对收益序列建均值模型(如 ARMA)。
- 在残差上做 ARCH-LM 检验。
- 再建 GARCH/TGARCH/EGARCH 等方差模型。
- 用滚动窗口评估波动率预测损失。
4. Python 示例
import pandas as pd
from arch import arch_model
# r: 日收益率序列(例如对数收益)
am = arch_model(
r.dropna() * 100,
mean="AR",
lags=1,
vol="GARCH",
p=1,
q=1,
dist="t",
)
res = am.fit(disp="off")
print(res.summary())
# 预测未来 5 期条件方差
fcast = res.forecast(horizon=5)
print(fcast.variance.tail(1))
5. 常见错误
- 假设正态误差,忽略厚尾风险。
- 数据缩放不一致(百分比收益与小数收益混用)。
- 只看样本内拟合,不做 VaR 回测。
- 把波动率预测误当成收益率预测。
6. 实务延展
- 杠杆效应显著时优先 EGARCH/TGARCH。
- 高频场景可与实现波动率(RV)模型结合。
- 风控报告建议同时输出 VaR 与 ES。
GARCH 的本质是“风险状态机”,帮助你把噪声中的风险聚集结构提取出来。