标准公平的时间序列预测基准与工具包
$\text{BasicTS}^{+}$(Basic Time Series Plus)是一个增强型的时间序列预测基准和工具箱。$\text{BasicTS}^{+}$由其前身BasicTS演变而来,现在对空间-时间预测和长时间序列预测以及更一般的任务(如M4竞赛)提供了强大支持。为简洁起见,我们将交替使用$\text{BasicTS}^{+}$和$\text{BasicTS}$来指代本项目。
一方面,BasicTS利用统一标准的流程对流行的基于深度学习的模型进行公平全面的复现和比较。
另一方面,BasicTS为用户提供易用且可扩展的接口,便于快速设计和评估新模型。用户至少只需定义模型架构即可。
我们正在收集待办事项和操作指南,如果您需要更多功能(如更多数据集或基线),或有任何问题,请随时创建问题或在此处留言。
如果您发现本仓库对您的工作有用,请按以下方式引用此处:
@article{shao2023exploring,
title={Exploring Progress in Multivariate Time Series Forecasting: Comprehensive Benchmarking and Heterogeneity Analysis},
author={Shao, Zezhi and Wang, Fei and Xu, Yongjun and Wei, Wei and Yu, Chengqing and Zhang, Zhao and Yao, Di and Jin, Guangyin and Cao, Xin and Cong, Gao and others},
journal={arXiv preprint arXiv:2310.06119},
year={2023}
}
✨ 亮点特性
公平性能评估
用户可以基于统一全面的流程公平全面地比较不同模型在任意数据集上的性能。
使用BasicTS进行开发
最少代码
用户只需实现模型架构和数据预处理/后处理等关键代码,即可构建自己的深度学习项目。一切基于配置
用户可以通过配置文件控制流程的所有细节,如数据加载器的超参数、优化和其他技巧(如课程学习)。支持所有设备
得益于使用EasyTorch作为后端,BasicTS支持CPU、GPU和GPU分布式训练(包括单节点多GPU和多节点)。用户无需修改任何代码,只需设置参数即可使用。保存训练日志
支持`logging`日志系统和`Tensorboard`,并将其封装为统一接口,用户可以通过调用简单接口保存自定义训练日志。📦 内置数据集和基线
数据集
BasicTS支持多种数据集,包括空间-时间预测、长时间序列预测和大规模数据集,例如:
- METR-LA、PEMS-BAY、PEMS03、PEMS04、PEMS07、PEMS08
- ETTh1、ETTh2、ETTm1、ETTm2、Electricity、Exchange Rate、Weather、Traffic、Illness、Beijing Air Quality
- SD、GLA、GBA、CA
- ...
基线
BasicTS实现了丰富的模型,包括经典模型、时空预测模型和长时间序列预测模型,例如:
- HI、DeepAR、LightGBM等
- DCRNN、Graph WaveNet、MTGNN、STID、D2STGNN、STEP、DGCRN、STNorm、AGCRN、GTS、StemGNN、MegaCRN、STGCN、STWave、STAEformer、GMSDR等
- Informer、Autoformer、FEDformer、Pyraformer、DLinear、NLinear、Triformer、Crossformer等
💿 依赖
前提条件
操作系统
我们建议在Linux系统(如Ubuntu和CentOS)上使用BasicTS。 其他系统(如Windows和macOS)尚未经过测试。
Python
Python版本 >= 3.6(推荐 >= 3.9)。
推荐使用Miniconda或Anaconda创建虚拟Python环境。
其他依赖
BasicTS基于PyTorch和EasyTorch构建。 您可以按照PyTorch的说明安装PyTorch。例如:
pip install torch==1.10.0+cu111 torchvision==0.11.0+cu111 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
确保PyTorch正确安装后,您可以通过以下方式安装其他依赖:
pip install -r requirements.txt
警告
BasicTS基于PyTorch 1.9.1或1.10.0构建,其他版本尚未经过测试。
🎯 使用BasicTS进行开发的入门指南
准备数据
-
克隆BasicTS
cd /path/to/your/project git clone https://github.com/zezhishao/BasicTS.git
-
下载原始数据
您可以从Google Drive或百度网盘(密码:6v0a)下载所有原始数据集,并将它们解压到
datasets/raw_data/
目录。 -
预处理数据
cd /path/to/your/project python scripts/data_preparation/${DATASET_NAME}/generate_training_data.py
将
${DATASET_NAME}
替换为METR-LA
、PEMS-BAY
、PEMS03
、PEMS04
、PEMS07
、PEMS08
或任何其他支持的数据集。处理后的数据将放置在datasets/${DATASET_NAME}
中。
评估您的模型的3个步骤
-
定义您的模型架构
forward
函数需要遵循BasicTS的约定。您可以在baselines/MLP/mlp_arch.py中找到多层感知器(MLP
)模型的示例。 -
为您的模型定义Runner(可选)
BasicTS在
basicts.runner.BaseTimeSeriesForecastingRunner
中提供了统一的标准流程。 尽管如此,您仍需要定义具体的前向过程(runner中的forward
函数)。 幸运的是,BasicTS还在basicts.runner.SimpleTimeSeriesForecastingRunner
中提供了这样的实现,可以覆盖大多数情况。MLP
模型的runner也可以使用这个内置runner。 您还可以在basicts.runners.runner_zoo
中找到更多runner,以了解更多关于runner设计的信息。 -
配置您的配置文件
您可以在配置文件中配置流程的所有细节和超参数,即一切基于配置。 配置文件是一个
.py
文件,您可以在其中导入模型和runner,并设置所有选项。BasicTS使用EasyDict
作为参数容器,具有可扩展性和灵活性。 您可以在baselines/MLP/MLP_METR-LA.py中找到MLP
模型在METR-LA
数据集上的配置文件示例。
运行!
-
复现内置模型
BasicTS提供了丰富的内置模型。您可以通过运行以下命令来复现这些模型:
python experiments/train.py -c baselines/${MODEL_NAME}/${DATASET_NAME}.py --gpus '0'
将
${DATASET_NAME}
和${MODEL_NAME}
替换为任何支持的模型和数据集。例如,您可以通过以下方式在METR-LA数据集上运行Graph WaveNet:python experiments/train.py -c baselines/GWNet/METR-LA.py --gpus '0'
-
自定义您自己的模型
贡献者 ✨
感谢这些优秀的人(emoji key):
本项目遵循all-contributors规范。欢迎任何形式的贡献!
📉 主要结果
详见论文《探索多变量时间序列预测的进展:全面基准测试与异质性分析》。
🔗 致谢
BasicTS基于EasyTorch开发,EasyTorch是一个易用且强大的开源神经网络训练框架。