☰
金融时间序列建模实战:从平稳性检验到GARCH波动率预测
2026/10/13 18:32:07 网站建设 项目流程

1. 为什么金融时间序列不是普通时间序列

先说个我当年入行时的困惑:学过经典时间序列分析之后,第一次拿股票数据练手,发现教科书里那套“先看趋势—分解—再建模”的流程根本跑不通。后来才明白,金融时间序列和普通时间序列的底层逻辑差别太大,这套课程笔记的核心,就是帮你把这些差别焊死在脑子里。

普通时间序列分析,常见于气象、工业过程、传感器数据,这些数据往往有比较强的周期性、趋势性,甚至季节效应,比如气温、月度销量、设备振动信号。你拿到手的第一件事是分解,把趋势项、季节项、随机残差剥离开,然后对残差建模。

金融数据完全不同。拿日频收益率来说,它最引人注目的特征不是趋势,而是“没有趋势”——看起来像一个围绕零轴波动的白噪声。但这只是表面。如果你计算收益率的绝对值、平方或波动率估计值,会发现它们有明显的自相关,大波动后面往往跟着大波动,小波动后面也聚成一团,这就是常说的波动率聚集效应。

另一个关键差异是金融数据的分布形态。日频收益率的直方图普遍表现为“尖峰厚尾”:中间比正态分布更陡,尾巴却更厚,极端值出现的频率远高于正态假设。偏度通常不为零,股票指数收益率常呈左偏,即大跌的极端值比大涨更多、更急。这意味着用均值、方差来刻画风险,天然会低估尾部风险。

所以,金融时间序列建模真正的主角不是均值,而是波动率——也就是方差的条件演变。课程里反复强调的 GARCH 族模型,建立在这一认知之上。理解了这一点,你后面才能明白为什么有人会对收益做 ARIMA,却对平方收益做 GARCH:这两套工具各管各的东西,前者管条件均值,后者管条件波动率。

我再补一个自己实测过的场景。某次应急调仓事件导致某标的单日收益率达到 −12%,标准差大约 5 倍以上,传统正态 VaR 模型对这种极端场景几乎完全失效,但用 Student-t 分布的 GARCH 模型去推算,尾部概率和实际发生频率就要贴得多。这就是从“数据本身长什么样”出发推导模型设计的典型案例。

2. 模型家族谱系:从平稳性到波动率聚集

2.1 平稳性:一切建模的前置门槛

平稳性是金融时间序列建模里第一个要迈过去的坎。常见的表述是“宽平稳”,或者说弱平稳,要求均值为常数、方差恒定、自协方差只依赖于间隔期。你拿到一批价格序列,比如某指数日线收盘价,几乎不可能平稳,因为它有随机游走的成分:今天的价格等于昨天的价格加上一个随机扰动,扰动项独立同分布。

这里有个初学者容易忽略的地方:价格序列本身几乎从不平稳,但它的对数收益序列通常近似平稳,因为取对数后再差分,能消除尺度效应并把乘法关系转换为加法关系。你可以在复盘中检验一下,原始价格序列的 ADF 统计量几乎不显著,而取对数后的一阶差分序列,ADF 统计量显著为负,p 值远小于 0.05,平稳性假设就站得住脚了。

所以建模的第一步不是拿着价格直接做 ARIMA,而是先把价格变换为对数收益率,也就是对数价格的一阶差分。遇到某些低频数据或含单位根的宏观指标,有时需要先做二阶差分甚至更复杂的变换,但金融高频领域,对数日收益率已经是一个非常稳固的建模对象。

这里有一个极易踩的坑:单位根检验的“原假设”方向。ADF 检验的原假设是序列存在单位根,也就是不平稳,备择假设是平稳。很多新手把逻辑弄反了,看到 p 值小于 0.05 就以为“拒绝不平稳”,结果模型输出全乱套。一定要记牢:p 小拒绝的是单位根存在,说明序列平稳。

数据频率也会影响判断。极端高频的数据,比如逐笔 tick,带有明显的微观结构噪声,比如买卖价差反弹,ADF 检验可能误判;日频以上相对干净,一般不会出问题。

2.2 从 MA 到 ARMA,ARIMA:条件均值的基础工具箱

