{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's go on to our modeling step. As a reminder, our plan of action was as follows:\n", "\n", "1. Perform EDA on the dataset to extract valuable insight about the process generating the time series **(COMPLETED)**.\n", "2. Build a baseline model (univariable model without exogenous variables) for benchmarking purposes. **(Covered in this notebook)**\n", "3. Build a univariate model with all exogenous variables to check best possible performance. **(Covered in this notebook)**\n", "4. Evaluate the model with exogenous variables and discuss any potential issues. **(Covered in this notebook)**\n", "5. Overcome issues identified above. **(Covered in this notebook)**\n", "6. Make future predictions with the best model.\n", "7. Replicate flow with Automated Time Series Modeling (AutoML)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Only enable critical logging (Optional)\n", "import os\n", "os.environ[\"PYCARET_CUSTOM_LOGGING_LEVEL\"] = \"CRITICAL\"" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "System:\n", " python: 3.10.11 | packaged by Anaconda, Inc. | (main, May 16 2023, 00:55:32) [MSC v.1916 64 bit (AMD64)]\n", "executable: C:\\Users\\Nikhil\\.conda\\envs\\pycaret_dev_sktime_19p1\\python.exe\n", " machine: Windows-10-10.0.19045-SP0\n", "\n", "PyCaret required dependencies:\n", " pip: 23.1.2\n", " setuptools: 67.8.0\n", " pycaret: 3.0.2\n", " IPython: 7.34.0\n", " ipywidgets: 7.7.5\n", " tqdm: 4.65.0\n", " numpy: 1.23.0\n", " pandas: 1.5.3\n", " jinja2: 3.1.2\n", " scipy: 1.10.1\n", " joblib: 1.2.0\n", " sklearn: 1.2.2\n", " pyod: 1.0.9\n", " imblearn: 0.10.1\n", " category_encoders: 2.6.1\n", " lightgbm: 3.3.5\n", " numba: 0.57.0\n", " requests: 2.31.0\n", " matplotlib: 3.7.1\n", " scikitplot: 0.3.7\n", " yellowbrick: 1.5\n", " plotly: 5.15.0\n", " plotly-resampler: Not installed\n", " kaleido: 0.2.1\n", " schemdraw: 0.15\n", " statsmodels: 0.14.0\n", " sktime: 0.19.1\n", " tbats: 1.1.3\n", " pmdarima: 2.0.3\n", " psutil: 5.9.5\n", " markupsafe: 2.1.3\n", " pickle5: Not installed\n", " cloudpickle: 2.2.1\n", " deprecation: 2.1.0\n", " xxhash: 3.2.0\n", " wurlitzer: Not installed\n", "\n", "PyCaret optional dependencies:\n", " shap: 0.41.0\n", " interpret: 0.4.2\n", " umap: 0.5.3\n", " pandas_profiling: 4.2.0\n", " explainerdashboard: 0.4.2.2\n", " autoviz: 0.1.720\n", " fairlearn: 0.7.0\n", " deepchecks: 0.17.2\n", " xgboost: 1.7.5\n", " catboost: 1.2\n", " kmodes: 0.12.2\n", " mlxtend: 0.22.0\n", " statsforecast: 1.5.0\n", " tune_sklearn: 0.4.5\n", " ray: 2.5.0\n", " hyperopt: 0.2.7\n", " optuna: 3.2.0\n", " skopt: 0.9.0\n", " mlflow: 1.30.1\n", " gradio: 3.34.0\n", " fastapi: 0.96.0\n", " uvicorn: 0.22.0\n", " m2cgen: 0.10.0\n", " evidently: 0.2.8\n", " fugue: 0.8.4\n", " streamlit: Not installed\n", " prophet: 1.1.4\n" ] } ], "source": [ "def what_is_installed():\n", " from pycaret import show_versions\n", " show_versions()\n", "\n", "try:\n", " what_is_installed()\n", "except ModuleNotFoundError:\n", " !pip install pycaret\n", " what_is_installed()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from pycaret.datasets import get_data\n", "from pycaret.time_series import TSForecastingExperiment" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Global Figure Settings for notebook ----\n", "# Depending on whether you are using jupyter notebook, jupyter lab, Google Colab, you may have to set the renderer appropriately\n", "# NOTE: Setting to a static renderer here so that the notebook saved size is reduced.\n", "global_fig_settings = {\n", " # \"renderer\": \"notebook\",\n", " \"renderer\": \"png\",\n", " \"width\": 1000,\n", " \"height\": 600,\n", "}" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateTimeCO(GT)PT08.S1(CO)NMHC(GT)C6H6(GT)PT08.S2(NMHC)NOx(GT)PT08.S3(NOx)NO2(GT)PT08.S4(NO2)PT08.S5(O3)TRHAH
02004-03-1018:00:002.6136015011.9104616610561131692126813.648.90.7578
12004-03-1019:00:002.012921129.4955103117492155997213.347.70.7255
22004-03-1020:00:002.21402889.093913111401141555107411.954.00.7502
32004-03-1021:00:002.21376809.294817210921221584120311.060.00.7867
42004-03-1022:00:001.61272516.583613112051161490111011.259.60.7888
\n", "
" ], "text/plain": [ " Date Time CO(GT) PT08.S1(CO) NMHC(GT) C6H6(GT) \\\n", "0 2004-03-10 18:00:00 2.6 1360 150 11.9 \n", "1 2004-03-10 19:00:00 2.0 1292 112 9.4 \n", "2 2004-03-10 20:00:00 2.2 1402 88 9.0 \n", "3 2004-03-10 21:00:00 2.2 1376 80 9.2 \n", "4 2004-03-10 22:00:00 1.6 1272 51 6.5 \n", "\n", " PT08.S2(NMHC) NOx(GT) PT08.S3(NOx) NO2(GT) PT08.S4(NO2) PT08.S5(O3) \\\n", "0 1046 166 1056 113 1692 1268 \n", "1 955 103 1174 92 1559 972 \n", "2 939 131 1140 114 1555 1074 \n", "3 948 172 1092 122 1584 1203 \n", "4 836 131 1205 116 1490 1110 \n", "\n", " T RH AH \n", "0 13.6 48.9 0.7578 \n", "1 13.3 47.7 0.7255 \n", "2 11.9 54.0 0.7502 \n", "3 11.0 60.0 0.7867 \n", "4 11.2 59.6 0.7888 " ] }, "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", "
CO(GT)PT08.S1(CO)C6H6(GT)PT08.S2(NMHC)NOx(GT)PT08.S3(NOx)NO2(GT)PT08.S4(NO2)PT08.S5(O3)TRHindex
86371.5983.05.9806.0180.0820.0132.0966.0615.013.528.32005-03-05 15:00:00
86381.81018.07.3868.0255.0751.0162.01015.0804.013.029.72005-03-05 16:00:00
86392.01101.08.4916.0251.0721.0159.01125.0861.011.638.72005-03-05 17:00:00
86401.91116.07.7888.0258.0695.0156.01176.0980.08.656.32005-03-05 18:00:00
86412.51161.09.1945.0344.0654.0177.01205.01077.08.557.92005-03-05 19:00:00
\n", "
" ], "text/plain": [ " CO(GT) PT08.S1(CO) C6H6(GT) PT08.S2(NMHC) NOx(GT) PT08.S3(NOx) \\\n", "8637 1.5 983.0 5.9 806.0 180.0 820.0 \n", "8638 1.8 1018.0 7.3 868.0 255.0 751.0 \n", "8639 2.0 1101.0 8.4 916.0 251.0 721.0 \n", "8640 1.9 1116.0 7.7 888.0 258.0 695.0 \n", "8641 2.5 1161.0 9.1 945.0 344.0 654.0 \n", "\n", " NO2(GT) PT08.S4(NO2) PT08.S5(O3) T RH index \n", "8637 132.0 966.0 615.0 13.5 28.3 2005-03-05 15:00:00 \n", "8638 162.0 1015.0 804.0 13.0 29.7 2005-03-05 16:00:00 \n", "8639 159.0 1125.0 861.0 11.6 38.7 2005-03-05 17:00:00 \n", "8640 156.0 1176.0 980.0 8.6 56.3 2005-03-05 18:00:00 \n", "8641 177.0 1205.0 1077.0 8.5 57.9 2005-03-05 19:00:00 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = get_data(\"airquality\")\n", "\n", "# Limiting the data for demonstration purposes.\n", "data = data.iloc[-720:]\n", "data[\"index\"] = pd.to_datetime(data[\"Date\"] + \" \" + data[\"Time\"])\n", "data.drop(columns=[\"Date\", \"Time\"], inplace=True)\n", "data.replace(-200, np.nan, inplace=True)\n", "target = \"CO(GT)\"\n", "\n", "exclude = ['NMHC(GT)', 'AH']\n", "data.drop(columns=exclude, inplace=True)\n", "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 2: Baseline Model - Univariate forecasting without exogenous variables" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
 DescriptionValue
0session_id42
1TargetCO(GT)
2ApproachUnivariate
3Exogenous VariablesNot Present
4Original data shape(720, 1)
5Transformed data shape(720, 1)
6Transformed train set shape(672, 1)
7Transformed test set shape(48, 1)
8Rows with missing values2.8%
9Fold GeneratorExpandingWindowSplitter
10Fold Number3
11Enforce Prediction IntervalFalse
12Splits used for hyperparametersall
13User Defined Seasonal Period(s)None
14Ignore Seasonality TestFalse
15Seasonality Detection Algoauto
16Max Period to Consider60
17Seasonal Period(s) Tested[24, 23, 25, 2, 48, 22, 47, 49, 26, 3, 12, 11, 21, 13, 46, 10, 50]
18Significant Seasonal Period(s)[24, 23, 25, 2, 48, 22, 47, 49, 26, 3, 12, 11, 21, 13, 46, 10, 50]
19Significant Seasonal Period(s) without Harmonics[48, 46, 50, 22, 47, 49, 26, 21]
20Remove HarmonicsFalse
21Harmonics Order Methodharmonic_max
22Num Seasonalities to Use1
23All Seasonalities to Use[24]
24Primary Seasonality24
25Seasonality PresentTrue
26Seasonality Typemul
27Target Strictly PositiveTrue
28Target White NoiseNo
29Recommended d0
30Recommended Seasonal D0
31PreprocessTrue
32Numerical Imputation (Target)ffill
33Transformation (Target)None
34Scaling (Target)None
35Feature Engineering (Target) - Reduced RegressionFalse
36CPU Jobs-1
37Use GPUFalse
38Log ExperimentFalse
39Experiment Namets-default-name
40USI3960
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_uni = data.copy()\n", "data_uni.set_index(\"index\", inplace=True)\n", "data_uni = data_uni[target]\n", "\n", "exp_uni = TSForecastingExperiment()\n", "exp_uni.setup(\n", " data=data_uni, fh=48,\n", " numeric_imputation_target=\"ffill\", numeric_imputation_exogenous=\"ffill\",\n", " fig_kwargs=global_fig_settings, session_id=42\n", ")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [], "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", "
 cutoffMASERMSSEMAERMSEMAPESMAPER2
02005-03-27 14:001.56061.49041.14661.60390.65981.0119-1.7616
12005-03-29 14:002.59191.97671.86552.11051.49910.7419-2.7317
22005-03-31 14:001.46051.15391.04011.21241.28601.2780-6.2314
MeanNaT1.87101.54031.35071.64221.14831.0106-3.5749
SDNaT0.51140.33780.36660.36760.35620.21891.9197
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Processing: 0%| | 0/4 [00:00 1 indicates that the model is performing worse than even a naive model with one step ahead forecasts. This model needs more improvement. Let's see if adding exogenous variables can help improve the model performance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 3: Improved Model - Univariate forecasting with exogenous variables" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
 DescriptionValue
0session_id42
1TargetCO(GT)
2ApproachUnivariate
3Exogenous VariablesPresent
4Original data shape(720, 11)
5Transformed data shape(720, 11)
6Transformed train set shape(672, 11)
7Transformed test set shape(48, 11)
8Rows with missing values3.8%
9Fold GeneratorExpandingWindowSplitter
10Fold Number3
11Enforce Prediction IntervalFalse
12Splits used for hyperparametersall
13User Defined Seasonal Period(s)None
14Ignore Seasonality TestFalse
15Seasonality Detection Algoauto
16Max Period to Consider60
17Seasonal Period(s) Tested[24, 23, 25, 2, 48, 22, 47, 49, 26, 3, 12, 11, 21, 13, 46, 10, 50]
18Significant Seasonal Period(s)[24, 23, 25, 2, 48, 22, 47, 49, 26, 3, 12, 11, 21, 13, 46, 10, 50]
19Significant Seasonal Period(s) without Harmonics[48, 46, 50, 22, 47, 49, 26, 21]
20Remove HarmonicsFalse
21Harmonics Order Methodharmonic_max
22Num Seasonalities to Use1
23All Seasonalities to Use[24]
24Primary Seasonality24
25Seasonality PresentTrue
26Seasonality Typemul
27Target Strictly PositiveTrue
28Target White NoiseNo
29Recommended d0
30Recommended Seasonal D0
31PreprocessTrue
32Numerical Imputation (Target)ffill
33Transformation (Target)None
34Scaling (Target)None
35Feature Engineering (Target) - Reduced RegressionFalse
36Numerical Imputation (Exogenous)ffill
37Transformation (Exogenous)None
38Scaling (Exogenous)None
39CPU Jobs-1
40Use GPUFalse
41Log ExperimentFalse
42Experiment Namets-default-name
43USI31bf
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exp_exo = TSForecastingExperiment()\n", "exp_exo.setup(\n", " data=data, target=target, index=\"index\", fh=48,\n", " numeric_imputation_target=\"ffill\", numeric_imputation_exogenous=\"ffill\",\n", " fig_kwargs=global_fig_settings, session_id=42\n", ")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [], "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", "
 cutoffMASERMSSEMAERMSEMAPESMAPER2
02005-03-27 14:000.25120.22820.18460.24550.10890.11920.9353
12005-03-29 14:000.23210.22270.16700.23780.11000.12190.9526
22005-03-31 14:000.25250.27330.17980.28720.17230.15720.5943
MeanNaT0.24530.24140.17710.25680.13040.13280.8274
SDNaT0.00930.02270.00740.02170.02960.01730.1650
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Processing: 0%| | 0/4 [00:00\n", "#T_e6fdc_row25_col1, #T_e6fdc_row31_col1 {\n", " background-color: lightgreen;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
 DescriptionValue
0session_id42
1TargetCO(GT)
2ApproachUnivariate
3Exogenous VariablesPresent
4Original data shape(720, 4)
5Transformed data shape(720, 4)
6Transformed train set shape(672, 4)
7Transformed test set shape(48, 4)
8Rows with missing values3.8%
9Fold GeneratorExpandingWindowSplitter
10Fold Number3
11Enforce Prediction IntervalFalse
12Splits used for hyperparametersall
13User Defined Seasonal Period(s)None
14Ignore Seasonality TestFalse
15Seasonality Detection Algoauto
16Max Period to Consider60
17Seasonal Period(s) Tested[24, 23, 25, 2, 48, 22, 47, 49, 26, 3, 12, 11, 21, 13, 46, 10, 50]
18Significant Seasonal Period(s)[24, 23, 25, 2, 48, 22, 47, 49, 26, 3, 12, 11, 21, 13, 46, 10, 50]
19Significant Seasonal Period(s) without Harmonics[48, 46, 50, 22, 47, 49, 26, 21]
20Remove HarmonicsFalse
21Harmonics Order Methodharmonic_max
22Num Seasonalities to Use1
23All Seasonalities to Use[24]
24Primary Seasonality24
25Seasonality PresentTrue
26Seasonality Typemul
27Target Strictly PositiveTrue
28Target White NoiseNo
29Recommended d0
30Recommended Seasonal D0
31PreprocessTrue
32Numerical Imputation (Target)ffill
33Transformation (Target)None
34Scaling (Target)None
35Feature Engineering (Target) - Reduced RegressionFalse
36Numerical Imputation (Exogenous)ffill
37Transformation (Exogenous)None
38Scaling (Exogenous)None
39CPU Jobs-1
40Use GPUFalse
41Log ExperimentFalse
42Experiment Namets-default-name
43USI3ab8
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exp_slim = TSForecastingExperiment()\n", "keep = [target, \"index\", 'NOx(GT)', \"PT08.S3(NOx)\", \"RH\"]\n", "data_slim = data[keep]\n", "exp_slim.setup(\n", " data=data_slim, target=target, index=\"index\", fh=48,\n", " numeric_imputation_target=\"ffill\", numeric_imputation_exogenous=\"ffill\",\n", " fig_kwargs=global_fig_settings, session_id=42 \n", ")" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [], "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", "
 cutoffMASERMSSEMAERMSEMAPESMAPER2
02005-03-27 14:000.50140.40280.36840.43340.26630.22550.7983
12005-03-29 14:000.26570.23690.19120.25290.10040.09930.9464
22005-03-31 14:000.30230.28470.21530.29920.21320.19670.5596
MeanNaT0.35650.30810.25830.32850.19330.17380.7681
SDNaT0.10350.06970.07840.07660.06920.05400.1593
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Processing: 0%| | 0/4 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexNOx(GT)PT08.S3(NOx)RH
86372005-03-05 15:00:00180.0820.028.3
86382005-03-05 16:00:00255.0751.029.7
86392005-03-05 17:00:00251.0721.038.7
86402005-03-05 18:00:00258.0695.056.3
86412005-03-05 19:00:00344.0654.057.9
\n", "" ], "text/plain": [ " index NOx(GT) PT08.S3(NOx) RH\n", "8637 2005-03-05 15:00:00 180.0 820.0 28.3\n", "8638 2005-03-05 16:00:00 255.0 751.0 29.7\n", "8639 2005-03-05 17:00:00 251.0 721.0 38.7\n", "8640 2005-03-05 18:00:00 258.0 695.0 56.3\n", "8641 2005-03-05 19:00:00 344.0 654.0 57.9" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exog_vars = ['NOx(GT)', 'PT08.S3(NOx)', 'RH']\n", "data = data[[\"index\"] + exog_vars]\n", "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 6: Making Future Predictions\n", "\n", "# Step 6A: Get future exogenous variable values using forecasting" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
 DescriptionValue
0session_id42
1TargetNOx(GT)
2ApproachUnivariate
3Exogenous VariablesNot Present
4Original data shape(720, 1)
5Transformed data shape(720, 1)
6Transformed train set shape(672, 1)
7Transformed test set shape(48, 1)
8Rows with missing values0.8%
9Fold GeneratorExpandingWindowSplitter
10Fold Number3
11Enforce Prediction IntervalFalse
12Splits used for hyperparametersall
13User Defined Seasonal Period(s)None
14Ignore Seasonality TestFalse
15Seasonality Detection Algoauto
16Max Period to Consider60
17Seasonal Period(s) Tested[24, 48, 23, 25, 47, 49, 13, 12, 36, 11, 35, 60]
18Significant Seasonal Period(s)[24, 48, 23, 25, 47, 49, 13, 12, 36, 11, 35, 60]
19Significant Seasonal Period(s) without Harmonics[48, 23, 25, 47, 49, 13, 60, 36, 11, 35]
20Remove HarmonicsFalse
21Harmonics Order Methodharmonic_max
22Num Seasonalities to Use1
23All Seasonalities to Use[24]
24Primary Seasonality24
25Seasonality PresentTrue
26Seasonality Typemul
27Target Strictly PositiveTrue
28Target White NoiseNo
29Recommended d1
30Recommended Seasonal D0
31PreprocessTrue
32Numerical Imputation (Target)ffill
33Transformation (Target)None
34Scaling (Target)None
35Feature Engineering (Target) - Reduced RegressionFalse
36CPU Jobs-1
37Use GPUFalse
38Log ExperimentFalse
39Experiment Namets-default-name
40USI6166
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "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", "
 ModelMASERMSSEMAERMSEMAPESMAPER2TT (Sec)
arimaARIMA0.84060.915887.3689133.06420.42730.3443-1.30720.3200
exp_smoothExponential Smoothing0.89540.840093.0132121.97600.48280.5917-0.93110.1667
thetaTheta Forecaster1.02790.9437107.4620137.68860.51920.4990-0.40720.0533
lightgbm_cds_dtLight Gradient Boosting w/ Cond. Deseasonalize & Detrending1.20211.1033124.6215160.10690.69950.5078-2.57171.5100
etsETS1.64661.5514171.0757225.41930.92840.5548-4.32061.5600
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Processing: 0%| | 0/25 [00:00\n", "#T_b2c3b_row25_col1, #T_b2c3b_row31_col1 {\n", " background-color: lightgreen;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
 DescriptionValue
0session_id42
1TargetPT08.S3(NOx)
2ApproachUnivariate
3Exogenous VariablesNot Present
4Original data shape(720, 1)
5Transformed data shape(720, 1)
6Transformed train set shape(672, 1)
7Transformed test set shape(48, 1)
8Rows with missing values0.1%
9Fold GeneratorExpandingWindowSplitter
10Fold Number3
11Enforce Prediction IntervalFalse
12Splits used for hyperparametersall
13User Defined Seasonal Period(s)None
14Ignore Seasonality TestFalse
15Seasonality Detection Algoauto
16Max Period to Consider60
17Seasonal Period(s) Tested[24, 48, 25, 23, 47, 49, 12, 36, 11]
18Significant Seasonal Period(s)[24, 48, 25, 23, 47, 49, 12, 36, 11]
19Significant Seasonal Period(s) without Harmonics[48, 25, 23, 47, 49, 36, 11]
20Remove HarmonicsFalse
21Harmonics Order Methodharmonic_max
22Num Seasonalities to Use1
23All Seasonalities to Use[24]
24Primary Seasonality24
25Seasonality PresentTrue
26Seasonality Typemul
27Target Strictly PositiveTrue
28Target White NoiseNo
29Recommended d1
30Recommended Seasonal D0
31PreprocessTrue
32Numerical Imputation (Target)ffill
33Transformation (Target)None
34Scaling (Target)None
35Feature Engineering (Target) - Reduced RegressionFalse
36CPU Jobs-1
37Use GPUFalse
38Log ExperimentFalse
39Experiment Namets-default-name
40USI9b1d
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "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", "
 ModelMASERMSSEMAERMSEMAPESMAPER2TT (Sec)
exp_smoothExponential Smoothing1.24351.2056126.5383158.92410.17380.1695-0.02110.1533
etsETS1.36301.3140138.7259173.25450.19060.1879-0.20910.7067
thetaTheta Forecaster1.37161.3079139.5929172.42720.19090.1878-0.19630.0533
arimaARIMA1.39291.3245141.6775174.62110.17920.1953-0.39850.4133
lightgbm_cds_dtLight Gradient Boosting w/ Cond. Deseasonalize & Detrending1.67781.5491170.7442204.25880.21970.2541-0.76661.4900
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Processing: 0%| | 0/25 [00:00\n", "#T_5996e_row25_col1, #T_5996e_row31_col1 {\n", " background-color: lightgreen;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
 DescriptionValue
0session_id42
1TargetRH
2ApproachUnivariate
3Exogenous VariablesNot Present
4Original data shape(720, 1)
5Transformed data shape(720, 1)
6Transformed train set shape(672, 1)
7Transformed test set shape(48, 1)
8Rows with missing values0.1%
9Fold GeneratorExpandingWindowSplitter
10Fold Number3
11Enforce Prediction IntervalFalse
12Splits used for hyperparametersall
13User Defined Seasonal Period(s)None
14Ignore Seasonality TestFalse
15Seasonality Detection Algoauto
16Max Period to Consider60
17Seasonal Period(s) Tested[2, 3, 24, 23, 25, 22, 4, 26, 21, 48, 47, 49, 46, 5, 27, 50, 20, 45, 51, 28, 19, 6, 44, 52]
18Significant Seasonal Period(s)[2, 3, 24, 23, 25, 22, 4, 26, 21, 48, 47, 49, 46, 5, 27, 50, 20, 45, 51, 28, 19, 6, 44, 52]
19Significant Seasonal Period(s) without Harmonics[52, 51, 48, 46, 50, 44, 21, 47, 49, 27, 20, 45, 28, 19]
20Remove HarmonicsFalse
21Harmonics Order Methodharmonic_max
22Num Seasonalities to Use1
23All Seasonalities to Use[2]
24Primary Seasonality2
25Seasonality PresentTrue
26Seasonality Typemul
27Target Strictly PositiveTrue
28Target White NoiseNo
29Recommended d0
30Recommended Seasonal D0
31PreprocessTrue
32Numerical Imputation (Target)ffill
33Transformation (Target)None
34Scaling (Target)None
35Feature Engineering (Target) - Reduced RegressionFalse
36CPU Jobs-1
37Use GPUFalse
38Log ExperimentFalse
39Experiment Namets-default-name
40USIb42b
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "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", "
 ModelMASERMSSEMAERMSEMAPESMAPER2TT (Sec)
thetaTheta Forecaster1.62181.476511.374913.15780.24810.2286-0.05850.0533
arimaARIMA1.80011.616512.631014.41080.25480.2523-0.26950.0867
lightgbm_cds_dtLight Gradient Boosting w/ Cond. Deseasonalize & Detrending2.77972.611519.466723.25190.52410.3609-4.87110.8100
exp_smoothExponential Smoothing5.29724.759237.242342.49180.71880.9298-10.52610.1400
etsETS5.32354.781237.425942.68720.72280.9349-10.59110.1233
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Processing: 0%| | 0/25 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NOx(GT)PT08.S3(NOx)RH
2005-04-04 15:00247.2036651.183013.0838
2005-04-04 16:00274.0699644.277013.1056
2005-04-04 17:00298.6685613.330913.0876
2005-04-04 18:00231.8742558.197013.1094
2005-04-04 19:00398.1459499.699413.0913
2005-04-04 20:00378.3662524.638513.1131
2005-04-04 21:00252.7246596.223613.0950
2005-04-04 22:00246.6336684.652313.1169
2005-04-04 23:00180.6670721.417413.0988
2005-04-05 00:00125.5157756.124113.1206
2005-04-05 01:0076.9556832.293613.1025
2005-04-05 02:0074.8243889.789913.1244
2005-04-05 03:0067.0040960.893113.1063
2005-04-05 04:0056.40911017.308913.1281
2005-04-05 05:0080.97771023.558613.1100
2005-04-05 06:00185.6649969.106913.1318
2005-04-05 07:00597.4380824.132813.1138
2005-04-05 08:00589.2735721.392613.1356
2005-04-05 09:00526.1542666.404413.1175
2005-04-05 10:00475.0677706.371513.1393
2005-04-05 11:00356.0050747.218113.1212
2005-04-05 12:00295.9595774.706513.1431
2005-04-05 13:00237.9265799.278613.1250
2005-04-05 14:00267.9026800.729113.1468
2005-04-05 15:00250.0888793.498913.1287
2005-04-05 16:00276.9426783.813113.1506
2005-04-05 17:00301.5320744.976713.1325
2005-04-05 18:00234.7311676.946813.1543
2005-04-05 19:00400.9980605.070513.1362
2005-04-05 20:00381.2148634.304913.1581
2005-04-05 21:00255.5708719.777513.1399
2005-04-05 22:00249.4779825.316613.1618
2005-04-05 23:00183.5099868.377113.1437
2005-04-06 00:00128.3577908.857513.1656
2005-04-06 01:0079.7969999.009713.1474
2005-04-06 02:0077.66511066.547813.1693
2005-04-06 03:0069.84441150.208713.1512
2005-04-06 04:0059.24921216.107613.1731
2005-04-06 05:0083.81771221.963113.1549
2005-04-06 06:00188.50471155.451513.1768
2005-04-06 07:00600.2777981.341613.1586
2005-04-06 08:00592.1131857.917913.1806
2005-04-06 09:00528.9938791.536313.1624
2005-04-06 10:00477.9073837.978413.1843
2005-04-06 11:00358.8445885.362913.1661
2005-04-06 12:00298.7990916.838413.1880
2005-04-06 13:00240.7660944.806313.1699
2005-04-06 14:00270.7421945.423113.1918
\n", "" ], "text/plain": [ " NOx(GT) PT08.S3(NOx) RH\n", "2005-04-04 15:00 247.2036 651.1830 13.0838\n", "2005-04-04 16:00 274.0699 644.2770 13.1056\n", "2005-04-04 17:00 298.6685 613.3309 13.0876\n", "2005-04-04 18:00 231.8742 558.1970 13.1094\n", "2005-04-04 19:00 398.1459 499.6994 13.0913\n", "2005-04-04 20:00 378.3662 524.6385 13.1131\n", "2005-04-04 21:00 252.7246 596.2236 13.0950\n", "2005-04-04 22:00 246.6336 684.6523 13.1169\n", "2005-04-04 23:00 180.6670 721.4174 13.0988\n", "2005-04-05 00:00 125.5157 756.1241 13.1206\n", "2005-04-05 01:00 76.9556 832.2936 13.1025\n", "2005-04-05 02:00 74.8243 889.7899 13.1244\n", "2005-04-05 03:00 67.0040 960.8931 13.1063\n", "2005-04-05 04:00 56.4091 1017.3089 13.1281\n", "2005-04-05 05:00 80.9777 1023.5586 13.1100\n", "2005-04-05 06:00 185.6649 969.1069 13.1318\n", "2005-04-05 07:00 597.4380 824.1328 13.1138\n", "2005-04-05 08:00 589.2735 721.3926 13.1356\n", "2005-04-05 09:00 526.1542 666.4044 13.1175\n", "2005-04-05 10:00 475.0677 706.3715 13.1393\n", "2005-04-05 11:00 356.0050 747.2181 13.1212\n", "2005-04-05 12:00 295.9595 774.7065 13.1431\n", "2005-04-05 13:00 237.9265 799.2786 13.1250\n", "2005-04-05 14:00 267.9026 800.7291 13.1468\n", "2005-04-05 15:00 250.0888 793.4989 13.1287\n", "2005-04-05 16:00 276.9426 783.8131 13.1506\n", "2005-04-05 17:00 301.5320 744.9767 13.1325\n", "2005-04-05 18:00 234.7311 676.9468 13.1543\n", "2005-04-05 19:00 400.9980 605.0705 13.1362\n", "2005-04-05 20:00 381.2148 634.3049 13.1581\n", "2005-04-05 21:00 255.5708 719.7775 13.1399\n", "2005-04-05 22:00 249.4779 825.3166 13.1618\n", "2005-04-05 23:00 183.5099 868.3771 13.1437\n", "2005-04-06 00:00 128.3577 908.8575 13.1656\n", "2005-04-06 01:00 79.7969 999.0097 13.1474\n", "2005-04-06 02:00 77.6651 1066.5478 13.1693\n", "2005-04-06 03:00 69.8444 1150.2087 13.1512\n", "2005-04-06 04:00 59.2492 1216.1076 13.1731\n", "2005-04-06 05:00 83.8177 1221.9631 13.1549\n", "2005-04-06 06:00 188.5047 1155.4515 13.1768\n", "2005-04-06 07:00 600.2777 981.3416 13.1586\n", "2005-04-06 08:00 592.1131 857.9179 13.1806\n", "2005-04-06 09:00 528.9938 791.5363 13.1624\n", "2005-04-06 10:00 477.9073 837.9784 13.1843\n", "2005-04-06 11:00 358.8445 885.3629 13.1661\n", "2005-04-06 12:00 298.7990 916.8384 13.1880\n", "2005-04-06 13:00 240.7660 944.8063 13.1699\n", "2005-04-06 14:00 270.7421 945.4231 13.1918" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "future_exog" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 6B: Load Model and make future predcitons for the target variable" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "exp_future = TSForecastingExperiment()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Transformation Pipeline and Model Successfully Loaded\n" ] } ], "source": [ "final_slim_model = exp_future.load_model(\"final_slim_model\")" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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ERG5jUEkEREREbmN29lERERE5DauRBIRERGR2xhEEhEREZHbGESSi7q6Otx2222YPXs25s+fjyeeeAImkwkAcOTIEfzmN79BXl4eFi1ahA0bNrh87c8//4zFixcjNzcX1157LY4cOSLd1tbWhuzsbJf/5syZ49PXRkRERJ7DIJIkgiDgtttug9FoxPLly/Hcc8/h+++/x9///ncIgoBbbrkFiYmJWLlyJc4//3wsWbIENTU1AICamhrccsstuOiii/DRRx8hPj4ev//97yGm3JaVlSE2NhYbNmyQ/vviiy/kfLlEREQ0Ajw7myQVFRXYtWsXfvrpJyQmJgIAbrvtNjz55JM46aSTcOTIEbz//vsIDw9HRkYGNm7ciJUrV+LWW2/FihUrMG3aNOlUmyeeeAInnngitmzZgjlz5qCiogITJ05EUlKSnC+RiIiIPIQrkSRJSkrCa6+9JgWQoo6ODhQWFmLKlCkIDw+XPl9QUCCdQ1tYWIhZs2ZJt+n1ekydOlW6vaysjEd9ERERqQiDSJJER0dj/vz50r9tNhveffddHH/88WhoaEBycrLL/RMSElBbWwsAg95eXl6O2tpaXHLJJZg/fz7uvPNO1NfXe/kVERERkbcwiKR+LVu2DPv27cOdd94Jo9H4i3NiQ0JCYDabAWDQ2ysqKtDR0YF7770Xzz33HOrr63HTTTfBarX65sUQERGRRzEnkvq0bNkyvPXWW3juueeQlZWF0NBQtLa2utzHbDYjLCwMABAaGioFjM63R0dHAwBWr14NjUYj3f/555/HvHnzUFhYiJkzZ3r/BREREZFHcSWSfuHRRx/Fm2++iWXLluHMM88EAKSkpKCxsdHlfo2NjdIWdn+3i4U0er1eCiAB+1Z3bGws6urqvPlSiIiIyEsYRJKLF154Ae+//z6effZZnHPOOdLnc3NzsXfvXnR3d0uf2759O3Jzc6Xbt2/fLt1mNBqxb98+5ObmoqOjA8cddxw2bdok3V5XV4eWlhakp6f74FURERGRpzGIJEl5eTlefPFF3HDDDSgoKEBDQ4P03+zZszF69Gjce++9KC0txauvvoqioiJccsklAICLL74YO3bswKuvvorS0lLce++9GDNmDObMmYPIyEgUFBTgiSeeQFFREfbu3Ys777wT8+fPR3Z2tsyvmoiIiIZDI4jdoCngvfrqq3jmmWf6vG3//v04fPgw7r//fhQWFmL8+PG47777cMIJJ0j3WbduHR5//HHU1tYiPz8fjz76KMaOHQvAfmLN3/72N3z//fcwm8049dRT8cADDyAmJsYnr42IiIg8i0EkEREREbmN29lERERE5DYGkURERETkNgaRREREROQ2BpFERERE5DYGkURERETkNgaRREREROQ2BpFERERE5DYGkURERETkNgaRREREROQ2BpFERERE5DYGkURERETktv8HDXPfMSgTMXAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "future_preds = exp_future.predict_model(final_slim_model, X=future_exog)\n", "future_preds.plot()" ] } ], "metadata": { "interpreter": { "hash": "c161a91f6f4623a54f30c5492a42e7cf0592610fb90c8abd312086f09f8fbe0f" }, "kernelspec": { "display_name": "pycaret_dev_sktime_19p1", "language": "python", "name": "pycaret_dev_sktime_19p1" }, "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.10.11" } }, "nbformat": 4, "nbformat_minor": 4 }