Transformer 是否适合时间序列预测

Transformer是否真的适合解决时序预测问题 - 知乎 (zhihu.com)

  • [[Autoformer]] #card

    • 一类方法是否适用于某个问题,主要取决于两者的[[归纳偏置]]是否相匹配

    • 标准 Transformer 实现的是点到点的特征融合,这种离散的方式其实是忽略了时间序列连续性。

    • 基于自相关理论将 Transformer 扩展到序列到序列的特征融合

  • [[MTGNN]]

  • [[TPA-LSTM]]

Transformer是否适合用于做非NLP领域的时间序列预测问题? - 知乎 (zhihu.com) [[2023/03/05]]

  • 吴海旭

    • 一类方法是否适用于某个问题,主要取决于两者的[[归纳偏置]]是否相匹配
      #card

      • RNN

        • 对序列依赖马尔可夫假设

        • 序列维度参数共享,天然可以处理变长数据

      • Transfomr

        • 注意力机制处理变长数据

        • 点点时序链接建模长期依赖

      • 线性模型

        • 不具备处理变长数据的能力

        • 模型参数量随着长度增加而增加

    • [[@Non-stationary Transformers: Exploring the Stationarity in Time Series Forecasting]] 非平稳时间序列预测

  • 科研汪老徐

    • [[@Are Transformers Effective for Time Series Forecasting?]] transformer 类方法短时预测效果差,所以强调长时预测,然后对比的 baseline 是自回归模型,由于错误累积,长时预测效果差。#card

      • 我们不相信如果一个模型对短时预测都做不好,对长时预测却得心应手,毕竟这两个问题都是从同一段历史数据里提取时序特征来做的预测。
    • 此外,我们也并不认为时序预测这个问题有必要考虑变长数据,也因此应该使用Transformer这类支持对变长数据进行建模的架构。#card

      • 反过来想一下,如果一个模型能同时处理各种长度的历史数据,至少说明这些不同长度之间的时序信息在建模过程中是丢失的。
    • SCINet CNN 提取时序特征

    • self-attention 机制上是 anti-ordering 的,与时间序列建模的目的恰好是矛盾的。#card

      • [[Informer]] 从实验结果来看,原生Informer的效果最差,原因也很简单,raw data除了大小没有什么时序的语义信息,对原始数据通过self-attention提取点对点的所谓correlation毫无意义。Informer中真正起了点儿作用的是对时间直接做些编码的部分,不过也作用有限。
    • [[PatchTST]] 我们一直质疑的是attention对于提取时序信息的意义,文中的Patch内部使用linear来提取feature,这部分跟我们的做法类似。#card

      • 直觉上来讲,学习不同patch之间的关系对大多数时间序列意义不大,可以做个ablation study看看attention是否真的起到了作用,i.e.,跟去掉attention后的两层Linear结构比较一下。此外,文中缺省使用了RIN来降低distribution shift带来的影响,跟NLinear的结果比较会相对合理一些。

      • RIN 对抗distribution shift的normalization方法 [[@Reversible Instance Normalization for Accurate Time-Series Forecasting against Distribution Shift]]

  • 的泼墨佛给克呢 - 知乎 (zhihu.com)

    • 是真的,informer设计了一大堆花里胡哨的,看起来很有道理,实际上用起来真的不太行。#card

      • 而且我发现,他们这些transformer的模型,在ETT数据集(只有7个变量)上,d_model设置为512,都快赶上nlp领域常设的768了,这也太离谱了。

      • 按理说,只有7个变量,用这么大的模型(虽然层数较少)太扯了

    • 而且那个pyraformer是真的没啥特别突出的地方,不知道咋能中oral。。。#card

      • 我做过实验,就是在输出的时候把变量维度和时间维度统一拼接经过线性层,这样确实能效果好,

      • 我觉得他的效果有提升就是因为这个,但这样得到的线性层是非常非常大的,参数甚至比transformer本身都多,不知道有啥意义。。。最近他的代码开源了,可以看看他是怎么实现的


平稳性

