一、摘要
之前的方法都是尝试直接用1维时间序列进行预测序列、分类等任务。本文提出timesNet,基于多周期将时间序列从1维空间扩展到2维空间,这种变换可以将周期内和周期间的变化分别嵌入到2D张量的列和行中,2D张量易于用kernel进行特征提取。
文中提出了将TimesBlock作为时间序列分析的任务通用主干的TimesNet。TimesBlock可以自适应地发现多周期性,并通过参数有效的起始块从变换后的2D张量中提取复杂的时间变化。
并在五个主流任务(包括短期和长期预测、插补、分类、异常检测)中取得sota的结果
二、简介
时序数据分析:
- 实时序列通常具有多个周期性,如天气观测的日变化和年变化,电力消耗的周变化和季度变化
- 每个时间点的变化不仅受其相邻区域的时间模式(周期内变化)的影响,而且与相邻周期的变化(周期间变化)高度相关。
- 对于没有明确周期性的时间序列,其变化将以周期内变化为主,相当于具有无限周期长度的时间序列。(这类数据理论上很难进行长期预测)
贡献:
- 受多周期性和周期内及周期间复杂相互作用的启发,我们找到了一种时间变化建模的模块化方法。
- 笔者思考:没有考虑到特定的人为因素的影响。
- 提出了具有TimesBlock的TimesNet来发现多个周期,并通过inceptionV1模块从转换的的2D张量中提取时间2D变化特征。
- 在五个主流时间序列分析任务中实现一致的SOTA。包括详细而深刻的可视化
三、TimesNet模型框架
3.1 时序从1D转变成2D

每个时间点都涉及两种类型的时间变化,即期内变化和期间变化。
首先基于傅里叶分析找到序列的多个周期
A = A v g ( A m p ( F F T ( X 1 D ) ) ) , { f 1 , f 2 , . . . , f k } = a r g T o p k f ∗ ∈ { 1 , . . . , ⌈ T 2 ⌉ } ( A ) , p i = ⌈ T f i ⌉ , i ∈ { 1 , . . , k } ( 1 ) \bf{A} = Avg(Amp(FFT(X_{1D}))), \{f_1, f_2, ..., f_k\}=\underset{f_* \in \{1, ..., \lceil \frac{T}{2}\rceil\}}{arg\ Topk} (A), p_i = \lceil \frac{T}{f_i}\rceil, i \in \{1, .., k\} \ \ (1) A=Avg(Amp(FFT(X1D))),{
f1,f2,...,fk}=f∗∈{
1,...,⌈2T⌉}arg Topk(A),pi=⌈fiT⌉,i∈{
1,..,k} (1)
可以简写成
A , { f 1 , . . . , f k } , { p 1 , . . . , p k } = P e r i o d ( X 1 D ) ( 2 ) A, \{f_1, ..., f_k\}, \{p_1, ..., p_k\}=Period(X_{1D}) \ \ \ (2) A,{
f1,...,fk},{
p1,...,pk}=Period(X1D) (2)
- f i f_i fi : 频率
- p i = ⌈ T f i ⌉ p_i = \lceil \frac{T}{f_i}\rceil pi=⌈fiT⌉: 一个周期长度
将 1D 时序 X 1 D ∈ R T × C X_{1D} \in \mathcal{R}^{T \times C} X1D∈RT×C 转换成 2D 张量:
X 2 D i = R e s h a p e p i , f i ( P a d d i n g ( X 1 D ) ) , i ∈ { 1 , . . . , k } X^{i}_{2D} = Reshape_{p_i, f_i}(Padding(X_{1D})), i \in \{1, ..., k\} X2Di=Reshapepi,fi(Padding(X1D)),i∈{
1,...,k}
- P a d d i n g ( ⋅ ) Padding(\cdot) Padding(⋅) 是将时间序列沿时间维度扩展0以使其兼容 R e s h a p e p i , f i ( ⋅ ) Reshape_{p_i, f_i}(\cdot) Reshapepi,fi(⋅)
- row: p i p_i pi
- column: f i f_i fi
- X 2 D i ∈ R T × C X^{i}_{2D} \in \mathcal{R}^{T\times C} X2Di∈RT×C: 基于周期- f i f_i fi装换的第i个时序张量
- 获取一些列 2D 张量 { X 2 D 1 , . . . , X 2 D k } \{ X^{1}_{2D}, ..., X^{k}_{2D} \} { X2D1,...,X2Dk}
code:
def FFT_for_Period(x, k=2):
# [B, T, c]
xf = torch.fft.rfft(x, dim=1)
# find period by amplitudes
freq_list = abs(xf).mean(0).mean(-1)
freq_list[0] = 0
_, top_list = torch.topk(freq_list, k)
top_list = top_list.detach().cpu().numpy()
period = x.shape[1

本文提出TimesNet模型,将时间序列从1维扩展到2维,便于用卷积核提取特征。TimesBlock可自适应发现多周期性并提取复杂时间变化。在五个主流时间序列分析任务中取得SOTA结果。文中给出模型框架、实例,还进行了模型训练和预测,最后提出未来探索大规模预训练方法等工作。

1509

被折叠的 条评论
为什么被折叠?



