2、问题定义与数学建模:多步预测的数学形式化定义,输入输出维度分析,单步 vs 多步的本质区别
好,咱们正式开始聊多步预测。很多同学一上来就问我:「老师,多步预测不就是多预测几个点吗?」
嗯,这话对了一半。多预测几个点没错,但背后的数学逻辑、数据组织方式,跟单步预测完全是两码事。我当年刚入行时也踩过这个坑——拿着单步预测的模型硬套多步任务,结果预测曲线像断了线的风筝,越飘越远。
今天咱们就把这个「坑」彻底填平。
2.1 多步预测的数学形式化定义
先看一个最朴素的问题:
给定历史观测序列 [x₁, x₂, ..., xₜ],我们要预测未来 H 个时间步的值 [xₜ₊₁, xₜ₊₂, ..., xₜ₊ₕ]。
这里的 H 就是预测步长(horizon)。
数学上可以写成:
给定:X = {x₁, x₂, ..., xₜ}
预测:Ŷ = {ŷₜ₊₁, ŷₜ₊₂, ..., ŷₜ₊ₕ}
说白了,就是用一个函数 f 把历史映射到未来:
Ŷ = f(X; θ)
其中 θ 是模型参数。这个 f 可以是 LSTM、Transformer、或者简单的线性回归——但不管用什么模型,输入输出的维度关系必须搞清楚。
核心要点:多步预测的本质是「用一个固定长度的历史窗口,去预测一个固定长度的未来窗口」。这两个窗口的长度,决定了模型的输入输出维度。
2.2 输入输出维度分析
咱们用一个具体例子来说明。假设:
- 历史窗口长度(lookback):
L = 10 - 预测步长(horizon):
H = 5 - 特征维度(单变量/多变量):
D
那么:
- 输入维度:
(batch_size, L, D),即(batch_size, 10, D) - 输出维度:
(batch_size, H, D),即(batch_size, 5, D)
这里有个容易混淆的点:如果 D > 1(多变量),输出的是所有变量的未来值,还是只预测目标变量?
我个人习惯的做法是:输出只包含目标变量。比如你预测股价,输入用了成交量、开盘价、收盘价三个特征,但输出只预测收盘价。这样模型更聚焦,训练也更稳定。
| 场景 | 输入形状 | 输出形状 | 说明 |
|---|---|---|---|
| 单变量单步 | (batch, L, 1) | (batch, 1) | 最基础 |
| 单变量多步 | (batch, L, 1) | (batch, H) | H > 1 |
| 多变量单步 | (batch, L, D) | (batch, 1) | 只预测目标 |
| 多变量多步 | (batch, L, D) | (batch, H) | 只预测目标 |
避坑指南:我曾经在做一个电力负荷预测项目时,把多变量的所有输出都丢给模型去预测,结果模型训练了三天都不收敛。后来发现,非目标变量的未来值根本不可预测——你想想看,你连明天的气温都不知道,怎么能让模型去预测明天的气温特征呢?
2.3 单步 vs 多步的本质区别
好,到了最关键的部分。单步预测和多步预测,到底差在哪?
我画了一张图,帮你理清思路:
从图上可以直观看到:
- 单步预测:输入一个窗口,输出一个点。模型只关心「下一步」是什么。
- 多步预测:输入一个窗口,输出一个序列。模型要同时预测未来多个时间点。
但真正的本质区别,藏在误差传播里。
注意:多步预测的误差会随着步长增加而放大。你想想看,预测第1步时误差是ε,第2步基于第1步的预测值,误差可能变成2ε,第3步变成4ε...这就是所谓的「误差累积效应」。我在做交通流量预测时,步长超过10步,预测曲线基本就变成一条直线了——模型学到的只是「均值回归」。
2.4 三种主流的多步预测策略
既然多步预测这么难,那有什么办法?我总结了三种主流策略:
- 直接多步预测(Direct Multi-step)
- 直接训练一个模型,输出H个值
- 优点:一步到位,误差不传递
- 缺点:模型要学的东西太多,H越大越难
- 递归多步预测(Recursive Multi-step)
- 用单步模型,把预测值当作输入,一步步迭代
- 优点:模型简单,只需训练一个单步模型
- 缺点:误差累积,越往后越不准
- 多输出多步预测(Multi-output Multi-step)
- 用seq2seq架构,编码器-解码器结构
- 优点:灵活,可以处理变长序列
- 缺点:训练复杂,需要更多数据
我个人在实际项目中,最常用的是直接多步预测。原因很简单:它最稳定,不会出现递归方法那种「预测值逐渐漂移」的问题。当然,前提是你的模型容量要够大。
实战建议:如果你刚开始做多步预测,我建议先用直接多步预测。等你对数据有了感觉,再尝试递归或混合策略。我曾经在一个风电功率预测项目中,直接多步预测的MAE比递归方法低了30%——但这是建立在数据量足够大的前提下。
2.5 小结
这一章我们聊了:
- 多步预测的数学定义:
Ŷ = f(X; θ) - 输入输出维度:
(batch, L, D)→(batch, H) - 单步 vs 多步的本质区别:点估计 vs 序列估计,误差累积
- 三种策略:直接、递归、多输出
记住一句话:多步预测不是单步预测的简单堆叠,而是一个全新的问题定义。下一章我们会深入数据预处理,看看如何为多步预测准备高质量的训练样本。
公众号:蓝海资料掘金营,微信deep3321