├── .gitignore ├── air-quality-dataset └── .gitignore ├── README.md ├── fb-prophet-air-quality-forecasting.ipynb └── sarima-model-AQI-forecasting.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints -------------------------------------------------------------------------------- /air-quality-dataset/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Air Quality Analysis and Forecasting 2 | 3 | ## Objective 4 | The objective of the project is to study the seasonality and the meteorological reasons behind the air pollution in Delhi. Moreover, we have experimented with a few machine learning based models to forecast the trend observed in the Air quality index. 5 | 6 | ## Dataset 7 | The dataset contains air quality data and AQI (Air Quality Index) at hourly and daily intervals of various stations across multiple cities in India. The data has been made publicly available by the [Central Pollution Control Board](https://cpcb.nic.in/) which is the official portal of the Government of India. The compiled dataset can be found [here](https://www.kaggle.com/rohanrao/air-quality-data-in-india). 8 | 9 | Download the dataset and extract it out into the `air-quality-dataset` folder. 10 | 11 | ## Notebooks 12 | - `air-quality-analysis.ipynb` - Contains the code used for visualizing the dataset. 13 | - `fb-prophet-air-quality-forecasting.ipynb` - FB Prophet model for forecasting the air quality index. 14 | - `sarima-model-AQI-forecasting.ipynb` - SARIMA model for forecasting the air quality index. 15 | - `rnn-lstm-model-AQI-forecasting.ipynb` - RNN-LSTM model for forecasting the air quality index. 16 | 17 | ## Author 18 | [Shrey Shah](https://github.com/imshreyshah) and Parth Gupta, under the guidance of [Dr. Shamik Chakraborty](https://www.bits-pilani.ac.in/pilani/shamik/profile) 19 | 20 | -------------------------------------------------------------------------------- /fb-prophet-air-quality-forecasting.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0", 8 | "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a", 9 | "execution": { 10 | "iopub.execute_input": "2020-11-29T10:54:59.644197Z", 11 | "iopub.status.busy": "2020-11-29T10:54:59.643372Z", 12 | "iopub.status.idle": "2020-11-29T10:55:01.844954Z", 13 | "shell.execute_reply": "2020-11-29T10:55:01.843997Z" 14 | }, 15 | "papermill": { 16 | "duration": 2.22357, 17 | "end_time": "2020-11-29T10:55:01.845102", 18 | "exception": false, 19 | "start_time": "2020-11-29T10:54:59.621532", 20 | "status": "completed" 21 | }, 22 | "tags": [] 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "# Importing required libraries \n", 27 | "import numpy as np \n", 28 | "import pandas as pd\n", 29 | "import matplotlib.pyplot as plt\n", 30 | "import seaborn as sns\n", 31 | "import plotly.express as px\n", 32 | "\n", 33 | "%matplotlib inline\n", 34 | "\n", 35 | "import warnings\n", 36 | "warnings.filterwarnings('ignore')\n" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 2, 42 | "metadata": { 43 | "execution": { 44 | "iopub.execute_input": "2020-11-29T10:55:01.877863Z", 45 | "iopub.status.busy": "2020-11-29T10:55:01.877103Z", 46 | "iopub.status.idle": "2020-11-29T10:55:01.976221Z", 47 | "shell.execute_reply": "2020-11-29T10:55:01.975598Z" 48 | }, 49 | "papermill": { 50 | "duration": 0.118607, 51 | "end_time": "2020-11-29T10:55:01.976352", 52 | "exception": false, 53 | "start_time": "2020-11-29T10:55:01.857745", 54 | "status": "completed" 55 | }, 56 | "tags": [] 57 | }, 58 | "outputs": [], 59 | "source": [ 60 | "#Reading the data\n", 61 | "df_city = pd.read_csv(\"./air-quality-dataset/city_day.csv\")" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 3, 67 | "metadata": { 68 | "execution": { 69 | "iopub.execute_input": "2020-11-29T10:55:02.011527Z", 70 | "iopub.status.busy": "2020-11-29T10:55:02.010654Z", 71 | "iopub.status.idle": "2020-11-29T10:55:02.070262Z", 72 | "shell.execute_reply": "2020-11-29T10:55:02.069543Z" 73 | }, 74 | "papermill": { 75 | "duration": 0.082029, 76 | "end_time": "2020-11-29T10:55:02.070388", 77 | "exception": false, 78 | "start_time": "2020-11-29T10:55:01.988359", 79 | "status": "completed" 80 | }, 81 | "tags": [] 82 | }, 83 | "outputs": [ 84 | { 85 | "name": "stdout", 86 | "output_type": "stream", 87 | "text": [ 88 | "\n", 89 | "RangeIndex: 29531 entries, 0 to 29530\n", 90 | "Data columns (total 16 columns):\n", 91 | " # Column Non-Null Count Dtype \n", 92 | "--- ------ -------------- ----- \n", 93 | " 0 City 29531 non-null object \n", 94 | " 1 Date 29531 non-null object \n", 95 | " 2 PM2.5 24933 non-null float64\n", 96 | " 3 PM10 18391 non-null float64\n", 97 | " 4 NO 25949 non-null float64\n", 98 | " 5 NO2 25946 non-null float64\n", 99 | " 6 NOx 25346 non-null float64\n", 100 | " 7 NH3 19203 non-null float64\n", 101 | " 8 CO 27472 non-null float64\n", 102 | " 9 SO2 25677 non-null float64\n", 103 | " 10 O3 25509 non-null float64\n", 104 | " 11 Benzene 23908 non-null float64\n", 105 | " 12 Toluene 21490 non-null float64\n", 106 | " 13 Xylene 11422 non-null float64\n", 107 | " 14 AQI 24850 non-null float64\n", 108 | " 15 AQI_Bucket 24850 non-null object \n", 109 | "dtypes: float64(13), object(3)\n", 110 | "memory usage: 3.6+ MB\n", 111 | "None\n" 112 | ] 113 | }, 114 | { 115 | "data": { 116 | "text/html": [ 117 | "
\n", 118 | "\n", 131 | "\n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | "
CityDatePM2.5PM10NONO2NOxNH3COSO2O3BenzeneTolueneXyleneAQIAQI_Bucket
0Ahmedabad2015-01-01NaNNaN0.9218.2217.15NaN0.9227.64133.360.000.020.00NaNNaN
1Ahmedabad2015-01-02NaNNaN0.9715.6916.46NaN0.9724.5534.063.685.503.77NaNNaN
2Ahmedabad2015-01-03NaNNaN17.4019.3029.70NaN17.4029.0730.706.8016.402.25NaNNaN
3Ahmedabad2015-01-04NaNNaN1.7018.4817.97NaN1.7018.5936.084.4310.141.00NaNNaN
4Ahmedabad2015-01-05NaNNaN22.1021.4237.76NaN22.1039.3339.317.0118.892.78NaNNaN
\n", 251 | "
" 252 | ], 253 | "text/plain": [ 254 | " City Date PM2.5 PM10 NO NO2 NOx NH3 CO SO2 \\\n", 255 | "0 Ahmedabad 2015-01-01 NaN NaN 0.92 18.22 17.15 NaN 0.92 27.64 \n", 256 | "1 Ahmedabad 2015-01-02 NaN NaN 0.97 15.69 16.46 NaN 0.97 24.55 \n", 257 | "2 Ahmedabad 2015-01-03 NaN NaN 17.40 19.30 29.70 NaN 17.40 29.07 \n", 258 | "3 Ahmedabad 2015-01-04 NaN NaN 1.70 18.48 17.97 NaN 1.70 18.59 \n", 259 | "4 Ahmedabad 2015-01-05 NaN NaN 22.10 21.42 37.76 NaN 22.10 39.33 \n", 260 | "\n", 261 | " O3 Benzene Toluene Xylene AQI AQI_Bucket \n", 262 | "0 133.36 0.00 0.02 0.00 NaN NaN \n", 263 | "1 34.06 3.68 5.50 3.77 NaN NaN \n", 264 | "2 30.70 6.80 16.40 2.25 NaN NaN \n", 265 | "3 36.08 4.43 10.14 1.00 NaN NaN \n", 266 | "4 39.31 7.01 18.89 2.78 NaN NaN " 267 | ] 268 | }, 269 | "execution_count": 3, 270 | "metadata": {}, 271 | "output_type": "execute_result" 272 | } 273 | ], 274 | "source": [ 275 | "print(df_city.info())\n", 276 | "df_city.head()" 277 | ] 278 | }, 279 | { 280 | "cell_type": "markdown", 281 | "metadata": { 282 | "papermill": { 283 | "duration": 0.012506, 284 | "end_time": "2020-11-29T10:55:02.096198", 285 | "exception": false, 286 | "start_time": "2020-11-29T10:55:02.083692", 287 | "status": "completed" 288 | }, 289 | "tags": [] 290 | }, 291 | "source": [ 292 | "# Filling in Missing Data" 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "execution_count": 4, 298 | "metadata": { 299 | "execution": { 300 | "iopub.execute_input": "2020-11-29T10:55:02.128337Z", 301 | "iopub.status.busy": "2020-11-29T10:55:02.127605Z", 302 | "iopub.status.idle": "2020-11-29T10:55:02.420355Z", 303 | "shell.execute_reply": "2020-11-29T10:55:02.420924Z" 304 | }, 305 | "papermill": { 306 | "duration": 0.311399, 307 | "end_time": "2020-11-29T10:55:02.421099", 308 | "exception": false, 309 | "start_time": "2020-11-29T10:55:02.109700", 310 | "status": "completed" 311 | }, 312 | "tags": [] 313 | }, 314 | "outputs": [ 315 | { 316 | "data": { 317 | "text/plain": [ 318 | "" 319 | ] 320 | }, 321 | "execution_count": 4, 322 | "metadata": {}, 323 | "output_type": "execute_result" 324 | }, 325 | { 326 | "data": { 327 | "image/png": "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\n", 328 | "text/plain": [ 329 | "
" 330 | ] 331 | }, 332 | "metadata": { 333 | "needs_background": "light" 334 | }, 335 | "output_type": "display_data" 336 | } 337 | ], 338 | "source": [ 339 | "df_city.isnull().sum().plot(kind ='bar')" 340 | ] 341 | }, 342 | { 343 | "cell_type": "code", 344 | "execution_count": 5, 345 | "metadata": { 346 | "execution": { 347 | "iopub.execute_input": "2020-11-29T10:55:02.459575Z", 348 | "iopub.status.busy": "2020-11-29T10:55:02.458761Z", 349 | "iopub.status.idle": "2020-11-29T10:55:02.462194Z", 350 | "shell.execute_reply": "2020-11-29T10:55:02.461460Z" 351 | }, 352 | "papermill": { 353 | "duration": 0.026825, 354 | "end_time": "2020-11-29T10:55:02.462316", 355 | "exception": false, 356 | "start_time": "2020-11-29T10:55:02.435491", 357 | "status": "completed" 358 | }, 359 | "tags": [] 360 | }, 361 | "outputs": [], 362 | "source": [ 363 | "df_city['AQI'].fillna(method = 'ffill',inplace = True)\n", 364 | "#df_city['AQI'].fillna(method = 'bfill',inplace = True)\n", 365 | "#df_city['AQI'].fillna(value = 0,inplace = True)" 366 | ] 367 | }, 368 | { 369 | "cell_type": "markdown", 370 | "metadata": { 371 | "papermill": { 372 | "duration": 0.014175, 373 | "end_time": "2020-11-29T10:55:02.491148", 374 | "exception": false, 375 | "start_time": "2020-11-29T10:55:02.476973", 376 | "status": "completed" 377 | }, 378 | "tags": [] 379 | }, 380 | "source": [ 381 | "# FBProphet for forecasting" 382 | ] 383 | }, 384 | { 385 | "cell_type": "code", 386 | "execution_count": 6, 387 | "metadata": { 388 | "execution": { 389 | "iopub.execute_input": "2020-11-29T10:55:02.528344Z", 390 | "iopub.status.busy": "2020-11-29T10:55:02.527518Z", 391 | "iopub.status.idle": "2020-11-29T10:55:02.812636Z", 392 | "shell.execute_reply": "2020-11-29T10:55:02.811977Z" 393 | }, 394 | "papermill": { 395 | "duration": 0.307126, 396 | "end_time": "2020-11-29T10:55:02.812772", 397 | "exception": false, 398 | "start_time": "2020-11-29T10:55:02.505646", 399 | "status": "completed" 400 | }, 401 | "tags": [] 402 | }, 403 | "outputs": [ 404 | { 405 | "ename": "NameError", 406 | "evalue": "name 'delhi' is not defined", 407 | "output_type": "error", 408 | "traceback": [ 409 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 410 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", 411 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mfbprophet\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mProphet\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mdelhi_aqi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdelhi\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Date'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'AQI'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mdelhi_aqi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minplace\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mdrop\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", 412 | "\u001b[0;31mNameError\u001b[0m: name 'delhi' is not defined" 413 | ] 414 | } 415 | ], 416 | "source": [ 417 | "from fbprophet import Prophet \n", 418 | "\n", 419 | "delhi_aqi = delhi[['Date','AQI']]\n", 420 | "delhi_aqi.reset_index(inplace = True,drop = True)\n", 421 | "\n", 422 | "#Defining our training dataset\n", 423 | "train_df = delhi_aqi\n", 424 | "train_df.rename(mapper = {'Date':'ds','AQI':'y'},axis =1,inplace = True)\n", 425 | "train_df" 426 | ] 427 | }, 428 | { 429 | "cell_type": "code", 430 | "execution_count": 7, 431 | "metadata": { 432 | "execution": { 433 | "iopub.execute_input": "2020-11-29T10:55:02.851143Z", 434 | "iopub.status.busy": "2020-11-29T10:55:02.850309Z", 435 | "iopub.status.idle": "2020-11-29T10:55:04.308678Z", 436 | "shell.execute_reply": "2020-11-29T10:55:04.307883Z" 437 | }, 438 | "papermill": { 439 | "duration": 1.47911, 440 | "end_time": "2020-11-29T10:55:04.308806", 441 | "exception": false, 442 | "start_time": "2020-11-29T10:55:02.829696", 443 | "status": "completed" 444 | }, 445 | "tags": [] 446 | }, 447 | "outputs": [ 448 | { 449 | "ename": "NameError", 450 | "evalue": "name 'train_df' is not defined", 451 | "output_type": "error", 452 | "traceback": [ 453 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 454 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", 455 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#Defining the model and fitting on the training dataset\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mProphet\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mholidays_prior_scale\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mseasonality_prior_scale\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m365\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mn_changepoints\u001b[0m\u001b[0;34m=\u001b[0m \u001b[0;36m50\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_df\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 456 | "\u001b[0;31mNameError\u001b[0m: name 'train_df' is not defined" 457 | ] 458 | } 459 | ], 460 | "source": [ 461 | "#Defining the model and fitting on the training dataset\n", 462 | "model = Prophet(holidays_prior_scale=0,seasonality_prior_scale=365,n_changepoints= 50,)\n", 463 | "model.fit(train_df)" 464 | ] 465 | }, 466 | { 467 | "cell_type": "code", 468 | "execution_count": 8, 469 | "metadata": { 470 | "execution": { 471 | "iopub.execute_input": "2020-11-29T10:55:04.356732Z", 472 | "iopub.status.busy": "2020-11-29T10:55:04.355924Z", 473 | "iopub.status.idle": "2020-11-29T10:55:04.368807Z", 474 | "shell.execute_reply": "2020-11-29T10:55:04.369407Z" 475 | }, 476 | "papermill": { 477 | "duration": 0.044917, 478 | "end_time": "2020-11-29T10:55:04.369594", 479 | "exception": false, 480 | "start_time": "2020-11-29T10:55:04.324677", 481 | "status": "completed" 482 | }, 483 | "tags": [] 484 | }, 485 | "outputs": [ 486 | { 487 | "ename": "Exception", 488 | "evalue": "Model has not been fit.", 489 | "output_type": "error", 490 | "traceback": [ 491 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 492 | "\u001b[0;31mException\u001b[0m Traceback (most recent call last)", 493 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#Extrapolating the dates into future\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mfuture\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmake_future_dataframe\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mperiods\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m365\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mfuture\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtail\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 494 | "\u001b[0;32m/opt/conda/lib/python3.7/site-packages/fbprophet/forecaster.py\u001b[0m in \u001b[0;36mmake_future_dataframe\u001b[0;34m(self, periods, freq, include_history)\u001b[0m\n\u001b[1;32m 1505\u001b[0m \"\"\"\n\u001b[1;32m 1506\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistory_dates\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1507\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Model has not been fit.'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1508\u001b[0m \u001b[0mlast_date\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistory_dates\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1509\u001b[0m dates = pd.date_range(\n", 495 | "\u001b[0;31mException\u001b[0m: Model has not been fit." 496 | ] 497 | } 498 | ], 499 | "source": [ 500 | "#Extrapolating the dates into future \n", 501 | "future = model.make_future_dataframe(periods=365)\n", 502 | "future.tail()" 503 | ] 504 | }, 505 | { 506 | "cell_type": "code", 507 | "execution_count": 9, 508 | "metadata": { 509 | "execution": { 510 | "iopub.execute_input": "2020-11-29T10:55:04.414934Z", 511 | "iopub.status.busy": "2020-11-29T10:55:04.408598Z", 512 | "iopub.status.idle": "2020-11-29T10:55:04.425867Z", 513 | "shell.execute_reply": "2020-11-29T10:55:04.425139Z" 514 | }, 515 | "papermill": { 516 | "duration": 0.039731, 517 | "end_time": "2020-11-29T10:55:04.425995", 518 | "exception": false, 519 | "start_time": "2020-11-29T10:55:04.386264", 520 | "status": "completed" 521 | }, 522 | "tags": [] 523 | }, 524 | "outputs": [ 525 | { 526 | "ename": "NameError", 527 | "evalue": "name 'future' is not defined", 528 | "output_type": "error", 529 | "traceback": [ 530 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 531 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", 532 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#Forecasting the AQI values\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mforecast\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfuture\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mforecast\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'ds'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'yhat'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'yhat_lower'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'yhat_upper'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtail\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 533 | "\u001b[0;31mNameError\u001b[0m: name 'future' is not defined" 534 | ] 535 | } 536 | ], 537 | "source": [ 538 | "#Forecasting the AQI values\n", 539 | "forecast = model.predict(future)\n", 540 | "forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()" 541 | ] 542 | }, 543 | { 544 | "cell_type": "code", 545 | "execution_count": 10, 546 | "metadata": { 547 | "execution": { 548 | "iopub.execute_input": "2020-11-29T10:55:04.479624Z", 549 | "iopub.status.busy": "2020-11-29T10:55:04.478817Z", 550 | "iopub.status.idle": "2020-11-29T10:55:04.490454Z", 551 | "shell.execute_reply": "2020-11-29T10:55:04.489809Z" 552 | }, 553 | "papermill": { 554 | "duration": 0.045955, 555 | "end_time": "2020-11-29T10:55:04.490593", 556 | "exception": false, 557 | "start_time": "2020-11-29T10:55:04.444638", 558 | "status": "completed" 559 | }, 560 | "tags": [] 561 | }, 562 | "outputs": [ 563 | { 564 | "ename": "AttributeError", 565 | "evalue": "'NoneType' object has no attribute 'copy'", 566 | "output_type": "error", 567 | "traceback": [ 568 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 569 | "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", 570 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mfbprophet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdiagnostics\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmape\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mcross_validation\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mperformance_metrics\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mdf_cv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcross_validation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'1100 days'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mperiod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'121 days'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhorizon\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'365 days'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mdf_p\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mperformance_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_cv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Cross Validation accuracy:'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mdf_p\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'mape'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 571 | "\u001b[0;32m/opt/conda/lib/python3.7/site-packages/fbprophet/diagnostics.py\u001b[0m in \u001b[0;36mcross_validation\u001b[0;34m(model, horizon, period, initial)\u001b[0m\n\u001b[1;32m 82\u001b[0m \u001b[0mA\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mforecast\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mactual\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mcutoff\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 83\u001b[0m \"\"\"\n\u001b[0;32m---> 84\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 85\u001b[0m \u001b[0mhorizon\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTimedelta\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhorizon\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0;31m# Set period\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 572 | "\u001b[0;31mAttributeError\u001b[0m: 'NoneType' object has no attribute 'copy'" 573 | ] 574 | } 575 | ], 576 | "source": [ 577 | "#Calculating the cross validation accuracy\n", 578 | "\n", 579 | "from fbprophet.diagnostics import mape,cross_validation,performance_metrics\n", 580 | "df_cv = cross_validation(model, initial='1100 days', period='121 days', horizon = '365 days')\n", 581 | "df_p = performance_metrics(df_cv)\n", 582 | "print('Cross Validation accuracy:', (1 - df_p['mape'].mean())*100)" 583 | ] 584 | }, 585 | { 586 | "cell_type": "code", 587 | "execution_count": 11, 588 | "metadata": { 589 | "execution": { 590 | "iopub.execute_input": "2020-11-29T10:55:04.546832Z", 591 | "iopub.status.busy": "2020-11-29T10:55:04.545947Z", 592 | "iopub.status.idle": "2020-11-29T10:55:04.551492Z", 593 | "shell.execute_reply": "2020-11-29T10:55:04.550855Z" 594 | }, 595 | "papermill": { 596 | "duration": 0.042721, 597 | "end_time": "2020-11-29T10:55:04.551616", 598 | "exception": false, 599 | "start_time": "2020-11-29T10:55:04.508895", 600 | "status": "completed" 601 | }, 602 | "tags": [] 603 | }, 604 | "outputs": [ 605 | { 606 | "ename": "NameError", 607 | "evalue": "name 'forecast' is not defined", 608 | "output_type": "error", 609 | "traceback": [ 610 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 611 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", 612 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mfbprophet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mplot_plotly\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplot_plotly\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mforecast\u001b[0m \u001b[0;34m,\u001b[0m\u001b[0mxlabel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'Date'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mylabel\u001b[0m\u001b[0;34m=\u001b[0m \u001b[0;34m'AQI'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m750\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 613 | "\u001b[0;31mNameError\u001b[0m: name 'forecast' is not defined" 614 | ] 615 | } 616 | ], 617 | "source": [ 618 | "#Plotting out the forecast\n", 619 | "from fbprophet.plot import plot_plotly\n", 620 | "\n", 621 | "fig = plot_plotly(model, forecast ,xlabel = 'Date',ylabel= 'AQI',figsize=(1000,750))\n", 622 | "fig.show()" 623 | ] 624 | }, 625 | { 626 | "cell_type": "markdown", 627 | "metadata": { 628 | "papermill": { 629 | "duration": 0.01869, 630 | "end_time": "2020-11-29T10:55:04.589233", 631 | "exception": false, 632 | "start_time": "2020-11-29T10:55:04.570543", 633 | "status": "completed" 634 | }, 635 | "tags": [] 636 | }, 637 | "source": [ 638 | "The model has learnt the seasonal trend of AQI. \n", 639 | "\n", 640 | "The model shows lower values of AQI for the year 2020. Probably considering the lower than normal AQI of the first few months of 2020 because of the quarantine. " 641 | ] 642 | } 643 | ], 644 | "metadata": { 645 | "kernelspec": { 646 | "display_name": "Python 3", 647 | "language": "python", 648 | "name": "python3" 649 | }, 650 | "language_info": { 651 | "codemirror_mode": { 652 | "name": "ipython", 653 | "version": 3 654 | }, 655 | "file_extension": ".py", 656 | "mimetype": "text/x-python", 657 | "name": "python", 658 | "nbconvert_exporter": "python", 659 | "pygments_lexer": "ipython3", 660 | "version": "3.7.6" 661 | }, 662 | "papermill": { 663 | "duration": 10.179616, 664 | "end_time": "2020-11-29T10:55:04.716872", 665 | "environment_variables": {}, 666 | "exception": null, 667 | "input_path": "__notebook__.ipynb", 668 | "output_path": "__notebook__.ipynb", 669 | "parameters": {}, 670 | "start_time": "2020-11-29T10:54:54.537256", 671 | "version": "2.1.0" 672 | } 673 | }, 674 | "nbformat": 4, 675 | "nbformat_minor": 4 676 | } 677 | -------------------------------------------------------------------------------- /sarima-model-AQI-forecasting.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0", 8 | "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a" 9 | }, 10 | "outputs": [], 11 | "source": [ 12 | "#Importing the required libraries\n", 13 | "\n", 14 | "import os\n", 15 | "import pandas as pd\n", 16 | "import numpy as np\n", 17 | "import matplotlib.pyplot as plt\n", 18 | "import seaborn as sns\n", 19 | "from datetime import datetime\n", 20 | "# Ignore harmless warnings\n", 21 | "import warnings\n", 22 | "warnings.filterwarnings(\"ignore\")\n", 23 | "from IPython.display import HTML,display\n", 24 | "\n", 25 | "warnings.filterwarnings(\"ignore\")" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 2, 31 | "metadata": {}, 32 | "outputs": [], 33 | "source": [ 34 | "#Read the daily city-wise data\n", 35 | "df= pd.read_csv(\"./air-quality-dataset/city_day.csv\",parse_dates=True)\n", 36 | "df['Date'] = pd.to_datetime(df['Date'])" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 3, 42 | "metadata": {}, 43 | "outputs": [], 44 | "source": [ 45 | "#Keeping only the columns needed\n", 46 | "df=df[['City','Date','AQI']]" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": 4, 52 | "metadata": {}, 53 | "outputs": [], 54 | "source": [ 55 | "#Filtering the dataframe to keep the data for the city of Delhi only\n", 56 | "delhi = df[df['City'] == 'Delhi']\n", 57 | "delhi.drop(['City'],axis=1,inplace = True)\n", 58 | "delhi.set_index('Date', inplace = True)\n" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 5, 64 | "metadata": {}, 65 | "outputs": [ 66 | { 67 | "data": { 68 | "text/html": [ 69 | "
\n", 70 | "\n", 83 | "\n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | "
AQI
Date
2015-01-01472.0
2015-01-02454.0
2015-01-03143.0
2015-01-04319.0
2015-01-05325.0
......
2020-06-27112.0
2020-06-28196.0
2020-06-29233.0
2020-06-30114.0
2020-07-01101.0
\n", 141 | "

