3. 时间序列基础
宏观经济数据几乎从不“干净”。GDP、CPI、PMI、社融等序列在时间轴上的波动,往往是多种力量叠加的结果。多步预测之所以困难,正是因为这些力量的可预测性差异极大。本节的核心任务,是把一条观测序列拆解为可解释的成分,并建立判断“这条序列还能不能被稳定建模”的诊断框架。
一、四类成分:趋势、季节、周期与不规则
经典时间序列分解把观测值视为若干成分的函数。理解它们的性质,比记住公式更重要。
- 趋势(Trend):长期水平的缓慢漂移,如潜在产出增长、人口结构变化。它决定多步预测的“基准方向”。
- 季节(Seasonality):固定周期内重复的形态,周期长度已知且稳定,如季度、月度、周度。宏观中常见于CPI环比、社融投放节奏。
- 周期(Cycle):非固定长度的经济波动,如库存周期、信用周期。周期与趋势常被合称“趋势-周期成分”,因为二者难以在有限样本中严格分离。
- 不规则(Irregular/残差):剔除上述成分后的剩余部分,包含噪声、突发事件与模型未捕捉的结构。它的可预测性最低,却是检验模型是否过拟合的关键窗口。
记忆要点:季节是“日历驱动”,周期是“经济驱动”。前者周期长度已知,后者需要靠经济逻辑与谱分析判断。
二、分解方法:从加法到 STL
分解的目标不是“消除波动”,而是把不同可预测性的成分分离,让后续建模各司其职。常用方法有三类:
- 经典分解:用移动平均提取趋势,再用月度/季度均值或中位数估计季节因子。实现简单,但对端点敏感,且假设季节形态不随时间变化。
- X-11/X-13ARIMA-SEATS:官方统计机构常用的季节调整方法,能处理交易日、移动假日等效应,适合CPI、工业增加值等正式发布序列。
- STL(Seasonal-Trend decomposition using Loess):用局部加权回归迭代分离趋势与季节,允许季节形态缓慢演化,鲁棒性较好,是实战中的首选探索工具。
加法模型假设各成分量纲一致、相互独立;乘法模型假设季节波动幅度随趋势水平成比例变化。宏观序列常先取对数,把乘法关系转为加法,再执行分解。
import statsmodels.api as sm
import pandas as pd
# 假设 df 为月度序列,索引为 DatetimeIndex
res = sm.tsa.STL(df['value'], period=12, robust=True).fit()
trend = res.trend # 趋势-周期成分
seasonal = res.seasonal # 季节成分
resid = res.resid # 不规则成分
# 季节强度与趋势强度(衡量成分重要性)
var_resid = resid.var()
var_deseason = (resid + seasonal).var()
var_detrend = (resid + trend).var()
seasonal_strength = max(0, 1 - var_resid / var_deseason)
trend_strength = max(0, 1 - var_resid / var_detrend)
print(seasonal_strength, trend_strength)
下面这张图展示了四类成分如何从一条原始序列中被逐层剥离,以及它们对多步预测的不同贡献。
三、平稳性、自相关与偏自相关
分解之后,下一步是判断残差或差分序列是否“平稳”。平稳性意味着序列的均值、方差和自协方差不随时间平移而改变——这是绝大多数经典时间序列模型的前提。
| 概念 | 含义 | 诊断工具 | 建模含义 |
|---|---|---|---|
| 平稳性 | 统计特性不随时间平移变化 | ADF(原假设非平稳)、KPSS(原假设平稳) | 不平稳则差分,确定 d 阶 |
| 自相关 ACF | 序列与自身滞后 k 期的相关性 | ACF 图、Ljung-Box 检验 | 判断 MA 阶数、检验残差白噪声 |
| 偏自相关 PACF | 剔除中间滞后影响后与滞后 k 期的净相关 | PACF 图 | 判断 AR 阶数 |
经验识别规则:若 ACF 拖尾、PACF 在 p 阶后截尾,倾向 AR(p);若 ACF 在 q 阶后截尾、PACF 拖尾,倾向 MA(q);若两者都拖尾,则考虑 ARMA。但宏观数据中,规则常被季节性与结构突变干扰,必须结合分解图和业务逻辑判断。
常见误区:把“差分后通过 ADF”直接等同于“可以建模”。ADF 对结构突变、异方差和季节单位根不敏感。若序列存在明显季节单位根,应使用季节差分或 SARIMA,而非普通一阶差分。
四、案例复盘:CPI 同比序列的分解与诊断
以某经济体月度 CPI 同比序列为例。直接观察可见:2020 年前后出现深 V 型波动,随后进入缓慢回落通道。若直接对原始序列拟合 ARIMA,模型会把疫情冲击当作可重复的周期,导致多步预测严重失真。
正确流程是:
- 先做 STL 分解,确认季节强度较低(同比已消除大部分季节),趋势成分主导。
- 对趋势成分做 ADF 检验,发现非平稳,进行一阶差分。
- 对差分序列绘制 ACF/PACF,识别出低阶 AR 结构。
- 把 2020 年冲击作为外生哑变量或干预项纳入,而非交给 ARMA 项吸收。
- 用残差的 Ljung-Box 检验确认无剩余自相关,再进入多步外推。
复盘结论:分解不是目的,而是把“可建模结构”与“不可建模冲击”分开。多步预测的稳健性,取决于你是否把结构突变正确地隔离在模型之外,而不是强行让模型去拟合它。
本节建立的这套“分解—平稳化—自相关诊断”流程,是后续所有多步预测模型的共同前置步骤。无论使用 ARIMA、状态空间还是机器学习方法,成分识别与平稳性判断都决定了特征工程的方向和模型误差的可解释性。