RNN 做时间序列预测要注意什么?
简化版
用 RNN 做时序预测时,输入窗口必须只含预测原点之前的观测,输出可为单步或多步。关键不是套 LSTM,而是正确时间切分、特征可用性、尺度处理和与季节性基线比较。
详细版
-
滑动窗口构造要避免目标进入输入。
-
训练/验证按时间排序,不能随机打散样本跨期。
-
多步可递归、直接多输出或 seq2seq。
-
归一化参数只在训练期拟合。
-
必须与 last value、季节 naive 等强基线比较。
完整版教学
一、RNN 学的是历史状态到未来目标的映射
RNN 把可变长度历史压入 hidden state,适合非线性动态;但长期季节性未必比显式 lag 与传统模型更容易学。
多步递归把上一步预测喂回,误差会累积;直接多输出避免反馈,却为每个 horizon 学习固定输出。
因此模型结构必须与预测协议一起选择,不能在训练时做单步 teacher forcing,却用完全不同的多步闭环结果宣称泛化良好。
二、底层机制与公式
input X_t=[y_(t-L),...,y_(t-1),known_covariates]
target=[y_t,...,y_(t+H-1)]
三、带数字的推演
用过去 L=24 小时预测未来 H=6 小时。
原点 t 的输入最后一个销量只能是 y_(t-1);若标准化均值使用测试月份数据,即使窗口无未来也仍泄漏。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| 递归多步 | 单步模型复用 | 误差累积 |
| Direct multi-output | 一次给 H 步 | 输出维度固定 |
| Seq2seq | 灵活建模 horizon | 训练推理复杂 |
五、执行流程
按原点构造窗口 -> 时间划分 -> 训练段 fit scaler -> RNN 训练
-> walk-forward 验证 -> 分 horizon/季节切片 -> 与 naive 基线比较
六、边界条件与工程代价
未来已知日历、计划价格可作为 future covariate;未来天气实际值若线上拿不到就不能离线使用。
非平稳序列需滚动重训或漂移监控,单次随机留出无法反映未来退化。
记忆钩子:时序 RNN 先画原点 t:左边才是输入,右边是 horizon。
七、常见误区与追问
-
误区:RNN 自动解决季节性。 显式周期特征和基线仍常必要。
-
追问:递归预测为何误差累积? 后续输入包含前一步预测而非真值。
-
误区:窗口正确就不会泄漏。 全期 scaler 和未来协变量仍可泄漏。
-
追问:如何评估多步? 逐 horizon 报 MAE/RMSE,并按业务权重汇总。
-
追问:为何比较 naive? 很多稳定时序用上一值/上周期就很强。
八、加强记忆
时序 RNN 先画原点 t:左边才是输入,右边是 horizon。
窗口、scaler、协变量和验证都必须服从这条时间线。