This is the original PyTorch implementation of the following work: Time Series is a Special Sequence: Forecasting with Sample Convolution and Interaction. If you find this repository useful for your work, please consider citing it as follows:
@article{liu2021SCINet,
title={Time Series is a Special Sequence: Forecasting with Sample Convolution and Interaction},
author={Liu, Minhao and Zeng, Ailing and Lai, Qiuxia and Xu, Qiang},
journal={arXiv preprint arXiv:2106.09305},
year={2021}
}
[2021-09-17] SCINet v1.0 is released!
Stay tuned!
We conduct the experiments on 11 popular time-series datasets, namely Electricity Transformer Temperature (ETTh1, ETTh2 and ETTm1) , Traffic, Solar-Energy, Electricity and Exchange Rate and PeMS (PEMS03, PEMS04, PEMS07 and PEMS08), ranging from power, energy, finance and traffic domains.
| Datasets | Variants | Timesteps | Granularity | Start time | Task Type |
|---|---|---|---|---|---|
| ETTh1 | 7 | 17,420 | 1hour | 7/1/2016 | Multi-step |
| ETTh2 | 7 | 17,420 | 1hour | 7/1/2016 | Multi-step |
| ETTm1 | 7 | 69,680 | 15min | 7/1/2016 | Multi-step |
| PEMS03 | 358 | 26,209 | 5min | 5/1/2012 | Multi-step |
| PEMS04 | 307 | 16,992 | 5min | 7/1/2017 | Multi-step |
| PEMS07 | 883 | 28,224 | 5min | 5/1/2017 | Multi-step |
| PEMS08 | 170 | 17,856 | 5min | 3/1/2012 | Multi-step |
| Traffic | 862 | 17,544 | 1hour | 1/1/2015 | Single-step |
| Solar-Energy | 137 | 52,560 | 1hour | 1/1/2006 | Single-step |
| Electricity | 321 | 26,304 | 1hour | 1/1/2012 | Single-step |
| Exchange-Rate | 8 | 7,588 | 1hour | 1/1/1990 | Single-step |
Install the required package first:
cd SCINet
conda create -n scinet python=3.8
conda activate scinet
pip install -r requirements.txt
All datasets can be downloaded here. To prepare all dataset at one time, you can just run:
source prepare_data.sh
The data directory structure is shown as follows.
|-- datasets/
`-- |-- ETT-data/
`-- |-- ETTh1.csv
|-- ETTh2.csv
|-- ETThm1.csv
`-- |-- financial/
`-- |-- electricity.txt
|-- exchange_rate.txt
|-- solar_AL.txt
|-- traffic.txt
`-- |-- PEMS/
`-- |-- PEMS03.npz
|-- PEMS04.npz
|-- PEMS07.npz
|-- PEMS08.npz
To facilitate reproduction, we provide the logs on the above datasets here in details. You can check the hyperparameters, training loss and test results for each epoch in these logs as well.
We follow the same settings of StemGNN for PEMS 03, 04, 07, 08 datasets, MTGNN for Solar, electricity, traffic, financial datasets, Informer for ETTH1, ETTH2, ETTM1 datasets. The detailed training commands are given as follows.
pems03
python run_pems.py --dataset PEMS03 --hidden-size 0.0625 --dropout 0.25 --model_name pems03_h0.0625_dp0.25
pems04
python run_pems.py --dataset PEMS04 --hidden-size 0.0625 --dropout 0 --model_name pems04_h0.0625_dp0
pems07
python run_pems.py --dataset PEMS07 --hidden-size 0.03125 --dropout 0.25 --model_name pems07_h0.03125_dp0.25
pems08
python run_pems.py --dataset PEMS08 --hidden-size 1 --dropout 0.5 --model_name pems08_h1_dp0.5
| Parameter Name | Description | Parameter in paper | Default |
|---|---|---|---|
| dataset | Name of dataset | N/A | PEMS08 |
| horizon | Horizon | Horizon | 12 |
| window_size | Look-back window | Look-back window | 12 |
| hidden-size | hidden expansion | h | 1 |
| layers | SCINet block layers | L | 2 |
| stacks | The number of SCINet block | K | 1 |
predict 3
python run_financial.py --dataset_name solar_AL --window_size 160 --horizon 3 --hidden-size 2 --lastWeight 0.5 --stacks 1 --layers 4 --lradj 2 --lr 1e-4 --dropout 0.25 --batch_size 1024 --model_name so_I160_o3_lr1e-4_bs1024_dp0.25_h2_s1l4_w0.5
predict 6
python run_financial.py --dataset_name solar_AL --window_size 160 --horizon 6 --hidden-size 2 --lastWeight 0.5 --stacks 2 --layers 4 --lradj 2 --lr 1e-4 --dropout 0.25 --batch_size 1024 --model_name so_I160_o6_lr1e-4_bs1024_dp0.25_h2_s2l4_w0.5
predict 12
python run_financial.py --dataset_name solar_AL --window_size 160 --horizon 12 --hidden-size 2 --lastWeight 0.5 --stacks 2 --layers 4 --lradj 2 --lr 1e-4 --dropout 0.25 --batch_size 1024 --model_name so_I160_o12_lr1e-4_bs1024_dp0.25_h2_s2l4_w0.5
predict 24
python run_financial.py --dataset_name solar_AL --window_size 160 --horizon 24 --hidden-size 2 --lastWeight 0.5 --stacks 1 --layers 4 --lradj 2 --lr 1e-4 --dropout 0.25 --batch_size 1024 --model_name so_I160_o24_lr1e-4_bs1024_dp0.25_h2_s1l4_w0.5
predict 3
python run_financial.py --dataset_name electricity --window_size 168 --horizon 3 --hidden-size 8 --single_step 1 --stacks 2 --layers 3 --lr 9e-3 --dropout 0 --batch_size 32 --model_name ele_I168_o3_lr9e-3_bs32_dp0_h8_s2l3_w0.5 --groups 321
predict 6
python run_financial.py --dataset_name electricity --window_size 168 --horizon 6 --hidden-size 8 --single_step 1 --stacks 2 --layers 3 --lr 9e-3 --dropout 0 --batch_size 32 --model_name ele_I168_o6_lr9e-3_bs32_dp0_h8_s2l3_w0.5 --groups 321
predict 12
python run_financial.py --dataset_name electricity --window_size 168 --horizon 12 --hidden-size 8 --single_step 1 --stacks 2 --layers 3 --lr 9e-3 --dropout 0 --batch_size 32 --model_name ele_I168_o12_lr9e-3_bs32_dp0_h8_s2l3_w0.5 --groups 321
predict 24
python run_financial.py --dataset_name electricity --window_size 168 --horizon 24 --hidden-size 8 --single_step 1 --stacks 2 --layers 3 --lr 9e-3 --dropout 0 --batch_size 32 --model_name ele_I168_o24_lr9e-3_bs32_dp0_h8_s2l3_w0.5 --groups 321
predict 3
python run_financial.py --dataset_name traffic --window_size 168 --horizon 3 --hidden-size 2 --single_step 1 --stacks 2 --layers 3 --lr 5e-4 --dropout 0.25 --batch_size 16 --model_name traf_I168_o3_lr5e-4_bs16_dp0.25_h2_s2l3_w1.0
predict 6
python run_financial.py --dataset_name traffic --window_size 168 --horizon 6 --hidden-size 2 --single_step 1 --stacks 2 --layers 2 --lr 5e-4 --dropout 0.25 --batch_size 16 --model_name traf_I168_o6_lr5e-4_bs16_dp0.25_h2_s2l2_w1.0
predict 12
python run_financial.py --dataset_name traffic --window_size 168 --horizon 12 --hidden-size 1 --single_step 1 --stacks 2 --layers 3 --lr 5e-4 --dropout 0.25 --batch_size 16 --model_name traf_I168_o12_lr5e-4_bs16_dp0.25_h1_s2l3_w1.0
predict 24
python run_financial.py --dataset_name traffic --window_size 168 --horizon 24 --hidden-size 2 --single_step 1 --stacks 2 --layers 2 --lr 5e-4 --dropout 0.5 --batch_size 16 --model_name traf_I168_o24_lr5e-4_bs16_dp0.5_h2_s2l2_w1.0
predict 3
python run_financial.py --dataset_name exchange_rate --window_size 168 --horizon 3 --hidden-size 0.125 --lastWeight 0.5 --stacks 1 --layers 3 --lr 5e-3 --dropout 0.5 --batch_size 4 --model_name ex_I168_o3_lr5e-3_bs4_dp0.5_h0.125_s1l3_w0.5 --epochs 150
predict 6
python run_financial.py --dataset_name exchange_rate --window_size 168 --horizon 6 --hidden-size 0.125 --lastWeight 0.5 --stacks 1 --layers 3 --lr 5e-3 --dropout 0.5 --batch_size 4 --model_name ex_I168_o6_lr5e-3_bs4_dp0.5_h0.125_s1l3_w0.5 --epochs 150
predict 12
python run_financial.py --dataset_name exchange_rate --window_size 168 --horizon 12 --hidden-size 0.125 --lastWeight 0.5 --stacks 1 --layers 3 --lr 5e-3 --dropout 0.5 --batch_size 4 --model_name ex_I168_o12_lr5e-3_bs4_dp0.5_h0.125_s1l3_w0.5 --epochs 150
predict 24
python run_financial.py --dataset_name exchange_rate --window_size 168 --horizon 24 --hidden-size 0.125 --lastWeight 0.5 --stacks 1 --layers 3 --lr 5e-3 --dropout 0.5 --batch_size 4 --model_name ex_I168_o24_lr5e-3_bs4_dp0.5_h0.125_s1l3_w0.5 --epochs 150
| Parameter Name | Description | Parameter in paper | Default |
|---|---|---|---|
| dataset_name | Data name | N/A | exchange_rate |
| horizon | Horizon | Horizon | 3 |
| window_size | Look-back window | Look-back window | 168 |
| batch_size | Batch size | batch size | 8 |
| lr | Learning rate | learning rate | 5e-3 |
| hidden-size | hidden expansion | h | 1 |
| layers | SCINet block layers | L | 3 |
| stacks | The number of SCINet block | K | 1 |
| lastweight | Loss weight of the last frame | Loss weight ($\lambda$) | 1.0 |
multivariate, out 24
python run_ETTh.py --data ETTh1 --features M --seq_len 48 --label_len 24 --pred_len 24 --hidden-size 4 --stacks 1 --layers 3 --lr 5e-3 --batch_size 16 --dropout 0.5 --model_name etth1_M_I48_O24_lr5e-3_bs16_dp0.5_h4_s1l3
multivariate, out 48
python run_ETTh.py --data ETTh1 --features M --seq_len 96 --label_len 48 --pred_len 48 --hidden-size 4 --stacks 1 --layers 3 --lr 0.009 --batch_size 16 --dropout 0.25 --model_name etth1_M_I96_O48_lr0.009_bs16_dp0.25_h4_s1l3
multivariate, out 168
python run_ETTh.py --data ETTh1 --features M --seq_len 336 --label_len 168 --pred_len 168 --hidden-size 4 --stacks 1 --layers 3 --lr 5e-4 --batch_size 32 --dropout 0.5 --model_name etth1_M_I336_O168_lr5e-4_bs32_dp0.5_h4_s1l3
multivariate, out 336
python run_ETTh.py --data ETTh1 --features M --seq_len 336 --label_len 336 --pred_len 336 --hidden-size 1 --stacks 1 --layers 4 --lr 1e-4 --batch_size 512 --dropout 0.5 --model_name etth1_M_I336_O336_lr1e-4_bs512_dp0.5_h1_s1l4
multivariate, out 720
python run_ETTh.py --data ETTh1 --features M --seq_len 736 --label_len 720 --pred_len 720 --hidden-size 1 --stacks 1 --layers 5 --lr 5e-5 --batch_size 256 --dropout 0.5 --model_name etth1_M_I736_O720_lr5e-5_bs256_dp0.5_h1_s1l5
Univariate, out 24
python run_ETTh.py --data ETTh1 --features S --seq_len 64 --label_len 24 --pred_len 24 --hidden-size 8 --stacks 1 --layers 3 --lr 0.007 --batch_size 64 --dropout 0.25 --model_name etth1_S_I64_O24_lr0.007_bs64_dp0.25_h8_s1l3
Univariate, out 48
python run_ETTh.py --data ETTh1 --features S --seq_len 720 --label_len 48 --pred_len 48 --hidden-size 4 --stacks 1 --layers 4 --lr 0.0001 --batch_size 8 --dropout 0.5 --model_name etth1_S_I720_O48_lr0.0001_bs8_dp0.5_h4_s1l4
Univariate, out 168
python run_ETTh.py --data ETTh1 --features S --seq_len 720 --label_len 168 --pred_len 168 --hidden-size 4 --stacks 1 --layers 4 --lr 5e-5 --batch_size 8 --dropout 0.5 --model_name etth1_S_I720_O168_lr5e-5_bs8_dp0.5_h4_s1l4
Univariate, out 336
python run_ETTh.py --data ETTh1 --features S --seq_len 720 --label_len 336 --pred_len 336 --hidden-size 1 --stacks 1 --layers 4 --lr 1e-3 --batch_size 128 --dropout 0.5 --model_name etth1_S_I720_O336_lr1e-3_bs128_dp0.5_h1_s1l4
Univariate, out 720 ``` python run_ETTh.py --data ETT
$ claude mcp add SCINet \
-- python -m otcore.mcp_server <graph>