上一篇把连续的负荷记录切成了历史窗口和未来标签。本系列要求一次预测未来 24 小时,但一个模型未必必须一次输出 24 个值。同样的输入与目标,可以对应几种不同的预测策略。

这些策略决定模型如何训练、如何推理,以及第 1 小时的误差会不会影响第 24 小时。本篇先建立比较框架;具体模型要在统一验证协议下再做选择。

1. 问题:从一个窗口得到 24 个预测值

设时刻 tt 已知的历史窗口及协变量为 It\mathcal I_t,预测长度为 H=24H=24。我们希望得到:

y^t+1:t+H=(y^t+1,y^t+2,…,y^t+H). \hat{\boldsymbol y}_{t+1:t+H} = (\hat y_{t+1},\hat y_{t+2},\ldots,\hat y_{t+H}).

关键问题是:预测 t+2t+2 时,要不要先使用模型刚预测出的 y^t+1\hat y_{t+1}?预测不同步长,应该共享同一个模型吗?输出 24 个值时,要不要共同学习整条曲线?

2. 直觉:三种组织预测的方法

Recursive     历史 → 下一小时 → 下一小时 → … → 第 24 小时
Direct        历史 ─┬→ 第 1 小时
                   ├→ 第 2 小时
                   └→ 第 24 小时
Multi-output  历史 → [第 1 小时,…,第 24 小时]

三者可以使用同一份历史信息,但训练目标、模型数量和推理过程不同。不存在对所有数据都最优的一种策略:相关研究指出,递推与直接预测的比较涉及模型偏差和估计方差的取舍,结果会随数据、模型和预测长度变化。

3. Recursive:训练一步,反复向前滚动

递推策略先训练一个单步预测器:

y^t+1=fθ(yt−L+1:t,Ct). \hat y_{t+1}=f_\theta(y_{t-L+1:t},\mathcal C_t).

其中 Ct\mathcal C_t 表示该步合法可用的协变量。预测下一步时,将 y^t+1\hat y_{t+1} 作为新的历史负荷放回窗口:

y^t+2=fθ(yt−L+2:t,y^t+1,Ct+1). \hat y_{t+2} = f_\theta(y_{t-L+2:t},\hat y_{t+1},\mathcal C_{t+1}).

如此重复,直到获得 HH 个预测值。对于负荷序列,天气预报和日历特征也要随着预测步长取对应时刻的值;不能把未来真实负荷或真实天气放入递推窗口。

Recursive 的优点是只训练一个单步模型,Horizon 变化时也可以继续递推。代价是要顺序执行多次预测,而且早期错误可能影响后续输入,造成误差传播。模型训练时通常看到真实历史,推理时逐渐看到自己的预测,这种输入分布差异也可能使长步预测变差。不过,误差不一定每一步都同方向累加;实际影响取决于序列动态和模型行为。

4. Direct:每个预测步长单独建模

Direct 为每个 h∈{1,…,H}h\in\{1,\ldots,H\} 训练一个预测器:

y^t+h=fθh(h)(It). \hat y_{t+h}=f_{\theta_h}^{(h)}(\mathcal I_t).

例如,h=1h=1 的模型专门预测下一小时,h=24h=24 的模型专门预测一天后的同一小时。所有模型都站在同一个 Issue Time tt,不能给 h=24h=24 的模型额外提供 t+1t+1 到 t+23t+23 的真实负荷。

Direct 不会在推理时把较早的预测重新喂给后续模型,因此没有 Recursive 特有的预测反馈链。它允许不同 Horizon 学到不同关系,但 H=24H=24 时通常需要训练和管理 24 个模型。如果各步独立训练,得到的 24 个预测值也未必自然形成平滑、协调的曲线。

“每个步长一个模型”是本篇讨论的标准 Direct 形式。工程上也可以训练一个共享参数的模型,把 Horizon 编号作为输入;这种实现共享参数,但仍需明确每个步长的训练目标和推理信息边界。

5. Multi-output:一次预测整条未来曲线

Multi-output(也常称 MIMO)让一个模型直接输出长度为 HH 的向量:

y^t+1:t+H=Fθ(It)∈RH. \hat{\boldsymbol y}_{t+1:t+H} = F_\theta(\mathcal I_t) \in\mathbb R^H.

训练标签也是完整的未来 24 小时。常见损失可以先对每个预测步长计算误差,再求平均:

