{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have build our model, let's make future predictions. 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 **(COMPLETED)**.\n", "3. Build a univariate model with all exogenous variables to check best possible performance **(COMPLETED)**.\n", "4. Evaluate the model with exogenous variables and discuss any potential issues **(COMPLETED)**.\n", "5. Overcome issues identified above **(COMPLETED)**.\n", "6. Make future predictions with the best model. **(Covered in this notebook)**\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.8.13 (default, Mar 28 2022, 06:59:08) [MSC v.1916 64 bit (AMD64)]\n", "executable: C:\\Users\\Nikhil\\.conda\\envs\\pycaret_dev_sktime_0p11_2\\python.exe\n", " machine: Windows-10-10.0.19044-SP0\n", "\n", "PyCaret required dependencies:\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\Nikhil\\.conda\\envs\\pycaret_dev_sktime_0p11_2\\lib\\site-packages\\_distutils_hack\\__init__.py:30: UserWarning: Setuptools is replacing distutils.\n", " warnings.warn(\"Setuptools is replacing distutils.\")\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " pip: 21.2.2\n", " setuptools: 61.2.0\n", " pycaret: 3.0.0\n", " ipython: Not installed\n", " ipywidgets: 7.7.0\n", " numpy: 1.21.6\n", " pandas: 1.4.2\n", " jinja2: 3.1.2\n", " scipy: 1.8.0\n", " joblib: 1.1.0\n", " sklearn: 1.0.2\n", " pyod: Installed but version unavailable\n", " imblearn: 0.9.0\n", " category_encoders: 2.4.1\n", " lightgbm: 3.3.2\n", " numba: 0.55.1\n", " requests: 2.27.1\n", " matplotlib: 3.5.2\n", " scikitplot: 0.3.7\n", " yellowbrick: 1.4\n", " plotly: 5.8.0\n", " kaleido: 0.2.1\n", " statsmodels: 0.13.2\n", " sktime: 0.11.4\n", " tbats: Installed but version unavailable\n", " pmdarima: 1.8.5\n", "\n", "PyCaret optional dependencies:\n", " shap: Not installed\n", " interpret: Not installed\n", " umap: Not installed\n", " pandas_profiling: Not installed\n", " explainerdashboard: Not installed\n", " autoviz: Not installed\n", " fairlearn: Not installed\n", " xgboost: Not installed\n", " catboost: Not installed\n", " kmodes: Not installed\n", " mlxtend: Not installed\n", " statsforecast: 0.5.5\n", " tune_sklearn: Not installed\n", " ray: Not installed\n", " hyperopt: Not installed\n", " optuna: Not installed\n", " skopt: Not installed\n", " mlflow: 1.25.1\n", " gradio: Not installed\n", " fastapi: Not installed\n", " uvicorn: Not installed\n", " m2cgen: Not installed\n", " evidently: Not installed\n", " nltk: Not installed\n", " pyLDAvis: Not installed\n", " gensim: Not installed\n", " spacy: Not installed\n", " wordcloud: Not installed\n", " textblob: Not installed\n", " psutil: 5.9.0\n", " fugue: Not installed\n", " streamlit: Not installed\n", " prophet: Not installed\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", "global_fig_settings = {\"renderer\": \"notebook\", \"width\": 1000, \"height\": 600}" ] }, { "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", "
NOx(GT)PT08.S3(NOx)RH
index
2004-03-10 18:00:00166.01056.048.9
2004-03-10 19:00:00103.01174.047.7
2004-03-10 20:00:00131.01140.054.0
2004-03-10 21:00:00172.01092.060.0
2004-03-10 22:00:00131.01205.059.6
\n", "
" ], "text/plain": [ " NOx(GT) PT08.S3(NOx) RH\n", "index \n", "2004-03-10 18:00:00 166.0 1056.0 48.9\n", "2004-03-10 19:00:00 103.0 1174.0 47.7\n", "2004-03-10 20:00:00 131.0 1140.0 54.0\n", "2004-03-10 21:00:00 172.0 1092.0 60.0\n", "2004-03-10 22:00:00 131.0 1205.0 59.6" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = get_data(\"airquality\", verbose=False)\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", "data.set_index(\"index\", inplace=True)\n", "\n", "exog_vars = ['NOx(GT)', 'PT08.S3(NOx)', 'RH']\n", "data = data[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": 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", "
 ModelMASERMSSEMAERMSEMAPESMAPER2TT (Sec)
lightgbm_cds_dtLight Gradient Boosting w/ Cond. Deseasonalize & Detrending1.19901.048611.083613.58790.28620.2304-0.95025.1700
exp_smoothExponential Smoothing1.48901.190413.751015.41400.30370.2478-0.42483.2700
arimaARIMA1.56571.369314.469617.74120.35390.2739-2.11913.6833
thetaTheta Forecaster1.91021.490217.642019.29580.37130.2986-1.26293.1567
etsETS3.45042.655731.865234.38390.62950.4585-6.17339.8033
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "exog_exps = []\n", "exog_models = []\n", "for exog_var in exog_vars:\n", " exog_exp = TSForecastingExperiment()\n", " exog_exp.setup(\n", " data=data[exog_var], fh=48,\n", " numeric_imputation_target=\"ffill\", numeric_imputation_exogenous=\"ffill\",\n", " fig_kwargs=global_fig_settings, session_id=42\n", " )\n", "\n", " # Users can customize how to model future exogenous variables i.e. add\n", " # more steps and models to potentially get better models at the expense\n", " # of higher modeling time.\n", " best = exog_exp.compare_models(\n", " sort=\"mase\", include=[\"arima\", \"ets\", \"exp_smooth\", \"theta\", \"lightgbm_cds_dt\",] \n", " )\n", " final_exog_model = exog_exp.finalize_model(best)\n", "\n", " exog_exps.append(exog_exp)\n", " exog_models.append(final_exog_model)\n", "\n", "# Step 2: Get future predictions for exog variables ----\n", "future_exog = [\n", " exog_exp.predict_model(exog_model)\n", " for exog_exp, exog_model in zip(exog_exps, exog_models)\n", "]\n", "future_exog = pd.concat(future_exog, axis=1)\n", "future_exog.columns = exog_vars" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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:00262.1091656.104414.5065
2005-04-04 16:00297.1918638.665915.6333
2005-04-04 17:00325.5872596.722717.5673
2005-04-04 18:00259.7444556.067222.7364
2005-04-04 19:00425.2039534.210828.3385
2005-04-04 20:00403.5829553.198233.7580
2005-04-04 21:00275.5622611.599337.0870
2005-04-04 22:00266.8754652.885739.7600
2005-04-04 23:00198.3008662.624641.3155
2005-04-05 00:00140.6534680.422142.4415
2005-04-05 01:0089.7790730.955044.4348
2005-04-05 02:0085.5490799.794546.8401
2005-04-05 03:0075.8562861.373548.6809
2005-04-05 04:0063.6113890.852649.7074
2005-04-05 05:0086.7398878.592150.1808
2005-04-05 06:00190.1795796.509050.4606
2005-04-05 07:00600.8788663.640648.9828
2005-04-05 08:00591.7944561.329546.7280
2005-04-05 09:00527.8903565.203941.8545
2005-04-05 10:00476.1367599.865637.9259
2005-04-05 11:00356.5084622.072935.3302
2005-04-05 12:00295.9845630.007834.0590
2005-04-05 13:00237.5478632.999835.7544
2005-04-05 14:00267.1838653.693836.6735
2005-04-05 15:00263.9894655.809535.8249
2005-04-05 16:00298.8190638.378835.1843
2005-04-05 17:00327.0035596.454535.7987
2005-04-05 18:00260.9848555.817338.7220
2005-04-05 19:00426.2978533.970641.7648
2005-04-05 20:00404.5546552.949644.0184
2005-04-05 21:00276.4319611.324447.1953
2005-04-05 22:00267.6602652.592249.4721
2005-04-05 23:00199.0148662.326851.0524
2005-04-06 00:00141.3084680.116253.1152
2005-04-06 01:0090.3847730.626454.2431
2005-04-06 02:0086.1137799.434955.4766
2005-04-06 03:0076.3867860.986356.8362
2005-04-06 04:0064.1132890.452158.0996
2005-04-06 05:0087.2179878.197159.2240
2005-04-06 06:00190.6379796.151059.8861
2005-04-06 07:00601.3206663.342259.1575
2005-04-06 08:00592.2224561.077157.2327
2005-04-06 09:00528.3069564.949852.8706
2005-04-06 10:00476.5436599.595846.1781
2005-04-06 11:00356.9073621.793241.6050
2005-04-06 12:00296.3769629.724538.9799
2005-04-06 13:00237.9346632.715237.8304
2005-04-06 14:00267.5660653.399937.2366
\n", "
" ], "text/plain": [ " NOx(GT) PT08.S3(NOx) RH\n", "2005-04-04 15:00 262.1091 656.1044 14.5065\n", "2005-04-04 16:00 297.1918 638.6659 15.6333\n", "2005-04-04 17:00 325.5872 596.7227 17.5673\n", "2005-04-04 18:00 259.7444 556.0672 22.7364\n", "2005-04-04 19:00 425.2039 534.2108 28.3385\n", "2005-04-04 20:00 403.5829 553.1982 33.7580\n", "2005-04-04 21:00 275.5622 611.5993 37.0870\n", "2005-04-04 22:00 266.8754 652.8857 39.7600\n", "2005-04-04 23:00 198.3008 662.6246 41.3155\n", "2005-04-05 00:00 140.6534 680.4221 42.4415\n", "2005-04-05 01:00 89.7790 730.9550 44.4348\n", "2005-04-05 02:00 85.5490 799.7945 46.8401\n", "2005-04-05 03:00 75.8562 861.3735 48.6809\n", "2005-04-05 04:00 63.6113 890.8526 49.7074\n", "2005-04-05 05:00 86.7398 878.5921 50.1808\n", "2005-04-05 06:00 190.1795 796.5090 50.4606\n", "2005-04-05 07:00 600.8788 663.6406 48.9828\n", "2005-04-05 08:00 591.7944 561.3295 46.7280\n", "2005-04-05 09:00 527.8903 565.2039 41.8545\n", "2005-04-05 10:00 476.1367 599.8656 37.9259\n", "2005-04-05 11:00 356.5084 622.0729 35.3302\n", "2005-04-05 12:00 295.9845 630.0078 34.0590\n", "2005-04-05 13:00 237.5478 632.9998 35.7544\n", "2005-04-05 14:00 267.1838 653.6938 36.6735\n", "2005-04-05 15:00 263.9894 655.8095 35.8249\n", "2005-04-05 16:00 298.8190 638.3788 35.1843\n", "2005-04-05 17:00 327.0035 596.4545 35.7987\n", "2005-04-05 18:00 260.9848 555.8173 38.7220\n", "2005-04-05 19:00 426.2978 533.9706 41.7648\n", "2005-04-05 20:00 404.5546 552.9496 44.0184\n", "2005-04-05 21:00 276.4319 611.3244 47.1953\n", "2005-04-05 22:00 267.6602 652.5922 49.4721\n", "2005-04-05 23:00 199.0148 662.3268 51.0524\n", "2005-04-06 00:00 141.3084 680.1162 53.1152\n", "2005-04-06 01:00 90.3847 730.6264 54.2431\n", "2005-04-06 02:00 86.1137 799.4349 55.4766\n", "2005-04-06 03:00 76.3867 860.9863 56.8362\n", "2005-04-06 04:00 64.1132 890.4521 58.0996\n", "2005-04-06 05:00 87.2179 878.1971 59.2240\n", "2005-04-06 06:00 190.6379 796.1510 59.8861\n", "2005-04-06 07:00 601.3206 663.3422 59.1575\n", "2005-04-06 08:00 592.2224 561.0771 57.2327\n", "2005-04-06 09:00 528.3069 564.9498 52.8706\n", "2005-04-06 10:00 476.5436 599.5958 46.1781\n", "2005-04-06 11:00 356.9073 621.7932 41.6050\n", "2005-04-06 12:00 296.3769 629.7245 38.9799\n", "2005-04-06 13:00 237.9346 632.7152 37.8304\n", "2005-04-06 14:00 267.5660 653.3999 37.2366" ] }, "execution_count": 7, "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": 8, "metadata": {}, "outputs": [], "source": [ "exp_future = TSForecastingExperiment()" ] }, { "cell_type": "code", "execution_count": 9, "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": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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_sktime_0p11_2", "language": "python", "name": "pycaret_sktime_0p11_2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.13" } }, "nbformat": 4, "nbformat_minor": 2 }