diff --git a/weather dataset/SVM.ipynb b/weather dataset/SVM.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..51d7b83129ffca39168a9362419a1f6a832eb1ea --- /dev/null +++ b/weather dataset/SVM.ipynb @@ -0,0 +1,742 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "14347261-403d-4247-bb90-4615ba49cacf", + "metadata": {}, + "source": [ + "### *Import necessary libraries for data manipulation, preprocessing, modeling, and evaluation*\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9df35d0d-a20c-408a-85fe-b5cdd51aff11", + "metadata": {}, + "outputs": [], + "source": [ + "# Import necessary libraries\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.svm import SVC\n", + "from sklearn.metrics import (\n", + " accuracy_score,\n", + " classification_report, \n", + " confusion_matrix, \n", + " ConfusionMatrixDisplay,\n", + " roc_curve, \n", + " auc,\n", + " RocCurveDisplay\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ba058d57-6a81-4af5-b468-4cbd1675f1cb", + "metadata": {}, + "source": [ + "### *Loading the diabetes dataset and display basic information about the dataset*\n", + "#### *The dataset is assumed to be preprocessed and saved in CSV format*" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "2263feea-5686-45ce-b58a-a2df5e866767", + "metadata": {}, + "outputs": [], + "source": [ + "file_path = 'weather_final.csv' \n", + "data = pd.read_csv(file_path)\n", + "\n", + "# Separate features and target variable\n", + "X = data.drop(columns=['RainTomorrow'])\n", + "y = data['RainTomorrow']\n", + "\n", + "\n", + "imputer = SimpleImputer(strategy='mean')\n", + "X = imputer.fit_transform(X)\n", + "\n", + "\n", + "scaler = StandardScaler()\n", + "X = scaler.fit_transform(X)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "e569829b-57b6-4555-96e0-4762882b7c17", + "metadata": {}, + "source": [ + "### *Spliting the dataset into features (X) and target variable (y)*\n", + "#### *Performing train-test split with stratification and standardize the feature data*\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ed0dbd7c-b50e-41d9-8cae-f0e3c9dc265d", + "metadata": {}, + "outputs": [], + "source": [ + "# Split the data into training (75%) and testing (25%) sets\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)\n" + ] + }, + { + "cell_type": "markdown", + "id": "05213ff9-1e64-4f3c-81fe-3d52acad3211", + "metadata": {}, + "source": [ + "### *Defining the Support Vector Machine (SVM) Classifier and Setting Up the Hyperparameter Grid*\n", + "#### *Using GridSearchCV to Find the Best Combination of Hyperparameters*" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4455c410-4a70-42ee-90c5-9d99c1111b06", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<style>#sk-container-id-1 {\n", + " /* Definition of color scheme common for light and dark mode */\n", + " --sklearn-color-text: black;\n", + " --sklearn-color-line: gray;\n", + " /* Definition of color scheme for unfitted estimators */\n", + " --sklearn-color-unfitted-level-0: #fff5e6;\n", + " --sklearn-color-unfitted-level-1: #f6e4d2;\n", + " --sklearn-color-unfitted-level-2: #ffe0b3;\n", + " --sklearn-color-unfitted-level-3: chocolate;\n", + " /* Definition of color scheme for fitted estimators */\n", + " --sklearn-color-fitted-level-0: #f0f8ff;\n", + " --sklearn-color-fitted-level-1: #d4ebff;\n", + " --sklearn-color-fitted-level-2: #b3dbfd;\n", + " --sklearn-color-fitted-level-3: cornflowerblue;\n", + "\n", + " /* Specific color for light theme */\n", + " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", + " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n", + " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", + " --sklearn-color-icon: #696969;\n", + "\n", + " @media (prefers-color-scheme: dark) {\n", + " /* Redefinition of color scheme for dark theme */\n", + " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", + " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n", + " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", + " --sklearn-color-icon: #878787;\n", + " }\n", + "}\n", + "\n", + "#sk-container-id-1 {\n", + " color: var(--sklearn-color-text);\n", + "}\n", + "\n", + "#sk-container-id-1 pre {\n", + " padding: 0;\n", + "}\n", + "\n", + "#sk-container-id-1 input.sk-hidden--visually {\n", + " border: 0;\n", + " clip: rect(1px 1px 1px 1px);\n", + " clip: rect(1px, 1px, 1px, 1px);\n", + " height: 1px;\n", + " margin: -1px;\n", + " overflow: hidden;\n", + " padding: 0;\n", + " position: absolute;\n", + " width: 1px;\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-dashed-wrapped {\n", + " border: 1px dashed var(--sklearn-color-line);\n", + " margin: 0 0.4em 0.5em 0.4em;\n", + " box-sizing: border-box;\n", + " padding-bottom: 0.4em;\n", + " background-color: var(--sklearn-color-background);\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-container {\n", + " /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n", + " but bootstrap.min.css set `[hidden] { display: none !important; }`\n", + " so we also need the `!important` here to be able to override the\n", + " default hidden behavior on the sphinx rendered scikit-learn.org.\n", + " See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n", + " display: inline-block !important;\n", + " position: relative;\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-text-repr-fallback {\n", + " display: none;\n", + "}\n", + "\n", + "div.sk-parallel-item,\n", + "div.sk-serial,\n", + "div.sk-item {\n", + " /* draw centered vertical line to link estimators */\n", + " background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n", + " background-size: 2px 100%;\n", + " background-repeat: no-repeat;\n", + " background-position: center center;\n", + "}\n", + "\n", + "/* Parallel-specific style estimator block */\n", + "\n", + "#sk-container-id-1 div.sk-parallel-item::after {\n", + " content: \"\";\n", + " width: 100%;\n", + " border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n", + " flex-grow: 1;\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-parallel {\n", + " display: flex;\n", + " align-items: stretch;\n", + " justify-content: center;\n", + " background-color: var(--sklearn-color-background);\n", + " position: relative;\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-parallel-item {\n", + " display: flex;\n", + " flex-direction: column;\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n", + " align-self: flex-end;\n", + " width: 50%;\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n", + " align-self: flex-start;\n", + " width: 50%;\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n", + " width: 0;\n", + "}\n", + "\n", + "/* Serial-specific style estimator block */\n", + "\n", + "#sk-container-id-1 div.sk-serial {\n", + " display: flex;\n", + " flex-direction: column;\n", + " align-items: center;\n", + " background-color: var(--sklearn-color-background);\n", + " padding-right: 1em;\n", + " padding-left: 1em;\n", + "}\n", + "\n", + "\n", + "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n", + "clickable and can be expanded/collapsed.\n", + "- Pipeline and ColumnTransformer use this feature and define the default style\n", + "- Estimators will overwrite some part of the style using the `sk-estimator` class\n", + "*/\n", + "\n", + "/* Pipeline and ColumnTransformer style (default) */\n", + "\n", + "#sk-container-id-1 div.sk-toggleable {\n", + " /* Default theme specific background. It is overwritten whether we have a\n", + " specific estimator or a Pipeline/ColumnTransformer */\n", + " background-color: var(--sklearn-color-background);\n", + "}\n", + "\n", + "/* Toggleable label */\n", + "#sk-container-id-1 label.sk-toggleable__label {\n", + " cursor: pointer;\n", + " display: block;\n", + " width: 100%;\n", + " margin-bottom: 0;\n", + " padding: 0.5em;\n", + " box-sizing: border-box;\n", + " text-align: center;\n", + "}\n", + "\n", + "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n", + " /* Arrow on the left of the label */\n", + " content: \"â–¸\";\n", + " float: left;\n", + " margin-right: 0.25em;\n", + " color: var(--sklearn-color-icon);\n", + "}\n", + "\n", + "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n", + " color: var(--sklearn-color-text);\n", + "}\n", + "\n", + "/* Toggleable content - dropdown */\n", + "\n", + "#sk-container-id-1 div.sk-toggleable__content {\n", + " max-height: 0;\n", + " max-width: 0;\n", + " overflow: hidden;\n", + " text-align: left;\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-toggleable__content.fitted {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-toggleable__content pre {\n", + " margin: 0.2em;\n", + " border-radius: 0.25em;\n", + " color: var(--sklearn-color-text);\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-fitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n", + " /* Expand drop-down */\n", + " max-height: 200px;\n", + " max-width: 100%;\n", + " overflow: auto;\n", + "}\n", + "\n", + "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n", + " content: \"â–¾\";\n", + "}\n", + "\n", + "/* Pipeline/ColumnTransformer-specific style */\n", + "\n", + "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", + " color: var(--sklearn-color-text);\n", + " background-color: var(--sklearn-color-unfitted-level-2);\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", + " background-color: var(--sklearn-color-fitted-level-2);\n", + "}\n", + "\n", + "/* Estimator-specific style */\n", + "\n", + "/* Colorize estimator box */\n", + "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-2);\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-2);\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n", + "#sk-container-id-1 div.sk-label label {\n", + " /* The background is the default theme color */\n", + " color: var(--sklearn-color-text-on-default-background);\n", + "}\n", + "\n", + "/* On hover, darken the color of the background */\n", + "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n", + " color: var(--sklearn-color-text);\n", + " background-color: var(--sklearn-color-unfitted-level-2);\n", + "}\n", + "\n", + "/* Label box, darken color on hover, fitted */\n", + "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n", + " color: var(--sklearn-color-text);\n", + " background-color: var(--sklearn-color-fitted-level-2);\n", + "}\n", + "\n", + "/* Estimator label */\n", + "\n", + "#sk-container-id-1 div.sk-label label {\n", + " font-family: monospace;\n", + " font-weight: bold;\n", + " display: inline-block;\n", + " line-height: 1.2em;\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-label-container {\n", + " text-align: center;\n", + "}\n", + "\n", + "/* Estimator-specific */\n", + "#sk-container-id-1 div.sk-estimator {\n", + " font-family: monospace;\n", + " border: 1px dotted var(--sklearn-color-border-box);\n", + " border-radius: 0.25em;\n", + " box-sizing: border-box;\n", + " margin-bottom: 0.5em;\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-estimator.fitted {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-0);\n", + "}\n", + "\n", + "/* on hover */\n", + "#sk-container-id-1 div.sk-estimator:hover {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-2);\n", + "}\n", + "\n", + "#sk-container-id-1 div.sk-estimator.fitted:hover {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-2);\n", + "}\n", + "\n", + "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n", + "\n", + "/* Common style for \"i\" and \"?\" */\n", + "\n", + ".sk-estimator-doc-link,\n", + "a:link.sk-estimator-doc-link,\n", + "a:visited.sk-estimator-doc-link {\n", + " float: right;\n", + " font-size: smaller;\n", + " line-height: 1em;\n", + " font-family: monospace;\n", + " background-color: var(--sklearn-color-background);\n", + " border-radius: 1em;\n", + " height: 1em;\n", + " width: 1em;\n", + " text-decoration: none !important;\n", + " margin-left: 1ex;\n", + " /* unfitted */\n", + " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", + " color: var(--sklearn-color-unfitted-level-1);\n", + "}\n", + "\n", + ".sk-estimator-doc-link.fitted,\n", + "a:link.sk-estimator-doc-link.fitted,\n", + "a:visited.sk-estimator-doc-link.fitted {\n", + " /* fitted */\n", + " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", + " color: var(--sklearn-color-fitted-level-1);\n", + "}\n", + "\n", + "/* On hover */\n", + "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n", + ".sk-estimator-doc-link:hover,\n", + "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n", + ".sk-estimator-doc-link:hover {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-3);\n", + " color: var(--sklearn-color-background);\n", + " text-decoration: none;\n", + "}\n", + "\n", + "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n", + ".sk-estimator-doc-link.fitted:hover,\n", + "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n", + ".sk-estimator-doc-link.fitted:hover {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-3);\n", + " color: var(--sklearn-color-background);\n", + " text-decoration: none;\n", + "}\n", + "\n", + "/* Span, style for the box shown on hovering the info icon */\n", + ".sk-estimator-doc-link span {\n", + " display: none;\n", + " z-index: 9999;\n", + " position: relative;\n", + " font-weight: normal;\n", + " right: .2ex;\n", + " padding: .5ex;\n", + " margin: .5ex;\n", + " width: min-content;\n", + " min-width: 20ex;\n", + " max-width: 50ex;\n", + " color: var(--sklearn-color-text);\n", + " box-shadow: 2pt 2pt 4pt #999;\n", + " /* unfitted */\n", + " background: var(--sklearn-color-unfitted-level-0);\n", + " border: .5pt solid var(--sklearn-color-unfitted-level-3);\n", + "}\n", + "\n", + ".sk-estimator-doc-link.fitted span {\n", + " /* fitted */\n", + " background: var(--sklearn-color-fitted-level-0);\n", + " border: var(--sklearn-color-fitted-level-3);\n", + "}\n", + "\n", + ".sk-estimator-doc-link:hover span {\n", + " display: block;\n", + "}\n", + "\n", + "/* \"?\"-specific style due to the `<a>` HTML tag */\n", + "\n", + "#sk-container-id-1 a.estimator_doc_link {\n", + " float: right;\n", + " font-size: 1rem;\n", + " line-height: 1em;\n", + " font-family: monospace;\n", + " background-color: var(--sklearn-color-background);\n", + " border-radius: 1rem;\n", + " height: 1rem;\n", + " width: 1rem;\n", + " text-decoration: none;\n", + " /* unfitted */\n", + " color: var(--sklearn-color-unfitted-level-1);\n", + " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", + "}\n", + "\n", + "#sk-container-id-1 a.estimator_doc_link.fitted {\n", + " /* fitted */\n", + " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", + " color: var(--sklearn-color-fitted-level-1);\n", + "}\n", + "\n", + "/* On hover */\n", + "#sk-container-id-1 a.estimator_doc_link:hover {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-3);\n", + " color: var(--sklearn-color-background);\n", + " text-decoration: none;\n", + "}\n", + "\n", + "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-3);\n", + "}\n", + "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=5, estimator=SVC(probability=True, random_state=42), n_jobs=-1,\n", + " param_grid={'C': [0.1, 1, 10], 'gamma': ['scale', 'auto'],\n", + " 'kernel': ['linear', 'rbf']},\n", + " scoring='accuracy')</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 sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> GridSearchCV<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=5, estimator=SVC(probability=True, random_state=42), n_jobs=-1,\n", + " param_grid={'C': [0.1, 1, 10], 'gamma': ['scale', 'auto'],\n", + " 'kernel': ['linear', 'rbf']},\n", + " scoring='accuracy')</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">estimator: SVC</label><div class=\"sk-toggleable__content fitted\"><pre>SVC(probability=True, random_state=42)</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> SVC<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.svm.SVC.html\">?<span>Documentation for SVC</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>SVC(probability=True, random_state=42)</pre></div> </div></div></div></div></div></div></div></div></div>" + ], + "text/plain": [ + "GridSearchCV(cv=5, estimator=SVC(probability=True, random_state=42), n_jobs=-1,\n", + " param_grid={'C': [0.1, 1, 10], 'gamma': ['scale', 'auto'],\n", + " 'kernel': ['linear', 'rbf']},\n", + " scoring='accuracy')" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "# Define the SVM classifier\n", + "svm = SVC(random_state=42, probability=True)\n", + "\n", + "# Define the hyperparameter grid\n", + "param_grid = {\n", + " 'C': [0.1, 1, 10],\n", + " 'kernel': ['linear', 'rbf'],\n", + " 'gamma': ['scale', 'auto']\n", + "}\n", + "\n", + "# Grid Search for hyperparameter tuning\n", + "grid_search = GridSearchCV(svm, param_grid, cv=5, scoring='accuracy', n_jobs=-1)\n", + "grid_search.fit(X_train, y_train)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "dbfe5ef8-9841-4c17-8151-52e5edb124b5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SVC(C=10, probability=True, random_state=42)\n" + ] + } + ], + "source": [ + "# Get the best model\n", + "best_svm = grid_search.best_estimator_\n", + "print(best_svm)\n", + "# Make predictions using them\n", + "y_pred = best_svm.predict(X_test)\n", + "y_pred_proba = best_svm.predict_proba(X_test)[:, 1]\n" + ] + }, + { + "cell_type": "markdown", + "id": "b3f4506f-846c-4874-a7df-02e2d53b3fea", + "metadata": {}, + "source": [ + "### *Evaluating the best SVM model on the test set*\n", + "#### *Generating test accuracy, classification report.*" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b075e3dd-fcec-4500-9c2c-3530d634ef3e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test Accuracy: 0.7861034549067367\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " 0 0.77 0.80 0.79 7746\n", + " 1 0.80 0.77 0.78 7855\n", + "\n", + " accuracy 0.79 15601\n", + " macro avg 0.79 0.79 0.79 15601\n", + "weighted avg 0.79 0.79 0.79 15601\n", + "\n" + ] + } + ], + "source": [ + "print(\"Test Accuracy:\", accuracy_score(y_test, y_pred))\n", + "print(\"Classification Report:\")\n", + "print(classification_report(y_test, y_pred))\n" + ] + }, + { + "cell_type": "markdown", + "id": "42b07ed2-e3fd-4d53-80e3-b922a023f10c", + "metadata": {}, + "source": [ + "#### *Visualizing the confusion matrix using a heatmap*" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d39455cd-8cf1-4412-aa7a-0c41b34a0373", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAJOCAYAAABFgJqNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZcElEQVR4nO3de3zO9f/H8ed1jW12dIhtmOPCJlpULOVQsooiFDnkXGnKIYcUmimKHFNUylQkJYp9peUYW0hWI5ZT5rTxddicdrBdvz98d/1cl0PbZZetj8e92+d2s8/nfb0/r8++X7z29L7el8lisVgEAAAAwMpc1AUAAAAAxQ1NMgAAAGCHJhkAAACwQ5MMAAAA2KFJBgAAAOzQJAMAAAB2aJIBAAAAOzTJAAAAgB2aZAAAAMAOTTIAQ9m9e7datWolX19fmUwmLV26tFDn//vvv2UymRQdHV2o8/6bNW/eXM2bNy/qMgCgUNEkAyh0e/fu1fPPP68aNWrI3d1dPj4+atKkiaZPn64LFy449d49evRQYmKi3nrrLX3++ee6++67nXq/m6lnz54ymUzy8fG56vdx9+7dMplMMplMevfddws8/5EjRxQZGamEhIRCqBYA/t1KFHUBAIwlJiZGTz31lNzc3PTss8/qjjvuUFZWljZs2KBhw4Zpx44d+uijj5xy7wsXLig+Pl6vv/66BgwY4JR7VK1aVRcuXFDJkiWdMv8/KVGihM6fP69ly5bp6aeftrk2f/58ubu7KyMjw6G5jxw5orFjx6patWoKDQ3N9+t+/PFHh+4HAMUZTTKAQrN//3517txZVatW1erVqxUQEGC9FhERoT179igmJsZp9z9+/LgkqXTp0k67h8lkkru7u9Pm/ydubm5q0qSJvvzyyyua5AULFqh169ZavHjxTanl/Pnz8vDwkKur6025HwDcTCy3AFBoJk6cqLNnz+qTTz6xaZDzBAUFaeDAgdavL168qHHjxqlmzZpyc3NTtWrV9NprrykzM9PmddWqVVObNm20YcMG3XvvvXJ3d1eNGjX02WefWcdERkaqatWqkqRhw4bJZDKpWrVqki4tU8j79eUiIyNlMplszsXGxur+++9X6dKl5eXlpdq1a+u1116zXr/WmuTVq1frgQcekKenp0qXLq22bdtq586dV73fnj171LNnT5UuXVq+vr7q1auXzp8/f+1vrJ0uXbpoxYoVOn36tPXcli1btHv3bnXp0uWK8SdPntTQoUNVr149eXl5ycfHR48++qh+//1365i1a9fqnnvukST16tXLumwj7zmbN2+uO+64Q1u3blXTpk3l4eFh/b7Yr0nu0aOH3N3dr3j+8PBwlSlTRkeOHMn3swJAUaFJBlBoli1bpho1aui+++7L1/i+fftqzJgxatCggaZOnapmzZppwoQJ6ty58xVj9+zZo44dO+rhhx/W5MmTVaZMGfXs2VM7duyQJLVv315Tp06VJD3zzDP6/PPPNW3atALVv2PHDrVp00aZmZmKiorS5MmT9cQTT2jjxo3Xfd1PP/2k8PBwHTt2TJGRkRoyZIji4uLUpEkT/f3331eMf/rpp3XmzBlNmDBBTz/9tKKjozV27Nh819m+fXuZTCZ9++231nMLFixQnTp11KBBgyvG79u3T0uXLlWbNm00ZcoUDRs2TImJiWrWrJm1YQ0ODlZUVJQk6bnnntPnn3+uzz//XE2bNrXOc+LECT366KMKDQ3VtGnT1KJFi6vWN336dJUvX149evRQTk6OJOnDDz/Ujz/+qPfee08VK1bM97MCQJGxAEAhSEtLs0iytG3bNl/jExISLJIsffv2tTk/dOhQiyTL6tWrreeqVq1qkWRZv3699dyxY8csbm5ulldeecV6bv/+/RZJlkmTJtnM2aNHD0vVqlWvqOGNN96wXP7H4NSpUy2SLMePH79m3Xn3mDt3rvVcaGiopUKFCpYTJ05Yz/3+++8Ws9lsefbZZ6+4X+/evW3mfPLJJy3lypW75j0vfw5PT0+LxWKxdOzY0fLQQw9ZLBaLJScnx+Lv728ZO3bsVb8HGRkZlpycnCuew83NzRIVFWU9t2XLliueLU+zZs0skiyzZ8++6rVmzZrZnFu5cqVFkuXNN9+07Nu3z+Ll5WVp167dPz4jABQXJMkACkV6erokydvbO1/j//Of/0iShgwZYnP+lVdekaQr1i6HhITogQcesH5dvnx51a5dW/v27XO4Znt5a5m/++475ebm5us1R48eVUJCgnr27KmyZctaz9evX18PP/yw9Tkv98ILL9h8/cADD+jEiRPW72F+dOnSRWvXrlVKSopWr16tlJSUqy61kC6tYzabL/1xn5OToxMnTliXkvz222/5vqebm5t69eqVr7GtWrXS888/r6ioKLVv317u7u768MMP830vAChqNMkACoWPj48k6cyZM/kaf+DAAZnNZgUFBdmc9/f3V+nSpXXgwAGb81WqVLlijjJlyujUqVMOVnylTp06qUmTJurbt6/8/PzUuXNnLVq06LoNc16dtWvXvuJacHCw/vvf/+rcuXM25+2fpUyZMpJUoGd57LHH5O3tra+++krz58/XPffcc8X3Mk9ubq6mTp2q22+/XW5ubrrttttUvnx5/fHHH0pLS8v3PStVqlSgN+m9++67Klu2rBISEjRjxgxVqFAh368FgKJGkwygUPj4+KhixYravn17gV5n/8a5a3FxcbnqeYvF4vA98tbL5ilVqpTWr1+vn376Sd27d9cff/yhTp066eGHH75i7I24kWfJ4+bmpvbt22vevHlasmTJNVNkSRo/fryGDBmipk2b6osvvtDKlSsVGxurunXr5jsxly59fwpi27ZtOnbsmCQpMTGxQK8FgKJGkwyg0LRp00Z79+5VfHz8P46tWrWqcnNztXv3bpvzqampOn36tHWnisJQpkwZm50g8tin1ZJkNpv10EMPacqUKfrzzz/11ltvafXq1VqzZs1V586rMykp6Ypru3bt0m233SZPT88be4Br6NKli7Zt26YzZ85c9c2Oeb755hu1aNFCn3zyiTp37qxWrVqpZcuWV3xP8vsDS36cO3dOvXr1UkhIiJ577jlNnDhRW7ZsKbT5AcDZaJIBFJrhw4fL09NTffv2VWpq6hXX9+7dq+nTp0u6tFxA0hU7UEyZMkWS1Lp160Krq2bNmkpLS9Mff/xhPXf06FEtWbLEZtzJkyeveG3eh2rYb0uXJyAgQKGhoZo3b55N07l9+3b9+OOP1ud0hhYtWmjcuHGaOXOm/P39rznOxcXlipT666+/1uHDh23O5TXzV/uBoqBGjBih5ORkzZs3T1OmTFG1atXUo0ePa34fAaC44cNEABSamjVrasGCBerUqZOCg4NtPnEvLi5OX3/9tXr27ClJuvPOO9WjRw999NFHOn36tJo1a6bNmzdr3rx5ateu3TW3F3NE586dNWLECD355JN6+eWXdf78ec2aNUu1atWyeeNaVFSU1q9fr9atW6tq1ao6duyYPvjgA1WuXFn333//NeefNGmSHn30UYWFhalPnz66cOGC3nvvPfn6+ioyMrLQnsOe2WzWqFGj/nFcmzZt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kiQNHDhQb7/9tpYuXapdu3bpxRdfvO4ex9WqVVOPHj3Uu3dvLV261DrnokWLJElVq1aVyWTS8uXLdfz4cZ09e1be3t4aOnSoBg8erHnz5mnv3r367bff9N5771nfDPfCCy9o9+7dGjZsmJKSkrRgwQJFR0cX6Hlvv/12JScna+HChdq7d69mzJhx1Tchuru7q0ePHvr999/1888/6+WXX9bTTz8tf39/SdLYsWM1YcIEzZgxQ3/99ZcSExM1d+5cTZkypUD1AICR0CQDMAwPDw+tX79eVapUUfv27RUcHKw+ffooIyPDmiy/8sor6t69u3r06KGwsDB5e3vrySefvO68s2bNUseOHfXiiy+qTp066tevn86dOydJqlSpksaOHatXX31Vfn5+GjBggCRp3LhxGj16tCZMmKDg4GA98sgjiomJUfXq1SVdWie8ePFiLV26VHfeeadmz56t8ePHF+h5n3jiCQ0ePFgDBgxQaGio4uLiNHr06CvGBQUFqX379nrsscfUqlUr1a9f32aLt759+2rOnDmaO3eu6tWrp2bNmik6OtpaKwDcikyWa71bBQAAALhFkSQDAAAAdmiSAQAAADs0yQAAAIAdmmQAAADADk0yAAAAYIcmGQAAALBDkwwAAADYoUkGAAAA7NAkAwAAAHZokgEAAAA7NMkAAACAHZpkAAAAwM7/ARNbbXYyKTqSAAAAAElFTkSuQmCC", + "text/plain": [ + "<Figure size 800x600 with 2 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "fig, ax = plt.subplots(figsize=(8, 6))\n", + "\n", + "cm_display = ConfusionMatrixDisplay(\n", + " confusion_matrix=confusion_matrix(y_test, y_pred),\n", + " display_labels=['No Rain', 'Rain']\n", + ")\n", + "\n", + "cm_display.plot(ax=ax, cmap='Blues')\n", + "plt.title('Confusion Matrix')\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a1021084-4ea8-4909-9681-edf97196e182", + "metadata": {}, + "outputs": [], + "source": [ + "#### *Ploting ROC Curve*" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8c43a400-7471-4083-8cc0-016c1cabcecf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AUC Score: 0.861\n" + ] + }, + { + "data": { + "text/plain": [ + "<Figure size 800x600 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc4AAAHWCAYAAAD+Y2lGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAABY80lEQVR4nO3deXxM5/4H8M/MJDPZN5E9xBY7sTfWIhW1lOqi1aK66IL2SrVoLUUrbS3lonVrrdLabrV+pVxS1E5jJ6KRWLMJMtkzyczz+yMcRtaJJCeZ+bxfr3ndc545y3fOVR9nex6FEEKAiIiIykQpdwFEREQ1CYOTiIjIBAxOIiIiEzA4iYiITMDgJCIiMgGDk4iIyAQMTiIiIhMwOImIiEzA4CQiIjIBg5OIiMgEDE6ix7R69WooFArpY2VlBV9fX7z22mu4efNmkesIIfDjjz+ie/fucHFxgZ2dHVq2bImZM2ciMzOz2H1t2bIFTz/9NNzd3aFWq+Hj44MXX3wRf/75Z5lqzcnJwTfffINOnTrB2dkZNjY2CAwMxNixY3Hp0qVy/X4iS6NgX7VEj2f16tUYNWoUZs6ciXr16iEnJwdHjhzB6tWrERAQgHPnzsHGxkZaXq/XY9iwYdi4cSO6deuGIUOGwM7ODvv378dPP/2EZs2aYffu3fD09JTWEULg9ddfx+rVq9GmTRs8//zz8PLyQkJCArZs2YLIyEgcPHgQnTt3LrbOlJQU9O3bF5GRkRgwYABCQkLg4OCA6OhorF+/HomJidDpdJV6rIjMgiCix7Jq1SoBQBw/ftyofeLEiQKA2LBhg1H77NmzBQAxYcKEQtvaunWrUCqVom/fvkbtc+bMEQDEv/71L2EwGAqtt2bNGnH06NES6+zfv79QKpVi8+bNhb7LyckRH374YYnrl1VeXp7Izc2tkG0RVUcMTqLHVFxw/v777wKAmD17ttSWlZUlXF1dRWBgoMjLyytye6NGjRIAxOHDh6V13NzcRJMmTUR+fn65ajxy5IgAIN56660yLd+jRw/Ro0ePQu0jR44UdevWlebj4uIEADFnzhzxzTffiPr16wulUimOHDkiVCqV+Oyzzwpt4+LFiwKAWLRokdR29+5d8cEHHwg/Pz+hVqtFgwYNxJdffin0er3Jv5WosvEeJ1EluXLlCgDA1dVVajtw4ADu3r2LYcOGwcrKqsj1RowYAQD4/fffpXXu3LmDYcOGQaVSlauWrVu3AgCGDx9ervVLs2rVKixatAijR4/GvHnz4O3tjR49emDjxo2Flt2wYQNUKhVeeOEFAEBWVhZ69OiBtWvXYsSIEfj3v/+NLl26YPLkyQgLC6uUeokeR9H/5RKRybRaLVJSUpCTk4OjR49ixowZ0Gg0GDBggLTMhQsXAACtW7cudjv3v4uKijL635YtW5a7torYRklu3LiBmJgY1K5dW2obOnQo3n77bZw7dw4tWrSQ2jds2IAePXpI93Dnz5+Py5cv4+TJk2jUqBEA4O2334aPjw/mzJmDDz/8EP7+/pVSN1F58IyTqIKEhISgdu3a8Pf3x/PPPw97e3ts3boVfn5+0jLp6ekAAEdHx2K3c/+7tLQ0o/8taZ3SVMQ2SvLcc88ZhSYADBkyBFZWVtiwYYPUdu7cOVy4cAFDhw6V2jZt2oRu3brB1dUVKSkp0ickJAR6vR5//fVXpdRMVF484ySqIEuWLEFgYCC0Wi1WrlyJv/76CxqNxmiZ+8F1P0CL8mi4Ojk5lbpOaR7ehouLS7m3U5x69eoVanN3d0fv3r2xceNGzJo1C0DB2aaVlRWGDBkiLffPP//gzJkzhYL3vuTk5Aqvl+hxMDiJKkjHjh3Rvn17AMDgwYPRtWtXDBs2DNHR0XBwcAAANG3aFABw5swZDB48uMjtnDlzBgDQrFkzAECTJk0AAGfPni12ndI8vI1u3bqVurxCoYAo4k01vV5f5PK2trZFtr/00ksYNWoUTp06haCgIGzcuBG9e/eGu7u7tIzBYMBTTz2Fjz/+uMhtBAYGllovUVXipVqiSqBSqRAeHo74+HgsXrxYau/atStcXFzw008/FRtCa9asAQDp3mjXrl3h6uqKn3/+udh1SjNw4EAAwNq1a8u0vKurK1JTUwu1X7161aT9Dh48GGq1Ghs2bMCpU6dw6dIlvPTSS0bLNGjQABkZGQgJCSnyU6dOHZP2SVTZGJxEleTJJ59Ex44dsWDBAuTk5AAA7OzsMGHCBERHR+PTTz8ttM62bduwevVqhIaG4oknnpDWmThxIqKiojBx4sQizwTXrl2LY8eOFVtLcHAw+vbti+XLl+PXX38t9L1Op8OECROk+QYNGuDixYu4deuW1Hb69GkcPHiwzL8fAFxcXBAaGoqNGzdi/fr1UKvVhc6aX3zxRRw+fBg7d+4stH5qairy8/NN2idRpZP7fRiimq649ziFEGLTpk0CgPjuu++ktvz8fPHcc88JAKJ79+5i4cKF4vvvvxcjRowQSqVSNG/eXCQmJhptR6/Xi+HDhwsAom3btmL27Nli5cqVYvbs2aJjx44CgDh06FCJdSYnJ4ugoCChUCjEM888IxYuXCiWL18uJk6cKOrWrSvUarW07IULF4RSqRRt2rQRixcvFtOmTRMeHh6iZcuWxb7HWZy1a9cKAMLR0VEMHDiw0PeZmZmibdu2wsrKSrz55pviu+++E3PnzhUjR44U9vb24tatWyX+LqKqxuAkekwlBaderxcNGjQQDRo0MOq8QK/Xi1WrVokuXboIJycnYWNjI5o3by5mzJghMjIyit3X5s2bRZ8+fYSbm5uwsrIS3t7eYujQoWLv3r1lqjUrK0vMnTtXdOjQQTg4OAi1Wi0aNWokxo0bJ2JiYoyWXbt2rahfv75Qq9UiKChI7Ny5s8QOEIqTlpYmbG1tBQCxdu3aIpdJT08XkydPFg0bNhRqtVq4u7uLzp07i7lz5wqdTlem30ZUVdhXLRERkQl4j5OIiMgEDE4iIiITMDiJiIhMwOAkIiIyAYOTiIjIBAxOIiIiE1hcX7UGgwHx8fFwdHSEQqGQuxwiIqpCQgikp6fDx8cHSmU5zx3lfIl03759YsCAAcLb21sAEFu2bCl1nT179og2bdpIo8SvWrXKpH1ev35dAOCHH3744ceCP9evXy9fcAkhZD3jzMzMROvWrfH6668bDTNUnLi4OPTv3x/vvPMO1q1bh4iICLz55pvw9vZGaGhomfZ5f6im69evS0MtERGRZUhLS4O/v/9jjU1bbXoOUigU2LJlS4nDJk2cOBHbtm3DuXPnpLaXXnoJqamp2LFjR5n2k5aWBmdnZ2i1WgYnEZGFqYgMqFH3OA8fPoyQkBCjttDQUPzrX/8qdp3c3Fzk5uZK82lpaZVVHhERVREhBK7czkJadh5y8w04ce0uErU5WHf0Kvxc7ZCbp4dOL6DL18NeY4XDk3tX2L5rVHAmJibC09PTqM3T0xNpaWnIzs4ucjDd8PBwzJgxo6pKJCIiE+gNApm6fCSk5kBvEDAIgQRtDrTZecjJ0+NCQhpc7ayRk2fA31fuIC0nHynpuUjPLX64ubiUzEL7qEg1KjjLY/LkyQgLC5Pm71/fJiKiypGnNyA+NRvX72TjXLwWBiHwx9lE3LibhXy9gK1ahTy9AXez8ipkf/Xc7WGnVkFjpUS3RrVhp1YhuEEtWKuUUFspoVZV7JuXNSo4vby8kJSUZNSWlJQEJyenIs82AUCj0UCj0VRFeUREFkUIgdx8A05eS8XBmBRcTEzH7qikUtcr7mzRXq2Co401VEoFrFQKNPFyhI21CvGp2WhX1w0aKyXScvJQ180OzXyc0crPGTbWqor+WaWqUcEZHByM7du3G7Xt2rULwcHBMlVERGTeErTZiEnOQOTVu0hIzcHByylQKIDrd7JhpVQgv4TLoO4OamisVLBTq9CloTu02XkIrl8LTb2dYKtWwlpV8HGzV0OtUkKprBnv1ssanBkZGYiJiZHm4+LicOrUKbi5uaFOnTqYPHkybt68iTVr1gAA3nnnHSxevBgff/wxXn/9dfz555/YuHEjtm3bJtdPICIyK9GJ6dh5PhF/XbqFMze00OkNxS77aGg28XLEE/VroW1dV/Rt7gW1lXl2TidrcP7999/o2bOnNH//XuTIkSOxevVqJCQk4Nq1a9L39erVw7Zt2zB+/HgsXLgQfn5+WL58eZnf4SQislQGg8CV25k4H5+GLF0+ErQ5yMzNR1RCOqIS0lDbUYOLielFrlvLXo167vZQKIDQ5l6o5aBG3Vr2cLNTw9VeDQeNFVQ15GyxIlSb9zirCt/jJCJzpMs3IDVLh5w8A25l5CA3z4A5/4vGP0kZcLNX49qdLJO218LXCa39XNC/pTc6N3SvpKqrnsW9x0lEREBOnh5JaTk4fuUujsTexoF/UpCYllPs8hmPPIxjr1ahd1NPeDppYKu2gt5ggLezLZp6O8HL2Qa+LkU/bEkFGJxERDIyGATScvKgyzcgN9+AK7czcTcr794L/AbcztAhQZuNY3F3cPlWZqnbs7VWQaVUICM3H819nBCfmo2P+zZB2zquqFvLTpanUM0Ng5OIqILpDQI37mbhQnwaYlMykZadhzM3tLh6OxO1nWxw+noqnGyskJNvgC6/+IdvysLTSYPhT9TFwNY+qONmx1GfqgCDk4jIBPl6A+JTc3AuXgttdsGZ4c7zSbhyOxMJ2hxYqxTI0xf/6Ei8tuCSalqO8eVThQLQWCmhsVJBm52H1n7O8HSygdqq4JWNFr7O8HDUoKm3E2rZFzyUQ/JgcBIRFeFWei7OxWuRrdPj52PXcDAmBUpFye8tAigUmr2aeCDfIODuoEYtezXq1LJHHTc72KlV8HKygY21Cs621mb76oY5YnASkcXJydMjIzcfyWm5uH43Cwmp2Th4+TZSs3RQWymRqM0p8n6i4ZGXEOrXtkdTLydorJXIzTfgycDaaFvXFa52atipVbyfaKYYnERkNgwGgYS0HJy4ehdZunzczcpDUloODsXcxj/J6ajloMGt9NzSN/QQb2cbBHo6wiAEXuscgGY+TqjtoIFVBfd/SjUHg5OIapScPD2u3s7CnuhknLupRXJaLhLTcsr0nmJxoemgscKAVt7wcraBu4Pm3keN9gFuFV0+mQEGJxFVK9rsPMSlZCI9Jw9RCWk4GnsH5+K18HC0wa303BLfV3yYWqXEU809UcteDS9nGwgBNPNxQkAtezjbWsPF1rrG9I1K1QuDk4iqnBACcSmZuJmajTM3tLiUlI48vQHbzyYWu05SmvHZoq21CvYaK/RqUhuBno6o42aHBh4O8HWx5b1FqlQMTiKqNBm5+Tgaexu7LiRBpVTgSOxtpOXkl/k+Y9s6LkjPyUen+m5o7uOMgFr2cHdQo6GHA99XJNkwOImo3NJz8nAnU4f41BxcvZ2JS0kZsLZS4L+RN5GSUbZwrOduD6UCaOLlhOAGtdAjsDb83ewquXKi8mNwElGZ5OkN+PNiMlYdjIOttQp7om9BrVKWOOzUffVrF7y72LlBLeQbBFr7uaBNHRfYqflXENU8/FNLREWKT83Gocu3EXn1Ln4/HY/0RzoKByCFppVSAVu1Ck421vB3s0XHADcolQoMaOWDhh4OVV06UaVicBIRgIIBjGdvj0JSWk6x4zICgIejBm3quKB/Kx80qG2P5j7OVVglkfwYnEQWSJuVh6jEglc9LiWnY9uZhGKXberthO6N3NHa3wWhzb0sasBioqIwOInMWG6+HpcSM3AhQYtDl2/jYMztUh/aCWnqiQmhgfB2soWznXUVVUpUczA4icxEvt6AY1fuYN3Ra4hJykB0UvGXW++zVing5WyDQa198Vw7P9Rzt6+CSolqNgYnUQ10OyMX/7uQhMird3H8yh1cvV1yd3NqlRL13O0xqI0Pmnk7oYWvM9wdNFVULZF5YXAS1QBCCJy5ocXKg3H47VR8ict2rOeGxp6OaB/gimbeTuwsgKiCMTiJqrGLiWn48fBV/HTsGkQRw0D6utiiqbcjWvq6oFN9N3QIcOPDO0SVjMFJVI3czdTht1M38U9yBk5cS0VUQlqhZTrWc8NHoY3Rvq4rzySJZMDgJJJRek4efj15E0fi7mD3hSTk5hfdC0/7uq6YMag535kkqgYYnERVTJuVhz/OJWDSL2eLXaZNHRcMDvJFhwA3NPNxqsLqiKg0DE6iKnD2hhZf77yI/f+kFPm9h6MG7z3ZAN0Da6OOmx2sVMoqrpCIyorBSVTB8vUGXEhIQ+TVu4iISsaBmKLD8on6bnj3yYbo3sid9yqJahAGJ1EFycnTI2zjqRIHY+7WyB1jejbEE/VrVWFlRFSRGJxEj0mbnYfWM/5X5Hdt67igZ2MPhDTzRFNv3qskMgcMTqJy2vT3dXz5x0XcztQZtfdv6Y05L7TiWJNEZor/ZROZQAiBDcevF/lEbNeG7lj5WgeorfhgD5E5Y3ASlUFOnh5L9sRg0Z8xRu0qpQLvPdkAY3o2hI21SqbqiKgqMTiJiiGEwORfzuLvq3cRk5xh9F2HAFdMG9AcLf3YIQGRpWFwEhXhzI1UPLP4YJHfLXwpCIOCfKu4IiKqLhicRA8RQmDkquP469Ito/ZvhrbG0y28eTmWiBicRACQlpOHOTui8eORq0bt0wY0w+td68lUFRFVRwxOslg5eXqsO3oNc3ZeRE6ecefqzrbW+HtKCKzZ9R0RPYLBSRYpNUuHoJm7CrWrrZRY+mpb9GriKUNVRFQTMDjJ4mw5eQPjN5yW5r2dbfBCOz+M7dWI72ASUakYnGRRxvx0AtvOJEjz7/dqiLA+jWWsiIhqGgYnWQRtVh5az3zQn6y3sw1+eusJ1HO3l7EqIqqJGJxk9jb+fR0fbz4jzSsUwKFJvTiUFxGVC4OTzJbeINDgk+1GbWN7NsSEUF6aJaLyY3CSWdp36RZeX33cuO2jJ1G3Fi/NEtHjYXCS2fl2bwy+3hEtzbfyc8av73WBUslLs0T0+BicZDYMBoGRq45h/z8pAAClAtj2fjcOIE1EFYrBSWZBm5WHdp/vQr5BSG2HJvWGl7ONjFURkTlicFKNdzsjF+0+323UdmLqU3CzV8tUERGZMwYn1WhJaTnoNDtCmu/ZuDZWvtaBr5oQUaVhcFKNteJAHGb9fkGaXzKsLfq38paxIiKyBAxOqnHy9QZM2HQav56Kl9q+eLYFQ5OIqgSDk2qUlIxctH/kfuamd4LRIcBNpoqIyNIwOKnGWH/sGib9claa79m4NlaN6ihjRURkiRicVO1tPR2P938+adT2bBtffDM0SJ6CiMiiMTip2hJCYOpv57D2yDWj9q1ju6CVn4s8RRGRxWNwUrWUkZuP4NkRSM/Nl9q+eq4lnm/nDxW7ziMiGTE4qdrRGwSe/+6QFJpONlY4Na0P+5olomqBwUnVSk6eHgMXHcA/yRkAgNHd6+OTfk1lroqI6AEGJ1Ub/428gQ83nZbm33uyAT7u20TGioiIClPKXQARAKw7etUoNFv4OmFCHw44TUTVD884SVa5+Xq8vvo4Dsbcltp2h3VHQw9HGasiIioeg5Nksyc6GaNWHTdqO/NZHzjZWMtUERFR6RicVOXSc/Iw7bfz2HLyptQ2pX9TjOpSj6+aEFG1x+CkKrXm8BVM++28UduKke3Ru6mnTBUREZmGwUlVpu2sXbiTqZPm29d1xfKR7eFixwGniajmkP2p2iVLliAgIAA2Njbo1KkTjh07VuLyCxYsQOPGjWFrawt/f3+MHz8eOTk5VVQtlUduvh4Bk7YZhebeCU9i87udGZpEVOPIGpwbNmxAWFgYpk+fjhMnTqB169YIDQ1FcnJykcv/9NNPmDRpEqZPn46oqCisWLECGzZswCeffFLFlVNZ3bibhcZTdkjzTzXzxJUv+yPA3V7GqoiIyk/W4Jw/fz7eeustjBo1Cs2aNcPSpUthZ2eHlStXFrn8oUOH0KVLFwwbNgwBAQHo06cPXn755VLPUkkee6KT0fWrPdL8+70bYdmI9jJWRET0+GQLTp1Oh8jISISEhDwoRqlESEgIDh8+XOQ6nTt3RmRkpBSUsbGx2L59O/r161fsfnJzc5GWlmb0ocoXnZhu9KrJuF4NEfZUoIwVERFVDNkeDkpJSYFer4enp/HTlJ6enrh48WKR6wwbNgwpKSno2rUrhBDIz8/HO++8U+Kl2vDwcMyYMaNCa6eSLd8fi8+3RUnza9/ohK6N3GWsiIio4sj+cJAp9u7di9mzZ+Pbb7/FiRMn8Msvv2Dbtm2YNWtWsetMnjwZWq1W+ly/fr0KK7YsQgj0mruXoUlEZk22M053d3eoVCokJSUZtSclJcHLy6vIdaZOnYrhw4fjzTffBAC0bNkSmZmZGD16ND799FMolYX/HaDRaKDRaCr+B1AhX+2IRmxKpjS/a3x3NPJk13lEZF5kO+NUq9Vo164dIiIipDaDwYCIiAgEBwcXuU5WVlahcFSpVAAKznZIPnN2XsTSfZcBAE28HBEX3o+hSURmSdYOEMLCwjBy5Ei0b98eHTt2xIIFC5CZmYlRo0YBAEaMGAFfX1+Eh4cDAAYOHIj58+ejTZs26NSpE2JiYjB16lQMHDhQClCqWtqsPLSe+T9pvm4tO2x7vxsUCnadR0TmSdbgHDp0KG7duoVp06YhMTERQUFB2LFjh/TA0LVr14zOMKdMmQKFQoEpU6bg5s2bqF27NgYOHIgvvvhCrp9g0e5m6tBm1i6jtl/f68L+ZonIrCmEhV3jTEtLg7OzM7RaLZycnOQup8bK1xvwRPifSMnIBQD4ONvg0OTeMldFRFSyisgA9lVLJtNm56H1jAeXZ78c0hIvdawjY0VERFWnRr2OQvLT5RsQ9NA9zX4tvRiaRGRRGJxUZgaDwBs/HMf9i/vDn6iLb19pJ29RRERVjMFJZaI3CEz65Qz2/5MCAHiivhtmDmouc1VERFWP9zipVJm5+Rj94984GHMbSgUw78XWeLaNn9xlERHJgsFJJcrXG9B8+k5pfu4LDE0ismy8VEslen/9SWk67KlADGnL0CQiy8YzTirWq8uP4kBMwT3N1v4ueL93I5krIiKSH884qUjv/3xSCk0A2DD6CRmrISKqPnjGSYXM/180tp6OBwBorJSImtkXSnajR0QEgMFJj/ho02lsirwhzUdOfYqhSUT0EAYnSXZdSDIKzQszQ2Gn5h8RIqKH8R4nAQCydXq8teZvaf7Yp70ZmkREReDfjITbGbno+tUeaT5ySghqOWhkrIiIqPpicFq4U9dTMXjJQWn++XZ+DE0iohIwOC1YUlqOUWjOHNQcI4ID5CuIiKgGYHBaKG12HjrNjpDmvx/eDn2ae8lYERFRzcDgtFDvrYuUple91gE9m3jIWA0RUc3Bp2ot0J6LyTgYcxsAMLp7fYYmEZEJGJwWRgiBUauPAwACatnhk35NZa6IiKhmYXBamO/2XZam//1yGxkrISKqmXiP04I0nvIHcvMNAIC2dVzQys9F3oKIiGognnFaiDHrTkihqVQAP73F0U6IiMqDZ5wWICktB9vOJkjzUbP6QmOlkrEiIqKai2ecZk5vEEbva56fEcrQJCJ6DAxOMyaEQOCUP6T5d59sAHsNLzIQET0OBqcZe2/dCegNQpqf2LeJjNUQEZkHnn6YqUFLDuL09VQAgJ+rLf76qKe8BRERmQkGpxla/Oc/Umj2auKBla91kLcgIiIzwku1Zmju/y5J0wxNIqKKxeA0M3l6gzS9O6yHjJUQEZknBqeZ+eHQFWm6nru9fIUQEZkpBqcZydbp8fm2KABAa38XqJQKmSsiIjI/DE4z8tx3h6TpLwa3kLESIiLzxeA0Ez8cuoILCWkAgJ6Na6OFr7PMFRERmScGp5mYvvW8NP3dq+1krISIyLwxOM3AuZtaaXrhS0GwsWZftERElYXBWcMJITBg0QEAQBMvRwwK8pW5IiIi88bgrOE2HL8uTc/iA0FERJWOwVnDTfrlLACglr0aHQLcZK6GiMj8MThrsMird6Xpb4YGyVcIEZEFYXDWYAt2F/RJW8fNDt0Da8tcDRGRZWBw1lAJ2mzs/ycFAODvZitzNUREloPBWQNl6fIx5NsHvQRNH9hcxmqIiCwLg7MGevE/h5GgzQEAzBzUHIGejjJXRERkOR4rOHNyciqqDiqjmOQMnLtZ0LVeY09HDH+irswVERFZFpOD02AwYNasWfD19YWDgwNiY2MBAFOnTsWKFSsqvEAyFjJ/nzT9xwfdoFBwBBQioqpkcnB+/vnnWL16Nb7++muo1WqpvUWLFli+fHmFFkfGfjlxQ5pe9HIbKDlsGBFRlTM5ONesWYPvv/8er7zyClSqB32itm7dGhcvXqzQ4uiBPL0BYRtPAwB8nG0wsLWPzBUREVkmk4Pz5s2baNiwYaF2g8GAvLy8CimKCnt1+VFpenK/pjJWQkRk2UwOzmbNmmH//v2F2jdv3ow2bdpUSFFkzGAQOBp3BwCgVil5tklEJCMrU1eYNm0aRo4ciZs3b8JgMOCXX35BdHQ01qxZg99//70yarR44X9ESdMRH/aQsRIiIjL5jHPQoEH4v//7P+zevRv29vaYNm0aoqKi8H//93946qmnKqNGi5anN2DZ/jgAQGt/F/i72clcERGRZTP5jBMAunXrhl27dlV0LVSENYevStMbRj8hYyVERASU44yzfv36uH37dqH21NRU1K9fv0KKogdm/X5BmraxVpWwJBERVQWTg/PKlSvQ6/WF2nNzc3Hz5s0KKYoKREQlSdMzB7E/WiKi6qDMl2q3bt0qTe/cuRPOzs7SvF6vR0REBAICAiq0OEv39Y5oaZpd6xERVQ9lDs7BgwcDABQKBUaOHGn0nbW1NQICAjBv3rwKLc6S7b6QhOikdADA98PbsWs9IqJqoszBaTAYAAD16tXD8ePH4e7uXmlFEfDR5oJegmo7atCnuZfM1RAR0X0mP1UbFxdXGXXQQ1IycnE3q6AXpnkvtJa5GiIieli5XkfJzMzEvn37cO3aNeh0OqPv3n///QopzJLN33VJmu7akGf2RETVicnBefLkSfTr1w9ZWVnIzMyEm5sbUlJSYGdnBw8PDwbnYxJC4Kej1wAAgZ4OHAGFiKiaMfl1lPHjx2PgwIG4e/cubG1tceTIEVy9ehXt2rXD3LlzK6NGi3Iw5sE7suFDWslYCRERFcXk4Dx16hQ+/PBDKJVKqFQq5Obmwt/fH19//TU++eSTyqjRoqw6WHAPOaCWHdrVdZW5GiIiepTJwWltbQ2lsmA1Dw8PXLtWcFnR2dkZ169fN7mAJUuWICAgADY2NujUqROOHTtW4vKpqakYM2YMvL29odFoEBgYiO3bt5u83+ooX2/A3ku3AAAt/VzkLYaIiIpk8j3ONm3a4Pjx42jUqBF69OiBadOmISUlBT/++CNatGhh0rY2bNiAsLAwLF26FJ06dcKCBQsQGhqK6OhoeHh4FFpep9PhqaeegoeHBzZv3gxfX19cvXoVLi4upv6MamnOzmjoDQIAMD6kkczVEBFRURRCCGHKCn///TfS09PRs2dPJCcnY8SIETh06BAaNWqEFStWICgoqMzb6tSpEzp06IDFixcDKHhX1N/fH+PGjcOkSZMKLb906VLMmTMHFy9ehLW1tSllS9LS0uDs7AytVgsnJ6dybaOyBEzaBgDo3cQDK17rIHM1RETmpyIywOQzzvbt20vTHh4e2LFjR7l2rNPpEBkZicmTJ0ttSqUSISEhOHz4cJHrbN26FcHBwRgzZgx+++031K5dG8OGDcPEiROhUtXsDtDvZD54reeljnVkrISIiEpi8j3O4pw4cQIDBgwo8/IpKSnQ6/Xw9PQ0avf09ERiYmKR68TGxmLz5s3Q6/XYvn07pk6dinnz5uHzzz8vdj+5ublIS0sz+lRHveftlaZDmha+TE1ERNWDScG5c+dOTJgwAZ988gliY2MBABcvXsTgwYPRoUMHqVu+ymIwGODh4YHvv/8e7dq1w9ChQ/Hpp59i6dKlxa4THh4OZ2dn6ePv71+pNZbH0djbUk9B7z7ZgP3SEhFVY2UOzhUrVuDpp5/G6tWr8dVXX+GJJ57A2rVrERwcDC8vL5w7d86kp1vd3d2hUqmQlJRk1J6UlAQvr6L7ZvX29kZgYKDRZdmmTZsiMTGxUA9G902ePBlarVb6lOfJ38r2Z3SyND2xbxMZKyEiotKUOTgXLlyIr776CikpKdi4cSNSUlLw7bff4uzZs1i6dCmaNm1q0o7VajXatWuHiIgIqc1gMCAiIgLBwcFFrtOlSxfExMQYndleunQJ3t7eUKvVRa6j0Wjg5ORk9KlOhBD4z76Cs/c3utaTuRoiIipNmYPz8uXLeOGFFwAAQ4YMgZWVFebMmQM/P79y7zwsLAzLli3DDz/8gKioKLz77rvIzMzEqFGjAAAjRowwenjo3XffxZ07d/DBBx/g0qVL2LZtG2bPno0xY8aUuwa5nb2plaZf7lj9LiMTEZGxMj9Vm52dDTs7OwAFY3JqNBp4e3s/1s6HDh2KW7duYdq0aUhMTERQUBB27NghPTB07do1qbMFAPD398fOnTsxfvx4tGrVCr6+vvjggw8wceLEx6pDTr+ejAcANPdxQkMPR5mrISKi0pj0Osry5cvh4OAAAMjPz8fq1asLjctpaifvY8eOxdixY4v8bu/evYXagoODceTIEZP2UZ2tvNfFXocAN5krISKisihzcNapUwfLli2T5r28vPDjjz8aLaNQKDg6igmiE9Ol6SB/F/kKISKiMitzcF65cqUSy7BMO88/eF/1mdY+MlZCRERlVWEdIJDptpy8CQB4snFtjrtJRFRDMDhlkpyWg7iUTABAz8bsKYiIqKZgcMrk272XpelXn6grYyVERGQKBqdMfj1VcJm2WyN3qHiZloioxmBwysBgEEi91zftm93qy1wNERGZolzBefnyZUyZMgUvv/wykpML+ln9448/cP78+Qotzlztj0kBAKitlAiuX0vmaoiIyBQmB+e+ffvQsmVLHD16FL/88gsyMjIAAKdPn8b06dMrvEBztDnyBgDAy8kGaiue9BMR1SQm/609adIkfP7559i1a5dRx+q9evUyqx59KtPhywVnnO3quspcCRERmcrk4Dx79iyeffbZQu0eHh5ISUmpkKLMWZYuHykZBUOgvfpEHZmrISIiU5kcnC4uLkhISCjUfvLkSfj6+lZIUeZs3v8uSdNt6/CMk4iopjE5OF966SVMnDgRiYmJUCgUMBgMOHjwICZMmIARI0ZURo1mQwiBFQcKOnVv4uUIhYKvoRAR1TQmB+fs2bPRpEkT+Pv7IyMjA82aNUP37t3RuXNnTJkypTJqNBvf/xUrTc8e0lLGSoiIqLxMGlYMANRqNZYtW4apU6fi3LlzyMjIQJs2bdCoUaPKqM+s7LjXqXuQvwsv0xIR1VAmB+eBAwfQtWtX1KlTB3Xq8OGWsopPzcaZG1oAwNQBTWWuhoiIysvkS7W9evVCvXr18Mknn+DChQuVUZNZ2nk+EXqDgLuDBu3qctBqIqKayuTgjI+Px4cffoh9+/ahRYsWCAoKwpw5c3Djxo3KqM9srDp4BUDBA0JERFRzmRyc7u7uGDt2LA4ePIjLly/jhRdewA8//ICAgAD06tWrMmo0C9fuZAEAPgjhvWAioprssfp7q1evHiZNmoQvv/wSLVu2xL59+yqqLrOSlpMnTQ8K4ruuREQ1WbmD8+DBg3jvvffg7e2NYcOGoUWLFti2bVtF1mY27mbqpGlnW2sZKyEiosdl8lO1kydPxvr16xEfH4+nnnoKCxcuxKBBg2BnZ1cZ9ZmFbWcLelqqZa8uZUkiIqruTA7Ov/76Cx999BFefPFFuLu7V0ZNZuVI7G18vSMaANAhgE/TEhHVdCYH58GDByujDrP1/s8npempA5vJWAkREVWEMgXn1q1b8fTTT8Pa2hpbt24tcdlnnnmmQgozF8npuQCAsT0bwtfFVuZqiIjocZUpOAcPHozExER4eHhg8ODBxS6nUCig1+srqrYaLzktR5oe3aO+jJUQEVFFKVNwGgyGIqepZHuik6VpJxs+TUtEZA5Mfh1lzZo1yM3NLdSu0+mwZs2aCinKXPx07DoAwF6tkrkSIiKqKCYH56hRo6DVagu1p6enY9SoURVSlLk4fT0VANC/lbe8hRARUYUxOTiFEEUOwHzjxg04OztXSFHm4OH7m693rSdjJUREVJHK/DpKmzZtoFAooFAo0Lt3b1hZPVhVr9cjLi4Offv2rZQia6I/ziVK0028nGSshIiIKlKZg/P+07SnTp1CaGgoHBwcpO/UajUCAgLw3HPPVXiBNdXW0/EAAD9XvoJCRGROyhyc06dPBwAEBARg6NChsLGxqbSiaro8vQGRV+8CAGYNaiFzNUREVJFM7jlo5MiRlVGHWdly4qY03a0RuyUkIjInZQpONzc3XLp0Ce7u7nB1dS3y4aD77ty5U2HF1VQn7z1NCwBWqscauY2IiKqZMgXnN998A0dHR2m6pOAkICY5HQAQ2txT5kqIiKiilSk4H748+9prr1VWLWbD8V4vQfXcHUpZkoiIahqTryOeOHECZ8+eleZ/++03DB48GJ988gl0Ol0Ja1qOq7czAQDNffgaChGRuTE5ON9++21cunQJABAbG4uhQ4fCzs4OmzZtwscff1zhBdZEl28VBKcdu9ojIjI7JgfnpUuXEBQUBADYtGkTevTogZ9++gmrV6/Gf//734qur8ZJy8mTptvWcZWxEiIiqgzl6nLv/ggpu3fvRr9+/QAA/v7+SElJqdjqaqD9lx4cA1d7tYyVEBFRZTA5ONu3b4/PP/8cP/74I/bt24f+/fsDAOLi4uDpyadID14uCE4vJ3YQQURkjkwOzgULFuDEiRMYO3YsPv30UzRs2BAAsHnzZnTu3LnCC6xpzt8sGDmmpR87vCciMkcm9xzUqlUro6dq75szZw5UKj4Mc/pGQXB2DHCTuRIiIqoMJgfnfZGRkYiKigIANGvWDG3btq2womoqXb5Bmm5Tx0W+QoiIqNKYHJzJyckYOnQo9u3bBxcXFwBAamoqevbsifXr16N27doVXWONceZGqjTd2t9FtjqIiKjymHyPc9y4ccjIyMD58+dx584d3LlzB+fOnUNaWhref//9yqixxtgceQMA0K6uK6zZRy0RkVky+Yxzx44d2L17N5o2bSq1NWvWDEuWLEGfPn0qtLia5sS1gqHEvJ35RC0Rkbky+bTIYDDA2tq6ULu1tbX0fqelupSUAQDo3IBDiRERmSuTg7NXr1744IMPEB8fL7XdvHkT48ePR+/evSu0uJrGWlUwakw9d3uZKyEiospicnAuXrwYaWlpCAgIQIMGDdCgQQPUq1cPaWlpWLRoUWXUWCOcu6lFnl4AAJp5s3N3IiJzZfI9Tn9/f5w4cQIRERHS6yhNmzZFSEhIhRdXk+z/50FXe852hS9lExGReTApODds2ICtW7dCp9Ohd+/eGDduXGXVVaMIIfDN7oIRY97oWk/maoiIqDKVOTi/++47jBkzBo0aNYKtrS1++eUXXL58GXPmzKnM+mqEgzG3pc4PnmntI3M1RERUmcp8j3Px4sWYPn06oqOjcerUKfzwww/49ttvK7O2GuPbvTEAgG6N3NnxARGRmStzcMbGxmLkyJHS/LBhw5Cfn4+EhIRKKawmOXT5NgDAyYb3NomIzF2ZgzM3Nxf29g9es1AqlVCr1cjOzq6UwmqK2xm50vRTzTisGhGRuTPp4aCpU6fCzs5OmtfpdPjiiy/g7PxgCK358+dXXHU1wLG4O9J0/1beMlZCRERVoczB2b17d0RHRxu1de7cGbGxsdK8QqGouMpqiH+SC3oLCvJ3Yf+0REQWoMzBuXfv3koso+Za/GfBg0H12VsQEZFF4CnSYzAYBHT6gtdQGno6yFwNERFVBQbnY4i5lSFNv9WtvoyVEBFRVWFwPoZzN7UAADd7Ne9vEhFZCP5t/xjuDyOmZmgSEVkM/o3/GI7FFXR80COwtsyVEBFRVSlXcO7fvx+vvvoqgoODcfPmTQDAjz/+iAMHDpSriCVLliAgIAA2Njbo1KkTjh07Vqb11q9fD4VCgcGDB5drv48rLScfAODmoJZl/0REVPVMDs7//ve/CA0Nha2tLU6ePInc3IKec7RaLWbPnm1yARs2bEBYWBimT5+OEydOoHXr1ggNDUVycnKJ6125cgUTJkxAt27dTN5nRcjXGxBz7x3O1n7OpSxNRETmwuTg/Pzzz7F06VIsW7YM1tYP+mbt0qULTpw4YXIB8+fPx1tvvYVRo0ahWbNmWLp0Kezs7LBy5cpi19Hr9XjllVcwY8YM1K8vz9OsRx/qMag7L9USEVkMk4MzOjoa3bt3L9Tu7OyM1NRUk7al0+kQGRlpNAi2UqlESEgIDh8+XOx6M2fOhIeHB954441S95Gbm4u0tDSjT0VYvv9Bj0l2apPHAyciohrK5OD08vJCTExMofYDBw6YfPaXkpICvV4PT0/jztE9PT2RmJhY5DoHDhzAihUrsGzZsjLtIzw8HM7OztLH39/fpBqLE3n1LgAgtDk7dicisiQmB+dbb72FDz74AEePHoVCoUB8fDzWrVuHCRMm4N13362MGiXp6ekYPnw4li1bBnd39zKtM3nyZGi1Wulz/fr1x67DYBDSg0FD2vo99vaIiKjmMPka46RJk2AwGNC7d29kZWWhe/fu0Gg0mDBhAsaNG2fSttzd3aFSqZCUlGTUnpSUBC8vr0LLX758GVeuXMHAgQOlNoOhoMs7KysrREdHo0GDBkbraDQaaDQak+oqzdU7WdJ090a8v0lEZElMDk6FQoFPP/0UH330EWJiYpCRkYFmzZrBwcH0vlrVajXatWuHiIgI6ZUSg8GAiIgIjB07ttDyTZo0wdmzZ43apkyZgvT0dCxcuLDCLsOW5lb6gzE4bdWqKtknERFVD+V+qkWtVqNZs2aPXUBYWBhGjhyJ9u3bo2PHjliwYAEyMzMxatQoAMCIESPg6+uL8PBw2NjYoEWLFkbru7i4AECh9sq0/tg1AEBzH6cq2ycREVUPJgdnz549Sxx3888//zRpe0OHDsWtW7cwbdo0JCYmIigoCDt27JAeGLp27RqUyurVwdHZe33U3s7QyVwJERFVNZODMygoyGg+Ly8Pp06dwrlz5zBy5MhyFTF27NgiL80CpY8Dunr16nLt83HcH7x6TM8GpSxJRETmxuTg/Oabb4ps/+yzz5CRkVHkd+bkZmq2NB3SjK+iEBFZmgq7Bvrqq6+W2NuPudhx7sH7pd7OtjJWQkREcqiw4Dx8+DBsbGwqanPV1u2Mgidqa9mzY3ciIktk8qXaIUOGGM0LIZCQkIC///4bU6dOrbDCqqvYW5kAgH4tvWWuhIiI5GBycDo7G48EolQq0bhxY8ycORN9+vSpsMKqq4zcgh6DbKyr15O+RERUNUwKTr1ej1GjRqFly5ZwdXWtrJqqtUOXUwAAnerVkrkSIiKSg0mnTSqVCn369DF5FBRzkac3wCAKpgPc7eUthoiIZGHy9cYWLVogNja29AXN0OnrqdJ0fQYnEZFFKtdA1hMmTMDvv/+OhISEShnrsrq6cbfgHc7ajhoolcX3nkREROarzPc4Z86ciQ8//BD9+vUDADzzzDNGXe8JIaBQKKDX6yu+ympiV1TBKC7ezub/2g0RERWtzME5Y8YMvPPOO9izZ09l1lOtbTuTAABo4uUocyVERCSXMgenEAVPxfTo0aPSiqnODPefCgLQs7GHjJUQEZGcTLrHWdKoKObu2kODV/dqyuAkIrJUJr3HGRgYWGp43rlz57EKqq4uJqZL0xorDl5NRGSpTArOGTNmFOo5yFJcSCh4YtjZ1lrmSoiISE4mBedLL70EDw/LvEz5T1LBGWenem4yV0JERHIq8z1OS76/CQBZuoLXbNw4KgoRkUUrc3Def6rWUsWmFAzS3T6AZ5xERJaszJdqDQZDZdZR7SlQcMbt7sAzTiIiS8axscro/usoHo7sNYiIyJIxOMsgJ+9BN4K8x0lEZNkYnGVw9qZWmualWiIiy8bgLIO4W5kAAEeNFaxUPGRERJaMKVAGiWk5AIBAdu5ORGTxGJxlEHn1LgDAy4kPBhERWToGZxmcup4KALCxZh+1RESWjsFZBg6agtddO9ZzlbkSIiKSG4OzDG6mZgMAWvq6yFsIERHJjsFZiszcfGma73ASERGDsxT3zzYBwNNJI2MlRERUHTA4S3H9Xld7vi62Fj9CDBERMThLlZ5TcKn24TNPIiKyXAzOUuTmF/RT2z2wtsyVEBFRdcDgLEVUQjoAwEHDdziJiIjBWaobdwvucd7J1MlcCRERVQcMzlLk5BUM4N3Kz0XeQoiIqFpgcJYiXlvwUNAT9d1kroSIiKoDBmcptFl5AIBa9nyHk4iIGJylun3v3qbaioeKiIgYnCXSG4Q0XcuB3e0RERGDs0S3M3KlaRdbBicRETE4S/Rwb0G8VEtERACDs0SxtzLlLoGIiKoZBmcJtNkFT9T6u9nKXAkREVUXDM4SnL6RCgBo4uUkbyFERFRtMDhL8E9SBgDe3yQiogeYCCW4dm8szpa+zjJXQkRE1QWDswQqZcHA1QxOIiK6j8FZDF2+QXo4yNeFDwcREVEBBmcx0nLypOk6bnYyVkJERNUJg7MYidocAIBCASjvXbIlIiJicBbjYmI6AECIUhYkIiKLwuAsxslrdwEAHo4cToyIiB5gcBYjKiENANCurqvMlRARUXXC4CyG272Bq/35YBARET2EwVkMnd4AAAj0dJS5EiIiqk4YnMU4cvk2AEDD7vaIiOghTIVi3D/jtOKrKERE9BAGZxHy7oUmAATVcZGvECIiqnYYnEVITs+Vpj0cbWSshIiIqhsGZxHy8gvOOBWKBx29ExERAQzOIuUbCoLT2dZa5kqIiKi6YXAWQZdf0M+elZKHh4iIjDEZinA3SweAr6IQEVFh1SIZlixZgoCAANjY2KBTp044duxYscsuW7YM3bp1g6urK1xdXRESElLi8uVx5oYWAODtzAeDiIjImOzBuWHDBoSFhWH69Ok4ceIEWrdujdDQUCQnJxe5/N69e/Hyyy9jz549OHz4MPz9/dGnTx/cvHmzwmoy3BsSJSM3v8K2SURE5kEhhLwDZ3Xq1AkdOnTA4sWLAQAGgwH+/v4YN24cJk2aVOr6er0erq6uWLx4MUaMGFHq8mlpaXB2doZWq4WTk1ORy7z5w3HsjkrGK53q4ItnW5r2g4iIqNoqSwaURtYzTp1Oh8jISISEhEhtSqUSISEhOHz4cJm2kZWVhby8PLi5uVVYXW72agA84yQiosKs5Nx5SkoK9Ho9PD09jdo9PT1x8eLFMm1j4sSJ8PHxMQrfh+Xm5iI390GHBmlpaaVu8/4g1q39XMpUAxERWQ7Z73E+ji+//BLr16/Hli1bYGNT9IM84eHhcHZ2lj7+/v6lbjdfX3D12iDvVWwiIqqGZA1Od3d3qFQqJCUlGbUnJSXBy8urxHXnzp2LL7/8Ev/73//QqlWrYpebPHkytFqt9Ll+/XqpdV1MLDgr9XO1LcOvICIiSyJrcKrVarRr1w4RERFSm8FgQEREBIKDg4td7+uvv8asWbOwY8cOtG/fvsR9aDQaODk5GX1Kc7/HIEcb9hxERETGZL3HCQBhYWEYOXIk2rdvj44dO2LBggXIzMzEqFGjAAAjRoyAr68vwsPDAQBfffUVpk2bhp9++gkBAQFITEwEADg4OMDBwaFCasq911etF9/jJCKiR8genEOHDsWtW7cwbdo0JCYmIigoCDt27JAeGLp27RqUD3V9991330Gn0+H555832s706dPx2WefPXY9BoNAlk4PALCxVj329oiIyLzI/h5nVSvtHZ7k9Bx0/KLg0vE/XzwNa1WNfn6KiIgeUuPf46yOkrQPXl1haBIR0aOYDI/IzS+4TMshxYiIqCgMzkfcySwYGcXLiQ8GERFRYQzORxyISQHAJ2qJiKhoDM5H7Dxf8HqLvxs7PyAiosIYnI/QGwoeMu5Yr5bMlRARUXXE4HxESkbBPc42/i7yFkJERNUSg/Mhuns9BgGArZqdHxARUWEMzoek5eRJ07XujclJRET0MAbnQ7LvdbWnsVJCoVDIXA0REVVHDM6HJKfnAHjQyTsREdGjGJwPSUor6G5PY8XDQkRERWNCPOT+qCh8MIiIiIrD4HxIQmo2AKClr7PMlRARUXXF4HyINrvgqVqVkg8GERFR0RicD4nXFpxxutnxVRQiIioag/MhuXkFT9O6MDiJiKgYDM6HnL6RCgDwceHIKEREVDQG50M8HAsC09HGSuZKiIioumJwPuRCQhoAoH5tB5krISKi6orB+RC7e+9v8oyTiIiKw+C8J19vkDpAcHfQyFwNERFVVwzOe6KT0gEAapUSrnyqloiIisHgvCc5vaCfWp3ewA4QiIioWAzOe+6/w1m/tr3MlRARUXXG4Lzn8q0MAIC3M9/hJCKi4jE477mdoQMAJGhzZK6EiIiqMwbnPUlpBYHJkVGIiKgkDM57zsVrAQDezrYyV0JERNUZg/MeP9eCwHTQcBBrIiIqHoPznkOXbwMAGnk6ylwJERFVZwzOe3zuXaK14jucRERUAgbnPbn5Be9x8h4nERGVhMEJwGAQSMko6DnIxpqHhIiIiseUAHD1TpY07e9mJ2MlRERU3TE4AUQnpkvT1ioeEiIiKh5TAkBOXsFwYrxMS0REpWFS4EFwdqxXS+ZKiIioumNwAriQkAYAcNRYyVwJERFVdwxOAI42BYGZnM4O3omIqGQ8xQJwNPYOAKBjPTeZKyGixyWEQH5+PvR6vdylkAxUKhWsrKygUFReZzYMTgCp2XkAgJx7g1kTUc2k0+mQkJCArKys0hcms2VnZwdvb2+o1epK2T6DEw9eQalbi+9wEtVUBoMBcXFxUKlU8PHxgVqtrtSzDqp+hBDQ6XS4desW4uLi0KhRIyiVFX9HksEJ4H73tL4u7G6PqKbS6XQwGAzw9/eHnR3/EWypbG1tYW1tjatXr0Kn08HGxqbC98GHgwDk6wUAwMaaQ4oR1XSVcYZBNUtl/xngnzAAeYaCe5scGYWIiErD4ARw8242AMCK3e0REVEpLD4phBDSkGLsco+I5HT48GGoVCr079+/0Hd79+6FQqFAampqoe8CAgKwYMECo7Y9e/agX79+qFWrFuzs7NCsWTN8+OGHuHnzZiVVD+Tk5GDMmDGoVasWHBwc8NxzzyEpKanEdTIyMjB27Fj4+fnB1tYWzZo1w9KlSwstd/jwYfTq1Qv29vZwcnJC9+7dkZ2dXVk/pUQWnxT3QxMA6nBkFCKS0YoVKzBu3Dj89ddfiI+PL/d2/vOf/yAkJAReXl7473//iwsXLmDp0qXQarWYN29eBVZsbPz48fi///s/bNq0Cfv27UN8fDyGDBlS4jphYWHYsWMH1q5di6ioKPzrX//C2LFjsXXrVmmZw4cPo2/fvujTpw+OHTuG48ePY+zYsfLdzxYWRqvVCgBCq9UKIYS4djtT1J34u6g78Xeh1xtkro6Iyis7O1tcuHBBZGdny11KuaSnpwsHBwdx8eJFMXToUPHFF18Yfb9nzx4BQNy9e7fQunXr1hXffPONEEKI69evC7VaLf71r38VuZ+i1q8IqampwtraWmzatElqi4qKEgDE4cOHi12vefPmYubMmUZtbdu2FZ9++qk036lTJzFlypQy11LSn4VHM6A8LP6MU6d/cMap5MNBRGZFCIEsXX6Vf4QQJte6ceNGNGnSBI0bN8arr76KlStXlms7mzZtgk6nw8cff1zk9y4uLsWu+/TTT8PBwaHYT/PmzYtdNzIyEnl5eQgJCZHamjRpgjp16uDw4cPFrte5c2ds3boVN2/ehBACe/bswaVLl9CnTx8AQHJyMo4ePQoPDw907twZnp6e6NGjBw4cOFDKkag8Fv8ep+7epVp3B43MlRBRRcvO06PZtJ1Vvt8LM0Nhpzbtr9cVK1bg1VdfBQD07dsXWq0W+/btw5NPPmnSdv755x84OTnB29vbpPUAYPny5SXeN7S2ti72u8TERKjV6kLB7OnpicTExGLXW7RoEUaPHg0/Pz9YWVlBqVRi2bJl6N69OwAgNjYWAPDZZ59h7ty5CAoKwpo1a9C7d2+cO3cOjRo1MuEXVgyLD867WToAgFrFs00ikkd0dDSOHTuGLVu2AACsrKwwdOhQrFixwuTgFEKUu8ckX1/fcq33OBYtWoQjR45g69atqFu3Lv766y+MGTMGPj4+CAkJgeHe64Jvv/02Ro0aBQBo06YNIiIisHLlSoSHh1d5zRYfnPfPOOO1HBmFyNzYWqtwYWaoLPs1xYoVK5Cfnw8fHx+pTQgBjUaDxYsXw9nZGU5OTgAArVZb6KwuNTUVzs7OAIDAwEBotVokJCSYfNb59NNPY//+/cV+X7duXZw/f77I77y8vKDT6ZCammpUX1JSEry8vIpcJzs7G5988gm2bNkiPUncqlUrnDp1CnPnzkVISIj0G5o1a2a0btOmTXHt2jVTfl6FsfjgzLvXa1ArP2eZKyGiiqZQKEy+ZFrV8vPzsWbNGsybN0+6r3ff4MGD8fPPP+Odd96R+l2NjIxE3bp1pWViY2Oh1WoRGBgIAHj++ecxadIkfP311/jmm28K7e/RYHvY41yqbdeuHaytrREREYHnnnsOQMGZ9LVr1xAcHFzkOnl5ecjLyyv0dKxKpZLONAMCAuDj44Po6GijZS5duoSnn3662HoqU/X+E1UFdNI7nOxuj4iq3u+//467d+/ijTfekM4a73vuueewYsUKvPPOO3B0dMSbb76JDz/8EFZWVmjZsiWuX7+OiRMn4oknnkDnzp0BAP7+/vjmm28wduxYpKWlYcSIEQgICMCNGzewZs0aODg4FPtKyuNcqnV2dsYbb7yBsLAwuLm5wcnJCePGjUNwcDCeeOIJabkmTZogPDwczz77LJycnNCjRw989NFHsLW1Rd26dbFv3z6sWbMG8+fPB1Dwj5+PPvoI06dPR+vWrREUFIQffvgBFy9exObNm8td72Mp9/O4NdSjjyIv2HVJ1J34uxi2rPjHpYmo+qupr6MMGDBA9OvXr8jvjh49KgCI06dPCyEKfuP06dNFkyZNhK2trahXr54YPXq0uHXrVqF1d+3aJUJDQ4Wrq6uwsbERTZo0ERMmTBDx8fGV9luys7PFe++9J1xdXYWdnZ149tlnRUJCgtEyAMSqVauk+YSEBPHaa68JHx8fYWNjIxo3bizmzZsnDAbj1wPDw8OFn5+fsLOzE8HBwWL//v0l1lGZr6Mo7v0Qi5GWlgZnZ2dotVo4OTlh+f5YfL4tCg1q2yPiwyflLo+IyiknJwdxcXGoV69epYyIQTVHSX8WHs2A8rD49ziPxN4GAHSsV0vmSoiIqCaw+OB0ti0YITz13mspREREJbH44Lzfc1CHADeZKyEioprA4oPz1PW7AAANR0YhIqIysPi0cLMv6GovW6eXuRIiIqoJLD447+OQYkTmwcJeFKAiVPafgWoRnEuWLEFAQABsbGzQqVMnHDt2rMTlN23ahCZNmsDGxgYtW7bE9u3by73vvHsdIGjYAQJRjXa/V5usrCyZKyG53f8zUFJPR49D9p6DNmzYgLCwMCxduhSdOnXCggULEBoaiujoaHh4eBRa/tChQ3j55ZcRHh6OAQMG4KeffsLgwYNx4sQJtGjRwuT9X0hIAwCoVdXi3xBEVE4qlQouLi5ITk4GANjZ2ZW7s3OqmYQQyMrKQnJyMlxcXKBSVc4JkewdIHTq1AkdOnTA4sWLAQAGgwH+/v4YN24cJk2aVGj5oUOHIjMzE7///rvU9sQTTyAoKAhLly4tdX+PvvzadtYu3MnU4b/vdka7uq4V98OIqMoJIZCYmIjU1FS5SyEZubi4wMvLq8h/OFVEBwiynnHqdDpERkZi8uTJUptSqURISEixA58ePnwYYWFhRm2hoaH49ddfy1VDbl7BQ0HuDupyrU9E1YdCoYC3tzc8PDyQl5cndzkkA2tr60o707xP1uBMSUmBXq+Hp6enUbunpycuXrxY5DqJiYlFLl/cQKm5ubnIzc2V5tPS0oy+z2En70RmR6VSVfpfnmS5zP7GXnh4OJydnaWPv7+/9F2+3gDlvTN5jZXZHwoiIqoAsp5xuru7Q6VSISkpyai9pIFPvby8TFp+8uTJRpd209LSpPC0Uinxzxf9oDcIKUCJiIhKIutpllqtRrt27RARESG1GQwGREREFDvwaXBwsNHyALBr165il9doNHBycjL6PEqlVPDpOyIiKhPZX0cJCwvDyJEj0b59e3Ts2BELFixAZmYmRo0aBQAYMWIEfH19ER4eDgD44IMP0KNHD8ybNw/9+/fH+vXr8ffff+P7778v0/7uP0T86L1OIiIyf/f/7n+sF0rKPZJnBVq0aJGoU6eOUKvVomPHjuLIkSPSdz169BAjR440Wn7jxo0iMDBQqNVq0bx5c7Ft27Yy7+v69esCAD/88MMPPxb8uX79erkzS/b3OKuawWBAfHw8HB0doVAopHue169fL/c7PZaCx8o0PF5lx2NlGh6vsnv0WAkhkJ6eDh8fHyiV5btbKful2qqmVCrh5+dXqL24+59UGI+VaXi8yo7HyjQ8XmX38LFydnZ+rG3xHQwiIiITMDiJiIhMYPHBqdFoMH36dGg0GrlLqfZ4rEzD41V2PFam4fEqu8o4Vhb3cBAREdHjsPgzTiIiIlMwOImIiEzA4CQiIjKBRQTnkiVLEBAQABsbG3Tq1AnHjh0rcflNmzahSZMmsLGxQcuWLbF9+/YqqlR+phyrZcuWoVu3bnB1dYWrqytCQkJKPbbmxtQ/W/etX78eCoUCgwcPrtwCqxFTj1VqairGjBkDb29vaDQaBAYGWsx/i6YeqwULFqBx48awtbWFv78/xo8fj5ycnCqqVj5//fUXBg4cCB8fHygUijKNy7x37160bdsWGo0GDRs2xOrVq03fcbn7HKoh1q9fL9RqtVi5cqU4f/68eOutt4SLi4tISkoqcvmDBw8KlUolvv76a3HhwgUxZcoUYW1tLc6ePVvFlVc9U4/VsGHDxJIlS8TJkydFVFSUeO2114Szs7O4ceNGFVcuD1OP131xcXHC19dXdOvWTQwaNKhqipWZqccqNzdXtG/fXvTr108cOHBAxMXFib1794pTp05VceVVz9RjtW7dOqHRaMS6detEXFyc2Llzp/D29hbjx4+v4sqr3vbt28Wnn34qfvnlFwFAbNmypcTlY2NjhZ2dnQgLCxMXLlwQixYtEiqVSuzYscOk/Zp9cHbs2FGMGTNGmtfr9cLHx0eEh4cXufyLL74o+vfvb9TWqVMn8fbbb1dqndWBqcfqUfn5+cLR0VH88MMPlVVitVKe45Wfny86d+4sli9fLkaOHGkxwWnqsfruu+9E/fr1hU6nq6oSqw1Tj9WYMWNEr169jNrCwsJEly5dKrXO6qYswfnxxx+L5s2bG7UNHTpUhIaGmrQvs75Uq9PpEBkZiZCQEKlNqVQiJCQEhw8fLnKdw4cPGy0PAKGhocUuby7Kc6welZWVhby8PLi5uVVWmdVGeY/XzJkz4eHhgTfeeKMqyqwWynOstm7diuDgYIwZMwaenp5o0aIFZs+eDb1eX1Vly6I8x6pz586IjIyULufGxsZi+/bt6NevX5XUXJNU1N/vZt1XbUpKCvR6PTw9PY3aPT09cfHixSLXSUxMLHL5xMTESquzOijPsXrUxIkT4ePjU+gPpjkqz/E6cOAAVqxYgVOnTlVBhdVHeY5VbGws/vzzT7zyyivYvn07YmJi8N577yEvLw/Tp0+virJlUZ5jNWzYMKSkpKBr164QQiA/Px/vvPMOPvnkk6oouUYp7u/3tLQ0ZGdnw9bWtkzbMeszTqo6X375JdavX48tW7bAxsZG7nKqnfT0dAwfPhzLli2Du7u73OVUewaDAR4eHvj+++/Rrl07DB06FJ9++imWLl0qd2nVzt69ezF79mx8++23OHHiBH755Rds27YNs2bNkrs0s2XWZ5zu7u5QqVRISkoyak9KSoKXl1eR63h5eZm0vLkoz7G6b+7cufjyyy+xe/dutGrVqjLLrDZMPV6XL1/GlStXMHDgQKnNYDAAAKysrBAdHY0GDRpUbtEyKc+fLW9vb1hbW0OlUkltTZs2RWJiInQ6HdRqdaXWLJfyHKupU6di+PDhePPNNwEALVu2RGZmJkaPHo1PP/203ENnmaPi/n53cnIq89kmYOZnnGq1Gu3atUNERITUZjAYEBERgeDg4CLXCQ4ONloeAHbt2lXs8uaiPMcKAL7++mvMmjULO3bsQPv27aui1GrB1OPVpEkTnD17FqdOnZI+zzzzDHr27IlTp07B39+/KsuvUuX5s9WlSxfExMRI/7gAgEuXLsHb29tsQxMo37HKysoqFI73/8Eh2KOqkQr7+92055ZqnvXr1wuNRiNWr14tLly4IEaPHi1cXFxEYmKiEEKI4cOHi0mTJknLHzx4UFhZWYm5c+eKqKgoMX36dIt6HcWUY/Xll18KtVotNm/eLBISEqRPenq6XD+hSpl6vB5lSU/Vmnqsrl27JhwdHcXYsWNFdHS0+P3334WHh4f4/PPP5foJVcbUYzV9+nTh6Ogofv75ZxEbGyv+97//iQYNGogXX3xRrp9QZdLT08XJkyfFyZMnBQAxf/58cfLkSXH16lUhhBCTJk0Sw4cPl5a//zrKRx99JKKiosSSJUv4OkpxFi1aJOrUqSPUarXo2LGjOHLkiPRdjx49xMiRI42W37hxowgMDBRqtVo0b95cbNu2rYorlo8px6pu3boCQKHP9OnTq75wmZj6Z+thlhScQph+rA4dOiQ6deokNBqNqF+/vvjiiy9Efn5+FVctD1OOVV5envjss89EgwYNhI2NjfD39xfvvfeeuHv3btUXXsX27NlT5N9B94/PyJEjRY8ePQqtExQUJNRqtahfv75YtWqVyfvl6ChEREQmMOt7nERERBWNwUlERGQCBicREZEJGJxEREQmYHASERGZgMFJRERkAgYnERGRCRicREREJmBwEplo9erVcHFxkbuMclMoFPj1119LXOa1117D4MGDq6QeopqGwUkW6bXXXoNCoSj0iYmJkbs0rF69WqpHqVTCz88Po0aNQnJycoVsPyEhAU8//TQA4MqVK1AoFIXGCF24cCFWr15dIfsrzmeffSb9TpVKBX9/f4wePRp37twxaTsMeapqZj2sGFFJ+vbti1WrVhm11a5dW6ZqjDk5OSE6OhoGgwGnT5/GqFGjEB8fj507dz72tssyRJ6zs/Nj76csmjdvjt27d0Ov1yMqKgqvv/46tFotNmzYUCX7JyoPnnGSxdJoNPDy8jL6qFQqzJ8/Hy1btoS9vT38/f3x3nvvISMjo9jtnD59Gj179oSjoyOcnJzQrl07/P3339L3Bw4cQLdu3WBrawt/f3+8//77yMzMLLE2hUIBLy8v+Pj44Omnn8b777+P3bt3Izs7GwaDATNnzoSfnx80Gg2CgoKwY8cOaV2dToexY8fC29sbNjY2qFu3LsLDw422ff9Sbb169QAAbdq0gUKhwJNPPgnA+Czu+++/h4+Pj9EQXwAwaNAgvP7669L8b7/9hrZt28LGxgb169fHjBkzkJ+fX+LvtLKygpeXF3x9fRESEoIXXngBu3btkr7X6/V44403UK9ePdja2qJx48ZYuHCh9P1nn32GH374Ab/99pt09rp3714AwPXr1/Hiiy/CxcUFbm5uGDRoEK5cuVJiPURlweAkeoRSqcS///1vnD9/Hj/88AP+/PNPfPzxx8Uu/8orr8DPzw/Hjx9HZGQkJk2aBGtrawAFA1j37dsXzz33HM6cOYMNGzbgwIEDGDt2rEk12drawmAwID8/HwsXLsS8efMwd+5cnDlzBqGhoXjmmWfwzz//AAD+/e9/Y+vWrdi4cSOio6Oxbt06BAQEFLndY8eOAQB2796NhIQE/PLLL4WWeeGFF3D79m3s2bNHartz5w527NiBV155BQCwf/9+jBgxAh988AEuXLiA//znP1i9ejW++OKLMv/GK1euYOfOnUbjbRoMBvj5+WHTpk24cOECpk2bhk8++QQbN24EAEyYMAEvvvgi+vbti4SEBCQkJKBz587Iy8tDaGgoHB0dsX//fhw8eBAODg7o27cvdDpdmWsiKtLjDutCVBONHDlSqFQqYW9vL32ef/75IpfdtGmTqFWrljS/atUq4ezsLM07OjqK1atXF7nuG2+8IUaPHm3Utn//fqFUKkV2dnaR6zy6/UuXLonAwEDRvn17IYQQPj4+4osvvjBap0OHDuK9994TQggxbtw40atXL2EwGIrcPgCxZcsWIYQQcXFxAoA4efKk0TKPDnk2aNAg8frrr0vz//nPf4SPj4/Q6/VCCCF69+4tZs+ebbSNH3/8UXh7exdZgxAF40gqlUphb28vbGxspCGh5s+fX+w6QggxZswY8dxzzxVb6/19N27c2OgY5ObmCltbW7Fz584St09UGt7jJIvVs2dPfPfdd9K8vb09gIKzr/DwcFy8eBFpaWnIz89HTk4OsrKyYGdnV2g7YWFhePPNN/Hjjz9KlxsbNGgAoOAy7pkzZ7Bu3TppeSEEDAYD4uLi0LRp0yJr02q1cHBwgMFgQE5ODrp27Yrly5cjLS0N8fHx6NKli9HyXbp0wenTpwEUXGZ96qmn0LhxY/Tt2xcDBgxAnz59HutYvfLKK3jrrbfw7bffQqPRYN26dXjppZegVCql33nw4EGjM0y9Xl/icQOAxo0bY+vWrcjJycHatWtx6tQpjBs3zmiZJUuWYOXKlbh27Rqys7Oh0+kQFBRUYr2nT59GTEwMHB0djdpzcnJw+fLlchwBogcYnGSx7O3t0bBhQ6O2K1euYMCAAXj33XfxxRdfwM3NDQcOHMAbb7wBnU5XZAB89tlnGDZsGLZt24Y//vgD06dPx/r16/Hss88iIyMDb7/9Nt5///1C69WpU6fY2hwdHXHixAkolUp4e3vD1tYWAJCWllbq72rbti3i4uLwxx9/YPfu3XjxxRcREhKCzZs3l7pucQYOHAghBLZt24YOHTpg//79+Oabb6TvMzIyMGPGDAwZMqTQujY2NsVuV61WS/8ffPnll+jfvz9mzJiBWbNmAQDWr1+PCRMmYN68eQgODoajoyPmzJmDo0ePllhvRkYG2rVrZ/QPlvuqywNgVHMxOIkeEhkZCYPBgHnz5klnU/fvp5UkMDAQgYGBGD9+PF5++WWsWrUKzz77LNq2bYsLFy4UCujSKJXKItdxcnKCj48PDh48iB49ekjtBw8eRMeOHY2WGzp0KIYOHYrnn38effv2xZ07d+Dm5ma0vfv3E/V6fYn12NjYYMiQIVi3bh1iYmLQuHFjtG3bVvq+bdu2iI6ONvl3PmrKlCno1asX3n33Xel3du7cGe+99560zKNnjGq1ulD9bdu2xYYNG+Dh4QEnJ6fHqonoUXw4iOghDRs2RF5eHhYtWoTY2Fj8+OOPWLp0abHLZ2dnY+zYsdi7dy+uXr2KgwcP4vjx49Il2IkTJ+LQoUMYO3YsTp06hX/++Qe//fabyQ8HPeyjjz7CV199hQ0bNiA6OhqTJk3CqVOn8MEHHwAA5s+fj59//hkXL17EpUuXsGnTJnh5eRXZaYOHhwdsbW2xY8cOJCUlQavVFrvfV155Bdu2bcPKlSulh4LumzZtGtasWYMZM2bg/PnziIqKwvr16zFlyhSTfltwcDBatWqF2bNnAwAaNWqEv//+Gzt37sSlS5cwdepUHD9+3GidgIAAnDlzBtHR0UhJSUFeXh5eeeUVuLu7Y9CgQdi/fz/i4uKwd+9evP/++7hx44ZJNREVIvdNViI5FPVAyX3z588X3t7ewtbWVoSGhoo1a9YIAOLu3btCCOOHd3Jzc8VLL70k/P39hVqtFj4+PmLs2LFGD/4cO3ZMPPXUU8LBwUHY29uLVq1aFXq452GPPhz0KL1eLz777DPh6+srrK2tRevWrcUff/whff/999+LoKAgYW9vL5ycnETv3r3FiRMnpO/x0MNBQgixbNky4e/vL5RKpejRo0exx0ev1wtvb28BQFy+fLlQXTt27BCdO3cWtra2wsnJSXTs2FF8//33xf6O6dOni9atWxdq//nnn4VGoxHXrl0TOTk54rXXXhPOzs7CxcVFvPvuu2LSpElG6yUnJ0vHF4DYs2ePEEKIhIQEMWLECOHu7i40Go2oX7++eOutt4RWqy22JqKyUAghhLzRTUREVHPwUi0REZEJGJxEREQmYHASERGZgMFJRERkAgYnERGRCRicREREJmBwEhERmYDBSUREZAIGJxERkQkYnERERCZgcBIREZmAwUlERGSC/we5On0E1crkxQAAAABJRU5ErkJggg==", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)\n", + "auc_score = auc(fpr, tpr)\n", + "\n", + "plt.figure(figsize=(8, 6))\n", + "\n", + "RocCurveDisplay(\n", + " fpr=fpr, \n", + " tpr=tpr, \n", + " roc_auc=auc_score\n", + ").plot()\n", + "\n", + "\n", + "plt.title('ROC Curve')\n", + "plt.tight_layout()\n", + "print(f\"AUC Score: {auc_score:.3f}\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12c61fc4-81a6-43a3-a535-8c118b9fdb5a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}