本文档解释了 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 模型组件和 SARIMAX 实现
来源:7-TimeSeries/2-ARIMA/README.md26-34 7-TimeSeries/2-ARIMA/README.md176-184
对于电力负荷等季节性数据,使用具有额外参数 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 模型之前,数据需要经过几个准备步骤
load_data() 函数加载包含负荷值的能源数据集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 模型是使用 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
前向验证的关键方面
相关代码部分实现了此过程
来源:7-TimeSeries/2-ARIMA/README.md214-215 7-TimeSeries/2-ARIMA/README.md247-269
预测性能使用平均绝对百分比误差 (MAPE) 进行评估,它以百分比衡量预测精度
MAPE = (1/n) × Σ|(实际 - 预测)/实际| × 100%
较低的 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
在实施时间序列预测系统时,请考虑
auto_arima() 等技术来源: 7-TimeSeries/2-ARIMA/README.md212-215 7-TimeSeries/2-ARIMA/README.md339-345 7-TimeSeries/2-ARIMA/README.md191-194