{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# How to run time series forecasting at scale with the GluonTS toolkit on Amazon SageMaker\n", "\n", "This notebook contains the notebook and training scripts for the blogpost **How to run time series forecasting at scale with GluonTS toolkit on Amazon SageMaker**\n", "\n", "In this notebook we take the example of forecasting energy usage and show you how to train and tune multiple time series models across algorithms and hyper-parameter combinations using the GluonTS toolkit on Amazon SageMaker. We will first show you how to setup GlounTS on SageMaker using the MXNet estimator, then train multiple models using SageMaker Experiments, and finally use SageMaker Debugger to monitor suboptimal training and improve training efficiencies. We will walk you through the following steps:\n", "\n", "1.\t[Prepare the time series dataset](#section1)\n", "2.\t[Create the algorithm and hyper-parameters combinatorial matrix](#section2)\n", "3.\t[Setup the GluonTS training script](#section3)\n", "4. [Setup Amazon SageMaker Experiment and Trials](#section4)\n", "5.\t[Setup the MXNet Estimator](#section5)\n", "6.\t[Train and validate models](#section6)\n", "7.\t[Evaluate metrics and select a winning candidate](#section7)\n", "8.\t[Run time series forecasts](#section8)\n", "9. [Run experiment with SageMaker Debugger enabled to auto-terminate sub-optimal training jobs](#section9)\n", "\n", "\n", "Before getting started we need to first install a few packages:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "! pip install gluonts\n", "! pip install --upgrade sagemaker\n", "! pip install sagemaker-experiments\n", "! pip install --upgrade smdebug-rulesconfig" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Prepare the time series dataset \n", "For this exercise, we use the individual household electric power consumption dataset. (Dua, D. and Karra Taniskidou, E. (2017). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.) We aggregate the usage data hourly.\n", "\n", "https://raw.githubusercontent.com/aws-samples/amazon-forecast-samples/master/notebooks/common/data/item-demand-time.csv\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "url = \"https://raw.githubusercontent.com/aws-samples/amazon-forecast-samples/master/notebooks/common/data/item-demand-time.csv\"\n", "raw_df = pd.read_csv(url, header=None, names=[\"date\", \"usage\", \"client\"])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look on the data:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateusageclient
02014-01-01 01:00:0038.349917client_12
12014-01-01 02:00:0033.582090client_12
22014-01-01 03:00:0034.411277client_12
32014-01-01 04:00:0039.800995client_12
42014-01-01 05:00:0041.044776client_12
\n", "
" ], "text/plain": [ " date usage client\n", "0 2014-01-01 01:00:00 38.349917 client_12\n", "1 2014-01-01 02:00:00 33.582090 client_12\n", "2 2014-01-01 03:00:00 34.411277 client_12\n", "3 2014-01-01 04:00:00 39.800995 client_12\n", "4 2014-01-01 05:00:00 41.044776 client_12" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw_df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define the S3 bucket and folder locations to store the test and training data. This should be within the same region as the Notebook Instance, training, and hosting. We will use the default SageMaker S3 bucket." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import boto3\n", "import sagemaker \n", "\n", "s3_client = boto3.client('s3')\n", "s3res = boto3.resource('s3')\n", "\n", "sess = sagemaker.Session()\n", "bucket = sess.default_bucket()\n", "\n", "pref = 'electricity-forecast-experiment/gluonts'\n", "s3_train_channel = \"s3://\" + bucket + \"/\" + pref + \"/train.csv\"\n", "s3_test_channel = \"s3://\" + bucket + \"/\" + pref + \"/test.csv\"\n", "print(s3_train_channel)\n", "print(s3_test_channel)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let’s divide the raw data into train and test samples and save them in their respective s3 folder locations. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "df_train = raw_df.query('date <= \"2014-31-10 11:00:00\"').copy()\n", "df_train.to_csv(\"train.csv\")\n", "s3_client.upload_file(\"train.csv\", bucket, pref+\"/train.csv\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "df_test = raw_df.query('date >= \"2014-1-11 12:00:00\"').copy()\n", "df_test.to_csv(\"test.csv\")\n", "s3_client.upload_file(\"test.csv\", bucket, pref+\"/test.csv\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Create the algorithm and hyper-parameters combinatorial matrix \n", "\n", "GluonTS comes with few pre-built models probabilistic forecasting models. Instead of simply predicting a single point estimate, probabilistic forecasting assigns a probability to every outcome. Once you select a model, you have the flexibility to configure the hyper-parameters to control the learning process. \n", "\n", "SageMaker supports bring your own model using Script mode. This allows you to leverage Amazon SageMaker prebuilt containers to train your models with the same kind of training script you would use outside of SageMaker. In this example, we use SageMaker's Apache MXNet containers to wrap \n", "\n", "In this example, we'll be training using four different models. \n", "- **DeepAR** is a supervised learning algorithm for forecasting scalar time series using recurrent neural networks (RNN). \n", "- **SFeedFwd** (Simple Feedforward) is a supervised learning algorithm where information moves in only one direction—forward—from the input nodes, through the hidden nodes (if any) and to the output nodes in the forward direction. \n", "- **LSTNet** (Long- and Short-term Time-series network) is a multivariate time series forecasting model that uses the combination of Convolution Neural Network (CNN) and the Recurrent Neural Network (RNN) to find short-term local dependency patterns among variables and them find long-term patterns for time series trends. \n", "- **Seq2Seq** (Sequence-to-sequence learning) is a method to train models to convert sequences from one domain to sequences in another domain. All these algorithms are already part of GluonTS, and we simply leverage it to quickly iterate and experiment over different models\n", "\n", "\n", "A trainer defines how a network is going to be trained. Let’s define a trainer object using pandas dataframe that has the base list of algorithms, different epochs, learning rate, and hyper-parameter combinations that we want to define for our training runs. \n", "**Note:** If you want to add more alogrithm/hyper-parameter combinations, please add them to the dataframe defined as variable `d` " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochsalgonum_batches_per_epochlearning_ratehybridizeprediction_length
050DeepAR250.001True30
150seq2seq500.001True60
\n", "
" ], "text/plain": [ " epochs algo num_batches_per_epoch learning_rate hybridize \\\n", "0 50 DeepAR 25 0.001 True \n", "1 50 seq2seq 50 0.001 True \n", "\n", " prediction_length \n", "0 30 \n", "1 60 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "d = {'epochs': [50,50], 'algo': [\"DeepAR\", \"seq2seq\"], 'num_batches_per_epoch': [25, 50], 'learning_rate':[1e-3,1e-3], 'hybridize':[True, True]}\n", "df_hps = pd.DataFrame(data=d)\n", "df_hps['prediction_length'] = [30, 60]\n", "df_hps.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use the 'product' function to derive combinations of these parameters from the base set into separate rows in the dataframe. Each row corresponds to a training job configuration that we will subsequently pass to the MXNet Estimator to run the training job.\n", "\n", "**Note** Please check your AWS account limits before you setup the product function below. The training process in the sections below will run one training job per row from this dataframe. Based on your account limit for the maximum number of concurrent training jobs, you may get an error that the limit has been exceeded. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from itertools import product\n", "\n", "prod = product(df_hps['epochs'].unique(), df_hps['algo'].unique(), df_hps['num_batches_per_epoch'].unique(), df_hps['learning_rate'].unique(), df_hps['hybridize'].unique(), df_hps['prediction_length'].unique())\n", "\n", "df_hps_combo = pd.DataFrame([list(p) for p in prod],\n", " columns=list(['epochs', 'algo', 'num_batches_per_epoch', 'learning_rate', 'hybridize', 'prediction_length']))\n", "\n", "df_hps_combo['jobnumber'] = df_hps_combo.index" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look on the different combinations. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochsalgonum_batches_per_epochlearning_ratehybridizeprediction_lengthjobnumber
050DeepAR250.001True300
150DeepAR250.001True601
250DeepAR500.001True302
350DeepAR500.001True603
450seq2seq250.001True304
550seq2seq250.001True605
650seq2seq500.001True306
750seq2seq500.001True607
\n", "
" ], "text/plain": [ " epochs algo num_batches_per_epoch learning_rate hybridize \\\n", "0 50 DeepAR 25 0.001 True \n", "1 50 DeepAR 25 0.001 True \n", "2 50 DeepAR 50 0.001 True \n", "3 50 DeepAR 50 0.001 True \n", "4 50 seq2seq 25 0.001 True \n", "5 50 seq2seq 25 0.001 True \n", "6 50 seq2seq 50 0.001 True \n", "7 50 seq2seq 50 0.001 True \n", "\n", " prediction_length jobnumber \n", "0 30 0 \n", "1 60 1 \n", "2 30 2 \n", "3 60 3 \n", "4 30 4 \n", "5 60 5 \n", "6 30 6 \n", "7 60 7 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_hps_combo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. Setup the GluonTS training script \n", "\n", "We will use a python entry script to import the necessary gluonts libraries, setup the gluonts estimators using the model packages for algorithms of interest, and pass in our algorithm and hyper-parameter preferences from the MXNet estimator we setup in the notebook. The script uses the train and test data files we uploaded to S3 to create the corresponding gluonts datasets for training and evaluation. After the completion of training, the script runs an evaluation to generate metrics, store them using the SageMaker Debugger Hook function, that we will later use to choose a winning model. For further analysis the metrics are also available via the SageMaker Trial Component analytics (please refer to Section 7 for more details). The model is then serialized for storage and future retrieval. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Let's take a look at the training script\n", "!pygmentize blog_train_algos.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. Setup a SageMaker Experiment \n", "\n", "Before create the training job, we first create a SageMaker Experiment that will allow us to track the different training jobs. We use the `smexperiments` libraray to create the experiment:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from datetime import datetime\n", "from smexperiments.experiment import Experiment\n", "\n", "sagemaker_boto_client = boto3.client(\"sagemaker\")\n", "\n", "#name of experiment\n", "timestep = datetime.now()\n", "timestep = timestep.strftime(\"%d-%m-%Y-%H-%M-%S\")\n", "experiment_name = timestep + \"-timeseries-models\"\n", "\n", "#create experiment\n", "Experiment.create(\n", " experiment_name=experiment_name, \n", " description=\"Timeseries models\", \n", " sagemaker_boto_client=sagemaker_boto_client)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For each job we define a new Trial component within that experiment:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from smexperiments.trial import Trial\n", "\n", "trial = Trial.create(\n", " experiment_name=experiment_name,\n", " sagemaker_boto_client=sagemaker_boto_client\n", ")\n", "print(trial)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we define an experiment config which is a dictionary that we pass into the `fit()` method later on. This ensures that the training job that is going to be started is associate with that experiment and trial." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "experiment_config = { \"ExperimentName\": experiment_name, \n", " \"TrialName\": trial.trial_name,\n", " \"TrialComponentDisplayName\": \"Training\"}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5. Create the MXNet Estimator \n", "\n", "MXNet training scripts could be run on Amazon SageMaker by creating an [MXNet estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/using_mxnet.html). The training job will start when the fit function on an MXNet estimator is called. We pass in a hyperparameter dictionary that takes the inputs from the algorithm and hyper-parameters combinatorial matrix." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import sagemaker\n", "from sagemaker.mxnet import MXNet\n", "\n", "mxnet_estimator = MXNet(entry_point='blog_train_algos.py',\n", " role=sagemaker.get_execution_role(),\n", " instance_type='ml.m5.large',\n", " instance_count=1,\n", " framework_version='1.7.0', \n", " py_version='py3',\n", " hyperparameters={'bucket': bucket,\n", " 'seq': trial.trial_name,\n", " 'algo': \"DeepAR\", \n", " 'freq': \"D\", \n", " 'prediction_length': 30, \n", " 'epochs': 10,\n", " 'learning_rate': 1e-3,\n", " 'hybridize': False,\n", " 'num_batches_per_epoch': 10,\n", " })" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After specifying our estimator with all the necessary hyperparameters we can train it using our training dataset. Train by invoking the train method of the estimator. We pass the location of train and test-data as well as the experiment configuration.\n", "\n", "The training algorithm returns a fitted model (or a Predictor in GluonTS parlance) that can be used to construct forecasts." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mxnet_estimator.fit({\"train\": s3_train_channel, \"test\": s3_test_channel}, \n", " experiment_config=experiment_config,\n", " wait=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6. Setup experiment with Debugger enabled to auto-terminate sub-optimal training jobs \n", "\n", "We ran a parameter sweep and created lots of different configurations. Doing so may produce parameter combinations that lead to sub-optimal models. We can use SageMaker Debugger to tune our experiment at training time. Debugger automatically captures data from the model training and provides builtin rules that check for conditions such as overfitting, vanishing gradients etc. We can then specify actions to auto-terminate training jobs ahead of time that would otherwise produce low-quality models.\n", "\n", "Some of the models in our experiment use Recurrent Neural Networks that can suffer from the vanishing gradient problem. So we select Debugger's tensor variance thats allows to specify and upper and lower bound on the gradient values. We also specify the action `StopTraining` that will stop a training job once the rule triggers.\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "from sagemaker.debugger import Rule, CollectionConfig, rule_configs\n", "\n", "actions = rule_configs.ActionList(\n", " rule_configs.StopTraining(), \n", ")\n", "\n", "rule = Rule.sagemaker(base_config=rule_configs.tensor_variance(),\n", " rule_parameters={\"min_threshold\": '0.00001',\n", " \"max_threshold\": '100000.0',\n", " \"collection_names\": 'custom_collection'},\n", " actions=actions )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Per default Debugger collects data with an interval of 500 steps. In our case, training dataset is small and our models only train for few minutes, so we can decrease the save interval. Here we create a custom collection, where we collect gradients at an interval of 5." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from sagemaker.debugger import DebuggerHookConfig, CollectionConfig\n", "\n", "debugger_hook_config = DebuggerHookConfig(\n", " collection_configs=[ \n", " CollectionConfig(\n", " name=\"custom_collection\",\n", " parameters={ \"include_regex\": \"(.*gradient)(?!.*featureembedder)(.*weight)\",\n", " \"start_step\": \"10\",\n", " \"save_interval\": \"5\"})])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we create a new experiment:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from datetime import datetime\n", "from smexperiments.experiment import Experiment\n", "from smexperiments.trial import Trial\n", "\n", "sagemaker_boto_client = boto3.client(\"sagemaker\")\n", "\n", "#name of experiment\n", "timestep = datetime.now()\n", "timestep = timestep.strftime(\"%d-%m-%Y-%H-%M-%S\")\n", "experiment_name = timestep + \"-timeseries-models\"\n", "\n", "#create experiment\n", "Experiment.create(\n", " experiment_name=experiment_name, \n", " description=\"Timeseries models\", \n", " sagemaker_boto_client=sagemaker_boto_client)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7. Train and validate models \n", "\n", "In section 5 we trained one model. Now we iterate over all possible combinations of hyperparameters and algorithms with the SageMaker Debugger rules enabled to detect problems such as vanishing gradients and terminate these training jobs.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import sagemaker\n", "from sagemaker.mxnet import MXNet\n", "\n", "for idx, row in df_hps_combo.iterrows():\n", "\n", " trial = Trial.create(\n", " experiment_name=experiment_name,\n", " sagemaker_boto_client=sagemaker_boto_client\n", " )\n", "\n", " experiment_config = { \"ExperimentName\": experiment_name, \n", " \"TrialName\": trial.trial_name,\n", " \"TrialComponentDisplayName\": \"Training\"}\n", " \n", " mxnet_estimator = MXNet(entry_point='blog_train_algos.py',\n", " role=sagemaker.get_execution_role(),\n", " instance_type='ml.m5.large',\n", " instance_count=1,\n", " framework_version='1.7.0', py_version='py3',\n", " debugger_hook_config=debugger_hook_config,\n", " rules=[rule],\n", " hyperparameters={'bucket': bucket, 'seq': trial.trial_name,\n", " 'algo': row['algo'], \n", " 'freq': \"D\", \n", " 'prediction_length': row['prediction_length'], \n", " 'epochs': row['epochs'],\n", " 'learning_rate': row['learning_rate'],\n", " 'hybridize': row['hybridize'],\n", " 'num_batches_per_epoch': row['num_batches_per_epoch']\n", " })\n", "\n", " mxnet_estimator.fit({\"train\": s3_train_channel, \"test\": s3_test_channel}, \n", " experiment_config=experiment_config,\n", " wait=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once the experiment is finished we can determine how many seconds it ran. First we define a helper function to compute the billabale seconds and how many training jobs were auto-terminated." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "import time\n", "\n", "def compute_job_statistics(df):\n", " total_cost = 0\n", " stopped = 0\n", " for name in df['sagemaker_job_name']:\n", " while sagemaker_boto_client.describe_training_job(TrainingJobName=name[1:-1])['TrainingJobStatus'] == 'InProgress':\n", " print('Experiment is still in progress')\n", " time.sleep(30)\n", " continue\n", " total_cost += sagemaker_boto_client.describe_training_job(TrainingJobName=name[1:-1])['BillableTimeInSeconds']\n", " if sagemaker_boto_client.describe_training_job(TrainingJobName=name[1:-1])['TrainingJobStatus'] == \"Stopped\":\n", " stopped += 1\n", " return stopped, total_cost" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Billable seconds for overall experiment with Debugger: 3708 seconds. Number of training jobs auto-terminated: 2\n" ] } ], "source": [ "from sagemaker.analytics import ExperimentAnalytics\n", "trial_component_analytics = ExperimentAnalytics(experiment_name=experiment_name)\n", "\n", "stopped, total_cost = compute_job_statistics(trial_component_analytics.dataframe())\n", "print(\"Billable seconds for overall experiment with Debugger:\", total_cost, \"seconds. Number of training jobs auto-terminated:\", stopped)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This setup is especially useful if you run a parameter sweep with training jobs that train for hours. In our case each job only trained for less than 10 minutes. Until the Debugger data is uploaded, fetched and downloaded into the processing job, a few minutes may pass, so the potential cost reduction will be less for smaller training jobs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8. Evaluate metrics and select a winning candidate \n", "\n", "Amazon SageMaker Studio provides an experiments browser that you can use to view lists of experiments, trials, and trial components. You can choose one of these entities to view detailed information about the entity or choose multiple entities for comparison. For more details please refer to [the documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/experiments-view-compare.html#experiments-view). Once the training jobs are running we can use the experiment view in Studio (see screenshot below) or the `ExperimentAnalytics` module to track the status of our training jobs and their metrics. \n", "![](screenshot.png)\n", "\n", "\n", "In the training script we used SageMaker Debugger's function `save_scalar` to store metrics such as MAPE, MSE, RMSE in the experiment. We can access the recorded metrics via the ExperimentAnalytics function and convert it to a Pandas dataframe.\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TrialComponentNameDisplayNameSourceArnSageMaker.ImageUriSageMaker.InstanceCountSageMaker.InstanceTypeSageMaker.VolumeSizeInGBalgobucketepochs...scalar/MAPE_GLOBAL - Avgscalar/MAPE_GLOBAL - StdDevscalar/MAPE_GLOBAL - Lastscalar/MAPE_GLOBAL - Countscalar/MSE_GLOBAL - Minscalar/MSE_GLOBAL - Maxscalar/MSE_GLOBAL - Avgscalar/MSE_GLOBAL - StdDevscalar/MSE_GLOBAL - Lastscalar/MSE_GLOBAL - Count
0mxnet-training-2021-02-12-02-45-53-493-aws-tra...Trainingarn:aws:sagemaker:us-east-1:841408598787:train...763104351884.dkr.ecr.us-east-1.amazonaws.com/m...1.0ml.m5.large30.0\"seq2seq\"\"sagemaker-us-east-1-841408598787\"50.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1mxnet-training-2021-02-12-02-45-58-635-aws-tra...Trainingarn:aws:sagemaker:us-east-1:841408598787:train...763104351884.dkr.ecr.us-east-1.amazonaws.com/m...1.0ml.m5.large30.0\"seq2seq\"\"sagemaker-us-east-1-841408598787\"50.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2mxnet-training-2021-02-12-02-45-54-132-aws-tra...Trainingarn:aws:sagemaker:us-east-1:841408598787:train...763104351884.dkr.ecr.us-east-1.amazonaws.com/m...1.0ml.m5.large30.0\"seq2seq\"\"sagemaker-us-east-1-841408598787\"50.0...0.1740170.00.1740171.0133.882625133.882625133.8826250.0133.8826251.0
3mxnet-training-2021-02-12-02-45-44-916-aws-tra...Trainingarn:aws:sagemaker:us-east-1:841408598787:train...763104351884.dkr.ecr.us-east-1.amazonaws.com/m...1.0ml.m5.large30.0\"DeepAR\"\"sagemaker-us-east-1-841408598787\"50.0...0.1967160.00.1967161.0186.979704186.979704186.9797040.0186.9797041.0
4mxnet-training-2021-02-12-02-45-50-439-aws-tra...Trainingarn:aws:sagemaker:us-east-1:841408598787:train...763104351884.dkr.ecr.us-east-1.amazonaws.com/m...1.0ml.m5.large30.0\"DeepAR\"\"sagemaker-us-east-1-841408598787\"50.0...0.2352050.00.2352051.0281.982975281.982975281.9829750.0281.9829751.0
5mxnet-training-2021-02-12-02-45-44-334-aws-tra...Trainingarn:aws:sagemaker:us-east-1:841408598787:train...763104351884.dkr.ecr.us-east-1.amazonaws.com/m...1.0ml.m5.large30.0\"DeepAR\"\"sagemaker-us-east-1-841408598787\"50.0...0.4144630.00.4144631.0614.407812614.407812614.4078120.0614.4078121.0
6mxnet-training-2021-02-12-02-45-51-083-aws-tra...Trainingarn:aws:sagemaker:us-east-1:841408598787:train...763104351884.dkr.ecr.us-east-1.amazonaws.com/m...1.0ml.m5.large30.0\"seq2seq\"\"sagemaker-us-east-1-841408598787\"50.0...0.1406080.00.1406081.088.19129288.19129288.1912920.088.1912921.0
7mxnet-training-2021-02-12-02-45-43-580-aws-tra...Trainingarn:aws:sagemaker:us-east-1:841408598787:train...763104351884.dkr.ecr.us-east-1.amazonaws.com/m...1.0ml.m5.large30.0\"DeepAR\"\"sagemaker-us-east-1-841408598787\"50.0...0.1849220.00.1849221.0170.474154170.474154170.4741540.0170.4741541.0
\n", "

8 rows × 55 columns

\n", "
" ], "text/plain": [ " TrialComponentName DisplayName \\\n", "0 mxnet-training-2021-02-12-02-45-53-493-aws-tra... Training \n", "1 mxnet-training-2021-02-12-02-45-58-635-aws-tra... Training \n", "2 mxnet-training-2021-02-12-02-45-54-132-aws-tra... Training \n", "3 mxnet-training-2021-02-12-02-45-44-916-aws-tra... Training \n", "4 mxnet-training-2021-02-12-02-45-50-439-aws-tra... Training \n", "5 mxnet-training-2021-02-12-02-45-44-334-aws-tra... Training \n", "6 mxnet-training-2021-02-12-02-45-51-083-aws-tra... Training \n", "7 mxnet-training-2021-02-12-02-45-43-580-aws-tra... Training \n", "\n", " SourceArn \\\n", "0 arn:aws:sagemaker:us-east-1:841408598787:train... \n", "1 arn:aws:sagemaker:us-east-1:841408598787:train... \n", "2 arn:aws:sagemaker:us-east-1:841408598787:train... \n", "3 arn:aws:sagemaker:us-east-1:841408598787:train... \n", "4 arn:aws:sagemaker:us-east-1:841408598787:train... \n", "5 arn:aws:sagemaker:us-east-1:841408598787:train... \n", "6 arn:aws:sagemaker:us-east-1:841408598787:train... \n", "7 arn:aws:sagemaker:us-east-1:841408598787:train... \n", "\n", " SageMaker.ImageUri SageMaker.InstanceCount \\\n", "0 763104351884.dkr.ecr.us-east-1.amazonaws.com/m... 1.0 \n", "1 763104351884.dkr.ecr.us-east-1.amazonaws.com/m... 1.0 \n", "2 763104351884.dkr.ecr.us-east-1.amazonaws.com/m... 1.0 \n", "3 763104351884.dkr.ecr.us-east-1.amazonaws.com/m... 1.0 \n", "4 763104351884.dkr.ecr.us-east-1.amazonaws.com/m... 1.0 \n", "5 763104351884.dkr.ecr.us-east-1.amazonaws.com/m... 1.0 \n", "6 763104351884.dkr.ecr.us-east-1.amazonaws.com/m... 1.0 \n", "7 763104351884.dkr.ecr.us-east-1.amazonaws.com/m... 1.0 \n", "\n", " SageMaker.InstanceType SageMaker.VolumeSizeInGB algo \\\n", "0 ml.m5.large 30.0 \"seq2seq\" \n", "1 ml.m5.large 30.0 \"seq2seq\" \n", "2 ml.m5.large 30.0 \"seq2seq\" \n", "3 ml.m5.large 30.0 \"DeepAR\" \n", "4 ml.m5.large 30.0 \"DeepAR\" \n", "5 ml.m5.large 30.0 \"DeepAR\" \n", "6 ml.m5.large 30.0 \"seq2seq\" \n", "7 ml.m5.large 30.0 \"DeepAR\" \n", "\n", " bucket epochs ... scalar/MAPE_GLOBAL - Avg \\\n", "0 \"sagemaker-us-east-1-841408598787\" 50.0 ... NaN \n", "1 \"sagemaker-us-east-1-841408598787\" 50.0 ... NaN \n", "2 \"sagemaker-us-east-1-841408598787\" 50.0 ... 0.174017 \n", "3 \"sagemaker-us-east-1-841408598787\" 50.0 ... 0.196716 \n", "4 \"sagemaker-us-east-1-841408598787\" 50.0 ... 0.235205 \n", "5 \"sagemaker-us-east-1-841408598787\" 50.0 ... 0.414463 \n", "6 \"sagemaker-us-east-1-841408598787\" 50.0 ... 0.140608 \n", "7 \"sagemaker-us-east-1-841408598787\" 50.0 ... 0.184922 \n", "\n", " scalar/MAPE_GLOBAL - StdDev scalar/MAPE_GLOBAL - Last \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 0.0 0.174017 \n", "3 0.0 0.196716 \n", "4 0.0 0.235205 \n", "5 0.0 0.414463 \n", "6 0.0 0.140608 \n", "7 0.0 0.184922 \n", "\n", " scalar/MAPE_GLOBAL - Count scalar/MSE_GLOBAL - Min \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 1.0 133.882625 \n", "3 1.0 186.979704 \n", "4 1.0 281.982975 \n", "5 1.0 614.407812 \n", "6 1.0 88.191292 \n", "7 1.0 170.474154 \n", "\n", " scalar/MSE_GLOBAL - Max scalar/MSE_GLOBAL - Avg scalar/MSE_GLOBAL - StdDev \\\n", "0 NaN NaN NaN \n", "1 NaN NaN NaN \n", "2 133.882625 133.882625 0.0 \n", "3 186.979704 186.979704 0.0 \n", "4 281.982975 281.982975 0.0 \n", "5 614.407812 614.407812 0.0 \n", "6 88.191292 88.191292 0.0 \n", "7 170.474154 170.474154 0.0 \n", "\n", " scalar/MSE_GLOBAL - Last scalar/MSE_GLOBAL - Count \n", "0 NaN NaN \n", "1 NaN NaN \n", "2 133.882625 1.0 \n", "3 186.979704 1.0 \n", "4 281.982975 1.0 \n", "5 614.407812 1.0 \n", "6 88.191292 1.0 \n", "7 170.474154 1.0 \n", "\n", "[8 rows x 55 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sagemaker.analytics import ExperimentAnalytics\n", "\n", "trial_component_analytics = ExperimentAnalytics(experiment_name=experiment_name)\n", "tc_df = trial_component_analytics.dataframe()\n", "tc_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look on the metrics and hyperparameter combinations:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Trialsepochslearning_ratehybridizenum_batches_per_epochprediction_lengthscalar/MASE_GLOBAL - Minscalar/MSE_GLOBAL - Minscalar/RMSE_GLOBAL - Minscalar/MAPE_GLOBAL - Min
0[Trial-2021-02-12-024553-wfkq]50.00.001true25.060.0NaNNaNNaNNaN
1[Trial-2021-02-12-024558-iujn]50.00.001true50.060.0NaNNaNNaNNaN
2[Trial-2021-02-12-024553-dsam]50.00.001true50.030.01.339320133.88262511.5707660.174017
3[Trial-2021-02-12-024544-rwcv]50.00.001true50.030.01.453763186.97970413.6740520.196716
4[Trial-2021-02-12-024550-vfjm]50.00.001true50.060.02.010920281.98297516.7923490.235205
5[Trial-2021-02-12-024544-pfow]50.00.001true25.060.03.382988614.40781224.7872510.414463
6[Trial-2021-02-12-024550-rigj]50.00.001true25.030.01.08768588.1912929.3910220.140608
7[Trial-2021-02-12-024543-envu]50.00.001true25.030.01.409506170.47415413.0565750.184922
\n", "
" ], "text/plain": [ " Trials epochs learning_rate hybridize \\\n", "0 [Trial-2021-02-12-024553-wfkq] 50.0 0.001 true \n", "1 [Trial-2021-02-12-024558-iujn] 50.0 0.001 true \n", "2 [Trial-2021-02-12-024553-dsam] 50.0 0.001 true \n", "3 [Trial-2021-02-12-024544-rwcv] 50.0 0.001 true \n", "4 [Trial-2021-02-12-024550-vfjm] 50.0 0.001 true \n", "5 [Trial-2021-02-12-024544-pfow] 50.0 0.001 true \n", "6 [Trial-2021-02-12-024550-rigj] 50.0 0.001 true \n", "7 [Trial-2021-02-12-024543-envu] 50.0 0.001 true \n", "\n", " num_batches_per_epoch prediction_length scalar/MASE_GLOBAL - Min \\\n", "0 25.0 60.0 NaN \n", "1 50.0 60.0 NaN \n", "2 50.0 30.0 1.339320 \n", "3 50.0 30.0 1.453763 \n", "4 50.0 60.0 2.010920 \n", "5 25.0 60.0 3.382988 \n", "6 25.0 30.0 1.087685 \n", "7 25.0 30.0 1.409506 \n", "\n", " scalar/MSE_GLOBAL - Min scalar/RMSE_GLOBAL - Min scalar/MAPE_GLOBAL - Min \n", "0 NaN NaN NaN \n", "1 NaN NaN NaN \n", "2 133.882625 11.570766 0.174017 \n", "3 186.979704 13.674052 0.196716 \n", "4 281.982975 16.792349 0.235205 \n", "5 614.407812 24.787251 0.414463 \n", "6 88.191292 9.391022 0.140608 \n", "7 170.474154 13.056575 0.184922 " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_df = tc_df[['Trials','epochs', 'learning_rate', 'hybridize', 'num_batches_per_epoch','prediction_length','scalar/MASE_GLOBAL - Min', 'scalar/MSE_GLOBAL - Min', 'scalar/RMSE_GLOBAL - Min', 'scalar/MAPE_GLOBAL - Min']]\n", "new_df " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The smallest MAPE achieved is:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.1406077684247318" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mape_min = new_df['scalar/MAPE_GLOBAL - Min'].min()\n", "mape_min" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's select the winner model:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Trialsepochslearning_ratehybridizenum_batches_per_epochprediction_lengthscalar/MASE_GLOBAL - Minscalar/MSE_GLOBAL - Minscalar/RMSE_GLOBAL - Minscalar/MAPE_GLOBAL - Min
6[Trial-2021-02-12-024550-rigj]50.00.001true25.030.01.08768588.1912929.3910220.140608
\n", "
" ], "text/plain": [ " Trials epochs learning_rate hybridize \\\n", "6 [Trial-2021-02-12-024550-rigj] 50.0 0.001 true \n", "\n", " num_batches_per_epoch prediction_length scalar/MASE_GLOBAL - Min \\\n", "6 25.0 30.0 1.087685 \n", "\n", " scalar/MSE_GLOBAL - Min scalar/RMSE_GLOBAL - Min scalar/MAPE_GLOBAL - Min \n", "6 88.191292 9.391022 0.140608 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_winner = new_df[new_df['scalar/MAPE_GLOBAL - Min'] == mape_min]\n", "if len(df_winner)!=1: #the df_winner should only content 1 model", " df_winner=df_winner.head(1)", "df_winner" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we download the winner model:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#download the champion from S3 and store it in the winner folder\n", "import os\n", "s3 = boto3.client(\"s3\")\n", "windir = \"gluonts/blog-models/\"+str(df_winner['Trials'].item()).replace(\"['\",\"\").replace(\"']\",\"\")+\"/\"\n", "\n", "def downloadDirectoryFroms3(bucket, windir):\n", " s3_resource = boto3.resource('s3')\n", " bucket = s3_resource.Bucket(bucket) \n", " for obj in bucket.objects.filter(Prefix = windir):\n", " print(obj.key)\n", " if not os.path.exists(os.path.dirname(windir)):\n", " os.makedirs(os.path.dirname(windir))\n", " bucket.download_file(obj.key, obj.key) # save to same path\n", "\n", "\n", "downloadDirectoryFroms3(bucket, windir) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9. Run time series forecasts \n", "After we have downloaded the model, we can run prediction on it. Therefore we use the predictor API from GluonTS, that takes the path to the model files:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:gluonts.mx.context:Using CPU\n" ] } ], "source": [ "# restore the predictor\n", "import pathlib\n", "from gluonts.model.predictor import Predictor\n", "\n", "path = pathlib.Path(windir) \n", "winning_predictor = Predictor.deserialize(path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we run predictions on the test dataset and visualize them:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2014-11-30 00:00:00\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABH4AAAGBCAYAAAAQSXZyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXxU9b3/8deZyb6TELKQkAUICYskrAFFVBaXFne7L7bWWr22t4ve+ui1ta3tr/d67217294u3m5qa622tii3IAkiIMg+IQkkkIQlISFk39eZOb8/DkEQJAEmmUnyfj4eeRzMnDnnEx6GTN7z/X4+hmmaiIiIiIiIiIjI2GPzdgEiIiIiIiIiIjI8FPyIiIiIiIiIiIxRCn5ERERERERERMYoBT8iIiIiIiIiImOUgh8RERERERERkTFKwY+IiIiIiIiIyBjlN5I3mzhxopmamjqStxQRERERERERGdP27dvXYJpm7MUeG1LwYxjGPwMPAgbwv6Zp/tgwjGjgz0AqcBz4kGmazZe6TmpqKnv37r2M0kVERERERERE5FIMwzjxfo8NutXLMIzZWKHPImAu8EHDMKYDTwCbTNOcDmw6898iIiIiIiIiIuIjhtLjJwvYaZpml2maTmALcBdwB/DcmXOeA+4cnhJFRERERERERORKDCX4KQauNwwjxjCMEOA2IBmIM03zFMCZ46ThK1NERERERERERC7XoD1+TNMsMQzj34E8oAM4ADiHegPDMD4PfB5gypQpV1imiIiIiIiIiIhcriGNczdN8zemac4zTfN6oAkoA04bhpEAcOZY9z7PfdY0zQWmaS6Ijb1og2kRERERERERERkGQwp+DMOYdOY4Bbgb+BPwGvDpM6d8Glg7HAWKiIiIiIiIiMiVGdI4d+CvhmHEAP3AP5mm2WwYxr8BLxuG8QBQCdw3XEWKiIiIiIiIiMjlG1LwY5rmsot8rhFY4fGKRERERERERETEI4a01UtEREREREREREYfBT8iIiIiIiIiImOUgh8RERERERERkTFKwY+IiIiIiIiIyBil4EdERERERpWKigpmzZpFZWWlt0sRERHxeQp+RERERGRU2bhxI4cOHWLLli3eLkVERMTnKfgRERERkVGloKAAgL0Fe71ciYiIiO9T8CMiIiIio4rD4QBg/4H9Xq5E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EREREZEaKCoqinnz5h3+2e12k5aWRkpKCqmpqYe/Hvn9oa9JSUmsWrWKlJQUcnJy6NOnD7169fLdyYhPVanCj6/Url2btLS0o5alpqbSrFkzZsyYwfz585k2bRpPPfUUa9eu5bHHHmPAgAFMnTqV7du3c8455wBgrT3u8a21DB48mA8//LCiT0VERERERERqIJfLRd26dalbt26Z9isoKCAgIECDOjtYlSr8nKpnTkUJDw+nQYMGfPPNNwwaNIjU1FRmzpzJqFGj2LVrFwMGDKB///5MnjyZ7OxsMjIyaNSoEQDvv//+4eP079+fKVOmMGDAANatW8fq1asBz6Bcd911F1u2bKFly5bk5uaSlJRE69atfXG6IiIiIiIi4hBBQUG+DkF8TLN6eU2cOJGnn36arl27MnDgQJ544gkaN27MiBEj6NSpE926deO+++4jKiqKBx98kL/97W/069eP4uLiw8e48847SU5OpnPnzjz//PN07tyZWrVqERsby/vvv88111xD586dSUhIYMOGDT48WxERERERERFxAnOi25MqQs+ePe3SpUuPWrZ+/XratWtXaTFUpOLiYtxuN8HBwWzdupVBgwaxadMmAgMDS7V/TfpdiIiIiIiIiEjlMMYss9b2PN66KnWrV3WXm5vLgAEDcLvdWGt54403Sl30EREREREREREpbyr8lKOIiAh+36NJRERERERERMRXNMaPiIiIiIiIiEgNVSUKP5U5zlBVpd+BiIiIiIiIiJQ3nxd+goODSUlJcXThw1pLSkoKwcHBvg5FRERERERERGoQn4/xExcXR1JSEsnJyb4OxaeCg4OJi4vzdRgiIiIiIiIiUoP4vPDjcrlo1qyZr8MQEREREREREalxfH6rl4iIiIiIiIiIVAwVfkREREREREREaigVfkREREREREREaihTmbNpGWOSgR2V9oAVpw5w0NdBSIVTnp1DuXYG5Vl8QdedMyjPzqFcO4dyLdVNE2tt7PFWVGrhp6Ywxiy11vb0dRxSsZRn51CunUF5Fl/QdecMyrNzKNfOoVxLTaJbvUREREREREREaigVfkREREREREREaigVfk7PeF8HIJVCeXYO5doZlGfxBV13zqA8O4dy7RzKtdQYGuNHRERERERERKSGUo8fEREREREREZEaSoUfEREREREREZEaSoUfkUpkjGlkjAn0fm98HY9UDGPM5caYaF/HIRXPGBNxxPd6TotIuVGbwRnUZnAOtRnEl1T48SFjzC3GmNeNMS18HYtULGPM1caYNcBLwCQAqwG2ahxjzAhjzCKgP5Dv63ik4nhzvQx4xRjzEug5LRVLbQbnUJvBGdRmcA61GaQqCPB1AE7jre76AVcADwJ7gTOMMbuttXrRr4GMMb2AUcCt1tqFxpj1xpju1trlvo5Nyof3eX0j8DbQ11r7s28jkorgzbMLuAO4HLgH2Al8Y4yZb62daowxasxJeVGbwXnUZqj51GZwBrUZpKpRj59KZIwJth7FwHLgDOAN4CygnU+Dk3JljAk+4sdmwI/eBlw9YA2Q7pvIpCJ437SXAB8CBcYYP2PMDcYYPa9rCGNMkPf1uxDPc/hKa+1Ca20Snule24A+wZPyozaDc6jN4CxqM9R8ajNIVaTCTyUxxvwdmGmMuccY08Fau9lamwp8ChjgTN3fWzMcket7jTFNgFVAE2PMJ3je6A3wtjHmee/2use3GjLG/MMYc9ERi7YAs4CvgJVAH+BdY8xz3u31eltNGWP+BnxujBlljGltrf0GSD4ipz2APb6LUGoatRmcQ20GZ1CbwTnUZpCqSi8qlcAY82fgXOAhIBZ4xhjTFMBa6wY+w/Mi0P13++nNvZr5Xa7rAK8A6dbaq4DNwN+ttVcANwHXG2MaqdpfvRhjYowx44F7gWeNMS4A720X3wFvAonW2tuBkcCNxpiG1toSnwUtp8UY08wY8y3QARgLtAZuMcZE/O55a4AVv9tXr99yWtRmcA61GWo+tRmcQ20GqepU+Klg3idyPPC69x7ef+Hp8vfsoW2stbOB7UAnY8xFxpi7vMv15l6NnCTXL3k3CQPWAVhrfwUW4nlTkOolB/jCWhsN7AbuP2LdHuB5a+1WAGvtFjx5blLpUUp5SAW+staOsNZ+B0wDGgJu7335JcYz406ctXaVMaarMeZO0Ou3nB61GZxDbQbHUJvBOdRmkCpNhZ8KdsQT+Xrvz9nAy0ALY8w5R2w6E3gEmAAEVmaMUj5OkOtxQEtjTAfgAPCYMeY8Y8xYoBGeRp5UI9baAmC+98cn8Hya08C7rsT7iTzGmBBjzDggBm/jXaoPbyMtA89r8iFr8fyh5jri+d4LCDPGjAHeQe+rUkrH+4RXbYaaqQy5VpuhGjtBntVmqIF+n2u1GaQ60MVWgY54URgDNDfGnOX9OQX4ADjPu10snk96pgMtrbUv/f5YUrWdIteTgUTgeeBb4HbvukHW2uRKDVTKhbU22/smvwT4HnjqyPXeP9C+8f54kbcxINXIoUaatTbriMVnALt+t6wh0NL7/ZnW2n9XUohS/R3+w8F4eX9Um6HmKUuu1Waovo7K86Hv1WaokY7KtdoMUh1oOvdyYIxJBHpYax87zroAa22BMeZ14AXgDG9Xv2I8b/AAmXju7035/f5StZxmrgvxVPuLgJeNMW9ZTcNbpZ0oz96GnPHee+8PFAEPAz8YY1rhGaMhB88MPFdaa3dXbuRSVqXJtfe5XYSn+/1K7/p+wA489+l3tdZuq+TQpZoyxlwI3AZsNcZMs9bOs9ZaY4y/9w8ItRlqiNPMtdoM1cxJ8uwHnp49qM1QI5Qm12ozSFWlHj9/gPFMv3gzngG8HjbGnHnkeutRZIxp4K3o5hhjxhhj+gND8f7+rbUFasBVbeWQa3vEtmrAVVGlzHOJt5t2oHdZMp6ZOTbimWo5yFqbqQZc1VbGXB+aarkpEGk8A3U+CURaz2xLasDJKRljXMaY/8Nz7byJZ4rua4wxvQGstcVqM9QM5ZBrtRmqgVLkuURthpqhjLlWm0GqJBV+/gBvBX8z0A24E/jnkeu9n+j8C/jMeGbkuBnPgIzPAPOttS9UZrxy+pRrZyhDnj8GOnh77F+Mp6H+sLW2q7crt1RxZcx1G2NMBHAFcCWw1lo72FqrcRik1LxjeWwCrrHWfo1nfIcooBg8vUb1PlIzKNfOUIY8q81QzZUx12ozSJWkW73KyBhzBZ77NX/2LlrofTGYYIy51Rhzk7X2He+6lnh+xxdZa9O8y940xrxrrS2s5NCljJRrZzjNPF96KM/GmI14uu3qnvwqrhxy/RQwRb0tpLSOc829BxQZYwKttbu9fxzU8a5rgd5Hqi3l2hlOM89qM1RD5ZBrtRmkSjFWs8eVijGmLvAJ0ApYDFzu7dJ35DgQF+C5baD/EW/kh/b3t9YWV3rgUmbKtTOUQ54P3cMtVVw55DpQf4xJWZzkmvPz9jbDGBMNfApcZ63d97v99T5STSjXzlAOeVaboZooh1yrzSBVkm71KiVr7QHgS2AIsBfPwF7w2x8Nxtv1bz1wqzEmwhhzFRwe7V1v6tWEcu0M5ZBnNeCqiXLItRpwUiYnueaO/LStMZBhrd1njIkzxgwCvY9UN8q1M5RDntVmqCbKIddqM0iVpMJPKRjvSO3Aq8A6YDZwkfEMylfiXX9om4eA5/CMHVEPfpsWWKo+5doZlGfnUK6lsp3imrPGmEO32ccB/saYe4AZQH3QNVedKNfOoDw7h3ItNZkKP8dhjKnl/eoPhwcBxVrr9lbsFwIbgHsPrbfWFhtjWuAZof8LoLu19lVfxC+lp1w7g/LsHMq1VLbTuOYOffI/GLgEz3hSF1prP6jk0KWMlGtnUJ6dQ7kWJ9EYP17eCm84MBlIsdbecMQ6A79Vcb0vDv2A0XheCPKBQsAA9ay1myo3eikL5doZlGfnUK6lsv3Ba85trd1vjEkAwq21cys7fik95doZlGfnUK7FqdTjx8tb4c0CAoFGxpir4fBgbNbbvS/IGBNkrS221s4H1gJrgB/w/MGQoT8aqj7l2hmUZ+dQrqWy/cFrbp4xppW1dpH+aKj6lGtnUJ6dQ7kWp1Lh52htgWTgZeA6Y0zEoS59xph/AG8DDbw/345nsK+3gM7W2s2+CVlOk3LtDMqzcyjXUtl0zTmHcu0MyrNzKNfiOAGn3qRm8nbRS7XWbjLGGG+Xvi14uvxvA34FbjTGTAPi8Uzp95i1drv3EFuAvtbaLZUfvZSFcu0MyrNzKNdS2XTNOYdy7QzKs3Mo1yIejuvxY4yJMsbMAOYAVxljwrwvAAA9gUxr7Vo8XfoeB/4NrLDWXmut3Wp+G/xrrl4Aqjbl2hmUZ+dQrqWy6ZpzDuXaGZRn51CuRY7muMIPEAbMAu7xfn/WEet2AhHGmI+BB4HlwBZrbTZ4BgOz1hZXcrxy+pRrZ1CenUO5lsqma845lGtnUJ6dQ7kWOYIjCj/GmOuNMWcbYyKttbuB8cAUPLO5nGGMaejdNBqIBfYB3YDbgTbGmHbw2xR/UnUp186gPDuHci2VTdeccyjXzqA8O4dyLXJiNXY6d2OMAerjmaqvBNiKp9o7ylp70LtNP+AqYKm1dpJ3WZ0j1ocDgdbaVB+cgpSScu0MyrNzKNdS2XTNOYdy7QzKs3Mo1yKlUyN7/Bhj/L33cEYAu621g4A7gVQ8lV8ArLU/AtvxVHhree/9PGiM8fd28cvWC0DVplw7g/LsHMq1VDZdc86hXDuD8uwcyrVI6dWowo8xJsAY8yzwrDHmbKANUAxgPVP03Qv08a47ZAIQjmfgr23GmIbW2mJ18avalGtnUJ6dQ7mWyqZrzjmUa2dQnp1DuRYpuxpT+PE+sZfhuWdzC/AU4AYGGGN6A3grwv8Enjxi14vwVIZXAp2stXsqMWw5Dcq1MyjPzqFcS2XTNeccyrUzKM/OoVyLnJ4AXwdQjkqAsUfct9kNaIZner43gB7GGD9gKp4XhqbW2u14Bvs611o73zdhy2lQrp1BeXYO5Voqm64551CunUF5dg7lWuQ01JgeP3gqv1OMMf7en38EGltr3wf8jTH3eLvyxQHF3hcArLVf6gWg2lGunUF5dg7lWiqbrjnnUK6dQXl2DuVa5DTUmMKPtTbXWltgrS32LhoMJHu//xPQzhjzFfAhsBwOjwIv1Yxy7QzKs3Mo11LZdM05h3LtDMqzcyjXIqenJt3qBXhGdwcsUA+Y5l2cBTwCdAR+tdbuhsP3f0o1pVw7g/LsHMq1VDZdc86hXDuD8uwcyrVI2dSYHj9HKAFcwEGgs7fi+xhQYq1dcOgFQGoE5doZlGfnUK6lsumacw7l2hmUZ+dQrkXKwNTEAqgxJgFY6P3/nrX2HR+HJBVEuXYG5dk5lGupbLrmnEO5dgbl2TmUa5HSq6mFnzhgJPCitbbA1/FIxVGunUF5dg7lWiqbrjnnUK6dQXl2DuVapPRqZOFHRERERERERERq5hg/IiIiIiIiIiKCCj8iIiIiIiIiIjWWCj8iIiIiIiIiIjWUCj8iIiIiIiIiIjWUCj8iIiIiIiIiIjWUCj8iIiIiIiIiIjWUCj8iIiIiIiIiIjWUCj8iIiIiIiIiIjXU/wP3Rx7w6J9m1AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from gluonts.dataset.common import ListDataset\n", "plt.rcParams['figure.figsize'] = (20.0, 6.0)\n", "\n", "# run forecast\n", "startdate = '2014-11-01 01:00:00'\n", "test_pred = ListDataset(\n", " [{\"start\": startdate, \"target\": raw_df.query('date >= \"2014-11-01 01:00:00\" and client == \"client_12\"').copy()['usage'], \"item_id\": 'client_12'}],\n", " freq = \"1H\"\n", ")\n", "\n", "pred = winning_predictor.predict(test_pred)\n", "for test_entry, forecast in zip(test_pred, pred):\n", " print(forecast.start_date)\n", " plt.plot(pd.date_range(start=startdate, periods=30), pd.DataFrame.from_dict(test_entry['target'])[0][:30],color='b')\n", " plt.plot(pd.date_range(start=forecast.start_date, periods=df_winner['prediction_length'].item()), forecast.quantile(.3), color='r') #samples contain all 100 quantiles\n", " plt.plot(pd.date_range(start=forecast.start_date, periods=df_winner['prediction_length'].item()), forecast.quantile(.5), color='b') #samples contain all 100 quantiles\n", " plt.plot(pd.date_range(start=forecast.start_date, periods=df_winner['prediction_length'].item()), forecast.quantile(.7), color='k') #samples contain all 100 quantiles\n", " x=pd.date_range(start=forecast.start_date, periods=df_winner['prediction_length'].item()) #samples contain all 100 quantiles\n", " y=forecast.quantile(.1) \n", " z=forecast.quantile(.9)\n", " plt.fill_between(x,y,z,color='g', alpha=0.3)\n", "plt.xticks(rotation=30)\n", "plt.legend(['Usage'], loc = 'lower left')\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With Amazon SageMaker we saw how easy it is for every developer and data scientist to setup time series forecasting at scale using the MXNet Estimator with the GluonTS toolkit. Amazon SageMaker removes the undifferentiated heavy lifting from every step of our ML process, automates infrastructure management, enables us to improve the training efficiency with SageMaker Debugger, and accelerates adoption of ML workflows from months to days. Please try out the notebook (https://a2i-experiments.notebook.us-east-1.sagemaker.aws/notebooks/gluonTS/rauscn/blog-gluonts-toolkit-on-sagemaker-PR.ipynb) from our post and let us know your comments and feedback." ] } ], "metadata": { "kernelspec": { "display_name": "conda_mxnet_p36", "language": "python", "name": "conda_mxnet_p36" }, "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.6.10" } }, "nbformat": 4, "nbformat_minor": 4 }