本文主要翻译自博客:https://machinelearningmastery.com/multi-step-time-series-forecasting/
有兴趣的童鞋可以上原地址查看英文版本~
通常来说,时间序列预测描述的是在下一个时间步预测出的值,这被称为单步预测。但是有些情况下,预测任务需要预测出未来多个时间步的值,那这种情况就被称为多步预测。
以温度预测为例,考虑到过去7天的观测温度:
Time, Temperature
1, 56
2, 50
3, 59
4, 63
5, 52
6, 60
7, 55
单步预测只需要在对时间步8(第8天)的气温进行预测:
Time, Temperature
8, ?
而多预测可能需要对未来两天进行预测,如下所示:
Time, Temperature
8, ?
9, ?
多步预测通常至少有四种策略:
直接法为每个预测时间步开发一个单独的模型。
在预测未来两天的温度的情况下,我们将学习一个独立的模型用于预测第一天温度,另一个独立的模型来预测第二天的温度。
例如:
prediction(t+1) = model1(obs(t-1), obs(t-2), ..., obs(t-n))
prediction(t+2) = model2(obs(t-2), obs(t-3), ..., obs(t-n))
首先,当要预测的时间步较多时,为每个时间步应用一个模型会带来沉重的计算和维护负担。
其次,因为使用了不同的独立模型,无法对预测时间步之间的相关性进行建模。而在时间序列中,第2天的预测往往是一定程度上依赖于第1天的预测结果的。
递归策略则多次使用一步模型,前一个时间步的预测被用作对下一个时间步进行预测的输入。
在预测未来两天的气温时,我们将开发一个一步预测模型。该模型将先用于预测第1天,然后将第1天的预测结果当做观察输入,以便预测第2天。
例如:
prediction(t+1) = model(obs(t-1), obs(t-2), ..., obs(t-n))
prediction(t+2) = model(prediction(t+1), obs(t-1), ..., obs(t-n))
由于使用预测值来代替观测值,递归策略会造成预测误差不断累积,随着预测时间范围的增加,递归多部预测策略的性能可能会迅速下降。
直接和递归策略可以结合起来,以结合这两种方法的优点。
例如,可以为每个要预测的时间步构造一个单独的模型,但是每个模型可以使用模型在前一个时间步所做的预测作为输入值。
对于预测未来两天的温度,可以使用两个模型,分别是model1和model2。在进行未来第2天的温度预测时,第一个模型的输出被用作第二个模型的输入。
例如:
prediction(t+1) = model1(obs(t-1), obs(t-2), ..., obs(t-n))
prediction(t+2) = model2(prediction(t+1), obs(t-1), ..., obs(t-n))
递归策略和直接策略结合起来可以一定程度克服每种策略的局限性。
多输出策略主要指开发一个能够一次性预测整个预测序列的模型。
对于预测未来两天的温度,我们将开发一个模型,并将其作为一个操作来预测未来两天的温度。
例如:
prediction(t+1), prediction(t+2) = model(obs(t-1), obs(t-2), ..., obs(t-n))
多输出模型更复杂,因为它们可以学习输入和输出之间以及输出之间的依赖关系。更复杂可能意味着训练速度较慢,需要更多数据来避免过度拟合问题。