来源论文iclr2024
论文地址:https://arxiv.org/abs/2405.14616
源码地址: https://github.com/kwuking/TimeMixer
背景
数据是有连续性,周期性,趋势性的。我们这篇文章主要围绕的是用MLP结构来预测数据的周期性具体为:
短期变化(细粒度):例如局部波动、尖峰等,通常与日常行为或随机事件相关。
长期变化(粗粒度):例如趋势、周期性或季节性模式,这些通常反映更广义的规律。
现有方法(如 RNN 和 Transformer)通常只能从单一时间尺度建模,忽略了不同时间尺度之间的关联性。
确实,在金融领域,如a股是有明显的周期性的,在股价预测方面确实可以借鉴。
模型架构
Past-Decomposable-Mixing (PDM)模块
PDM 模块负责从历史数据中提取多尺度的时间特征,通过分解和多层混合来捕捉趋势和季节性
PDM 的具体步骤:
时间序列分解:
使用分解模块(如基于 Autoformer 的策略)将时间序列分为:
1.趋势性成分(Trend):表示长期变化。
2.季节性成分(Seasonal):表示短期波动。
生成多尺度的趋势和季节性子序列。(也就是将其自底向上隔点取值)
那是怎么进行多尺度划分的呢?
看这里 我们取P为96,l取0,1,2,3.
原文采用的是普通的平均池化来进行多尺度划分,将P和l进行带入后获得的多尺度提取序列是,第一次比如是隔2个点进行取值获得第一次的粗序列,第二次进行四个点取值的粗序列,第四次是隔八个点取的粗序列,反正是根据2的指数进行递增的。如下图。
下面这是特征提取层
那么这个PDM模块得到的是哪个mixing呢?
答案是总的
那我们如何得到这些趋势向和季节向?
原文就是通过平均池化,得到趋势向
然后用总的减去趋势向得到季节向
那么为什么用平均池化可以得到趋势向?
举个例子, 2,4,6,8,假设池化步幅为2
平均池化后得到3,3,7,7那么这就是趋势向得到的结果,这时候我们可以看到这是有上升趋势的,
那么用原来的序列减去平均池化后的序列结果呢?得到-1,1,-1,1 这样一看就很有周期性。
先看季节向的公式:
季节向是自底向上的,为什么自底向上,是因为季节性的话(也就是周期性),提取向上后时间间隔越来越大,那么得到的上层的周期性就不明显,就需要用下层的信息去补充上层信息,使其达到季节性效果。
趋势层是自上到下的,自顶向下的处理方式可以在细粒度特征中引入稳定的趋势信息,减少噪声的影响,使模型在噪声较大的数据中表现更鲁棒。自顶向下的处理方式可以在细粒度特征中引入稳定的趋势信息,减少噪声的影响,使模型在噪声较大的数据中表现更鲁棒。
FMM模块
就是将多尺度提取后mixing模块的结果进行维度转换,把它统一到一个维度去,最后在进行加权得到最后的预测结果。
总体模型图如下。
实验部分
最后实验部分也是比sota模型高。
TimeMixer在所有基准测试中都实现了一致的最先进性能,涵盖了具有不同频率、
变量数和实际场景的大量系列。特别是,TimeMixer的性能明显优于PatchTST,天气MSE降低
了9.4%,Solar-Energy MSE降低了24.7%。值得注意的是,即使在Solar-Energy和ETT等可预测
性较低的数据集上,TimeMixer也表现出了良好的性能,进一步证明了TimeMixer的通用性和有
效性。
为了验证模型的泛化能力,在一些比较随机性差的数据集是否有效果,作者定义了一个指标
Forecastability,Forecastability可预测指数(2013ForeCA算法)
谱熵–反映数据在频域中的不确定性,度量数据集混乱程度的指标,熵值越高,时间序列趋势越复杂,越难以预测
(1-熵值)越大,可预测Forecastability:性越强