2009 rows × 1 columns

\n", 142 | "
" 143 | ], 144 | "text/plain": [ 145 | " AQI\n", 146 | "Date \n", 147 | "2015-01-01 472.0\n", 148 | "2015-01-02 454.0\n", 149 | "2015-01-03 143.0\n", 150 | "2015-01-04 319.0\n", 151 | "2015-01-05 325.0\n", 152 | "... ...\n", 153 | "2020-06-27 112.0\n", 154 | "2020-06-28 196.0\n", 155 | "2020-06-29 233.0\n", 156 | "2020-06-30 114.0\n", 157 | "2020-07-01 101.0\n", 158 | "\n", 159 | "[2009 rows x 1 columns]" 160 | ] 161 | }, 162 | "execution_count": 5, 163 | "metadata": {}, 164 | "output_type": "execute_result" 165 | } 166 | ], 167 | "source": [ 168 | "delhi" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": 6, 174 | "metadata": {}, 175 | "outputs": [], 176 | "source": [ 177 | "#Fill NULL DATA\n", 178 | "delhi['AQI'].fillna(method = 'bfill',inplace = True)" 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": 7, 184 | "metadata": {}, 185 | "outputs": [], 186 | "source": [ 187 | "#Taking monthly average\n", 188 | "delhi=delhi.astype('float64')\n", 189 | "delhi=delhi.resample(rule='MS').mean()" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 8, 195 | "metadata": {}, 196 | "outputs": [ 197 | { 198 | "data": { 199 | "image/png": "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\n", 200 | "text/plain": [ 201 | "
" 202 | ] 203 | }, 204 | "metadata": { 205 | "needs_background": "light" 206 | }, 207 | "output_type": "display_data" 208 | } 209 | ], 210 | "source": [ 211 | "ax=delhi[['AQI']].plot(figsize=(12,8),grid=True,lw=2,color='Red')\n", 212 | "ax.autoscale(enable=True, axis='both', tight=True)" 213 | ] 214 | }, 215 | { 216 | "cell_type": "markdown", 217 | "metadata": {}, 218 | "source": [ 219 | "# FORECASTING\n" 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": 9, 225 | "metadata": {}, 226 | "outputs": [], 227 | "source": [ 228 | "from statsmodels.tsa.seasonal import seasonal_decompose\n", 229 | "from sklearn.metrics import mean_squared_error" 230 | ] 231 | }, 232 | { 233 | "cell_type": "code", 234 | "execution_count": 10, 235 | "metadata": {}, 236 | "outputs": [ 237 | { 238 | "data": { 239 | "image/png": "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\n", 240 | "text/plain": [ 241 | "
" 242 | ] 243 | }, 244 | "metadata": { 245 | "needs_background": "light" 246 | }, 247 | "output_type": "display_data" 248 | } 249 | ], 250 | "source": [ 251 | "delhi_AQI=delhi['AQI']\n", 252 | "result=seasonal_decompose(delhi_AQI,model='multiplicative')\n", 253 | "result.plot();" 254 | ] 255 | }, 256 | { 257 | "cell_type": "markdown", 258 | "metadata": {}, 259 | "source": [ 260 | "# **SARIMAX MODEL**" 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": 11, 266 | "metadata": {}, 267 | "outputs": [], 268 | "source": [ 269 | "#Importing the SARIMAX Model\n", 270 | "from statsmodels.tsa.statespace.sarimax import SARIMAX" 271 | ] 272 | }, 273 | { 274 | "cell_type": "code", 275 | "execution_count": 12, 276 | "metadata": {}, 277 | "outputs": [ 278 | { 279 | "data": { 280 | "text/plain": [ 281 | "67" 282 | ] 283 | }, 284 | "execution_count": 12, 285 | "metadata": {}, 286 | "output_type": "execute_result" 287 | } 288 | ], 289 | "source": [ 290 | "len(delhi_AQI)" 291 | ] 292 | }, 293 | { 294 | "cell_type": "code", 295 | "execution_count": null, 296 | "metadata": {}, 297 | "outputs": [], 298 | "source": [ 299 | "#Splitting the training and testing dataset\n", 300 | "train=delhi_AQI[:48]\n", 301 | "test=delhi_AQI[48:61]" 302 | ] 303 | }, 304 | { 305 | "cell_type": "code", 306 | "execution_count": null, 307 | "metadata": {}, 308 | "outputs": [], 309 | "source": [ 310 | "#Defining our model and fitting on the training data\n", 311 | "model=SARIMAX(train,order=(0,1,3),seasonal_order=(0,1,1,12))\n", 312 | "results=model.fit()\n", 313 | "results.summary()" 314 | ] 315 | }, 316 | { 317 | "cell_type": "code", 318 | "execution_count": null, 319 | "metadata": {}, 320 | "outputs": [], 321 | "source": [ 322 | "#Predicting on our train and test dataset\n", 323 | "train_predictions = results.predict(start=1, end=48, typ='levels').rename('Predictions')\n", 324 | "test_predictions = results.predict(start=48, end=60, typ='levels').rename('Predictions')" 325 | ] 326 | }, 327 | { 328 | "cell_type": "code", 329 | "execution_count": null, 330 | "metadata": {}, 331 | "outputs": [], 332 | "source": [ 333 | "#Plotting the train predictions to see the fit of the model\n", 334 | "train_predictions.plot(legend=True)\n", 335 | "train.plot(legend=True)" 336 | ] 337 | }, 338 | { 339 | "cell_type": "code", 340 | "execution_count": null, 341 | "metadata": {}, 342 | "outputs": [], 343 | "source": [ 344 | "#Calculating the RMSE value on the training dataset \n", 345 | "RMSE=np.sqrt(mean_squared_error(train_predictions,train))\n", 346 | "print('RMSE = ',RMSE)\n", 347 | "print('Mean AQI',train.mean())" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": null, 353 | "metadata": {}, 354 | "outputs": [], 355 | "source": [ 356 | "#Plotting the test predictions to see how well our model generalized\n", 357 | "test_predictions.plot(legend=True)\n", 358 | "test.plot(legend=True)" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": null, 364 | "metadata": {}, 365 | "outputs": [], 366 | "source": [ 367 | "#Calculating the RMSE value on the testing dataset \n", 368 | "RMSE=np.sqrt(mean_squared_error(test_predictions,test))\n", 369 | "print('RMSE = ',RMSE)\n", 370 | "print('Mean AQI',test.mean())" 371 | ] 372 | }, 373 | { 374 | "cell_type": "code", 375 | "execution_count": null, 376 | "metadata": {}, 377 | "outputs": [], 378 | "source": [ 379 | "#Obtaining predicted values:\n", 380 | "future_predictions = results.predict(start=67, end=77, typ='levels').rename('Predictions')\n", 381 | "\n", 382 | "#Plotting predicted values against the true values:\n", 383 | "future_predictions.plot(legend=True)\n", 384 | "delhi_AQI.plot(legend=True,figsize=(12,8),grid=True)" 385 | ] 386 | }, 387 | { 388 | "cell_type": "markdown", 389 | "metadata": {}, 390 | "source": [ 391 | "### GRID search framework for fine tuning the model" 392 | ] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "execution_count": null, 397 | "metadata": {}, 398 | "outputs": [], 399 | "source": [ 400 | "def grid_search(p,d,q,P,D,Q,m,train,test):\n", 401 | " \n", 402 | " column_names = ['p','d','q','P','D','Q','m','RMSE_train','RMSE_test']\n", 403 | " df = pd.DataFrame(columns = column_names)\n", 404 | "\n", 405 | " for p1 in p:\n", 406 | " for p2 in d:\n", 407 | " for p3 in q:\n", 408 | " for p4 in P:\n", 409 | " for p5 in D:\n", 410 | " for p6 in Q:\n", 411 | " for p7 in m:\n", 412 | " \n", 413 | " \n", 414 | " model=SARIMAX(train,order=(p1,p2,p3),seasonal_order=(p4,p5,p6,p7))\n", 415 | " try:\n", 416 | " results=model.fit()\n", 417 | " except:\n", 418 | " print(\"Passing on : \" + str(p1) + \" \" + str(p2) + \" \" + str(p3) + \" \" + str(p4) + \" \" + str(p5) + \" \" + str(p6) + \" \" + str(p7))\n", 419 | " pass\n", 420 | " print(\"Fitting on : \" + str(p1) + \" \" + str(p2) + \" \" + str(p3) + \" \" + str(p4) + \" \" + str(p5) + \" \" + str(p6) + \" \" + str(p7))\n", 421 | " #results.summary()\n", 422 | " #Predicting on our train and test dataset\n", 423 | " train_predictions = results.predict(start=1, end=48, typ='levels').rename('Predictions')\n", 424 | " test_predictions = results.predict(start=48, end=60, typ='levels').rename('Predictions')\n", 425 | " \n", 426 | " #Calculating the RMSE value on the training dataset \n", 427 | " RMSE_train = np.sqrt(mean_squared_error(train_predictions,train))\n", 428 | " #Calculating the RMSE value on the testing dataset \n", 429 | " RMSE_test=np.sqrt(mean_squared_error(test_predictions,test))\n", 430 | " \n", 431 | " #Fill our dataframe\n", 432 | " df = df.append({'p':p1, 'd':p2,'q':p3,\n", 433 | " 'P':p4,'D':p5,'Q':p6,'m':p7,\n", 434 | " 'RMSE_train' : RMSE_train, 'RMSE_test' : RMSE_test},\n", 435 | " ignore_index = True)\n", 436 | " print(df.tail(1))\n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " return df" 441 | ] 442 | }, 443 | { 444 | "cell_type": "code", 445 | "execution_count": null, 446 | "metadata": {}, 447 | "outputs": [], 448 | "source": [ 449 | "train=delhi_AQI[:48]\n", 450 | "test=delhi_AQI[48:61]\n", 451 | "\n", 452 | "p = [1,2,3,0]\n", 453 | "d = [1,2,3,0]\n", 454 | "q = [1,2,3,0]\n", 455 | "P = [1,2,3,0]\n", 456 | "D = [1,2,3,0]\n", 457 | "Q = [1,2,3,0]\n", 458 | "m = [12]\n", 459 | "\n", 460 | "table = grid_search(p,d,q,P,D,Q,m,train,test)" 461 | ] 462 | }, 463 | { 464 | "cell_type": "code", 465 | "execution_count": null, 466 | "metadata": {}, 467 | "outputs": [], 468 | "source": [ 469 | "table" 470 | ] 471 | }, 472 | { 473 | "cell_type": "code", 474 | "execution_count": null, 475 | "metadata": {}, 476 | "outputs": [], 477 | "source": [ 478 | "table.to_csv(\"grid-search-results.csv\")" 479 | ] 480 | }, 481 | { 482 | "cell_type": "code", 483 | "execution_count": null, 484 | "metadata": {}, 485 | "outputs": [], 486 | "source": [] 487 | } 488 | ], 489 | "metadata": { 490 | "kernelspec": { 491 | "display_name": "Python 3", 492 | "language": "python", 493 | "name": "python3" 494 | }, 495 | "language_info": { 496 | "codemirror_mode": { 497 | "name": "ipython", 498 | "version": 3 499 | }, 500 | "file_extension": ".py", 501 | "mimetype": "text/x-python", 502 | "name": "python", 503 | "nbconvert_exporter": "python", 504 | "pygments_lexer": "ipython3", 505 | "version": "3.7.6" 506 | } 507 | }, 508 | "nbformat": 4, 509 | "nbformat_minor": 4 510 | } 511 | --------------------------------------------------------------------------------