L=1H∑h=1Hℓ(yt+h,y^t+h). \mathcal L = \frac{1}{H}\sum_{h=1}^{H} \ell(y_{t+h},\hat y_{t+h}).

也可以对关键时段加权,但权重应由业务目标和验证设计决定,不能看到测试结果后再调整。

Multi-output 只训练一个模型,推理时通常一次得到完整预测向量,也没有逐步回灌导致的误差传播。共享表示和联合训练可以让不同 Horizon 互相提供信息;不过,这不保证预测曲线一定平滑或符合物理约束。模型容量、输出头和损失函数仍会影响各步之间的协调程度。多输出预测研究讨论了它相对独立单输出预测的特点。

6. Seq2Seq 在哪里?

Seq2Seq(Sequence-to-Sequence)描述的是模型结构:编码器读取历史序列,解码器产生未来序列。它与上面的预测策略并非完全平行的分类。

  • 自回归解码器逐步生成未来值,生成时可能使用之前的预测,具有 Recursive 式的误差反馈;
  • 并行解码器一次输出全部 Horizon,更接近 Multi-output;
  • 使用 Teacher Forcing 的自回归模型,训练时可输入真实前一步,推理时却只能输入前一步预测,因此需要专门检查训练与推理的差异。

因此,看到“Seq2Seq 模型”这个名字,还需要追问它究竟如何解码、如何使用未来协变量,以及训练和推理时分别把什么放入解码器。

7. 放在一起比较

策略典型模型数量推理方式主要优势主要代价
Recursive1 个单步模型顺序预测 HH 次训练目标简单,可复用单步模型早期误差可能向后传播,推理串行
Direct通常 HH 个模型各 Horizon 独立预测避免预测反馈,可针对步长建模训练和维护成本高,各步未必协调
Multi-output1 个多输出模型一次输出 HH 步联合学习整条曲线,推理调用少输出维度随 Horizon 变化,质量依赖联合建模设计

表中是典型实现,不是速度或精度排名。例如一个大型 Multi-output 网络的一次推理,未必比 24 个极小的 Direct 模型更省计算;Direct 的模型也可以并行推理。实际成本需要在同一硬件上测量。

贯穿案例的选择方式

本系列会先把 Seasonal Naive 纳入共同基线,再在可比条件下试验至少一种 Direct 或 Recursive 实现,以及一种 Multi-output 实现。对未来 24 小时负荷,不能只看总体 MAE:还应检查 t+1t+1、t+6t+6、t+12t+12、t+24t+24 的误差,以及峰值时段和整日总电量的误差。

比较时保持数据划分、可用协变量、调参预算和评估 Issue Time 一致,并记录训练时间、推理时间和模型数量。先用验证集选择方案,测试集只报告最终结果。只有这样,差异才更可能来自策略本身,而不是信息泄漏或实验资源不对等。

8. 常见错误

把真实未来值放入递推窗口

离线评估时,如果预测 t+2t+2 使用了真实 yt+1y_{t+1},测到的是拥有额外未来信息的结果,不是上线时的 Recursive 预测。必须把上一步预测值回灌,或明确说明评估的是另一个任务。

认为 Direct 不会有长步误差

Direct 避免了预测反馈链,但较远 Horizon 本身仍更难预测。它可能因远期信号弱、样本有限或模型估计不稳定而产生更大误差。

认为 Multi-output 一定学到了时序依赖

共享一次前向计算不等于输出之间自动满足合理的日内形状。需要检查逐小时误差、峰值位置和曲线形态,必要时设计显式约束或结构。

只用一次总体分数选策略

一个整体 MAE 可能掩盖“前 6 小时准确、后 18 小时失准”的模型。多步策略应按 Horizon 画误差曲线,并结合业务关心的时段判断。

9. 本文产出与下一步

至此,Part 1 的预测问题可以写成一个待验证的 Problem Specification:目标是建筑逐小时负荷,预测长度为 24,窗口必须遵守 Issue Time 的信息边界;Lookback 和多步策略是验证集上的设计变量;点预测的损失函数还需与希望估计的统计目标一致。

我们尚未用 BDG2 跑出策略对比,因此这里不宣称哪一种方法更好。接下来进入 Part 2,先确保时间戳、缺失值、异常值和特征都被正确处理;随后在 Part 3 固定评估协议,再让 Part 4 的 Baseline 和后续深度模型在同一规则下比较。

参考资料