3. 时间序列核心概念
在金融时序预测项目中,模型效果的上限往往不取决于算法有多复杂,而取决于我们是否真正理解了数据本身的结构。一条价格曲线、一段收益率序列、一组成交量数据,看似只是数字的排列,实际上是由若干可分解的成分叠加而成。本节将系统梳理时间序列的六大核心概念,帮助你建立“先看懂数据、再选择模型”的专业直觉。
一、核心原理:一条序列由哪些成分构成
经典时间序列分解理论认为,一个观测序列 y_t 可以近似拆解为四个部分:趋势(Trend)、季节性(Seasonality)、周期性(Cyclicality)与噪声(Noise)。它们的关系通常有两种表达形式:
加法模型:y_t = T_t + S_t + C_t + ε_t
乘法模型:y_t = T_t × S_t × C_t × ε_t
当季节波动的幅度随趋势水平同步放大时,应优先考虑乘法模型;当波动幅度相对稳定时,加法模型更合适。金融数据中,价格类序列常用乘法模型,收益率类序列更接近加法模型。
- 趋势:序列在较长时期内的持续上升或下降方向,反映宏观经济、行业景气或资产长期定价逻辑。
- 季节性:固定周期内重复出现的规律波动,周期长度已知且稳定,如日内效应、周内效应、月度效应。
- 周期性:非固定周期的起伏,通常由经济周期、政策周期或市场情绪驱动,周期长度不固定、振幅也不稳定。
- 噪声:无法被上述结构解释的随机扰动,包含突发事件、微观结构噪声与测量误差。
二、平稳性与自相关性:建模的两块基石
平稳性(Stationarity)是绝大多数经典时序模型(如 ARIMA、GARCH)的前提假设。一个弱平稳序列需满足三个条件:均值恒定、方差不随时间变化、自协方差只与时间间隔有关而与绝对时间无关。金融价格序列通常是非平稳的,但一阶差分后的收益率序列往往接近平稳。
from statsmodels.tsa.stattools import adfuller
result = adfuller(returns, autolag="AIC")
print("ADF统计量:", result[0])
print("p值:", result[1])
# p值 < 0.05 通常认为序列平稳
自相关性(Autocorrelation)衡量序列与其自身滞后版本之间的线性相关程度。自相关函数(ACF)用于识别序列的记忆结构,偏自相关函数(PACF)用于剥离中间滞后影响后判断直接相关性。二者共同决定了 AR、MA 或 ARMA 模型的阶数选择。
| 概念 | 核心问题 | 常用工具 | 金融场景示例 |
|---|---|---|---|
| 趋势 | 长期方向是否持续 | 移动平均、HP滤波 | 股指长期上行 |
| 季节性 | 固定周期是否重复 | STL分解、季节差分 | 月末资金面波动 |
| 周期性 | 非固定周期是否往复 | 谱分析、带通滤波 | 牛熊转换 |
| 噪声 | 随机扰动有多大 | 残差分析、波动率模型 | 突发事件冲击 |
| 平稳性 | 统计特性是否稳定 | ADF、KPSS检验 | 收益率序列建模 |
| 自相关性 | 过去是否影响现在 | ACF、PACF、Ljung-Box | ARIMA定阶 |
三、方法流程:从原始序列到可建模序列
- 可视化诊断:先画时序图,观察趋势方向、波动聚集与异常点。
- 分解成分:使用 STL 或经典分解,将序列拆为趋势、季节与残差。
- 平稳性检验:对原序列做 ADF 检验,不平稳则差分或取对数差分。
- 自相关分析:绘制 ACF/PACF 图,判断滞后阶数与模型类型。
- 残差验证:建模后检查残差是否为白噪声,确认信息已被充分提取。
四、案例与场景:A股日收益率序列分析
以某A股指数日收盘价为例。原始价格序列呈现明显上升趋势,ADF 检验 p 值约为 0.92,无法拒绝“存在单位根”的原假设,说明价格序列非平稳。对其进行一阶差分得到日对数收益率后,ADF 检验 p 值降至 0.01 以下,序列趋于平稳。
import numpy as np
import pandas as pd
df["log_ret"] = np.log(df["close"]).diff()
df = df.dropna()
# 检查自相关
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
plot_acf(df["log_ret"], lags=30)
plot_pacf(df["log_ret"], lags=30)
观察 ACF 图可发现,收益率序列在大部分滞后阶上落入置信区间内,说明线性自相关较弱,这符合有效市场假说的弱式有效特征。但收益率平方序列的 ACF 却显著不为零,说明波动率存在聚集效应,这正是 GARCH 类模型的用武之地。
五、常见误区与复盘
- 误区一:把季节性当周期性。 季节性周期固定,可用季节差分处理;周期性周期不固定,强行用固定周期建模会引入偏差。
- 误区二:忽略平稳性直接建模。 对非平稳序列直接建 ARMA,容易得到伪回归,R² 很高但无实际预测力。
- 误区三:过度差分。 差分次数过多会放大噪声、破坏原有自相关结构,通常一阶差分足够,必要时才做二阶。
- 误区四:只看 ACF 不看 PACF。 两者结合才能正确判断 AR 与 MA 的阶数,单看一个容易误判。
- 误区五:把噪声当信号。 残差中若仍有结构,说明模型欠拟合;若残差已是白噪声,就不应再强行挖掘“规律”。
理解趋势、季节性、周期性、噪声、平稳性与自相关性,本质上是在回答一个问题:这条序列中,哪些部分是可预测的结构,哪些部分是不可预测的随机?只有把这个问题回答清楚,后续的特征工程、模型选择与评估才有坚实的立足点。