菜单

时间序列预测

相关源文件

目的与范围

本文档解释了 ML-For-Beginners 课程中实现的时间序列预测系统,重点介绍了如何使用 ARIMA(自回归积分滑动平均)模型根据历史数据预测未来的电力负荷。该系统演示了如何准备时间序列数据、构建 ARIMA 模型以及评估其预测性能。

有关用于时间序列预测的支撑向量回归的信息,请参阅SVR 时间序列

时间序列概念

时间序列数据具有需要专门分析方法的独特特征

时间序列数据特征和 ARIMA 建模过程

来源:7-TimeSeries/1-Introduction/README.md74-104 7-TimeSeries/2-ARIMA/README.md11-33

核心概念

  • 平稳性:时间序列是平稳的,当其统计特性(均值、方差、自相关)随时间保持恒定时。大多数预测方法都假设平稳性或转换数据以实现平稳性。
  • 差分:通过将观测值与其先前值进行相减来消除非平稳性的过程,使数据适合预测。
  • 季节性:以固定间隔重复的规则模式,例如电力消耗中的每日或每周周期。
  • 趋势:数据随时间呈现的系统性增加或减少。

来源:7-TimeSeries/2-ARIMA/README.md15-22 7-TimeSeries/1-Introduction/README.md80-102

ARIMA 模型结构

ARIMA 模型结合了三个组件来预测时间序列数据

ARIMA 模型组件和 SARIMAX 实现

来源:7-TimeSeries/2-ARIMA/README.md26-34 7-TimeSeries/2-ARIMA/README.md176-184

组件详解

  1. AR(自回归):对观测值及其先前值(滞后)之间的关系进行建模
  2. I(积分):涉及差分步骤以实现平稳性
  3. MA(滑动平均):对观测值与过去预测误差之间的关系进行建模

对于电力负荷等季节性数据,使用具有额外参数 P、D、Q 和 S(季节周期)的季节性 ARIMA (SARIMA) 模型。

来源:7-TimeSeries/2-ARIMA/README.md26-32

实现工作流程

时间序列预测实现遵循此工作流程

时间序列预测实现工作流程

来源:7-TimeSeries/2-ARIMA/README.md66-70 7-TimeSeries/2-ARIMA/README.md88-93 7-TimeSeries/2-ARIMA/README.md138-140 7-TimeSeries/2-ARIMA/README.md197-201

数据准备

在构建 ARIMA 模型之前,数据需要经过几个准备步骤

  1. 数据加载:使用 load_data() 函数加载包含负荷值的能源数据集
  2. 时间段选择:为训练和测试选择特定的日期范围
    • 训练期:2014 年 11 月 1 日至 12 月 29 日
    • 测试期:2014 年 12 月 30 日至 12 月 31 日
  3. 数据缩放:使用 MinMaxScaler 将负荷值归一化到 [0,1] 范围
步骤代码元素目的
加载energy = load_data('./data')[['load']]加载电力负荷数据
筛选train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]创建训练数据集
扩展scaler = MinMaxScaler(); train['load'] = scaler.fit_transform(train)将数据缩放到 [0,1] 范围

来源:7-TimeSeries/2-ARIMA/README.md66-70 7-TimeSeries/2-ARIMA/README.md88-93 7-TimeSeries/2-ARIMA/README.md138-140

ARIMA 模型实现

ARIMA 模型是使用 statsmodels.tsa.statespace.sarimax 模块中的 SARIMAX 类实现的。实现包括

参数选择

其中

  • p=4:自回归滞后阶数(时间滞后的数量)
  • d=1:差分阶数(用于实现平稳性)
  • q=0:滑动平均窗口大小
  • P=1:季节性自回归阶数
  • D=1:季节性差分
  • Q=0:季节性滑动平均阶数
  • S=24:季节周期(24 小时,代表每日模式)

来源:7-TimeSeries/2-ARIMA/README.md197-198

模型构建与预测

其中 HORIZON 指定了要提前预测的步数(例如,3 小时)。

来源:7-TimeSeries/2-ARIMA/README.md200-201 7-TimeSeries/2-ARIMA/README.md264

前向验证

该实现使用了前向验证,这被认为是时间序列模型评估的黄金标准。

前向验证过程

来源:7-TimeSeries/2-ARIMA/README.md247-269

前向验证的关键方面

  • 使用固定的 720 小时(30 天)训练窗口
  • 对于每个时间步
    1. 在当前训练窗口上拟合新的 SARIMAX 模型
    2. 预测 HORIZON 步数
    3. 通过添加新观测值和删除最旧的观测值来更新训练窗口

相关代码部分实现了此过程

来源:7-TimeSeries/2-ARIMA/README.md214-215 7-TimeSeries/2-ARIMA/README.md247-269

模型评估

预测性能使用平均绝对百分比误差 (MAPE) 进行评估,它以百分比衡量预测精度

MAPE = (1/n) × Σ|(实际 - 预测)/实际| × 100%

较低的 MAPE 值表示更好的预测精度。实现计算

  • 单步预测 MAPE(预测 t+1)
  • 多步预测 MAPE(所有预测范围的预测)

来源: 7-TimeSeries/2-ARIMA/README.md314-319 7-TimeSeries/2-ARIMA/README.md331-333 7-TimeSeries/2-ARIMA/README.md339-341

可视化

通过绘制预测值与实际值的对比图来可视化结果

类型MAPE解读
单步预测~0.56%对下一个小时的预测非常准确
多步预测~1.15%对 3 小时预测范围的准确性良好

来源: 7-TimeSeries/2-ARIMA/README.md351-373 7-TimeSeries/2-ARIMA/README.md331-345

性能考量

在实施时间序列预测系统时,请考虑

  1. 计算成本:前向验证需要拟合大量模型,对于大型数据集来说,这可能非常耗时
  2. 参数选择:选择最佳的 ARIMA 参数(p、d、q、P、D、Q、S)至关重要,可能需要 auto_arima() 等技术
  3. 数据特性:模型的性能取决于数据中的平稳性和季节性模式
  4. 缩放:正确的缩放可提高数值稳定性和模型性能
  5. 预测范围长度:较长的预测范围通常会导致准确性下降

来源: 7-TimeSeries/2-ARIMA/README.md212-215 7-TimeSeries/2-ARIMA/README.md339-345 7-TimeSeries/2-ARIMA/README.md191-194