时间序列预测导论 / Introduction to Time Series Forecasting
时间序列(Time Series)是指按时间顺序排列的一系列观测值的数据集合,其核心在于观测值之间的时间依赖性——当前值往往与过去值存在关联。这种关联性构成了时间序列预测(Time Series Forecasting)的理论基石:通过分析历史数据中的模式,推断未来的发展趋势。与横截面数据(Cross-sectional Data)不同,时间序列数据天然具有时间维度,这使得预测任务不仅要考虑变量间的相关性,还需处理时间顺序带来的自相关(Autocorrelation)、趋势(Trend)、季节性(Seasonality)等独特结构。
1.1 时间序列的核心特征
时间序列通常由几种可分解的组件构成,理解这些组件是构建有效预测模型的前提。
1.1.1 趋势(Trend)
趋势指数据在长期内表现出的持续向上或向下的运动方向,它反映了序列的长期演变路径。趋势可以是线性的(Linear),如 GDP 的逐年增长;也可以是非线性的(Non-linear),如技术 adoption 曲线(S型曲线)。数学上,趋势项 $T_t$ 可表示为时间 $t$ 的函数,例如:
- 线性趋势:$T_t = a + bt$
- 指数趋势:$T_t = a \cdot e^{bt}$
案例:全球二氧化碳浓度 自工业革命以来,大气中 CO₂ 浓度呈现明显的上升趋势。美国国家海洋和大气管理局(NOAA)的数据显示,1958 年 Mauna Loa 观测站记录的年均浓度约为 315 ppm,至 2023 年已超过 420 ppm。这种长期上升趋势主要源于化石燃料燃烧和土地利用变化,是气候变化预测中的关键驱动因素。在预测未来 CO₂ 水平时,必须准确估计趋势项的斜率,否则将严重低估长期风险。
1.1.2 季节性(Seasonality)
季节性指数据在固定周期内(如一年、一月、一周)重复出现的规律性波动。其周期通常是已知且固定的(例如,零售销售在每年圣诞节期间激增)。季节性成分 $S_t$ 满足 $S_{t+P} = S_t$,其中 $P$ 为季节周期长度。
案例:美国零售销售额 美国人口普查局(U.S. Census Bureau)的零售贸易数据显示,每年第四季度(假日购物季)销售额显著高于其他季度,而第二季度相对平淡。这种季节性模式稳定且可预测,零售商据此制定库存、营销和人员配置计划。若忽略季节性,预测模型将无法捕捉假日高峰,导致库存短缺或过剩。
1.1.3 周期性(Cyclicity)
周期性指数据在非固定周期内(通常大于一年)出现的波动,其周期长度不固定且振幅可变。与季节性不同,周期性通常与经济周期、商业周期等宏观波动相关,周期长度可能从数年甚至数十年不等。周期成分 $C_t$ 没有固定周期 $P$,其波动更多受外部冲击(如金融危机、技术革命)驱动。
案例:美国失业率 美国劳工统计局的失业率数据呈现明显的周期性波动。例如,2008 年金融危机期间失业率从 5% 飙升至 10%,随后在复苏期缓慢下降;2020 年新冠疫情导致失业率在两个月内从 3.5% 跃升至 14.7%,之后逐步恢复。这些周期波动长度不一(2008 年周期约 5 年,2020 年周期约 2 年),且每次波动的幅度和形状各异,使得周期性预测极具挑战性。
1.1.4 随机性(Irregularity / Noise)
随机性指由随机冲击、测量误差或无法解释的微小波动构成的残差成分 $I_t$。理想情况下,模型应尽可能捕捉趋势、季节性和周期性,使残差接近白噪声(White Noise),即均值为零、方差恒定且无自相关的随机序列。然而,现实中噪声往往存在异方差(Heteroscedasticity)或长期记忆(Long Memory),增加建模难度。
案例:高频金融数据 股票价格在分钟或秒级尺度上呈现剧烈随机波动。即使剔除趋势和季节性(如日内模式),剩余噪声仍表现出波动聚集(Volatility Clustering)——大波动后常跟随大波动,小波动后常跟随小波动。这种异方差性使得点预测(Point Forecast)的置信区间难以准确估计,需要专门模型(如 GARCH 族)处理。
```mermaid graph TD A[原始时间序列 Y_t] --> B[加法模型<br>Y_t = T_t + S_t + C_t + I_t] A --> C[乘法模型<br>Y_t = T_t × S_t × C_t × I_t] B --> D[趋势分量 T_t] B --> E[季节分量 S_t] B --> F[周期分量 C_t] B --> G[随机残差 I_t] C --> D C --> E C --> F C --> G ```
> 侧边栏:加法模型 vs. 乘法模型 > > 时间序列分解可采用加法或乘法形式。加法模型假设各分量线性叠加,适用于季节性波动幅度不随趋势变化的序列(如月度平均温度)。乘法模型假设各分量相乘,适用于季节性波动幅度随趋势增大的序列(如零售销售额:趋势越高,季节性波动绝对值越大)。实际应用中需通过可视化或统计检验(如 STL 分解)选择合适形式。
1.2 预测任务的基本分类
根据输出形式的不同,预测任务可分为三大类,其复杂度和应用场景各异。
1.2.1 点预测(Point Forecasting)
点预测输出单一数值作为未来某个时间点的预测值,是最常见的形式。其目标是最小化预测误差,常用损失函数包括:
- **均方误差(MSE)**:$MSE = \frac{1}{n}\sum_{t=1}^{n}(y_t - \hat{y}_t)^2$,对大误差惩罚更重。
- **平均绝对误差(MAE)**:$MAE = \frac{1}{n}\sum_{t=1}^{n}|y_t - \hat{y}_t|$,对异常值更鲁棒。
- **对称平均绝对百分比误差(sMAPE)**:$sMAPE = \frac{200\%}{n}\sum_{t=1}^{n}\frac{|y_t - \hat{y}_t|}{|y_t| + |\hat{y}_t|}$,相对误差度量。
点预测简单直观,但无法提供预测的不确定性信息,在风险敏感场景(如金融、医疗)中可能不足。
1.2.2 区间预测(Interval Forecasting)
区间预测输出一个区间(如 95% 置信区间),表示未来值以一定概率落入该范围。区间宽度反映预测的不确定性:越宽的区间表示越不确定。区间预测通常基于预测误差的分布假设(如正态分布)或分位数回归(Quantile Regression)构建。
案例:电力负荷预测 电网运营商需要预测未来 24 小时的电力需求。点预测给出每小时的预计负荷(如 15,000 MW),但为应对突发情况(如极端天气、机组故障),还需 95% 置信区间(如 [13,500 MW, 16,500 MW])。若区间过窄,可能低估风险导致供电不足;若过宽,则可能导致备用容量过剩,增加成本。区间预测帮助运营商在可靠性与经济性间权衡。
1.2.3 概率预测(Probabilistic Forecasting)
概率预测输出完整的概率分布(而非单点或区间),描述未来值所有可能取值的概率。这是最丰富的信息形式,支持最优决策(如最小化期望损失)。概率预测可通过以下方式实现:
- **参数化方法**:假设分布形式(如正态分布、伽马分布),预测分布参数(均值、方差)。
- **非参数化方法**:直接估计概率密度函数,如核密度估计(KDE)或分位数回归森林。
- **模拟方法**:通过蒙特卡洛模拟生成未来路径的样本集,如贝叶斯模型或深度学习中的 Dropout 推断。
案例:可再生能源出力预测 风电和光伏发电受天气影响大,具有高波动性。电网调度需 probabilistic forecast 以优化储能调度和市场竞价。例如,预测次日 24 小时的风电出力分布,可计算任意发电水平的概率,进而确定需要多少备用燃气机组,最小化总成本。研究显示,使用概率预测可比点预测降低 5-15% 的系统运行成本。
```mermaid graph LR A[预测任务类型] --> B[点预测<br>单一数值] A --> C[区间预测<br>置信区间] A --> D[概率预测<br>完整分布] B --> E[优点:简单、直接<br>缺点:无不确定性] C --> F[优点:量化不确定性<br>缺点:仅提供边界] D --> G[优点:信息最丰富<br>支持最优决策<br>缺点:计算复杂] ```
1.3 多领域应用案例
时间序列预测在众多领域扮演关键角色,其重要性随数据可得性和计算能力提升而日益凸显。
1.3.1 金融领域:股价与风险预测
金融时间序列具有高噪声、非平稳、波动聚集等特点。预测任务包括:
- **资产价格预测**:基于历史价格、交易量、宏观指标预测股票、外汇、加密货币的未来价格。尽管有效市场假说(EMH)认为价格已反映所有信息,但短期可预测性仍存在(如动量效应、反转效应)。
- **风险价值(VaR)预测**:估计资产组合在给定置信水平下的最大潜在损失。VaR 本质是分位数预测(如 5% 分位数),需准确建模尾部风险。2008 年金融危机暴露了基于正态分布假设的 VaR 模型缺陷,促使更复杂的概率模型(如极值理论、随机波动率模型)发展。
数据与挑战:高频 tick 数据量巨大(单只股票日交易量可达百万条),需高效算法。市场微观结构噪声(如买卖价差、订单流不平衡)使信号提取困难。此外,预测模型需在线更新以适应 regime switching(市场状态切换)。
1.3.2 气象领域:温度与灾害预测
气象预测是典型的时间序列问题,但空间维度(多站点)和物理约束(流体力学方程)使其成为时空预测(Spatio-Temporal Forecasting)。
- **短期气温预测**:基于历史温度、湿度、气压等预测未来数小时至数天的温度。传统数值天气预报(NWP)模型计算成本高,统计模型(如时间序列回归)可作为补充或替代。
- **极端天气预警**:预测台风路径、暴雨强度、热浪持续时间。这类预测侧重尾部事件,需概率框架(如集合预报)量化不确定性。例如,欧洲中期天气预报中心(ECMWF)发布 50 个集合成员,形成概率台风路径图,指导防灾决策。
数据与挑战:气象数据时空分辨率高(全球网格可达 10km×10km,时间分辨率 1 小时),数据量达 PB 级。数据缺失(如站点故障)常见,需插补。物理过程复杂,非线性强,传统统计模型可能无法捕捉全部动态,需结合物理约束的机器学习模型(如 FourCastNet)。
1.3.3 能源领域:电力负荷与可再生能源出力
能源系统需精确预测以平衡供需,确保电网稳定。
- **电力负荷预测**:按时间尺度分:
- 超短期(分钟级):用于实时调度,受天气、突发事件影响大。
- 短期(小时至周):用于日前市场竞价,受工作日、天气、事件驱动。
- 中长期(月至年):用于燃料采购、设备维护计划,受经济、政策影响。
典型特征:强日周期性(日内负荷曲线相似)、周周期性(工作日 vs. 周末)、年趋势(经济增长、能效提升)。
- **可再生能源出力预测**:风电、光伏出力依赖天气,具有间歇性和波动性。预测需融合数值天气预报(NWP)输出,并处理 NWP 的系统误差。概率预测尤为重要,因可再生能源不确定性是电网灵活性的主要挑战。
数据与挑战:数据来源多样(智能电表、SCADA 系统、NWP 模型),需对齐时空粒度。数据质量参差不齐(如智能电表通信故障导致缺失)。政策变化(如补贴退坡)可能改变长期趋势,需在模型中纳入外生变量。
1.3.4 零售领域:需求与销售预测
零售预测直接影响库存管理、定价策略和供应链效率。
- **单品需求预测**:预测单个 SKU(库存单位)的未来销量。特征包括历史销量、促销信息、价格、节假日、竞争对手活动等。需求常呈稀疏性(许多商品销量为零)和事件驱动性(促销导致销量尖峰)。
- **门店销售额预测**:聚合多单品,受门店位置、周边事件、天气等影响。
- **供应链预测**:预测上游原材料需求,需考虑需求预测的向上游传递(bullwhip effect)。
数据与挑战:数据维度高(成千上万 SKU,数百门店),需层次预测(Hierarchical Forecasting)保证一致性(如总销售额 = 各品类销售额之和)。促销和事件难以量化,需特殊处理(如指示变量、事件影响模型)。新品冷启动问题(无历史数据)需借助相似产品或元学习。
```mermaid graph TD subgraph 金融 A1[股价预测] --> A1a[技术指标<br>移动平均、RSI] A1 --> A1b[基本面指标<br>财报、宏观] A2[VaR预测] --> A2a[波动率模型<br>GARCH] A2 --> A2b[极值理论] end subgraph 气象 B1[气温预测] --> B1a[NWP模型] B1 --> B1b[统计校正] B2[灾害预警] --> B2a[集合预报] B2 --> B2b[概率阈值] end subgraph 能源 C1[负荷预测] --> C1a[日/周周期性] C1 --> C1b[天气敏感度] C2[可再生能源] --> C2a[NWP融合] C2 --> C2b[概率场景] end subgraph 零售 D1[单品需求] --> D1a[历史销量] D1 --> D1b[促销影响] D2[层次预测] --> D2a[自上而下/自下而上] D2 --> D2b[协调优化] end ```
1.4 预测工作流详解
一个完整的预测项目遵循迭代式工作流,而非线性流水线。以下是标准六步流程:
1.4.1 问题定义(Problem Definition)
明确预测目标、范围和约束:
- **预测目标**:预测什么变量?(如销量、温度、股价)
- **预测范围**:时间粒度(小时、日、月)和预测 horizon(未来多少步?短期、中期、长期?)
- **预测频率**:多久更新一次预测?(实时、每日、每周)
- **评估标准**:业务目标决定损失函数(如库存成本最小化对应 MAE,缺货损失大则侧重高预测值)。
- **约束**:计算资源、数据延迟、模型可解释性要求(如金融监管要求可解释风险模型)。
常见陷阱:目标与业务需求脱节。例如,预测下周销量但业务需每日补货决策,应改为每日预测。或使用 MSE 优化但业务更关心高估/低估的不对称成本,需定制损失函数。
1.4.2 数据收集(Data Collection)
识别并整合多源数据:
- **目标变量历史值**:核心时间序列。
- **外生变量(Exogenous Variables)**:影响目标但不受其反向影响的变量,如:
- 日历信息:节假日、周末、促销期。
- 天气数据:温度、降水、风速(对零售、能源、交通至关重要)。
- 经济指标:GDP、失业率、消费者信心指数。
- 竞争对手数据:市场份额、价格。
- **元数据**:序列标识(如门店 ID、产品 ID)、数据源、采集频率。
数据质量检查:记录缺失比例、异常值(如负销量)、时间戳对齐问题。建立数据字典,明确每个变量含义、单位、更新频率。
1.4.3 数据预处理(Data Preprocessing)
原始数据需清洗转换才能用于建模:
- **缺失值处理**:
- 删除:若缺失率低(<5%)且随机,可删除缺失行。
- 插补:前向填充(适合低频数据)、线性插值、基于相似序列的插补(如协同过滤)、模型预测插补(如 KNN、矩阵补全)。
- 标记:添加缺失指示变量,让模型知晓曾缺失。
- **异常值检测与处理**:
- 统计方法:基于标准差(如 |x - μ| > 3σ)或 IQR(四分位距)阈值。
- 业务规则:如销量不可能为负,或单日涨幅超过 100% 可能为数据错误。
- 处理:修正(若可追溯)、截断(Winsorization)、或保留但使用鲁棒损失(如 MAE)。
- **平稳化(Stationarization)**:
- 差分(Differencing):$y_t' = y_t - y_{t-1}$ 消除趋势。
- 对数变换:稳定方差,尤其对乘法模型或指数增长序列。
- 季节性差分:$y_t' = y_t - y_{t-P}$ 消除季节性。
- **特征工程**:
- 滞后特征(Lags):$y_{t-1}, y_{t-2}, \dots$ 是时间序列模型的核心输入。
- 滚动统计量:过去 N 期的均值、标准差、最大值、最小值。
- 时间特征:年、月、日、周几、是否节假日、一年中的第几天。
- 外生变量:直接使用或滞后/滚动处理。
- **重采样(Resampling)**:统一时间粒度(如将分钟数据聚合为小时数据),注意聚合方式(求和 vs. 平均)。
- **划分数据集**:严格按时间顺序划分训练集、验证集、测试集,**禁止随机划分**。典型比例如 70%/15%/15%,或滚动窗口验证(见评估部分)。
1.4.4 建模(Modeling)
选择、训练和调优模型:
- **模型选择**:基于数据特征(平稳性、季节性强度、样本量)和业务需求(精度、速度、可解释性)选择候选模型。本书后续章节将详细讨论从 ARIMA、指数平滑到 LSTM、Transformer 的演进。
- **训练**:使用训练集拟合模型参数。对深度学习模型,需定义网络结构、优化器、损失函数,并防止过拟合(正则化、早停)。
- **调优**:使用验证集选择超参数(如 ARIMA 的 (p,d,q) 阶数、神经网络的层数、学习率)。常用方法:
- 网格搜索(Grid Search):穷举候选组合。
- 随机搜索(Random Search):更高效。
- 贝叶斯优化(Bayesian Optimization):基于代理模型引导搜索。
- 自动机器学习(AutoML):如 AutoTS、Prophet 自动调参。
- **集成**:结合多个模型(如简单平均、加