平稳收益序列接下来要讨论的是条件均值结构。换句话说,今天收益率的期望值,是否受到昨天或更早收益率的影响。这里有个金融经验法则:日频收益率的自相关通常很弱,但并非完全为零,尤其在短周期、流动性较差的市场、特定行业指数上,滞后一阶或数阶的自相关偶尔显著。

经典工具是 ARMA 模型:AR 项用滞后自身解释当前值,MA 项用滞后随机误差解释当前值,两者结合成 ARMA(p, q)。如果数据非平稳再加入差分数,就得到 ARIMA(p, d, q)。课程笔记里对 MA、AR、ARMA 的理论性质做了一堆推导,但实际应用中最有价值的判断工具是 ACF 和 PACF 图。

  • ACF(自相关函数)在 MA(q) 模型的第 q 阶后应截尾,即 q 阶之后快速掉到置信区间内。
  • PACF(偏自相关函数)在 AR(p) 模型的第 p 阶后应截尾。
  • 如果 ACF 和 PACF 都呈拖尾衰减,说明需要 ARMA 混合模型。

这个“截尾 vs 拖尾”的判断在纯理论课堂上看起来很清楚,一到真数据上你就知道什么叫模糊地带了。样本长度、随机波动、异常值都会让 ACF/PACF 的尾巴拖得很不干净。我的习惯是:先用信息准则 BIC/AIC 做候选模型扫描,再结合 ACF/PACF 肉眼确认,而不是反过来硬套截尾规则。

还需要提一句:MA 项在金融收益建模中有特殊的“经济含义”。一个显著的负 MA(1) 系数,往往被解读为短期反转效应的痕迹,前面说的买卖价差反弹或短时过度反应都會形成这种负自相关,换句话说,今天涨了明天常回调。你做的模型不是纯粹在拟合曲线,它其实在捕捉市场中某种持续性或反转性的行为特征。

2.3 GARCH 族模型:条件波动率才是重头戏

如果说 ARIMA 是金融时序建模的“前锋”,GARCH 就是真正的“中场发动机”。金融收益率序列的残差即使过滤掉均值结构,仍然表现出波动率聚集和厚尾,这就逼迫你抛弃“残差方差恒定”的假设,转而让方差本身成为一个随时间演变的随机过程。

最基础的 ARCH(q) 模型,把当前方差表达为过去 q 期残差平方的线性组合。这解决了波动率聚集的问题,但往往需要较高的 q 阶才能拟合好数据。实务中更容易碰到的是 GARCH(1,1),它引入一个自身的滞后项,整个模型用三个参数就能刻画方差缓慢衰减的特征。

写一下最常用公式的直觉:方差 = 长期平均方差 × 某个常数 + 过去残差平方的贡献 + 上一期方差的延续。这个结构非常优雅,它表达了一个重要结论:一次大的冲击会造成波动率升高,但波动率不会立刻消失,而是缓慢衰减。衰减速度由 GARCH 项系数决定,系数越接近 1,冲击的半衰期越长。

课程笔记里还专门讲了几种 GARCH 变体:EGARCH 能捕捉非对称性,即利空和利好对波动的影响不同;GJR-GARCH 也能处理杠杆效应;IGARCH 处理方差接近单位根的情况;M-GARCH 结合了条件均值与波动率,适合做预期收益与风险的联合建模。

实际做模型选择时,我的经验是:先用 GARCH(1,1) 搭底,如果标准化残差的平方仍存在显著自相关,再逐步提升阶数或换分布假设。换分布往往比加阶数更有效。金融收益率的标准化残差通常具有厚尾特征,用 Student-t 分布或偏斜 Student-t 分布替代正态分布,模型的拟合优度和 VaR 预测能力都会明显改善。

2.4 协整与误差修正:多资产建模的桥梁

单个序列讲完,课程笔记后半段把视角拉到了多个金融时间序列之间的关系上。两个或多个不平稳序列,它们的某种线性组合却可能是平稳的,这就是协整。协整的经济解释非常直观:资产价格之间可能存在长期均衡关系,短期可能会偏离,但偏离会慢慢修正。

协整检验的典型路径是 Engle-Granger 两步法:先对两列价格序列做线性回归,再对残差做单位根检验。如果残差平稳,说明存在协整关系。另一种常用方法是 Johansen 检验,适合多变量、多协整向量的情况,但样本量需求大、滞后期敏感。

一旦确认协整关系,就可以构造误差修正模型(VECM):把短期动态和长期均衡同时纳入一个框架。误差修正项的系数代表偏离均衡后的回调速度。

