时间序列模型有什么实际用处?

时间序列模型有什么实际用处?

Google最近在Arxiv上放了一个基于MLP的预测模型TiDE,效果和SOTA差不多的情况下,有着很高的时间和空间效率。时间序列预测领域,自从DLinear从来之后,X-Former之类的文章越来越少了,基于MLP的文章越来越多了,感兴趣的可以看一下我整理的这个库:

里面按照网络架构的分类(Transformer、MLP、RNN、TCN等),持续更新一些最新的时间序列预测论文。

由于此论文还没有开源代码,我简要写了这个模型的代码供参考,注释很详细,在文中不过多介绍。

TiDE模型整体架构如上图。首先,它也是和PatchTST一样,假设通道独立的。也就是说将多变量预测转变为多个单变量预测,模型参数共享。通道独立的详细介绍可见:

其次,和PatchTST以及一些基于MLP的预测模型相比,它不仅利用了过去的序列值(LookBack),而且利用了一些协变量信息,比如静态协变量(Attributes)和在任何时刻均已知的动态协变量(Dynamic Covariates)。协变量的详细介绍可见:

模型中的最基本模块如上图右侧所示,叫做Residual Block,其实就是加了Dropout、ReLU非线性、残差连接、LayerNorm的MLP。模型的编码器和解码器都是用多个Residual Block堆叠而成的。最左侧有个全局的残差连接,只用了一个线性层,实际上就是DLinear做的事情,这种全局残差连接可以使得TiDE理论上最差也和DLinear差不多。下面结合我写的代码介绍编码和解码过程。

导入的库:

一些变量的介绍:

编码的过程很简单,首先把过去和未来的动态协变量经过一个Residual Block(Feature Projection)再展平,和过去的序列值以及静态协变量拼接起来,一起输入到多个Residual Block堆叠而成的编码器中。

解码的过程也很简单,首先把编码器的输入送到多个Residual Block堆叠而成的解码器中,然后将解码器输出的结果reshape,并和未来的动态协变量拼接。拼接后的结果再送入一个Residual Block(Temporal Decoder)中即可。

有了前面的编码器和解码器,加上一个global的残差连接,TiDE模型就很好写了。注意一下代码里面的Channel Independence: Convert Multivariate series to Univariate series的操作即可。

主要实验如下表,可以看到和PatchTST的性能差不多:

但是,TiDE的时空效率非常高,要远远高于X-Former之类的模型。如下图,无论是推理时间还是训练时间都非常快,而且空间复杂度也很低,能够处理非常长的序列而不爆显存。

TiDE应该是最近的基于MLP的预测模型中效果最能打的了,相比于其他MLP的模型,也考虑到了对于预测任务比较重要的协变量信息(时变的协变量信息或静态的协变量信息)。而且整体思路也很简单,实现起来也很简单。整体代码如下: