3. ARCH模型原理:从条件异方差到参数估计

好,咱们今天来聊聊ARCH模型。说实话,我刚入行那会儿,看到“异方差”三个字就头大。但后来在实际项目中吃过亏——用普通模型预测股票波动率,结果惨不忍睹。嗯,今天我就把这块硬骨头给你啃明白。

3.1 条件异方差:波动率为什么会“扎堆”?

先问个问题:你观察过股票收益率吗?有没有发现一个现象——

  • 大涨大跌之后,往往跟着更大的波动
  • 风平浪静的时候,市场也相对安静

这就是波动率聚集效应。说白了,大的变化倾向于引发更大的变化

传统的线性模型(比如ARMA)假设方差是常数。但金融数据显然不满足这个假设。我当年做期权定价时,用常数方差模型算出的VaR,回测时直接被打脸——市场剧烈波动时,模型完全低估了风险。

核心概念:条件异方差是指,给定过去信息,当前收益率的方差是随时间变化的。用数学语言说:

Var(rt | rt-1, rt-2, ...) ≠ 常数

3.2 ARCH(q)模型:让方差“动”起来

1982年,Robert Engle提出了ARCH模型。他的想法很直接:用过去的残差平方来预测当前的方差

模型长这样:

rt = μ + εt
εt = σt · zt,其中 zt ~ N(0,1)
σt² = α0 + α1εt-1² + α2εt-2² + ... + αqεt-q²

我来拆解一下:

  • rt:当前收益率
  • μ:均值方程(通常是个常数或ARMA)
  • εt:残差项,也就是“意外冲击”
  • σt²:条件方差,它由过去q期的残差平方决定
  • α0 > 0αi ≥ 0:保证方差为正

我的经验:q值一般取1~3就够了。我见过有人硬上ARCH(10),结果参数估计不稳定,预测效果反而更差。记住:简单模型往往更可靠

3.3 参数估计:最大似然法的实战细节

估计ARCH模型,最常用的是最大似然估计(MLE)。为什么?因为OLS在这里不好使——残差平方之间相关,违反了OLS的基本假设。

似然函数长这样:

L = ∏ (1 / √(2πσt²)) · exp(-εt² / (2σt²))

取对数后:

log L = -½ ∑ [log(2π) + log(σt²) + εt² / σt²]

实际估计时,我习惯用Python的arch库。给你看个例子:

import numpy as np
import pandas as pd
from arch import arch_model

# 模拟数据
np.random.seed(42)
n = 1000
returns = np.random.normal(0, 1, n) * np.sqrt(0.1 + 0.8 * np.random.chisquare(1, n))

# 拟合ARCH(1)模型
model = arch_model(returns, vol='ARCH', p=1)
result = model.fit()

print(result.summary())

输出结果里,你会看到:

  • alpha[1]:就是α₁,衡量过去冲击对当前方差的影响
  • omega:就是α₀,基础方差水平
  • Log Likelihood:对数似然值,越大越好

避坑指南:我曾经在估计ARCH模型时,发现alpha[1]的p值很大(不显著)。后来检查发现,是因为数据中存在异常值。建议你在建模前先做异常值处理,否则估计结果会严重偏误。

3.4 检验方法:如何判断数据需要ARCH?

不是所有数据都适合用ARCH模型。在建模前,我们需要先做ARCH效应检验

最常用的是拉格朗日乘子检验(LM test),也叫Engle's ARCH test。步骤很简单:

  1. 先拟合一个均值模型(比如ARMA),得到残差序列
  2. 对残差平方做自回归:εt² = β₀ + β₁εt-1² + ... + βqεt-q² + ut
  3. 检验所有β系数是否同时为0

Python实现:

from statsmodels.stats.diagnostic import het_arch

# 假设residuals是均值模型的残差
stat, p_value, _, _ = het_arch(residuals, nlags=5)

print(f'LM统计量: {stat:.4f}')
print(f'p值: {p_value:.4f}')

if p_value < 0.05:
    print('存在显著的ARCH效应')
else:
    print('没有足够的证据表明存在ARCH效应')

判断标准:p值小于0.05,说明数据存在条件异方差,适合用ARCH模型。反之,用普通模型就够了。

3.5 知识体系总览

下面这张图,把ARCH模型的整个逻辑串起来了:

ARCH模型知识体系 金融时间序列 波动率聚集效应 条件异方差:方差随时间变化 ARCH(q)模型 σ² = α₀ + Σαᵢε² 过去冲击→当前方差 最大似然估计 MLE方法 Python arch库 ARCH效应检验 LM检验 p值<0.05

3.6 实战中的几个要点

最后,分享几个我在项目中积累的经验:

要点 说明 我的建议
阶数选择 q值不宜过大 先用AIC/BIC准则,q一般不超过5
数据频率 日频数据效果最好 周频或月频的ARCH效应往往不显著
参数约束 α₀>0, αᵢ≥0 如果估计出负值,说明模型设定有问题
模型诊断 检查残差是否还有ARCH效应 对标准化残差再做一次LM检验

一个小技巧:我习惯在估计ARCH模型后,画一下条件方差序列。如果条件方差看起来跟实际波动率走势吻合,说明模型抓住了主要特征。如果条件方差太平滑,可能需要考虑更高阶的模型。

好了,ARCH模型的原理就讲到这里。说白了,它就是让方差“活”起来——用过去的冲击来预测未来的波动。下一节我们会看到,ARCH模型有个“亲戚”叫GARCH,它更强大,也更常用。但基础打牢了,后面就顺了。


公众号:蓝海资料掘金营,微信deep3321