logo

时间序列预测方式

wangzf / 2022-04-25


目录

按输入变量

单变量预测

Univariate Time Series Forecasting, 单变量预测

自回归预测

在单变量时间序列预测中,单个时间序列被建模为其滞后的线性或非线性组合, 其中该序列的过去值用于预测其未来。

多变量预测

Multivariate Time Series Forecasting, 多变量预测

多元时间序列,即每个时间有多个观测值:

{Xt=(xta,xtb,xtc,)}tT

这意味着通过不同的测量手段得到了多种观测值,并且希望预测其中的一个或几个值。 例如,可能有两组时间序列观测值 {xt1a,xt2a,}{xt1b,xt2b,},希望分析这组多元时间序列来预测 xta

基于以上场景,许多监督学习的方法可以应用在时间序列的预测中, 在运用机器学习模型时,可以把时间序列模型当成一个回归问题来解决, 比如 SVM、XGBoost、回归树 等。

在多变量预测中,两个或多个时间序列使用单个模型一起建模。多变量预测有两种不同的策略:

独立多变量预测

Independent Multi-Series Forecasting

img

为了预测未来的 n 步,应该用递归多步预测策略

img

相关多变量预测

Dependent Multi-Series Forecasting(Multivariate time series)

img

按预测步长

单步预测

所谓单步预测,就是每一次预测的时候输入窗口只预测未来的一个值。 在时间序列预测中的标准做法是使用滞后的观测值 xt 作为输入变量来预测当前的时间的观测值 xt+1。 单步预测的两个策略:扩展窗口、滑动窗口(推荐)。

img

上图中,左图为扩展窗口,右侧为滑动窗口。

img

多步预测

大多数预测问题都被定义为单步预测,根据最近发生的事件预测系列的下一个值。 多步预测需要预测未来多个值,就是利用过去的时间数据来预测未来多个时刻的时序数据。 提前预测多个时刻的数据具有重要的实际优势,多步预测减少了长期的不确定性, 但模型试图预测更远的未来时,模型的误差也会逐渐增加。

对于多步预测常用的解决方案有 5 种:

为了方便讲解不同的多步预测策略,假设原始时间序列数据为 {t1,t2,t3,t4,t5}, 这是已知的数据,需要预测未来两个时刻的状态 {t6,t7}

直接多输出预测

Direct Multi-Output Forecasting

某些深度学习模型,例如长短期记忆神经网络(LSTM),可以同时预测一个序列的多个值(一次性预测)。 对于这个策略是比较好理解与实现的,比如,需要在模型预测时连续预测两个值, 只不过需要在模型最终的线性层设置为多个输出神经元即可,即:正常单输出预测, 预测未来一个时刻的模型最终的输出层为 Linear(hidden_size, 1), 对于直接多步预测修改输出层为 Linear(hidden_size, 2) 即可, 最后一层的两个神经元分别预测 {t6,t7}

定义的模型结构状态为:

img

这种策略的优缺点为:

递归多步预测

Recursive Multi-Step Forecasting

递归多步预测就是利用递归方式预测未来状态。

  1. 该策略会训练一个单步输出预测模型;模型依次按照时序递归进行预测;
  2. 首先,利用已知时序数据预测出 t6
  3. 然后,再滑动一个窗口,该窗口最后一个值为 t6
  4. 利用该窗口数据,去预测 t7

定义的模型结构状态为:

img img

这种实现策略的优缺点为:

直接多步预测

Direct Multi-Step Forecasting

直接多步预测意如其名,就是直接输出未来多个时刻的的状态。 注意一下,不同于直接多输出预测,该策略会同时训练两个模型,其中一个模型用于预测 t6, 另一个模型用于预测 t7,也就是要预测未来多少个时刻状态,就需要训练多少个模型。

定义的模型结构状态为:

img img

这种实现策略的优缺点为:

直接-递归混合预测

Direct Recursive Hybrid Forecasting

直接递归混合预测融合了递归多步预测直接多步预测两种策略。 它会分别训练两个模型,分别用于预测 t6t7, 与直接多步预测不同的是在预测 t7 时利用到了预测 t6 模型的输出结果, 即 t6 的预测结果。

定义的模型结构状态为:

img img

这种策略的优缺点为:

Seq2Seq 多步预测

Seq2Seq Multi-Step Forecasting

Seq2Seq 实现策略与直接多输出预测一致,不同之处就是这种策略利用到了 Seq2Seq 这种模型结果, Seq2Seq 实现了序列到序列的预测方案,由于多步预测的预测结果也是多个序列,所以问题可以使用这种模型架构。

定义的模型结构状态为:

img

对于这种模型架构相对于递归预测效率会高一点,因为可以并行同时预测 t6t7 的结果, 而且对于这种模型架构可以使用更多高精度的模型,例如:Bert、Transformer、Attention 等多种模型作为内部的组件。

按目标个数

一元预测

多元预测

多元预测(多目标回归)为每一个预测结果构建一个模型,如下是一个使用案例:

from sklearn.multioutput import MultiOutputRegressor

direct = MultiOutputRegressor(LinearRegression())
direct.fit(X_tr, Y_tr)
direct.predict(X_test)

scikit-learn 的 MultiOutputRegressor 为每个目标变量复制了一个学习算法。 在这种情况下,预测方法是 LinearRegression。此种方法避免了递归方式中错误传播, 但多目标预测需要更多的计算资源。此外多目标预测假设每个点是独立的,这是违背了时序数据的特点。

递归多元预测

递归多目标回归结合了多目标和递归的思想。为每个点建立一个模型。 但是在每一步的输入数据都会随着前一个模型的预测而增加。

from sklearn.multioutput import RegressorChain

dirrec = RegressorChain(LinearRegression())
dirrec.fit(X_tr, Y_tr)
dirrec.predict(X_test)

这种方法在机器学习文献中被称为 chaining。 scikit-learn 通过 RegressorChain 类为其提供了一个实现。

多重预测

参考