设想你是一位经验丰富的老船长。海面有一个古怪的脾气:风平浪静的日子总是成串出现,狂风巨浪也喜欢扎堆来袭——昨天还是微风细浪,今天就阴云压顶,连着几天惊涛骇浪,然后又慢慢归于平静。这种“坏天气扎堆”的现象,在金融市场里几乎一模一样:股票涨跌幅往往大则大、小则小,大跌之后常伴随剧烈震荡,平静行情里则连报价都懒洋洋的。 金融学把这种“波动扎堆”叫作波动率聚集。老船长看海,不只看今天的浪高,更看“整片海域的脾气”;金融分析师也一样,他们不只关心价格往哪走,更关心价格会“颠得多厉害”。GARCH 模型就是一张科学的“海图”,它用数学语言描述波动率如何从昨天传到今天、如何被坏消息放大、又如何预测明天的风浪。读完本文,你将理解波动率聚集、ARCH 与 GARCH 的递推逻辑、EGARCH 如何捕捉杠杆效应,以及如何用这些模型计算 VaR 风险指标。
对 AI 从业者而言,GARCH 是量化风控、期权定价、智能投顾等场景中“风险量化”的必备武器——它能把看不见的市场情绪变成一个个可计算的数字。
目录
可视化演示
展示ARCH条件异方差、GARCH方差递推与EGARCH杠杆效应三大模型,通过时序动画呈现波动率聚集与建模机制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
ARCH条件异方差 正冲击残差驱动条件方差变化 负冲击残差同等影响波动率 sigma_t^2 = omega + sum(alpha_i * eps^2_{t-i}) 过去残差平方线性组合决定当前方差。
1. 波动率聚集:金融市场的“天气模式”
老船长有个看家本领:他不只看今天的海面,更看“一段时间的脾气”。海浪似乎有记忆——风平浪静的日子往往成串出现,狂风大浪也喜欢接踵而至。金融市场完全是一副海上脾气:股票收益在大涨大跌之后常常继续大起大落,而在平淡行情里则像睡着了似的。
把这种“波动扎堆”翻译成数学语言就是:收益的方差不是常数。传统统计喜欢假设方差固定,可金融数据偏偏是时变方差。之所以难办,是因为方差本身看不见摸不着,只能从收益的平方去感知——就像船长只能通过浪花的高度反推风的强度。
设 \(r_t\) 为第 \(t\) 天的对数收益率,\(\mu\) 是它的长期均值。“今天的风险有多大”用条件方差刻画,它表示截至昨天,我们对今天波动幅度的最佳预期:
正因为波动率会变,平方收益之间才表现出显著的自相关——这就像海员记录里的“浪高日志”:大浪后面常跟着大浪,小浪后面常跟着小浪。这个看似简单的观察,正是 ARCH/GARCH 模型家族起航的港口。
- 收益率定义\(r_t = \ln P_t - \ln P_{t-1}\),用价格取对数后求差,近似当日涨跌幅,便于跨期相加。
- 偏离均值\((r_t - \mu)^2\) 取“当天收益比长期平均海平面高或低多少”的平方,正负波动都算数。
- 条件符号\(\mathcal{F}_{t-1}\) 表示截至昨天的一切信息(航迹、气压、海图)。这里的意思是“站在昨天末尾,评估今天的浪高”。
2. ARCH模型:让昨天的浪花说话
老船长有一条朴素的航海经验:如果昨天傍晚突然起浪,那么今天的海面多半不会消停。ARCH 模型的灵感正源于此——用过去几天的“冲击”来预测今天的波动强度。
Engle 在 1982 年提出 ARCH(自回归条件异方差)模型。所谓“条件异方差”,就是方差不再恒定,而是跟随最新信息变化。最简单的 ARCH(1) 写成:
ARCH 模型第一次让“波动率会变”这件事进入主流视野,但它的短板也很明显:若波动率有较强的惯性,需要额外多个滞后阶的冲击项来捕捉,模型参数会变得非常多。就像船长需要记住过去十天的每一朵浪才能判断海况——这太累了,于是 GARCH 应运而生。
- 基础波动\(\omega\) 是“绝对风平浪静”时的底线方差,必须为正数,否则会出现负方差。
- 昨天的意外\(\varepsilon_{t-1} = r_{t-1} - \mu\),是昨天没有被均值预测到的冲击,相当于浪花高出日常水位的那部分。
- 平方处理对冲击取平方,意味着无论浪往上冲还是向下砸,都会增加当日的“颠簸感”。
- 加权组合常数项加上冲击平方,得到今天的条件方差。系数 \(\alpha_1\) 越大,昨天冲击对今天的影响越强。
3. GARCH演进:波动率的记忆
有经验的船长不会只盯着昨天那一朵浪,他会把“这一片海域长期以来的脾气”也记在心头。Bollerslev 在 1986 年提出 GARCH(广义自回归条件异方差)模型,其核心思路是:今天的波动率不仅受昨天冲击的影响,还受“昨天的波动率本身”的影响——方差也有记忆。
GARCH(1,1) 的条件方差方程为:
有趣的是,GARCH(1,1) 在数学上等价于一个无限阶的 ARCH 模型——用一条递推式替代了无数个滞后项。这就像老船长把几十年的航海经验浓缩成一句话:“浪的脾气既有突变的一面,也有延续的一面。”这正是 GARCH 风靡量化圈的原因。
- 常数项\(\omega\) 表示长期平均波动平台,相当于这片海域的“基础海况”。
- 短期冲击项\(\alpha_1 \varepsilon_{t-1}^2\) 表示昨天的浪花对今天的直接影响,反映“刚发生的事”尤其重要。
- 波动记忆项\(\beta_1 \sigma_{t-1}^2\) 表示昨天的风险水平自动延续,体现波动的惯性。
- 平稳条件与长期方差当 \(\alpha_1+\beta_1<1\) 时,方差过程平稳;长期均值回到下式,这被称为无条件方差。
4. 杠杆效应与EGARCH:坏消息的放大镜
老船长会特别提醒新船员:海里的暗礁流和普通的顺风浪看起来高度差不多,但撞上暗礁流的船往往伤得更重。金融市场也有类似的“暗礁效应”——同样大小的冲击,坏消息引发的波动率上升,通常比好消息更猛烈,这被称为杠杆效应。
为了捕捉这种不对称性,Nelson 在 1991 年提出了 EGARCH(指数 GARCH) 模型。它对波动率取对数,引入带有符号的方向项:
这一族的另一个常见成员是 GJR-GARCH,它用虚拟变量把正负冲击分开加权。EGARCH 则更直接:它让市场情绪的“不对称”完全由 \(\gamma\) 一个参数承载。对风险管理者来说,知道“利空比利好更吓人”,比单纯预测波动率高一个量级,能让海图真正避开暗礁。
- 对数方差对波动率取对数,无论内部怎么变,取指数后一定为正,模型更自由。
- 平均绝对冲击\(|z_{t-1}| - \sqrt{2/\pi}\) 衡量“今天浪的力度”比历史平均大还是小,\(\sqrt{2/\pi}\) 是标准正态绝对值的期望。
- 方向项\(\gamma z_{t-1}\) 给冲击安上“正负号”,当 \(\gamma<0\) 时,负收益(坏消息)会把波动率推得更高。
- 记忆项\(\beta \ln(\sigma_{t-1}^2)\) 延续了波动率的记忆性,使模型仍符合“聚集”特征。
5. 模型定阶:选对观察窗口
船长在绘制海图之前,要先决定“观察几天的浪才够用”:只看一天太少,看一百天又混入了太多历史噪音。GARCH 建模同样有一个定阶问题——对于 GARCH(p,q),到底选择多少个滞后阶?
先从数据里找线索:计算收益平方的自相关函数(ACF),若 5 阶内显著,则尝试 GARCH(1,1);若衰减缓慢,可能需要更高阶。更常用的做法是用信息准则比较候选模型,其中最经典的是 AIC 和 BIC:
定阶的过程就像试帆船:先试 GARCH(1,1),再看残差是否干净;若不行,再试 GARCH(2,1)、GARCH(1,2)。多数金融时间序列用 GARCH(1,1) 就够了,因为它已经能捕捉波动率的绝大部分记忆,更高阶带来的边际改善通常很小。
- 似然函数\(\ln L\) 表示在当前参数下,观测到的数据被“生成”的可能性,越大说明拟合越好。
- 复杂度惩罚\(k\) 为模型参数个数,每多一个参数就加 2 分,防止为了拟合历史而画太复杂的海图。
- 准则对比AIC = \(-2\ln L + 2k\),值越小越好;BIC 则把惩罚系数改成 \(\ln(n)k\),更偏向简单模型。
6. 模型检验:海图是否可信
画好的海图能不能用,要看实测。模型估计完之后,必须做诊断检验:如果残差里还残留波动聚集,说明模型没把信息“榨干”;若有信息残留,就需要换更大的 p、q。
常用的工具是 Ljung-Box 检验(简称 LB 检验)。它同时检验多个滞后的自相关系数是否整体为零。对“标准化残差的平方”做 LB 检验,若 p 值很小,说明残差平方仍有自相关,ARCH/GARCH 效应没有被完全移除:
此外,还需检查标准化残差是否接近白噪声、是否近似正态分布。就像海图要在不同海域反复校验一样,一个合格的 GARCH 模型必须让残差“看不出任何可以预报的模式”。
- 标准化残差\(\hat{\varepsilon}_t / \hat{\sigma}_t\) 除以模型估计的波动率,相当于把浪高除以海况等级。
- 残差平方自相关\(\hat{\rho}_k^2\) 是标准化残差平方在滞后 \(k\) 阶的自相关,反映是否还有“聚集尾巴”没抓住。
- Q 统计量把 1 到 \(m\) 阶的自相关加权求和。若 \(Q\) 超过临界值,说明残差中还藏有波动信息,模型有待改进。
7. 波动率预测与VaR:给风险装上雷达
当海图经过检验,就可以用它来航线预报了。GARCH 模型的核心价值在于预测未来波动率。已知最后一期信息 \(\varepsilon_T\) 和 \(\sigma_T^2\),对未来 \(h\) 天的条件方差递推如下:
把预测波动率代入风险价值(VaR)公式,就得到“明天最大可能亏损”的估计值:
这就像船长为明天的航行购买保险:\(z_\alpha\) 决定“保守程度”,GARCH 预测的 \(\sigma\) 决定“天气恶劣程度”。两者相乘,便是一条量化风险的生命线。期权定价中的隐含波动率、指数化产品的风险预算,也都站在同一条递推公式的肩膀上。
- 一步预测站在 \(T\) 时刻向前看一步,方差由最新冲击平方和当前方差组合得到。
- 多步递推两步以后,冲击项可由期望替代,于是只需用 \(\alpha_1+\beta_1\) 不断向前滚动。
- 长期收敛当 \(h\) 很大时,预测方差逼近无条件方差 \(\omega/(1-\alpha_1-\beta_1)\),说明风险预测不会无限发散。
- VaR 计算\(z_\alpha\) 是标准正态分布的 \(\alpha\) 分位点(如 95% 对应约 1.65),乘上预测波动率,得到风险额度。
AI 应用场景
场景1:券商风控日报的每日 VaR
阶段:模型部署与监控
解决的问题:传统方法用固定窗口历史标准差算 VaR,市场剧烈波动时反应迟钝。GARCH 每天用最新收益更新波动率,让风险指标“次日就刷新”,在暴风雨来临前提前预警。
具体案例:某券商自营部门每天收盘后运行 GARCH(1,1),用当日收益更新波动率,自动生成次日 95% 和 99% 的 VaR 限额。遇到市场大跌时,系统能把 VaR 上调数倍,风控经理据此削减仓位。
场景2:期权做市商的波动率预测
阶段:特征工程与预测
解决的问题:Black-Scholes 定价需要输入波动率,用历史波动率过于粗糙,用隐含波动率又有循环依赖。GARCH 能给出未来 5 天、20 天的波动率预测,作为定价与对冲的独立参照。
具体案例:加密货币期权做市团队用 GARCH 预测未来一周波动率,当预测值高于当前隐含波动率时,主动卖出波动率并做 Delta 对冲,从中获取波动率均值回归的收益。
场景3:量化基金的波动率目标策略
阶段:策略信号生成
解决的问题:普通基金在市场高波动期可能遭遇过大回撤。波动率目标策略用 GARCH 估计当前风险,反向调节仓位,让组合风险保持稳定。
具体案例:某 CTA 基金设定 15% 的目标年化波动率,每个交易日用 GARCH(1,1) 给出当前波动率,再按“目标波动率 / 预测波动率”调整整体仓位。市场恐慌时自动降杠杆,避免被风暴掀翻。
Python 演示
import numpy as npfrom scipy.optimize import minimize def simulate_garch(n, omega=1e-5, alpha=0.1, beta=0.85, seed=42): """生成服从GARCH(1,1)的收益序列及其真实波动率。""" rng = np.random.default_rng(seed) sigma2 = np.empty(n) eps = np.empty(n) sigma2[0] = omega / (1 - alpha - beta) eps[0] = np.sqrt(sigma2[0]) * rng.standard_normal() for t in range(1, n): sigma2[t] = omega + alpha * eps[t-1] ** 2 + beta * sigma2[t-1] eps[t] = np.sqrt(sigma2[t]) * rng.standard_normal() return eps, sigma2 def compute_var_path(rets, theta): """按GARCH(1,1)递推公式计算整个方差路径。""" omega, alpha, beta = theta n = len(rets) sigma2 = np.empty(n) sigma2[0] = omega / (1 - alpha - beta) for t in range(1, n): sigma2[t] = omega + alpha * rets[t-1] ** 2 + beta * sigma2[t-1] return np.maximum(sigma2, 1e-12) def neg_log_lik(theta, rets): """高斯负对数似然,供优化器最小化。""" omega, alpha, beta = theta if omega <= 0 or alpha < 0 or beta < 0 or alpha + beta >= 1: return 1e10 sigma2 = compute_var_path(rets, theta) return float(0.5 * np.sum(np.log(sigma2) + rets ** 2 / sigma2)) def forecast(sigma2_path, rets, theta, h=5): """从最后一期出发,预测未来h天波动率。""" omega, alpha, beta = theta var = omega + alpha * rets[-1] ** 2 + beta * sigma2_path[-1] preds = [var] for _ in range(1, h): var = omega + (alpha + beta) * var preds.append(var) return np.sqrt(np.array(preds)) if __name__ == "__main__": rets, true_vol = simulate_garch(600) fit = minimize(neg_log_lik, x0=[1e-5, 0.1, 0.8], args=(rets,), method="Nelder-Mead") print("拟合参数omega/alpha/beta:", fit.x) var_path = compute_var_path(rets, fit.x) print("未来5日波动率预测:", forecast(var_path, rets, fit.x, 5)) print("真实最后一日波动率:", true_vol[-1])
simulate_garch(n, omega, alpha, beta, seed)按 GARCH(1,1) 递推生成模拟收益,相当于在实验室里制造一片已知海况的“人工海浪”。compute_var_path(rets, theta)用当前参数算出整条方差路径,是似然函数的地基。neg_log_lik(theta, rets)若参数违反 \(\alpha+\beta<1\) 等约束,直接返回极大惩罚值,引导优化器回到合法海域。var = omega + alpha * rets[-1] ** 2 + beta * sigma2_path[-1]一步预测公式的代码实现,最新冲击和当前波动共同决定明日风险。var = omega + (alpha + beta) * var两步以后,只需用 \(\alpha+\beta\) 持续滚动,预测逐渐收敛到长期方差。
常见误区
误区我学会了 GARCH,是不是就能预测明天股票是涨还是跌?下次大跌前赶紧跑。
正解GARCH 预测的是波动幅度,不是方向。它更像船长预报“明天浪高几米”,而不是“明天驶向哪个港口”。涨跌方向应由收益率方程(均值模型)负责,GARCH 管的是方差方程——你的“风险备多少”和“方向怎么选”是两套系统。
为何常见:波动率经常被口语化成“市场恐慌程度”,让人误以为它和价格方向绑定。
误区GARCH(1,1) 里的 α+β 等于 0.98,说明现在市场波动率很高,要赶紧减仓。
正解α+β 反映波动率的“持续性”,即一次冲击能存留多久,而不是当前波动水平。α+β 接近 1 表示风暴一旦形成就很难消退;而当前波动率是多少,要看 \(\sigma_t^2\) 的实际数值。
为何常见:把“波动率的风险等级”和“波动率的衰减速度”混为一谈,一看系数就紧张。
误区GARCH 名字里带个 G,那我先学 ARCH,GARCH 不就是一个更高阶的 ARCH 吗?
正解恰恰相反——GARCH(1,1) 是“无限阶 ARCH 的压缩版”。它用 \(\beta\sigma_{t-1}^2\) 一个参数代表所有历史滞后冲击的累计影响,所以更简洁、更易估计。ARCH 是 GARCH 在 \(\beta=0\) 时的特例。
为何常见:两者名字相似、ARCH 更早诞生,学起来容易按时间顺序误判包含关系。
误区做残差诊断时跑一下 Ljung-Box 检验,p 值很大,说明均值方程没问题,模型完工。
正解LB 检验有两种用法:对残差做检验看均值方程;对“残差平方”做检验看方差方程是否把 ARCH 效应抓干净。GARCH 诊断必须测后者——若平方残差仍显著相关,说明波动率信息还有残留,海图漏掉了暗流。
为何常见:教学中常以“残差白噪声”作为总结合糊带过,忽略了检验对象是残差还是残差平方。
误区收益率的波动一会儿大一会儿小,方差一直在变化,那收益率序列肯定不平稳,不能用时间序列模型。
正解弱平稳只要求均值和自协方差不随时间改变,并不要求方差恒定。GARCH 恰好允许“条件方差”随时间变化,同时保证收益序列本身平稳。这就像海面起伏不断,但海平面高度长期稳定。
为何常见:学统计时先接触“方差恒定”的平稳定义,遇到金融数据时把“无条件矩”和“条件矩”混为一谈。
面试题
Q1. GARCH(1,1) 模型中,长期(无条件)方差的表达式是?
- A.\(\omega/(1-\alpha-\beta)\)← 正确答案
- B.\(\omega/(1-\alpha+\beta)\)
- C.\((\alpha+\beta)/\omega\)
- D.\(\omega \times (\alpha+\beta)\)
答案:A。由平稳条件 \(\alpha+\beta<1\),令方差方程两边取期望可得 \(\sigma^2 = \omega + (\alpha+\beta)\sigma^2\),解得 \(\sigma^2 = \omega/(1-\alpha-\beta)\)。就像长期海况由基础风浪和衰减率共同决定。
Q2. “波动率聚集”最直接的含义是?
- A.大盘涨跌互相抵消
- B.大波动与大波动相邻出现,小波动与小波动相邻出现← 正确答案
- C.波动率服从均匀分布
- D.收益率均值显著不为零
答案:B。波动率聚集是 ARCH/GARCH 要刻画的核心现象,指的是波动率在时间上扎堆:平静期与动荡期交替。它说的是“波幅的大小”聚集,而不是方向、分布形态或均值问题。
Q3. 给定日波动率 \(\sigma=2\%\),用 \(z=1.96\) 计算单尾 95% 置信水平的 VaR,约为?
- A.\(2.0\%\)
- B.\(2.5\%\)
- C.\(3.92\%\)← 正确答案
- D.\(7.84\%\)
答案:C。VaR 的计算公式是 \(z_\alpha \cdot \sigma = 1.96 \times 2\% = 3.92\%\)。它表示在 95% 置信水平下,单日最大预期亏损约为 3.92%,相当于给“船体吃水深度”划一条安全线。
Q4. GARCH(1,1) 中系数 \(\beta\) 的实际含义是?
- A.上一期收益的平均水平
- B.上一期波动率对本期波动率的记忆延续系数← 正确答案
- C.价格趋势的斜率
- D.市场风险溢价
答案:B。\(\beta\) 乘的是 \(\sigma_{t-1}^2\),表示“昨天的风险水平会多大程度传导到今天”。它让波动率具有记忆性,是 GARCH 区别于 ARCH 的关键;其余选项分别属于均值方程、趋势项和收益率定价。
Q5. EGARCH 模型相比 GARCH 的主要优势是?
- A.参数更少
- B.能捕捉好消息与坏消息的非对称影响← 正确答案
- C.不需要估计均值方程
- D.只适用于分钟级高频数据
答案:B。EGARCH 通过对数方差和方向项 \(\gamma z_{t-1}\) 描述杠杆效应:坏消息引发的波动率上升比好消息更明显。它对数化的设定也让参数无需非负约束,这是它在数值估计上的额外好处。
Q6. 对 GARCH 模型残差做 LB 检验时,应检验什么对象?
- A.原始价格的单位根
- B.标准化残差的平方← 正确答案
- C.残差的一阶差分
- D.均值的显著性
答案:B。若要判断波动率建模是否充分,需要对标准化残差的平方做 Ljung-Box 检验。若平方残差仍存在自相关,说明 ARCH 效应未被完全消除;对残差本身检验则主要用于均值方程诊断。
Q7. 当 \(\alpha+\beta=1\) 时,GARCH(1,1) 过程会发生什么?
- A.方差过程退化为 IGARCH,冲击的影响永久持续← 正确答案
- B.方差恒等于零
- C.收益率变成布朗运动
- D.模型完全无法估计
答案:A。\(\alpha+\beta=1\) 时无条件方差的分母为零,方差过程带有单位根,一次冲击的效果不会衰减,称为 IGARCH。这就像风暴一旦形成就永远不散,风险部门需要额外警惕。
Q8. 关于 GARCH 模型定阶,下列哪些说法正确?
- A.可以观察平方收益的自相关函数作为初步参考← 正确答案
- B.AIC 和 BIC 越小代表模型越优← 正确答案
- C.阶数越高一定预测越准
- D.GARCH(1,1) 是金融实践中最常用的起点← 正确答案
答案:ABD。定阶常先看平方收益 ACF,再比较 AIC/BIC,且 GARCH(1,1) 因简洁高效而成为默认起点。选项 C 错,高阶会造成过拟合,样本外预测未必更好。
Q9. 关于 GARCH(1,1) 的 h 步波动率预测,下列说法正确的是?
- A.预测方差会随 h 增大收敛到长期方差← 正确答案
- B.预测过程中使用 \(\omega + (\alpha+\beta)\sigma^2\) 持续递推← 正确答案
- C.预测与最新一期收益完全无关
- D.当 \(\alpha+\beta=1\) 时,预测方差不收敛← 正确答案
答案:ABD。多步预测依靠 \(\omega+(\alpha+\beta)\sigma^2\) 递推并收敛到长期方差,因此 A、B 对;第一步预测依赖最新冲击,C 错;\(\alpha+\beta=1\) 时冲击不衰减,预测方差不收敛,D 对。
Q10. 关于 EGARCH 模型,下列哪些表述正确?
- A.对波动率取对数可以保证波动率非负← 正确答案
- B.\(\gamma z_{t-1}\) 用于捕捉冲击的方向不对称性← 正确答案
- C.\(\gamma<0\) 表示坏消息比好消息引发更高的波动率← 正确答案
- D.EGARCH 中不需要平稳条件
答案:ABC。对数变换使方差天然为正,方向项带来杠杆效应,\(\gamma<0\) 时负收益会推高波动率,故 A、B、C 均对。EGARCH 虽无需参数非负约束,但仍需满足一定条件才能保证对数方差过程平稳,D 错。