Foundations of Time Series Analysis
时间序列数据,按时间顺序排列的观测值集合,渗透于从金融到气候科学的各个领域。准确预测未来值的能力——即 forecasting——是现代数据驱动决策的核心。然而,时间序列的 sequential nature 和潜在的复杂依赖结构,如趋势、季节性和记忆效应,使得通用机器学习方法常常失效。因此,建立坚实的理论基础至关重要,它提供了理解数据生成过程、诊断问题以及选择合适模型的系统化框架。本章,作为整本书的基石,将深入探讨时间序列分析的核心理论,从随机过程的抽象视角到实用的诊断工具,为后续从经典统计到前沿深度学习的预测方法铺平道路。
1.1 时间序列的本质与随机过程视角
从数学上讲,时间序列是一个随机过程(stochastic process)的实现。随机过程是一组随机变量的集合,通常 indexed by time:$\{X_t : t \in T\}$,其中 $T$ 是时间指标集(通常为整数集 $\mathbb{Z}$ 或正整数集 $\mathbb{N}$)。每个 $X_t$ 是一个随机变量,其取值 space 可以是实数、向量或多维。我们观测到的一个具体序列 $x_1, x_2, \dots, x_n$ 是这个过程的一个样本路径(sample path)或实现(realization)。这种视角将单个时间序列视为某个潜在概率模型的输出,从而允许我们使用概率论和统计推断来建模和预测。
考虑一个简单的例子:白噪声过程。定义 $X_t = \varepsilon_t$,其中 $\varepsilon_t \sim \text{IID}(0, \sigma^2)$,即独立同分布均值为0、方差为 $\sigma^2$ 的随机变量。这是一个基本构建块,许多复杂过程可视为白噪声的线性组合。其样本路径看似随机,无记忆性,自相关函数(ACF)在滞后0处为1,其他滞后为0。
更复杂的过程如自回归(AR)或移动平均(MA)过程,引入了依赖结构。例如,AR(1)过程:$X_t = \phi X_{t-1} + \varepsilon_t$,其中 $|\phi| < 1$,$\varepsilon_t$ 为白噪声。这里,当前值依赖于前一时刻的值,系数 $\phi$ 量化了记忆强度。随机游走(Random Walk)是AR(1)中 $\phi=1$ 的特例:$X_t = X_{t-1} + \varepsilon_t$,它表现出强非平稳性,方差随时间增长。
对于多变量时间序列(multivariate time series),我们处理向量值过程 $\mathbf{X}_t = (X_{t}^{(1)}, X_{t}^{(2)}, \dots, X_{t}^{(m)})^\top$。例如,电力需求数据可能包括总负荷、温度、湿度、风速等多个序列,它们之间可能存在动态关系(如温度升高导致空调使用增加)。多变量分析需要考虑跨序列的依赖,通常用向量自回归(VAR)或状态空间模型处理。
随机过程框架强调:我们观测到的一个序列只是众多可能路径中的一个。因此,推断必须基于概率模型,考虑不确定性。预测本质上是计算未来随机变量的条件分布:$P(X_{t+1}, \dots, X_{t+h} \mid \mathcal{F}_t)$,其中 $\mathcal{F}_t$ 是截至时间 $t$ 的信息集(历史数据)。点预测常取条件均值或中位数,但完整预测分布(如分位数预测)在风险管理中越来越重要。
1.2 平稳性:理论基石与诊断方法
平稳性(stationarity)是时间序列分析的基石。许多模型和方法都依赖于平稳性假设,因为它意味着序列的统计特性不随时间变化,从而使历史数据能可靠地用于预测未来。直观上,平稳序列没有趋势或季节性,其波动模式稳定。
严格平稳(Strict Stationarity):随机过程 $\{X_t\}$ 是严格平稳的,如果对任意时间点 $t_1, t_2, \dots, t_k$ 和任意时移 $h$,联合分布满足: $$ (X_{t_1}, X_{t_2}, \dots, X_{t_k}) \overset{d}{=} (X_{t_1+h}, X_{t_2+h}, \dots, X_{t_k+h}), $$ 其中 $\overset{d}{=}$ 表示分布相同。这意味着所有 moments(矩)和整个分布结构都不随时间平移而改变。严格平稳是一个很强的条件,实际中难以验证,且不要求矩存在(如柯西分布是严格平稳但无均值)。
弱平稳(Weak Stationarity)或二阶平稳(Second-order Stationarity):更常用且更易处理的弱平稳要求: 1. 均值恒定:$E[X_t] = \mu$,对所有 $t$ 为常数。 2. 方差有限且恒定:$\text{Var}(X_t) = E[(X_t - \mu)^2] = \sigma^2 < \infty$。 3. 自协方差仅依赖滞后 $h$,不依赖绝对时间 $t$:$\gamma(h) = \text{Cov}(X_t, X_{t+h}) = E[(X_t - \mu)(X_{t+h} - \mu)]$,对所有 $t$ 相同。
弱平稳只涉及一阶和二阶矩,不要求高阶矩或分布相同。对于许多线性模型(如ARMA),弱平稳是充分条件。注意:若过程是严格平稳且二阶矩有限,则它也是弱平稳;但反之不成立(例如,某些弱平稳过程可能非严格平稳)。
为什么平稳性重要?在非平稳序列中,过去的行为可能无法代表未来,因为统计特性在变化。例如,具有上升趋势的GDP序列,其均值随时间增加,直接建模原始序列会导致预测偏差。因此,建模前常需通过变换使序列平稳。
诊断方法:
- **图形检验**:绘制序列图、滚动统计量(如滚动均值、滚动方差)。平稳序列应围绕常数均值波动,波动幅度稳定。例如,电力需求序列可能显示明显的日/周季节性,导致滚动均值周期性变化,表明非平稳。
- **统计检验**:常用单位根检验,如 **ADF检验(Augmented Dickey-Fuller)** 和 **KPSS检验**。ADF检验原假设为序列有单位根(非平稳),若p值小于阈值(如0.05)则拒绝原假设,认为平稳。KPSS检验原假设为平稳,与ADF互补。注意:这些检验针对弱平稳,且对结构突变敏感。
- **ACF图**:非平稳序列的ACF通常衰减很慢(如随机游走的ACF在滞后很大时仍显著)。平稳序列的ACF应快速衰减至零(白噪声)或截尾(如AR过程)。
实践中,常结合图形和检验。例如,对原始电力需求序列,ADF检验可能显示p值>0.05,提示非平稳;差分后重新检验,若p值<0.05,则差分序列平稳。
1.3 时间序列变换:趋向平稳的工程艺术
当序列非平稳时,常用变换消除趋势和异方差,使其满足平稳性假设。变换是建模前的关键预处理步骤。
差分(Differencing):最常用以消除趋势和单位根。一阶差分:$\nabla X_t = X_t - X_{t-1}$。若一阶差分后仍非平稳,可进行二阶差分:$\nabla^2 X_t = \nabla(\nabla X_t) = X_t - 2X_{t-1} + X_{t-2}$。对于季节性趋势,使用季节性差分:$\nabla_s X_t = X_t - X_{t-s}$,其中 $s$ 为季节周期(如月度数据 $s=12$)。通常,差分阶数 $d$ 和季节性差分阶数 $D$ 需确定,使变换后序列平稳。差分也改变序列的积分性质:若需 $d$ 次差分才平稳,则序列是 $d$ 阶单整(integrated of order $d$),记作 $I(d)$。ARIMA模型即基于此。
对数变换(Log Transformation):当序列方差随均值增加(异方差)时常用。若 $X_t > 0$,取对数 $Y_t = \log(X_t)$ 可稳定方差,尤其适用于乘法模型或指数增长序列。例如,GDP或股票价格常取对数差分得到增长率(近似百分比变化):$\log(X_t) - \log(X_{t-1}) \approx \frac{X_t - X_{t-1}}{X_{t-1}}$。注意:对数变换要求所有值为正,否则需加常数平移。
组合变换:实践中常结合使用。例如,对具有趋势和异方差的序列,先取对数再差分:$\nabla \log(X_t)$。Box-Cox变换是更通用的幂变换家族:$Y_t = \frac{X_t^\lambda - 1}{\lambda}$($\lambda \neq 0$),或 $\log(X_t)$($\lambda=0$),通过最大似然估计选择 $\lambda$ 以稳定方差。
变换需谨慎:过度差分会引入不必要的负自相关;对数变换扭曲绝对误差解释。变换后序列的预测需反向变换,可能引入偏差(如对数变换的逆变换需乘以缩放因子校正)。
1.4 自相关与偏自相关:记忆的量化
自相关函数(Autocorrelation Function, ACF)和偏自相关函数(Partial Autocorrelation Function, PACF)是诊断时间序列依赖结构的核心工具,指导模型选择(如AR和MA阶数)。
ACF理论:滞后 $k$ 的自协方差定义为 $\gamma(k) = \text{Cov}(X_t, X_{t+k})$。对于平稳序列,$\gamma(k)$ 仅依赖 $k$。ACF标准化为 $\rho(k) = \gamma(k) / \gamma(0)$,取值在 $[-1, 1]$,表示滞后 $k$ 的线性相关强度。$\rho(0)=1$。对于白噪声,$\rho(k)=0$ 对所有 $k>0$。对于平稳过程,ACF是对称的:$\rho(k) = \rho(-k)$。
PACF理论:PACF $\phi_{kk}$ 衡量在剔除中间滞后 $1,2,\dots,k-1$ 影响后,$X_t$ 与 $X_{t+k}$ 的纯相关性。数学上,它是 $X_t$ 对 $X_{t-1}, \dots, X_{t-k}$ 的多重回归中,$X_{t-k}$ 的系数。PACF 捕捉直接依赖,过滤间接通过中间滞传递的相关。
ACF/PACF与模型识别:对于自回归移动平均(ARMA)过程,ACF和PACF呈现特定模式:
- **AR(p)过程**:$X_t = \sum_{i=1}^p \phi_i X_{t-i} + \varepsilon_t$,PACF 在滞后 $p$ 后**截尾**(理论上为0,样本中在置信区间内),而 ACF **拖尾**(指数衰减或振荡衰减)。
- **MA(q)过程**:$X_t = \varepsilon_t + \sum_{j=1}^q \theta_j \varepsilon_{t-j}$,ACF 在滞后 $q$ 后**截尾**,PACF **拖尾**。
- **ARMA(p,q)过程**:两者均拖尾。
这些模式是模型定阶的关键依据。例如,若PACF在滞后2后截尾,而ACF拖尾,则可能为AR(2)。但需注意:样本ACF/PACF受随机波动影响,需结合置信区间(通常 $\pm 1.96/\sqrt{n}$)判断显著性。
估计与可视化:样本ACF基于 $\hat{\gamma}(k) = \frac{1}{n} \sum_{t=1}^{n-k} (x_t - \bar{x})(x_{t+k} - \bar{x})$,其中 $\bar{x}$ 为样本均值。PACF可通过Yule-Walker方程或OLS回归逐阶求解。在实践中,Python的`statsmodels`库提供`plot_acf`和`plot_pacf`函数,自动计算并绘制带置信区间的ACF/PACF图。
示例:考虑一个模拟AR(1)过程:$X_t = 0.6 X_{t-1} + \varepsilon_t$,$\varepsilon_t \sim N(0,1)$,$n=200$。其理论ACF为 $\rho(k) = 0.6^k$,指数衰减;PACF仅在滞后1显著,之后截尾。样本图应反映此模式。
1.5 季节性检测与分解:分离模式
许多时间序列呈现季节性(seasonality):固定频率的周期性波动,如日、周、年周期。识别和建模季节性是准确预测的关键。
季节性检测:
- **图形法**:绘制序列图,观察重复模式;绘制季节子序列图(seasonal subseries plot),将每个季节(如每年1月)的数据并列,比较均值/方差是否一致。
- **ACF法**:在季节滞后 $s, 2s, \dots$ 处,ACF出现显著峰值。例如,月度数据 $s=12$,滞后12、24等处的ACF应显著。
- **周期图(Periodogram)**:基于傅里叶变换,识别主导频率。峰值对应季节周期。
- **统计检验**:如HEGY检验(针对季度或月度数据),检验季节单位根。
时间序列分解:将序列拆分为几个组成部分:趋势($T_t$,长期运动)、季节性($S_t$,周期性模式)和残差($R_t$,随机波动)。两种常见模型:
- **加法模型**:$Y_t = T_t + S_t + R_t$,适用于季节性幅度稳定。
- **乘法模型**:$Y_t = T_t \times S_t \times R_t$,适用于季节性幅度随趋势增长(常见于经济数据)。取对数后乘法模型变为加法:$\log Y_t = \log T_t + \log S_t + \log R_t$。
经典分解方法: 1. 移动平均法估计趋势:对原始序列应用对称移动平均(如 $m$ 期),平滑季节性和随机性,得到趋势估计 $\hat{T}_t$。$m$ 应为季节周期 $s$ 的偶数倍(若 $s$ 偶,用 $2m$ 移动平均再中心化)。 2. 去趋势:从原始序列减去(加法)或除以(乘法)趋势,得到 detrended 序列。 3. 估计季节因子:对 detrended 序列,按季节索引(如每月)取均值,得到初始季节因子。通常调整季节因子使其均值为0(加法)或均值为1(乘法)。 4. 残差:$R_t = Y_t - \hat{T}_t - \hat{S}_t$(加法)或 $Y_t / (\hat{T}_t \hat{S}_t)$(乘法)。
示例:月度航空乘客数据(经典数据集)显示上升趋势和年度季节性,乘法模型更合适。分解后,可清晰看到趋势、季节因子和残差,残差应近似白噪声,否则表明模型未捕捉所有结构。
现代方法如STL(Seasonal and Trend decomposition using Loess)更灵活,允许季节性和趋势随时间变化,对异常值稳健,是R和Python中常用工具。
1.6 预测性能评估:超越直觉的指标
预测评估需量化预测值与真实值之间的误差。选择合适指标至关重要,不同指标反映不同业务目标。
点预测常用指标:
- **MAE(Mean Absolute Error)**:$\text{MAE} = \frac{1}{n} \sum_{t=1}^n |e_t|$,其中 $e_t = y_t - \hat{y}_t$。直观,单位与原始数据相同,对异常值较不敏感。
- **MAPE(Mean Absolute Percentage Error)**:$\text{MAPE} = \frac{100\%}{n} \sum_{t=1}^n \left| \frac{e_t}{y_t} \right|$。相对误差,便于跨序列比较。但若 $y_t=0$ 或接近0,则可能无穷大或失真;对低估惩罚更重。
- **sMAPE(Symmetric MAPE)**:$\text{sMAPE} = \frac{100\%}{n} \sum_{t=1}^n \frac{|e_t|}{(|y_t|+|\hat{y}_t|)/2}$,对称处理预测和实际值,缓解MAPE不对称性,但仍可能在某些情况下不稳定。
- **MASE(Mean Absolute Scaled Error)**:$\text{MASE} = \frac{\text{MAE}_{\text{model}}}{\text{MAE}_{\text{naive}}}$,其中 $\text{MAE}_{\text{naive}}$ 是朴素预测(如随机游走:$\hat{y}_t = y_{t-1}$)在训练集上的MAE。MASE缩放后,值小于1表示优于朴素预测;大于1则更差。优势:尺度无关,可跨不同序列比较,且对异常值稳健。推荐作为基准比较的主要指标。
分位数预测指标:当预测分布而非点估计时,使用连续 ranked probability score (CRPS) 或分位数损失(quantile loss)(如pinball loss)。例如,预测第90百分位数,评估其与真实值的分位数损失。
注意事项:
- 指标应反映业务成本:例如,库存预测中,高估(多余库存)和低估(缺货)成本不同,可用不对称损失函数。
- 在时间序列中,评估需在**测试集**上进行,且测试集应在训练集之后,避免未来信息泄露。
- 对于多序列数据集,可计算各序列指标后取平均,但需注意序列尺度差异;MASE天然适合。
1.7 时间序列交叉验证:避免数据泄露的范式
传统机器学习中,随机划分训练/测试集可行,但时间序列具有时间依赖性,随机分割会导致未来信息泄露到训练集,使评估过于乐观。必须使用时间序列交叉验证(Time Series Cross-Validation) 或滚动窗口评估。
核心原则:训练集必须在测试集之前。测试集模拟真实预测场景:基于历史数据预测未来。
常见方案: 1. 固定滚动窗口(Fixed Rolling Window):训练窗口大小固定 $w$,测试窗口大小固定 $h$。从初始时间点开始,训练模型于 $[t, t+w-1]$,预测 $[t+w, t+w+h-1]$;然后窗口向前滚动:训练于 $[t+1, t+w]$,预测 $[t+w+1, t+w+h]$,依此类推。确保训练集始终在测试集之前。 2. 扩展窗口(Expanding Window):训练集从初始点开始,随滚动逐步扩大:第一次训练于 $[1, w]$,预测 $[w+1, w+h]$;第二次训练于 $[1, w+1]$,预测 $[w+2, w+h+1]$,等等。利用所有可用历史数据,但早期数据可能过时。 3. 滑动窗口(Sliding Window):训练窗口和测试窗口均固定大小,但两者均向前滑动:训练于 $[t, t+w-1]$,测试于 $[t+w, t+w+h-1]$;下一次训练于 $[t+s, t+s+w-1]$,测试于 $[t+s+w, t+s+w+h-1]$,其中 $s$ 为步长(