{ "cells": [ { "cell_type": "markdown", "id": "e2dba652", "metadata": {}, "source": [ "***\n", "# Building a Forecaster using AutoMLx\n", "

by the Oracle AutoMLx Team

\n", "\n", "***" ] }, { "cell_type": "markdown", "id": "72e85a5a", "metadata": {}, "source": [ "Forecasting Demo notebook.\n", "\n", "Copyright © 2025, Oracle and/or its affiliates.\n", "\n", "Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/" ] }, { "cell_type": "markdown", "id": "10766224", "metadata": {}, "source": [ "## Overview of this Notebook\n", "\n", "In this notebook we will build a forecaster using the Oracle AutoMLx tool for three real-world datasets. We explore the various options available in the Oracle AutoMLx Forecasting module, allowing the user to control the AutoML training process. We finally evaluate the forecasting algorithms using in-built visualization tools. Finally, we provide an overview of the capabilities that Oracle AutoMLx offers for explaining the predictions of the tuned model.\n", "\n", "---\n", "## Prerequisites\n", "\n", " - Experience level: Novice (Python and Machine Learning)\n", " - Professional experience: Some industry experience\n", "---\n", "\n", "## Business Use\n", "\n", "Forecasting uses historical time series data as input to make informed estimates of future trends. Learning an accurate forecasting model requires expertise in data science and statistics. This process typically comprises of:\n", "- Preprocess dataset (clean, impute, engineer features, normalize).\n", "- Pick an appropriate model for the given dataset and prediction task at hand.\n", "- Tune the chosen model’s hyperparameters for the given dataset.\n", "\n", "These steps are significantly time consuming and heavily rely on data scientist expertise. Unfortunately, to make this problem harder, the best feature subset, model, and hyperparameter choice widely varies with the dataset and the prediction task. Hence, there is no one-size-fits-all solution to achieve reasonably good model performance. Using a simple Python API, AutoML can quickly jump-start the datascience process with an accurately-tuned model and appropriate features for a given prediction task.\n", "\n", "## Table of Contents\n", "\n", "- Setup\n", "- Load the M4 Forecasting Competition dataset\n", "- Univariate time series (single-target forecasting)\n", " - Split data into train and test for the forecasting task\n", " - Setting the execution engine\n", " - Create an instance of Oracle AutoMLx\n", " - Train a forecasting model using AutoMLx\n", " - Generate and visualize forecasts\n", " - Analyze the AutoML optimization process\n", " - Algorithm Selection\n", " - Hyperparameter Tuning\n", "- Multivariate time series\n", " - Single-target Forecasting with Exogenous Variables\n", " - Multi-target Forecasting with Exogenous Variables\n", " - Advanced AutoML Configuration\n", " - Train a model using Oracle AutoMLx\n", " - Specify the number of cross-validation (CV) folds\n", " - Make predictions\n", " - Visualization\n", "- Machine Learning Explainability (MLX)\n", " - Initialize an MLExplainer\n", " - Prediction Explanations (Comparative Feature Importance)\n", "- References" ] }, { "cell_type": "markdown", "id": "4f8cd973", "metadata": {}, "source": [ "\n", "## Setup\n", "\n", "Basic setup for the Notebook." ] }, { "cell_type": "code", "execution_count": 1, "id": "0ee2deb5", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:42.269625Z", "iopub.status.busy": "2025-04-25T10:13:42.269212Z", "iopub.status.idle": "2025-04-25T10:13:42.802212Z", "shell.execute_reply": "2025-04-25T10:13:42.801679Z" } }, "outputs": [], "source": [ "%matplotlib inline\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "id": "bf19498b", "metadata": { "lines_to_next_cell": 0 }, "source": [ "Load the required modules." ] }, { "cell_type": "code", "execution_count": 2, "id": "7f98170e", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:42.804699Z", "iopub.status.busy": "2025-04-25T10:13:42.804220Z", "iopub.status.idle": "2025-04-25T10:13:48.150979Z", "shell.execute_reply": "2025-04-25T10:13:48.150414Z" } }, "outputs": [], "source": [ "import datetime\n", "import time\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "\n", "try:\n", " from sktime.forecasting.model_selection import temporal_train_test_split\n", "except ImportError:\n", " try:\n", " from sktime.split import TemporalTrainTestSplitter as temporal_train_test_split\n", " except ImportError as e:\n", " raise ImportError(\"Failed to import Splitters from sktime. \"\n", " \"Please ensure you have the correct version of sktime installed.\") from e\n", "\n", "plt.rcParams[\"figure.figsize\"] = [15, 5]\n", "plt.rcParams[\"font.size\"] = 15\n", "\n", "import automlx\n", "from automlx import init" ] }, { "cell_type": "markdown", "id": "7909aaa6", "metadata": {}, "source": [ "\n", "### Load the M4 Forecasting Competition dataset\n", "\n", "\n", "We fetch the series from the repository of the [M4 forecasting competition](https://mofc.unic.ac.cy/m4/) to use throughout this demo." ] }, { "cell_type": "code", "execution_count": 3, "id": "e6b68f77", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:48.153400Z", "iopub.status.busy": "2025-04-25T10:13:48.152987Z", "iopub.status.idle": "2025-04-25T10:13:50.716740Z", "shell.execute_reply": "2025-04-25T10:13:50.716027Z" } }, "outputs": [], "source": [ "! wget https://github.com/Mcompetitions/M4-methods/raw/master/Dataset/Train/Weekly-train.csv -q\n", "! wget https://github.com/Mcompetitions/M4-methods/raw/master/Dataset/M4-info.csv -q" ] }, { "cell_type": "code", "execution_count": 4, "id": "90c3c3a0", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:50.719199Z", "iopub.status.busy": "2025-04-25T10:13:50.718731Z", "iopub.status.idle": "2025-04-25T10:13:50.926656Z", "shell.execute_reply": "2025-04-25T10:13:50.926090Z" } }, "outputs": [], "source": [ "\n", "all_series = pd.read_csv(\"Weekly-train.csv\", index_col=0) # consists of thousands of series\n", "metadata_csv = pd.read_csv(\"M4-info.csv\", index_col=0) # describes their datetime index" ] }, { "cell_type": "markdown", "id": "2465a691", "metadata": {}, "source": [ "\n", "# Univariate time series (single-target forecasting)\n", "The Oracle AutoMLx solution for forecasting can process both univariate (where only a single time series is available) and multivariate time series (where multiple time series are available). We start by displaying an example of use for univariate time series, and will address multivariate data at the end of this notebook.
" ] }, { "cell_type": "markdown", "id": "150ada09", "metadata": {}, "source": [ "We select one time series from the finance sector with weekly collection frequency. M4 dataset requires additional preprocessing to reconstruct the time series." ] }, { "cell_type": "code", "execution_count": 5, "id": "c2ec1d8b", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:50.929099Z", "iopub.status.busy": "2025-04-25T10:13:50.928731Z", "iopub.status.idle": "2025-04-25T10:13:50.974262Z", "shell.execute_reply": "2025-04-25T10:13:50.973751Z" } }, "outputs": [], "source": [ "series_id = \"W142\"\n", "series_metadata = metadata_csv.loc[series_id]\n", "series_values = all_series.loc[series_id]\n", "\n", "# drop NaNs for the time period where data wasn't recorded\n", "series_values.dropna(inplace=True)\n", "\n", "# retrieve starting date of recording and series length to generate the datetime index\n", "start_date = pd.to_datetime(series_metadata.StartingDate)\n", "future_dates = pd.date_range(start=start_date, periods=len(series_values), freq=\"W\")\n", "y = pd.DataFrame(\n", " series_values.to_numpy(),\n", " index=future_dates,\n", " columns=[(series_metadata.category + \"_\" + series_id)],\n", ")" ] }, { "cell_type": "markdown", "id": "247177a2", "metadata": {}, "source": [ "We can now visualize the last 200 weeks of data we have on hand." ] }, { "cell_type": "code", "execution_count": 6, "id": "487fd050", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:50.976301Z", "iopub.status.busy": "2025-04-25T10:13:50.975886Z", "iopub.status.idle": "2025-04-25T10:13:51.265606Z", "shell.execute_reply": "2025-04-25T10:13:51.265073Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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vH5dD1ycDKw9nMb6o+mXPCf9bAH7k3MAGKrGGSI2qVbFXl2aPn063t7l19W3bNmy3GMPP/wwb7/9Nh4eHkyYMIH8/HxWrFjB8uXLmTt3Ltdcc025c3788UduuOEGzGYzI0aMICgoiFWrVnH77beze/du3njjjXLnHD16lMGDB5Oenk63bt0YPnw4sbGxvPTSS6xatYpVq1bh5uZml+cvIiIiIo7z2/56Phgv0RH3Yi38PRjSLpANx87wScwJ/jqla22GKFInTmfnk1dYhLebM56uTni5Otv8M1GRD9cdZ/n+FACu7BFG31a27b9Wme9j4yksNtO9pR89I/wBa/XYOzf15pHxUfyyO4njaXkcT8/jRHoe2edNnC0oItDLlWev6sw1vVpq2WctaRXoxc0DW/HZhjheW3KAn/88rNK5U5L469LclyBvvacWsUWNEnvLly/nvffeY8uWLaSnp3PLLbfwySefALBs2TKWLVvGY489RosW1d+f4I033qB169aXHbdy5UrefvttAgMD2bhxIx06dABg48aNjBo1ijvvvJNRo0bh7+9fek5GRgZ33XUXxcXF/Pjjj1x77bUApKSkMGzYMN58802uuuoqRo0aVeZed9xxB+np6Tz00EO8/fbbABQVFXH99dczf/58XnvtNV544YVqP2cRERERqR9KEntRVdzA/d6R7dhw7AzfbonnwTEdCPByrY3wRGqd2WzhjeWHmL2mfENET1cnBrcN5INb++LsZPtisNPZ+bx30fX+++tR5tx5+SWal4rxf5uty3BvGRRZ7njrIC8eGNOhzGOZeYUkZp2ndZAX3m71vt6lwXtwTHvmbktgb2IOC3cncXWv8oU6oGW4ItVR7aW4s2bN4oorruCnn34iNzcXk8lUppV18+bNeeutt/juu+/sEujl/Otf/wLg2WefLU3qAQwePJh7772XrKys0qRjiY8//picnByuvvrq0qQeQGhoKK+//joAb775ZplztmzZwvr16wkJCSkdA+Ds7Mx7772Hi4sL77zzDkVFRXZ/jiIiIiJSt0oSex3DbNtfr8TwDkF0beHLeVMxn2+Iq4XIRGpfvqmYB7/ZUZrU83F35uJCq3OFxaw6mMqH0cerdN3Xlx7kvKmYqFBvjAZYfSiNvYnZ1Y5z3ZE0TmWcw8fd2eamF828XOnW0k9JvToS6O3GvSPbAvDG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IiIixLvvviskSRKTJk0q93mp4WKckFyMFZKDcUJyMVZIDsYJycVYITkYJ0Q1j4m9Onbjxg0hSZLo3r27yM/PN2zXd0Tp6eli/PjxwtTUVEiSJNzd3YWDg4OQJEl07dpVnD9/3lhNpzrEOCG5GCskB+OE5GKskByME5KLsUJyME6I7o/K2FOBm5qzZ88CALp27QozMzPD2gKSJEGn08HOzg5ff/01Ro0ahdWrVyMtLQ0ajQYjR47ErFmzjNx6qiuME5KLsUJyME5ILsYKycE4IbkYKyQH44To/jCxV0f0ndP58+cBAJ06dQJQsuinQlFSw0T/X0tLS4wYMQIjRoxAXl4elEqlYVFQatwYJyQXY4XkYJyQXIwVkoNxQnIxVkgOxglRzWBV3Dqi75AOHToEpVKJtm3bAgDUajUAIC4uDteuXQMAiJIp0gAAc3NzdlhNCOOE5GKskByME5KLsUJyME5ILsYKycE4IaoZktD/66Bal5KSAj8/P9jb2yM6OhpASenvbdu2YfHixcjIyMDx48dhbW1t5JaSMTFOSC7GCsnBOCG5GCskB+OE5GKskByME6L7x6m4dSg8PBx5eXl4+umnAQB79uzBmjVrsGbNGhQVFWHatGnssIhxQrIxVkgOxgnJxVghORgnJBdjheRgnBDdPyb26oAQApIkISwsDMXFxcjLy8MHH3yA77//HgkJCRgxYgSWLl0KT09PYzeVjIhxQnIxVkgOxgnJxVghORgnJBdjheRgnBDVHCb26oAkSQCAo0ePAgAOHjyIX375Be3atcMvv/yCgQMHGrN5VE8wTkguxgrJwTghuRgrJAfjhORirJAcjBOimsPEXh3RaDTQ6XQAgJycHCxbtgzTpk0zcquovmGckFyMFZKDcUJyMVZIDsYJycVYITkYJ0Q1g8Uz6tDvv/+OyMhIvP7666ziQxVinJBcjBWSg3FCcjFWSA7GCcnFWCE5GCdE94+JvTqkX0eA6F4YJyQXY4XkYJyQXIwVkoNxQnIxVkgOxgnR/WNij4iIiIiIiIiIqAFSGLsBREREREREREREVHVM7BERERERERERETVATOwRERERERERERE1QEzsERERERERERERNUBM7BERERERERERETVATOwRERERERERERE1QEzsERERERERERERNUBM7BERERERERERETVATOwRERERERERERE1QEzsERERERERERERNUBM7BERERERERERETVA/w8vbQ8AZpenhgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y = y.tail(n=200) # approximately 4 years of data\n", "y.plot(ylabel=\"Weekly Series \" + series_id, grid=True)" ] }, { "cell_type": "markdown", "id": "1ea52a15", "metadata": {}, "source": [ "One must ensure that the data points are in a Pandas DataFrame, sorted in chronological order." ] }, { "cell_type": "code", "execution_count": 7, "id": "abf33df9", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:51.267650Z", "iopub.status.busy": "2025-04-25T10:13:51.267225Z", "iopub.status.idle": "2025-04-25T10:13:51.293566Z", "shell.execute_reply": "2025-04-25T10:13:51.293077Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DatetimeIndex(['2012-12-09 12:00:00', '2012-12-16 12:00:00',\n", " '2012-12-23 12:00:00', '2012-12-30 12:00:00',\n", " '2013-01-06 12:00:00', '2013-01-13 12:00:00',\n", " '2013-01-20 12:00:00', '2013-01-27 12:00:00',\n", " '2013-02-03 12:00:00', '2013-02-10 12:00:00',\n", " ...\n", " '2016-07-31 12:00:00', '2016-08-07 12:00:00',\n", " '2016-08-14 12:00:00', '2016-08-21 12:00:00',\n", " '2016-08-28 12:00:00', '2016-09-04 12:00:00',\n", " '2016-09-11 12:00:00', '2016-09-18 12:00:00',\n", " '2016-09-25 12:00:00', '2016-10-02 12:00:00'],\n", " dtype='datetime64[ns]', length=200, freq='W-SUN')\n", "Time Index is monotonic.\n", "Train datatype \n" ] } ], "source": [ "print(y.index)\n", "print(\"Time Index is\", \"\" if y.index.is_monotonic_increasing else \"NOT\", \"monotonic.\")\n", "print(\"Train datatype\", type(y))" ] }, { "cell_type": "markdown", "id": "49654a93", "metadata": {}, "source": [ "\n", "### Split data into train and test for the forecasting task\n", "As can be seen above, the data contains 100 weekly recorded values over the past 4 years. We will try to predict electricity consumption for the last 0.5 year of data (26 data points), using the previous years as training data. Hence, we separate the dataset into training and testing sets using Temporal train-test split, which ensures that the continuity of the input time series is preserved. Each point in the series represents a month, so we will hold out the last 26 points as test data." ] }, { "cell_type": "code", "execution_count": 8, "id": "2b84708b", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:51.295363Z", "iopub.status.busy": "2025-04-25T10:13:51.294960Z", "iopub.status.idle": "2025-04-25T10:13:51.319238Z", "shell.execute_reply": "2025-04-25T10:13:51.318736Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training length: 174 Testing length: 26\n" ] } ], "source": [ "y_train, y_test = temporal_train_test_split(y, test_size=26)\n", "print(\"Training length: \", len(y_train), \" Testing length: \", len(y_test))" ] }, { "cell_type": "code", "execution_count": 9, "id": "0c1c51b0", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:51.320902Z", "iopub.status.busy": "2025-04-25T10:13:51.320598Z", "iopub.status.idle": "2025-04-25T10:13:51.354938Z", "shell.execute_reply": "2025-04-25T10:13:51.354471Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "y_train Finance_W142\n", "2012-12-09 12:00:00 4793.269\n", "2012-12-16 12:00:00 4818.969\n", "2012-12-23 12:00:00 4863.783\n", "2012-12-30 12:00:00 4926.357\n", "2013-01-06 12:00:00 4916.616\n", "... ...\n", "2016-03-06 12:00:00 5024.759\n", "2016-03-13 12:00:00 5021.153\n", "2016-03-20 12:00:00 4996.524\n", "2016-03-27 12:00:00 5004.032\n", "2016-04-03 12:00:00 5053.536\n", "\n", "[174 rows x 1 columns]\n", "\n", "y_test Finance_W142\n", "2016-04-10 12:00:00 5039.544\n", "2016-04-17 12:00:00 5053.420\n", "2016-04-24 12:00:00 5066.860\n", "2016-05-01 12:00:00 5099.887\n", "2016-05-08 12:00:00 5082.291\n", "2016-05-15 12:00:00 5084.340\n", "2016-05-22 12:00:00 5081.651\n", "2016-05-29 12:00:00 5106.797\n", "2016-06-05 12:00:00 5147.906\n", "2016-06-12 12:00:00 5140.993\n", "2016-06-19 12:00:00 5153.210\n", "2016-06-26 12:00:00 5258.369\n", "2016-07-03 12:00:00 5307.455\n", "2016-07-10 12:00:00 5295.631\n", "2016-07-17 12:00:00 5300.088\n", "2016-07-24 12:00:00 5295.456\n", "2016-07-31 12:00:00 5333.739\n", "2016-08-07 12:00:00 5338.803\n", "2016-08-14 12:00:00 5339.390\n", "2016-08-21 12:00:00 5345.043\n", "2016-08-28 12:00:00 5369.168\n", "2016-09-04 12:00:00 5401.186\n", "2016-09-11 12:00:00 5395.298\n", "2016-09-18 12:00:00 5386.552\n", "2016-09-25 12:00:00 5377.376\n", "2016-10-02 12:00:00 5406.685\n" ] } ], "source": [ "print(\"y_train\", y_train)\n", "print(\"\\ny_test\", y_test)" ] }, { "cell_type": "markdown", "id": "c078d9bb", "metadata": {}, "source": [ "\n", "### Setting the execution engine\n", "The AutoML pipeline offers the function `init`, which allows to initialize the parallelization engine." ] }, { "cell_type": "code", "execution_count": 10, "id": "b0eb6ea8", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:51.356611Z", "iopub.status.busy": "2025-04-25T10:13:51.356329Z", "iopub.status.idle": "2025-04-25T10:13:55.789689Z", "shell.execute_reply": "2025-04-25T10:13:55.788679Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:13:51,723] [automlx.backend] Overwriting ray session directory to /tmp/427vi97k/ray, which will be deleted at engine shutdown. If you wish to retain ray logs, provide _temp_dir in ray_setup dict of engine_opts when initializing the AutoMLx engine.\n" ] } ], "source": [ "init(engine=\"ray\")" ] }, { "cell_type": "markdown", "id": "fc1c98d9", "metadata": {}, "source": [ "\n", "### Create an instance of Oracle AutoMLx\n", "\n", "The Oracle AutoMLx solution automatically provides a tuned forecasting pipeline that best models the given training dataset and a prediction task at hand. Here the dataset can be any univariate time-series.\n", "\n", "AutoML for Forecasting consists of three main modules:\n", "- **Preprocessing**\n", " - Impute any missing values using back fill or forward fill mechanisms to ensure input has a well-defined and consistent frequency.\n", " - Identify seasonalities present in the data by detrending and analyzing the Autocorrelation Function (ACF) of the series.\n", " - Decide appropriate number of cross-validation (CV) folds and the forecast horizons based on the datetime frequency of data.\n", "- **Algorithm Selection**: Identify the right algorithm for a given dataset, choosing from the following:\n", " - NaiveForecaster - Naive and Seasonal Naive method\n", " - ThetaForecaster - Equivalent to Simple Exponential Smoothing (SES) with drift\n", " - ExpSmoothForecaster - Holt-Winters' damped method\n", " - STLwESForecaster - Seasonal Trend LOESS (locally weighted smoothing) with Exponential Smoothing substructure\n", " - STLwARIMAForecaster - Seasonal Trend LOESS (locally weighted smoothing) with ARIMA substructure\n", " - SARIMAXForecaster - Seasonal Autoregressive Integrated Moving Average\n", " - ETSForecaster - Error, Trend, Seasonality (ETS) Statespace Exponential Smoothing\n", " - ProphetForecaster (optional) - Facebook Prophet, only available when explicitly provided to the AutoML Pipeline through the model_list parameter.\n", " - VARMAXForecaster - Vector AutoRegressive Moving Average with Exogenous Variables (Available for multi-target forecasting)\n", " - DynFactorForecaster - Dynamic Factor Models in state-space form with Exogenous Variables (Available for multi-target forecasting)\n", " - ExtraTreesForecaster - A reduction-based machine learning model based on ExtraTrees regression model\n", " - LGBMForecaster - A reduction-based machine learning model based on LGBM regression model\n", " - XGBForecaster - A reduction-based machine learning model based on XGB regression model\n", "- **Hyperparameter Tuning**\n", " - Find the right model parameters that maximize score for the given dataset.\n", "\n", "These pieces are readily combined into a simple AutoML pipeline which automates the entire forecasting process with minimal user input/interaction. One can then evaluate and visualize the forecast produced by the selected model, and optionally the other tuned models." ] }, { "cell_type": "markdown", "id": "b675e1a6", "metadata": {}, "source": [ "\n", "### Train a forecasting model using Oracle AutoMLx\n", "\n", "The AutoML API is quite simple to work with. We first create an instance of the pipeline. Next, the training data is passed to the `fit()` function which successively executes the previously mentioned modules.\n", "\n", "The generated model can then be used for forecasting tasks. By default, we use the negative of symmetric mean absolute percentage error (sMAPE) scoring metric to evaluate the model performance" ] }, { "cell_type": "code", "execution_count": 11, "id": "b7292c53", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:13:55.793504Z", "iopub.status.busy": "2025-04-25T10:13:55.792580Z", "iopub.status.idle": "2025-04-25T10:14:41.527344Z", "shell.execute_reply": "2025-04-25T10:14:41.526655Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:06,599] [automlx.data_transform] Number of simple differencing orders required: d = 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:06,602] [automlx.data_transform] Seasonal Periodicities; from decomposed/adjusted: [52, 35, 1]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:06,666] [automlx.interface] Dataset shape: (174,2)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:10,990] [sanerec.autotuning.parameter] Hyperparameter epsilon autotune range is set to its validation range. This could lead to long training times\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:11,547] [sanerec.autotuning.parameter] Hyperparameter repeat_quality_threshold autotune range is set to its validation range. This could lead to long training times\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:11,557] [sanerec.autotuning.parameter] Hyperparameter scope autotune range is set to its validation range. This could lead to long training times\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:11,627] [automlx.data_transform] Running preprocessing. Number of features: 3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:11,712] [automlx.data_transform] Preprocessing completed. Took 0.085 secs\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:11,736] [automlx.process] Running Model Generation\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:11,786] [automlx] Provided model (VARMAXForecaster) is not supported.Supported models are: ['LGBMForecaster', 'ExtraTreesForecaster', 'ExpSmoothForecaster', 'NaiveForecaster', 'SARIMAXForecaster', 'STLwARIMAForecaster', 'ThetaForecaster', 'ProphetForecaster', 'ETSForecaster', 'STLwESForecaster', 'XGBForecaster']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:11,787] [automlx] Provided model (DynFactorForecaster) is not supported.Supported models are: ['LGBMForecaster', 'ExtraTreesForecaster', 'ExpSmoothForecaster', 'NaiveForecaster', 'SARIMAXForecaster', 'STLwARIMAForecaster', 'ThetaForecaster', 'ProphetForecaster', 'ETSForecaster', 'STLwESForecaster', 'XGBForecaster']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:11,788] [automlx.process] Model Generation completed.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:11,852] [automlx.model_selection] Running Model Selection\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:15,674] [automlx.dataset] Forecast horizon set to 13 for validation sets.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:27,185] [automlx.model_selection] Model Selection completed - Took 15.332 sec - Selected models: [['ETSForecaster', 'STLwARIMAForecaster']]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:27,240] [automlx.trials] Running Model Tuning for ['ETSForecaster']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:27,314] [automlx.dataset] Forecast horizon set to 13 for validation sets.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:34,808] [automlx.trials] Best parameters for ETSForecaster: {'error': 'add', 'trend': 'add', 'damped_trend': True, 'seasonal': 'add', 'seasonal_periods': 52, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:34,809] [automlx.trials] Model Tuning completed. Took: 7.569 secs\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:34,939] [automlx.trials] Running Model Tuning for ['STLwARIMAForecaster']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:35,020] [automlx.dataset] Forecast horizon set to 13 for validation sets.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:37,741] [automlx.trials] Best parameters for STLwARIMAForecaster: {'seasonal_deg': 1, 'trend_deg': 1, 'low_pass_deg': 1, 'period': 52, 'arima_p': 2, 'arima_d': 1, 'arima_q': 2, 'arima_trend': 'n', 'concentrate_scale': True}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:37,742] [automlx.trials] Model Tuning completed. Took: 2.803 secs\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:39,547] [automlx.interface] Re-fitting pipeline\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:39,570] [automlx.final_fit] Skipping updating parameter seed, already fixed by FinalFit_615a3221-8\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:41,143] [automlx.interface] AutoMLx completed.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selected model: ETSForecaster\n", "Selected model params: {'error': 'add', 'trend': 'add', 'damped_trend': True, 'seasonal': 'add', 'seasonal_periods': 52, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False}\n" ] } ], "source": [ "est1 = automlx.Pipeline(task=\"forecasting\", n_algos_tuned=2)\n", "est1.fit(X=None, y=y_train)\n", "\n", "print(\"Selected model: {}\".format(est1.selected_model_))\n", "print(\"Selected model params: {}\".format(est1.selected_model_params_))" ] }, { "cell_type": "markdown", "id": "6da55d4f", "metadata": {}, "source": [ "\n", "### Generating and visualizing forecasts\n", "There are two interfaces that support generating future forecasts using the trained forecasting pipeline.\n", "The preferred function, `forecast()`, accepts a user-input value for the number of periods to forecast into the future, i.e., relative to the end of the training series. It also accepts a significance level to generate prediction confidence intervals (CIs). When the methods support intervals, confidence intervals at 1-alpha are generated, for example, significance level alpha=0.05 generates 95% confidence intervals." ] }, { "cell_type": "code", "execution_count": 12, "id": "99e493b7", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:41.529838Z", "iopub.status.busy": "2025-04-25T10:14:41.529179Z", "iopub.status.idle": "2025-04-25T10:14:41.908579Z", "shell.execute_reply": "2025-04-25T10:14:41.907974Z" } }, "outputs": [], "source": [ "predictions = est1.forecast(periods=len(y_test), alpha=0.05)" ] }, { "cell_type": "markdown", "id": "33b94c7e", "metadata": {}, "source": [ "The `predict(X)` interface supports absolute index-based forecasts, but does not support confidence intervals (CIs). It also downcasts the index to int64.\n", "\n", "It should be utilized only when you want to get both in-sample predictions (predictions at timestamps that are part of the training set) and out-of-sample predictions (predictions at timestamps that are not in the training set). The X variable should be an empty dataframe containing only the requested timestamps as index. Here we request 5 in-sample model fit values and 5 out-of-sample forecasts." ] }, { "cell_type": "code", "execution_count": 13, "id": "3400d47a", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:41.911054Z", "iopub.status.busy": "2025-04-25T10:14:41.910545Z", "iopub.status.idle": "2025-04-25T10:14:41.963369Z", "shell.execute_reply": "2025-04-25T10:14:41.962860Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DatetimeIndex(['2016-03-06 12:00:00', '2016-03-13 12:00:00',\n", " '2016-03-20 12:00:00', '2016-03-27 12:00:00',\n", " '2016-04-03 12:00:00', '2016-04-10 12:00:00',\n", " '2016-04-17 12:00:00', '2016-04-24 12:00:00',\n", " '2016-05-01 12:00:00', '2016-05-08 12:00:00'],\n", " dtype='datetime64[ns]', freq='W-SUN')\n" ] } ], "source": [ "future_index = y_train.index[-5:].union(y_test.index[:5])\n", "print(future_index)" ] }, { "cell_type": "code", "execution_count": 14, "id": "a6801dc2", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:41.965231Z", "iopub.status.busy": "2025-04-25T10:14:41.964850Z", "iopub.status.idle": "2025-04-25T10:14:42.037263Z", "shell.execute_reply": "2025-04-25T10:14:42.036810Z" } }, "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", "
Finance_W142
2016-03-06 12:00:005015.306711
2016-03-13 12:00:005013.432026
2016-03-20 12:00:004998.150861
2016-03-27 12:00:005013.397612
2016-04-03 12:00:005028.193875
2016-04-10 12:00:005052.535771
2016-04-17 12:00:005066.283916
2016-04-24 12:00:005079.054044
2016-05-01 12:00:005102.910187
2016-05-08 12:00:005088.244409
\n", "
" ], "text/plain": [ " Finance_W142\n", "2016-03-06 12:00:00 5015.306711\n", "2016-03-13 12:00:00 5013.432026\n", "2016-03-20 12:00:00 4998.150861\n", "2016-03-27 12:00:00 5013.397612\n", "2016-04-03 12:00:00 5028.193875\n", "2016-04-10 12:00:00 5052.535771\n", "2016-04-17 12:00:00 5066.283916\n", "2016-04-24 12:00:00 5079.054044\n", "2016-05-01 12:00:00 5102.910187\n", "2016-05-08 12:00:00 5088.244409" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "est1.predict(X=pd.DataFrame(index=future_index))" ] }, { "cell_type": "markdown", "id": "637c6f21", "metadata": {}, "source": [ "AutoML provides a simple one-line tool to visualize forecasts and confidence intervals." ] }, { "cell_type": "code", "execution_count": 15, "id": "5ccd034c", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:42.039032Z", "iopub.status.busy": "2025-04-25T10:14:42.038790Z", "iopub.status.idle": "2025-04-25T10:14:42.461523Z", "shell.execute_reply": "2025-04-25T10:14:42.460954Z" } }, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "fill": "toself", "fillcolor": "#E45756", "legendgroup": "Prediction", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00", "2016-10-02T12:00:00", "2016-09-25T12:00:00", "2016-09-18T12:00:00", "2016-09-11T12:00:00", "2016-09-04T12:00:00", "2016-08-28T12:00:00", "2016-08-21T12:00:00", "2016-08-14T12:00:00", "2016-08-07T12:00:00", "2016-07-31T12:00:00", "2016-07-24T12:00:00", "2016-07-17T12:00:00", "2016-07-10T12:00:00", "2016-07-03T12:00:00", "2016-06-26T12:00:00", "2016-06-19T12:00:00", "2016-06-12T12:00:00", "2016-06-05T12:00:00", "2016-05-29T12:00:00", "2016-05-22T12:00:00", "2016-05-15T12:00:00", "2016-05-08T12:00:00", "2016-05-01T12:00:00", "2016-04-24T12:00:00", "2016-04-17T12:00:00", "2016-04-10T12:00:00" ], "y": [ 5070.580273638674, 5092.226584619821, 5111.342923846058, 5140.78463212205, 5131.243447026338, 5151.8010316076225, 5147.815690377083, 5201.612513059062, 5201.314658831722, 5204.78143384898, 5207.462591341958, 5228.615493897694, 5234.795793456774, 5224.969891116021, 5217.894122609784, 5224.677439538652, 5268.433076155442, 5257.4299441066305, 5276.755389320118, 5279.135229805809, 5312.658849839028, 5332.337860313252, 5320.531748692341, 5303.721964157983, 5313.622320906837, 5325.928702492031, 5074.170521734545, 5069.053954833914, 5066.377463652841, 5090.446921102023, 5109.550587471797, 5097.209469149724, 5071.066993228533, 5076.115019410152, 5064.268312078825, 5082.806034958914, 5046.646856117342, 5047.529169432821, 5062.348680129064, 5080.007469802135, 5081.762958735127, 5068.666104422987, 5074.183477985734, 5079.086669359846, 5087.964464024495, 5043.010251246153, 5056.175443384035, 5045.245371918152, 5065.035741036463, 5046.765163172892, 5040.341247333391, 5034.491268414348 ] }, { "legendgroup": "Prediction", "line": { "color": "#E45756" }, "mode": "lines+markers", "name": "Prediction", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00" ], "y": [ 5052.535771026512, 5066.283915976605, 5079.0540435094745, 5102.910186579256, 5088.244409472245, 5103.988237495829, 5095.412970811618, 5144.788488541779, 5140.200664095784, 5139.482455917357, 5138.064347882472, 5155.18922631641, 5157.401631629455, 5143.6592856225425, 5132.711646021303, 5135.662147827997, 5175.6195555571785, 5160.849128092728, 5176.435204365135, 5175.1011115171705, 5204.934159494376, 5220.944223892525, 5205.489334897182, 5185.049713905412, 5191.338137870375, 5200.049612113288 ] }, { "fill": "toself", "fillcolor": "#4C78A8", "legendgroup": "Train", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ "2012-12-09T12:00:00", "2012-12-16T12:00:00", "2012-12-23T12:00:00", "2012-12-30T12:00:00", "2013-01-06T12:00:00", "2013-01-13T12:00:00", "2013-01-20T12:00:00", "2013-01-27T12:00:00", "2013-02-03T12:00:00", "2013-02-10T12:00:00", "2013-02-17T12:00:00", "2013-02-24T12:00:00", "2013-03-03T12:00:00", "2013-03-10T12:00:00", "2013-03-17T12:00:00", "2013-03-24T12:00:00", "2013-03-31T12:00:00", "2013-04-07T12:00:00", "2013-04-14T12:00:00", "2013-04-21T12:00:00", "2013-04-28T12:00:00", "2013-05-05T12:00:00", "2013-05-12T12:00:00", "2013-05-19T12:00:00", "2013-05-26T12:00:00", "2013-06-02T12:00:00", "2013-06-09T12:00:00", "2013-06-16T12:00:00", "2013-06-23T12:00:00", "2013-06-30T12:00:00", "2013-07-07T12:00:00", "2013-07-14T12:00:00", "2013-07-21T12:00:00", "2013-07-28T12:00:00", "2013-08-04T12:00:00", "2013-08-11T12:00:00", "2013-08-18T12:00:00", "2013-08-25T12:00:00", "2013-09-01T12:00:00", "2013-09-08T12:00:00", "2013-09-15T12:00:00", "2013-09-22T12:00:00", "2013-09-29T12:00:00", "2013-10-06T12:00:00", "2013-10-13T12:00:00", "2013-10-20T12:00:00", "2013-10-27T12:00:00", "2013-11-03T12:00:00", "2013-11-10T12:00:00", "2013-11-17T12:00:00", "2013-11-24T12:00:00", "2013-12-01T12:00:00", "2013-12-08T12:00:00", "2013-12-15T12:00:00", "2013-12-22T12:00:00", "2013-12-29T12:00:00", "2014-01-05T12:00:00", "2014-01-12T12:00:00", "2014-01-19T12:00:00", "2014-01-26T12:00:00", "2014-02-02T12:00:00", "2014-02-09T12:00:00", "2014-02-16T12:00:00", "2014-02-23T12:00:00", "2014-03-02T12:00:00", "2014-03-09T12:00:00", "2014-03-16T12:00:00", "2014-03-23T12:00:00", "2014-03-30T12:00:00", "2014-04-06T12:00:00", "2014-04-13T12:00:00", "2014-04-20T12:00:00", "2014-04-27T12:00:00", "2014-05-04T12:00:00", "2014-05-11T12:00:00", "2014-05-18T12:00:00", "2014-05-25T12:00:00", "2014-06-01T12:00:00", "2014-06-08T12:00:00", "2014-06-15T12:00:00", "2014-06-22T12:00:00", "2014-06-29T12:00:00", "2014-07-06T12:00:00", "2014-07-13T12:00:00", "2014-07-20T12:00:00", "2014-07-27T12:00:00", "2014-08-03T12:00:00", "2014-08-10T12:00:00", "2014-08-17T12:00:00", "2014-08-24T12:00:00", "2014-08-31T12:00:00", "2014-09-07T12:00:00", "2014-09-14T12:00:00", "2014-09-21T12:00:00", "2014-09-28T12:00:00", "2014-10-05T12:00:00", "2014-10-12T12:00:00", "2014-10-19T12:00:00", "2014-10-26T12:00:00", "2014-11-02T12:00:00", "2014-11-09T12:00:00", "2014-11-16T12:00:00", "2014-11-23T12:00:00", "2014-11-30T12:00:00", "2014-12-07T12:00:00", "2014-12-14T12:00:00", "2014-12-21T12:00:00", "2014-12-28T12:00:00", "2015-01-04T12:00:00", "2015-01-11T12:00:00", "2015-01-18T12:00:00", "2015-01-25T12:00:00", "2015-02-01T12:00:00", "2015-02-08T12:00:00", "2015-02-15T12:00:00", "2015-02-22T12:00:00", "2015-03-01T12:00:00", "2015-03-08T12:00:00", "2015-03-15T12:00:00", "2015-03-22T12:00:00", "2015-03-29T12:00:00", "2015-04-05T12:00:00", "2015-04-12T12:00:00", "2015-04-19T12:00:00", "2015-04-26T12:00:00", "2015-05-03T12:00:00", "2015-05-10T12:00:00", "2015-05-17T12:00:00", "2015-05-24T12:00:00", "2015-05-31T12:00:00", "2015-06-07T12:00:00", "2015-06-14T12:00:00", "2015-06-21T12:00:00", "2015-06-28T12:00:00", "2015-07-05T12:00:00", "2015-07-12T12:00:00", "2015-07-19T12:00:00", "2015-07-26T12:00:00", "2015-08-02T12:00:00", "2015-08-09T12:00:00", "2015-08-16T12:00:00", "2015-08-23T12:00:00", "2015-08-30T12:00:00", "2015-09-06T12:00:00", "2015-09-13T12:00:00", "2015-09-20T12:00:00", "2015-09-27T12:00:00", "2015-10-04T12:00:00", "2015-10-11T12:00:00", "2015-10-18T12:00:00", "2015-10-25T12:00:00", "2015-11-01T12:00:00", "2015-11-08T12:00:00", "2015-11-15T12:00:00", "2015-11-22T12:00:00", "2015-11-29T12:00:00", "2015-12-06T12:00:00", "2015-12-13T12:00:00", "2015-12-20T12:00:00", "2015-12-27T12:00:00", "2016-01-03T12:00:00", "2016-01-10T12:00:00", "2016-01-17T12:00:00", "2016-01-24T12:00:00", "2016-01-31T12:00:00", "2016-02-07T12:00:00", "2016-02-14T12:00:00", "2016-02-21T12:00:00", "2016-02-28T12:00:00", "2016-03-06T12:00:00", "2016-03-13T12:00:00", "2016-03-20T12:00:00", "2016-03-27T12:00:00", "2016-04-03T12:00:00", "2016-04-03T12:00:00", "2016-03-27T12:00:00", "2016-03-20T12:00:00", "2016-03-13T12:00:00", "2016-03-06T12:00:00", "2016-02-28T12:00:00", "2016-02-21T12:00:00", "2016-02-14T12:00:00", "2016-02-07T12:00:00", "2016-01-31T12:00:00", "2016-01-24T12:00:00", "2016-01-17T12:00:00", "2016-01-10T12:00:00", "2016-01-03T12:00:00", "2015-12-27T12:00:00", "2015-12-20T12:00:00", "2015-12-13T12:00:00", "2015-12-06T12:00:00", "2015-11-29T12:00:00", "2015-11-22T12:00:00", "2015-11-15T12:00:00", "2015-11-08T12:00:00", "2015-11-01T12:00:00", "2015-10-25T12:00:00", "2015-10-18T12:00:00", "2015-10-11T12:00:00", "2015-10-04T12:00:00", "2015-09-27T12:00:00", "2015-09-20T12:00:00", "2015-09-13T12:00:00", "2015-09-06T12:00:00", "2015-08-30T12:00:00", "2015-08-23T12:00:00", "2015-08-16T12:00:00", "2015-08-09T12:00:00", "2015-08-02T12:00:00", "2015-07-26T12:00:00", "2015-07-19T12:00:00", "2015-07-12T12:00:00", "2015-07-05T12:00:00", "2015-06-28T12:00:00", "2015-06-21T12:00:00", "2015-06-14T12:00:00", "2015-06-07T12:00:00", "2015-05-31T12:00:00", "2015-05-24T12:00:00", "2015-05-17T12:00:00", "2015-05-10T12:00:00", "2015-05-03T12:00:00", "2015-04-26T12:00:00", "2015-04-19T12:00:00", "2015-04-12T12:00:00", "2015-04-05T12:00:00", "2015-03-29T12:00:00", "2015-03-22T12:00:00", "2015-03-15T12:00:00", "2015-03-08T12:00:00", "2015-03-01T12:00:00", "2015-02-22T12:00:00", "2015-02-15T12:00:00", "2015-02-08T12:00:00", "2015-02-01T12:00:00", "2015-01-25T12:00:00", "2015-01-18T12:00:00", "2015-01-11T12:00:00", "2015-01-04T12:00:00", "2014-12-28T12:00:00", "2014-12-21T12:00:00", "2014-12-14T12:00:00", "2014-12-07T12:00:00", "2014-11-30T12:00:00", "2014-11-23T12:00:00", "2014-11-16T12:00:00", "2014-11-09T12:00:00", "2014-11-02T12:00:00", "2014-10-26T12:00:00", "2014-10-19T12:00:00", "2014-10-12T12:00:00", "2014-10-05T12:00:00", "2014-09-28T12:00:00", "2014-09-21T12:00:00", "2014-09-14T12:00:00", "2014-09-07T12:00:00", "2014-08-31T12:00:00", "2014-08-24T12:00:00", "2014-08-17T12:00:00", "2014-08-10T12:00:00", "2014-08-03T12:00:00", "2014-07-27T12:00:00", "2014-07-20T12:00:00", "2014-07-13T12:00:00", "2014-07-06T12:00:00", "2014-06-29T12:00:00", "2014-06-22T12:00:00", "2014-06-15T12:00:00", "2014-06-08T12:00:00", "2014-06-01T12:00:00", "2014-05-25T12:00:00", "2014-05-18T12:00:00", "2014-05-11T12:00:00", "2014-05-04T12:00:00", "2014-04-27T12:00:00", "2014-04-20T12:00:00", "2014-04-13T12:00:00", "2014-04-06T12:00:00", "2014-03-30T12:00:00", "2014-03-23T12:00:00", "2014-03-16T12:00:00", "2014-03-09T12:00:00", "2014-03-02T12:00:00", "2014-02-23T12:00:00", "2014-02-16T12:00:00", "2014-02-09T12:00:00", "2014-02-02T12:00:00", "2014-01-26T12:00:00", "2014-01-19T12:00:00", "2014-01-12T12:00:00", "2014-01-05T12:00:00", "2013-12-29T12:00:00", "2013-12-22T12:00:00", "2013-12-15T12:00:00", "2013-12-08T12:00:00", "2013-12-01T12:00:00", "2013-11-24T12:00:00", "2013-11-17T12:00:00", "2013-11-10T12:00:00", "2013-11-03T12:00:00", "2013-10-27T12:00:00", "2013-10-20T12:00:00", "2013-10-13T12:00:00", "2013-10-06T12:00:00", "2013-09-29T12:00:00", "2013-09-22T12:00:00", "2013-09-15T12:00:00", "2013-09-08T12:00:00", "2013-09-01T12:00:00", "2013-08-25T12:00:00", "2013-08-18T12:00:00", "2013-08-11T12:00:00", "2013-08-04T12:00:00", "2013-07-28T12:00:00", "2013-07-21T12:00:00", "2013-07-14T12:00:00", "2013-07-07T12:00:00", "2013-06-30T12:00:00", "2013-06-23T12:00:00", "2013-06-16T12:00:00", "2013-06-09T12:00:00", "2013-06-02T12:00:00", "2013-05-26T12:00:00", "2013-05-19T12:00:00", "2013-05-12T12:00:00", "2013-05-05T12:00:00", "2013-04-28T12:00:00", "2013-04-21T12:00:00", "2013-04-14T12:00:00", "2013-04-07T12:00:00", "2013-03-31T12:00:00", "2013-03-24T12:00:00", "2013-03-17T12:00:00", "2013-03-10T12:00:00", "2013-03-03T12:00:00", "2013-02-24T12:00:00", "2013-02-17T12:00:00", "2013-02-10T12:00:00", "2013-02-03T12:00:00", "2013-01-27T12:00:00", "2013-01-20T12:00:00", "2013-01-13T12:00:00", "2013-01-06T12:00:00", "2012-12-30T12:00:00", "2012-12-23T12:00:00", "2012-12-16T12:00:00", "2012-12-09T12:00:00" ], "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ] }, { "legendgroup": "Train", "line": { "color": "#4C78A8" }, "mode": "lines+markers", "name": "Train", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ "2012-12-09T12:00:00", "2012-12-16T12:00:00", "2012-12-23T12:00:00", "2012-12-30T12:00:00", "2013-01-06T12:00:00", "2013-01-13T12:00:00", "2013-01-20T12:00:00", "2013-01-27T12:00:00", "2013-02-03T12:00:00", "2013-02-10T12:00:00", "2013-02-17T12:00:00", "2013-02-24T12:00:00", "2013-03-03T12:00:00", "2013-03-10T12:00:00", "2013-03-17T12:00:00", "2013-03-24T12:00:00", "2013-03-31T12:00:00", "2013-04-07T12:00:00", "2013-04-14T12:00:00", "2013-04-21T12:00:00", "2013-04-28T12:00:00", "2013-05-05T12:00:00", "2013-05-12T12:00:00", "2013-05-19T12:00:00", "2013-05-26T12:00:00", "2013-06-02T12:00:00", "2013-06-09T12:00:00", "2013-06-16T12:00:00", "2013-06-23T12:00:00", "2013-06-30T12:00:00", "2013-07-07T12:00:00", "2013-07-14T12:00:00", "2013-07-21T12:00:00", "2013-07-28T12:00:00", "2013-08-04T12:00:00", "2013-08-11T12:00:00", "2013-08-18T12:00:00", "2013-08-25T12:00:00", "2013-09-01T12:00:00", "2013-09-08T12:00:00", "2013-09-15T12:00:00", "2013-09-22T12:00:00", "2013-09-29T12:00:00", "2013-10-06T12:00:00", "2013-10-13T12:00:00", "2013-10-20T12:00:00", "2013-10-27T12:00:00", "2013-11-03T12:00:00", "2013-11-10T12:00:00", "2013-11-17T12:00:00", "2013-11-24T12:00:00", "2013-12-01T12:00:00", "2013-12-08T12:00:00", "2013-12-15T12:00:00", "2013-12-22T12:00:00", "2013-12-29T12:00:00", "2014-01-05T12:00:00", "2014-01-12T12:00:00", "2014-01-19T12:00:00", "2014-01-26T12:00:00", "2014-02-02T12:00:00", "2014-02-09T12:00:00", "2014-02-16T12:00:00", "2014-02-23T12:00:00", "2014-03-02T12:00:00", "2014-03-09T12:00:00", "2014-03-16T12:00:00", "2014-03-23T12:00:00", "2014-03-30T12:00:00", "2014-04-06T12:00:00", "2014-04-13T12:00:00", "2014-04-20T12:00:00", "2014-04-27T12:00:00", "2014-05-04T12:00:00", "2014-05-11T12:00:00", "2014-05-18T12:00:00", "2014-05-25T12:00:00", "2014-06-01T12:00:00", "2014-06-08T12:00:00", "2014-06-15T12:00:00", "2014-06-22T12:00:00", "2014-06-29T12:00:00", "2014-07-06T12:00:00", "2014-07-13T12:00:00", "2014-07-20T12:00:00", "2014-07-27T12:00:00", "2014-08-03T12:00:00", "2014-08-10T12:00:00", "2014-08-17T12:00:00", "2014-08-24T12:00:00", "2014-08-31T12:00:00", "2014-09-07T12:00:00", "2014-09-14T12:00:00", "2014-09-21T12:00:00", "2014-09-28T12:00:00", "2014-10-05T12:00:00", "2014-10-12T12:00:00", "2014-10-19T12:00:00", "2014-10-26T12:00:00", "2014-11-02T12:00:00", "2014-11-09T12:00:00", "2014-11-16T12:00:00", "2014-11-23T12:00:00", "2014-11-30T12:00:00", "2014-12-07T12:00:00", "2014-12-14T12:00:00", "2014-12-21T12:00:00", "2014-12-28T12:00:00", "2015-01-04T12:00:00", "2015-01-11T12:00:00", "2015-01-18T12:00:00", "2015-01-25T12:00:00", "2015-02-01T12:00:00", "2015-02-08T12:00:00", "2015-02-15T12:00:00", "2015-02-22T12:00:00", "2015-03-01T12:00:00", "2015-03-08T12:00:00", "2015-03-15T12:00:00", "2015-03-22T12:00:00", "2015-03-29T12:00:00", "2015-04-05T12:00:00", "2015-04-12T12:00:00", "2015-04-19T12:00:00", "2015-04-26T12:00:00", "2015-05-03T12:00:00", "2015-05-10T12:00:00", "2015-05-17T12:00:00", "2015-05-24T12:00:00", "2015-05-31T12:00:00", "2015-06-07T12:00:00", "2015-06-14T12:00:00", "2015-06-21T12:00:00", "2015-06-28T12:00:00", "2015-07-05T12:00:00", "2015-07-12T12:00:00", "2015-07-19T12:00:00", "2015-07-26T12:00:00", "2015-08-02T12:00:00", "2015-08-09T12:00:00", "2015-08-16T12:00:00", "2015-08-23T12:00:00", "2015-08-30T12:00:00", "2015-09-06T12:00:00", "2015-09-13T12:00:00", "2015-09-20T12:00:00", "2015-09-27T12:00:00", "2015-10-04T12:00:00", "2015-10-11T12:00:00", "2015-10-18T12:00:00", "2015-10-25T12:00:00", "2015-11-01T12:00:00", "2015-11-08T12:00:00", "2015-11-15T12:00:00", "2015-11-22T12:00:00", "2015-11-29T12:00:00", "2015-12-06T12:00:00", "2015-12-13T12:00:00", "2015-12-20T12:00:00", "2015-12-27T12:00:00", "2016-01-03T12:00:00", "2016-01-10T12:00:00", "2016-01-17T12:00:00", "2016-01-24T12:00:00", "2016-01-31T12:00:00", "2016-02-07T12:00:00", "2016-02-14T12:00:00", "2016-02-21T12:00:00", "2016-02-28T12:00:00", "2016-03-06T12:00:00", "2016-03-13T12:00:00", "2016-03-20T12:00:00", "2016-03-27T12:00:00", "2016-04-03T12:00:00" ], "y": [ 4793.269, 4818.969, 4863.783, 4926.357, 4916.616, 4858.883, 4819.147, 4806.748, 4815.396, 4768.452, 4751.364, 4737.588, 4725.667, 4662.693, 4663.064, 4637.378, 4659.424, 4655.363, 4652.091, 4661.774, 4671.685, 4681.916, 4666.581, 4676.095, 4681.965, 4735.406, 4718.177, 4721.211, 4722.095, 4740.302, 4713.521, 4694.984, 4676.947, 4676.516, 4703.567, 4687.747, 4708.145, 4706.12, 4736.371, 4736.059, 4716.647, 4697.804, 4708.734, 4706.561, 4690.457, 4692.085, 4696.37, 4738.64, 4710.091, 4727.272, 4718.161, 4751.915, 4795.678, 4820.768, 4859.787, 4932.062, 4920.262, 4874.428, 4831.697, 4810.37, 4816.862, 4779.33, 4741.717, 4730.166, 4715.571, 4662.166, 4645.199, 4626.669, 4646.874, 4651.243, 4652.171, 4671.261, 4685.222, 4706.21, 4691.296, 4716.278, 4700.747, 4747.854, 4743.366, 4742.127, 4738.52, 4744.128, 4754.49, 4744.079, 4738.09, 4743.58, 4789.202, 4766.825, 4783.076, 4782.65, 4816.391, 4854.834, 4830.343, 4810.411, 4818.341, 4825.56, 4800.643, 4804.187, 4803.935, 4840.899, 4822.945, 4847.145, 4841.505, 4875.982, 4917.772, 4941.137, 4975.989, 5054.636, 5055.895, 5015.539, 4986.998, 4953.151, 4951.071, 4915.632, 4898.229, 4873.413, 4835.979, 4793.369, 4767.315, 4742.366, 4758.743, 4805.722, 4802.091, 4811.803, 4823.789, 4861.948, 4846.237, 4857.265, 4839.705, 4885.989, 4892.866, 4888.045, 4885.856, 4912.978, 4935.828, 4923.535, 4914.882, 4919.044, 4966.831, 4961.51, 4972.567, 4972.152, 4999.004, 5010.469, 5009.81, 4989.216, 4991.327, 5014.727, 4986.906, 5002.459, 4990.365, 5022.977, 5016.583, 5014.628, 5022.916, 5055.529, 5125.232, 5149.794, 5186.379, 5248.472, 5291.799, 5259.02, 5214.639, 5180.645, 5171.807, 5152.833, 5115.199, 5089.845, 5065.185, 5024.759, 5021.153, 4996.524, 5004.032, 5053.536 ] }, { "fill": "toself", "fillcolor": "#F58518", "legendgroup": "y_test", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00", "2016-10-02T12:00:00", "2016-09-25T12:00:00", "2016-09-18T12:00:00", "2016-09-11T12:00:00", "2016-09-04T12:00:00", "2016-08-28T12:00:00", "2016-08-21T12:00:00", "2016-08-14T12:00:00", "2016-08-07T12:00:00", "2016-07-31T12:00:00", "2016-07-24T12:00:00", "2016-07-17T12:00:00", "2016-07-10T12:00:00", "2016-07-03T12:00:00", "2016-06-26T12:00:00", "2016-06-19T12:00:00", "2016-06-12T12:00:00", "2016-06-05T12:00:00", "2016-05-29T12:00:00", "2016-05-22T12:00:00", "2016-05-15T12:00:00", "2016-05-08T12:00:00", "2016-05-01T12:00:00", "2016-04-24T12:00:00", "2016-04-17T12:00:00", "2016-04-10T12:00:00" ], "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ] }, { "legendgroup": "y_test", "line": { "color": "#F58518" }, "mode": "lines+markers", "name": "y_test", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00" ], "y": [ 5039.544, 5053.42, 5066.86, 5099.887, 5082.291, 5084.34, 5081.651, 5106.797, 5147.906, 5140.993, 5153.21, 5258.369, 5307.455, 5295.631, 5300.088, 5295.456, 5333.739, 5338.803, 5339.39, 5345.043, 5369.168, 5401.186, 5395.298, 5386.552, 5377.376, 5406.685 ] } ], "layout": { "height": 350, "margin": { "b": 50, "t": 75 }, "plot_bgcolor": "rgba(0,0,0,0)", "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Selected Model: ETSForecaster
Model params: {'error': 'add', 'trend': 'add', 'damped_trend': True, 'seasonal': 'add', 'seasonal_periods': 52, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False}", "x": 0.5 }, "xaxis": { "categoryorder": "category ascending", "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "mirror": true, "showline": true, "showticklabels": true, "side": "bottom", "title": { "text": "Date" }, "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 }, "yaxis": { "categoryorder": "category ascending", "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "mirror": true, "showline": true, "showticklabels": true, "side": "left", "title": { "text": "Finance_W142" }, "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "est1.plot_forecast(predictions=predictions, additional_frames=dict(y_test=y_test))" ] }, { "cell_type": "markdown", "id": "0fb1ae28", "metadata": {}, "source": [ "\n", "### Analyze the AutoML optimization process\n", "During the AutoML process, a summary of the optimization process is logged. It consists of:\n", "- Information about the training data\n", "- Information about the AutoML Pipeline, such as:\n", " - selected features that AutoML found to be most predictive in the training data;\n", " - selected algorithm that was the best choice for this data;\n", " - hyperparameters for the selected algorithm." ] }, { "cell_type": "markdown", "id": "cb97c537", "metadata": {}, "source": [ "AutoML provides a `print_summary()` API to output all the different trials performed." ] }, { "cell_type": "code", "execution_count": 16, "id": "dda7b8e0", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:42.490707Z", "iopub.status.busy": "2025-04-25T10:14:42.490081Z", "iopub.status.idle": "2025-04-25T10:14:42.557691Z", "shell.execute_reply": "2025-04-25T10:14:42.557184Z" } }, "outputs": [ { "data": { "text/html": [ "
General Summary
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "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", "
(174, 2)
None
TimeSeriesCV(Shuffle=False, Seed=7)
neg_sym_mean_abs_percent_error
ETSForecaster
{'error': 'add', 'trend': 'add', 'damped_trend': True, 'seasonal': 'add', 'seasonal_periods': 52, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False}
25.2.1
3.9.21 (main, Dec 11 2024, 16:24:11) \\n[GCC 11.2.0]
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trials Summary
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Step# Samples# FeaturesAlgorithmHyperparametersScore (neg_sym_mean_abs_percent_error)All MetricsRuntime (Seconds)Memory Usage (GB)Finished
Model Selection{1: 109, 2: 122, 3: 135, 4: 148, 5: 161}2ETSForecaster{'error': 'add', 'trend': 'add', 'damped_trend': False, 'seasonal': 'add', 'seasonal_periods': 52, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False}-0.0361{'neg_sym_mean_abs_percent_error': -0.03605508323686911}5.53880.2991Fri Apr 25 03:14:22 2025
Model Selection{2: 122, 1: 109, 3: 135, 4: 148, 5: 161}2STLwARIMAForecaster{'seasonal_deg': 1, 'trend_deg': 1, 'low_pass_deg': 0, 'period': 52, 'arima_p': 2, 'arima_d': 1, 'arima_q': 2, 'arima_trend': 'n', 'concentrate_scale': True}-0.0855{'neg_sym_mean_abs_percent_error': -0.08549289627140871}1.66760.3153Fri Apr 25 03:14:22 2025
Model Selection{1: 109, 2: 122, 3: 135, 4: 148, 5: 161}2XGBForecaster{'differencing_order': 1, 'acf_local_maxima': '[52, 35, 17, 26, 22, 4, 48, 30, 13, 56, 39, 61, 44, 9, 65, 1]', 'use_X': False, 'n_estimators': 50, 'max_depth': 5}-0.0951{'neg_sym_mean_abs_percent_error': -0.09511310353650583}4.36450.3241Fri Apr 25 03:14:24 2025
Model Selection{2: 122, 5: 161, 1: 109, 3: 135, 4: 148}2ExtraTreesForecaster{'differencing_order': 1, 'acf_local_maxima': '[52, 35, 17, 26, 22, 4, 48, 30, 13, 56, 39, 61, 44, 9, 65, 1]', 'use_X': False, 'n_estimators': 40, 'min_samples_leaf': 0.030458}-0.1252{'neg_sym_mean_abs_percent_error': -0.12522681848759207}4.93130.3217Fri Apr 25 03:14:23 2025
Model Selection{2: 122, 3: 135, 1: 109, 4: 148, 5: 161}2LGBMForecaster{'differencing_order': 1, 'acf_local_maxima': '[52, 35, 17, 26, 22, 4, 48, 30, 13, 56, 39, 61, 44, 9, 65, 1]', 'use_X': False, 'max_depth': 4, 'n_estimators': 37}-0.13{'neg_sym_mean_abs_percent_error': -0.13003654391153155}5.09830.3536Fri Apr 25 03:14:25 2025
Model Selection{2: 122, 3: 135, 1: 109, 5: 161, 4: 148}2ThetaForecaster{'sp': 52, 'deseasonalize': False, 'initial_level': None}-0.2091{'neg_sym_mean_abs_percent_error': -0.2090874120377979}13.07090.3049Fri Apr 25 03:14:21 2025
Model Selection{1: 109, 2: 122, 4: 148, 3: 135, 5: 161}2ExpSmoothForecaster{'trend': 'add', 'damped_trend': True, 'seasonal': None, 'sp': 52, 'use_boxcox': False}-0.2475{'neg_sym_mean_abs_percent_error': -0.2474953233635102}10.32610.2994Fri Apr 25 03:14:21 2025
Model Selection{4: 148, 3: 135, 1: 109, 5: 161, 2: 122}2NaiveForecaster{'strategy': 'last', 'sp': 52, 'window_length': None}-0.4494{'neg_sym_mean_abs_percent_error': -0.4493967043524097}10.51110.2871Fri Apr 25 03:14:21 2025
Model Selection{1: 109, 2: 122, 4: 148, 3: 135, 5: 161}2STLwESForecaster{'seasonal_deg': 1, 'trend_deg': 1, 'low_pass_deg': 1, 'period': 52, 'es_trend': 'add', 'es_damped_trend': True, 'concentrate_scale': True}-inf{'neg_sym_mean_abs_percent_error': -inf}1.95900.3116Fri Apr 25 03:14:22 2025
Model Selection{1: 109, 3: 135, 2: 122, 4: 148, 5: 161}2SARIMAXForecaster{'sp': 52, 'p': 2, 'd': 1, 'q': 2, 'P': 1, 'D': 0, 'Q': 1, 'trend': 'n', 'use_X': False, 'enforce_stationarity': True, 'enforce_invertibility': True, 'method': 'lbfgs', 'disp': -1, 'concentrate_scale': False}-inf{'neg_sym_mean_abs_percent_error': -inf}19.88420.3231Fri Apr 25 03:14:26 2025
..............................
Model Tuning{2: 122, 1: 109, 3: 135, 5: 161, 4: 148}2ETSForecaster{'error': 'add', 'trend': 'add', 'damped_trend': False, 'seasonal': None, 'seasonal_periods': 1, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False}-0.2919{'neg_sym_mean_abs_percent_error': -0.29186918028720626}0.55130.3295Fri Apr 25 03:14:31 2025
Model TuningNone0ETSForecasterNone-infNone0.83070.3423-1
Model TuningNone0STLwARIMAForecasterNone-infNone0.34180.3551-1
Model Tuning{1: 109, 2: 122, 3: 135, 4: 148, 5: 161}2ETSForecaster{'error': 'add', 'trend': 'add', 'damped_trend': False, 'seasonal': 'add', 'seasonal_periods': 35, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False}-inf{'neg_sym_mean_abs_percent_error': -inf}7.10720.3547Fri Apr 25 03:14:32 2025
Model Tuning{2: 122, 1: 109, 4: 148, 5: 161, 3: 135}2ETSForecaster{'error': 'add', 'trend': 'mul', 'damped_trend': False, 'seasonal': 'add', 'seasonal_periods': 52, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False}-inf{'neg_sym_mean_abs_percent_error': -inf}6.76820.3423Fri Apr 25 03:14:33 2025
Model Tuning{2: 122, 1: 109, 3: 135, 4: 148, 5: 161}2ETSForecaster{'error': 'mul', 'trend': 'add', 'damped_trend': False, 'seasonal': 'add', 'seasonal_periods': 52, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False}-inf{'neg_sym_mean_abs_percent_error': -inf}9.87250.3547Fri Apr 25 03:14:30 2025
Model Tuning{1: 109, 2: 122, 3: 135, 4: 148, 5: 161}2STLwARIMAForecaster{'seasonal_deg': 0, 'trend_deg': 0, 'low_pass_deg': 0, 'period': 52, 'arima_p': 0, 'arima_d': 1, 'arima_q': 0, 'arima_trend': 'n', 'concentrate_scale': True}-inf{'neg_sym_mean_abs_percent_error': -inf}0.50990.3397Fri Apr 25 03:14:37 2025
Model Tuning{1: 109, 2: 122, 3: 135, 4: 148, 5: 161}2STLwARIMAForecaster{'seasonal_deg': 0, 'trend_deg': 1, 'low_pass_deg': 0, 'period': 52, 'arima_p': 2, 'arima_d': 1, 'arima_q': 2, 'arima_trend': 'n', 'concentrate_scale': True}-inf{'neg_sym_mean_abs_percent_error': -inf}1.11750.3551Fri Apr 25 03:14:36 2025
Model Tuning{1: 109, 2: 122, 3: 135, 4: 148, 5: 161}2STLwARIMAForecaster{'seasonal_deg': 1, 'trend_deg': 1, 'low_pass_deg': 0, 'period': 1, 'arima_p': 2, 'arima_d': 1, 'arima_q': 2, 'arima_trend': 'n', 'concentrate_scale': True}-inf{'neg_sym_mean_abs_percent_error': -inf}0.40960.3551Fri Apr 25 03:14:36 2025
Model Tuning{1: 109, 3: 135, 2: 122, 4: 148, 5: 161}2STLwARIMAForecaster{'seasonal_deg': 1, 'trend_deg': 1, 'low_pass_deg': 0, 'period': 52, 'arima_p': 5, 'arima_d': 1, 'arima_q': 2, 'arima_trend': 'n', 'concentrate_scale': True}-inf{'neg_sym_mean_abs_percent_error': -inf}2.07010.3547Fri Apr 25 03:14:36 2025
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "est1.print_summary()" ] }, { "cell_type": "markdown", "id": "e714dea0", "metadata": {}, "source": [ "We also provide the capability to visualize the results of each stage of the AutoML pipeline." ] }, { "cell_type": "markdown", "id": "a101b8ae", "metadata": {}, "source": [ "\n", "#### Algorithm Selection\n", "\n", "The plot below shows the scores predicted by Algorithm Selection for each algorithm. Since negative sMAPE is used by default, higher values (closer to zero) are better. The horizontal line shows the average score across all algorithms. Algorithms with better score than average are colored turquoise, whereas those with worse score than average are colored teal." ] }, { "cell_type": "code", "execution_count": 17, "id": "574d7643", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:42.559683Z", "iopub.status.busy": "2025-04-25T10:14:42.559217Z", "iopub.status.idle": "2025-04-25T10:14:42.801090Z", "shell.execute_reply": "2025-04-25T10:14:42.800580Z" } }, "outputs": [ { "data": { "image/png": "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woULeumll+yVGQAAAAAAALivmSrqPfvsszp16pT279+vli1bytfXV19++aWef/55TZgwQRaLRYZhqGbNmtxPDwAAAAAAALATU0W9OnXqaM6cOWm2Pf3002rWrJmWL1+uq1evqmrVqurcubMKFixoKigAAAAAAACAW0wV9TITGBioF198Mcs2mzdvVkREhHr27Hk3IgAAAAAAAAD3LFMLZZjx9ddf6/nnn3dU9wAAAAAAAIDTclhRDwAAAAAAAMCdoagHAAAAAAAAOBmKegAAAAAAAICToagHAAAAAAAAOBmKegAAAAAAAICToagHAAAAAAAAOBmKegAAAAAAAICToagHAAAAAAAAOBmKegAAAAAAAICTKeCojrt27ary5cs7qnsAAAAAAADAaTmsqNelSxd16dLFUd0DAAAAAAAATsv05bf79+9X7969VbFiRRUqVEiurq4ZfhQo4LD6IQAAAAAAAHBPMVVp+/3339W2bVvdvHlTkuTr66vSpUvbJRgAAAAAAACAjJkq6r322mu6efOmXn31Vb355pvy9fW1Vy4AAAAAAAAAmTBV1Nu+fbvq1q2rSZMm2SsPAAAAAAAAgGyYuqeem5ubqlevbq8sAAAAAAAAAHLAVFHv4Ycf1v79++2VBQAAAAAAAEAOmCrqvfPOO4qIiND//vc/e+UBAAAAAAAAkA1T99TbuXOnnn/+ef3nP//Rjz/+qHbt2snf318uLhnXCnv27GmmOwAAAAAAAAAyWdTr3bu3LBaLDMPQhg0btGHDBlkslnTtDMOQxWKhqAcAAAAAAADYgami3qhRozIs4gEAAAAAAAC4e0wV9UaPHm2nGAAAAAAAAAByytRCGQAAAAAAAADyHkU9AAAAAAAAwMmYuvw21caNG7V48WIdPnxYMTExMgwjXRuLxaI1a9bYo7tc27Rpk8aPH68tW7YoISFBNWrU0IABA3K9cMf69ev17bffaseOHTpz5oyuXr0qLy8v1alTR3369FGPHj24xyAAAAAAAADuOlNFPcMw9K9//UvffPONrZCXuhpuqtTHjip2zZ8/X08++aRSUlLUokULWa1WrVmzRr169VJYWJg+/PDDHJ9ryZIlmjp1qqpWraoHH3xQxYoV05kzZ7RhwwaFhoZqxYoV+v777+/iswEAAAAAAABMXn77xRdfaObMmapfv75WrVqlkJAQSVJ4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v1V6fgRBQEZGhipikUywIEOfa968eR+89rxv7ty5RZiG5Oq/16IPfad4LaK8jBo1CrGxsTh69Ci0tLRgY2NT4GirzZs3S5CS1NH27ds/qv/w4cOLKAnJnZOTE968eYMrV65AEARUrVq1wOvQmTNnJEhJ6u795yK+439ZLOqR2jE1Nf2oF+qIiIgiTENyw4IMEamDESNGfNS1aOvWrUWYhuRKoSj88tf8oYqIigKvQ/QlODo6ftRz0dmzZ4swTfHCoh4RERERkRry8/P7qP4ODg5FlISISqqHDx9+VP+aNWsWURIiyguLekRERPl48uQJLly4oNyty9jYGHZ2djA2NpY4GRERUeFcunQJ586dy3Eva9u2LWxtbSVORkREn6uU1AGICiMhIQEAUKlSJYmTkJywIEOfKjY2Ft9++y0OHTqErKysHG2CIKBfv374448/YGhoKFFCkpO3b98iKCgox7XI2tqaG0ARUZG6f/8+hg4disDAQADItcZns2bN4Obmhjp16kiWkYhKppiYmBzPRUZGRhInki+O1CO1dfToUaxZswYXLlzAmzdvAABlypRBmzZtMGnSJHTt2lXihKSuWJChz/Hq1Su0atUKISEhKFOmDDp27Khc6zMyMhInTpzAmzdvUK9ePVy+fBkVKlSQOjKpqdTUVMyZMwd///03kpKScrTp6uri66+/xq+//prvzm9E2d6+fYsDBw7kOdqqX79+LBBTLs+ePYONjQ2eP3+OatWqoX///jnuZR4eHnjy5AmqVq2KwMBA7qxMH/T8+XNs2bIl13XI3t4eI0eOROXKlSVOSHLw119/Yc2aNQgLC8txvE6dOvj+++8xYcIEiZLJF4t6pJamTJmCtWvXKn9RrFChAgRBwMuXLwG8K8x8//33WLVqlYQpSR2xIEOfa9asWVi2bBn69++fZ/E3Li4O3333Hfbt24eZM2di8eLFEiUldZaWlob27dvj0qVLAAArK6sc16KbN28CAGxtbXHmzBloaWlJGZfU2IULFzB48GA8fvwY/31sFwQB1atXx+7du9G6dWuJEpI6+vbbb7F+/XpMmTIFS5YsyVX4TU9Px6xZs7Bq1Sp8++23WLdunURJSQ4OHDiAUaNGISkpKc/rULly5bB582b069dPooSk7rKysuDi4oJDhw5BFEVUrFgRNWvWhCAIePjwIRISEiAIAvr0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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Each trial is a tuple of\n", "# (algorithm, no. samples, no. features, mean CV score, hyperparameters,\n", "# all CV scores, total CV time (s), memory usage (Gb))\n", "trials = est1.completed_trials_summary_[\n", " est1.completed_trials_summary_[\"Step\"].str.contains(\"Model Selection\")\n", "]\n", "name_of_score_column = f\"Score ({est1._inferred_score_metric[0].name})\"\n", "trials.replace([np.inf, -np.inf], np.nan, inplace=True)\n", "trials.dropna(subset=[name_of_score_column], inplace=True)\n", "scores = trials[name_of_score_column].tolist()\n", "models = trials[\"Algorithm\"].tolist()\n", "colors = []\n", "\n", "y_margin = 0.10 * (max(scores) - min(scores))\n", "s = pd.Series(scores, index=models).sort_values(ascending=False)\n", "s = s.dropna()\n", "for f in s.keys():\n", " if f.strip() == est1.selected_model_.strip():\n", " colors.append(\"orange\")\n", " elif s[f] >= s.mean():\n", " colors.append(\"teal\")\n", " else:\n", " colors.append(\"turquoise\")\n", "\n", "\n", "fig, ax = plt.subplots(1)\n", "ax.set_title(\"Algorithm Selection Trials\")\n", "ax.set_ylim(min(scores) - y_margin, max(scores) + y_margin)\n", "ax.set_ylabel(est1._inferred_score_metric[0].name)\n", "s.plot.bar(ax=ax, color=colors, edgecolor=\"black\")\n", "ax.axhline(y=s.mean(), color=\"black\", linewidth=0.5)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "7df43722", "metadata": {}, "source": [ "\n", "#### Hyperparameter Tuning\n", "\n", "Hyperparameter tuning is the last stage of the Oracle AutoMLx pipeline, and focuses on improving the chosen algorithm's score. We use a novel algorithm to search across many hyperparameter dimensions, and converge automatically when optimal hyperparameters are identified. Each trial in the graph below represents a particular hyperparameter combination for the selected model." ] }, { "cell_type": "code", "execution_count": 18, "id": "4e5c12e1", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:42.803159Z", "iopub.status.busy": "2025-04-25T10:14:42.802685Z", "iopub.status.idle": "2025-04-25T10:14:43.306912Z", "shell.execute_reply": "2025-04-25T10:14:43.306386Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABR0AAAHnCAYAAAA1uvqGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAACg50lEQVR4nOzdeVyVZf7/8feRXZFNVExAMVRyTSvNMsUtzX0bm5oZt9KsdEgtW7RJp4xSW0gzx8zSLFtcxkz7lhqmWWSu6ERuIe4LshwERJbz+8Ph/DhygAP3MaB5PR8PHg+57mv53Oc+1+H06brvy2SxWCwCAAAAAAAAACepUdkBAAAAAAAAAPhjIekIAAAAAAAAwKlIOgIAAAAAAABwKpKOAAAAAAAAAJyKpCMAAAAAAAAApyLpCAAAAAAAAMCpSDoCAAAAAAAAcCqSjgAAAAAAAACciqQjAAAAAAAAAKci6QgAAADA6Uwmk0wmk7Zu3VrZoVQJx48ft74mx48fd2rfjRs3lslk0gcffODUfgEAMIKkIwAAcKqZM2da/8O6LEX/I5z/WEZlmDlzpmbOnOn0JJAzRUZGWudJeX9Gjx5d2eFXG6NHj67w6xwZGVnZ4QMAUOW4VnYAAAAAQGWZNWuWpGuJvcaNG1duMCUICAhQ/fr1i5VfvXpVqampkiR/f3+5u7sXq+Pr63vD4ytJ8+bNJUk1a9astBjKw9fX1+7rnJ+fr+TkZEmSj4+PvLy8itUJCAgos383Nzfra+Lm5mYwWgAAqj6SjgAAAEAVtmbNGrvlW7duVbdu3ax1qtpqu19//bWyQyiXmJgYxcTEFCs/fvy4wsLCrHUqunq0YcOG1e41AQDACG6vBgAAAAAAAOBUJB0BAECV8+uvv1qflbZz585S6/7tb38r9ky16zdsOHLkiEaPHq3g4GB5eHgoNDRUEyZM0JkzZ0rtu6CgQB999JH69u2r+vXry93dXXXr1tW9996rlStXymKx2G1XdFOHy5cv6x//+Idat26t2rVr22wiUfj8y8LYP/vsM3Xt2lUBAQGqVauWbrvtNi1YsED5+fl2x8nKytLKlSs1cuRI3Xrrrapbt648PDx00003afDgwfrqq69KPLcPPvhAJpPJektxbGysBg8erAYNGsjFxcVmNVdiYqJeffVV9enTR82aNVOtWrXk7e2tFi1a6IknntCJEydKHKfweYQzZ85UXl6e3njjDbVr107e3t6qV6+eBg8erP3799uc00svvaRWrVqpVq1aqlOnju6//34dO3asxDGka7caL1y4UN26dVNgYKDc3d0VFBSkQYMG2X0dCp/fV6hbt242z+izd6v1jX4/OJsjG7kUvT6ltc/IyNCMGTMUEREhLy8v1alTR/3799dPP/1U7vGvn5/nz59XVFSUwsLC5Onpqfr16+vPf/5zmasCk5KS9NBDD1nndXBwsMaMGaOjR4/e0E1brlf4Xho9erQsFouWLFmizp07q06dOjbPqy0rpri4OD399NO655571KhRI3l6esrPz0933nmnXn31VV2+fLlC8WVnZ2vevHnq1KmT/P395ebmprp166pFixYaNWqUVq9ebeDsAQAohQUAAMCJXnjhBYskiyNfMxITE61133//fZtjXbt2tUiyPPTQQyW2T0lJsXh6elokWT766CO7/X7yySeW2rVrWyRZvL29LV5eXtZjAQEBlt27d9vt+9KlS5YuXbpY60qy+Pr62vw+cOBAS05OTrG2jRo1skiyzJs3z9KsWTOLJIu7u7vFz8/PIsmSmJho81p17drVMm3aNIski8lksvj7+1tq1KhhHad3796WK1euFBvn/ffft9YxmUwWX19fS82aNW1inDp1qt3zK2zbqFEjy5tvvmkxmUzWc3Rzc7OMGjWq2LUoPI86derYxOfr62vZvn273XEK2z733HOWHj16WPuoVauWtb23t7fl559/tiQnJ1vatWtnkWTx9PS0uVb16tWzJCUl2R3j+PHjlpYtWxZ7LYq+DhMmTLBp8/e//91Sv35963F/f39L/fr1rT+333777/5+KK/Y2Fjr2LGxscWOl3asUOH1eeGFF0ps//HHH1vCw8Ot16Xoe8zd3d3y9ddf2+27pPGLzs8vv/zSUq9ePYskS82aNS0eHh7WYz4+PpZ9+/bZ7fuHH36wzmtJFi8vL4u3t7e13WeffWY9VtHX1168139OWSwWy6hRoyySLCNHjrQMGzbMIslSo0YN6zwubFO0H3sxFX0v1axZ0+Lv729T1qJFC8v58+ftxlj4Hrs+PrPZbGnbtq3N3PDz87O4urpayxo1amTo9QEAoCSsdAQAAFXSo48+Kkn65JNPlJGRYbfOihUrdOXKFdWpU0fDhg2zW+eRRx5RWFiYfvrpJ2VkZCgzM1Nff/21QkNDlZKSoiFDhhTrPz8/X0OHDtW2bdt06623av369crMzFRaWpouX76sZcuWqV69evriiy/09NNPl3gOM2fOlNls1tq1a3X58mWlpqbq5MmTqlevnk29ffv2ac6cOZo4caLOnz+vlJQUpaam6sUXX5TJZNLXX3+tZ599tlj//v7+evLJJ/X999/r8uXLSktLU2Zmps6cOaNZs2bJzc1Nr732mr744osSYzx//rymTp2qUaNG6cSJE0pLS1N2draef/55a51bb71Vb7/9tg4fPqzs7GwlJycrJydHP/30k/r06aP09HTdf//9ys7OLnGchQsXat++ffr88891+fJlZWRkaOfOnWrSpIkuX76sqKgojRs3Tqmpqfr666+VmZmpy5cva/Pmzapbt64uXLig5557rli/mZmZ6tOnj/7zn/8oMjJSW7duVXZ2ttLS0pSWlqbXX39d3t7eWrRokc3z+mJiYnTu3Dnr72vWrNG5c+esPz///LP12O/9fqhqHn/8cbm7u+vbb7+1XpedO3eqefPmunr1qsaPH6+CgoIK9f23v/1NTZs21c8//2zte9OmTWrQoIHMZrMmTZpUrE1aWpqGDRumjIwMNWnSxBpX4XsqLCxMjzzyiNHTLrc1a9Zo3bp1mjdvnlJTU5WSkqL09HT17t3bofYDBgzQp59+qrNnzyozM1MpKSnKysrSmjVr1Lx5c/3yyy+aMGFCuWKKiYnR/v37FRAQoNWrVys7O1upqanKycnR6dOntXz5ct17770VOV0AAMpW2VlPAADwx1J0pWPRlWP2fgIDA0tcQXT16lXrCqhFixbZHat169YWSZYpU6bYlBddUVSnTh27q4N++eUXi7u7u0WSZc6cOTbHli9fbpFkiYiIsKSlpdkde9euXRaTyWRxd3cv1n/hqiMXFxfLnj17HHqt/va3v9mtM2PGDIski6urq+X06dMl9mXP3LlzLZIsPXr0KHas6CrJoUOHlqvfovLy8ixt2rSxSLJ8+OGHxY4XXSVpbzXkli1bbFarHTlypFid9957z3r86tWrNsf++c9/WleLXn+s0Jo1ayySLIGBgZbc3FybY4Vjl7Ya8Pd6P5TX77XSsW7dunbnUHx8vLXO999/7/D4RednRESEJSsrq1jbL774wlrn5MmTNsdefPFF66pLe++Xixcv2ny2/F4r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Ma9XGe8HZ2jbtq0klbjr+bx586zPq6xOCned//TTT+0m6y9dumR9/mt1UdY8e+aZZyrUb2nX18XFxfpc1rKe6woAQEXw1wUAAFR5DRo00KBBgyRJ27Ztk1T2BjKFcnNz1atXL/3888+Srq1o27x5s3r37q2cnByFhIRowoQJNm3++te/qmfPnrJYLBoyZIheeuklm1s5MzMzFRsbq8cff1xNmjQxfH6+vr5atmyZoqKirAnSjIwMvfzyy/rnP/8pSXr88cdtNs7o3LmzatWqJYvFohEjRujw4cOSrj2D8Ouvv1ZkZKRTnnnXp08fSdeeZ/jiiy9an6uZlpaml19+WZMmTVKdOnUMj1NRU6dOVevWrXXlyhV169ZNCxYs0KVLl6zH09LS9NVXX2nkyJG65557irVv1aqVJOmjjz4qcQOY3/v94CwPPPCAJOnrr7/WCy+8ILPZLOnapjvPPfecXnrpJfn5+VVihBUzceJE1a9fX1euXFGfPn303XffWVeq7tq1S7169VJeXl4lR1k+hfPspZde0po1a6zxJyYm6sEHH9Rnn31mXblaHh07dtTf//53bd261WYDmjNnzmjSpEnW1ZN9+/Z1wlkAAGCLpCMAAKgWCjeUkVSuDWT+9a9/6dixY+rQoYNq164tb29v9erVS0lJSfLz89OaNWusq90Kubi4aPXq1erfv7+uXr2q559/Xg0bNpSvr6/8/f1Vu3Ztde/eXQsXLizXTrIlufXWWzVt2jS99dZbqlevngICAuTv76/p06fLYrGoZ8+eeuWVV2za+Pr6at68eZKuJWKbN29uPb8+ffooPT1d77//vuHYiibr/vGPf6h27doKCAhQnTp1NH36dPXp08fm2vzevL299X//93+68847lZ6erkmTJqlu3bry9/e3Xq++ffvqww8/1NWrV4u1L0w4r169Wn5+fgoODlbjxo3VuXNna53f+/3gLKNHj1a3bt0kSf/85z/l5+engIAA1atXT6+88opeffVV62rI6sTf31+rVq2St7e3jh49qsjISHl7e6t27dq64447lJiYqMWLF1vre3p6VmK0jnnppZdUv359ZWRkaNiwYfLy8pKfn5+aNGmilStXavbs2WrTpk25+01LS9P8+fPVrVs31a5dW/7+/vL29lbDhg21YMECSdLkyZPVu3dvZ58SAAAkHQEAQPXQvXt3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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Each trial is a row in a dataframe that contains\n", "# Algorithm, Number of Samples, Number of Features, Hyperparameters, Score, Runtime, Memory Usage, Step as features\n", "trials = est1.completed_trials_summary_[\n", " est1.completed_trials_summary_[\"Step\"].str.contains(\"Model Tuning\")\n", "]\n", "trials.replace([np.inf, -np.inf], np.nan, inplace=True)\n", "trials.dropna(subset=[name_of_score_column], inplace=True)\n", "trials.drop(trials[trials[\"Finished\"] == -1].index, inplace=True)\n", "trials[\"Finished\"] = trials[\"Finished\"].apply(\n", " lambda x: time.mktime(datetime.datetime.strptime(x, \"%a %b %d %H:%M:%S %Y\").timetuple())\n", ")\n", "trials.sort_values(by=[\"Finished\"], ascending=True, inplace=True)\n", "scores = trials[name_of_score_column].tolist()\n", "score = []\n", "score.append(scores[0])\n", "for i in range(1, len(scores)):\n", " if scores[i] >= score[i - 1]:\n", " score.append(scores[i])\n", " else:\n", " score.append(score[i - 1])\n", "y_margin = 0.10 * (max(score) - min(score))\n", "\n", "fig, ax = plt.subplots(1)\n", "ax.set_title(\"Hyperparameter Tuning Trials\")\n", "ax.set_xlabel(\"Iteration $n$\")\n", "ax.set_ylabel(est1._inferred_score_metric[0].name)\n", "ax.grid(color=\"g\", linestyle=\"-\", linewidth=0.1)\n", "ax.set_ylim(min(score) - y_margin, max(score) + y_margin)\n", "ax.plot(range(1, len(trials) + 1), score, \"k:\", marker=\"s\", color=\"teal\", markersize=3)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "44b7b752", "metadata": { "lines_to_next_cell": 0 }, "source": [ "We can also view all tuned algorithms, as well as their validation and testing performance. This provides a good sanity check for the decision making.\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "644f92fd", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:43.309043Z", "iopub.status.busy": "2025-04-25T10:14:43.308562Z", "iopub.status.idle": "2025-04-25T10:14:43.468359Z", "shell.execute_reply": "2025-04-25T10:14:43.467831Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "### Plotting is enabled for total models tuned = 2.\n", "### Model_name\t\t Val_score \n", "ETSForecaster \t -0.0361 \t\n" ] }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "fill": "toself", "fillcolor": "#E45756", "legendgroup": "Prediction", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00", "2016-10-02T12:00:00", "2016-09-25T12:00:00", "2016-09-18T12:00:00", "2016-09-11T12:00:00", "2016-09-04T12:00:00", "2016-08-28T12:00:00", "2016-08-21T12:00:00", "2016-08-14T12:00:00", "2016-08-07T12:00:00", "2016-07-31T12:00:00", "2016-07-24T12:00:00", "2016-07-17T12:00:00", "2016-07-10T12:00:00", "2016-07-03T12:00:00", "2016-06-26T12:00:00", "2016-06-19T12:00:00", "2016-06-12T12:00:00", "2016-06-05T12:00:00", "2016-05-29T12:00:00", "2016-05-22T12:00:00", "2016-05-15T12:00:00", "2016-05-08T12:00:00", "2016-05-01T12:00:00", "2016-04-24T12:00:00", "2016-04-17T12:00:00", "2016-04-10T12:00:00" ], "y": [ 5070.580273638674, 5092.226584619821, 5111.342923846058, 5140.78463212205, 5131.243447026338, 5151.8010316076225, 5147.815690377083, 5201.612513059062, 5201.314658831722, 5204.78143384898, 5207.462591341958, 5228.615493897694, 5234.795793456774, 5224.969891116021, 5217.894122609784, 5224.677439538652, 5268.433076155442, 5257.4299441066305, 5276.755389320118, 5279.135229805809, 5312.658849839028, 5332.337860313252, 5320.531748692341, 5303.721964157983, 5313.622320906837, 5325.928702492031, 5074.170521734545, 5069.053954833914, 5066.377463652841, 5090.446921102023, 5109.550587471797, 5097.209469149724, 5071.066993228533, 5076.115019410152, 5064.268312078825, 5082.806034958914, 5046.646856117342, 5047.529169432821, 5062.348680129064, 5080.007469802135, 5081.762958735127, 5068.666104422987, 5074.183477985734, 5079.086669359846, 5087.964464024495, 5043.010251246153, 5056.175443384035, 5045.245371918152, 5065.035741036463, 5046.765163172892, 5040.341247333391, 5034.491268414348 ] }, { "legendgroup": "Prediction", "line": { "color": "#E45756" }, "mode": "lines+markers", "name": "Prediction", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00" ], "y": [ 5052.535771026512, 5066.283915976605, 5079.0540435094745, 5102.910186579256, 5088.244409472245, 5103.988237495829, 5095.412970811618, 5144.788488541779, 5140.200664095784, 5139.482455917357, 5138.064347882472, 5155.18922631641, 5157.401631629455, 5143.6592856225425, 5132.711646021303, 5135.662147827997, 5175.6195555571785, 5160.849128092728, 5176.435204365135, 5175.1011115171705, 5204.934159494376, 5220.944223892525, 5205.489334897182, 5185.049713905412, 5191.338137870375, 5200.049612113288 ] }, { "fill": "toself", "fillcolor": "#4C78A8", "legendgroup": "Train", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ "2012-12-09T12:00:00", "2012-12-16T12:00:00", "2012-12-23T12:00:00", "2012-12-30T12:00:00", "2013-01-06T12:00:00", "2013-01-13T12:00:00", "2013-01-20T12:00:00", "2013-01-27T12:00:00", "2013-02-03T12:00:00", "2013-02-10T12:00:00", "2013-02-17T12:00:00", "2013-02-24T12:00:00", "2013-03-03T12:00:00", "2013-03-10T12:00:00", "2013-03-17T12:00:00", "2013-03-24T12:00:00", "2013-03-31T12:00:00", "2013-04-07T12:00:00", "2013-04-14T12:00:00", "2013-04-21T12:00:00", "2013-04-28T12:00:00", "2013-05-05T12:00:00", "2013-05-12T12:00:00", "2013-05-19T12:00:00", "2013-05-26T12:00:00", "2013-06-02T12:00:00", "2013-06-09T12:00:00", "2013-06-16T12:00:00", "2013-06-23T12:00:00", "2013-06-30T12:00:00", "2013-07-07T12:00:00", "2013-07-14T12:00:00", "2013-07-21T12:00:00", "2013-07-28T12:00:00", "2013-08-04T12:00:00", "2013-08-11T12:00:00", "2013-08-18T12:00:00", "2013-08-25T12:00:00", "2013-09-01T12:00:00", "2013-09-08T12:00:00", "2013-09-15T12:00:00", "2013-09-22T12:00:00", "2013-09-29T12:00:00", "2013-10-06T12:00:00", "2013-10-13T12:00:00", "2013-10-20T12:00:00", "2013-10-27T12:00:00", "2013-11-03T12:00:00", "2013-11-10T12:00:00", "2013-11-17T12:00:00", "2013-11-24T12:00:00", "2013-12-01T12:00:00", "2013-12-08T12:00:00", "2013-12-15T12:00:00", "2013-12-22T12:00:00", "2013-12-29T12:00:00", "2014-01-05T12:00:00", "2014-01-12T12:00:00", "2014-01-19T12:00:00", "2014-01-26T12:00:00", "2014-02-02T12:00:00", "2014-02-09T12:00:00", "2014-02-16T12:00:00", "2014-02-23T12:00:00", "2014-03-02T12:00:00", "2014-03-09T12:00:00", "2014-03-16T12:00:00", "2014-03-23T12:00:00", "2014-03-30T12:00:00", "2014-04-06T12:00:00", "2014-04-13T12:00:00", "2014-04-20T12:00:00", "2014-04-27T12:00:00", "2014-05-04T12:00:00", "2014-05-11T12:00:00", "2014-05-18T12:00:00", "2014-05-25T12:00:00", "2014-06-01T12:00:00", "2014-06-08T12:00:00", "2014-06-15T12:00:00", "2014-06-22T12:00:00", "2014-06-29T12:00:00", "2014-07-06T12:00:00", "2014-07-13T12:00:00", "2014-07-20T12:00:00", "2014-07-27T12:00:00", "2014-08-03T12:00:00", "2014-08-10T12:00:00", "2014-08-17T12:00:00", "2014-08-24T12:00:00", "2014-08-31T12:00:00", "2014-09-07T12:00:00", "2014-09-14T12:00:00", "2014-09-21T12:00:00", "2014-09-28T12:00:00", "2014-10-05T12:00:00", "2014-10-12T12:00:00", "2014-10-19T12:00:00", "2014-10-26T12:00:00", "2014-11-02T12:00:00", "2014-11-09T12:00:00", "2014-11-16T12:00:00", "2014-11-23T12:00:00", "2014-11-30T12:00:00", "2014-12-07T12:00:00", "2014-12-14T12:00:00", "2014-12-21T12:00:00", "2014-12-28T12:00:00", "2015-01-04T12:00:00", "2015-01-11T12:00:00", "2015-01-18T12:00:00", "2015-01-25T12:00:00", "2015-02-01T12:00:00", "2015-02-08T12:00:00", "2015-02-15T12:00:00", "2015-02-22T12:00:00", "2015-03-01T12:00:00", "2015-03-08T12:00:00", "2015-03-15T12:00:00", "2015-03-22T12:00:00", "2015-03-29T12:00:00", "2015-04-05T12:00:00", "2015-04-12T12:00:00", "2015-04-19T12:00:00", "2015-04-26T12:00:00", "2015-05-03T12:00:00", "2015-05-10T12:00:00", "2015-05-17T12:00:00", "2015-05-24T12:00:00", "2015-05-31T12:00:00", "2015-06-07T12:00:00", "2015-06-14T12:00:00", "2015-06-21T12:00:00", "2015-06-28T12:00:00", "2015-07-05T12:00:00", "2015-07-12T12:00:00", "2015-07-19T12:00:00", "2015-07-26T12:00:00", "2015-08-02T12:00:00", "2015-08-09T12:00:00", "2015-08-16T12:00:00", "2015-08-23T12:00:00", "2015-08-30T12:00:00", "2015-09-06T12:00:00", "2015-09-13T12:00:00", "2015-09-20T12:00:00", "2015-09-27T12:00:00", "2015-10-04T12:00:00", "2015-10-11T12:00:00", "2015-10-18T12:00:00", "2015-10-25T12:00:00", "2015-11-01T12:00:00", "2015-11-08T12:00:00", "2015-11-15T12:00:00", "2015-11-22T12:00:00", "2015-11-29T12:00:00", "2015-12-06T12:00:00", "2015-12-13T12:00:00", "2015-12-20T12:00:00", "2015-12-27T12:00:00", "2016-01-03T12:00:00", "2016-01-10T12:00:00", "2016-01-17T12:00:00", "2016-01-24T12:00:00", "2016-01-31T12:00:00", "2016-02-07T12:00:00", "2016-02-14T12:00:00", "2016-02-21T12:00:00", "2016-02-28T12:00:00", "2016-03-06T12:00:00", "2016-03-13T12:00:00", "2016-03-20T12:00:00", "2016-03-27T12:00:00", "2016-04-03T12:00:00", "2016-04-03T12:00:00", "2016-03-27T12:00:00", "2016-03-20T12:00:00", "2016-03-13T12:00:00", "2016-03-06T12:00:00", "2016-02-28T12:00:00", "2016-02-21T12:00:00", "2016-02-14T12:00:00", "2016-02-07T12:00:00", "2016-01-31T12:00:00", "2016-01-24T12:00:00", "2016-01-17T12:00:00", "2016-01-10T12:00:00", "2016-01-03T12:00:00", "2015-12-27T12:00:00", "2015-12-20T12:00:00", "2015-12-13T12:00:00", "2015-12-06T12:00:00", "2015-11-29T12:00:00", "2015-11-22T12:00:00", "2015-11-15T12:00:00", "2015-11-08T12:00:00", "2015-11-01T12:00:00", "2015-10-25T12:00:00", "2015-10-18T12:00:00", "2015-10-11T12:00:00", "2015-10-04T12:00:00", "2015-09-27T12:00:00", "2015-09-20T12:00:00", "2015-09-13T12:00:00", "2015-09-06T12:00:00", "2015-08-30T12:00:00", "2015-08-23T12:00:00", "2015-08-16T12:00:00", "2015-08-09T12:00:00", "2015-08-02T12:00:00", "2015-07-26T12:00:00", "2015-07-19T12:00:00", "2015-07-12T12:00:00", "2015-07-05T12:00:00", "2015-06-28T12:00:00", "2015-06-21T12:00:00", "2015-06-14T12:00:00", "2015-06-07T12:00:00", "2015-05-31T12:00:00", "2015-05-24T12:00:00", "2015-05-17T12:00:00", "2015-05-10T12:00:00", "2015-05-03T12:00:00", "2015-04-26T12:00:00", "2015-04-19T12:00:00", "2015-04-12T12:00:00", "2015-04-05T12:00:00", "2015-03-29T12:00:00", "2015-03-22T12:00:00", "2015-03-15T12:00:00", "2015-03-08T12:00:00", "2015-03-01T12:00:00", "2015-02-22T12:00:00", "2015-02-15T12:00:00", "2015-02-08T12:00:00", "2015-02-01T12:00:00", "2015-01-25T12:00:00", "2015-01-18T12:00:00", "2015-01-11T12:00:00", "2015-01-04T12:00:00", "2014-12-28T12:00:00", "2014-12-21T12:00:00", "2014-12-14T12:00:00", "2014-12-07T12:00:00", "2014-11-30T12:00:00", "2014-11-23T12:00:00", "2014-11-16T12:00:00", "2014-11-09T12:00:00", "2014-11-02T12:00:00", "2014-10-26T12:00:00", "2014-10-19T12:00:00", "2014-10-12T12:00:00", "2014-10-05T12:00:00", "2014-09-28T12:00:00", "2014-09-21T12:00:00", "2014-09-14T12:00:00", "2014-09-07T12:00:00", "2014-08-31T12:00:00", "2014-08-24T12:00:00", "2014-08-17T12:00:00", "2014-08-10T12:00:00", "2014-08-03T12:00:00", "2014-07-27T12:00:00", "2014-07-20T12:00:00", "2014-07-13T12:00:00", "2014-07-06T12:00:00", "2014-06-29T12:00:00", "2014-06-22T12:00:00", "2014-06-15T12:00:00", "2014-06-08T12:00:00", "2014-06-01T12:00:00", "2014-05-25T12:00:00", "2014-05-18T12:00:00", "2014-05-11T12:00:00", "2014-05-04T12:00:00", "2014-04-27T12:00:00", "2014-04-20T12:00:00", "2014-04-13T12:00:00", "2014-04-06T12:00:00", "2014-03-30T12:00:00", "2014-03-23T12:00:00", "2014-03-16T12:00:00", "2014-03-09T12:00:00", "2014-03-02T12:00:00", "2014-02-23T12:00:00", "2014-02-16T12:00:00", "2014-02-09T12:00:00", "2014-02-02T12:00:00", "2014-01-26T12:00:00", "2014-01-19T12:00:00", "2014-01-12T12:00:00", "2014-01-05T12:00:00", "2013-12-29T12:00:00", "2013-12-22T12:00:00", "2013-12-15T12:00:00", "2013-12-08T12:00:00", "2013-12-01T12:00:00", "2013-11-24T12:00:00", "2013-11-17T12:00:00", "2013-11-10T12:00:00", "2013-11-03T12:00:00", "2013-10-27T12:00:00", "2013-10-20T12:00:00", "2013-10-13T12:00:00", "2013-10-06T12:00:00", "2013-09-29T12:00:00", "2013-09-22T12:00:00", "2013-09-15T12:00:00", "2013-09-08T12:00:00", "2013-09-01T12:00:00", "2013-08-25T12:00:00", "2013-08-18T12:00:00", "2013-08-11T12:00:00", "2013-08-04T12:00:00", "2013-07-28T12:00:00", "2013-07-21T12:00:00", "2013-07-14T12:00:00", "2013-07-07T12:00:00", "2013-06-30T12:00:00", "2013-06-23T12:00:00", "2013-06-16T12:00:00", "2013-06-09T12:00:00", "2013-06-02T12:00:00", "2013-05-26T12:00:00", "2013-05-19T12:00:00", "2013-05-12T12:00:00", "2013-05-05T12:00:00", "2013-04-28T12:00:00", "2013-04-21T12:00:00", "2013-04-14T12:00:00", "2013-04-07T12:00:00", "2013-03-31T12:00:00", "2013-03-24T12:00:00", "2013-03-17T12:00:00", "2013-03-10T12:00:00", "2013-03-03T12:00:00", "2013-02-24T12:00:00", "2013-02-17T12:00:00", "2013-02-10T12:00:00", "2013-02-03T12:00:00", "2013-01-27T12:00:00", "2013-01-20T12:00:00", "2013-01-13T12:00:00", "2013-01-06T12:00:00", "2012-12-30T12:00:00", "2012-12-23T12:00:00", "2012-12-16T12:00:00", "2012-12-09T12:00:00" ], "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ] }, { "legendgroup": "Train", "line": { "color": "#4C78A8" }, "mode": "lines+markers", "name": "Train", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ "2012-12-09T12:00:00", "2012-12-16T12:00:00", "2012-12-23T12:00:00", "2012-12-30T12:00:00", "2013-01-06T12:00:00", "2013-01-13T12:00:00", "2013-01-20T12:00:00", "2013-01-27T12:00:00", "2013-02-03T12:00:00", "2013-02-10T12:00:00", "2013-02-17T12:00:00", "2013-02-24T12:00:00", "2013-03-03T12:00:00", "2013-03-10T12:00:00", "2013-03-17T12:00:00", "2013-03-24T12:00:00", "2013-03-31T12:00:00", "2013-04-07T12:00:00", "2013-04-14T12:00:00", "2013-04-21T12:00:00", "2013-04-28T12:00:00", "2013-05-05T12:00:00", "2013-05-12T12:00:00", "2013-05-19T12:00:00", "2013-05-26T12:00:00", "2013-06-02T12:00:00", "2013-06-09T12:00:00", "2013-06-16T12:00:00", "2013-06-23T12:00:00", "2013-06-30T12:00:00", "2013-07-07T12:00:00", "2013-07-14T12:00:00", "2013-07-21T12:00:00", "2013-07-28T12:00:00", "2013-08-04T12:00:00", "2013-08-11T12:00:00", "2013-08-18T12:00:00", "2013-08-25T12:00:00", "2013-09-01T12:00:00", "2013-09-08T12:00:00", "2013-09-15T12:00:00", "2013-09-22T12:00:00", "2013-09-29T12:00:00", "2013-10-06T12:00:00", "2013-10-13T12:00:00", "2013-10-20T12:00:00", "2013-10-27T12:00:00", "2013-11-03T12:00:00", "2013-11-10T12:00:00", "2013-11-17T12:00:00", "2013-11-24T12:00:00", "2013-12-01T12:00:00", "2013-12-08T12:00:00", "2013-12-15T12:00:00", "2013-12-22T12:00:00", "2013-12-29T12:00:00", "2014-01-05T12:00:00", "2014-01-12T12:00:00", "2014-01-19T12:00:00", "2014-01-26T12:00:00", "2014-02-02T12:00:00", "2014-02-09T12:00:00", "2014-02-16T12:00:00", "2014-02-23T12:00:00", "2014-03-02T12:00:00", "2014-03-09T12:00:00", "2014-03-16T12:00:00", "2014-03-23T12:00:00", "2014-03-30T12:00:00", "2014-04-06T12:00:00", "2014-04-13T12:00:00", "2014-04-20T12:00:00", "2014-04-27T12:00:00", "2014-05-04T12:00:00", "2014-05-11T12:00:00", "2014-05-18T12:00:00", "2014-05-25T12:00:00", "2014-06-01T12:00:00", "2014-06-08T12:00:00", "2014-06-15T12:00:00", "2014-06-22T12:00:00", "2014-06-29T12:00:00", "2014-07-06T12:00:00", "2014-07-13T12:00:00", "2014-07-20T12:00:00", "2014-07-27T12:00:00", "2014-08-03T12:00:00", "2014-08-10T12:00:00", "2014-08-17T12:00:00", "2014-08-24T12:00:00", "2014-08-31T12:00:00", "2014-09-07T12:00:00", "2014-09-14T12:00:00", "2014-09-21T12:00:00", "2014-09-28T12:00:00", "2014-10-05T12:00:00", "2014-10-12T12:00:00", "2014-10-19T12:00:00", "2014-10-26T12:00:00", "2014-11-02T12:00:00", "2014-11-09T12:00:00", "2014-11-16T12:00:00", "2014-11-23T12:00:00", "2014-11-30T12:00:00", "2014-12-07T12:00:00", "2014-12-14T12:00:00", "2014-12-21T12:00:00", "2014-12-28T12:00:00", "2015-01-04T12:00:00", "2015-01-11T12:00:00", "2015-01-18T12:00:00", "2015-01-25T12:00:00", "2015-02-01T12:00:00", "2015-02-08T12:00:00", "2015-02-15T12:00:00", "2015-02-22T12:00:00", "2015-03-01T12:00:00", "2015-03-08T12:00:00", "2015-03-15T12:00:00", "2015-03-22T12:00:00", "2015-03-29T12:00:00", "2015-04-05T12:00:00", "2015-04-12T12:00:00", "2015-04-19T12:00:00", "2015-04-26T12:00:00", "2015-05-03T12:00:00", "2015-05-10T12:00:00", "2015-05-17T12:00:00", "2015-05-24T12:00:00", "2015-05-31T12:00:00", "2015-06-07T12:00:00", "2015-06-14T12:00:00", "2015-06-21T12:00:00", "2015-06-28T12:00:00", "2015-07-05T12:00:00", "2015-07-12T12:00:00", "2015-07-19T12:00:00", "2015-07-26T12:00:00", "2015-08-02T12:00:00", "2015-08-09T12:00:00", "2015-08-16T12:00:00", "2015-08-23T12:00:00", "2015-08-30T12:00:00", "2015-09-06T12:00:00", "2015-09-13T12:00:00", "2015-09-20T12:00:00", "2015-09-27T12:00:00", "2015-10-04T12:00:00", "2015-10-11T12:00:00", "2015-10-18T12:00:00", "2015-10-25T12:00:00", "2015-11-01T12:00:00", "2015-11-08T12:00:00", "2015-11-15T12:00:00", "2015-11-22T12:00:00", "2015-11-29T12:00:00", "2015-12-06T12:00:00", "2015-12-13T12:00:00", "2015-12-20T12:00:00", "2015-12-27T12:00:00", "2016-01-03T12:00:00", "2016-01-10T12:00:00", "2016-01-17T12:00:00", "2016-01-24T12:00:00", "2016-01-31T12:00:00", "2016-02-07T12:00:00", "2016-02-14T12:00:00", "2016-02-21T12:00:00", "2016-02-28T12:00:00", "2016-03-06T12:00:00", "2016-03-13T12:00:00", "2016-03-20T12:00:00", "2016-03-27T12:00:00", "2016-04-03T12:00:00" ], "y": [ 4793.269, 4818.969, 4863.783, 4926.357, 4916.616, 4858.883, 4819.147, 4806.748, 4815.396, 4768.452, 4751.364, 4737.588, 4725.667, 4662.693, 4663.064, 4637.378, 4659.424, 4655.363, 4652.091, 4661.774, 4671.685, 4681.916, 4666.581, 4676.095, 4681.965, 4735.406, 4718.177, 4721.211, 4722.095, 4740.302, 4713.521, 4694.984, 4676.947, 4676.516, 4703.567, 4687.747, 4708.145, 4706.12, 4736.371, 4736.059, 4716.647, 4697.804, 4708.734, 4706.561, 4690.457, 4692.085, 4696.37, 4738.64, 4710.091, 4727.272, 4718.161, 4751.915, 4795.678, 4820.768, 4859.787, 4932.062, 4920.262, 4874.428, 4831.697, 4810.37, 4816.862, 4779.33, 4741.717, 4730.166, 4715.571, 4662.166, 4645.199, 4626.669, 4646.874, 4651.243, 4652.171, 4671.261, 4685.222, 4706.21, 4691.296, 4716.278, 4700.747, 4747.854, 4743.366, 4742.127, 4738.52, 4744.128, 4754.49, 4744.079, 4738.09, 4743.58, 4789.202, 4766.825, 4783.076, 4782.65, 4816.391, 4854.834, 4830.343, 4810.411, 4818.341, 4825.56, 4800.643, 4804.187, 4803.935, 4840.899, 4822.945, 4847.145, 4841.505, 4875.982, 4917.772, 4941.137, 4975.989, 5054.636, 5055.895, 5015.539, 4986.998, 4953.151, 4951.071, 4915.632, 4898.229, 4873.413, 4835.979, 4793.369, 4767.315, 4742.366, 4758.743, 4805.722, 4802.091, 4811.803, 4823.789, 4861.948, 4846.237, 4857.265, 4839.705, 4885.989, 4892.866, 4888.045, 4885.856, 4912.978, 4935.828, 4923.535, 4914.882, 4919.044, 4966.831, 4961.51, 4972.567, 4972.152, 4999.004, 5010.469, 5009.81, 4989.216, 4991.327, 5014.727, 4986.906, 5002.459, 4990.365, 5022.977, 5016.583, 5014.628, 5022.916, 5055.529, 5125.232, 5149.794, 5186.379, 5248.472, 5291.799, 5259.02, 5214.639, 5180.645, 5171.807, 5152.833, 5115.199, 5089.845, 5065.185, 5024.759, 5021.153, 4996.524, 5004.032, 5053.536 ] }, { "fill": "toself", "fillcolor": "#F58518", "legendgroup": "y_test", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00", "2016-10-02T12:00:00", "2016-09-25T12:00:00", "2016-09-18T12:00:00", "2016-09-11T12:00:00", "2016-09-04T12:00:00", "2016-08-28T12:00:00", "2016-08-21T12:00:00", "2016-08-14T12:00:00", "2016-08-07T12:00:00", "2016-07-31T12:00:00", "2016-07-24T12:00:00", "2016-07-17T12:00:00", "2016-07-10T12:00:00", "2016-07-03T12:00:00", "2016-06-26T12:00:00", "2016-06-19T12:00:00", "2016-06-12T12:00:00", "2016-06-05T12:00:00", "2016-05-29T12:00:00", "2016-05-22T12:00:00", "2016-05-15T12:00:00", "2016-05-08T12:00:00", "2016-05-01T12:00:00", "2016-04-24T12:00:00", "2016-04-17T12:00:00", "2016-04-10T12:00:00" ], "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ] }, { "legendgroup": "y_test", "line": { "color": "#F58518" }, "mode": "lines+markers", "name": "y_test", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00" ], "y": [ 5039.544, 5053.42, 5066.86, 5099.887, 5082.291, 5084.34, 5081.651, 5106.797, 5147.906, 5140.993, 5153.21, 5258.369, 5307.455, 5295.631, 5300.088, 5295.456, 5333.739, 5338.803, 5339.39, 5345.043, 5369.168, 5401.186, 5395.298, 5386.552, 5377.376, 5406.685 ] } ], "layout": { "height": 350, "margin": { "b": 50, "t": 75 }, "plot_bgcolor": "rgba(0,0,0,0)", "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Selected Model: ETSForecaster
Model params: {'sample_weight': None, 'failed_fit': False, 'error': 'add', 'trend': 'add', 'damped_trend': True, 'seasonal': 'add', 'seasonal_periods': 52, 'initialization_method': 'estimated', 'initial_level': None, 'initial_trend': None, 'initial_seasonal': None, 'bounds': None, 'dates': None, 'freq': None, 'missing': 'none', 'start_params': None, 'maxiter': 1500, 'disp': -1, 'return_params': False, 'inference_mode': 'predict', 'seed': 7, 'reproducible': False}", "x": 0.5 }, "xaxis": { "categoryorder": "category ascending", "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "mirror": true, "showline": true, "showticklabels": true, "side": "bottom", "title": { "text": "Date" }, "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 }, "yaxis": { "categoryorder": "category ascending", "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "mirror": true, "showline": true, "showticklabels": true, "side": "left", "title": { "text": "Finance_W142" }, "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "STLwARIMAForecaster \t -0.0855 \t\n" ] }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "fill": "toself", "fillcolor": "#E45756", "legendgroup": "Prediction", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00", "2016-10-02T12:00:00", "2016-09-25T12:00:00", "2016-09-18T12:00:00", "2016-09-11T12:00:00", "2016-09-04T12:00:00", "2016-08-28T12:00:00", "2016-08-21T12:00:00", "2016-08-14T12:00:00", "2016-08-07T12:00:00", "2016-07-31T12:00:00", "2016-07-24T12:00:00", "2016-07-17T12:00:00", "2016-07-10T12:00:00", "2016-07-03T12:00:00", "2016-06-26T12:00:00", "2016-06-19T12:00:00", "2016-06-12T12:00:00", "2016-06-05T12:00:00", "2016-05-29T12:00:00", "2016-05-22T12:00:00", "2016-05-15T12:00:00", "2016-05-08T12:00:00", "2016-05-01T12:00:00", "2016-04-24T12:00:00", "2016-04-17T12:00:00", "2016-04-10T12:00:00" ], "y": [ 5028.335305405431, 5045.345026131779, 5061.378694195356, 5101.234491176018, 5088.12888049749, 5105.870892275741, 5087.681387069716, 5135.39679083275, 5144.740545815119, 5142.091070568843, 5141.310777996465, 5165.641840857913, 5194.5084542023405, 5186.058427852336, 5181.967440331334, 5189.5891838609805, 5242.217789319007, 5235.763936337341, 5249.38569548869, 5251.624509651508, 5282.452082209583, 5306.177385305119, 5303.62861534542, 5285.409139940328, 5290.3836680028, 5315.213234885755, 5193.099096841711, 5173.148372235992, 5172.987123651839, 5195.952527052043, 5203.177967491957, 5184.058040421578, 5157.762366367328, 5159.9796272558315, 5150.735593164261, 5161.486096574182, 5113.070129563672, 5109.573855890932, 5117.699780089169, 5130.090684543761, 5105.067320494029, 5084.478507149318, 5088.897356731283, 5095.080587736053, 5089.167943140873, 5044.789525523061, 5066.242547976686, 5051.734419699807, 5068.133757380556, 5031.817575260574, 5019.990572893128, 5009.034815044071 ] }, { "legendgroup": "Prediction", "line": { "color": "#E45756" }, "mode": "lines+markers", "name": "Prediction", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00" ], "y": [ 5018.685060224751, 5032.667799512454, 5046.598134727965, 5084.684124278287, 5069.931650098649, 5086.056720126214, 5066.235456296388, 5112.282366986812, 5119.910566775586, 5115.494213650063, 5112.894642572891, 5135.354580675971, 5162.299569373051, 5151.879103970752, 5145.770648111133, 5151.329656712326, 5201.851942946594, 5193.249764750801, 5204.682661372261, 5204.693438009417, 5233.255061315581, 5254.677676398538, 5249.790571198731, 5229.1981317960835, 5231.766020119396, 5254.156165863733 ] }, { "fill": "toself", "fillcolor": "#4C78A8", "legendgroup": "Train", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ "2012-12-09T12:00:00", "2012-12-16T12:00:00", "2012-12-23T12:00:00", "2012-12-30T12:00:00", "2013-01-06T12:00:00", "2013-01-13T12:00:00", "2013-01-20T12:00:00", "2013-01-27T12:00:00", "2013-02-03T12:00:00", "2013-02-10T12:00:00", "2013-02-17T12:00:00", "2013-02-24T12:00:00", "2013-03-03T12:00:00", "2013-03-10T12:00:00", "2013-03-17T12:00:00", "2013-03-24T12:00:00", "2013-03-31T12:00:00", "2013-04-07T12:00:00", "2013-04-14T12:00:00", "2013-04-21T12:00:00", "2013-04-28T12:00:00", "2013-05-05T12:00:00", "2013-05-12T12:00:00", "2013-05-19T12:00:00", "2013-05-26T12:00:00", "2013-06-02T12:00:00", "2013-06-09T12:00:00", "2013-06-16T12:00:00", "2013-06-23T12:00:00", "2013-06-30T12:00:00", "2013-07-07T12:00:00", "2013-07-14T12:00:00", "2013-07-21T12:00:00", "2013-07-28T12:00:00", "2013-08-04T12:00:00", "2013-08-11T12:00:00", "2013-08-18T12:00:00", "2013-08-25T12:00:00", "2013-09-01T12:00:00", "2013-09-08T12:00:00", "2013-09-15T12:00:00", "2013-09-22T12:00:00", "2013-09-29T12:00:00", "2013-10-06T12:00:00", "2013-10-13T12:00:00", "2013-10-20T12:00:00", "2013-10-27T12:00:00", "2013-11-03T12:00:00", "2013-11-10T12:00:00", "2013-11-17T12:00:00", "2013-11-24T12:00:00", "2013-12-01T12:00:00", "2013-12-08T12:00:00", "2013-12-15T12:00:00", "2013-12-22T12:00:00", "2013-12-29T12:00:00", "2014-01-05T12:00:00", "2014-01-12T12:00:00", "2014-01-19T12:00:00", "2014-01-26T12:00:00", "2014-02-02T12:00:00", "2014-02-09T12:00:00", "2014-02-16T12:00:00", "2014-02-23T12:00:00", "2014-03-02T12:00:00", "2014-03-09T12:00:00", "2014-03-16T12:00:00", "2014-03-23T12:00:00", "2014-03-30T12:00:00", "2014-04-06T12:00:00", "2014-04-13T12:00:00", "2014-04-20T12:00:00", "2014-04-27T12:00:00", "2014-05-04T12:00:00", "2014-05-11T12:00:00", "2014-05-18T12:00:00", "2014-05-25T12:00:00", "2014-06-01T12:00:00", "2014-06-08T12:00:00", "2014-06-15T12:00:00", "2014-06-22T12:00:00", "2014-06-29T12:00:00", "2014-07-06T12:00:00", "2014-07-13T12:00:00", "2014-07-20T12:00:00", "2014-07-27T12:00:00", "2014-08-03T12:00:00", "2014-08-10T12:00:00", "2014-08-17T12:00:00", "2014-08-24T12:00:00", "2014-08-31T12:00:00", "2014-09-07T12:00:00", "2014-09-14T12:00:00", "2014-09-21T12:00:00", "2014-09-28T12:00:00", "2014-10-05T12:00:00", "2014-10-12T12:00:00", "2014-10-19T12:00:00", "2014-10-26T12:00:00", "2014-11-02T12:00:00", "2014-11-09T12:00:00", "2014-11-16T12:00:00", "2014-11-23T12:00:00", "2014-11-30T12:00:00", "2014-12-07T12:00:00", "2014-12-14T12:00:00", "2014-12-21T12:00:00", "2014-12-28T12:00:00", "2015-01-04T12:00:00", "2015-01-11T12:00:00", "2015-01-18T12:00:00", "2015-01-25T12:00:00", "2015-02-01T12:00:00", "2015-02-08T12:00:00", "2015-02-15T12:00:00", "2015-02-22T12:00:00", "2015-03-01T12:00:00", "2015-03-08T12:00:00", "2015-03-15T12:00:00", "2015-03-22T12:00:00", "2015-03-29T12:00:00", "2015-04-05T12:00:00", "2015-04-12T12:00:00", "2015-04-19T12:00:00", "2015-04-26T12:00:00", "2015-05-03T12:00:00", "2015-05-10T12:00:00", "2015-05-17T12:00:00", "2015-05-24T12:00:00", "2015-05-31T12:00:00", "2015-06-07T12:00:00", "2015-06-14T12:00:00", "2015-06-21T12:00:00", "2015-06-28T12:00:00", "2015-07-05T12:00:00", "2015-07-12T12:00:00", "2015-07-19T12:00:00", "2015-07-26T12:00:00", "2015-08-02T12:00:00", "2015-08-09T12:00:00", "2015-08-16T12:00:00", "2015-08-23T12:00:00", "2015-08-30T12:00:00", "2015-09-06T12:00:00", "2015-09-13T12:00:00", "2015-09-20T12:00:00", "2015-09-27T12:00:00", "2015-10-04T12:00:00", "2015-10-11T12:00:00", "2015-10-18T12:00:00", "2015-10-25T12:00:00", "2015-11-01T12:00:00", "2015-11-08T12:00:00", "2015-11-15T12:00:00", "2015-11-22T12:00:00", "2015-11-29T12:00:00", "2015-12-06T12:00:00", "2015-12-13T12:00:00", "2015-12-20T12:00:00", "2015-12-27T12:00:00", "2016-01-03T12:00:00", "2016-01-10T12:00:00", "2016-01-17T12:00:00", "2016-01-24T12:00:00", "2016-01-31T12:00:00", "2016-02-07T12:00:00", "2016-02-14T12:00:00", "2016-02-21T12:00:00", "2016-02-28T12:00:00", "2016-03-06T12:00:00", "2016-03-13T12:00:00", "2016-03-20T12:00:00", "2016-03-27T12:00:00", "2016-04-03T12:00:00", "2016-04-03T12:00:00", "2016-03-27T12:00:00", "2016-03-20T12:00:00", "2016-03-13T12:00:00", "2016-03-06T12:00:00", "2016-02-28T12:00:00", "2016-02-21T12:00:00", "2016-02-14T12:00:00", "2016-02-07T12:00:00", "2016-01-31T12:00:00", "2016-01-24T12:00:00", "2016-01-17T12:00:00", "2016-01-10T12:00:00", "2016-01-03T12:00:00", "2015-12-27T12:00:00", "2015-12-20T12:00:00", "2015-12-13T12:00:00", "2015-12-06T12:00:00", "2015-11-29T12:00:00", "2015-11-22T12:00:00", "2015-11-15T12:00:00", "2015-11-08T12:00:00", "2015-11-01T12:00:00", "2015-10-25T12:00:00", "2015-10-18T12:00:00", "2015-10-11T12:00:00", "2015-10-04T12:00:00", "2015-09-27T12:00:00", "2015-09-20T12:00:00", "2015-09-13T12:00:00", "2015-09-06T12:00:00", "2015-08-30T12:00:00", "2015-08-23T12:00:00", "2015-08-16T12:00:00", "2015-08-09T12:00:00", "2015-08-02T12:00:00", "2015-07-26T12:00:00", "2015-07-19T12:00:00", "2015-07-12T12:00:00", "2015-07-05T12:00:00", "2015-06-28T12:00:00", "2015-06-21T12:00:00", "2015-06-14T12:00:00", "2015-06-07T12:00:00", "2015-05-31T12:00:00", "2015-05-24T12:00:00", "2015-05-17T12:00:00", "2015-05-10T12:00:00", "2015-05-03T12:00:00", "2015-04-26T12:00:00", "2015-04-19T12:00:00", "2015-04-12T12:00:00", "2015-04-05T12:00:00", "2015-03-29T12:00:00", "2015-03-22T12:00:00", "2015-03-15T12:00:00", "2015-03-08T12:00:00", "2015-03-01T12:00:00", "2015-02-22T12:00:00", "2015-02-15T12:00:00", "2015-02-08T12:00:00", "2015-02-01T12:00:00", "2015-01-25T12:00:00", "2015-01-18T12:00:00", "2015-01-11T12:00:00", "2015-01-04T12:00:00", "2014-12-28T12:00:00", "2014-12-21T12:00:00", "2014-12-14T12:00:00", "2014-12-07T12:00:00", "2014-11-30T12:00:00", "2014-11-23T12:00:00", "2014-11-16T12:00:00", "2014-11-09T12:00:00", "2014-11-02T12:00:00", "2014-10-26T12:00:00", "2014-10-19T12:00:00", "2014-10-12T12:00:00", "2014-10-05T12:00:00", "2014-09-28T12:00:00", "2014-09-21T12:00:00", "2014-09-14T12:00:00", "2014-09-07T12:00:00", "2014-08-31T12:00:00", "2014-08-24T12:00:00", "2014-08-17T12:00:00", "2014-08-10T12:00:00", "2014-08-03T12:00:00", "2014-07-27T12:00:00", "2014-07-20T12:00:00", "2014-07-13T12:00:00", "2014-07-06T12:00:00", "2014-06-29T12:00:00", "2014-06-22T12:00:00", "2014-06-15T12:00:00", "2014-06-08T12:00:00", "2014-06-01T12:00:00", "2014-05-25T12:00:00", "2014-05-18T12:00:00", "2014-05-11T12:00:00", "2014-05-04T12:00:00", "2014-04-27T12:00:00", "2014-04-20T12:00:00", "2014-04-13T12:00:00", "2014-04-06T12:00:00", "2014-03-30T12:00:00", "2014-03-23T12:00:00", "2014-03-16T12:00:00", "2014-03-09T12:00:00", "2014-03-02T12:00:00", "2014-02-23T12:00:00", "2014-02-16T12:00:00", "2014-02-09T12:00:00", "2014-02-02T12:00:00", "2014-01-26T12:00:00", "2014-01-19T12:00:00", "2014-01-12T12:00:00", "2014-01-05T12:00:00", "2013-12-29T12:00:00", "2013-12-22T12:00:00", "2013-12-15T12:00:00", "2013-12-08T12:00:00", "2013-12-01T12:00:00", "2013-11-24T12:00:00", "2013-11-17T12:00:00", "2013-11-10T12:00:00", "2013-11-03T12:00:00", "2013-10-27T12:00:00", "2013-10-20T12:00:00", "2013-10-13T12:00:00", "2013-10-06T12:00:00", "2013-09-29T12:00:00", "2013-09-22T12:00:00", "2013-09-15T12:00:00", "2013-09-08T12:00:00", "2013-09-01T12:00:00", "2013-08-25T12:00:00", "2013-08-18T12:00:00", "2013-08-11T12:00:00", "2013-08-04T12:00:00", "2013-07-28T12:00:00", "2013-07-21T12:00:00", "2013-07-14T12:00:00", "2013-07-07T12:00:00", "2013-06-30T12:00:00", "2013-06-23T12:00:00", "2013-06-16T12:00:00", "2013-06-09T12:00:00", "2013-06-02T12:00:00", "2013-05-26T12:00:00", "2013-05-19T12:00:00", "2013-05-12T12:00:00", "2013-05-05T12:00:00", "2013-04-28T12:00:00", "2013-04-21T12:00:00", "2013-04-14T12:00:00", "2013-04-07T12:00:00", "2013-03-31T12:00:00", "2013-03-24T12:00:00", "2013-03-17T12:00:00", "2013-03-10T12:00:00", "2013-03-03T12:00:00", "2013-02-24T12:00:00", "2013-02-17T12:00:00", "2013-02-10T12:00:00", "2013-02-03T12:00:00", "2013-01-27T12:00:00", "2013-01-20T12:00:00", "2013-01-13T12:00:00", "2013-01-06T12:00:00", "2012-12-30T12:00:00", "2012-12-23T12:00:00", "2012-12-16T12:00:00", "2012-12-09T12:00:00" ], "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ] }, { "legendgroup": "Train", "line": { "color": "#4C78A8" }, "mode": "lines+markers", "name": "Train", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ "2012-12-09T12:00:00", "2012-12-16T12:00:00", "2012-12-23T12:00:00", "2012-12-30T12:00:00", "2013-01-06T12:00:00", "2013-01-13T12:00:00", "2013-01-20T12:00:00", "2013-01-27T12:00:00", "2013-02-03T12:00:00", "2013-02-10T12:00:00", "2013-02-17T12:00:00", "2013-02-24T12:00:00", "2013-03-03T12:00:00", "2013-03-10T12:00:00", "2013-03-17T12:00:00", "2013-03-24T12:00:00", "2013-03-31T12:00:00", "2013-04-07T12:00:00", "2013-04-14T12:00:00", "2013-04-21T12:00:00", "2013-04-28T12:00:00", "2013-05-05T12:00:00", "2013-05-12T12:00:00", "2013-05-19T12:00:00", "2013-05-26T12:00:00", "2013-06-02T12:00:00", "2013-06-09T12:00:00", "2013-06-16T12:00:00", "2013-06-23T12:00:00", "2013-06-30T12:00:00", "2013-07-07T12:00:00", "2013-07-14T12:00:00", "2013-07-21T12:00:00", "2013-07-28T12:00:00", "2013-08-04T12:00:00", "2013-08-11T12:00:00", "2013-08-18T12:00:00", "2013-08-25T12:00:00", "2013-09-01T12:00:00", "2013-09-08T12:00:00", "2013-09-15T12:00:00", "2013-09-22T12:00:00", "2013-09-29T12:00:00", "2013-10-06T12:00:00", "2013-10-13T12:00:00", "2013-10-20T12:00:00", "2013-10-27T12:00:00", "2013-11-03T12:00:00", "2013-11-10T12:00:00", "2013-11-17T12:00:00", "2013-11-24T12:00:00", "2013-12-01T12:00:00", "2013-12-08T12:00:00", "2013-12-15T12:00:00", "2013-12-22T12:00:00", "2013-12-29T12:00:00", "2014-01-05T12:00:00", "2014-01-12T12:00:00", "2014-01-19T12:00:00", "2014-01-26T12:00:00", "2014-02-02T12:00:00", "2014-02-09T12:00:00", "2014-02-16T12:00:00", "2014-02-23T12:00:00", "2014-03-02T12:00:00", "2014-03-09T12:00:00", "2014-03-16T12:00:00", "2014-03-23T12:00:00", "2014-03-30T12:00:00", "2014-04-06T12:00:00", "2014-04-13T12:00:00", "2014-04-20T12:00:00", "2014-04-27T12:00:00", "2014-05-04T12:00:00", "2014-05-11T12:00:00", "2014-05-18T12:00:00", "2014-05-25T12:00:00", "2014-06-01T12:00:00", "2014-06-08T12:00:00", "2014-06-15T12:00:00", "2014-06-22T12:00:00", "2014-06-29T12:00:00", "2014-07-06T12:00:00", "2014-07-13T12:00:00", "2014-07-20T12:00:00", "2014-07-27T12:00:00", "2014-08-03T12:00:00", "2014-08-10T12:00:00", "2014-08-17T12:00:00", "2014-08-24T12:00:00", "2014-08-31T12:00:00", "2014-09-07T12:00:00", "2014-09-14T12:00:00", "2014-09-21T12:00:00", "2014-09-28T12:00:00", "2014-10-05T12:00:00", "2014-10-12T12:00:00", "2014-10-19T12:00:00", "2014-10-26T12:00:00", "2014-11-02T12:00:00", "2014-11-09T12:00:00", "2014-11-16T12:00:00", "2014-11-23T12:00:00", "2014-11-30T12:00:00", "2014-12-07T12:00:00", "2014-12-14T12:00:00", "2014-12-21T12:00:00", "2014-12-28T12:00:00", "2015-01-04T12:00:00", "2015-01-11T12:00:00", "2015-01-18T12:00:00", "2015-01-25T12:00:00", "2015-02-01T12:00:00", "2015-02-08T12:00:00", "2015-02-15T12:00:00", "2015-02-22T12:00:00", "2015-03-01T12:00:00", "2015-03-08T12:00:00", "2015-03-15T12:00:00", "2015-03-22T12:00:00", "2015-03-29T12:00:00", "2015-04-05T12:00:00", "2015-04-12T12:00:00", "2015-04-19T12:00:00", "2015-04-26T12:00:00", "2015-05-03T12:00:00", "2015-05-10T12:00:00", "2015-05-17T12:00:00", "2015-05-24T12:00:00", "2015-05-31T12:00:00", "2015-06-07T12:00:00", "2015-06-14T12:00:00", "2015-06-21T12:00:00", "2015-06-28T12:00:00", "2015-07-05T12:00:00", "2015-07-12T12:00:00", "2015-07-19T12:00:00", "2015-07-26T12:00:00", "2015-08-02T12:00:00", "2015-08-09T12:00:00", "2015-08-16T12:00:00", "2015-08-23T12:00:00", "2015-08-30T12:00:00", "2015-09-06T12:00:00", "2015-09-13T12:00:00", "2015-09-20T12:00:00", "2015-09-27T12:00:00", "2015-10-04T12:00:00", "2015-10-11T12:00:00", "2015-10-18T12:00:00", "2015-10-25T12:00:00", "2015-11-01T12:00:00", "2015-11-08T12:00:00", "2015-11-15T12:00:00", "2015-11-22T12:00:00", "2015-11-29T12:00:00", "2015-12-06T12:00:00", "2015-12-13T12:00:00", "2015-12-20T12:00:00", "2015-12-27T12:00:00", "2016-01-03T12:00:00", "2016-01-10T12:00:00", "2016-01-17T12:00:00", "2016-01-24T12:00:00", "2016-01-31T12:00:00", "2016-02-07T12:00:00", "2016-02-14T12:00:00", "2016-02-21T12:00:00", "2016-02-28T12:00:00", "2016-03-06T12:00:00", "2016-03-13T12:00:00", "2016-03-20T12:00:00", "2016-03-27T12:00:00", "2016-04-03T12:00:00" ], "y": [ 4793.269, 4818.969, 4863.783, 4926.357, 4916.616, 4858.883, 4819.147, 4806.748, 4815.396, 4768.452, 4751.364, 4737.588, 4725.667, 4662.693, 4663.064, 4637.378, 4659.424, 4655.363, 4652.091, 4661.774, 4671.685, 4681.916, 4666.581, 4676.095, 4681.965, 4735.406, 4718.177, 4721.211, 4722.095, 4740.302, 4713.521, 4694.984, 4676.947, 4676.516, 4703.567, 4687.747, 4708.145, 4706.12, 4736.371, 4736.059, 4716.647, 4697.804, 4708.734, 4706.561, 4690.457, 4692.085, 4696.37, 4738.64, 4710.091, 4727.272, 4718.161, 4751.915, 4795.678, 4820.768, 4859.787, 4932.062, 4920.262, 4874.428, 4831.697, 4810.37, 4816.862, 4779.33, 4741.717, 4730.166, 4715.571, 4662.166, 4645.199, 4626.669, 4646.874, 4651.243, 4652.171, 4671.261, 4685.222, 4706.21, 4691.296, 4716.278, 4700.747, 4747.854, 4743.366, 4742.127, 4738.52, 4744.128, 4754.49, 4744.079, 4738.09, 4743.58, 4789.202, 4766.825, 4783.076, 4782.65, 4816.391, 4854.834, 4830.343, 4810.411, 4818.341, 4825.56, 4800.643, 4804.187, 4803.935, 4840.899, 4822.945, 4847.145, 4841.505, 4875.982, 4917.772, 4941.137, 4975.989, 5054.636, 5055.895, 5015.539, 4986.998, 4953.151, 4951.071, 4915.632, 4898.229, 4873.413, 4835.979, 4793.369, 4767.315, 4742.366, 4758.743, 4805.722, 4802.091, 4811.803, 4823.789, 4861.948, 4846.237, 4857.265, 4839.705, 4885.989, 4892.866, 4888.045, 4885.856, 4912.978, 4935.828, 4923.535, 4914.882, 4919.044, 4966.831, 4961.51, 4972.567, 4972.152, 4999.004, 5010.469, 5009.81, 4989.216, 4991.327, 5014.727, 4986.906, 5002.459, 4990.365, 5022.977, 5016.583, 5014.628, 5022.916, 5055.529, 5125.232, 5149.794, 5186.379, 5248.472, 5291.799, 5259.02, 5214.639, 5180.645, 5171.807, 5152.833, 5115.199, 5089.845, 5065.185, 5024.759, 5021.153, 4996.524, 5004.032, 5053.536 ] }, { "fill": "toself", "fillcolor": "#F58518", "legendgroup": "y_test", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00", "2016-10-02T12:00:00", "2016-09-25T12:00:00", "2016-09-18T12:00:00", "2016-09-11T12:00:00", "2016-09-04T12:00:00", "2016-08-28T12:00:00", "2016-08-21T12:00:00", "2016-08-14T12:00:00", "2016-08-07T12:00:00", "2016-07-31T12:00:00", "2016-07-24T12:00:00", "2016-07-17T12:00:00", "2016-07-10T12:00:00", "2016-07-03T12:00:00", "2016-06-26T12:00:00", "2016-06-19T12:00:00", "2016-06-12T12:00:00", "2016-06-05T12:00:00", "2016-05-29T12:00:00", "2016-05-22T12:00:00", "2016-05-15T12:00:00", "2016-05-08T12:00:00", "2016-05-01T12:00:00", "2016-04-24T12:00:00", "2016-04-17T12:00:00", "2016-04-10T12:00:00" ], "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ] }, { "legendgroup": "y_test", "line": { "color": "#F58518" }, "mode": "lines+markers", "name": "y_test", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ "2016-04-10T12:00:00", "2016-04-17T12:00:00", "2016-04-24T12:00:00", "2016-05-01T12:00:00", "2016-05-08T12:00:00", "2016-05-15T12:00:00", "2016-05-22T12:00:00", "2016-05-29T12:00:00", "2016-06-05T12:00:00", "2016-06-12T12:00:00", "2016-06-19T12:00:00", "2016-06-26T12:00:00", "2016-07-03T12:00:00", "2016-07-10T12:00:00", "2016-07-17T12:00:00", "2016-07-24T12:00:00", "2016-07-31T12:00:00", "2016-08-07T12:00:00", "2016-08-14T12:00:00", "2016-08-21T12:00:00", "2016-08-28T12:00:00", "2016-09-04T12:00:00", "2016-09-11T12:00:00", "2016-09-18T12:00:00", "2016-09-25T12:00:00", "2016-10-02T12:00:00" ], "y": [ 5039.544, 5053.42, 5066.86, 5099.887, 5082.291, 5084.34, 5081.651, 5106.797, 5147.906, 5140.993, 5153.21, 5258.369, 5307.455, 5295.631, 5300.088, 5295.456, 5333.739, 5338.803, 5339.39, 5345.043, 5369.168, 5401.186, 5395.298, 5386.552, 5377.376, 5406.685 ] } ], "layout": { "height": 350, "margin": { "b": 50, "t": 75 }, "plot_bgcolor": "rgba(0,0,0,0)", "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Selected Model: STLwARIMAForecaster
Model params: {'sample_weight': None, 'failed_fit': False, 'seasonal_deg': 1, 'trend_deg': 1, 'low_pass_deg': 1, 'period': 52, 'arima_p': 2, 'arima_d': 1, 'arima_q': 2, 'arima_trend': 'n', 'concentrate_scale': True, 'inference_mode': 'predict', 'seed': 7, 'reproducible': False}", "x": 0.5 }, "xaxis": { "categoryorder": "category ascending", "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "mirror": true, "showline": true, "showticklabels": true, "side": "bottom", "title": { "text": "Date" }, "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 }, "yaxis": { "categoryorder": "category ascending", "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "mirror": true, "showline": true, "showticklabels": true, "side": "left", "title": { "text": "Finance_W142" }, "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(f\"### Plotting is enabled for total models tuned = {len(est1.pipelines_)}.\")\n", "print(\"### Model_name\\t\\t Val_score \")\n", "\n", "for pipeline in est1.pipelines_:\n", " print(\n", " pipeline.selected_model_,\n", " \" \\t\",\n", " \"%.4f\"\n", " % est1.completed_trials_summary_[est1.completed_trials_summary_[\"Algorithm\"] == pipeline.selected_model_].iloc[0][name_of_score_column],\n", " \"\\t\", # validation_score\n", " )\n", " predictions = pipeline.forecast(periods=len(y_test), alpha=0.05) # out-of-sample forecast\n", " predictions.index = y_test.index\n", " fig = pipeline.plot_forecast(predictions=predictions, additional_frames=dict(y_test=y_test))\n", " fig.show()" ] }, { "cell_type": "markdown", "id": "46381018", "metadata": {}, "source": [ "\n", "# Multivariate time series" ] }, { "cell_type": "markdown", "id": "6ae836b5", "metadata": {}, "source": [ "We now display the use of the Oracle AutoMLx solution for multivariate time series.\n", "\n", "There are two types of multivariate time series in forecasting:\n", "- Single-target forecasting, with additional variables\n", "- Multi-target forecasting, with or without additional variables\n", "\n", "A time series target is the variable that the forecaster will try to predict. Additional variables provide more information that help with the prediction of the target.\n", "In single-target forecasting, we are forecasting a single variable, whereas in multi-target forecasting, we forecast values of highly correlated variables together as a system.\n", "\n", "We will first see an example of single-target forecasting with additional variables and then a second example with a multi-target forecasting problem." ] }, { "cell_type": "markdown", "id": "ea784926", "metadata": {}, "source": [ "\n", "## Single-target Forecasting with Exogenous Variables" ] }, { "cell_type": "markdown", "id": "b0b5efae", "metadata": {}, "source": [ "We will now take two time series from the M4 dataset: one target variable, and one additional variable used solely as explanatory variables.\n", "Note that $X$ consists of the additional variables ('W142') while $y$ has the target variables ('W143').\n", "We will also showcase AutoML's functionality in the absence of a datetime index, by dropping the datetime index and utilize the series with only an int64index." ] }, { "cell_type": "code", "execution_count": 20, "id": "f7670918", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:43.470739Z", "iopub.status.busy": "2025-04-25T10:14:43.470148Z", "iopub.status.idle": "2025-04-25T10:14:43.528282Z", "shell.execute_reply": "2025-04-25T10:14:43.527748Z" } }, "outputs": [], "source": [ "series_ids = [\"W142\", \"W143\"]\n", "series_values = all_series.loc[series_ids].T\n", "\n", "# drop NaNs for the time period where data wasn't recorded\n", "series_values.dropna(inplace=True)\n", "\n", "# we will take the first 100 elements of the series\n", "series_values = series_values[:100]\n", "\n", "# retrieve starting date of recording and series length to generate the datetime index\n", "start_date = \"28-06-00 12:00\"\n", "future_dates = pd.date_range(start=start_date, periods=len(series_values), freq=\"W\")\n", "data = pd.DataFrame(series_values.to_numpy(), index=future_dates, columns=series_ids)\n", "data.index = np.arange(0, len(data))\n", "\n", "y = pd.DataFrame(data[\"W142\"])\n", "X = pd.DataFrame(data[\"W143\"])" ] }, { "cell_type": "markdown", "id": "45edfc0f", "metadata": {}, "source": [ "We then split it using a temporal train-test split as done previously." ] }, { "cell_type": "code", "execution_count": 21, "id": "2676caa2", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:43.530359Z", "iopub.status.busy": "2025-04-25T10:14:43.529948Z", "iopub.status.idle": "2025-04-25T10:14:43.583691Z", "shell.execute_reply": "2025-04-25T10:14:43.583181Z" } }, "outputs": [], "source": [ "X_train_df, X_test_df = temporal_train_test_split(X, train_size=0.9)\n", "y_train_df, y_test_df = temporal_train_test_split(y, train_size=0.9)" ] }, { "cell_type": "markdown", "id": "3d9f2c69", "metadata": {}, "source": [ "We will now fit the pipeline on this data. For the single-target forecasting task with additional variables, the pipeline considers all available models by default. However, the models that actually support additional variables are the following:\n", "- `LGBMForecaster`\n", "- `ExtraTreesForecaster`\n", "- `XGBForecaster`\n", "- `SARIMAXForecaster`\n", "- `ProphetForecaster`\n", "These models also have the option to discard additional variables. This can be set as a boolean hyperparameter called `use_X`." ] }, { "cell_type": "code", "execution_count": 22, "id": "dc89c770", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:43.585670Z", "iopub.status.busy": "2025-04-25T10:14:43.585299Z", "iopub.status.idle": "2025-04-25T10:14:56.268715Z", "shell.execute_reply": "2025-04-25T10:14:56.268058Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:43,695] [automlx.data_transform] Number of simple differencing orders required: d = 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:43,697] [automlx.data_transform] Seasonal Periodicities; from decomposed/adjusted: [1]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:43,743] [automlx.interface] Dataset shape: (90,3)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:43,827] [automlx.data_transform] Running preprocessing. Number of features: 4\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:43,934] [automlx.data_transform] Preprocessing completed. Took 0.107 secs\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:43,960] [automlx.process] Running Model Generation\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:44,005] [automlx] Provided model (SARIMAXForecaster) is not supported.Supported models are: ['LGBMForecaster', 'ExtraTreesForecaster', 'ExpSmoothForecaster', 'NaiveForecaster', 'ThetaForecaster', 'ETSForecaster', 'XGBForecaster']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:44,005] [automlx] Provided model (ProphetForecaster) is not supported.Supported models are: ['LGBMForecaster', 'ExtraTreesForecaster', 'ExpSmoothForecaster', 'NaiveForecaster', 'ThetaForecaster', 'ETSForecaster', 'XGBForecaster']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:44,007] [automlx.process] Model Generation completed.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:44,043] [automlx.model_selection] Running Model Selection\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:45,991] [automlx.model_selection] Model Selection completed - Took 1.948 sec - Selected models: [['XGBForecaster']]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:46,045] [automlx.trials] Running Model Tuning for ['XGBForecaster']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:55,529] [automlx.trials] Best parameters for XGBForecaster: {'differencing_order': 1, 'acf_local_maxima': '[4, 9, 18, 22, 14, 31, 26, 12, 1]', 'use_X': True, 'n_estimators': 16, 'max_depth': 2}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:55,530] [automlx.trials] Model Tuning completed. Took: 9.485 secs\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:55,869] [automlx.interface] Re-fitting pipeline\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:55,879] [automlx.final_fit] Skipping updating parameter seed, already fixed by FinalFit_ea8a88bb-f\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:56,184] [automlx.interface] AutoMLx completed.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selected model: XGBForecaster\n", "Selected model params: {'differencing_order': 1, 'acf_local_maxima': '[4, 9, 18, 22, 14, 31, 26, 12, 1]', 'use_X': True, 'n_estimators': 16, 'max_depth': 2}\n" ] } ], "source": [ "est2 = automlx.Pipeline(\n", " task=\"forecasting\",\n", " model_list=[\n", " \"LGBMForecaster\",\n", " \"ExtraTreesForecaster\",\n", " \"XGBForecaster\",\n", " \"SARIMAXForecaster\",\n", " \"ProphetForecaster\",\n", " ],\n", ")\n", "est2.fit(X=X_train_df, y=y_train_df)\n", "\n", "print(\"Selected model: {}\".format(est2.selected_model_))\n", "print(\"Selected model params: {}\".format(est2.selected_model_params_))" ] }, { "cell_type": "markdown", "id": "27056cd8", "metadata": {}, "source": [ "\n", "## Multi-target Forecasting with Exogenous Variables" ] }, { "cell_type": "markdown", "id": "636c1265", "metadata": {}, "source": [ "For this use case, we now take 3 variables from the M4 dataset: two target variables (`W142`, `W143`) and one additional variables (`W141`). We will add a constant variable as an additional variable, so we have a total of two additional variables. We then split the data using a temporal train-test split and drop the datetime index, as done previously," ] }, { "cell_type": "code", "execution_count": 23, "id": "14588df6", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:56.271066Z", "iopub.status.busy": "2025-04-25T10:14:56.270374Z", "iopub.status.idle": "2025-04-25T10:14:56.486358Z", "shell.execute_reply": "2025-04-25T10:14:56.485765Z" } }, "outputs": [], "source": [ "series_ids = [\"W141\", \"W142\", \"W143\"]\n", "series_values = all_series.loc[series_ids].T\n", "\n", "# drop NaNs for the time period where data wasn't recorded\n", "series_values.dropna(inplace=True)\n", "# we will take the first 100 elements of the series\n", "series_values = series_values[:100]\n", "\n", "\n", "# retrieve starting date of recording and series length to generate the datetime index\n", "start_date = \"28-06-00 12:00\"\n", "future_dates = pd.date_range(start=start_date, periods=len(series_values), freq=\"W\")\n", "data = pd.DataFrame(series_values.to_numpy(), index=future_dates, columns=series_ids)\n", "data.index = np.arange(0, len(data))\n", "\n", "y = data[[\"W142\", \"W143\"]]\n", "X = pd.DataFrame(data[\"W141\"])\n", "# adding the constant variable\n", "X[\"const\"] = 1\n", "\n", "X_train_df, X_test_df = temporal_train_test_split(X, train_size=0.9)\n", "y_train_df, y_test_df = temporal_train_test_split(y, train_size=0.9)" ] }, { "cell_type": "markdown", "id": "30717529", "metadata": {}, "source": [ "\n", "### Advanced AutoML Configuration\n", "\n", "You can also configure the pipeline with suitable parameters according to your needs.\n", "For the Multi-target forecasting task, the pipeline only considers two models : `VARMAX` and `DynFactor`." ] }, { "cell_type": "code", "execution_count": 24, "id": "1c7c17c9", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:56.488434Z", "iopub.status.busy": "2025-04-25T10:14:56.487971Z", "iopub.status.idle": "2025-04-25T10:14:56.541643Z", "shell.execute_reply": "2025-04-25T10:14:56.541053Z" } }, "outputs": [], "source": [ "custom_pipeline = automlx.Pipeline(\n", " task=\"forecasting\", # Supports 'classification', regression', 'anomaly_detection' and 'forecasting'\n", " model_list=[ # Specify the models you want the AutoMLx to consider\n", " \"DynFactorForecaster\",\n", " \"VARMAXForecaster\",\n", " ],\n", " n_algos_tuned=2, # Choose how many models to tune\n", " preprocessing=True, # Disable or enable Preprocessing step. Default to `True`\n", " search_space={}, # You can specify the hyper-parameters and ranges we search\n", " max_tuning_trials=2, # The maximum number of tuning trials. Can be integer or Dict (max number for each model)\n", " score_metric=\"neg_sym_mean_abs_percent_error\", # Any scikit-learn metric or a custom function\n", " time_series_period=None, # The period of time series\n", ")" ] }, { "cell_type": "markdown", "id": "21dedf2f", "metadata": {}, "source": [ "\n", "### Specify the number of cross-validation (CV) folds\n", "AutoML automatically decides how many folds to create, given the length of the input series. This is dependent on the frequency and length of the series.\n", "In the above, the preprocessor chose to create two folds. In the following we set the number of folds to 8." ] }, { "cell_type": "code", "execution_count": 25, "id": "8905fe4f", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:56.543674Z", "iopub.status.busy": "2025-04-25T10:14:56.543209Z", "iopub.status.idle": "2025-04-25T10:14:58.752419Z", "shell.execute_reply": "2025-04-25T10:14:58.751819Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:56,679] [automlx.data_transform] Number of simple differencing orders required: d = 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:56,681] [automlx.data_transform] Seasonal Periodicities; from decomposed/adjusted: [1]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:56,731] [automlx.interface] Dataset shape: (90,5)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:56,773] [automlx.interface] Model Tune disabled.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:56,812] [automlx.data_transform] Running preprocessing. Number of features: 6\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:56,927] [automlx.data_transform] Preprocessing completed. Took 0.115 secs\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:56,955] [automlx.process] Running Model Generation\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:56,995] [automlx.process] Model Generation completed.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:57,028] [automlx.model_selection] Running Model Selection\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:57,029] [automlx.trials] Fewer models (2) than top_k (2) provided, skipping...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:57,063] [automlx.interface] Re-fitting pipeline\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:57,080] [automlx.final_fit] Skipping updating parameter seed, already fixed by FinalFit_d557d931-8\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:58,713] [automlx.interface] AutoMLx completed.\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "custom_pipeline.fit(X=X_train_df, y=y_train_df, cv=8)" ] }, { "cell_type": "markdown", "id": "23427ab6", "metadata": {}, "source": [ "The AutoML pipeline provides attributes to get the selected features, the chosen model, hyperparameters as well as the score on the test set." ] }, { "cell_type": "code", "execution_count": 26, "id": "dc8e6524", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:58.754536Z", "iopub.status.busy": "2025-04-25T10:14:58.754048Z", "iopub.status.idle": "2025-04-25T10:14:58.839473Z", "shell.execute_reply": "2025-04-25T10:14:58.838768Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:58,824] [automlx.model] Predict called on DynFactorForecaster that's not been fitted.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Ranked models: ['DynFactorForecaster', 'VARMAXForecaster']\n", "Selected model: DynFactorForecaster\n", "Selected model params: {'k_factors': 1, 'error_order': 2, 'factor_order': 2, 'error_cov_type': 'diagonal', 'use_X': True, 'error_var': False, 'enforce_stationarity': True}\n", "Score on test data : -0.45821993166134833\n" ] } ], "source": [ "test_score = custom_pipeline.score(X=X_test_df, y=y_test_df)\n", "\n", "print(\"Ranked models: {}\".format(custom_pipeline.ranked_models_))\n", "print(\"Selected model: {}\".format(custom_pipeline.selected_model_))\n", "print(\"Selected model params: {}\".format(custom_pipeline.selected_model_params_))\n", "print(f\"Score on test data : {test_score}\")" ] }, { "cell_type": "markdown", "id": "e45a1035", "metadata": {}, "source": [ "\n", "### Make predictions" ] }, { "cell_type": "markdown", "id": "8316f4ff", "metadata": {}, "source": [ "As mention in the univariate data case, there are two ways of making a prediction :\n", "- `forecast(k)` allows one to predict k steps after the end of the training data. It should be used when one wants to make out-of-sample predictions\n", "- `predict(X)` returns predictions at the timestamps given as argument. It should be used when one wants to make in-sample predictions and out-of-sample predictions. It does not support confidence intervals.\n", "\n", "In the cell below `predict()` is used on the last 5 timestamps of the train set, and all timestamps of the test set. `forecast()` is used to predict k steps after the training set, where k is the size of the test set." ] }, { "cell_type": "code", "execution_count": 27, "id": "de31dbf3", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:58.841523Z", "iopub.status.busy": "2025-04-25T10:14:58.841033Z", "iopub.status.idle": "2025-04-25T10:14:58.935561Z", "shell.execute_reply": "2025-04-25T10:14:58.934975Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:58,902] [automlx.model] Predict called on DynFactorForecaster that's not been fitted.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:58,923] [automlx.model] Forecast called on DynFactorForecaster that's not been fitted.\n" ] } ], "source": [ "y_pred = custom_pipeline.predict(pd.concat([X_train_df[-5:0], X_test_df], axis=0))\n", "y_forecast = custom_pipeline.forecast(\n", " len(y_test_df), alpha=0.8, X=X_test_df\n", ") # out-of-sample forecast" ] }, { "cell_type": "markdown", "id": "e3497ce7", "metadata": {}, "source": [ "The obtained forecast contains predictions for the two target variables, as well as lower and upper confidence intervals, for each timestamp in the test set." ] }, { "cell_type": "code", "execution_count": 28, "id": "d58c188b", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:58.937459Z", "iopub.status.busy": "2025-04-25T10:14:58.937034Z", "iopub.status.idle": "2025-04-25T10:14:58.993215Z", "shell.execute_reply": "2025-04-25T10:14:58.992651Z" } }, "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", "
W142W143W142_ci_lowerW142_ci_upper
901525.3643114120.7052041516.1395101534.589111
911532.8628464110.9924261519.2461541546.479538
921522.7725894118.8505331506.0489221539.496256
931520.1962384119.0498321501.0579871539.334490
941520.7075824115.9752991499.5812271541.833938
951514.1549624119.7415081491.3279471536.981976
961514.3790384116.6553941490.0578211538.700255
971509.6173284118.4231021483.9573221535.277333
981513.4221284111.6233661486.5446541540.299602
991505.5488974116.3661541477.5514761533.546318
\n", "
" ], "text/plain": [ " W142 W143 W142_ci_lower W142_ci_upper\n", "90 1525.364311 4120.705204 1516.139510 1534.589111\n", "91 1532.862846 4110.992426 1519.246154 1546.479538\n", "92 1522.772589 4118.850533 1506.048922 1539.496256\n", "93 1520.196238 4119.049832 1501.057987 1539.334490\n", "94 1520.707582 4115.975299 1499.581227 1541.833938\n", "95 1514.154962 4119.741508 1491.327947 1536.981976\n", "96 1514.379038 4116.655394 1490.057821 1538.700255\n", "97 1509.617328 4118.423102 1483.957322 1535.277333\n", "98 1513.422128 4111.623366 1486.544654 1540.299602\n", "99 1505.548897 4116.366154 1477.551476 1533.546318" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_forecast" ] }, { "cell_type": "markdown", "id": "29346327", "metadata": {}, "source": [ "One can also directly compute the score of the tuned model on the test set, without needing to run `forecast()` or `predict()`." ] }, { "cell_type": "code", "execution_count": 29, "id": "807008fc", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:58.994809Z", "iopub.status.busy": "2025-04-25T10:14:58.994625Z", "iopub.status.idle": "2025-04-25T10:14:59.072449Z", "shell.execute_reply": "2025-04-25T10:14:59.071866Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2025-04-25 03:14:59,059] [automlx.model] Predict called on DynFactorForecaster that's not been fitted.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Tuned model testing score (negative sMAPE): -0.45821993166134833\n" ] } ], "source": [ "print(\n", " \"Tuned model testing score (negative sMAPE): \", custom_pipeline.score(X=X_test_df, y=y_test_df)\n", ")" ] }, { "cell_type": "markdown", "id": "694b768b", "metadata": {}, "source": [ "\n", "### Visualization" ] }, { "cell_type": "markdown", "id": "d2c3c4ca", "metadata": {}, "source": [ "Finally, when given as input the forecasted variables, the `plot_forecast()` method displays an interactive plot of the predictions (for each target variable) and confidence intervals." ] }, { "cell_type": "code", "execution_count": 30, "id": "8a295bf1", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:59.074440Z", "iopub.status.busy": "2025-04-25T10:14:59.073912Z", "iopub.status.idle": "2025-04-25T10:14:59.338725Z", "shell.execute_reply": "2025-04-25T10:14:59.338130Z" } }, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "fill": "toself", "fillcolor": "#4C78A8", "legendgroup": "Prediction", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 99.0, 98.0, 97.0, 96.0, 95.0, 94.0, 93.0, 92.0, 91.0, 90.0 ], "xaxis": "x", "y": [ 1534.5891111956576, 1546.4795384824831, 1539.4962559434423, 1539.3344895468028, 1541.8339375655014, 1536.9819762583322, 1538.700254506748, 1535.277333083187, 1540.2996023416863, 1533.546318424402, 1477.5514761195377, 1486.5446539624222, 1483.9573223810708, 1490.0578207379176, 1491.3279472668075, 1499.5812269519217, 1501.0579869596193, 1506.0489215664268, 1519.2461543833736, 1516.139509813104 ], "yaxis": "y" }, { "legendgroup": "Prediction", "line": { "color": "#4C78A8" }, "mode": "lines+markers", "name": "Prediction", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0 ], "xaxis": "x", "y": [ 1525.364310504381, 1532.8628464329283, 1522.7725887549345, 1520.196238253211, 1520.7075822587115, 1514.1549617625699, 1514.3790376223328, 1509.6173277321288, 1513.4221281520543, 1505.5488972719697 ], "yaxis": "y" }, { "fill": "toself", "fillcolor": "#F58518", "legendgroup": "Train", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 89.0, 88.0, 87.0, 86.0, 85.0, 84.0, 83.0, 82.0, 81.0, 80.0, 79.0, 78.0, 77.0, 76.0, 75.0, 74.0, 73.0, 72.0, 71.0, 70.0, 69.0, 68.0, 67.0, 66.0, 65.0, 64.0, 63.0, 62.0, 61.0, 60.0, 59.0, 58.0, 57.0, 56.0, 55.0, 54.0, 53.0, 52.0, 51.0, 50.0, 49.0, 48.0, 47.0, 46.0, 45.0, 44.0, 43.0, 42.0, 41.0, 40.0, 39.0, 38.0, 37.0, 36.0, 35.0, 34.0, 33.0, 32.0, 31.0, 30.0, 29.0, 28.0, 27.0, 26.0, 25.0, 24.0, 23.0, 22.0, 21.0, 20.0, 19.0, 18.0, 17.0, 16.0, 15.0, 14.0, 13.0, 12.0, 11.0, 10.0, 9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0 ], "xaxis": "x", "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ], "yaxis": "y" }, { "legendgroup": "Train", "line": { "color": "#F58518" }, "mode": "lines+markers", "name": "Train", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0 ], "xaxis": "x", "y": [ 1338.691, 1512.127, 1503.706, 1521.422, 1517.284, 1522.387, 1540.194, 1575.514, 1597.376, 1600.653, 1598.694, 1596.469, 1649.153, 1640.093, 1464.023, 1445.306, 1458.048, 1456.693, 1444.827, 1417.193, 1472.45, 1496.114, 1508.22, 1485.716, 1498.843, 1557.6, 1595.26, 1586.137, 1544.531, 1552.0, 1544.237, 1516.072, 1484.716, 1488.813, 1495.246, 1465.603, 1444.157, 1437.984, 1444.996, 1465.179, 1490.596, 1490.574, 1510.28, 1519.581, 1521.017, 1503.632, 1527.752, 1533.096, 1521.877, 1497.604, 1481.572, 1496.721, 1516.269, 1456.325, 1446.718, 1456.157, 1474.601, 1486.51, 1473.592, 1500.433, 1518.965, 1512.185, 1505.922, 1491.647, 1521.804, 1494.195, 1484.124, 1513.445, 1570.373, 1584.609, 1596.833, 1584.59, 1538.57, 1584.431, 1598.53, 1564.804, 1577.664, 1617.531, 1660.295, 1629.099, 1673.088, 1666.0, 1664.408, 1641.248, 1593.597, 1538.349, 1573.459, 1576.235, 1553.677, 1528.183 ], "yaxis": "y" }, { "fill": "toself", "fillcolor": "#E45756", "legendgroup": "test", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": true, "type": "scatter", "x": [ 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 99.0, 98.0, 97.0, 96.0, 95.0, 94.0, 93.0, 92.0, 91.0, 90.0 ], "xaxis": "x", "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ], "yaxis": "y" }, { "legendgroup": "test", "line": { "color": "#E45756" }, "mode": "lines+markers", "name": "test", "opacity": 1, "showlegend": true, "type": "scatter", "x": [ 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0 ], "xaxis": "x", "y": [ 1559.717, 1572.9, 1724.804, 1722.344, 1776.512, 1791.344, 1752.614, 1743.35, 1761.933, 1743.867 ], "yaxis": "y" }, { "fill": "toself", "fillcolor": "#4C78A8", "legendgroup": "Prediction", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": false, "type": "scatter", "x": [ 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 99.0, 98.0, 97.0, 96.0, 95.0, 94.0, 93.0, 92.0, 91.0, 90.0 ], "xaxis": "x2", "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ], "yaxis": "y2" }, { "legendgroup": "Prediction", "line": { "color": "#4C78A8" }, "mode": "lines+markers", "name": "Prediction", "opacity": 1, "showlegend": false, "type": "scatter", "x": [ 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0 ], "xaxis": "x2", "y": [ 4120.70520359229, 4110.992425653554, 4118.850533460191, 4119.049831891858, 4115.975299405065, 4119.741507682142, 4116.655393978115, 4118.423102173858, 4111.623366021483, 4116.366153695714 ], "yaxis": "y2" }, { "fill": "toself", "fillcolor": "#F58518", "legendgroup": "Train", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": false, "type": "scatter", "x": [ 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 89.0, 88.0, 87.0, 86.0, 85.0, 84.0, 83.0, 82.0, 81.0, 80.0, 79.0, 78.0, 77.0, 76.0, 75.0, 74.0, 73.0, 72.0, 71.0, 70.0, 69.0, 68.0, 67.0, 66.0, 65.0, 64.0, 63.0, 62.0, 61.0, 60.0, 59.0, 58.0, 57.0, 56.0, 55.0, 54.0, 53.0, 52.0, 51.0, 50.0, 49.0, 48.0, 47.0, 46.0, 45.0, 44.0, 43.0, 42.0, 41.0, 40.0, 39.0, 38.0, 37.0, 36.0, 35.0, 34.0, 33.0, 32.0, 31.0, 30.0, 29.0, 28.0, 27.0, 26.0, 25.0, 24.0, 23.0, 22.0, 21.0, 20.0, 19.0, 18.0, 17.0, 16.0, 15.0, 14.0, 13.0, 12.0, 11.0, 10.0, 9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0 ], "xaxis": "x2", "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ], "yaxis": "y2" }, { "legendgroup": "Train", "line": { "color": "#F58518" }, "mode": "lines+markers", "name": "Train", "opacity": 1, "showlegend": false, "type": "scatter", "x": [ 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0 ], "xaxis": "x2", "y": [ 4000.704, 4011.147, 4007.874, 4003.091, 4011.331, 4031.912, 4032.696, 4061.049, 4074.196, 4126.678, 4119.085, 4117.252, 4109.539, 4076.871, 4083.803, 4079.6, 4071.621, 4066.984, 4088.988, 4102.558, 4070.722, 4061.746, 4080.494, 4092.771, 4074.66, 4081.694, 4116.699, 4133.997, 4129.192, 4134.355, 4161.23, 4176.101, 4174.634, 4183.858, 4183.077, 4150.112, 4149.633, 4119.999, 4115.063, 4085.733, 4100.779, 4092.56, 4095.493, 4100.097, 4041.782, 4034.67, 4029.267, 4031.839, 4073.919, 4107.331, 4094.887, 4072.821, 4107.883, 4128.606, 4107.567, 4100.182, 4107.457, 4151.869, 4176.522, 4119.651, 4122.783, 4133.288, 4160.416, 4135.408, 4129.937, 4108.212, 4129.15, 4117.737, 4111.308, 4093.978, 4128.54, 4184.05, 4163.96, 4166.186, 4170.053, 4203.581, 4189.28, 4172.944, 4186.974, 4222.289, 4189.879, 4154.995, 4190.728, 4218.845, 4184.276, 4102.655, 4113.459, 4129.2, 4116.497, 4122.42 ], "yaxis": "y2" }, { "fill": "toself", "fillcolor": "#E45756", "legendgroup": "test", "line": { "color": "rgba(0,0,0,0)" }, "name": "Confidence Interval", "opacity": 0.3, "showlegend": false, "type": "scatter", "x": [ 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 99.0, 98.0, 97.0, 96.0, 95.0, 94.0, 93.0, 92.0, 91.0, 90.0 ], "xaxis": "x2", "y": [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ], "yaxis": "y2" }, { "legendgroup": "test", "line": { "color": "#E45756" }, "mode": "lines+markers", "name": "test", "opacity": 1, "showlegend": false, "type": "scatter", "x": [ 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0 ], "xaxis": "x2", "y": [ 4118.744, 4174.22, 4214.455, 4187.138, 4167.62, 4189.641, 4241.586, 4269.862, 4173.12, 4198.857 ], "yaxis": "y2" } ], "layout": { "annotations": [ { "font": { "size": 16 }, "showarrow": false, "text": "variable=W142", "textangle": 90, "x": 0.98, "xanchor": "left", "xref": "paper", "y": 0.7928571428571429, "yanchor": "middle", "yref": "paper" }, { "font": { "size": 16 }, "showarrow": false, "text": "variable=W143", "textangle": 90, "x": 0.98, "xanchor": "left", "xref": "paper", "y": 0.29285714285714287, "yanchor": "middle", "yref": "paper" } ], "height": 700, "margin": { "b": 50, "t": 75 }, "plot_bgcolor": "rgba(0,0,0,0)", "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Selected Model: DynFactorForecaster
Model params: {'k_factors': 1, 'error_order': 2, 'factor_order': 2, 'error_cov_type': 'diagonal', 'use_X': True, 'error_var': False, 'enforce_stationarity': True}", "x": 0.5 }, "width": 850, "xaxis": { "anchor": "y", "categoryorder": "category ascending", "domain": [ 0.07058823529411765, 0.98 ], "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "matches": "x", "mirror": true, "range": [ -4.95, 103.95 ], "scaleanchor": "x", "showline": true, "showticklabels": true, "side": "bottom", "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 }, "xaxis2": { "anchor": "y2", "categoryorder": "category ascending", "domain": [ 0.07058823529411765, 0.98 ], "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "matches": "x", "mirror": true, "range": [ -4.95, 103.95 ], "scaleanchor": "x", "showline": true, "showticklabels": true, "side": "bottom", "title": { "text": "Date" }, "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 }, "yaxis": { "anchor": "x", "categoryorder": "category ascending", "domain": [ 0.5857142857142857, 1.0 ], "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "matches": "y", "mirror": true, "range": [ 1192.13245, 4416.42055 ], "scaleanchor": "y", "showline": true, "showticklabels": true, "side": "left", "title": { "text": "Variable" }, "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 }, "yaxis2": { "anchor": "x2", "categoryorder": "category ascending", "domain": [ 0.08571428571428572, 0.5 ], "gridcolor": "LightGrey", "linecolor": "Grey", "linewidth": 1, "matches": "y", "mirror": true, "range": [ 1192.13245, 4416.42055 ], "scaleanchor": "y", "showline": true, "showticklabels": true, "side": "left", "title": { "text": "Variable" }, "visible": true, "zeroline": true, "zerolinecolor": "DarkGrey", "zerolinewidth": 1 } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "custom_pipeline.plot_forecast(predictions=y_forecast, additional_frames=dict(test=y_test_df))" ] }, { "cell_type": "markdown", "id": "0592efb2", "metadata": {}, "source": [ "\n", "## Machine Learning Explainability (MLX)" ] }, { "cell_type": "markdown", "id": "1151ab23", "metadata": {}, "source": [ "For a variety of decision-making tasks, getting only a prediction as model output is not sufficient. A user may wish to know why the model outputs that prediction, or which data features are relevant for that prediction. For that purpose the Oracle AutoMLx solution defines the MLExplainer object, which allows to compute multiple types of model explanations." ] }, { "cell_type": "markdown", "id": "5434138a", "metadata": {}, "source": [ "\n", "### Initializing an MLExplainer" ] }, { "cell_type": "markdown", "id": "43a9a2e8", "metadata": {}, "source": [ "The `MLExplainer` object takes as arguments the trained model, the training data and labels, as well as the task. Let's assume that we want to learn more about the decision-making process of the model `est1` that we trained based on the M4 dataset (Finance_W142) previously. Thus, we pass `est1` along with its training series (`y_train`) to the `MLExplainer` to produce the appropriate explainer." ] }, { "cell_type": "code", "execution_count": 31, "id": "d534dbf2", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:59.340708Z", "iopub.status.busy": "2025-04-25T10:14:59.340519Z", "iopub.status.idle": "2025-04-25T10:14:59.511540Z", "shell.execute_reply": "2025-04-25T10:14:59.510951Z" } }, "outputs": [], "source": [ "explainer = automlx.MLExplainer(est1,\n", " None,\n", " y_train,\n", " task=\"forecasting\")" ] }, { "cell_type": "markdown", "id": "cc5c1691", "metadata": {}, "source": [ "\n", "### Prediction Explanations (Comparative Feature Importance)" ] }, { "cell_type": "markdown", "id": "ba874fbb", "metadata": {}, "source": [ "For any data point within the forecasting horizon, explanations indicate which factors increased or decreased the model's prediction compared to a previous reference point. This comparison provides additional context, making the information more interpretable for the user.\n", "\n", "The function `explain_prediction()` calculates the comparative feature importance for a specified datapoint. For example, if you want to explore the model's predictions and understand the impact of various temporal concepts on the decision-making process for the forecast 10 time steps in the future, you can obtain the prediction explanation as shown below." ] }, { "cell_type": "code", "execution_count": 32, "id": "62a055cd", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:14:59.513684Z", "iopub.status.busy": "2025-04-25T10:14:59.513195Z", "iopub.status.idle": "2025-04-25T10:15:07.142282Z", "shell.execute_reply": "2025-04-25T10:15:07.141655Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0f05c31fac754ed09834b6055a744095", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/1 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FeatureAttribution
0Yearly periodicity of Finance_W14267.238872
1Trend of Finance_W14217.761128
\n", "" ], "text/plain": [ " Feature Attribution\n", "0 Yearly periodicity of Finance_W142 67.238872\n", "1 Trend of Finance_W142 17.761128" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exp[0].to_dataframe(n_features=10)" ] }, { "cell_type": "code", "execution_count": 34, "id": "ce5a9426", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:15:07.395521Z", "iopub.status.busy": "2025-04-25T10:15:07.394957Z", "iopub.status.idle": "2025-04-25T10:15:08.613813Z", "shell.execute_reply": "2025-04-25T10:15:08.613180Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c583a8f38033476b9e9a230b9ebf2e35", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FigureWidget({\n", " 'data': [{'base': 5052,\n", " 'hovertemplate': 'On 2016-04-03, the observed Finance_W142 is 5054.0.',\n", " 'marker': {'color': 'Black'},\n", " 'name': 'Reference: Finance_W142 at 2016-04-03',\n", " 'orientation': 'h',\n", " 'type': 'bar',\n", " 'uid': 'eacdf40b-9edc-4341-a8e0-08443adfe78d',\n", " 'x': [2.0],\n", " 'y': [Reference: Finance_W142 at 2016-04-03]},\n", " {'base': 5054.0,\n", " 'hovertemplate': ('Yearly periodicity of Finance_' ... 'd at 2016-04-03'),\n", " 'marker': {'color': 'rgb(248,0,0)'},\n", " 'name': 'Yearly periodicity of Finance_W142',\n", " 'orientation': 'h',\n", " 'type': 'bar',\n", " 'uid': '50e83bd1-15de-45da-a85b-4ad41aa50cd3',\n", " 'x': [63.758871964261],\n", " 'y': [Yearly periodicity of Finance_W142]},\n", " {'base': 5121.238871964261,\n", " 'hovertemplate': ('Trend of Finance_W142 increase' ... 'd at 2016-04-03'),\n", " 'marker': {'color': 'rgb(248,0,0)'},\n", " 'name': 'Trend of Finance_W142',\n", " 'orientation': 'h',\n", " 'type': 'bar',\n", " 'uid': 'aaee35c1-8746-4033-99f9-48694ae5d30a',\n", " 'x': [14.281128035739012],\n", " 'y': [Trend of Finance_W142]},\n", " {'base': 5052,\n", " 'hovertemplate': ('On 2016-06-12, the prediction ' ... ' 2016-04-03
'),\n", " 'marker': {'color': 'rgb(0, 0, 128)'},\n", " 'name': 'Predicted Finance_W142 at 2016-06-12',\n", " 'orientation': 'h',\n", " 'type': 'bar',\n", " 'uid': 'e841c574-0420-4797-8908-c93380c4c75f',\n", " 'x': [87.0],\n", " 'y': [Predicted Finance_W142 at 2016-06-12]}],\n", " 'layout': {'bargap': 0.4,\n", " 'margin': {'b': 50, 'l': 50, 'r': 50, 't': 50},\n", " 'plot_bgcolor': 'white',\n", " 'shapes': [{'fillcolor': 'rgb(248,0,0)',\n", " 'line': {'width': 0},\n", " 'path': 'M5117.584871964261,0.5 L5121.238871964261,1 L5117.584871964261,1.5 Z',\n", " 'type': 'path'},\n", " {'line': {'color': 'Grey', 'dash': 'dot', 'width': 1},\n", " 'path': 'M5054.0,0 L5054.0,1',\n", " 'type': 'path'},\n", " {'fillcolor': 'rgb(248,0,0)',\n", " 'line': {'width': 0},\n", " 'path': 'M5135.346,1.5 L5139.0,2 L5135.346,2.5 Z',\n", " 'type': 'path'},\n", " {'line': {'color': 'Grey', 'dash': 'dot', 'width': 1},\n", " 'path': 'M5121.238871964261,1 L5121.238871964261,2',\n", " 'type': 'path'},\n", " {'line': {'color': 'Grey', 'dash': 'dot', 'width': 1},\n", " 'path': 'M5139.0,2 L5139.0,3',\n", " 'type': 'path'}],\n", " 'showlegend': False,\n", " 'template': '...',\n", " 'title': {'text': 'Contributions to the prediction at 2016-06-12 compared to 2016-04-03',\n", " 'x': 0.5,\n", " 'xanchor': 'center',\n", " 'y': 0.9,\n", " 'yanchor': 'top'},\n", " 'width': 800,\n", " 'xaxis': {'autorangeoptions': {'minallowed': 5052},\n", " 'linecolor': 'DarkGrey',\n", " 'linewidth': 2,\n", " 'range': [5052, None],\n", " 'showgrid': True,\n", " 'title': {'text': 'Finance_W142'},\n", " 'zeroline': False},\n", " 'yaxis': {'linecolor': 'DarkGrey', 'linewidth': 2, 'showgrid': False, 'showline': True}}\n", "})" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exp[0].show_in_notebook()" ] }, { "cell_type": "markdown", "id": "8d84f084", "metadata": {}, "source": [ "The above explanation provided a comparative analysis of the specified forecast time point versus the default reference time point, which is automatically set to the last observation in the training data. However, advanced users can change the reference and set it to another observation (-13, the most recent peak, in this example) in the training data as shown below." ] }, { "cell_type": "code", "execution_count": 35, "id": "f3683877", "metadata": { "execution": { "iopub.execute_input": "2025-04-25T10:15:08.616121Z", "iopub.status.busy": "2025-04-25T10:15:08.615551Z", "iopub.status.idle": "2025-04-25T10:15:09.865927Z", "shell.execute_reply": "2025-04-25T10:15:09.865353Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "212b3f5994ce40a6a2298d50f8f0d8cf", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/1 [00:00',\n", " 'marker': {'color': 'Black'},\n", " 'name': 'Reference: Finance_W142 at 2016-01-10',\n", " 'orientation': 'h',\n", " 'type': 'bar',\n", " 'uid': '1a53ee38-0a85-4fda-9098-7f62dabd68e6',\n", " 'x': [181.0],\n", " 'y': [Reference: Finance_W142 at 2016-01-10]},\n", " {'base': 5259.0,\n", " 'hovertemplate': ('Yearly periodicity of Finance_' ... 'd at 2016-01-10'),\n", " 'marker': {'color': 'DarkGrey'},\n", " 'name': 'Yearly periodicity of Finance_W142',\n", " 'orientation': 'h',\n", " 'type': 'bar',\n", " 'uid': '18a0d7ee-8936-4785-ae1a-2e093bd1a37f',\n", " 'x': [-171.55164600312818],\n", " 'y': [Yearly periodicity of Finance_W142]},\n", " {'base': 5080.208353996872,\n", " 'hovertemplate': ('Trend of Finance_W142 increase' ... 'd at 2016-01-10'),\n", " 'marker': {'color': 'rgb(248,0,0)'},\n", " 'name': 'Trend of Finance_W142',\n", " 'orientation': 'h',\n", " 'type': 'bar',\n", " 'uid': 'fcb4d8ca-7aad-4ff6-9c54-0b9048cd8b61',\n", " 'x': [51.55164600312816],\n", " 'y': [Trend of Finance_W142]},\n", " {'base': 5078,\n", " 'hovertemplate': ('On 2016-06-12, the prediction ' ... ' 2016-01-10
'),\n", " 'marker': {'color': 'rgb(0, 0, 128)'},\n", " 'name': 'Predicted Finance_W142 at 2016-06-12',\n", " 'orientation': 'h',\n", " 'type': 'bar',\n", " 'uid': 'c458d0ea-663f-4ed6-859e-a5fe4c7bf1c1',\n", " 'x': [61.0],\n", " 'y': [Predicted Finance_W142 at 2016-06-12]}],\n", " 'layout': {'bargap': 0.4,\n", " 'margin': {'b': 50, 'l': 50, 'r': 50, 't': 50},\n", " 'plot_bgcolor': 'white',\n", " 'shapes': [{'fillcolor': 'DarkGrey',\n", " 'line': {'width': 0},\n", " 'path': 'M5087.8103539968715,0.5 L5080.208353996872,1 L5087.8103539968715,1.5 Z',\n", " 'type': 'path'},\n", " {'line': {'color': 'Grey', 'dash': 'dot', 'width': 1},\n", " 'path': 'M5259.0,0 L5259.0,1',\n", " 'type': 'path'},\n", " {'fillcolor': 'rgb(248,0,0)',\n", " 'line': {'width': 0},\n", " 'path': 'M5131.398,1.5 L5139.0,2 L5131.398,2.5 Z',\n", " 'type': 'path'},\n", " {'line': {'color': 'Grey', 'dash': 'dot', 'width': 1},\n", " 'path': 'M5080.208353996872,1 L5080.208353996872,2',\n", " 'type': 'path'},\n", " {'line': {'color': 'Grey', 'dash': 'dot', 'width': 1},\n", " 'path': 'M5139.0,2 L5139.0,3',\n", " 'type': 'path'}],\n", " 'showlegend': False,\n", " 'template': '...',\n", " 'title': {'text': 'Contributions to the prediction at 2016-06-12 compared to 2016-01-10',\n", " 'x': 0.5,\n", " 'xanchor': 'center',\n", " 'y': 0.9,\n", " 'yanchor': 'top'},\n", " 'width': 800,\n", " 'xaxis': {'autorangeoptions': {'minallowed': 5078},\n", " 'linecolor': 'DarkGrey',\n", " 'linewidth': 2,\n", " 'range': [5078, None],\n", " 'showgrid': True,\n", " 'title': {'text': 'Finance_W142'},\n", " 'zeroline': False},\n", " 'yaxis': {'linecolor': 'DarkGrey', 'linewidth': 2, 'showgrid': False, 'showline': True}}\n", "})" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "advanced_exp = explainer.explain_prediction(forecast_timepoints=[10], reference_timepoint=-13)\n", "advanced_exp[0].show_in_notebook()" ] }, { "cell_type": "markdown", "id": "c1358687", "metadata": {}, "source": [ "\n", "## References\n", "* Oracle AutoML: http://www.vldb.org/pvldb/vol13/p3166-yakovlev.pdf\n", "* sktime: https://www.sktime.org/en/latest/\n", "* statsmodels: https://www.statsmodels.org/stable/index.html\n", "* M4 Competition: https://mofc.unic.ac.cy/m4/\n", "* Airline Dataset: https://www.sktime.org/en/stable/api_reference/auto_generated/sktime.datasets.load_airline.html\n" ] } ], "metadata": { "jupytext": { "formats": "ipynb,py:percent" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.21" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "07c5fee45b234beda33a4b61c18d990b": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "084fb08f9b84470b8e7ad21437869fa7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_88b3e52535494ccca6cfa84123c37e68", "max": 1.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_a3a77a0079b64d6bb6e53b87e811ed4d", "tabbable": null, "tooltip": null, "value": 1.0 } }, "0e3841ed21bd420daccd1701fdb988f3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_e2c4a51fd33c49808bb06ff30a18dc4d", "max": 1.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_8d562d4f506d41ffb2820ec0fab4c72e", "tabbable": null, "tooltip": null, "value": 1.0 } }, "0f05c31fac754ed09834b6055a744095": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_85fe5472b2344377b098dd1cd9c33f63", "IPY_MODEL_0e3841ed21bd420daccd1701fdb988f3", "IPY_MODEL_cbd9f554a02b402abff09fdec900c161" ], "layout": "IPY_MODEL_3b3dc5e31ce24afa89a9de6cfe339a6f", "tabbable": null, "tooltip": null } }, "19f84bc3da514def8b7360f7affd563b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_35259396dc804453a3c663b5adaf880d", "placeholder": "​", "style": "IPY_MODEL_ec5431bbe8e64d93bd2887cb5e5ce6bd", "tabbable": null, "tooltip": null, "value": "100%" } }, "212b3f5994ce40a6a2298d50f8f0d8cf": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_19f84bc3da514def8b7360f7affd563b", "IPY_MODEL_084fb08f9b84470b8e7ad21437869fa7", "IPY_MODEL_38c8d0d529bb405db32b796af2edf50e" ], "layout": "IPY_MODEL_899bae1c617344d9ac67304e67540037", "tabbable": null, "tooltip": null } }, "2625ce0c52d94666bac11d2ce9ef19b2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "283e4c39c67d44caaaf6130c9c29ba5d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "2cca8deb83df4cec9b0c8acf662466b0": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "35259396dc804453a3c663b5adaf880d": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "38c8d0d529bb405db32b796af2edf50e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_2cca8deb83df4cec9b0c8acf662466b0", "placeholder": "​", "style": "IPY_MODEL_b6e6bddd6c494b6384f4fd2d58888f61", "tabbable": null, "tooltip": null, "value": " 1/1 [00:00<00:00, 81.46it/s]" } }, "3b3dc5e31ce24afa89a9de6cfe339a6f": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4e321cb0f40f4380b53d88313938f11f": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "85fe5472b2344377b098dd1cd9c33f63": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_4e321cb0f40f4380b53d88313938f11f", "placeholder": "​", "style": "IPY_MODEL_283e4c39c67d44caaaf6130c9c29ba5d", "tabbable": null, "tooltip": null, "value": "100%" } }, "88b3e52535494ccca6cfa84123c37e68": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "899bae1c617344d9ac67304e67540037": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "8c07d25700444aebb2731a1c60a1252b": { "model_module": "jupyterlab-plotly", "model_module_version": "^5.18.0", "model_name": "FigureModel", "state": { "_config": { "plotlyServerURL": "https://plot.ly" }, "_data": [ { "base": 5078, "hovertemplate": "On 2016-01-10, the observed Finance_W142 is 5259.0.", "marker": { "color": "Black" }, "name": "Reference: Finance_W142 at 2016-01-10", "orientation": "h", "type": "bar", "uid": "1a53ee38-0a85-4fda-9098-7f62dabd68e6", "x": [ 181.0 ], "y": [ "Reference: Finance_W142 at 2016-01-10" ] }, { "base": 5259.0, "hovertemplate": "Yearly periodicity of Finance_W142 decreased the model’s prediction at 2016-06-12
by -178.7916460031282 compared to the observed at 2016-01-10", "marker": { "color": "DarkGrey" }, "name": "Yearly periodicity of Finance_W142", "orientation": "h", "type": "bar", "uid": "18a0d7ee-8936-4785-ae1a-2e093bd1a37f", "x": [ -171.55164600312818 ], "y": [ "Yearly periodicity of Finance_W142" ] }, { "base": 5080.208353996872, "hovertemplate": "Trend of Finance_W142 increased the model’s prediction at 2016-06-12
by 58.791646003128164 compared to the observed at 2016-01-10", "marker": { "color": "rgb(248,0,0)" }, "name": "Trend of Finance_W142", "orientation": "h", "type": "bar", "uid": "fcb4d8ca-7aad-4ff6-9c54-0b9048cd8b61", "x": [ 51.55164600312816 ], "y": [ "Trend of Finance_W142" ] }, { "base": 5078, "hovertemplate": "On 2016-06-12, the prediction for Finance_W142
is expected to be 5139.0 which is lower than
the observed Finance_W142 at 2016-01-10
", "marker": { "color": "rgb(0, 0, 128)" }, "name": "Predicted Finance_W142 at 2016-06-12", "orientation": "h", "type": "bar", "uid": "c458d0ea-663f-4ed6-859e-a5fe4c7bf1c1", "x": [ 61.0 ], "y": [ "Predicted Finance_W142 at 2016-06-12" ] } ], "_dom_classes": [], "_js2py_layoutDelta": {}, "_js2py_pointsCallback": {}, "_js2py_relayout": {}, "_js2py_restyle": {}, "_js2py_traceDeltas": {}, "_js2py_update": {}, "_last_layout_edit_id": 0, "_last_trace_edit_id": 0, "_layout": { "bargap": 0.4, "margin": { "b": 50, "l": 50, "r": 50, "t": 50 }, "plot_bgcolor": "white", "shapes": [ { "fillcolor": "DarkGrey", "line": { "width": 0 }, "path": "M5087.8103539968715,0.5 L5080.208353996872,1 L5087.8103539968715,1.5 Z", "type": "path" }, { "line": { "color": "Grey", "dash": "dot", "width": 1 }, "path": "M5259.0,0 L5259.0,1", "type": "path" }, { "fillcolor": "rgb(248,0,0)", "line": { "width": 0 }, "path": "M5131.398,1.5 L5139.0,2 L5131.398,2.5 Z", "type": "path" }, { "line": { "color": "Grey", "dash": "dot", "width": 1 }, "path": "M5080.208353996872,1 L5080.208353996872,2", "type": "path" }, { "line": { "color": "Grey", "dash": "dot", "width": 1 }, "path": "M5139.0,2 L5139.0,3", "type": "path" } ], "showlegend": false, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Contributions to the prediction at 2016-06-12 compared to 2016-01-10", "x": 0.5, "xanchor": "center", "y": 0.9, "yanchor": "top" }, "width": 800, "xaxis": { "autorangeoptions": { "minallowed": 5078 }, "linecolor": "DarkGrey", "linewidth": 2, "range": [ 5078, null ], "showgrid": true, "title": { "text": "Finance_W142" }, "zeroline": false }, "yaxis": { "linecolor": "DarkGrey", "linewidth": 2, "showgrid": false, "showline": true } }, "_model_module": "jupyterlab-plotly", "_model_module_version": "^5.18.0", "_model_name": "FigureModel", "_py2js_addTraces": {}, "_py2js_animate": {}, "_py2js_deleteTraces": {}, "_py2js_moveTraces": {}, "_py2js_relayout": {}, "_py2js_removeLayoutProps": {}, "_py2js_removeTraceProps": {}, "_py2js_restyle": {}, "_py2js_update": {}, "_view_count": 0, "_view_module": "jupyterlab-plotly", "_view_module_version": "^5.18.0", "_view_name": "FigureView", "tabbable": null, "tooltip": null } }, "8d562d4f506d41ffb2820ec0fab4c72e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "a3a77a0079b64d6bb6e53b87e811ed4d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "b6e6bddd6c494b6384f4fd2d58888f61": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "c583a8f38033476b9e9a230b9ebf2e35": { "model_module": "jupyterlab-plotly", "model_module_version": "^5.18.0", "model_name": "FigureModel", "state": { "_config": { "plotlyServerURL": "https://plot.ly" }, "_data": [ { "base": 5052, "hovertemplate": "On 2016-04-03, the observed Finance_W142 is 5054.0.", "marker": { "color": "Black" }, "name": "Reference: Finance_W142 at 2016-04-03", "orientation": "h", "type": "bar", "uid": "eacdf40b-9edc-4341-a8e0-08443adfe78d", "x": [ 2.0 ], "y": [ "Reference: Finance_W142 at 2016-04-03" ] }, { "base": 5054.0, "hovertemplate": "Yearly periodicity of Finance_W142 increased the model’s prediction at 2016-06-12
by 67.238871964261 compared to the observed at 2016-04-03", "marker": { "color": "rgb(248,0,0)" }, "name": "Yearly periodicity of Finance_W142", "orientation": "h", "type": "bar", "uid": "50e83bd1-15de-45da-a85b-4ad41aa50cd3", "x": [ 63.758871964261 ], "y": [ "Yearly periodicity of Finance_W142" ] }, { "base": 5121.238871964261, "hovertemplate": "Trend of Finance_W142 increased the model’s prediction at 2016-06-12
by 17.761128035739013 compared to the observed at 2016-04-03", "marker": { "color": "rgb(248,0,0)" }, "name": "Trend of Finance_W142", "orientation": "h", "type": "bar", "uid": "aaee35c1-8746-4033-99f9-48694ae5d30a", "x": [ 14.281128035739012 ], "y": [ "Trend of Finance_W142" ] }, { "base": 5052, "hovertemplate": "On 2016-06-12, the prediction for Finance_W142
is expected to be 5139.0 which is higher than
the observed Finance_W142 at 2016-04-03
", "marker": { "color": "rgb(0, 0, 128)" }, "name": "Predicted Finance_W142 at 2016-06-12", "orientation": "h", "type": "bar", "uid": "e841c574-0420-4797-8908-c93380c4c75f", "x": [ 87.0 ], "y": [ "Predicted Finance_W142 at 2016-06-12" ] } ], "_dom_classes": [], "_js2py_layoutDelta": {}, "_js2py_pointsCallback": {}, "_js2py_relayout": {}, "_js2py_restyle": {}, "_js2py_traceDeltas": {}, "_js2py_update": {}, "_last_layout_edit_id": 0, "_last_trace_edit_id": 0, "_layout": { "bargap": 0.4, "margin": { "b": 50, "l": 50, "r": 50, "t": 50 }, "plot_bgcolor": "white", "shapes": [ { "fillcolor": "rgb(248,0,0)", "line": { "width": 0 }, "path": "M5117.584871964261,0.5 L5121.238871964261,1 L5117.584871964261,1.5 Z", "type": "path" }, { "line": { "color": "Grey", "dash": "dot", "width": 1 }, "path": "M5054.0,0 L5054.0,1", "type": "path" }, { "fillcolor": "rgb(248,0,0)", "line": { "width": 0 }, "path": "M5135.346,1.5 L5139.0,2 L5135.346,2.5 Z", "type": "path" }, { "line": { "color": "Grey", "dash": "dot", "width": 1 }, "path": "M5121.238871964261,1 L5121.238871964261,2", "type": "path" }, { "line": { "color": "Grey", "dash": "dot", "width": 1 }, "path": "M5139.0,2 L5139.0,3", "type": "path" } ], "showlegend": false, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Contributions to the prediction at 2016-06-12 compared to 2016-04-03", "x": 0.5, "xanchor": "center", "y": 0.9, "yanchor": "top" }, "width": 800, "xaxis": { "autorangeoptions": { "minallowed": 5052 }, "linecolor": "DarkGrey", "linewidth": 2, "range": [ 5052, null ], "showgrid": true, "title": { "text": "Finance_W142" }, "zeroline": false }, "yaxis": { "linecolor": "DarkGrey", "linewidth": 2, "showgrid": false, "showline": true } }, "_model_module": "jupyterlab-plotly", "_model_module_version": "^5.18.0", "_model_name": "FigureModel", "_py2js_addTraces": {}, "_py2js_animate": {}, "_py2js_deleteTraces": {}, "_py2js_moveTraces": {}, "_py2js_relayout": {}, "_py2js_removeLayoutProps": {}, "_py2js_removeTraceProps": {}, "_py2js_restyle": {}, "_py2js_update": {}, "_view_count": 0, "_view_module": "jupyterlab-plotly", "_view_module_version": "^5.18.0", "_view_name": "FigureView", "tabbable": null, "tooltip": null } }, "cbd9f554a02b402abff09fdec900c161": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_07c5fee45b234beda33a4b61c18d990b", "placeholder": "​", "style": "IPY_MODEL_2625ce0c52d94666bac11d2ce9ef19b2", "tabbable": null, "tooltip": null, "value": " 1/1 [00:00<00:00, 78.46it/s]" } }, "e2c4a51fd33c49808bb06ff30a18dc4d": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "ec5431bbe8e64d93bd2887cb5e5ce6bd": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }