{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import json\n", "\n", "from gluonts.dataset.repository.datasets import get_dataset\n", "from gluonts.evaluation import Evaluator\n", "from gluonts.evaluation.backtest import make_evaluation_predictions\n", "\n", "from pts.model.deepar import DeepAREstimator\n", "from pts.modules.distribution_output import ImplicitQuantileOutput\n", "from pts import Trainer\n", "from pts.dataset.repository.datasets import dataset_recipes" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import torch" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "dataset = get_dataset(\"m5\", regenerate=False)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Recommended prediction horizon: 28\n", "Frequency of the time series: D\n" ] } ], "source": [ "print(f\"Recommended prediction horizon: {dataset.metadata.prediction_length}\")\n", "print(f\"Frequency of the time series: {dataset.metadata.freq}\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "estimator = DeepAREstimator(\n", " distr_output=ImplicitQuantileOutput(output_domain=\"Positive\"),\n", " cell_type='GRU',\n", " input_size=62,\n", " num_cells=64,\n", " num_layers=3,\n", " dropout_rate=0.2,\n", " use_feat_dynamic_real=True,\n", " use_feat_static_cat=True,\n", " cardinality=[int(cat_feat_info.cardinality) for cat_feat_info in dataset.metadata.feat_static_cat],\n", " embedding_dimension = [4, 4, 4, 4, 16],\n", " prediction_length=dataset.metadata.prediction_length,\n", " context_length=dataset.metadata.prediction_length*2,\n", " freq=dataset.metadata.freq,\n", " scaling=True,\n", " trainer=Trainer(device=device,\n", " epochs=20,\n", " learning_rate=1e-3,\n", " num_batches_per_epoch=120,\n", " batch_size=256,\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "255it [00:12, 20.38it/s]\n", "0it [00:00, ?it/s]/usr/local/anaconda3/lib/python3.8/site-packages/torch/distributions/distribution.py:44: UserWarning: does not define `arg_constraints`. Please set `arg_constraints = {}` or initialize the distribution with `validate_args=False` to turn off validation.\n", " warnings.warn(f'{self.__class__} does not define `arg_constraints`. ' +\n", "0it [00:03, ?it/s, avg_epoch_loss=0.499, epoch=0]\n", "255it [00:12, 20.62it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.373, epoch=1]\n", "255it [00:12, 20.47it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.356, epoch=2]\n", "255it [00:12, 20.37it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.349, epoch=3]\n", "255it [00:12, 20.32it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.344, epoch=4]\n", "255it [00:12, 20.27it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.342, epoch=5]\n", "255it [00:12, 20.35it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.34, epoch=6]\n", "255it [00:12, 20.70it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.339, epoch=7]\n", "255it [00:12, 20.40it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.337, epoch=8]\n", "255it [00:12, 20.06it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.337, epoch=9]\n", "255it [00:12, 20.59it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.335, epoch=10]\n", "255it [00:12, 20.42it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.335, epoch=11]\n", "255it [00:12, 20.52it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.334, epoch=12]\n", "255it [00:12, 20.46it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.333, epoch=13]\n", "255it [00:12, 20.21it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.332, epoch=14]\n", "255it [00:12, 20.65it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.332, epoch=15]\n", "255it [00:12, 20.22it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.331, epoch=16]\n", "255it [00:12, 20.36it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.331, epoch=17]\n", "255it [00:12, 20.66it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.331, epoch=18]\n", "255it [00:12, 20.24it/s]\n", "0it [00:03, ?it/s, avg_epoch_loss=0.33, epoch=19]\n" ] } ], "source": [ "predictor = estimator.train(dataset.train, num_workers=8)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "forecast_it, ts_it = make_evaluation_predictions(\n", " dataset=dataset.test, # test dataset\n", " predictor=predictor, # predictor\n", " num_samples=100, # number of sample paths we want for evaluation\n", ")" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "forecasts = list(forecast_it)\n", "tss = list(ts_it)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Running evaluation: 100%|██████████| 30490/30490 [00:01<00:00, 27259.18it/s]\n", "/home/krasul/.env/pytorch/lib/python3.8/site-packages/pandas/core/dtypes/cast.py:1672: UserWarning: Warning: converting a masked element to nan.\n", " subarr = np.array(values, dtype=dtype, copy=copy)\n" ] } ], "source": [ "evaluator = Evaluator()\n", "agg_metrics, item_metrics = evaluator(iter(tss), iter(forecasts), num_series=len(dataset.test))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\n", " \"MSE\": 4.755984111358613,\n", " \"abs_error\": 834177.9219083469,\n", " \"abs_target_sum\": 1231764.0,\n", " \"abs_target_mean\": 1.4428196598416543,\n", " \"seasonal_error\": 1.12721783493784,\n", " \"MASE\": 0.8981968607451877,\n", " \"MAPE\": 0.8099336448562378,\n", " \"sMAPE\": 1.6020707415533486,\n", " \"OWA\": NaN,\n", " \"MSIS\": 8.260408136542406,\n", " \"QuantileLoss[0.1]\": 232933.92667773535,\n", " \"Coverage[0.1]\": 0.5482148713864025,\n", " \"QuantileLoss[0.2]\": 432863.72900996683,\n", " \"Coverage[0.2]\": 0.5567293726280275,\n", " \"QuantileLoss[0.3]\": 602256.93819869,\n", " \"Coverage[0.3]\": 0.5704551843695826,\n", " \"QuantileLoss[0.4]\": 737814.7064298784,\n", " \"Coverage[0.4]\": 0.5920418872698383,\n", " \"QuantileLoss[0.5]\": 834177.922027275,\n", " \"Coverage[0.5]\": 0.6226373986787334,\n", " \"QuantileLoss[0.6]\": 884780.6868602519,\n", " \"Coverage[0.6]\": 0.6591399990629399,\n", " \"QuantileLoss[0.7]\": 876329.6622192905,\n", " \"Coverage[0.7]\": 0.7127079136016631,\n", " \"QuantileLoss[0.8]\": 791094.1399574431,\n", " \"Coverage[0.8]\": 0.7817387433819231,\n", " \"QuantileLoss[0.9]\": 586032.7896624055,\n", " \"Coverage[0.9]\": 0.8721290352809268,\n", " \"RMSE\": 2.1808218889580626,\n", " \"NRMSE\": 1.5114999813610817,\n", " \"ND\": 0.677222196710041,\n", " \"wQuantileLoss[0.1]\": 0.18910597052498315,\n", " \"wQuantileLoss[0.2]\": 0.35141774642704837,\n", " \"wQuantileLoss[0.3]\": 0.4889385776810249,\n", " \"wQuantileLoss[0.4]\": 0.5989903150521353,\n", " \"wQuantileLoss[0.5]\": 0.677222196806592,\n", " \"wQuantileLoss[0.6]\": 0.7183037390768459,\n", " \"wQuantileLoss[0.7]\": 0.711442826888341,\n", " \"wQuantileLoss[0.8]\": 0.6422448942796211,\n", " \"wQuantileLoss[0.9]\": 0.4757671028398342,\n", " \"mean_absolute_QuantileLoss\": 664253.8334492152,\n", " \"mean_wQuantileLoss\": 0.5392703743973806,\n", " \"MAE_Coverage\": 0.16756209425937085\n", "}\n" ] } ], "source": [ "print(json.dumps(agg_metrics, indent=4))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "item_metrics.plot(x='MSIS', y='MASE', kind='scatter')\n", "plt.grid(which=\"both\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 4 }