平稳性

  • 存在某种周期、季节性及趋势的方差和均值不随时间变化

  • 从统计学角度,平稳性要求对于一个时间序列的取值满足一个确定的分布

平稳性是时间序列分析的基础

  • 如果一个时间序列是不平稳的,需要通过 差分 的方式将其转化为平稳时间序列。
    严平稳 strictly stationary

  • 时间序列中任意给定长度的两段子序列都满足相同的联合分布

弱平稳 weakly stationary

  • 时间序列满足均值平稳性 stationary in mean 和二阶平稳性 secondary order stationary

  • 时间序列 $$r_t$$ 满足下面两个条件,则它是弱平稳的

    • 对所有时刻 t,有 E[rt]=μE[r_t] = \mu,其中μ\mu是常数。
    • 对于所有时刻 t 和任意时间间隔 k,rtr_trtkr_{t-k} 的协方差 σ(rt,rtk)=γk\sigma(r_t, r_{t-k}) =\gamma _k, γk\gamma _k 与 t 无关,仅依赖于时间间隔 k。
  • 方差平稳性 stationary in variance

    • 当 k=0 σ(rt,rt)=γt\sigma(r_t, r_{t}) =\gamma _t, γt\gamma _t 是一个与时间 t 无关的常数且不随时间变化。
  • 关于 对所有时刻 t,有 E[rt]=μE[r_t] = \mu,其中μ\mu是常数。
    的例子

    • 假设指数的日收益序列满足弱平稳条件,对于某一天指数日收益的期望可以用前一段时间的收益期望来近似估计。
  • 平稳的随机过程 stationary stochastic process

非平稳性

  • 非平平稳数据会导致虚假回归,表现为两个没有任务因果关系的变量,却有很高的相关性

[[ADF 检验]] :<- 判断时间序列是否满足平稳性要求

  • 特殊时间序列

    • 时间序列 wt,t=[1,n]{w_t, t=[1,n]}wtw_t 满足均值 0 方差为 σ2\sigma^2([[正态分布]]),且对于任意的 k>0,[[自相关]]系数均为 0,则称该时间序列为一个离散的白噪声。

      • Xt=wt,wt(0,σ2)X_t=w_t, w_t\left(0, \sigma^2\right)
    • 时间序列 xtx_t,满足 xt=xt1+wtx_t=x_{t-1}+w_twtw_t 是一个均值 0 方差为 σ2\sigma^2 的白噪声,则序列 xtx_t 为一个随机游走。

      • Xt=Xt1+wt,Xt(0,tσ2)X_t=X_{t-1}+w_t, X_t\left(0, t \sigma^2\right)
  • 思想

    • 基于随机游走,对 Xt 回归,如果发现 p=1,说明该序列满足随机游走,就是非平稳的。

      • ρk=Cov(rt,rtk)σrtσrtk=Cov(rt,rtk)σrtσrt=γkγ0\rho_k=\frac{\operatorname{Cov}\left(r_t, r_{t-k}\right)}{\sigma_{r_t} \sigma_{r_{t-k}}}=\frac{\operatorname{Cov}\left(r_t, r_{t-k}\right)}{\sigma_{r_t} \sigma_{r_t}}=\frac{\gamma_k}{\gamma_0},利用弱平稳的性质

      • Xt=Xt1+utX_t=X_{t-1}+u_t 随机游走,非平稳

      • Xt=pXt1+utX_t=p X_{t-1}+u_t 如果 p=1,则 Xt有一个单位根

  • from statsmodels.tsa.stattools import adfuller as ADF

    • ADF 函数计算结果

      • 第一个参数 T检验,假设检验值。

      • 第二个参数,P-value,假设检验结果。

      • 第五个参数,不同程度拒绝原假设的统计值

  • 如何判断是否平稳

    • ADF 假设检验值同时小于 1% 5% 10% 不同程度拒绝原假设的统计值,说明非常好地拒绝该假设

      • 原假设存在单位根

      • 统计值小于 1%,认为拒绝原假设,该序列是平稳的。

    • [[P-value]] 是否非常接近 0

Ref