这里要提醒一个交易视角的应用:协整是配对交易的基因。假设两只同类资产价格长期同涨同跌,某日它们的价差突然拉大,你可以在价差回归均值的方向下注。但协整关系在真实市场中是会发生结构性变化的,比如企业基本面变化、监管规则调整、市场结构突变,都可能让旧协整关系失效。所以回测里协整关系成立,不意味着未来永远成立,需要滚动窗口定期复查。

3. 建模流程实操:从数据到手把手搭出 GARCH 模型

这里分享一条我多次验证过的完整操作路径,你按这个顺序走,少走很多弯路。

3.1 数据准备与前期变换

拿到原始价格序列的第一件事,永远不是建模,而是清洗和变换。具体步骤很固定:

  1. 处理缺失值:金融数据偶尔有停牌、交易所故障、节假日不齐等问题,先看缺失比例。
  2. 计算收益率:常规用对数收益率,即log(P_t) - log(P_{t-1})。对数收益率可直接相加,日收益率汇总成周收益率、月收益率都很方便。
  3. 异常值诊断:画出收益率时序图,标注绝对值超过 4~5 倍标准差的位置,再决定是保留、缩尾还是剔除。

我这里说一句很多人不听但我必须强调的:除非数据明显是错误记录(比如价格变成负数、小数点错位),否则不要随意剔除极端收益,因为金融时序里极端值本身就是信息,它们通常是后续波动率上升的导火索。把大波动剔掉了,你的波动率模型就学不到聚集效应的本质。

3.2 平稳性与均值结构建模

对对数收益率序列做 ADF 检验。正常情况你会在 1% 显著性水平下拒绝单位根假设。如果股指收益率仍有微弱自相关,特别是滞后一阶显著,可尝试拟合 AR(1)、MA(1) 或 ARMA(1,1)。

选择均值结构时我坚持两个原则:第一,越简约越好,不要为了消除自相关堆一堆参数,金融收益率均值自相关本身就很弱;第二,残留自相关要交给残差诊断去判断,而不是靠肉眼。

均值模型定好后,提取残差序列,后续的波动率建模都基于这份残差。

3.3 ARCH 效应检验与 GARCH 建模

在建立波动率模型之前,先确认残差是否真的存在条件异方差。常用方法是 ARCH-LM 检验(拉格朗日乘子检验):把残差平方对自身滞后项做回归,看回归是否显著。也可以直接画出残差平方的 ACF 图,如果前几阶自相关显著超出置信带,就可以上 GARCH。

模型设定步骤:

  1. 先拟合 GARCH(1,1)+正态分布。
  2. 检查标准化残差是否还有 ARCH 效应,方法是对标准化残差平方做 Ljung-Box 或 ARCH-LM 检验。
  3. 如果标准化残差本身厚尾明显,改用 Student-t 分布重新拟合。
  4. 比较 BIC/AIC 和标准化残差的 QQ 图,选出合适的模型。

这里有一个细节:GARCH(1,1) 的系数和通常接近 1,比如 α≈0.08、β≈0.90,加起来的和约 0.98,说明波动率冲击衰减很慢。如果 α+β 超过 1,说明模型的方差过程不稳定,你选的模型可能有问题,或者数据处理不干净导致伪异方差,建议回溯检查。

3.4 模型预测与风险指标计算

模型拟合完毕后,可以做两类预测:

  • 条件波动率预测:从最后一天的方差状态出发,递归计算未来一周的逐日方差,日频方差加总再开根号得到周度波动率预测。
  • VaR 计算:如果模型是正态分布,VaR_95 = 均值预测 - 1.65 × 波动率预测;如果使用 Student-t 分布,需要查 t 分布的分位数。实际经验是,Student-t 假设下的 VaR 在高置信水平下明显更贴近真实尾部风险。

计算时注意,GARCH 模型的预测是逐步衰减到长期平均方差的,预测期越长,波动率越接近长期均值。用这个特性可以做一个简单的均值回归波动率策略,但永远不要忽略极端事件造成方差跳升的可能性——模型预测方差不会把“下一次危机”事先算进去。

4. 常见问题与排查技巧实录

4.1 案例一:ACF 图上全阶显著

某次我用某行业指数日收益率建模,ACF 图显示前十阶全部显著,但 PACF 只有前两阶有尖峰。一般人的第一反应是把这个当 ARMA 高点拖尾处理,但我的做法是先检查数据本身。

