跳转至

时间序列分析

时间序列分析是处理按时间顺序排列的数据点的统计方法和机器学习技术的集合。从股票价格预测到气象预报,从服务器负载监控到供应链管理,时间序列分析在工业界有着极为广泛的应用。

学习路线: 平稳性检验 → 经典统计模型 → 指数平滑 → ML特征工程 → 深度学习方法 → 评估与实践


时间序列分析概述

基本概念

一个时间序列 \(\{y_t\}_{t=1}^{T}\) 是在等间隔时间点上观测到的数据序列。时间序列的核心组成成分包括:

成分 描述 示例
趋势(Trend) 长期的上升或下降方向 GDP 逐年增长
季节性(Seasonality) 固定周期的规律性波动 零售业每年圣诞节销量激增
周期性(Cyclicity) 非固定周期的波动 经济周期(衰退与繁荣)
噪声(Noise) 不可预测的随机波动 测量误差

平稳性

平稳性(Stationarity)是时间序列分析中最基本的概念。一个严格平稳过程的联合分布不随时间平移而变化。实践中更常用弱平稳(Wide-Sense Stationary):

  1. 均值恒定\(\mathbb{E}[y_t] = \mu\),对所有 \(t\) 成立
  2. 方差有限且恒定\(\text{Var}(y_t) = \sigma^2 < \infty\)
  3. 自协方差只依赖时滞\(\text{Cov}(y_t, y_{t+h}) = \gamma(h)\),只与时滞 \(h\) 有关

平稳性检验方法

  • ADF 检验(Augmented Dickey-Fuller):检验是否存在单位根,p值小则拒绝"非平稳"的原假设
  • KPSS 检验:原假设为平稳,两者结合使用更可靠
  • 差分:对非平稳序列做 \(d\) 阶差分使其平稳,\(\Delta y_t = y_t - y_{t-1}\)

自相关函数(ACF)与偏自相关函数(PACF)

ACF(自相关函数)衡量时间序列与其滞后版本之间的线性相关性:

\[ \rho(h) = \frac{\gamma(h)}{\gamma(0)} = \frac{\text{Cov}(y_t, y_{t+h})}{\text{Var}(y_t)} \]

PACF(偏自相关函数)衡量去除中间滞后影响后 \(y_t\)\(y_{t+h}\) 之间的直接线性关系。

ACF 和 PACF 图是选择模型阶数的重要工具:

模型 ACF 特征 PACF 特征
AR(p) 拖尾(指数衰减) \(p\) 阶后截尾
MA(q) \(q\) 阶后截尾 拖尾
ARMA(p,q) 拖尾 拖尾

经典方法

AR / MA / ARMA / ARIMA 模型

AR(p) — 自回归模型:当前值是过去 \(p\) 个值的线性组合加上白噪声:

\[ y_t = c + \phi_1 y_{t-1} + \phi_2 y_{t-2} + \dots + \phi_p y_{t-p} + \epsilon_t \]

MA(q) — 移动平均模型:当前值是过去 \(q\) 个噪声项的线性组合:

\[ y_t = \mu + \epsilon_t + \theta_1 \epsilon_{t-1} + \theta_2 \epsilon_{t-2} + \dots + \theta_q \epsilon_{t-q} \]

ARMA(p,q):结合 AR 和 MA:

\[ y_t = c + \sum_{i=1}^{p} \phi_i y_{t-i} + \epsilon_t + \sum_{j=1}^{q} \theta_j \epsilon_{t-j} \]

ARIMA(p,d,q):在 ARMA 基础上加入差分操作,处理非平稳序列。\(d\) 是差分阶数。

Box-Jenkins 方法

Box-Jenkins 方法是选择和拟合 ARIMA 模型的系统化流程:

  1. 识别(Identification):观察 ACF/PACF 图,确定 \(p\)\(d\)\(q\) 的候选值
  2. 估计(Estimation):用最大似然估计(MLE)拟合模型参数
  3. 诊断(Diagnostics):检查残差是否为白噪声(Ljung-Box 检验)
  4. 预测(Forecasting):如果诊断通过,则用模型进行预测

季节性分解

季节性 ARIMA 即 SARIMA(p,d,q)(P,D,Q)\(_s\),其中 \(s\) 为季节周期。

经典的加法/乘法分解:

  • 加法模型\(y_t = T_t + S_t + R_t\)(趋势 + 季节性 + 残差)
  • 乘法模型\(y_t = T_t \times S_t \times R_t\)

STL 分解(Seasonal and Trend decomposition using Loess)是更鲁棒的方法,能处理变化的季节性。


指数平滑

简单指数平滑(SES)

适用于无趋势、无季节性的序列:

\[ \hat{y}_{t+1} = \alpha y_t + (1 - \alpha) \hat{y}_t, \quad 0 < \alpha < 1 \]

\(\alpha\) 越大,越倾向于最近的观测值;\(\alpha\) 越小,预测越平滑。

双指数平滑(Holt 方法)

增加趋势分量:

\[ \ell_t = \alpha y_t + (1 - \alpha)(\ell_{t-1} + b_{t-1}) \]
\[ b_t = \beta(\ell_t - \ell_{t-1}) + (1 - \beta) b_{t-1} \]
\[ \hat{y}_{t+h} = \ell_t + h \cdot b_t \]

