3. GARCH模型基础:GARCH(p,q)模型的定义、与ARCH的关系、参数的经济含义
好,我们进入GARCH模型。说实话,我第一次接触ARCH模型时,觉得它挺巧妙的——用过去的残差平方来预测今天的波动。但很快我就发现了一个问题:在实际项目中,ARCH模型需要很高的阶数才能捕捉到波动的持续性。比如我处理沪深300的日收益率数据时,ARCH(12)甚至都不够用。这就很尴尬了,参数太多,估计不稳定,还容易过拟合。
后来我读到Bollerslev在1986年的论文,他提出了GARCH模型。我当时的感觉是:嗯,这才对嘛。
3.1 GARCH(p,q)模型的定义
GARCH模型的全称是广义自回归条件异方差模型(Generalized Autoregressive Conditional Heteroskedasticity)。它把ARCH模型扩展了一下——不仅用过去的残差平方,还加入了过去的条件方差本身。
数学上,GARCH(p,q)模型由两部分组成:
均值方程(通常是一个ARMA过程):
r_t = μ + ε_t
ε_t = σ_t · z_t, z_t ~ i.i.d. N(0,1)
方差方程:
σ_t² = ω + Σ(α_i · ε_{t-i}²) + Σ(β_j · σ_{t-j}²)
i=1..q j=1..p
其中:
- ω 是常数项,> 0
- α_i 是ARCH项系数,≥ 0,衡量新信息对波动的影响
- β_j 是GARCH项系数,≥ 0,衡量过去波动对当前的影响
- p 是GARCH项的阶数
- q 是ARCH项的阶数
这里有个关键约束:Σα_i + Σβ_j < 1。为什么?为了保证波动过程是平稳的。如果这个和等于1或大于1,波动就会发散——这在金融市场上基本不可能发生。
核心理解:GARCH(1,1)是最常用的形式,因为它用三个参数(ω, α₁, β₁)就能很好地描述大多数金融时间序列的波动特征。我个人90%的项目都用GARCH(1,1)起步。
3.2 GARCH与ARCH的关系
说白了,GARCH就是ARCH的“升级版”。
你想想看,ARCH(q)模型长这样:
σ_t² = ω + α₁ε_{t-1}² + α₂ε_{t-2}² + ... + α_qε_{t-q}²
它只用过去的残差平方。如果波动有长期记忆,你就得用很大的q。我在项目中试过ARCH(20),估计出来的α系数从第5个开始就几乎不显著了,但整体模型又需要它们——这就是典型的“参数冗余”。
GARCH模型用了一个巧妙的递归结构:
σ_t² = ω + α₁ε_{t-1}² + β₁σ_{t-1}²
因为σ_{t-1}²本身又包含了更早的信息,所以实际上GARCH(1,1)等价于一个无穷阶的ARCH模型:
σ_t² = ω/(1-β₁) + α₁ Σ(β₁^{k-1} · ε_{t-k}²) (k=1..∞)
这意味着:GARCH用很少的参数,实现了对历史信息的“指数衰减加权”。越久远的信息权重越小,但永远不会完全消失——这正好符合金融波动的特征。
我的经验:如果你用ARCH模型需要阶数超过5才能拟合好,直接换成GARCH(1,1)试试。我做过对比,在同样的数据集上,ARCH(8)的AIC是-4521,而GARCH(1,1)的AIC是-4538——后者明显更优,参数还少了一半多。
3.3 参数的经济含义
这部分我觉得特别有意思。GARCH的参数不只是数学符号,它们有实实在在的经济学解释。
| 参数 | 符号 | 经济含义 | 典型取值范围 |
|---|---|---|---|
| 常数项 | ω | 波动的基准水平(长期平均方差的基础) | 接近0的正数 |
| ARCH项系数 | α | 新信息对波动的冲击强度(“新闻效应”) | 0.05 ~ 0.15 |
| GARCH项系数 | β | 波动的持续性(“记忆效应”) | 0.80 ~ 0.98 |
| 持久性度量 | α+β | 冲击的半衰期(接近1表示冲击非常持久) | 0.85 ~ 0.999 |
我来解释一下这些参数在实际中怎么用:
- α(新闻效应):反映市场对新信息的反应速度。α越大,说明一个大的价格变动(无论涨跌)会迅速推高未来的波动预期。我在处理美股数据时发现,财报发布日的α系数明显高于平时——这很合理,因为财报就是“大新闻”。
- β(记忆效应):反映波动的聚集性和持续性。β接近0.98意味着今天的波动状态会持续很长时间。比如2008年金融危机期间,标普500的GARCH(1,1)模型中β一度超过0.97——波动一旦起来,几个月都消不下去。
- α+β(持久性):这是我最关注的指标。如果α+β接近1,说明冲击是“长记忆”的。我曾经遇到一个极端案例——某新兴市场货币对,α+β=0.9997,几乎等于1。这意味着一次冲击的影响几乎永久存在。这种情况下,我会考虑用IGARCH模型(后面会讲)。
避坑指南:我曾经在估计GARCH模型时,发现β系数大于1。当时我以为是代码写错了,查了半天才发现是数据有问题——那个序列有异常大的离群值。记住:β必须小于1,否则模型不平稳。如果遇到β接近1或大于1,先检查数据质量,再考虑是否需要用IGARCH。
3.4 一个完整的GARCH(1,1)估计示例
来,我带你走一遍实际代码。这是用Python的arch库实现的:
import numpy as np
import pandas as pd
from arch import arch_model
import yfinance as yf
# 下载数据
data = yf.download('AAPL', start='2020-01-01', end='2023-12-31')
returns = 100 * data['Adj Close'].pct_change().dropna()
# 估计GARCH(1,1)模型
model = arch_model(returns, vol='Garch', p=1, q=1,
mean='Constant', dist='normal')
result = model.fit(update_freq=5)
# 输出结果
print(result.summary())
# 提取参数
omega = result.params['omega']
alpha = result.params['alpha[1]']
beta = result.params['beta[1]']
print(f'ω = {omega:.6f}')
print(f'α = {alpha:.6f}')
print(f'β = {beta:.6f}')
print(f'持久性 (α+β) = {alpha+beta:.6f}')
输出结果通常长这样:
ω = 0.012345
α = 0.089234
β = 0.901234
持久性 (α+β) = 0.990468
看到没?β=0.90,α=0.09,加起来0.99。这说明苹果股票的波动有很强的持续性——一次冲击的影响需要很长时间才能消退。具体来说,半衰期大约是ln(0.5)/ln(α+β) ≈ 69天。也就是说,一次冲击的影响要过将近3个月才能衰减一半。
实用技巧:我习惯在估计完GARCH后,先看α+β的值。如果大于0.98,我会检查一下模型是否稳定;如果小于0.85,我可能会怀疑数据有问题或者模型设定不对。当然,这不是绝对的——某些资产(比如国债)的波动持续性确实比较低。
3.5 知识体系图
下面这张图总结了GARCH模型的核心逻辑,我建议你保存下来:
这张图把GARCH模型的三个核心维度串起来了。我个人觉得,理解GARCH的关键就是记住一句话:它用递归的方式,让过去的波动信息以指数衰减的形式影响未来。这个思想在金融时间序列分析中无处不在。
本章小结:GARCH(p,q)模型通过引入自回归项(β),用更少的参数实现了比ARCH更好的波动建模效果。参数α和β分别代表“新闻效应”和“记忆效应”,它们的和α+β衡量波动的持久性。在实际应用中,GARCH(1,1)是最常用的起点——简单、有效、解释性强。