From ea2c05de7f892388ab5bf5994c4c492e588a5c3c Mon Sep 17 00:00:00 2001 From: "Dr. Kashif Rasul" Date: Wed, 11 Mar 2020 15:11:14 +0100 Subject: [PATCH] updated readme --- README.md | 87 +++++++++++++++++++++++++++++++++-- examples/images/readme_0.png | Bin 0 -> 25148 bytes examples/images/readme_1.png | Bin 0 -> 19609 bytes setup.py | 4 +- 4 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 examples/images/readme_0.png create mode 100644 examples/images/readme_1.png diff --git a/README.md b/README.md index 322ed1c..47f01f9 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,106 @@ # PyTorch-TS -PyTorch-TS is a PyTorch Probabilistic Time Series Modeling framework which provides state of the art time series models and utilities for loading and iterating over time series datasets. +PyTorch-TS is a PyTorch Probabilistic Time Series Modeling framework which provides state of the art time series models and utilities for loading and iterating over time series data sets. ## Installation ``` -$ pip3 install pytorch-ts +$ pip3 install pytorchts ``` -## Usage +## Quick start ```python +import matplotlib.pyplot as plt + import pandas as pd from pts.dataset import ListDataset +``` -url = "https://raw.githubusercontent.com/numenta/NAB/master/data/realTweets/Twitter_volume_AAPL.csv" -df = pd.read_csv(url, header=0, index_col=0) +```python +from pts.model.deepar import DeepAREstimator +from pts import Trainer +from pts.dataset import to_pandas +``` + +This simple example illustrates how to train a model from GluonTS on some data, and then use it to make predictions. As a first step, we need to collect some data: in this example we will use the volume of tweets mentioning the AMZN ticker symbol. + + +```python +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) +``` + +The first 100 data points look like follows: + + +```python +df[:100].plot(linewidth=2) +plt.grid(which='both') +plt.show() +``` + +![png](examples/images/readme_0.png) + + +We can now prepare a training dataset for our model to train on. Datasets are essentially iterable collections of dictionaries: each dictionary represents a time series with possibly associated features. For this example, we only have one entry, specified by the `"start"` field which is the timestamp of the first data point, and the `"target"` field containing time series data. For training, we will use data up to midnight on April 5th, 2015. + + +```python training_data = ListDataset( [{"start": df.index[0], "target": df.value[:"2015-04-05 00:00:00"]}], freq = "5min" ) ``` +A forecasting model is a *predictor* object. One way of obtaining predictors is by training a correspondent estimator. Instantiating an estimator requires specifying the frequency of the time series that it will handle, as well as the number of time steps to predict. In our example we're using 5 minutes data, so `req="5min"`, and we will train a model to predict the next hour, so `prediction_length=12`. The input to the model will be a vector of size `input_size=43` at each time point. We also specify some minimal training options. + + +```python +estimator = DeepAREstimator(freq="5min", prediction_length=12, input_size=43, trainer=Trainer(epochs=10)) +predictor = estimator.train(training_data=training_data) + + + 47it [00:02, 16.03it/s, avg_epoch_loss=4.69, epoch=0] + 48it [00:03, 15.55it/s, avg_epoch_loss=4.22, epoch=1] + 47it [00:02, 16.87it/s, avg_epoch_loss=4.13, epoch=2] + 49it [00:03, 15.99it/s, avg_epoch_loss=4.08, epoch=3] + 49it [00:02, 17.39it/s, avg_epoch_loss=4.04, epoch=4] + 49it [00:03, 16.07it/s, avg_epoch_loss=4.01, epoch=5] + 48it [00:03, 15.63it/s, avg_epoch_loss=4.00, epoch=6] + 47it [00:02, 15.81it/s, avg_epoch_loss=3.99, epoch=7] + 49it [00:03, 15.84it/s, avg_epoch_loss=3.98, epoch=8] + 49it [00:02, 18.14it/s, avg_epoch_loss=3.97, epoch=9] +``` + +During training, useful information about the progress will be displayed. To get a full overview of the available options, please refer to the source code of `DeepAREstimator` (or other estimators) and `Trainer`. + +We're now ready to make predictions: we will forecast the hour following the midnight on April 15th, 2015. + + +```python +test_data = ListDataset( + [{"start": df.index[0], "target": df.value[:"2015-04-15 00:00:00"]}], + freq = "5min" +) +``` + + +```python +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') +``` + +![png](examples/images/readme_1.png) + + +Note that the forecast is displayed in terms of a probability distribution: the shaded areas represent the 50% and 90% prediction intervals, respectively, centered around the median (dark green line). + + ## Development ``` diff --git a/examples/images/readme_0.png b/examples/images/readme_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4eebd912ee7f674917d48f0439682930c219b9ae GIT binary patch literal 25148 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 WDe8V-EbyiWkd~U>!>R{%FaHbP7ZK?I literal 0 HcmV?d00001 diff --git a/examples/images/readme_1.png b/examples/images/readme_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6085b2a47ba97fcce5b286fd6410d0541e02f294 GIT binary patch literal 19609 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