Pytorchts adalah kerangka peramalan seri waktu probabilistik Pytorch yang menyediakan model seri waktu pytorch canggih dengan memanfaatkan Gluont sebagai API back-end dan untuk memuat, mengubah dan set data seri waktu pengujian.
$ pip3 install pytorchts
Di sini kami menyoroti perubahan API melalui Gluonts Readme.
import matplotlib . pyplot as plt
import pandas as pd
import torch
from gluonts . dataset . common import ListDataset
from gluonts . dataset . util import to_pandas
from pts . model . deepar import DeepAREstimator
from pts import TrainerContoh sederhana ini menggambarkan cara melatih model pada beberapa data, dan kemudian menggunakannya untuk membuat prediksi. Sebagai langkah pertama, kita perlu mengumpulkan beberapa data: dalam contoh ini kita akan menggunakan volume tweet yang menyebutkan simbol ticker AMZN.
url = "https://raw.githubusercontent.com/numenta/NAB/master/data/realTweets/Twitter_volume_AMZN.csv"
df = pd . read_csv ( url , header = 0 , index_col = 0 , parse_dates = True )100 titik data pertama terlihat seperti berikut:
df [: 100 ]. plot ( linewidth = 2 )
plt . grid ( which = 'both' )
plt . show ()
Kami sekarang dapat menyiapkan dataset pelatihan untuk dilatih oleh model kami. Dataset pada dasarnya adalah koleksi kamus yang dapat diulang: Setiap kamus mewakili rangkaian waktu dengan fitur yang mungkin terkait. Untuk contoh ini, kami hanya memiliki satu entri, ditentukan oleh bidang "start" yang merupakan cap waktu dari titik data pertama, dan bidang "target" yang berisi data deret waktu. Untuk pelatihan, kami akan menggunakan data hingga tengah malam pada 5 April 2015.
training_data = ListDataset (
[{ "start" : df . index [ 0 ], "target" : df . value [: "2015-04-05 00:00:00" ]}],
freq = "5min"
) Model peramalan adalah objek prediktor . Salah satu cara untuk mendapatkan prediktor adalah dengan melatih estimator koresponden. Instantiating Estimator memerlukan menentukan frekuensi deret waktu yang akan ditangani, serta jumlah langkah waktu yang harus diprediksi. Dalam contoh kami, kami menggunakan data 5 menit, jadi req="5min" , dan kami akan melatih model untuk memprediksi jam berikutnya, jadi prediction_length=12 . Input ke model akan menjadi vektor ukuran input_size=43 pada setiap titik waktu. Kami juga menentukan beberapa opsi pelatihan minimal dalam pelatihan khusus pada device untuk epoch=10 .
device = torch . device ( "cuda" if torch . cuda . is_available () else "cpu" )
estimator = DeepAREstimator ( freq = "5min" ,
prediction_length = 12 ,
input_size = 19 ,
trainer = Trainer ( epochs = 10 ,
device = device ))
predictor = estimator . train ( training_data = training_data , num_workers = 4 ) 45it [00:01, 37.60it/s, avg_epoch_loss=4.64, epoch=0]
48it [00:01, 39.56it/s, avg_epoch_loss=4.2, epoch=1]
45it [00:01, 38.11it/s, avg_epoch_loss=4.1, epoch=2]
43it [00:01, 36.29it/s, avg_epoch_loss=4.05, epoch=3]
44it [00:01, 35.98it/s, avg_epoch_loss=4.03, epoch=4]
48it [00:01, 39.48it/s, avg_epoch_loss=4.01, epoch=5]
48it [00:01, 38.65it/s, avg_epoch_loss=4, epoch=6]
46it [00:01, 37.12it/s, avg_epoch_loss=3.99, epoch=7]
48it [00:01, 38.86it/s, avg_epoch_loss=3.98, epoch=8]
48it [00:01, 39.49it/s, avg_epoch_loss=3.97, epoch=9]
Selama pelatihan, informasi yang berguna tentang kemajuan akan ditampilkan. Untuk mendapatkan gambaran lengkap dari opsi yang tersedia, silakan merujuk ke kode sumber DeepAREstimator (atau estimator lainnya) dan Trainer .
Kami sekarang siap untuk membuat prediksi: kami akan memperkirakan jam setelah tengah malam pada 15 April 2015.
test_data = ListDataset (
[{ "start" : df . index [ 0 ], "target" : df . value [: "2015-04-15 00:00:00" ]}],
freq = "5min"
) for test_entry , forecast in zip ( test_data , predictor . predict ( test_data )):
to_pandas ( test_entry )[ - 60 :]. plot ( linewidth = 2 )
forecast . plot ( color = 'g' , prediction_intervals = [ 50.0 , 90.0 ])
plt . grid ( which = 'both' )
Perhatikan bahwa perkiraan ditampilkan dalam hal distribusi probabilitas: Area yang diarsir mewakili interval prediksi 50% dan 90%, masing -masing, berpusat di sekitar median (garis hijau gelap).
pip install -e .
pytest test
Untuk mengutip repositori ini:
@software{pytorchgithub,
author = {Kashif Rasul},
title = {{P}yTorch{TS}},
url = {https://github.com/zalandoresearch/pytorch-ts},
version = {0.6.x},
year = {2021},
}Kami telah mengimplementasikan model berikut menggunakan kerangka kerja ini:
@INPROCEEDINGS{rasul2020tempflow,
author = {Kashif Rasul and Abdul-Saboor Sheikh and Ingmar Schuster and Urs Bergmann and Roland Vollgraf},
title = {{M}ultivariate {P}robabilistic {T}ime {S}eries {F}orecasting via {C}onditioned {N}ormalizing {F}lows},
year = {2021},
url = {https://openreview.net/forum?id=WiGQBFuVRv},
booktitle = {International Conference on Learning Representations 2021},
}@InProceedings{pmlr-v139-rasul21a,
title = {{A}utoregressive {D}enoising {D}iffusion {M}odels for {M}ultivariate {P}robabilistic {T}ime {S}eries {F}orecasting},
author = {Rasul, Kashif and Seward, Calvin and Schuster, Ingmar and Vollgraf, Roland},
booktitle = {Proceedings of the 38th International Conference on Machine Learning},
pages = {8857--8868},
year = {2021},
editor = {Meila, Marina and Zhang, Tong},
volume = {139},
series = {Proceedings of Machine Learning Research},
month = {18--24 Jul},
publisher = {PMLR},
pdf = {http://proceedings.mlr.press/v139/rasul21a/rasul21a.pdf},
url = {http://proceedings.mlr.press/v139/rasul21a.html},
}@misc{gouttes2021probabilistic,
title={{P}robabilistic {T}ime {S}eries {F}orecasting with {I}mplicit {Q}uantile {N}etworks},
author={Adèle Gouttes and Kashif Rasul and Mateusz Koren and Johannes Stephan and Tofigh Naghibi},
year={2021},
eprint={2107.03743},
archivePrefix={arXiv},
primaryClass={cs.LG}
}