排查后发现是某个时段的指数没有按规定时间同步更新,导致同一收益率被重复计算。清洗后 ACF 显著度大幅下降,再拟合 ARMA(2,0),残差干净很多。这个案例的教训是:ACF 上出现大面积显著,先怀疑数据质量问题,再怀疑模型结构。

4.2 案例二:GARCH 系数加总超过 1

有一次拟合某只商品期货的收益率,GARCH(1,1) 的 α+β 竟然达到了 1.04,方差过程理论上是非平稳的。我查了一下数据,发现那段时期有连续停牌叠加强制平仓的极端行情,日收益率的方差本身存在结构性跳变。

解决思路是换成分段建模:把极端行情区间单独处理,或者改用含外生虚拟变量的 GARCH 模型,在极端时段增加一个方差跳跃项。最终拟合结果稳定下来,α+β≈0.97。

4.3 案例三:样本内拟合很好,预测一塌糊涂

这是最常见的问题。原因大多是过拟合了噪声,比如在均值模型中塞了很多不显著的滞后项,或者在波动率模型中用了很高阶的 ARCH。金融时间序列信号弱,参数一多,样本内拟合必然漂亮,但预测能力会崩溃。

我的建议是采用滚动窗口回测:固定窗口长度(比如 500 个交易日)或者逐步扩展窗口,每滚动一次重新估计参数,然后预测下一期,最终统计预测区间是否准确覆盖真实值。这种回测方式比单一样本内 AIC 对比更有说服力,因为它直接检验你模型的泛化能力。

4.4 一张表记住常见坑

症状可能原因解决方向
价格序列 ADF 无法拒绝单位根正常现象,价格一般不平稳对对数收益率建模
收益率 ACF 多阶显著数据清洗不彻底/交易日不同步检查重复值、异常值处理
标准化残差仍厚尾正态分布假设不足改用 Student-t 或偏斜 t 分布
标准化残差平方仍自相关GARCH 阶数不足尝试 GARCH(2,1) 或 EGARCH
α+β>1数据结构突变/极端行情分段建模或加虚拟变量
样本内好但样本外差过拟合减少参数、滚动验证
两个价格序列各自不平稳但价差平稳存在协整试点 VECM 或配对交易

5. 课程笔记之外的几条个人主观实操经验

笔记里最后有一句话让我印象很深:“模型只是帮助我们理解市场的放大镜,不是市场的本身。”我想展开说一下这句话在我实际使用时是什么样的。

第一个体会是,模型参数稳定性比模型 AIC 排名重要得多。两个模型 AIC 只差 0.5,选哪个其实无所谓;但如果某个模型在最近 200 天滚动估计中,参数忽高忽低剧烈震荡,这样的模型你基本无法信任。好的模型在滚动窗口中参数应该相对平稳,即使波动率上升,系数也只在合理区间内小幅度变动。

第二个体会是波动率的“半衰期”值得专门观察。GARCH 模型估计出的 α+β 越接近 1,波动率衰减越慢,这意味着一次冲击对远期风险的影响持续时间更长。如果你在做风险预算,这个半衰期决定了你应该把较多风险额度留给当前阶段,还是等比分配到远期。

第三个体会来自某次做资产配置模拟。我把多个资产的 GARCH 预测方差放到协方差矩阵里做组合优化,效果不如直接用指数加权移动平均(EWMA)的方差快照。原因是 GARCH 预测方差更平滑,适合中长期风险测度,而组合优化这种对短期波动率变化敏感的应用,EWMA 的实时反应速度反而更贴合。工具选型永远取决于用途,没有全能模型。

第四点是我认为课程笔记里最有价值、但最容易被跳过的一句话:诊断永远比拟合重要。模型参数再怎么漂亮,标准化残差里要是还藏着可预测的结构,说明某些信息没有被模型吸收,要么是均值结构没捕捉到,要么是分布假设有问题,要么是改用非线性模型。偶尔看到“参数显著”就觉得大功告成,急着去划线写策略,市场会立刻给你上生动一课。

我个人在做完每一次建模项目后,都有一个收尾动作:把标准化残差的 ACF/PACF、QQ 图、以及预测区间的覆盖率统计,三张图存成固定模板。下一次建模直接用同一套诊断标准比对,省时省力,也能提前发现一些潜在问题。建议你也这么做。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询