-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathXGBoost_dataset2
More file actions
1 lines (1 loc) · 114 KB
/
Copy pathXGBoost_dataset2
File metadata and controls
1 lines (1 loc) · 114 KB
1
{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"},"colab":{"provenance":[{"file_id":"1n492Z7nTgaDEqbwg_KX2LZCEeMvU8gCV","timestamp":1713271906268},{"file_id":"https://storage.googleapis.com/kaggle-colab-exported-notebooks/pt2-time-series-forecasting-with-xgboost-d75594f8-f555-4488-86ab-7ed2fcac1328.ipynb?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=gcp-kaggle-com%40kaggle-161607.iam.gserviceaccount.com/20240415/auto/storage/goog4_request&X-Goog-Date=20240415T142350Z&X-Goog-Expires=259200&X-Goog-SignedHeaders=host&X-Goog-Signature=c4097ec783c1a14a3126eb661060ed19cc70539f0f8fe4e4a664a11abedb2cbf5c1c6f46ee317a77557c13dbd6699853efc376d4fb2a7fde4748b0a9b33326c0d1457a670a27b73e1e391c865cc6574f47d2aa598b53b6d51d73eb6ec977f9375858de186358002386a304cd3edb0496d43a695a40d861eb63940d3e03a029c728a6f4cea0b0c8ba4f64cc95529014ab08e422464991578c1cb940a4d0c71588caf8fcebaeae9444d3df8b388e7920dfc8162fe80b11a4598d222c562eecbbcbeec0075d4b0287226875aa40887043f7e9a2bece1261fe56e49e259defc16964f8eca112e5efae37408e36246bd9a951194f47031f2d7ebb8e1d1d19fb0525db","timestamp":1713192571882}]}},"nbformat_minor":0,"nbformat":4,"cells":[{"cell_type":"code","source":["import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","\n","import xgboost as xgb\n","from sklearn.metrics import mean_squared_error\n","\n","from google.colab import drive\n","drive.mount('/content/gdrive')\n","\n","data = pd.read_excel('/content/gdrive/My Drive/processed_dataset2.xlsx')\n","data = data.set_index('date')\n","data.index = pd.to_datetime(data.index)"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T20:06:56.054744Z","iopub.execute_input":"2022-08-01T20:06:56.055251Z","iopub.status.idle":"2022-08-01T20:06:57.191219Z","shell.execute_reply.started":"2022-08-01T20:06:56.055152Z","shell.execute_reply":"2022-08-01T20:06:57.190146Z"},"trusted":true,"id":"twz2VrrwI0b5","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1713281778082,"user_tz":-330,"elapsed":4483,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"outputId":"675cc9ff-3e46-4bf5-bebb-35dac9e89da2"},"execution_count":10,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/gdrive; to attempt to forcibly remount, call drive.mount(\"/content/gdrive\", force_remount=True).\n"]}]},{"cell_type":"code","source":["\n","data.head()"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T20:47:55.649301Z","iopub.execute_input":"2022-08-01T20:47:55.649925Z","iopub.status.idle":"2022-08-01T20:47:55.896973Z","shell.execute_reply.started":"2022-08-01T20:47:55.649882Z","shell.execute_reply":"2022-08-01T20:47:55.895464Z"},"trusted":true,"id":"LKulVa7NI0b6","executionInfo":{"status":"ok","timestamp":1713281778083,"user_tz":-330,"elapsed":23,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"colab":{"base_uri":"https://localhost:8080/","height":237},"outputId":"e003f69d-2258-41e4-fe20-b88553ece03c"},"execution_count":11,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" meantemp humidity wind_speed meanpressure meantemp_diff1 \\\n","date \n","2013-01-02 7.400000 92.000000 2.980000 1017.800000 -2.600000 \n","2013-01-03 7.166667 87.000000 4.633333 1018.666667 -0.233333 \n","2013-01-04 8.666667 71.333333 1.233333 1017.166667 1.500000 \n","2013-01-05 6.000000 86.833333 3.700000 1016.500000 -2.666667 \n","2013-01-06 7.000000 82.800000 1.480000 1018.000000 1.000000 \n","\n"," meantemp_normalized meantemp_diff1_normalized \n","date \n","2013-01-02 0.042795 0.464096 \n","2013-01-03 0.035662 0.600964 \n","2013-01-04 0.081514 0.701205 \n","2013-01-05 0.000000 0.460241 \n","2013-01-06 0.030568 0.672289 "],"text/html":["\n"," <div id=\"df-b9edb93c-404d-42e4-8366-fe20d3a59b19\" class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>meantemp</th>\n"," <th>humidity</th>\n"," <th>wind_speed</th>\n"," <th>meanpressure</th>\n"," <th>meantemp_diff1</th>\n"," <th>meantemp_normalized</th>\n"," <th>meantemp_diff1_normalized</th>\n"," </tr>\n"," <tr>\n"," <th>date</th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>2013-01-02</th>\n"," <td>7.400000</td>\n"," <td>92.000000</td>\n"," <td>2.980000</td>\n"," <td>1017.800000</td>\n"," <td>-2.600000</td>\n"," <td>0.042795</td>\n"," <td>0.464096</td>\n"," </tr>\n"," <tr>\n"," <th>2013-01-03</th>\n"," <td>7.166667</td>\n"," <td>87.000000</td>\n"," <td>4.633333</td>\n"," <td>1018.666667</td>\n"," <td>-0.233333</td>\n"," <td>0.035662</td>\n"," <td>0.600964</td>\n"," </tr>\n"," <tr>\n"," <th>2013-01-04</th>\n"," <td>8.666667</td>\n"," <td>71.333333</td>\n"," <td>1.233333</td>\n"," <td>1017.166667</td>\n"," <td>1.500000</td>\n"," <td>0.081514</td>\n"," <td>0.701205</td>\n"," </tr>\n"," <tr>\n"," <th>2013-01-05</th>\n"," <td>6.000000</td>\n"," <td>86.833333</td>\n"," <td>3.700000</td>\n"," <td>1016.500000</td>\n"," <td>-2.666667</td>\n"," <td>0.000000</td>\n"," <td>0.460241</td>\n"," </tr>\n"," <tr>\n"," <th>2013-01-06</th>\n"," <td>7.000000</td>\n"," <td>82.800000</td>\n"," <td>1.480000</td>\n"," <td>1018.000000</td>\n"," <td>1.000000</td>\n"," <td>0.030568</td>\n"," <td>0.672289</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>\n"," <div class=\"colab-df-buttons\">\n","\n"," <div class=\"colab-df-container\">\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-b9edb93c-404d-42e4-8366-fe20d3a59b19')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n","\n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n"," <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n"," </svg>\n"," </button>\n","\n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," .colab-df-buttons div {\n"," margin-bottom: 4px;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-b9edb93c-404d-42e4-8366-fe20d3a59b19 button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-b9edb93c-404d-42e4-8366-fe20d3a59b19');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n","\n","\n","<div id=\"df-df229dd4-1823-4371-87ec-c9b127cdcd35\">\n"," <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-df229dd4-1823-4371-87ec-c9b127cdcd35')\"\n"," title=\"Suggest charts\"\n"," style=\"display:none;\">\n","\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <g>\n"," <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n"," </g>\n","</svg>\n"," </button>\n","\n","<style>\n"," .colab-df-quickchart {\n"," --bg-color: #E8F0FE;\n"," --fill-color: #1967D2;\n"," --hover-bg-color: #E2EBFA;\n"," --hover-fill-color: #174EA6;\n"," --disabled-fill-color: #AAA;\n"," --disabled-bg-color: #DDD;\n"," }\n","\n"," [theme=dark] .colab-df-quickchart {\n"," --bg-color: #3B4455;\n"," --fill-color: #D2E3FC;\n"," --hover-bg-color: #434B5C;\n"," --hover-fill-color: #FFFFFF;\n"," --disabled-bg-color: #3B4455;\n"," --disabled-fill-color: #666;\n"," }\n","\n"," .colab-df-quickchart {\n"," background-color: var(--bg-color);\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: var(--fill-color);\n"," height: 32px;\n"," padding: 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-quickchart:hover {\n"," background-color: var(--hover-bg-color);\n"," box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: var(--button-hover-fill-color);\n"," }\n","\n"," .colab-df-quickchart-complete:disabled,\n"," .colab-df-quickchart-complete:disabled:hover {\n"," background-color: var(--disabled-bg-color);\n"," fill: var(--disabled-fill-color);\n"," box-shadow: none;\n"," }\n","\n"," .colab-df-spinner {\n"," border: 2px solid var(--fill-color);\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," animation:\n"," spin 1s steps(1) infinite;\n"," }\n","\n"," @keyframes spin {\n"," 0% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," border-left-color: var(--fill-color);\n"," }\n"," 20% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 30% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," border-right-color: var(--fill-color);\n"," }\n"," 40% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 60% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," }\n"," 80% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-bottom-color: var(--fill-color);\n"," }\n"," 90% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," }\n"," }\n","</style>\n","\n"," <script>\n"," async function quickchart(key) {\n"," const quickchartButtonEl =\n"," document.querySelector('#' + key + ' button');\n"," quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n"," quickchartButtonEl.classList.add('colab-df-spinner');\n"," try {\n"," const charts = await google.colab.kernel.invokeFunction(\n"," 'suggestCharts', [key], {});\n"," } catch (error) {\n"," console.error('Error during call to suggestCharts:', error);\n"," }\n"," quickchartButtonEl.classList.remove('colab-df-spinner');\n"," quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n"," }\n"," (() => {\n"," let quickchartButtonEl =\n"," document.querySelector('#df-df229dd4-1823-4371-87ec-c9b127cdcd35 button');\n"," quickchartButtonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n"," })();\n"," </script>\n","</div>\n","\n"," </div>\n"," </div>\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"data","summary":"{\n \"name\": \"data\",\n \"rows\": 1460,\n \"fields\": [\n {\n \"column\": \"date\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"2013-01-02 00:00:00\",\n \"max\": \"2016-12-31 00:00:00\",\n \"num_unique_values\": 1460,\n \"samples\": [\n \"2015-06-13 00:00:00\",\n \"2016-01-12 00:00:00\",\n \"2014-02-19 00:00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meantemp\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.330691226666758,\n \"min\": 6.0,\n \"max\": 38.7142857142857,\n \"num_unique_values\": 617,\n \"samples\": [\n 19.3333333333333,\n 20.6666666666666,\n 30.1666666666666\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"humidity\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 16.738107319702177,\n \"min\": 13.4285714285714,\n \"max\": 98.0,\n \"num_unique_values\": 896,\n \"samples\": [\n 23.5,\n 38.75,\n 92.75\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"wind_speed\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 4.55776527411237,\n \"min\": 0.0,\n \"max\": 42.22,\n \"num_unique_values\": 674,\n \"samples\": [\n 13.3230769230769,\n 8.11249999999999,\n 5.78461538461538\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meanpressure\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 180.35507179076706,\n \"min\": -3.04166666666666,\n \"max\": 7679.33333333333,\n \"num_unique_values\": 626,\n \"samples\": [\n 1003.0625,\n 998.8125,\n 1012.85714285714\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meantemp_diff1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.6667995622842011,\n \"min\": -10.625,\n \"max\": 6.6666666666666,\n \"num_unique_values\": 677,\n \"samples\": [\n 2.178947368421102,\n 1.928571428571502,\n 0.7380952380952017\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meantemp_normalized\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.22408226457059965,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 617,\n \"samples\": [\n 0.4075691411935945,\n 0.4483260553129531,\n 0.7387190684133899\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meantemp_diff1_normalized\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.09639322769836381,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 676,\n \"samples\": [\n 0.5733086190917517,\n 0.5339070567986218,\n 0.4946643717728057\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":11}]},{"cell_type":"markdown","source":["# 1. Forecasting Horizon"],"metadata":{"id":"Z90LV-bWZFR1"}},{"cell_type":"code","source":["def create_features(data):\n"," \"\"\"\n"," Create time series features based on time series index.\n"," \"\"\"\n"," data = data.copy()\n"," data['dayofweek'] = data.index.dayofweek\n"," data['quarter'] = data.index.quarter\n"," data['month'] = data.index.month\n"," data['year'] = data.index.year\n"," data['dayofyear'] = data.index.dayofyear\n"," data['dayofmonth'] = data.index.day\n"," data['weekofyear'] = data.index.isocalendar().week\n"," return data\n","\n","data = create_features(data)"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:04:03.166197Z","iopub.execute_input":"2022-08-01T21:04:03.166751Z","iopub.status.idle":"2022-08-01T21:04:03.360967Z","shell.execute_reply.started":"2022-08-01T21:04:03.166711Z","shell.execute_reply":"2022-08-01T21:04:03.359392Z"},"trusted":true,"id":"JRoAjuGEI0b9","executionInfo":{"status":"ok","timestamp":1713281778083,"user_tz":-330,"elapsed":20,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}}},"execution_count":12,"outputs":[]},{"cell_type":"markdown","source":["# 2. Lag Features"],"metadata":{"id":"huqMYwBUZOxS"}},{"cell_type":"code","source":["def add_lags(data):\n"," target_map = data['meantemp'].to_dict()\n"," data['lag1'] = (data.index - pd.Timedelta('364 days')).map(target_map)\n"," data['lag2'] = (data.index - pd.Timedelta('728 days')).map(target_map)\n"," data['lag3'] = (data.index - pd.Timedelta('1092 days')).map(target_map)\n"," return data"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:08:07.781814Z","iopub.execute_input":"2022-08-01T21:08:07.782296Z","iopub.status.idle":"2022-08-01T21:08:07.791203Z","shell.execute_reply.started":"2022-08-01T21:08:07.782254Z","shell.execute_reply":"2022-08-01T21:08:07.789775Z"},"trusted":true,"id":"U9lglFmNI0b-","executionInfo":{"status":"ok","timestamp":1713281778083,"user_tz":-330,"elapsed":19,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}}},"execution_count":13,"outputs":[]},{"cell_type":"code","source":["data = add_lags(data)\n","data.head()"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:08:13.332464Z","iopub.execute_input":"2022-08-01T21:08:13.333676Z","iopub.status.idle":"2022-08-01T21:08:19.518906Z","shell.execute_reply.started":"2022-08-01T21:08:13.333621Z","shell.execute_reply":"2022-08-01T21:08:19.517487Z"},"trusted":true,"id":"vMOyOHLXI0b-","colab":{"base_uri":"https://localhost:8080/","height":344},"executionInfo":{"status":"ok","timestamp":1713281778801,"user_tz":-330,"elapsed":13,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"outputId":"9a880a54-659a-4800-abfc-e0f178707ed0"},"execution_count":14,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" meantemp humidity wind_speed meanpressure meantemp_diff1 \\\n","date \n","2013-01-02 7.400000 92.000000 2.980000 1017.800000 -2.600000 \n","2013-01-03 7.166667 87.000000 4.633333 1018.666667 -0.233333 \n","2013-01-04 8.666667 71.333333 1.233333 1017.166667 1.500000 \n","2013-01-05 6.000000 86.833333 3.700000 1016.500000 -2.666667 \n","2013-01-06 7.000000 82.800000 1.480000 1018.000000 1.000000 \n","\n"," meantemp_normalized meantemp_diff1_normalized dayofweek \\\n","date \n","2013-01-02 0.042795 0.464096 2 \n","2013-01-03 0.035662 0.600964 3 \n","2013-01-04 0.081514 0.701205 4 \n","2013-01-05 0.000000 0.460241 5 \n","2013-01-06 0.030568 0.672289 6 \n","\n"," quarter month year dayofyear dayofmonth weekofyear lag1 \\\n","date \n","2013-01-02 1 1 2013 2 2 1 NaN \n","2013-01-03 1 1 2013 3 3 1 NaN \n","2013-01-04 1 1 2013 4 4 1 NaN \n","2013-01-05 1 1 2013 5 5 1 NaN \n","2013-01-06 1 1 2013 6 6 1 NaN \n","\n"," lag2 lag3 \n","date \n","2013-01-02 NaN NaN \n","2013-01-03 NaN NaN \n","2013-01-04 NaN NaN \n","2013-01-05 NaN NaN \n","2013-01-06 NaN NaN "],"text/html":["\n"," <div id=\"df-91b4c9e5-6113-4099-942f-02fa9f2083a4\" class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>meantemp</th>\n"," <th>humidity</th>\n"," <th>wind_speed</th>\n"," <th>meanpressure</th>\n"," <th>meantemp_diff1</th>\n"," <th>meantemp_normalized</th>\n"," <th>meantemp_diff1_normalized</th>\n"," <th>dayofweek</th>\n"," <th>quarter</th>\n"," <th>month</th>\n"," <th>year</th>\n"," <th>dayofyear</th>\n"," <th>dayofmonth</th>\n"," <th>weekofyear</th>\n"," <th>lag1</th>\n"," <th>lag2</th>\n"," <th>lag3</th>\n"," </tr>\n"," <tr>\n"," <th>date</th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>2013-01-02</th>\n"," <td>7.400000</td>\n"," <td>92.000000</td>\n"," <td>2.980000</td>\n"," <td>1017.800000</td>\n"," <td>-2.600000</td>\n"," <td>0.042795</td>\n"," <td>0.464096</td>\n"," <td>2</td>\n"," <td>1</td>\n"," <td>1</td>\n"," <td>2013</td>\n"," <td>2</td>\n"," <td>2</td>\n"," <td>1</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," </tr>\n"," <tr>\n"," <th>2013-01-03</th>\n"," <td>7.166667</td>\n"," <td>87.000000</td>\n"," <td>4.633333</td>\n"," <td>1018.666667</td>\n"," <td>-0.233333</td>\n"," <td>0.035662</td>\n"," <td>0.600964</td>\n"," <td>3</td>\n"," <td>1</td>\n"," <td>1</td>\n"," <td>2013</td>\n"," <td>3</td>\n"," <td>3</td>\n"," <td>1</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," </tr>\n"," <tr>\n"," <th>2013-01-04</th>\n"," <td>8.666667</td>\n"," <td>71.333333</td>\n"," <td>1.233333</td>\n"," <td>1017.166667</td>\n"," <td>1.500000</td>\n"," <td>0.081514</td>\n"," <td>0.701205</td>\n"," <td>4</td>\n"," <td>1</td>\n"," <td>1</td>\n"," <td>2013</td>\n"," <td>4</td>\n"," <td>4</td>\n"," <td>1</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," </tr>\n"," <tr>\n"," <th>2013-01-05</th>\n"," <td>6.000000</td>\n"," <td>86.833333</td>\n"," <td>3.700000</td>\n"," <td>1016.500000</td>\n"," <td>-2.666667</td>\n"," <td>0.000000</td>\n"," <td>0.460241</td>\n"," <td>5</td>\n"," <td>1</td>\n"," <td>1</td>\n"," <td>2013</td>\n"," <td>5</td>\n"," <td>5</td>\n"," <td>1</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," </tr>\n"," <tr>\n"," <th>2013-01-06</th>\n"," <td>7.000000</td>\n"," <td>82.800000</td>\n"," <td>1.480000</td>\n"," <td>1018.000000</td>\n"," <td>1.000000</td>\n"," <td>0.030568</td>\n"," <td>0.672289</td>\n"," <td>6</td>\n"," <td>1</td>\n"," <td>1</td>\n"," <td>2013</td>\n"," <td>6</td>\n"," <td>6</td>\n"," <td>1</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," <td>NaN</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>\n"," <div class=\"colab-df-buttons\">\n","\n"," <div class=\"colab-df-container\">\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-91b4c9e5-6113-4099-942f-02fa9f2083a4')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n","\n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n"," <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n"," </svg>\n"," </button>\n","\n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," .colab-df-buttons div {\n"," margin-bottom: 4px;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-91b4c9e5-6113-4099-942f-02fa9f2083a4 button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-91b4c9e5-6113-4099-942f-02fa9f2083a4');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n","\n","\n","<div id=\"df-b071eb41-4dd7-4d5e-b4b6-2ae3cf07cdc0\">\n"," <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b071eb41-4dd7-4d5e-b4b6-2ae3cf07cdc0')\"\n"," title=\"Suggest charts\"\n"," style=\"display:none;\">\n","\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <g>\n"," <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n"," </g>\n","</svg>\n"," </button>\n","\n","<style>\n"," .colab-df-quickchart {\n"," --bg-color: #E8F0FE;\n"," --fill-color: #1967D2;\n"," --hover-bg-color: #E2EBFA;\n"," --hover-fill-color: #174EA6;\n"," --disabled-fill-color: #AAA;\n"," --disabled-bg-color: #DDD;\n"," }\n","\n"," [theme=dark] .colab-df-quickchart {\n"," --bg-color: #3B4455;\n"," --fill-color: #D2E3FC;\n"," --hover-bg-color: #434B5C;\n"," --hover-fill-color: #FFFFFF;\n"," --disabled-bg-color: #3B4455;\n"," --disabled-fill-color: #666;\n"," }\n","\n"," .colab-df-quickchart {\n"," background-color: var(--bg-color);\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: var(--fill-color);\n"," height: 32px;\n"," padding: 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-quickchart:hover {\n"," background-color: var(--hover-bg-color);\n"," box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: var(--button-hover-fill-color);\n"," }\n","\n"," .colab-df-quickchart-complete:disabled,\n"," .colab-df-quickchart-complete:disabled:hover {\n"," background-color: var(--disabled-bg-color);\n"," fill: var(--disabled-fill-color);\n"," box-shadow: none;\n"," }\n","\n"," .colab-df-spinner {\n"," border: 2px solid var(--fill-color);\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," animation:\n"," spin 1s steps(1) infinite;\n"," }\n","\n"," @keyframes spin {\n"," 0% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," border-left-color: var(--fill-color);\n"," }\n"," 20% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 30% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," border-right-color: var(--fill-color);\n"," }\n"," 40% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 60% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," }\n"," 80% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-bottom-color: var(--fill-color);\n"," }\n"," 90% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," }\n"," }\n","</style>\n","\n"," <script>\n"," async function quickchart(key) {\n"," const quickchartButtonEl =\n"," document.querySelector('#' + key + ' button');\n"," quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n"," quickchartButtonEl.classList.add('colab-df-spinner');\n"," try {\n"," const charts = await google.colab.kernel.invokeFunction(\n"," 'suggestCharts', [key], {});\n"," } catch (error) {\n"," console.error('Error during call to suggestCharts:', error);\n"," }\n"," quickchartButtonEl.classList.remove('colab-df-spinner');\n"," quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n"," }\n"," (() => {\n"," let quickchartButtonEl =\n"," document.querySelector('#df-b071eb41-4dd7-4d5e-b4b6-2ae3cf07cdc0 button');\n"," quickchartButtonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n"," })();\n"," </script>\n","</div>\n","\n"," </div>\n"," </div>\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"data","summary":"{\n \"name\": \"data\",\n \"rows\": 1460,\n \"fields\": [\n {\n \"column\": \"date\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"2013-01-02 00:00:00\",\n \"max\": \"2016-12-31 00:00:00\",\n \"num_unique_values\": 1460,\n \"samples\": [\n \"2015-06-13 00:00:00\",\n \"2016-01-12 00:00:00\",\n \"2014-02-19 00:00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meantemp\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.330691226666758,\n \"min\": 6.0,\n \"max\": 38.7142857142857,\n \"num_unique_values\": 617,\n \"samples\": [\n 19.3333333333333,\n 20.6666666666666,\n 30.1666666666666\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"humidity\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 16.738107319702177,\n \"min\": 13.4285714285714,\n \"max\": 98.0,\n \"num_unique_values\": 896,\n \"samples\": [\n 23.5,\n 38.75,\n 92.75\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"wind_speed\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 4.55776527411237,\n \"min\": 0.0,\n \"max\": 42.22,\n \"num_unique_values\": 674,\n \"samples\": [\n 13.3230769230769,\n 8.11249999999999,\n 5.78461538461538\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meanpressure\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 180.35507179076706,\n \"min\": -3.04166666666666,\n \"max\": 7679.33333333333,\n \"num_unique_values\": 626,\n \"samples\": [\n 1003.0625,\n 998.8125,\n 1012.85714285714\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meantemp_diff1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.6667995622842011,\n \"min\": -10.625,\n \"max\": 6.6666666666666,\n \"num_unique_values\": 677,\n \"samples\": [\n 2.178947368421102,\n 1.928571428571502,\n 0.7380952380952017\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meantemp_normalized\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.22408226457059965,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 617,\n \"samples\": [\n 0.4075691411935945,\n 0.4483260553129531,\n 0.7387190684133899\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"meantemp_diff1_normalized\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.09639322769836381,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 676,\n \"samples\": [\n 0.5733086190917517,\n 0.5339070567986218,\n 0.4946643717728057\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"dayofweek\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 7,\n \"samples\": [\n 2,\n 3,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"quarter\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 4,\n \"samples\": [\n 2,\n 4,\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"month\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 12,\n \"samples\": [\n 11,\n 10,\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"year\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 4,\n \"samples\": [\n 2014,\n 2016,\n 2013\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"dayofyear\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 366,\n \"samples\": [\n 195,\n 35,\n 17\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"dayofmonth\",\n \"properties\": {\n \"dtype\": \"int32\",\n \"num_unique_values\": 31,\n \"samples\": [\n 29,\n 17,\n 25\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"weekofyear\",\n \"properties\": {\n \"dtype\": \"UInt32\",\n \"num_unique_values\": 53,\n \"samples\": [\n 20,\n 42,\n 48\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lag1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.407377246023624,\n \"min\": 6.0,\n \"max\": 38.7142857142857,\n \"num_unique_values\": 387,\n \"samples\": [\n 30.875,\n 29.75,\n 28.2857142857142\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lag2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.496251035775602,\n \"min\": 6.0,\n \"max\": 38.7142857142857,\n \"num_unique_values\": 350,\n \"samples\": [\n 30.5,\n 9.375,\n 29.235294117647\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lag3\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.450798601252376,\n \"min\": 6.0,\n \"max\": 38.7142857142857,\n \"num_unique_values\": 240,\n \"samples\": [\n 16.0,\n 14.0,\n 28.625\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":14}]},{"cell_type":"markdown","source":["## Train Using Cross Validation"],"metadata":{"id":"CU8ldNvTI0b-"}},{"cell_type":"code","source":["!pip install bayesian-optimization\n","import xgboost as xgb\n","from sklearn.model_selection import TimeSeriesSplit\n","from sklearn.metrics import mean_squared_error\n","from bayes_opt import BayesianOptimization\n","from sklearn.model_selection import TimeSeriesSplit\n","\n","# Generate features using a rolling window approach\n","window_size = 60 # 60 lags to be taken as decided by ACF\n","for i in range(1, window_size + 1):\n"," data[f'lag_{i}'] = data['meantemp'].shift(i)\n","\n","# Drop rows with NaN values caused by shifting\n","data = data.dropna()\n","\n","# Define features and target\n","X = data[[f'lag_{i}' for i in range(1, window_size + 1)]]\n","y = data['meantemp']\n","\n","def mape(y_true, y_pred):\n"," return np.mean(np.abs((y_true - y_pred) / y_true)) * 100\n","\n","def xgb_evaluate(max_depth, gamma, colsample_bytree, subsample, min_child_weight, lambda_val, alpha):\n"," params = {\n"," 'eval_metric': 'rmse',\n"," 'max_depth': int(max_depth),\n"," 'subsample': subsample,\n"," 'eta': 0.1,\n"," 'gamma': gamma,\n"," 'colsample_bytree': colsample_bytree,\n"," 'min_child_weight': min_child_weight,\n"," 'lambda': lambda_val,\n"," 'alpha': alpha\n"," }\n","\n","\n"," # Ensure to use TimeSeriesSplit for time series data\n"," cv = TimeSeriesSplit(n_splits=3,test_size = 100, gap = 25)\n"," cv_scores = np.empty(3)\n","\n","\n"," # fig, axs = plt.subplots(3, figsize=(20, 15))\n"," for idx, (train_idx, test_idx) in enumerate(cv.split(X)):\n"," X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]\n"," y_train, y_test = y.iloc[train_idx], y.iloc[test_idx]\n","\n"," # Fit model\n"," model = xgb.XGBRegressor(**params, objective='reg:squarederror')\n"," model.fit(X_train, y_train)\n"," predictions = model.predict(X_test)\n"," cv_scores[idx] = mape(y_test, predictions)\n","\n"," return -np.mean(cv_scores) # Negative RMSE for maximization\n","\n","TARGET = 'y' # Assuming 'y' is your target variable\n","\n","bounds = {\n"," 'max_depth': (1, 15),\n"," 'gamma': (0, 5),\n"," 'colsample_bytree': (0.3, 1.0),\n"," 'subsample': (0.4, 1.0),\n"," 'min_child_weight': (1, 10),\n"," 'lambda_val':(0,10),\n"," 'alpha': (0,1)\n","}\n","\n","optimizer = BayesianOptimization(f=xgb_evaluate, pbounds=bounds, random_state=42)\n","optimizer.maximize(init_points=10, n_iter=25)\n"],"metadata":{"id":"wBYNvJWwKo3r","outputId":"82903018-336c-4c1a-b1c7-84ee61a5dd83","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1713281819988,"user_tz":-330,"elapsed":38554,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}}},"execution_count":15,"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: bayesian-optimization in /usr/local/lib/python3.10/dist-packages (1.4.3)\n","Requirement already satisfied: numpy>=1.9.0 in /usr/local/lib/python3.10/dist-packages (from bayesian-optimization) (1.25.2)\n","Requirement already satisfied: scipy>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from bayesian-optimization) (1.11.4)\n","Requirement already satisfied: scikit-learn>=0.18.0 in /usr/local/lib/python3.10/dist-packages (from bayesian-optimization) (1.2.2)\n","Requirement already satisfied: colorama>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from bayesian-optimization) (0.4.6)\n","Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.18.0->bayesian-optimization) (1.4.0)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.18.0->bayesian-optimization) (3.4.0)\n","| iter | target | alpha | colsam... | gamma | lambda... | max_depth | min_ch... | subsample |\n","-------------------------------------------------------------------------------------------------------------\n","| \u001b[0m1 \u001b[0m | \u001b[0m-26.13 \u001b[0m | \u001b[0m0.3745 \u001b[0m | \u001b[0m0.9655 \u001b[0m | \u001b[0m3.66 \u001b[0m | \u001b[0m5.987 \u001b[0m | \u001b[0m3.184 \u001b[0m | \u001b[0m2.404 \u001b[0m | \u001b[0m0.4349 \u001b[0m |\n","| \u001b[0m2 \u001b[0m | \u001b[0m-26.16 \u001b[0m | \u001b[0m0.8662 \u001b[0m | \u001b[0m0.7208 \u001b[0m | \u001b[0m3.54 \u001b[0m | \u001b[0m0.2058 \u001b[0m | \u001b[0m14.58 \u001b[0m | \u001b[0m8.492 \u001b[0m | \u001b[0m0.5274 \u001b[0m |\n","| \u001b[0m3 \u001b[0m | \u001b[0m-26.77 \u001b[0m | \u001b[0m0.1818 \u001b[0m | \u001b[0m0.4284 \u001b[0m | \u001b[0m1.521 \u001b[0m | \u001b[0m5.248 \u001b[0m | \u001b[0m7.047 \u001b[0m | \u001b[0m3.621 \u001b[0m | \u001b[0m0.7671 \u001b[0m |\n","| \u001b[95m4 \u001b[0m | \u001b[95m-25.18 \u001b[0m | \u001b[95m0.1395 \u001b[0m | \u001b[95m0.5045 \u001b[0m | \u001b[95m1.832 \u001b[0m | \u001b[95m4.561 \u001b[0m | \u001b[95m11.99 \u001b[0m | \u001b[95m2.797 \u001b[0m | \u001b[95m0.7085 \u001b[0m |\n","| \u001b[0m5 \u001b[0m | \u001b[0m-26.71 \u001b[0m | \u001b[0m0.5924 \u001b[0m | \u001b[0m0.3325 \u001b[0m | \u001b[0m3.038 \u001b[0m | \u001b[0m1.705 \u001b[0m | \u001b[0m1.911 \u001b[0m | \u001b[0m9.54 \u001b[0m | \u001b[0m0.9794 \u001b[0m |\n","| \u001b[0m6 \u001b[0m | \u001b[0m-27.27 \u001b[0m | \u001b[0m0.8084 \u001b[0m | \u001b[0m0.5132 \u001b[0m | \u001b[0m0.4884 \u001b[0m | \u001b[0m6.842 \u001b[0m | \u001b[0m7.162 \u001b[0m | \u001b[0m2.098 \u001b[0m | \u001b[0m0.6971 \u001b[0m |\n","| \u001b[0m7 \u001b[0m | \u001b[0m-26.17 \u001b[0m | \u001b[0m0.03439 \u001b[0m | \u001b[0m0.9365 \u001b[0m | \u001b[0m1.294 \u001b[0m | \u001b[0m6.625 \u001b[0m | \u001b[0m5.364 \u001b[0m | \u001b[0m5.681 \u001b[0m | \u001b[0m0.728 \u001b[0m |\n","| \u001b[0m8 \u001b[0m | \u001b[0m-26.6 \u001b[0m | \u001b[0m0.1849 \u001b[0m | \u001b[0m0.9787 \u001b[0m | \u001b[0m3.876 \u001b[0m | \u001b[0m9.395 \u001b[0m | \u001b[0m13.53 \u001b[0m | \u001b[0m6.381 \u001b[0m | \u001b[0m0.9531 \u001b[0m |\n","| \u001b[0m9 \u001b[0m | \u001b[0m-27.99 \u001b[0m | \u001b[0m0.08849 \u001b[0m | \u001b[0m0.4372 \u001b[0m | \u001b[0m0.2261 \u001b[0m | \u001b[0m3.253 \u001b[0m | \u001b[0m6.441 \u001b[0m | \u001b[0m3.442 \u001b[0m | \u001b[0m0.8972 \u001b[0m |\n","| \u001b[0m10 \u001b[0m | \u001b[0m-27.81 \u001b[0m | \u001b[0m0.3568 \u001b[0m | \u001b[0m0.4967 \u001b[0m | \u001b[0m2.713 \u001b[0m | \u001b[0m1.409 \u001b[0m | \u001b[0m12.23 \u001b[0m | \u001b[0m1.671 \u001b[0m | \u001b[0m0.9921 \u001b[0m |\n","| \u001b[0m11 \u001b[0m | \u001b[0m-27.0 \u001b[0m | \u001b[0m0.1034 \u001b[0m | \u001b[0m0.5059 \u001b[0m | \u001b[0m1.688 \u001b[0m | \u001b[0m5.102 \u001b[0m | \u001b[0m11.96 \u001b[0m | \u001b[0m2.986 \u001b[0m | \u001b[0m0.6624 \u001b[0m |\n","| \u001b[0m12 \u001b[0m | \u001b[0m-27.78 \u001b[0m | \u001b[0m0.06437 \u001b[0m | \u001b[0m0.3763 \u001b[0m | \u001b[0m4.482 \u001b[0m | \u001b[0m8.499 \u001b[0m | \u001b[0m11.53 \u001b[0m | \u001b[0m3.51 \u001b[0m | \u001b[0m0.6987 \u001b[0m |\n","| \u001b[0m13 \u001b[0m | \u001b[0m-26.24 \u001b[0m | \u001b[0m0.4257 \u001b[0m | \u001b[0m0.5386 \u001b[0m | \u001b[0m4.524 \u001b[0m | \u001b[0m4.725 \u001b[0m | \u001b[0m14.2 \u001b[0m | \u001b[0m3.675 \u001b[0m | \u001b[0m0.8082 \u001b[0m |\n","| \u001b[0m14 \u001b[0m | \u001b[0m-28.18 \u001b[0m | \u001b[0m0.9986 \u001b[0m | \u001b[0m0.3358 \u001b[0m | \u001b[0m3.913 \u001b[0m | \u001b[0m7.423 \u001b[0m | \u001b[0m12.09 \u001b[0m | \u001b[0m4.144 \u001b[0m | \u001b[0m0.6786 \u001b[0m |\n","| \u001b[0m15 \u001b[0m | \u001b[0m-27.12 \u001b[0m | \u001b[0m0.5561 \u001b[0m | \u001b[0m0.9326 \u001b[0m | \u001b[0m3.309 \u001b[0m | \u001b[0m2.305 \u001b[0m | \u001b[0m14.53 \u001b[0m | \u001b[0m4.565 \u001b[0m | \u001b[0m0.4166 \u001b[0m |\n","| \u001b[0m16 \u001b[0m | \u001b[0m-26.22 \u001b[0m | \u001b[0m0.8091 \u001b[0m | \u001b[0m0.4349 \u001b[0m | \u001b[0m4.254 \u001b[0m | \u001b[0m6.51 \u001b[0m | \u001b[0m10.28 \u001b[0m | \u001b[0m1.461 \u001b[0m | \u001b[0m0.6513 \u001b[0m |\n","| \u001b[0m17 \u001b[0m | \u001b[0m-28.1 \u001b[0m | \u001b[0m0.7097 \u001b[0m | \u001b[0m0.742 \u001b[0m | \u001b[0m4.009 \u001b[0m | \u001b[0m6.739 \u001b[0m | \u001b[0m12.83 \u001b[0m | \u001b[0m2.94 \u001b[0m | \u001b[0m0.976 \u001b[0m |\n","| \u001b[0m18 \u001b[0m | \u001b[0m-25.76 \u001b[0m | \u001b[0m0.1191 \u001b[0m | \u001b[0m0.9652 \u001b[0m | \u001b[0m4.842 \u001b[0m | \u001b[0m9.533 \u001b[0m | \u001b[0m13.95 \u001b[0m | \u001b[0m3.128 \u001b[0m | \u001b[0m0.6529 \u001b[0m |\n","| \u001b[0m19 \u001b[0m | \u001b[0m-26.59 \u001b[0m | \u001b[0m0.9763 \u001b[0m | \u001b[0m0.7899 \u001b[0m | \u001b[0m4.514 \u001b[0m | \u001b[0m4.447 \u001b[0m | \u001b[0m6.711 \u001b[0m | \u001b[0m3.164 \u001b[0m | \u001b[0m0.5074 \u001b[0m |\n","| \u001b[95m20 \u001b[0m | \u001b[95m-24.43 \u001b[0m | \u001b[95m0.4283 \u001b[0m | \u001b[95m0.5291 \u001b[0m | \u001b[95m2.588 \u001b[0m | \u001b[95m9.814 \u001b[0m | \u001b[95m1.236 \u001b[0m | \u001b[95m9.015 \u001b[0m | \u001b[95m0.7117 \u001b[0m |\n","| \u001b[0m21 \u001b[0m | \u001b[0m-28.45 \u001b[0m | \u001b[0m0.006474 \u001b[0m | \u001b[0m0.6381 \u001b[0m | \u001b[0m1.454 \u001b[0m | \u001b[0m5.863 \u001b[0m | \u001b[0m8.153 \u001b[0m | \u001b[0m2.437 \u001b[0m | \u001b[0m0.9799 \u001b[0m |\n","| \u001b[0m22 \u001b[0m | \u001b[0m-25.7 \u001b[0m | \u001b[0m0.7777 \u001b[0m | \u001b[0m0.8 \u001b[0m | \u001b[0m2.993 \u001b[0m | \u001b[0m0.26 \u001b[0m | \u001b[0m7.19 \u001b[0m | \u001b[0m6.125 \u001b[0m | \u001b[0m0.8054 \u001b[0m |\n","| \u001b[0m23 \u001b[0m | \u001b[0m-27.37 \u001b[0m | \u001b[0m0.3373 \u001b[0m | \u001b[0m0.9761 \u001b[0m | \u001b[0m0.473 \u001b[0m | \u001b[0m4.716 \u001b[0m | \u001b[0m14.62 \u001b[0m | \u001b[0m6.243 \u001b[0m | \u001b[0m0.8695 \u001b[0m |\n","| \u001b[0m24 \u001b[0m | \u001b[0m-26.23 \u001b[0m | \u001b[0m0.4942 \u001b[0m | \u001b[0m0.8651 \u001b[0m | \u001b[0m2.751 \u001b[0m | \u001b[0m9.527 \u001b[0m | \u001b[0m7.599 \u001b[0m | \u001b[0m9.465 \u001b[0m | \u001b[0m0.5888 \u001b[0m |\n","| \u001b[0m25 \u001b[0m | \u001b[0m-27.17 \u001b[0m | \u001b[0m0.7464 \u001b[0m | \u001b[0m0.5369 \u001b[0m | \u001b[0m2.266 \u001b[0m | \u001b[0m6.56 \u001b[0m | \u001b[0m9.761 \u001b[0m | \u001b[0m2.846 \u001b[0m | \u001b[0m0.8485 \u001b[0m |\n","| \u001b[0m26 \u001b[0m | \u001b[0m-28.05 \u001b[0m | \u001b[0m0.9385 \u001b[0m | \u001b[0m0.8535 \u001b[0m | \u001b[0m1.271 \u001b[0m | \u001b[0m6.951 \u001b[0m | \u001b[0m4.092 \u001b[0m | \u001b[0m6.837 \u001b[0m | \u001b[0m0.842 \u001b[0m |\n","| \u001b[0m27 \u001b[0m | \u001b[0m-27.79 \u001b[0m | \u001b[0m0.6729 \u001b[0m | \u001b[0m0.6478 \u001b[0m | \u001b[0m2.767 \u001b[0m | \u001b[0m2.695 \u001b[0m | \u001b[0m6.891 \u001b[0m | \u001b[0m3.204 \u001b[0m | \u001b[0m0.9947 \u001b[0m |\n","| \u001b[0m28 \u001b[0m | \u001b[0m-26.24 \u001b[0m | \u001b[0m0.5322 \u001b[0m | \u001b[0m0.8223 \u001b[0m | \u001b[0m2.572 \u001b[0m | \u001b[0m4.519 \u001b[0m | \u001b[0m8.911 \u001b[0m | \u001b[0m4.659 \u001b[0m | \u001b[0m0.4065 \u001b[0m |\n","| \u001b[0m29 \u001b[0m | \u001b[0m-25.7 \u001b[0m | \u001b[0m0.8379 \u001b[0m | \u001b[0m0.7149 \u001b[0m | \u001b[0m1.87 \u001b[0m | \u001b[0m2.785 \u001b[0m | \u001b[0m14.8 \u001b[0m | \u001b[0m4.759 \u001b[0m | \u001b[0m0.8524 \u001b[0m |\n","| \u001b[0m30 \u001b[0m | \u001b[0m-28.09 \u001b[0m | \u001b[0m0.329 \u001b[0m | \u001b[0m0.8064 \u001b[0m | \u001b[0m1.714 \u001b[0m | \u001b[0m6.094 \u001b[0m | \u001b[0m11.39 \u001b[0m | \u001b[0m1.206 \u001b[0m | \u001b[0m0.5183 \u001b[0m |\n","| \u001b[0m31 \u001b[0m | \u001b[0m-26.4 \u001b[0m | \u001b[0m0.4036 \u001b[0m | \u001b[0m0.7668 \u001b[0m | \u001b[0m4.985 \u001b[0m | \u001b[0m5.447 \u001b[0m | \u001b[0m3.83 \u001b[0m | \u001b[0m8.079 \u001b[0m | \u001b[0m0.5906 \u001b[0m |\n","| \u001b[0m32 \u001b[0m | \u001b[0m-27.11 \u001b[0m | \u001b[0m0.5925 \u001b[0m | \u001b[0m0.4529 \u001b[0m | \u001b[0m1.706 \u001b[0m | \u001b[0m3.679 \u001b[0m | \u001b[0m7.231 \u001b[0m | \u001b[0m9.961 \u001b[0m | \u001b[0m0.7471 \u001b[0m |\n","| \u001b[0m33 \u001b[0m | \u001b[0m-26.62 \u001b[0m | \u001b[0m0.06274 \u001b[0m | \u001b[0m0.9891 \u001b[0m | \u001b[0m1.154 \u001b[0m | \u001b[0m0.7324 \u001b[0m | \u001b[0m14.87 \u001b[0m | \u001b[0m8.9 \u001b[0m | \u001b[0m0.9313 \u001b[0m |\n","| \u001b[0m34 \u001b[0m | \u001b[0m-25.86 \u001b[0m | \u001b[0m0.5761 \u001b[0m | \u001b[0m0.6684 \u001b[0m | \u001b[0m2.404 \u001b[0m | \u001b[0m0.1144 \u001b[0m | \u001b[0m7.782 \u001b[0m | \u001b[0m5.534 \u001b[0m | \u001b[0m0.4178 \u001b[0m |\n","| \u001b[0m35 \u001b[0m | \u001b[0m-24.88 \u001b[0m | \u001b[0m0.8055 \u001b[0m | \u001b[0m0.9926 \u001b[0m | \u001b[0m0.9492 \u001b[0m | \u001b[0m1.558 \u001b[0m | \u001b[0m5.366 \u001b[0m | \u001b[0m4.671 \u001b[0m | \u001b[0m0.6404 \u001b[0m |\n","=============================================================================================================\n"]}]},{"cell_type":"code","source":["print(optimizer.max['params'])\n","# Train the model with the best parameters found\n","best_params = {k: int(v) if k == 'max_depth' else v for k, v in optimizer.max['params'].items()}\n","model = xgb.XGBRegressor(**best_params, objective='reg:squarederror')\n","model.fit(X, y) # Training on the full dataset or consider using a separate test set"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":358},"id":"k3JnfnqEX8vB","executionInfo":{"status":"ok","timestamp":1713281918430,"user_tz":-330,"elapsed":719,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"outputId":"7158d900-07ba-458a-acd0-6300a4b23a92"},"execution_count":16,"outputs":[{"output_type":"stream","name":"stdout","text":["{'alpha': 0.4282958689696337, 'colsample_bytree': 0.5290769493376746, 'gamma': 2.5875884455185103, 'lambda_val': 9.814346607607472, 'max_depth': 1.2357195591033194, 'min_child_weight': 9.015218289252822, 'subsample': 0.7116674916934858}\n"]},{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.10/dist-packages/xgboost/core.py:160: UserWarning: [15:38:36] WARNING: /workspace/src/learner.cc:742: \n","Parameters: { \"lambda_val\" } are not used.\n","\n"," warnings.warn(smsg, UserWarning)\n"]},{"output_type":"execute_result","data":{"text/plain":["XGBRegressor(alpha=0.4282958689696337, base_score=None, booster=None,\n"," callbacks=None, colsample_bylevel=None, colsample_bynode=None,\n"," colsample_bytree=0.5290769493376746, device=None,\n"," early_stopping_rounds=None, enable_categorical=False,\n"," eval_metric=None, feature_types=None, gamma=2.5875884455185103,\n"," grow_policy=None, importance_type=None,\n"," interaction_constraints=None, lambda_val=9.814346607607472,\n"," learning_rate=None, max_bin=None, max_cat_threshold=None,\n"," max_cat_to_onehot=None, max_delta_step=None, max_depth=1,\n"," max_leaves=None, min_child_weight=9.015218289252822, missing=nan,\n"," monotone_constraints=None, multi_strategy=None, n_estimators=None,\n"," n_jobs=None, ...)"],"text/html":["<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>XGBRegressor(alpha=0.4282958689696337, base_score=None, booster=None,\n"," callbacks=None, colsample_bylevel=None, colsample_bynode=None,\n"," colsample_bytree=0.5290769493376746, device=None,\n"," early_stopping_rounds=None, enable_categorical=False,\n"," eval_metric=None, feature_types=None, gamma=2.5875884455185103,\n"," grow_policy=None, importance_type=None,\n"," interaction_constraints=None, lambda_val=9.814346607607472,\n"," learning_rate=None, max_bin=None, max_cat_threshold=None,\n"," max_cat_to_onehot=None, max_delta_step=None, max_depth=1,\n"," max_leaves=None, min_child_weight=9.015218289252822, missing=nan,\n"," monotone_constraints=None, multi_strategy=None, n_estimators=None,\n"," n_jobs=None, ...)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">XGBRegressor</label><div class=\"sk-toggleable__content\"><pre>XGBRegressor(alpha=0.4282958689696337, base_score=None, booster=None,\n"," callbacks=None, colsample_bylevel=None, colsample_bynode=None,\n"," colsample_bytree=0.5290769493376746, device=None,\n"," early_stopping_rounds=None, enable_categorical=False,\n"," eval_metric=None, feature_types=None, gamma=2.5875884455185103,\n"," grow_policy=None, importance_type=None,\n"," interaction_constraints=None, lambda_val=9.814346607607472,\n"," learning_rate=None, max_bin=None, max_cat_threshold=None,\n"," max_cat_to_onehot=None, max_delta_step=None, max_depth=1,\n"," max_leaves=None, min_child_weight=9.015218289252822, missing=nan,\n"," monotone_constraints=None, multi_strategy=None, n_estimators=None,\n"," n_jobs=None, ...)</pre></div></div></div></div></div>"]},"metadata":{},"execution_count":16}]},{"cell_type":"code","source":["tss = TimeSeriesSplit(n_splits=3, test_size=100, gap=25)\n","data = data.sort_index()\n","\n","fold = 0\n","preds = []\n","scores = []\n","for train_idx, val_idx in tss.split(data):\n"," train = data.iloc[train_idx]\n"," test = data.iloc[val_idx]\n","\n"," train = create_features(train)\n"," test = create_features(test)\n","\n"," FEATURES = ['dayofyear', 'dayofweek', 'quarter', 'month','year',\n"," 'lag1','lag2','lag3']\n"," TARGET = 'meantemp'\n","\n"," X_train = train[FEATURES]\n"," y_train = train[TARGET]\n","\n"," X_test = test[FEATURES]\n"," y_test = test[TARGET]\n","\n"," reg = xgb.XGBRegressor(base_score=0.5,\n"," booster='gbtree',\n"," n_estimators=1000,\n"," early_stopping_rounds=50,\n"," objective='reg:squarederror',\n"," max_depth=1, # Best value found\n"," learning_rate=0.01,\n"," colsample_bytree=0.5290769493376746, # Best value found\n"," gamma=2.5875884455185103, # Best value found\n"," min_child_weight=9.015218289252822, # Best value found\n"," subsample=0.7116674916934858,\n"," alpha=0.4282958689696337,\n"," lambda_val=9.814346607607472) # Best value found\n","\n"," reg.fit(X_train, y_train,\n"," eval_set=[(X_train, y_train), (X_test, y_test)],\n"," verbose=100)\n","\n"," y_pred = reg.predict(X_test)\n"," preds.append(y_pred)\n"," score = mape(y_test, y_pred) # Calculate MAPE instead of RMSE\n"," scores.append(score)"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:11:18.018074Z","iopub.execute_input":"2022-08-01T21:11:18.01865Z","iopub.status.idle":"2022-08-01T21:13:45.444232Z","shell.execute_reply.started":"2022-08-01T21:11:18.018607Z","shell.execute_reply":"2022-08-01T21:13:45.442166Z"},"trusted":true,"id":"pGgbjaIbI0b-","executionInfo":{"status":"ok","timestamp":1713282012139,"user_tz":-330,"elapsed":875,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"outputId":"69776322-b1bd-4494-81c2-e0431a4f12d6","colab":{"base_uri":"https://localhost:8080/"}},"execution_count":17,"outputs":[{"output_type":"stream","name":"stdout","text":["[0]\tvalidation_0-rmse:14.79416\tvalidation_1-rmse:31.65275\n","[100]\tvalidation_0-rmse:5.90903\tvalidation_1-rmse:22.62347\n","[200]\tvalidation_0-rmse:2.87990\tvalidation_1-rmse:19.07615\n","[300]\tvalidation_0-rmse:1.94909\tvalidation_1-rmse:17.73241\n","[400]\tvalidation_0-rmse:1.65882\tvalidation_1-rmse:17.21233\n","[500]\tvalidation_0-rmse:1.54232\tvalidation_1-rmse:16.95108\n"]},{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.10/dist-packages/xgboost/core.py:160: UserWarning: [15:40:09] WARNING: /workspace/src/learner.cc:742: \n","Parameters: { \"lambda_val\" } are not used.\n","\n"," warnings.warn(smsg, UserWarning)\n"]},{"output_type":"stream","name":"stdout","text":["[600]\tvalidation_0-rmse:1.48301\tvalidation_1-rmse:16.83629\n","[700]\tvalidation_0-rmse:1.42786\tvalidation_1-rmse:16.81490\n","[781]\tvalidation_0-rmse:1.39809\tvalidation_1-rmse:16.80723\n","[0]\tvalidation_0-rmse:25.19146\tvalidation_1-rmse:30.86961\n","[100]\tvalidation_0-rmse:9.89006\tvalidation_1-rmse:11.52645\n","[200]\tvalidation_0-rmse:4.32491\tvalidation_1-rmse:3.98381\n","[300]\tvalidation_0-rmse:2.47434\tvalidation_1-rmse:2.09062\n","[359]\tvalidation_0-rmse:2.08361\tvalidation_1-rmse:2.24697\n","[0]\tvalidation_0-rmse:28.11358\tvalidation_1-rmse:23.74597\n"]},{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.10/dist-packages/xgboost/core.py:160: UserWarning: [15:40:10] WARNING: /workspace/src/learner.cc:742: \n","Parameters: { \"lambda_val\" } are not used.\n","\n"," warnings.warn(smsg, UserWarning)\n","/usr/local/lib/python3.10/dist-packages/xgboost/core.py:160: UserWarning: [15:40:10] WARNING: /workspace/src/learner.cc:742: \n","Parameters: { \"lambda_val\" } are not used.\n","\n"," warnings.warn(smsg, UserWarning)\n"]},{"output_type":"stream","name":"stdout","text":["[100]\tvalidation_0-rmse:10.76493\tvalidation_1-rmse:8.82805\n","[200]\tvalidation_0-rmse:4.62426\tvalidation_1-rmse:3.49303\n","[300]\tvalidation_0-rmse:2.70870\tvalidation_1-rmse:1.94716\n","[400]\tvalidation_0-rmse:2.19014\tvalidation_1-rmse:1.71252\n","[494]\tvalidation_0-rmse:2.03382\tvalidation_1-rmse:1.70335\n"]}]},{"cell_type":"code","source":["print(f'Score across folds {np.mean(scores):0.4f}')\n","print(f'Fold scores:{scores}')"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:15:00.268693Z","iopub.execute_input":"2022-08-01T21:15:00.269293Z","iopub.status.idle":"2022-08-01T21:15:00.277834Z","shell.execute_reply.started":"2022-08-01T21:15:00.269247Z","shell.execute_reply":"2022-08-01T21:15:00.276121Z"},"trusted":true,"id":"W6DHB8GAI0b-","executionInfo":{"status":"ok","timestamp":1713282021788,"user_tz":-330,"elapsed":415,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"outputId":"d8cec03f-e98c-4f5e-cd76-abb5bcdb0e45","colab":{"base_uri":"https://localhost:8080/"}},"execution_count":18,"outputs":[{"output_type":"stream","name":"stdout","text":["Score across folds 20.3667\n","Fold scores:[49.72616917126275, 5.367341613175921, 6.0067004563671675]\n"]}]},{"cell_type":"markdown","source":["# 3. Predicting the Future\n","- Here we retrain on all the data\n","- To Predict the future we need an emtpy dataframe for future date ranges."],"metadata":{"id":"O3mpysDOI0b-"}},{"cell_type":"code","source":["# Retrain on all data\n","data = create_features(data)\n","\n","FEATURES = ['dayofyear', 'dayofweek', 'quarter', 'month', 'year',\n"," 'lag1','lag2','lag3']\n","TARGET = 'meantemp'\n","\n","X_all = data[FEATURES]\n","y_all = data[TARGET]\n","\n","reg = xgb.XGBRegressor(base_score=0.5,\n"," booster='gbtree',\n"," n_estimators=1000,\n"," early_stopping_rounds=50,\n"," objective='reg:squarederror',\n"," max_depth=1, # Best value found\n"," learning_rate=0.01,\n"," colsample_bytree=0.5290769493376746, # Best value found\n"," gamma=2.5875884455185103, # Best value found\n"," min_child_weight=9.015218289252822, # Best value found\n"," subsample=0.7116674916934858,\n"," alpha=0.4282958689696337,\n"," lambda_val=9.814346607607472) # Best value found\n","\n","reg.fit(X_all, y_all,\n"," eval_set=[(X_all, y_all)],\n"," verbose=100)"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:18:30.324144Z","iopub.execute_input":"2022-08-01T21:18:30.325695Z","iopub.status.idle":"2022-08-01T21:18:59.40554Z","shell.execute_reply.started":"2022-08-01T21:18:30.325628Z","shell.execute_reply":"2022-08-01T21:18:59.404023Z"},"trusted":true,"id":"vh00xp2fI0b-","executionInfo":{"status":"ok","timestamp":1713282035677,"user_tz":-330,"elapsed":2311,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"outputId":"dcb2b193-8020-4184-934b-475c5c0ccc04","colab":{"base_uri":"https://localhost:8080/","height":511}},"execution_count":19,"outputs":[{"output_type":"stream","name":"stdout","text":["[0]\tvalidation_0-rmse:27.15703\n"]},{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.10/dist-packages/xgboost/core.py:160: UserWarning: [15:40:31] WARNING: /workspace/src/learner.cc:742: \n","Parameters: { \"lambda_val\" } are not used.\n","\n"," warnings.warn(smsg, UserWarning)\n"]},{"output_type":"stream","name":"stdout","text":["[100]\tvalidation_0-rmse:10.39418\n","[200]\tvalidation_0-rmse:4.46112\n","[300]\tvalidation_0-rmse:2.60948\n","[400]\tvalidation_0-rmse:2.10201\n","[500]\tvalidation_0-rmse:1.95066\n","[600]\tvalidation_0-rmse:1.88218\n","[700]\tvalidation_0-rmse:1.83997\n","[800]\tvalidation_0-rmse:1.81216\n","[900]\tvalidation_0-rmse:1.78989\n","[999]\tvalidation_0-rmse:1.77236\n"]},{"output_type":"execute_result","data":{"text/plain":["XGBRegressor(alpha=0.4282958689696337, base_score=0.5, booster='gbtree',\n"," callbacks=None, colsample_bylevel=None, colsample_bynode=None,\n"," colsample_bytree=0.5290769493376746, device=None,\n"," early_stopping_rounds=50, enable_categorical=False,\n"," eval_metric=None, feature_types=None, gamma=2.5875884455185103,\n"," grow_policy=None, importance_type=None,\n"," interaction_constraints=None, lambda_val=9.814346607607472,\n"," learning_rate=0.01, max_bin=None, max_cat_threshold=None,\n"," max_cat_to_onehot=None, max_delta_step=None, max_depth=1,\n"," max_leaves=None, min_child_weight=9.015218289252822, missing=nan,\n"," monotone_constraints=None, multi_strategy=None, n_estimators=1000,\n"," n_jobs=None, ...)"],"text/html":["<style>#sk-container-id-2 {color: black;background-color: white;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>XGBRegressor(alpha=0.4282958689696337, base_score=0.5, booster='gbtree',\n"," callbacks=None, colsample_bylevel=None, colsample_bynode=None,\n"," colsample_bytree=0.5290769493376746, device=None,\n"," early_stopping_rounds=50, enable_categorical=False,\n"," eval_metric=None, feature_types=None, gamma=2.5875884455185103,\n"," grow_policy=None, importance_type=None,\n"," interaction_constraints=None, lambda_val=9.814346607607472,\n"," learning_rate=0.01, max_bin=None, max_cat_threshold=None,\n"," max_cat_to_onehot=None, max_delta_step=None, max_depth=1,\n"," max_leaves=None, min_child_weight=9.015218289252822, missing=nan,\n"," monotone_constraints=None, multi_strategy=None, n_estimators=1000,\n"," n_jobs=None, ...)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">XGBRegressor</label><div class=\"sk-toggleable__content\"><pre>XGBRegressor(alpha=0.4282958689696337, base_score=0.5, booster='gbtree',\n"," callbacks=None, colsample_bylevel=None, colsample_bynode=None,\n"," colsample_bytree=0.5290769493376746, device=None,\n"," early_stopping_rounds=50, enable_categorical=False,\n"," eval_metric=None, feature_types=None, gamma=2.5875884455185103,\n"," grow_policy=None, importance_type=None,\n"," interaction_constraints=None, lambda_val=9.814346607607472,\n"," learning_rate=0.01, max_bin=None, max_cat_threshold=None,\n"," max_cat_to_onehot=None, max_delta_step=None, max_depth=1,\n"," max_leaves=None, min_child_weight=9.015218289252822, missing=nan,\n"," monotone_constraints=None, multi_strategy=None, n_estimators=1000,\n"," n_jobs=None, ...)</pre></div></div></div></div></div>"]},"metadata":{},"execution_count":19}]},{"cell_type":"code","source":["data.index.max()"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:19:48.403927Z","iopub.execute_input":"2022-08-01T21:19:48.405296Z","iopub.status.idle":"2022-08-01T21:19:48.417098Z","shell.execute_reply.started":"2022-08-01T21:19:48.405244Z","shell.execute_reply":"2022-08-01T21:19:48.415823Z"},"trusted":true,"id":"eFrVS62II0b-","executionInfo":{"status":"ok","timestamp":1713282041995,"user_tz":-330,"elapsed":459,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"outputId":"bfc43d3e-c67f-4580-c670-82369d388632","colab":{"base_uri":"https://localhost:8080/"}},"execution_count":20,"outputs":[{"output_type":"execute_result","data":{"text/plain":["Timestamp('2016-12-31 00:00:00')"]},"metadata":{},"execution_count":20}]},{"cell_type":"code","source":["# Create future dataframe\n","future = pd.date_range('2017-01-01','2017-04-24', freq='1d')\n","future_data = pd.DataFrame(index=future)\n","future_data['isFuture'] = True\n","data['isFuture'] = False\n","data_and_future = pd.concat([data, future_data])\n","data_and_future = create_features(data_and_future)\n","data_and_future = add_lags(data_and_future)"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:21:46.554533Z","iopub.execute_input":"2022-08-01T21:21:46.555005Z","iopub.status.idle":"2022-08-01T21:21:46.575875Z","shell.execute_reply.started":"2022-08-01T21:21:46.554965Z","shell.execute_reply":"2022-08-01T21:21:46.574388Z"},"trusted":true,"id":"XRNt62lAI0b-","executionInfo":{"status":"ok","timestamp":1713282043020,"user_tz":-330,"elapsed":4,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}}},"execution_count":21,"outputs":[]},{"cell_type":"code","source":["future_w_features = data_and_future.query('isFuture').copy()"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:22:43.042461Z","iopub.execute_input":"2022-08-01T21:22:43.042917Z","iopub.status.idle":"2022-08-01T21:22:43.060595Z","shell.execute_reply.started":"2022-08-01T21:22:43.042878Z","shell.execute_reply":"2022-08-01T21:22:43.059419Z"},"trusted":true,"id":"TEs1SdhLI0b_","executionInfo":{"status":"ok","timestamp":1713282043559,"user_tz":-330,"elapsed":4,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}}},"execution_count":22,"outputs":[]},{"cell_type":"markdown","source":["## Predict the future"],"metadata":{"id":"Z8Hji02cI0b_"}},{"cell_type":"code","source":["future_w_features['pred'] = reg.predict(future_w_features[FEATURES])"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:23:32.03152Z","iopub.execute_input":"2022-08-01T21:23:32.032052Z","iopub.status.idle":"2022-08-01T21:23:32.070332Z","shell.execute_reply.started":"2022-08-01T21:23:32.031998Z","shell.execute_reply":"2022-08-01T21:23:32.069216Z"},"trusted":true,"id":"hCm8Xz8lI0b_","executionInfo":{"status":"ok","timestamp":1713282045710,"user_tz":-330,"elapsed":3,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}}},"execution_count":23,"outputs":[]},{"cell_type":"code","source":["future_w_features['pred'].plot(figsize=(10, 5),\n"," color='red',\n"," ms=1,\n"," lw=0.5,\n"," title='Future Predictions')\n","plt.show()"],"metadata":{"execution":{"iopub.status.busy":"2022-08-01T21:23:52.293335Z","iopub.execute_input":"2022-08-01T21:23:52.293796Z","iopub.status.idle":"2022-08-01T21:23:52.786378Z","shell.execute_reply.started":"2022-08-01T21:23:52.293759Z","shell.execute_reply":"2022-08-01T21:23:52.785098Z"},"trusted":true,"id":"Er1pyNimI0b_","executionInfo":{"status":"ok","timestamp":1713282047142,"user_tz":-330,"elapsed":822,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"outputId":"8fa6ffa5-a17d-4df2-9ff6-8c74a8ec4ed3","colab":{"base_uri":"https://localhost:8080/","height":484}},"execution_count":24,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 1000x500 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAzYAAAHTCAYAAAD1WY1ZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABe50lEQVR4nO3dd3hU1fr28XtIQkJLIJACUg29C6KggGADbKAUOyA2FHt5jxwrNvRgOVYUBcGCKCjHDnqk6aGIKApSFEgAIYWahJK+3z/WL4GQNjOZmb0n+X6uay6SmT17PxMCmTtrrWe5LMuyBAAAAABBrIbdBQAAAABAZRFsAAAAAAQ9gg0AAACAoEewAQAAABD0CDYAAAAAgh7BBgAAAEDQI9gAAAAACHoEGwAAAABBj2ADAAAAIOgRbAAAVdqAAQM0YMCAos+TkpLkcrk0c+ZMn12jZcuWGjt2rM/OBwDwHMEGAGwwc+ZMuVyuUm8PPPCAR+fasGGDHnvsMSUlJfmn2EpYsmRJsdcWFhamk08+WaNHj9a2bdvsLs8jy5cv12OPPaaDBw/aXQoAoBShdhcAANXZ448/rlatWhW7r3Pnzh6dY8OGDZo0aZIGDBigli1b+rA637njjjvUq1cv5ebm6pdfftG0adP01Vdfad26dWrSpElAa2nRooWOHj2qsLAwj563fPlyTZo0SWPHjlX9+vWLPbZ582bVqMHvCgHATgQbALDRkCFDdOqpp9pdRqkOHz6sOnXq+ORc/fr104gRIyRJ1113ndq2bas77rhDs2bN0sSJE/1+/eO5XC5FRET49Jzh4eE+PR8AwHP8egkAHMrlcumxxx4rcf/x6zlmzpypkSNHSpIGDhxYNOVryZIlbp+j8Dwul0tLly7VrbfeqtjYWDVt2rTo8W+++Ub9+vVTnTp1VK9ePV144YX6448/vH5tZ599tiQpMTFRkvTYY4/J5XJpw4YNuuqqq9SgQQP17du36Pj3339fPXv2VK1atRQdHa0rrrhCO3fuLHHeadOmKSEhQbVq1dJpp52mH374ocQxZa2x2bRpk0aNGqWYmBjVqlVL7dq104MPPlhU3/333y9JatWqVdHXuXD6X2lrbLZt26aRI0cqOjpatWvXVu/evfXVV18VO6Zwqt7HH3+sp556Sk2bNlVERITOOeccbdmypdixf/31l4YPH674+HhFRESoadOmuuKKK5Senl7BVxsAqgdGbADARunp6dq7d2+x+xo1auT28/v376877rhDL7/8sv75z3+qQ4cOklT0p6duvfVWxcTE6JFHHtHhw4clSe+9957GjBmjQYMG6dlnn9WRI0c0depU9e3bV7/++qtX09+2bt0qSWrYsGGx+0eOHKk2bdro6aeflmVZkqSnnnpKDz/8sEaNGqUbbrhBe/bs0SuvvKL+/fvr119/LZoWNn36dN18880644wzdNddd2nbtm265JJLFB0drWbNmpVbz++//65+/fopLCxMN910k1q2bKmtW7fqiy++0FNPPaXLLrtMf/75pz788EO9+OKLRX9HMTExpZ4vNTVVZ5xxho4cOaI77rhDDRs21KxZs3TJJZdo3rx5uvTSS4sd/8wzz6hGjRq67777lJ6ern/961+6+uqrtWrVKklSTk6OBg0apOzsbN1+++2Kj4/Xrl279OWXX+rgwYOKiory7C8AAKoiCwAQcO+8844lqdRbIUnWo48+WuK5LVq0sMaMGVP0+dy5cy1J1uLFi0sc6+45Cuvp27evlZeXV3R/ZmamVb9+fevGG28s9vyUlBQrKiqqxP0nWrx4sSXJmjFjhrVnzx5r9+7d1ldffWW1bNnScrlc1urVqy3LsqxHH33UkmRdeeWVxZ6flJRkhYSEWE899VSx+9etW2eFhoYW3Z+Tk2PFxsZa3bt3t7Kzs4uOmzZtmiXJOuuss4ruS0xMtCRZ77zzTtF9/fv3t+rVq2dt37692HUKCgqKPp4yZYolyUpMTCzxOk/8et51112WJOuHH34oui8zM9Nq1aqV1bJlSys/P7/Y16dDhw7F6n7ppZcsSda6dessy7KsX3/91ZJkzZ07t8S1AQAGU9EAwEavvfaavvvuu2I3O914440KCQkp+vy7777TwYMHdeWVV2rv3r1Ft5CQEJ1++ulavHixW+cdN26cYmJi1KRJE1144YU6fPiwZs2aVWJ90fjx44t9/umnn6qgoECjRo0qdv34+Hi1adOm6Po///yz0tLSNH78eNWsWbPo+WPHjq1wNGPPnj1atmyZxo0bp+bNmxd7zOVyufX6TvT111/rtNNOKzadrm7durrpppuUlJSkDRs2FDv+uuuuK1Z3v379JKmoc1zha1i4cKGOHDniVU0AUNUxFQ0AbHTaaac5qnnAiR3a/vrrL0nH1sScKDIy0q3zPvLII+rXr59CQkLUqFEjdejQQaGhJX8ElXZ9y7LUpk2bUs9b2Nls+/btklTiuML20uUpDA+edqMrz/bt23X66aeXuL9wiuD27duLXe/EQNWgQQNJ0oEDBySZr8s999yjF154QR988IH69eunSy65RNdccw3T0ADg/xBsACDI5Ofn++0ctWrVKvZ5QUGBJLPOJj4+vsTxpYWT0nTp0kXnnntuhceVdn2Xy6Vvvvmm2EhSobp167p1facr7bVJKlpnJEnPP/+8xo4dq88++0zffvut7rjjDk2ePFkrV64s1ugBAKorgg0AOFSDBg1KbAaZk5Oj5OTkYveVN13K3XOUJSEhQZIUGxvrVjDxtYSEBFmWpVatWqlt27ZlHteiRQtJZoTn+NGl3NxcJSYmqlu3bmU+t3BEZ/369eXW4sm0tBYtWmjz5s0l7t+0aVOxej3VpUsXdenSRQ899JCWL1+uM888U2+88YaefPJJr84HAFUJa2wAwKESEhK0bNmyYvdNmzatxGhL4V4vJwYYT85RlkGDBikyMlJPP/20cnNzSzy+Z88et87jrcsuu0whISGaNGlSsdELyYxm7Nu3T5J06qmnKiYmRm+88YZycnKKjpk5c2apX5fjxcTEqH///poxY4Z27NhR4hqFyvs6n+iCCy7QTz/9pBUrVhTdd/jwYU2bNk0tW7ZUx44dKzzH8TIyMpSXl1fsvi5duqhGjRrKzs726FwAUFUxYgMADnXDDTdo/PjxGj58uM477zz99ttvWrhwYYl20N27d1dISIieffZZpaenKzw8XGeffbZiY2PdPkdZIiMjNXXqVF177bXq0aOHrrjiCsXExGjHjh366quvdOaZZ+rVV1/1x8uXZILZk08+qYkTJyopKUnDhg1TvXr1lJiYqPnz5+umm27Sfffdp7CwMD355JO6+eabdfbZZ+vyyy9XYmKi3nnnnQrX2EjSyy+/rL59+6pHjx666aab1KpVKyUlJemrr77S2rVrJUk9e/aUJD344IO64oorFBYWposvvrjUTUQfeOABffjhhxoyZIjuuOMORUdHa9asWUpMTNQnn3yiGjU8+73iokWLdNttt2nkyJFq27at8vLy9N577ykkJETDhw/36FwAUFURbADAoW688UYlJiZq+vTpWrBggfr166fvvvtO55xzTrHj4uPj9cYbb2jy5Mm6/vrrlZ+fr8WLFys2Ntbtc5TnqquuUpMmTfTMM89oypQpys7O1kknnaR+/frpuuuu8/XLLuGBBx5Q27Zt9eKLL2rSpEmSpGbNmun888/XJZdcUnTcTTfdpPz8fE2ZMkX333+/unTpos8//1wPP/xwhdfo1q2bVq5cqYcfflhTp05VVlaWWrRooVGjRhUd06tXLz3xxBN64403tGDBAhUUFCgxMbHUYBMXF6fly5frH//4h1555RVlZWWpa9eu+uKLL3ThhRd6/DXo1q2bBg0apC+++EK7du1S7dq11a1bN33zzTfq3bu3x+cDgKrIZZ04tg8AAAAAQYY1NgAAAACCHsEGAAAAQNAj2AAAAAAIegQbAAAAAEGPYAMAAAAg6BFsAAAAAAQ9x+1jU1BQoN27d6tevXpyuVx2lwMAAADAJpZlKTMzU02aNKlwc2PHBZvdu3erWbNmdpcBAAAAwCF27typpk2blnuM44JNvXr1JJniIyMjba4GAAAAgF0yMjLUrFmzooxQHscFm8LpZ5GRkQQbAAAAAG4tUaF5AAAAAICgR7ABAAAAEPQINgAAAACCHsEGAAAAQNAj2AAAAAAIegQbAAAAAEGPYAMAAAAg6BFsAAAAAAQ9gg0AAACAoEewAQAAABD0CDYAAAAAgh7BBgAAAEDQI9gAAAAACHoEGwAAAABBL9TuAgAAAABIys2VPvpI+vNP6fBhczt0yPyZny9ZllSnjpSQILVubf5MSJAaN5Zq2DxekZ0t/fab9Msv0ujRUu3aAS+BYAMAAADYKSdHmjVLmjNHuuIK6bLLTIA5/hb6f2/bMzOlrVvNbeVK6YMPpN27pbw8afBgaexYKSrKv/UWFEhbtkirVkk//WRqCQ+XuneXkpOlZs2kCy/0bw2l8CjYTJ06VVOnTlVSUpIkqVOnTnrkkUc0ZMiQomNWrFihBx98UKtWrVJISIi6d++uhQsXqlatWj4tHAAAAAhqOTnSO+9IH38sXX21tGCBFBZW/nPq1TMBonv34vfn5kqffSZdc43UtKl0661Sly7ln8uypAMHpNRUKS3N/Hn8bf9+U6PLZY6VzMcul9SqlXT66dJdd0knn2zuk6T166WZM50fbJo2bapnnnlGbdq0kWVZmjVrloYOHapff/1VnTp10ooVKzR48GBNnDhRr7zyikJDQ/Xbb7+pht1DYwAAAPCfggLpllvMm/P+/e2uxvmys48FmtGj3Qs0FQkLk0aMMLc//pBef11KSpLGjJEuvlj6+29p40Zp0yZzS0szz4uOluLjpdhYKS5OatdO6tfPfBwdbUZiPNGpk7m+DVyWVRi/vBMdHa0pU6bo+uuvV+/evXXeeefpiSee8Pp8GRkZioqKUnp6uiIjIytTGgAAAALhm2+kJUvMb/X//FOaONH8Nh+le+wxqUEDacKEY1PM/CEjQ3r3Xem778wIS4cOUvv25s+YmGOjLL52xRUmWEVHV/pUnmQDr4dS8vPzNWfOHB0+fFh9+vRRWlqaVq1apdjYWJ1xxhmKi4vTWWedpR9//NHbSwAAACAYTJ8u3Xef9K9/SVOnmnUfI0eaxeQoac0a/4caSYqMlG67zUxR+/e/pZtvls46y4zO+CvUSNKAAdKyZf47fxk8Djbr1q1T3bp1FR4ervHjx2v+/Pnq2LGjtm3bJkl67LHHdOONN2rBggXq0aOHzjnnHP31119lni87O1sZGRnFbgAAAAgSiYlmcXtMjPm8cWPp5Zel556TXnvNTE/78097a3SSrCwpJMT/ocZOAwdKixcH/LIeB5t27dpp7dq1WrVqlW655RaNGTNGGzZsUEFBgSTp5ptv1nXXXadTTjlFL774otq1a6cZM2aUeb7JkycrKiqq6NasWTPvXw0AAAAC6803pfHjS97fooU0bZo0aZJZf7N3b+Brc6LVq6XTTrO7Cv9q21bavDngl/U42NSsWVOtW7dWz549NXnyZHXr1k0vvfSSGjduLEnq2LFjseM7dOigHTt2lHm+iRMnKj09vei2c+dOT0sCAACAHbKyzL4lvXuXfUzr1tKUKdLttx/rrFWdLVtW9RssuFxmBG/PnoBettLtygoKCpSdna2WLVuqSZMm2nxCOvvzzz/VokWLMp8fHh6uyMjIYjcAAAAEgblzpVGjKl6v0aOH6Zb1/vuBqcvJfvpJ6tXL7ir8b8AA01AigDya3Ddx4kQNGTJEzZs3V2ZmpmbPnq0lS5Zo4cKFcrlcuv/++/Xoo4+qW7du6t69u2bNmqVNmzZp3rx5/qofAAAAdpk9W3L3fd4DD5i2w2edJTVv7t+6nCovz7TG9rSFcjAaONCssxo5MmCX9CjYpKWlafTo0UpOTlZUVJS6du2qhQsX6rzzzpMk3XXXXcrKytLdd9+t/fv3q1u3bvruu++UkJDgl+IBAABgk19+MXue1Knj3vGhodIrr5guXf/5j1Qd9zn85RczelUdtGol/V9zsUCp9D42vsY+NgAAAEHgppuke+814cYTb7xh1ubcdZdfynK0556TTjlFOuccuysJjOuuk556SmrSxOtTBGQfGwAAAFRTBw5IqamehxrJ7KWybJltu9PbasWK8hstVDUDBwZ0nQ3BBgAAAJ6ZNUsaO9a757pcZn+bu++WcnJ8WpbXLEv68EP/XqOgQDp61P2pe1XBwIHSokUBuxzBBgAAAO4rKJC++MI0AvBW48bSjTdKjz/uu7oqY+VKM23qyBH/XWP9eqlLF/+d34maNZP+/jtglyPYAAAAwH3ff29a+YZ61IOqpJEjzZveFSt8UlalvP66mSL3v//57xrLlpmOcNVN8+bS9u0BuRTBBgAAAO576y0z2uILL7xgFpfbafduKTdXGjNGWrzYf9f58UfpzDP9d36nGjjQv1/X4xBsAAAA4J6dO6WwMCk+3jfni46WEhJMG2S7vPmmNH681K2b9Ntv/rmGZUnp6VJUlH/O72QBbCBAsAEAAIB7pk0zU7Z86Y47pJde8u053ZWdLS1fbqaIhYRItWtLmZm+v86ff3rXQa4qiI+XUlJMuPMzgg0AAADcs3q11K+fb8+ZkGD2tdm1y7fndcfcuWatj8tlPu/b10wZ87Vly6T+/X1/3mCRkCBt3er3yxBsAAAAULH0dKl+/WMhwJduv1169VXfn7ci778vXX31sc/9tR7khx98HwiDydlnB2SdDcEGAAAAFVu9WurVyz/nPvNM6ddfpcOH/XP+0qxaZdovH7+vTOfOpi2zL1mWtGePFBPj2/MGk7POCsg6G4INAAAAKrZqldS7t3/O7XKZrmSzZvnn/KV57TXp1luL31ejhlSvnhmd8pXt26WWLX13vmDUqJG0b5/f19kQbAAAAFCxNWukHj38d/4RI6RPPjEbgPpbSopZ19OqVcnH+vc3a2J8pbqvrynUoYO0aZNfL0GwAQAAQPksywSBWrX8d42wMGnwYOmrr/x3jUJvvll2dzdfr7Mh2BgB2M+GYAMAAIDyJSWVPrrhazfeaFpK+1NOjlnMf/bZpT/eoYO0caPvrrd7t3TSSb47X7Dq319autSvlwj169kBAAAQ/FaulE4/3f/XqV/fBKhff5VOOcU/15g3z0x7K6u7m8slNWgg7d9vNhCtjORk321mGuzq1zdrlyZOlGJjpbi44reGDc0ap0og2AAAAKB8q1aVXGjvL3feKT3xhDRzpn/O/957Zv+a8px1lhlduPTSyl2LaWjFzZ1rmimkpprb77+bP9PSzMhWy5bm+6xrV69OT7ABAABA+f78U2rTJjDXSkiQjh41G3b6egrX6tVmqlnduuUfN3Cg2VfHF8Hm3nsrd46qpF4901K7c+fSH9+wQXr9dTP18dprpcsu8+j0rLEBAABA2bKzpZo1/bMxZ1luu820Y/a1qVOlCRMqPq5NGxPmKmvbtsCsTaoqOnY0gXL2bGnvXmnIEGnyZLefTrABAABA2X77TerePbDX7NtX+uUX327YmZdn2jwnJFR8rMtl9l7Zs8f76+3bZ9aNBDIQVhWRkSaAfved2bzVTQQbAAAAlC1QjQOO53JJN9zg0W/rK7RypWcbjA4YIC1Z4tk1kpOlzz6THnxQuvxy6ZJLPHs+inO5PFqjRLABAABA2X76STrttMBfd8QIs3fOjBm+Od8335ipTe5yZ9+VjAxpyhRp1Cjpggukhx4yo0IjRpjrjRpVuZrhEZoHAAAAoGz795spVXb417+kMWNMy+QLLqjcudasMd3W3HXyyWaNTFlyc6XRo01948ebhfGwFSM2AAAAKN2ePWatiV1q1JDeftss+l+92vvzJCebvVM82SfF5TKBKjm55GOWZcLM2LGmcxqhxhEINgAAACjdTz8Ffn3NicLDzd4zEydKW7d6d44FC6TBgz1/XlnrbCZNMhuIDhvmXT3wC4INAAAASmdH44DS1K9vNuy88UbvOpV9+600aJDnzyttnc2MGaZb2223eX4++BXBBgAAAKX7/Xevd4H3uaZNpZdflq65xrM20Hl5Unq6d+uEWrSQduw49vnChdKiRdKzz3p+LvgdwQYAAAAlFRSYUFCzpt2VHNO5s5mSNmaMqc0dnrZ5PtFJJ0l//y39+qsJVm+/7dlaHQQMfysAAAAoafNmqV07u6soacAA6bzzTMBwh6dtnk80cKA0a5Z0331mrU9EhPfngl8RbAAAAFDSqlXOWF9TmnHjpLlz3Ru1WbNG6tnT+2sNHCi99poJUtHR3p8HfkewAQAAQEmrVlVuCpc/hYWZNstz55Z/XHKyFBdXualjJ51k9rNp1cr7cyAgCDYAAAAoaft2qXlzu6so27hxpkOZZZV9jLdtnk/E9LOgQLABAABAcUeOSLVqmU0qnap2bbPe5ptvyj7m22+l888PWEmwF8EGAAAAxa1ZI516qt1VVOzWW836l9JUps0zghLBBgAAAMU5ZWPOijRoIHXsKP3vfyUfq2ybZwQdgg0AAACKW71a6tXL7ircc/fd0osvlry/sm2eEXQINgAAACju0CGpXj27q3BPkyZmutm6dcXvr2ybZwQdgg0AAACO2bXLhIVgcv/90nPPHfvcF22eEXT42wYAAMAxTt6/piytW5tmAYmJ5nNftXlGUCHYAAAA4JglS4KjccCJ7rtPev558zFtnqslgg0AAACML7+UMjOlzp3trsRzp5xiptHt3k2b52oq1O4CAAAA4AC//CK98Yb0ySfO3pizPHfdJV19tTRwoN2VwAYEGwAAgOpu506zAH/uXCk83O5qvNe/v5SdLV1wgd2VwAYEGwAAgOosI0O67jpp2jQpOtruairH5ZL++1+pdm27K4ENWGMDAABQXeXlSWPGSE88ISUk2F2NbxBqqi2CDQAAQHVkWdIdd0hXXSX16WN3NUClEWwAAACqo+eek1q0kEaOtLsSwCdYYwMAAFDdfP21tHWrNHWq3ZUAPkOwAQAAqG7efluaOTN42zoDpWAqGgAAQHWSnm4CTWSk3ZUAPkWwAQAAqE6+/lq68EK7qwB8jmADAABQnXz2mXTJJXZXAfgcwQYAAKC6OHLE3Bo1srsSwOcINgAAANXFt99KgwbZXQXgFwQbAAAAX5ozxyzQd6L586Vhw+yuAvALgg0AAICv5OVJEydK779vdyUl5eRIe/ZIJ51kdyWAXxBsAAAAfOX776Vx48wCfcuyu5riFi+WBg60uwrAbwg2AAAAvvLBB9LYsdIpp0irV9tdTXGffipddpndVQB+Q7ABAADwhUOHpAMHpGbNpBtukN56y+6KjsnPl5KSpIQEuysB/IZgAwAA4AuffSZdeqn5uE0bKTVVysiwt6ZCy5dLZ55pdxWAXxFsAAAAfGHePGn48GOfX3ml9OGH9tVzPKahoRog2AAAAFRWaqoUESFFRR2779JLTXtlu1mWtH691KmT3ZUAfkWwAQAAqKw5c8wIzfEiIqSOHaVffrGnpkJr1kinniq5XPbWAfgZwQYAAKCyvvlGGjy45P033mh/EwGmoaGaINgAAABUxqZN0sknSzVrlnysQwdpxw7TMc0OlmXaTp96qj3XBwKIYAMAAFAZH3wgXXNN2Y9fcYX08ceBq+d4Gzea6XBMQ0M1QLABAADwVkGBtGKF1KdP2ceMGCHNnRu4mo73ySdMQ0O1QbABAADw1vLl0hlnlD8iUquW2dfm998DV1ehH3+U+vYN/HUBGxBsAAAAvPX+++VPQytkRxOBbdukFi2kkJDAXhewCcEGAADAG9nZ0vbtUtu2FR/bpYu0dat05Ij/65KkJUuk66+Xbr89MNcDHCDU7gIAAACC0jffSBdc4P7xI0ZI8+ZJo0f7r6ZDh6SJE6X8fOnzz6V69fx3LcBhCDYAAADemDNHevll94+//HLpkkuk2rVLf7xuXemcc6SwMO/qWbpUeuwx6Z//lM47z7tzAEGMYAMAgGT2+9iyxbw5/PFH8xvvyMjit3r1pFatpH797K62fAcPmlt2tpSVdeyWnW1ullX681q0kLp1C2SlpSuv/iNHpH37pD17pLQ0c8vIMK8pO9uMiowdW/qeMr6uMSdHio11/zl16pjgkZhY+uPbt0vPPWcW+990k9SkiXvnPXzYjNLk5EiffWa+V4FqyGVZZf3vVtLUqVM1depUJSUlSZI6deqkRx55REOGDCl2nGVZuuCCC7RgwQLNnz9fw4YNc7ugjIwMRUVFKT09XZH8wwQA+ItlSX/+adYiLFtm3iy3aSOddZYJLhER5g3zibfnnpNWrrR/XxDLMm/qN2wwt40bpaQkc3/9+lJ0tHkNERFSePixj2vWlGqUscT2ww+l778PbP0bNx57De7UHxEhNWpkAkVMjPkzMtL8feTmSu+9Z/aVufJKacwY70c/Sqs3JcWE361bpe++ky66yFzHlyzLfE9Om2Ze0/jx5vvx+O+33FzzvfvHH+b2ww/SAw9I55/v21oAB/AkG3g0YtO0aVM988wzatOmjSzL0qxZszR06FD9+uuv6tSpU9Fx//73v+Wy+z98AAAWLZJmzDDrDgoKSj7eqpU0YID00kvmzfKJoqJK3jd/vjlfINYubNggPf106fVblnlT36GD2YDxwgul5s3LDi3u+Owz75539KiUmnrslpZ27OP9+8uuPybG1N6xozRkiBkxqkz9YWHSuHHStddKs2ZJgwdLV19tPi8v4JRX/65dZiTI5ZLi46WEBKl1a+m++6Tu3b2vtSwulzRwoLn9/bf05pvSE09Ip55qRnoOHTKvpU0bqVMn6eKLzWhNRITvawGCjEfB5uKLLy72+VNPPaWpU6dq5cqVRcFm7dq1ev755/Xzzz+rcePGvqsUAABP/PabGV15/30zAlCZN8zHi483v7n3JNjk50vr13s+zeu//5VGjTIjA76qvzwhIVJenhTqwduDdevM1K8zzpDi4o7dOnc2f0ZHm69VIOovFBYm3XCDWaQ/c6YJOGedZaZs7dljRucKCkyIsCyzz0xh3bGxx+qPjTXTwewKDU2bmlCTnW1CbuvWNAMAyuH1Gpv8/HzNnTtXhw8fVp//2233yJEjuuqqq/Taa68pPj7erfNkZ2crOzu76POMjAxvSwIAwPj7b+nuu6WPPzZvrH2pMNi0aeNZPQ8/bLpUeWL3brOYPFChoFEjae9e8xrdlZhopkvdeKP/6vJWzZpmrcrYsdJPP0kNGpiwEh0dXHu7hIdLp5xidxWA43kcbNatW6c+ffooKytLdevW1fz589WxY0dJ0t13360zzjhDQ4cOdft8kydP1qRJkzwtAwCA0mVmStddZ9YolDa9rLLi480UJU8kJ5uQ4qldu6STTvL8ed6KizOvzZNg4+nxdqhZ0yzIB1CleRxs2rVrp7Vr1yo9PV3z5s3TmDFjtHTpUm3ZskWLFi3Sr7/+6tH5Jk6cqHvuuafo84yMDDVr1szTsgAAMNOoxowxnadat/bPNeLipL/+8uw5yckmpHjq4MHS1/n4S2Gw8URKijM6qQGo9jwONjVr1lTr//th0bNnT61evVovvfSSatWqpa1bt6p+/frFjh8+fLj69eunJUuWlHq+8PBwhYeHe1w4AADFWJZ0xx1mr5Azz/TfdeLjTRcqT6SkmJGk3FzPu3QFshlPXJxZOO+JlBTnj9gAqBYqvY9NQUGBsrOzNWnSJN1www3FHuvSpYtefPHFEk0HAADwueefN13BLr/cv9cpXGPjieRkqWtX8zwnz0qIi5PWrPHsOampnu3lAgB+4lGwmThxooYMGaLmzZsrMzNTs2fP1pIlS7Rw4ULFx8eX2jCgefPmatWqlc8KBgCghHnzzPSwN97w/7UKF9h7IjlZ6tnTTEdzN9hkZpqd6APJm6lo2dm0GgbgCB4Fm7S0NI0ePVrJycmKiopS165dtXDhQp133nn+qg8AAGPnTrMAv3DH+T17jn186JD00UeBmbYVEmLaN3siLU265BLP1tns3h3YxgGSd8GGfesAOIRHwWb69OkendyyLI+OBwCgVKmp0qWXSsOGHdttvm3bY7vP16/v7DfYBQVmmtzGje4/Z/dus4dKIDVoIB044Nlz+FkPwCEqvcYGAAC/+/tv6cILpYcesrsSw+UyYcXd/WVcLjP68t//un+NQLd6lo5tWOmuw4elOnX8Vw8AeCCA2wADAOCllBSpcWO7qzgmOtr9kY38/GPBxtOpaIEesfFUaqqZvgYADkCwAQA4X3Kys4KNJ5t07t1rGg5ERkoZGe5fw44RG+nYaJQ7aPUMwEEINgAA50tOdtYb6Lg491s+F442eTrNa/due8JcdLS0f797x6amOuvvBUC1RrABADif06aiebKXzYmjTe6Gm6wsqVYtz2urLE86o6WkMBUNgGMQbAAAzue0N9DeBpuoKCk93X91+UJcnGlP7Q6mogFwEIINAMD5cnKk8HC7qzjGkzU2x0+jO+kkM8WsIpZlX/tqT0ZsaB4AwEEINgAAeMqTEZvjp9G52xmtsOGAHTwJNmlpZi8hAHAAgg0AwNmcuAFk/frut3v2JtjY2erZk2CTlyeFhfm3HgBwE8EGAOBsBw+aIOEknnQ4O3pUiogwH7sbbOxq9SyZERh3gw0AOAjBBgDgbE7bw6YygmHEplEjMxWuIk4cSQNQrRFsAADO5rRWz4VCQ6X8/PKPOfHNv7trc+wMNiEh7m3QmZkp1avn/3oAwE0EGwCAszltc85CjRpJe/aUf0xmphQZeezzsDCzLqUidk5FcxetngE4DMEGAOBsTp2K5s7oS2m1uzOFKzXV/m5jFdWZmkqwAeAoBBsAgLM5dSqau8HmxDf/oaFSbm75z8vPN8fZJSpKysgo/xinbZoKoNoj2AAAnC2YR2xKC2We7IFjF3daPjNiA8BhCDYAAGfLyHDmIvX4+Irf/JcWyirqjJaba//eMO4EG0ZsADgMwQYA4Hwul90VlBQX591UtIqCjRMW5bsbbOyuEwCOQ7ABAMAb3jYPOOkk0865LHa2ei7kTrDZu9d0hgMAhyDYAACc6+hRKTzc7ipKV7eudOhQ+cccPCjVr1/8vopGbJzQ6jk2tuJgU1Bg9rwBAIcg2AAAnCs11ZmNAwq5M0XuxGMqCjbBMmIDAA5DsAEAOJdTO6JVRlSUlJ5e9uNOGbFJSyv7cXf24gGAACPYAACcq7TF905Ss6aUnV36Y9nZ5vETVTTK44QRm7AwKS+v7McPHJAaNAhcPQDgBoINAMC5nLo5Z6HypmyVt8+LZZU96rF/v/NDA3vYAHAggg0AwLmcPhWtvM5o5dUeGWn25ymLE9tbH489bAA4EMEGAOBcTp+KVt4mneXVXlEDASeoU0c6fLj0xxixAeBABBsAgHPt2SPFxNhdRdnK26SzvBGbsoLNoUMmUDhBedPsGLEB4EAEGwCAczl9r5TypqKVtz6orGCTnGx/44BCFQUbRmwAOAzBBgAAb3m7xqasYOOEVs+Fytukk6loAByIYAMAcKb8fKmGw39MlTeqkZZW9jS6soKNE1o9FyrvtQVD5zYA1Y7Df2IAAKqtvXudvb5GksLDpZyc0h/Lz5dCQ0t/rHFjM6JzIieN2JQXbCzL+aETQLXD/0oAAGdyeke0QmXtR1OesjbADJYRG29eMwD4GcEGAOBMTt/DpjwFBRWPaJS2V82uXc4PNu68NgCwAf8zAQCcqbyuYk5St65p03y8vXulhg3Lf15ISMlRm6NHpdq1fVuftyIipOzskvfv2yc1ahT4egCgAgQbAIAzBcuITWmbdLpTe3l74DgZe9gAcCiCDQDAmYJljU1pLZ/dGW06sTOaZZU+Pc1OpdVDq2cADkWwAQA4U7BMRStt5MWdEZsTg83+/VJ0tO/rq4zwcCkrq/h9jNgAcCiCDQDAmbKyzDoPpyttxMad0aYTg42TWj0Xio01+/EcLyWFERsAjkSwAQCgMrxdY3NisHFSq+dCsbElXxtT0QA4FMEGAOA8wbRPiq/W2DhxxKa0ls9MRQPgUAQbAAg2c+bYXYH/ZWZKkZF2V+GeRo1KTtc6elSqVav859WvLx08eOxzJ47YlBZs0tOlqCh76gGAchBsACDYPPSQlJNjdxX+FSwd0SQpNFTKz/f8eSd2HAuWYOPE7m0AIIINAASf5GQpKcnuKvwrWDqilcay3J9Kd/yxTlyUX1qwAQCHItgAQDA5dEg6ckTassXuSvwrWDbnLORyHQsohw65P40uKspMu5OkvDwz+uMkcXHFp9k5sUYA+D8EGwAIJmlpUvv21SPYOG30ojwNGhxbL+NJKDuxgYDT1K0rHT587PM9e6SYGPvqAYByEGwAIJikpkpnnFH1g02wTUU7fpNOT0JZkyYm2ATLSAitngE4GMEGAIJJWprUq5e0Y4fdlfhXsE1FO77lszcjNk5cX1Po+PVCtHoG4GAEGwAIJmlp5rf8eXl2V+JfBw6YdsjB4vhNOj0ZbSoMNk7siFYoNFTKzTUfOzmAAaj2CDYAEExSU81vzENCqn64CaaWwpUdsXFysImJMWtrpGPffwDgQAQbAAgmaWlSbKzUvLm0c6fd1aDQicHG3VGNxo3N8bt2mZDjRMe3fGbEBoCDEWwAIJgUBpuEBGnrVrur8Y+cHCkszO4qPHN884ADB0yXNHfUrGmmeTl5xOb4YEPzAAAORrABgGBy+LBUp47UunXV7YwWjG+eGzSQ9u8/9rmn0+iCZcQmM9O0gAYAByLYAEAwqsrBJtg6oklSjUr8OA0JMSNx0dG+q8eXjg82AOBgBBsACEatWknbttldhX8E2+acx/NmGl1hRzWnNkuIizPBCwAcjmADAMEiL8/8dl+SwsPNm+iqKBhHbCQzarNrl+eh7KSTpFq1/FOTLxSO2OTkmDVBAOBQBBsACBZ795rWu4VcLqmgwL56/MWTfWCcpFEjaf16z2tv0sS5jQMkKSpKSk83oza0egbgYAQbAAgWJ+4h0qSJGd2oaoJ1xCY+Xlq71vPaTzrJuY0DJBOgLcsEToINAAcLtbsAAICbCls9FypsIODkN8XeSE0t/jqDRXy8tGiRdMopnj2vd+/gWFPEHjYAHI4RGwAIFieO2FTVzmj5+VJoEP7eLT5e+vVXz0ds6teXunf3R0W+U6OG2WuHERsADkawAYBgUdaIDZwhLk5KSgrOaXQVadhQ2rCBERsAjkawAYBgcWKwOflkaetW++rxh4IC57Y9rkh8vKk9GKfRVSQuTvrtN4INAEcj2ABAsDhxKlqdOtKRI/bV4w/795vRgWAUH2+61gXjNLqKxMVJv//OVDQAjkawAYBgsW9f6bvTW1bga/GXYO2IJkl160pt29pdhX/ExZl9lJy83w6Aao9gAwDBwrLMIu7jxcZKe/bYU48/JCcH73Qnl0v66iu7q/CPuDhGawA4HsEGAIJZ69ZVa51NsG7OWSgy0u4K/CMuLngDJ4Bqg2ADAMGgrOlmCQlVqzNaME9Fq8oaN5ZatbK7CgAoF8EGAIJBRoYUFVXy/qrW8jmYp6JVZdHR0owZdlcBAOUi2ABAMDix1XOhqjZiE+xT0aqykBC7KwCAchFsACAYlBVs6teX0tMDXo7fHD5s2lgDAOChKthsHwCqoBP3sDlesG1omZoqHT0qhYcXv1XF/V8AAAHDTxEACAZpaVKzZqU/FhUlHTggNWgQ2Jq88e230pQpUvv2UnZ28Vt+vtSpk90VAgCClEfBZurUqZo6daqSkpIkSZ06ddIjjzyiIUOGaP/+/Xr00Uf17bffaseOHYqJidGwYcP0xBNPKKq0Ba8AAPelpkqnnlr6Y4Utn8t63CkWLpTefFP64gspIsLuagAAVYxHwaZp06Z65pln1KZNG1mWpVmzZmno0KH69ddfZVmWdu/ereeee04dO3bU9u3bNX78eO3evVvz5s3zV/0AUD2UtcZGOtYZzcnBpjDUzJ5NqAEA+IXLssraHME90dHRmjJliq6//voSj82dO1fXXHONDh8+rFA3505nZGQoKipK6enpiqyqG50BgKdGjpTee6/0ULBypfTf/0oPPRT4utyxYIE0bRqhBgDgMU+ygddd0fLz8zVnzhwdPnxYffr0KfWYwgLKCzXZ2dnKyMgodgMAnCArq+xQkJBgpqI50YIF0ltvEWoAAH7ncbBZt26d6tatq/DwcI0fP17z589Xx44dSxy3d+9ePfHEE7rpppvKPd/kyZMVFRVVdGtW1uJYAEDpGjWS9uyxu4qSCDUAgADyeCpaTk6OduzYofT0dM2bN09vv/22li5dWizcZGRk6LzzzlN0dLQ+//xzhYWFlXm+7OxsZWdnF3tus2bNmIoGAMe7+GKz6L4sF10kffll4OopS0GBtHOntGSJ9PnnJtSEh9tdFQAgSHkyFc3jds81a9ZU69atJUk9e/bU6tWr9dJLL+nNN9+UJGVmZmrw4MGqV6+e5s+fX26okaTw8HCF80MPAMqWkyNV8H+p6tSRDh2S6tYNTE2StG+f9L//SRs2mNv+/WZPnWbNpM6dCTUAgICq9D42BQUFRSMuGRkZGjRokMLDw/X5558rgqkHAFB5e/aU3RGtUOvW0rZtUteugakpK0u64gppxAjpzDOlG24wU+IAALCJR8Fm4sSJGjJkiJo3b67MzEzNnj1bS5Ys0cKFC5WRkaHzzz9fR44c0fvvv1+sEUBMTIxCQkL88gIAoMpLTZXi4so/JiHBtHwOVLD5xz+kO+80U+AAAHAAj4JNWlqaRo8ereTkZEVFRalr165auHChzjvvPC1ZskSrVq2SpKKpaoUSExPVsmVLnxUNANVKeXvYFGrd2rR9DoTPPpNq1CDUAAAcxaNgM3369DIfGzBggCq5JQ4AoDTuBpv33/d/LX//Lb32WvmNDAAAsIHX+9gAAALEnalojRtLycn+rSM/X7r5ZunVV2kKAABwHIINADidOyM2Lpf/63jySenyy6W2bf1/LQAAPESwAQCnc2fERpJq1jTdyvxh2TIpMVEaPdo/5wcAoJIINgDgdAcOSPXrV3zcySeb8OFr+/ZJjz0mvfKK788NAICPEGwAIBi4M9WsdWvT8tmXLEu69VZpyhSpXj3fnhsAAB8i2ABAVdG6tbR1q2/OdeSING+e2YCzb1+pZ0/fnBcAAD/xqN0zACDAPGmj37q1NH++99fKypK++cYEmsxM6YILpDfekGJivD8nAAABQrABACc7cEBq0MC9Y5s2lX7+2UxHO2Gj5DIVFEiLFknvvivt3y8NGSI9/7wUH+99zQAA2IBgAwBOlpbmXkc0SQoJkV5/XXr6aROIbrhBGjzY3H+iffukmTOlr7+WBgwwz2na1JeVAwAQUAQbAHAyd/awOV6PHtKMGdLevebPF14w4WbcOCk6Wlq1SnrzTSk9XRo7Vlq4UArlRwEAIPjx0wwAnMzdPWxO1KiR9P/+n3TvvWZU5oYbpIMHpdNOkx5+2LSGBgCgCiHYAICTpaVJCQnePz8kRLr4YnMDAKAKo90zADhZaqpnU9EAAKimCDYA4GSeNA8AAKAaI9gAgJPt2cM+MgAAuIFgAwBOlpMj1axpdxUAADgewQYAAABA0CPYAAAAAAh6BBsAcKqsLCkiwu4qAAAICgQbAHCqtDRaPQMA4CaCDQA4FXvYAADgNoINADgVe9gAAOA2gg0AOBVT0QAAcBvBBgCcKjWVERsAANxEsAEAp2LEBgAAtxFsAMCpaB4AAIDbCDYA4FQZGVJkpN1VAAAQFAg2AOBkLpfdFQAAEBQINgAAAACCHsEGAJyooIDRGgAAPECwAQAn2rdPatjQ7ioAAAgaBBsAcKK0NPawAQDAAwQbAHAi9rABAMAjBBsAcCL2sAEAwCMEGwBwIqaiAQDgEYINADgRU9EAAPAIwQYAnCg1lREbAAA8QLABACdKS5NiYuyuAgCAoEGwAQAnys+XQkLsrgIAgKBBsAEApzl0SKpd2+4qAAAIKgQbAHCaP/+U2re3uwoAAIIKwQYAnGbjRoINAAAeItgAgNNs2iR16GB3FQAABBWCDQA4zebNUtu2dlcBAEBQIdgAgNMcOSLVqWN3FQAABBWCDQA4SV4ebZ4BAPACwQYAnCQxUTr5ZLurAAAg6BBsAMBJ6IgGAIBXCDYA4CR0RAMAwCsEGwBwEkZsAADwCsEGAJxkzx4pJsbuKgAACDoEGwBwCssyf7pc9tYBAEAQItgAgFOkpkrx8XZXAQBAUCLYAIBTsL4GAACvEWwAwCnoiAYAgNcINgDgFIzYAADgNYINADhFUpLUsqXdVQAAEJQINgDgFAUFUkiI3VUAABCUCDYA4ASZmVLdunZXAQBA0CLYAIATbN4stWtndxUAAAQtgg0AOAEd0QAAqBSCDQA4AR3RAACoFIINADjBn39KbdvaXQUAAEGLYAMATnDkiFS7tt1VAAAQtAg2AGC33FwpNNTuKgAACGoEGwCw27ZtUkKC3VUAABDUCDYAYLdNm2gcAABAJRFsAMButHoGAKDSCDYAYDdaPQMAUGkEGwCw2969UkyM3VUAABDUCDYAYCfLsrsCAACqBIINANgpJUVq3NjuKgAACHoeBZupU6eqa9euioyMVGRkpPr06aNvvvmm6PGsrCxNmDBBDRs2VN26dTV8+HClpqb6vGgAqDJYXwMAgE94FGyaNm2qZ555RmvWrNHPP/+ss88+W0OHDtUff/whSbr77rv1xRdfaO7cuVq6dKl2796tyy67zC+FA0CVQEc0AAB8wmVZlZvgHR0drSlTpmjEiBGKiYnR7NmzNWLECEnSpk2b1KFDB61YsUK9e/d263wZGRmKiopSenq6IiMjK1MaADjf7bdLd98tnXyy3ZUAAOA4nmQDr9fY5Ofna86cOTp8+LD69OmjNWvWKDc3V+eee27RMe3bt1fz5s21YsWKMs+TnZ2tjIyMYjcAqDa2b5datLC7CgAAgp7HwWbdunWqW7euwsPDNX78eM2fP18dO3ZUSkqKatasqfr16xc7Pi4uTikpKWWeb/LkyYqKiiq6NWvWzOMXAQBBq6BACgmxuwoAAIKex8GmXbt2Wrt2rVatWqVbbrlFY8aM0YYNG7wuYOLEiUpPTy+67dy50+tzAUBQycyU6ta1uwoAAKqEUE+fULNmTbVu3VqS1LNnT61evVovvfSSLr/8cuXk5OjgwYPFRm1SU1MVHx9f5vnCw8MVHh7ueeUAEOw2baIjGgAAPuJxsDlRQUGBsrOz1bNnT4WFhen777/X8OHDJUmbN2/Wjh071KdPn0oXCgClys+XkpKkDRtM6+QNG6Q9e8x9y5dLUVF2V1g2OqIBAOAzHgWbiRMnasiQIWrevLkyMzM1e/ZsLVmyRAsXLlRUVJSuv/563XPPPYqOjlZkZKRuv/129enTx+2OaADgkccek9askVq1kjp2lHr3lq67ToqJkR5/3ASH00+3u8rS/fWXNHOm9MYbdlcCAECV4FGwSUtL0+jRo5WcnKyoqCh17dpVCxcu1HnnnSdJevHFF1WjRg0NHz5c2dnZGjRokF5//XW/FA6gmktLk9aulb74ovTH27d3ZrA5elSaPNmMLL31Fm2eAQDwkUrvY+Nr7GODamHLFun/1qrBS//8pzRokHTWWaU/vm6d9MEH0jPPBLau8nzxhfTii9Kdd0qXXCK5XHZXBACAowVkHxsAXvr7b6lPH8lZv1MILgcPSr/9JvXvX/YxbdqY6V5OkJgojRwprVwpffmlNHQooQYAAB+rdPMAAB566SUpNlbat09q1MjuaoLTq69KEyaUHw4iIqSsrMDVVJb//EeaMUOaMkVq187uagAAqLIYsQECKT1d+uMP6YorpK1b7a4mOB0+LC1bJg0ZUvGxYWFSTo7/ayrLvn0mhH3yCaEGAAA/I9gAgfTmm9LNN0sJCQQbb02bJt14o3tTudq0MeuZ7PKPf0hPPWUCFgAA8CuCDRAo2dnSwoXSxRebxgEEG89lZ0tffSVddpl7xxd2RrPD999Ldeo4rysbAABVFGtsgECZPVu68kqpRg0zYmPnSEKwmjVLuvZaKSTEveM7dJAWL/ZvTaU5etSM1Hz2WeCvDQBANcWIDRAIBQWm9fA115jPo6Ol/fvtrSnY5OVJH30kXXWV+8+xa8Rm0iTpnnukevUCf20AAKopgg0QCF9/LZ1zjunUJdHq1xtz5kjDh3u2XiU6WjpwwH81lWbtWtPS+6KLAntdAACqOaaiAYHwxhvSe+8Vv692bdPhq04de2oKJgUF0syZZoNLb1hWYMJkfr5pGDBrlv+vBQAAimHEBvC3Vauktm2lBg2K309nNPd99pk0aJBUq5bnz23a1IygBMLLL0ujRknx8YG5HgAAKEKwAfzt3/+W7rqr5P0EG/dYlhnxGj/eu+d36OD+OhvLMvvObN/u+XWSkqRFi6Rx4zx/LgAAqDSCDeBPf/0lhYdLzZuXfIxg457//lfq08f7hfjt20sbN7p37Pbtpp30Qw9JI0dK331npsFVxLKke++VXniB9VMAANiENTaAP73wgumOVZqEBNPlC+WbNUv617+8f36HDu63Xf7xR9O57uqrpZQU6e23pWefNXsPjR0rRUWZ49LSpN9+M7e1a02Hu4suMhuCAgAAWxBsAH9JSzNvjrt2Lf3xk06Sdu0KbE3BJjPT3Jo08f4cTZtKO3e6d+wPP0gPPmg+jo83IzcPPGCC0bXXSrm5Zh+i2FipWzepZ08z9Sw62vv6AACATxBsAH957TXp9tvLfrxGDTOFCWWbP1+69NLKncOTr/OOHSWnDYaGmjbTw4ebaWk1mMELAIAT8RMa8Jeff5YGDiz/mNBQMwqA0n36qXTZZZU/T1SUdPBg+cfs3Ss1bFj+MYQaAAAci5/SgD9VtJC8RQvvOnBVBykpZq+fyMjKn8udzmg//ij17Vv5awEAAFsQbAB/yMyU6tat+Dg6o5Vtzhzpyit9cy53OqP9+KPUr59vrgcAAAKOYAP4w9at7nXIat1a2rLF//UEowULzKacvtChQ8XBZsMGcxwAAAhKBBvAH7ZsMaGlIozYlG7TJunkk6WaNX1zvooC5OHDUq1arKEBACCI8VMc8Ad3g03LlmbHehT3wQdmLxlfCQ+XcnLKfnzlSql3b99dDwAABBzBBvAHd4NNzZp0RTuRZUkrVkhnnOHb89asKWVnl/7YDz+wvgYAgCBHsAH8ISVFiotz//iCAv/VEmxWrDCjJxV1lPNUmzbSX3+V/tgvv0g9evj2egAAIKAINoC/uPvGvEkTKTnZv7UEE19PQytUVsvn3FwzSuSr9TwAAMAWBBvA144cMQvR3UUDgWNyc800Pn90Jyur5fOvv0qnnOL76wEAgIAi2AC+tm2bCSvuItgcs3ChNHiwf87dvn3pIzasrwEAoEog2AC+5m7jgEIEm2M+/FC64gr/nLt+fSk9veT9K1ZIffr455oAACBgCDaArxFsvJORYfaTadzYf9dwuYo3arAsM3Wwbl3/XRMAAAQEwQbwNU+DTb16Umam/+oJFvPnS5dd5t9rNGsm7dx57PNNm8wUNQAAEPQINoCv7dplOp15wtetjYPR/PnSpZf69xondkZjfQ0AAFUGwQbwNcuSanj4T6t+fenAAb+UExSSk810sHr1/HudEzuj/fijdOaZ/r0mAAAICIIN4EvZ2d7th1Ld19n897/SBRf4/zonjtjs2SPFxvr/ugAAwO8INk6WlSVt3y6tXm3294DzJSZKJ5/s+fNatzZrc6qr5csDM3Jy0knS33+bj3fulJo29f81AQBAQITaXQD+z5Yt0gMPSDk5ZiqTJEVESHFx5rfKQ4dKV11lb42omKeNAwolJEiLFvm+nmCRlCQ1b+7/6xy/lunHH1lfAwBAFUKwcYqFC6UxY6SLLy752G+/SR9/HPia4LktW6TOnT1/XkKC9NZbvq8nGKSnS5GRgWugEB0t7d9vGgfcf39grgkAAPyOqWhOsX691K1b6Y+1a1f6julwHm9HbGJizMhcdbRqVWA3yGzf3vx7SkyUWrYM3HUBAIBfEWycYudOs8dGaSIizKJ02GPOHDOi5o4dO8r+eyyPy3VsCmJ1s3y5dMYZgbtehw7mmg0a0GYbAIAqhGDjBJZlbuW9yapd2+zKjsBbs0b64gv3ji0okEJCvLtOrVrS0aPePTeY/fKL1L174K7Xvr00fTptngEAqGIINk6wa1fF3Zk6dZI2bAhMPSguMdG9qYC5uVJoJZatnXyytG2b988PRvn5Jgx60yLbW4Ud6GgcAABAlUKwcYL16ytecN65szkOgZeVJTVpIqWllX/c9u2VW7NRHfeyWb9e6tIlsNcMC5POOce7Jg8AAMCxCDZOsG5dxW/uCDb2GjBAWrq0/GO8bRxQqDoGm0Cvryn0zTdSDf77AwCgKuEnuxOsX2+mmpUnIaF6b+BolwMHzCLzAQOkJUvKP9YXwaa6/R0vXx7YjmiFaBoAAECVQ7Bxgr17Tbvf8oSGmvUICKzERKlVK3OraP1LZYNNs2bS3397//xgtHev1KiR3VUAAIAqgGBjt/x897toNWhgNhZE4GzbZhb1u1xSbKyUmlr2sUlJlVtjExJiFtJXF8nJUny83VUAAIAqgmBjt61bzRQkd3TuLP3xh3/rQXGFIzZSxdPR8vIq1xVNMuEmL69y5wgWK1bQchkAAPgMwcZu7nREK0QDgcBLTDQjNpI0cGDZwSYvz/v9a47XrJnZrLU6+N//7GkcAAAAqiSCjd08aXdLsAm8XbtMq2fJTDNLSir9uJ07pebNK3+96tRAYONGs1kmAACADxBs7PbHH1LHju4d27y52SsFgXPiGqj4eLM25ESVbRxQqHXr6tHyOSvLbMpJy2UAAOAjvKuw26FDUt267h1b2KLWsvxXD44pKCj5xrus/Wx8FWyqy142a9ZIp55qdxUAAKAKIdjYKStLCg/37DmNG0spKf6pB8Xt3n1sGlqhs86SFi8ueayvgo07baWrguXLaRwAAAB8imBjp82bpQ4dPHsO62wC5/jGAYVatix9OmBiYuVaPReKiJCOHpVycip/LidbtUrq1cvuKgAAQBVCsLGTJx3RChFsAmfbtmOtno/XpIkZzTleTo7no29lOeccadEi35zLiSxLOnzY/SmYAAAAbiDY2GndOoKNkx2/h83xTtzPpqDg2PonXxg+XJo3z3fnc5qtW30zbQ8AAOA41SPYFBQ4c8H95s1Su3aePSc2VkpN9U89KG7btpJT0aSSwWbXLqlpU99dt2VLc87cXN+d00lYXwMAAPygegSbhx+W7r7b7ipKys01LW894XKZW0GBf2rCMQcOSA0alLy/eXNpx45jn/uqccDxBg4svUlBVcDGnAAAwA+qfrDJzzcLlevXl157ze5qjsnIkOrV8+65ZS1gh++VNcXspJOkv/82H/sj2IwYUXWno+3YITVrZncVAACgiqn6wWbRIrMY+9FHpZ9+kr7+2u6KjD/+8Hx9TSHW2fhfRa24Bw48tp+NP4LNySebAJCX59vz2u3gQSkqyrdrkgAAAFQdgs3770vXXmveSE2bJr36qvT773ZX5V1HtEIEG//bvl1q0aLsx4/fz2br1tLX4lRWWZuBBrNVq6Teve2uAgAAVEFVO9hkZEjp6ccWdoeHS+++K911l5ScbGtplQo2nToRbPytrMYBhZo1OzYVLStLqlXL9zWMGCHNnev789rpf/+jcQAAAPCLqh1s5s0zbw6P16iRNHWqNGaM2UvDLmXtkeKO+vVNYIP/lNXq+XjNmhVvIuBrrVubOvLz/XeNQFu7Vure3e4qAABAFVS1g82nn0qXXlry/nbtpH/+Uxo3zr7uYpYl1ajElz80tOq2A3aCxMSKp5cNGCDNmSM1buy/Ovr3l5Yt89/5Aykvz/x7CwuzuxIAAFAFVd1gk5ho9nypU6f0xwcMkIYMkf7xj4CWJUlKSzO1VUabNmbROvwjKcl0nyvPgAHS22/7d7PJkSOrTne0Rx8tOYIKAADgI1U32Lz3njR6dPnHjB1rRk3mzAlISUUqs76mEA0E/CsrS4qIKP+Yk04yf/oz2LRtawKsv6ajLVgQmPVm06aZ0ZqxY/1/LQAAUC1VzWBjWdIPP5hpPBV58klp5szA7guzbp3UpUvlzkGwcYYLLpA6dvTvNfr2lX780T/nfuop6fHH/XPuQl9/bep/6in/XgcAAFRrVTPY/O9/Up8+7q1hCQszG3feemvgFmn7YsSmQwdpwwbf1IPiDhwwDRrc8eKL5u/Cn/y1Wef69dIpp5i9ZbZt8/35JemXX6TXX5feeqtya8oAAAAqUDXfabz7bsXT0I6XkCCNGiVNnuy/mo6XnCzFx1fuHLVrS0eP+qYeFOdO44BCgdhoskMHadMm3ze6+PBD6aqrpIcflp54wrfnlswo6P33m2mh5W12CgAA4ANVL9gcPWr2F/F03cPo0ebN48qV/qmrkGWZN8O+eEMcEUG48YfKtOL2lzPPlJYv9935LMtslnn66cem0vlyBPDAAdN1cPp0qUED350XAACgDFUv2PznP9KwYZ4/z+WSXnnFtIHOyPB1VcdUtKO9Jwp/kw/fcmcPm0Dz9WadK1dKvXsfC9gPPeS7UZvsbPOLgn/9q+LOcgAAAD5S9YLNxx+baWXeaNBAeuwx6e67fVpSMb5YX1OIBgL+4clUtEDp1MmMqPhqOtrs2WYaWqGEBCkqyqyJqQzLksaPN7eePSt3LgAAAA9UrWCze7dZe+Luwu/S9O9vNlz86COflVUMwcb5du2SmjSxu4riXC4zwuKLqZJ5edKff5bs5vbQQ5XvXPbNN1LTptKFF1buPAAAAB4KtbsAn/rgA+maayp/nkcflS6+2LyRLJw2lplpfpu9erW0Zo2Unm5CVMeOpnVzly5mXU9oBV/S9evNb7N9oU0b8wYVvlVQIIWE2F1FSaNGSW++KZ1xRuXOs2iRdM45Je9v2lRq3tys5fHmGnl50gsvmOmgAAAAAebRiM3kyZPVq1cv1atXT7GxsRo2bJg2b95c7JiUlBRde+21io+PV506ddSjRw998sknPi26VJYlffutdN55lT9XYQvo664zGwpecIF0/fXSihWmPe7UqWZvjvfek4YOlQ4fNu1sL7vM/KZ63DjpnXfMInTLKn7ugwcrN6J0vJo1pdxc35yrKjnxa+6JgoLAdDrzRpcupqPezp2VO8+HH0pXXFH6YxMnmu6A3nwNZ8yQLr9cqlu3cvUBAAB4waMRm6VLl2rChAnq1auX8vLy9M9//lPnn3++NmzYoDp16kiSRo8erYMHD+rzzz9Xo0aNNHv2bI0aNUo///yzTjnllMpXnJcn7dsnpaVJe/aYW1qalJQkde9e8YiJuxISTFipW1eKiyv9mFq1zDqCE9cSJCebDUJfeEHaulWKjpb69TOdrXxVX6F69czoUVSUb88baLm50pYtZh3Jxo3mtnevGYVr1Mj98yQlSeefLw0cKE2YIHXt6lkdu3c7bxra8R56yGwq++ab3j3/6FHz76V589Ifj401X7Pvv5fOPdf982ZmmvVtCxZ4VxcAAEAluSzL+19v79mzR7GxsVq6dKn69+8vSapbt66mTp2qa6+9tui4hg0b6tlnn9UNN9xQ4TkzMjIUFRWl9PR0RUZGFn/wq6+kZ56R2reXYmLMLTb22McdOzpzv4x9+8zO68uWmd+6jx3ru3P/5z/Szz+bN7tOk5dnusD9+aeUkmLe/GZkHLtlZkqHDpmNUUNDzdS6Dh3M32OHDmbK36JFnr22CROkG24w3wevv24aAYweLV16qRnhqsgPP5iRuf/3/7x/3f52zTXSI49Ibdt6/tx588wvA265pexjDhyQrrzSrJdxd/TqkUfM1M0LLvC8JgAAgDKUmw1OUKnhg/T0dElSdHR00X1nnHGGPvroI1144YWqX7++Pv74Y2VlZWnAgAGlniM7O1vZ2dnFii9VZqb0/PNmulmtWpUpO/AaNjRT1oYO9f25hw0zvylfu9aMWNklPV2aM8eEmG3bzAhMaKhp99umjRkFadZMiow8dqtXT6pTp+wd6QcOlKZMcX/6XkqKGS0rHBl89VXzffPee+YN95lnSrfeWvYInOTMPWxO9Oij0qRJ0vvve/7cuXPNNMvyNGgg9e0rffmlWWtWkV27zPffpEme1wMAAOAjXgebgoIC3XXXXTrzzDPV+bguXx9//LEuv/xyNWzYUKGhoapdu7bmz5+v1mVsmDl58mRNcucN0T//aabhBFuoCYQXX5SuvdaMaIWF2VPD00+bFsk33WSCgTujIxVxuaTbbzdvxB98sOLjX3xRuuee4vfVq2fCzC23SEuWmNGyr78ueyQiMdG9N/N2atPGBMJffpF69HD/eQcPmsDpztS+O+80a8bOO89sBFueRx+VHn/cuWuTAABAteB1u+cJEyZo/fr1mjNnTrH7H374YR08eFD//e9/9fPPP+uee+7RqFGjtG7dulLPM3HiRKWnpxfddpa2MHr5cikrSzr7bG/Lrdri4qQxY8zohh0OHpTWrZNuvllq1843oabQkCHS0qVmylp5DhwwHef69i39cZfLjACddpr03XdlnycYRmwk6eGHPZ9++Omn0vDh7h1br56Zjjd0qLRjR9nH/f67abhg52ghAACAvFxjc9ttt+mzzz7TsmXL1Oq4N4Fbt25V69attX79enXq1Kno/nPPPVetW7fWG2+8UeG5S8yjy84204jmzjWL8FE6y5JGjjS7x3foENhrP/201K2b//Yu+eQT0xTg3nvLPuaJJ6RevaTBg8s/14ED0tVXm9Gt0kYYLr5Y+vzz4Bh9uPdeMxWxXz/3jh861DRj8KRr2datJrBOnFh6i+hhw8yUv6ZN3T8nAACAmzxZY+PRiI1lWbrttts0f/58LVq0qFiokaQjR46Yk56wZiIkJEQF3u6Y/uyzZt8XQk35XC7p3/82U7Hy8wN33aNHpcWL/bto/NJLzUL2o0dLf/zQIbPof9Cgis/VoIHpYvf992UfEwyhRvKsNXNyshmF8bQVc0KCCXrvviv961/Fr7VwodSpE6EGAAA4gkfBZsKECXr//fc1e/Zs1atXTykpKUpJSdHR/3vD2b59e7Vu3Vo333yzfvrpJ23dulXPP/+8vvvuOw0bNszz6jZsMNOLRozw/LnVUdOmZl3EK68E7pozZpj9fvwZBmrUMNeYMaP0x996y6ztcbeGu+8263FODARZWc7sqleWRo2k0083a4Yq8vHHZo8Zb9SuLc2cada3XX21aciQn2+mPv7jH96dEwAAwMc8CjZTp05Venq6BgwYoMaNGxfdPvroI0lSWFiYvv76a8XExOjiiy9W165d9e6772rWrFm6wNPf6BcUSPfdZ/aCCZbfoDvBDTeYEZStW/1/rdxcs25j1Cj/X+vyy821cnKK35+dbbp3XXqp++eKjjZrQhYvLn7/9u2mi1swueceM1JX0YjoggXujWiVpbCRw623mulnjzxi1utUMCQMAAAQKJXax8YfiubRPfecImvXLn+/DZQuMVG64w7/rxV5/33z2/tA/R1Nn25ez7hxx+576y3TCc7TvYH27TMNF7788th933xjmgdMmOCTcgPmxRel+Hiz90xptmwxoyvebup5ouRks5/Uc8/Z14UPAABUC56ssXFusDn3XEUuXFj2Hico38svmza9N93kn/MXFEjnny998UXgWnDn5JguaQsXmj1y8vLMKMSCBd69wZ440Ty/cI+l1183IzbBtslkVpapufDfy6ZNZtPWn382I3ehoaaDWteudlcKAADgkYBt0OlXTz1FqKmM224zU4X27jUjKg0a+Pb8X30lnXtuYPcVqlnTTDn7+GPpqqtMp7xLL/V+1ODee83ancJgk5gYnC3FIyLMiNXAgebvuUMH6dRTzVqiVq2YygkAAKoF547YuJHKUAHLMgvLp06V2rc3b3RPOsk3573gAmnOHCkqqvLn88TRo6Yl88KFprXz559XLlz94x+mTXX//qZd9nvvVbwhpVNZFiEGAABUKX5r94wg43KZN+1ffmlGb+6+2zQX2Lixcuf94Qez+D7QoUYyIWbwYDPF7pxzKj9idN99Zq2IZKZ0BWuokQg1AACgWnPuVDT4Vp8+5rZxo/T881JKStnBpEEDM0WrZ8/SH//3v816FLuMH28243zhhcqfKyZGatdO+vHHyp8LAAAAtiHYVDcdOkhvv21GJ3JzSz9m1y5p2jTpoYfMWpZRo47t77J2renAFR8fsJJLqFtX+uMP363Buu8+6Yor2GgSAAAgiBFsqquIiLKnXbVvb0ZDDh+WZs82a1pOPdWMlDz3nPT444GttTS+bCwRFyf16GECEwAAAIISzQNQMcuSli83TQiioqTXXrO7It/LyDB78viiuQIAAAB8omq0e4ZzuFzSmWeaW1UVGWluAAAACEp0RQMAAAAQ9Ag2AAAAAIIewQYAAABA0CPYAAAAAAh6BBsAAAAAQY9gAwAAACDoEWwAAAAABD2CDQAAAICgR7ABAAAAEPQINgAAAACCHsEGAAAAQNAj2AAAAAAIegQbAAAAAEGPYAMAAAAg6BFsAAAAAAS9ULsLOJFlWZKkjIwMmysBAAAAYKfCTFCYEcrjuGCzb98+SVKzZs1srgQAAACAE+zbt09RUVHlHuO4YBMdHS1J2rFjR6nF9+rVS6tXrw50WT5D/faqjvVnZGSoWbNm2rlzpyIjI/1UmXuq49ffSapj/Xz/+w7128sp9Xv7b8op9XuL+u2Tnp6u5s2bF2WE8jgu2NSoYZb9REVFlfoPJiQkxPYfTpVB/faqzvVHRkba/tqr89ffCapz/Xz/Vx7128tp9Xv6b8pp9XuK+u1XmBHKPSYAdfjUhAkT7C6hUqjfXtRvL+q3F/Xbi/rtRf32on57BXv97nJZ7qzECaCMjAxFRUUpPT096JMl4AT8m0J1xvc/4Fv8m0KgefI957gRm/DwcD366KMKDw+3uxSgSuDfFKozvv8B3+LfFALNk+85x43YAAAAAICnHDdiAwAAAACeItgAAAAACHoEGwAAAABBj2ADVEMul0v/+c9/7C4DAADAZwIebMaOHathw4YF+rJAlTN27Fi5XK4Sty1btthdGuBXhd/748ePL/HYhAkT5HK5NHbs2MAXBlQBK1asUEhIiC688EK7SwE8xogNEMQGDx6s5OTkYrdWrVrZXRbgd82aNdOcOXN09OjRovuysrI0e/ZsNW/evFLnzs3NrWx5QNCaPn26br/9di1btky7d++u1Lny8/NVUFDgo8qAitkabBYsWKC+ffuqfv36atiwoS666CJt3bq16PGkpCS5XC59+umnGjhwoGrXrq1u3bppxYoVNlYNOEd4eLji4+OL3UJCQvTZZ5+pR48eioiI0Mknn6xJkyYpLy+v2HOTk5M1ZMgQ1apVSyeffLLmzZtn06sAPNejRw81a9ZMn376adF9n376qZo3b65TTjml6D53f8589NFHOuussxQREaEPPvggoK8FcIpDhw7po48+0i233KILL7xQM2fOLHpsyZIlcrlc+uqrr9S1a1dFRESod+/eWr9+fdExM2fOVP369fX555+rY8eOCg8P144dO2x4JaiubA02hw8f1j333KOff/5Z33//vWrUqKFLL720RLp/8MEHdd9992nt2rVq27atrrzyyhJv0gAYP/zwg0aPHq0777xTGzZs0JtvvqmZM2fqqaeeKnbcww8/rOHDh+u3337T1VdfrSuuuEIbN260qWrAc+PGjdM777xT9PmMGTN03XXXFTvG3Z8zDzzwgO68805t3LhRgwYNCkj9gNN8/PHHat++vdq1a6drrrlGM2bM0InbHd5///16/vnntXr1asXExOjiiy8uNsp55MgRPfvss3r77bf1xx9/KDY2NtAvA9WZFWBjxoyxhg4dWupje/bssSRZ69atsyzLshIT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\n"},"metadata":{}}]},{"cell_type":"code","source":["test_data = pd.read_excel('/content/gdrive/My Drive/test_dataset2.xlsx')\n","test_data = test_data.set_index('date')\n","test_data.index = pd.to_datetime(test_data.index)\n","aligned_data = test_data[test_data.index.isin(future_w_features.index)]\n","\n","mapes = []\n","for date in future_w_features.index:\n"," if date in aligned_data.index:\n"," y_pred = future_w_features.loc[date, 'pred']\n"," y_true = aligned_data.loc[date, 'meantemp']\n"," current_mape = mape(y_true, y_pred)\n"," mapes.append(current_mape)\n","\n","\n","# Calculate average MAPE\n","average_mape = sum(mapes) / len(mapes)\n","print(f\"Average MAPE: {average_mape}%\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"1CG-3XNHTQg3","executionInfo":{"status":"ok","timestamp":1713282050810,"user_tz":-330,"elapsed":675,"user":{"displayName":"Aastha Bharill","userId":"03847361273858925441"}},"outputId":"9ec12e70-6c0f-478f-b29b-494857165328"},"execution_count":25,"outputs":[{"output_type":"stream","name":"stdout","text":["Average MAPE: 55.93688584712289%\n"]}]}]}