其中 \(\ell_t\) 是水平分量,\(b_t\) 是趋势分量。

Holt-Winters 方法

进一步加入季节性分量,分为加法和乘法两种形式:

方法 适用场景 季节性特征
Holt-Winters 加法 季节性振幅恒定 \(S_t\) 加到预测值上
Holt-Winters 乘法 季节性振幅随趋势增长 \(S_t\) 乘以预测值

Prophet

概述

Prophet 是 Meta(原 Facebook)开源的时间序列预测工具,专为业务时间序列设计,对缺失值、异常点和趋势变化具有良好的鲁棒性。

核心模型

Prophet 将时间序列分解为三个可加的分量:

\[ y(t) = g(t) + s(t) + h(t) + \epsilon_t \]
分量 描述 实现
\(g(t)\):趋势 长期增长趋势 分段线性或逻辑增长曲线,自动检测变化点
\(s(t)\):季节性 周期性模式 傅里叶级数:\(s(t) = \sum_{n=1}^{N}\left(a_n \cos\frac{2\pi nt}{P} + b_n \sin\frac{2\pi nt}{P}\right)\)
\(h(t)\):节假日效应 节假日/特殊事件 用户提供节假日列表,模型估计影响大小

Prophet 的优势

  • 对非数据科学家友好,参数直觉化
  • 自动处理缺失数据和异常值
  • 允许手动添加变化点和节假日
  • 内置不确定性区间

机器学习方法

特征工程

将时间序列转化为表格数据,是应用传统 ML 模型的关键:

特征类型 示例 说明
滑动窗口(lag 特征) \(y_{t-1}, y_{t-2}, \dots, y_{t-k}\) 过去 \(k\) 个时间步的值
滚动统计量 移动平均、移动标准差 捕捉局部趋势和波动性
日期/时间特征 月份、星期几、小时、是否节假日 编码时间周期性
差分特征 \(y_t - y_{t-1}\), \(y_t - y_{t-7}\) 捕捉变化量
傅里叶特征 \(\sin(2\pi t / P)\), \(\cos(2\pi t / P)\) 编码季节性

XGBoost / LightGBM 时序

梯度提升树在时间序列竞赛中表现出色:

  • 优势:无需平稳性假设、自动处理非线性、可融合外部特征
  • 注意事项:必须使用时间顺序的交叉验证(不能随机划分),避免数据泄露
  • 多步预测:递归预测(逐步预测并将预测值作为下一步输入)或直接多输出

深度学习方法简介

LSTM 时序预测

LSTM(Long Short-Term Memory)天然适合序列建模:

  • 编码器-解码器架构用于多步预测
  • 可处理多变量时间序列
  • 缺点:训练慢、超参数敏感

Temporal Fusion Transformer (TFT)

Google 提出的 TFT(2021)结合了多种先进技术:

  • 变量选择网络:自动识别重要特征
  • 时间注意力:捕捉长短期依赖
  • 可解释性:提供特征重要性和时间注意力权重
  • 在多个基准数据集上达到 SOTA

PatchTST

Nie et al. (2023) 提出将时间序列分割为 patch(类似 ViT 对图像的处理):

  • 将长序列切分为固定长度的 patch
  • 每个 patch 作为一个 token 输入 Transformer
  • 大幅降低计算复杂度,同时保留长程依赖
  • Channel-independence 策略提升多变量预测

评估方法

常用评估指标

指标 公式 特点
MAE \(\frac{1}{T}\sum_{t=1}^T \|y_t - \hat{y}_t\|\) 直观,对异常值不敏感
RMSE \(\sqrt{\frac{1}{T}\sum_{t=1}^T (y_t - \hat{y}_t)^2}\) 放大大误差
MAPE \(\frac{100\%}{T}\sum_{t=1}^T \left\|\frac{y_t - \hat{y}_t}{y_t}\right\|\) 百分比误差,但 \(y_t \approx 0\) 时不稳定
sMAPE \(\frac{200\%}{T}\sum_{t=1}^T \frac{\|y_t - \hat{y}_t\|}{\|y_t\| + \|\hat{y}_t\|}\) 对称版 MAPE
MASE \(\frac{\text{MAE}}{\text{MAE}_{\text{naive}}}\) 相对于朴素预测的改进,适合跨序列比较

Backtesting(回测)

时间序列的评估必须尊重时间顺序:

  • 滚动窗口验证:固定窗口大小向前滑动,每次重新训练并预测
  • 扩展窗口验证:训练集逐步扩大,预测窗口向前移动
  • 禁止未来数据泄露:严格确保训练数据在预测时间点之前
扩展窗口验证示意:

Fold 1: [=====训练=====][预测]
Fold 2: [======训练======][预测]
Fold 3: [=======训练=======][预测]
Fold 4: [========训练========][预测]
                                    → 时间方向

方法选择指南

场景 推荐方法 理由
数据量小、单变量 ARIMA / 指数平滑 参数少,不易过拟合
业务预测(有季节性/节假日) Prophet 易用、可解释
有丰富外部特征 XGBoost / LightGBM 特征融合能力强
长序列、多变量、大数据 Transformer 类(TFT/PatchTST) 强大的建模能力
需要不确定性估计 GP / 贝叶斯方法 / Prophet 内建不确定性量化

评论 #