{
"cells": [
{
"cell_type": "markdown",
"id": "2bcb3750",
"metadata": {},
"source": [
"# Importing Necessary Libraries"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "892c5651",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import sqlite3\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"pd.options.display.max_columns=None\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"%matplotlib inline\n",
"\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import MinMaxScaler, OrdinalEncoder, OneHotEncoder\n",
"from sklearn.metrics import confusion_matrix, classification_report, accuracy_score, f1_score, recall_score, precision_score\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.svm import SVC\n",
"from sklearn.naive_bayes import GaussianNB"
]
},
{
"cell_type": "markdown",
"id": "5bd013c9",
"metadata": {},
"source": [
"# Reading the dataset"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "433f9252",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"connection = sqlite3.connect('data.db')"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "b0080038",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"df = pd.read_sql(sql=\"SELECT * FROM airline_reviews\", con=connection, parse_dates=['review_date'])"
]
},
{
"cell_type": "markdown",
"id": "a24b296f",
"metadata": {},
"source": [
"# About ML Model\n",
"- We shall drop the `customer_review` and `review_clean` column and train a ML model to predict `recommended` status based on the remaining features.\n",
"- We shall also drop `review_date` and `author` columns since these won't be important in model building.\n",
"- Sentiment analysis of the `customer_review` column shall be done in another notebook.\n",
"- Final recommendation of the overall project shall be `recommended` column based on:\n",
" - `recommended` status prediction using ML model.\n",
" - Sentiment analysis of `customer_review` column."
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "7fc58fa5",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# Dropping 'customer_review' and 'recommended' columns.\n",
"df.drop(columns=['customer_review', 'review_clean', 'review_date', 'author'], inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "7511b8f5",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" airline | \n",
" traveller_type | \n",
" cabin | \n",
" type_of_flight | \n",
" frequency | \n",
" seat_comfort | \n",
" cabin_service | \n",
" food_bev | \n",
" entertainment | \n",
" ground_service | \n",
" value_for_money | \n",
" overall | \n",
" recommended | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" Turkish Airlines | \n",
" Business | \n",
" Economy Class | \n",
" Indirect | \n",
" Rarely | \n",
" 4.0 | \n",
" 5.0 | \n",
" 4.0 | \n",
" 4.0 | \n",
" 2.0 | \n",
" 4.0 | \n",
" 7.0 | \n",
" yes | \n",
"
\n",
" \n",
" | 1 | \n",
" Turkish Airlines | \n",
" Family Leisure | \n",
" Economy Class | \n",
" Direct | \n",
" Rarely | \n",
" 4.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 2.0 | \n",
" no | \n",
"
\n",
" \n",
" | 2 | \n",
" Turkish Airlines | \n",
" Business | \n",
" Economy Class | \n",
" Indirect | \n",
" Rarely | \n",
" 1.0 | \n",
" 4.0 | \n",
" 1.0 | \n",
" 3.0 | \n",
" 1.0 | \n",
" 2.0 | \n",
" 3.0 | \n",
" no | \n",
"
\n",
" \n",
" | 3 | \n",
" Turkish Airlines | \n",
" Solo Leisure | \n",
" Economy Class | \n",
" Direct | \n",
" Rarely | \n",
" 4.0 | \n",
" 5.0 | \n",
" 5.0 | \n",
" 5.0 | \n",
" 5.0 | \n",
" 5.0 | \n",
" 10.0 | \n",
" yes | \n",
"
\n",
" \n",
" | 4 | \n",
" Turkish Airlines | \n",
" Solo Leisure | \n",
" Economy Class | \n",
" Indirect | \n",
" Rarely | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" no | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" airline traveller_type cabin type_of_flight frequency \\\n",
"0 Turkish Airlines Business Economy Class Indirect Rarely \n",
"1 Turkish Airlines Family Leisure Economy Class Direct Rarely \n",
"2 Turkish Airlines Business Economy Class Indirect Rarely \n",
"3 Turkish Airlines Solo Leisure Economy Class Direct Rarely \n",
"4 Turkish Airlines Solo Leisure Economy Class Indirect Rarely \n",
"\n",
" seat_comfort cabin_service food_bev entertainment ground_service \\\n",
"0 4.0 5.0 4.0 4.0 2.0 \n",
"1 4.0 1.0 1.0 1.0 1.0 \n",
"2 1.0 4.0 1.0 3.0 1.0 \n",
"3 4.0 5.0 5.0 5.0 5.0 \n",
"4 1.0 1.0 1.0 1.0 1.0 \n",
"\n",
" value_for_money overall recommended \n",
"0 4.0 7.0 yes \n",
"1 1.0 2.0 no \n",
"2 2.0 3.0 no \n",
"3 5.0 10.0 yes \n",
"4 1.0 1.0 no "
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "d020ae5c",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"(22826, 13)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "71198928",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 22826 entries, 0 to 22825\n",
"Data columns (total 13 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 airline 22826 non-null object \n",
" 1 traveller_type 22826 non-null object \n",
" 2 cabin 22826 non-null object \n",
" 3 type_of_flight 22826 non-null object \n",
" 4 frequency 22826 non-null object \n",
" 5 seat_comfort 22826 non-null float64\n",
" 6 cabin_service 22826 non-null float64\n",
" 7 food_bev 22826 non-null float64\n",
" 8 entertainment 22826 non-null float64\n",
" 9 ground_service 22826 non-null float64\n",
" 10 value_for_money 22826 non-null float64\n",
" 11 overall 22826 non-null float64\n",
" 12 recommended 22826 non-null object \n",
"dtypes: float64(7), object(6)\n",
"memory usage: 2.3+ MB\n"
]
}
],
"source": [
"df.info()"
]
},
{
"cell_type": "markdown",
"id": "78dccb3f",
"metadata": {},
"source": [
"# Checking if the dataset is balanced or imbalanced"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "4b2c8d49",
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"no 0.515202\n",
"yes 0.484798\n",
"Name: recommended, dtype: float64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['recommended'].value_counts(1)"
]
},
{
"cell_type": "markdown",
"id": "c989ca49",
"metadata": {},
"source": [
"#### Observations:\n",
"- Proportion of 'no' and 'yes' is very close to 50:50.\n",
"- We can safely say that our data is balanced and we can use `accuracy` to evaluate our model"
]
},
{
"cell_type": "markdown",
"id": "ccd53c0d",
"metadata": {},
"source": [
"# Splitting Dataset into features and target"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "3ae893bc",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"X = df.drop(columns='recommended')\n",
"y = df['recommended']"
]
},
{
"cell_type": "markdown",
"id": "ed20d110",
"metadata": {},
"source": [
"## Train_test_split "
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "4086667a",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"shape of X_train = (18260, 12)\n",
"shape of X_test = (4566, 12)\n",
"shape of y_train = (18260,)\n",
"shape of y_test = (4566,)\n"
]
}
],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2, random_state=42, shuffle=True, stratify=y)\n",
"print(f\"shape of X_train = {X_train.shape}\")\n",
"print(f\"shape of X_test = {X_test.shape}\")\n",
"print(f\"shape of y_train = {y_train.shape}\")\n",
"print(f\"shape of y_test = {y_test.shape}\")"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "715bb8fa-f915-435f-880d-1034baba9225",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" airline | \n",
" traveller_type | \n",
" cabin | \n",
" type_of_flight | \n",
" frequency | \n",
" seat_comfort | \n",
" cabin_service | \n",
" food_bev | \n",
" entertainment | \n",
" ground_service | \n",
" value_for_money | \n",
" overall | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1104 | \n",
" Qatar Airways | \n",
" Solo Leisure | \n",
" Business Class | \n",
" Direct | \n",
" Rarely | \n",
" 3.0 | \n",
" 5.0 | \n",
" 5.0 | \n",
" 3.0 | \n",
" 1.0 | \n",
" 3.0 | \n",
" 4.0 | \n",
"
\n",
" \n",
" | 21051 | \n",
" Frontier Airlines | \n",
" Family Leisure | \n",
" Economy Class | \n",
" Direct | \n",
" Rarely | \n",
" 1.0 | \n",
" 4.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 4.0 | \n",
" 4.0 | \n",
" 8.0 | \n",
"
\n",
" \n",
" | 4020 | \n",
" American Airlines | \n",
" Business | \n",
" Economy Class | \n",
" Direct | \n",
" Rarely | \n",
" 1.0 | \n",
" 2.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 2.0 | \n",
"
\n",
" \n",
" | 9664 | \n",
" British Airways | \n",
" Couple Leisure | \n",
" Business Class | \n",
" Direct | \n",
" Occasionally | \n",
" 4.0 | \n",
" 3.0 | \n",
" 1.0 | \n",
" 4.0 | \n",
" 4.0 | \n",
" 2.0 | \n",
" 7.0 | \n",
"
\n",
" \n",
" | 3761 | \n",
" other | \n",
" Business | \n",
" Economy Class | \n",
" Direct | \n",
" Rarely | \n",
" 4.0 | \n",
" 4.0 | \n",
" 4.0 | \n",
" 5.0 | \n",
" 4.0 | \n",
" 3.0 | \n",
" 8.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" airline traveller_type cabin type_of_flight \\\n",
"1104 Qatar Airways Solo Leisure Business Class Direct \n",
"21051 Frontier Airlines Family Leisure Economy Class Direct \n",
"4020 American Airlines Business Economy Class Direct \n",
"9664 British Airways Couple Leisure Business Class Direct \n",
"3761 other Business Economy Class Direct \n",
"\n",
" frequency seat_comfort cabin_service food_bev entertainment \\\n",
"1104 Rarely 3.0 5.0 5.0 3.0 \n",
"21051 Rarely 1.0 4.0 1.0 1.0 \n",
"4020 Rarely 1.0 2.0 1.0 1.0 \n",
"9664 Occasionally 4.0 3.0 1.0 4.0 \n",
"3761 Rarely 4.0 4.0 4.0 5.0 \n",
"\n",
" ground_service value_for_money overall \n",
"1104 1.0 3.0 4.0 \n",
"21051 4.0 4.0 8.0 \n",
"4020 1.0 1.0 2.0 \n",
"9664 4.0 2.0 7.0 \n",
"3761 4.0 3.0 8.0 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train.head()"
]
},
{
"cell_type": "markdown",
"id": "958ddfb1",
"metadata": {},
"source": [
"## Preprocessing Data\n",
"- Ordinal Encoding shall be performed on `class`, `type_of_flight` and `frequency` columns.\n",
"- One Hot Encoding shall be performed on `airline` and `traveller_type` columns.\n",
"- Min Max Scaling shall be performed on all the columns to scale entire data between 0 and 1."
]
},
{
"cell_type": "markdown",
"id": "4e290f34",
"metadata": {},
"source": [
"### Ordinal Encoding 'class', 'type_of_flight' and 'frequency' columns"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "31234543",
"metadata": {},
"outputs": [],
"source": [
"ord_1 = OrdinalEncoder(categories=[[\"Economy Class\", \"Premium Economy\", \"Business Class\", \"First Class\"], [\"Direct\", \"Indirect\"], [\"Rarely\", \"Occasionally\", \"Often\"]])\n",
"\n",
"X_train[['cabin', 'type_of_flight', 'frequency']] = ord_1.fit_transform(X_train[['cabin', 'type_of_flight', 'frequency']])\n",
"X_test[['cabin', 'type_of_flight', 'frequency']] = ord_1.transform(X_test[['cabin', 'type_of_flight', 'frequency']])"
]
},
{
"cell_type": "markdown",
"id": "33bafc8e",
"metadata": {},
"source": [
"### One Hot Encoding 'airline' and 'traveller_type' columns"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "fd3c46e6",
"metadata": {},
"outputs": [],
"source": [
"ohe_cols = ['airline', 'traveller_type']\n",
"\n",
"ohe = OneHotEncoder(sparse_output=False, handle_unknown='ignore')\n",
"\n",
"for col in ohe_cols:\n",
" X_train_ohe = pd.DataFrame(ohe.fit_transform(X_train[[col]]), index = X_train.index, columns = sorted(X_train[col].unique()))\n",
" X_test_ohe = pd.DataFrame(ohe.transform(X_test[[col]]), index = X_test.index, columns = sorted(X_test[col].unique()))\n",
" X_train = pd.concat([X_train, X_train_ohe], axis = 1)\n",
" X_test = pd.concat([X_test, X_test_ohe], axis = 1)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "15de64e4",
"metadata": {},
"outputs": [],
"source": [
"# Dropping 'airline' and 'traveller_type' columns\n",
"X_train.drop(columns=ohe_cols, inplace=True)\n",
"X_test.drop(columns=ohe_cols, inplace=True)"
]
},
{
"cell_type": "markdown",
"id": "67f085ce",
"metadata": {},
"source": [
"### Scaling the datasets using MinMaxScaler"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "3ffaf180",
"metadata": {},
"outputs": [],
"source": [
"mms = MinMaxScaler()\n",
"\n",
"X_train_scaled = pd.DataFrame(mms.fit_transform(X_train), columns = X_train.columns)\n",
"X_test_scaled = pd.DataFrame(mms.transform(X_test), columns = X_test.columns)"
]
},
{
"cell_type": "markdown",
"id": "745258be",
"metadata": {},
"source": [
"### Encoding output column to integers (yes=1, no=0)\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "8bbd406d",
"metadata": {},
"outputs": [],
"source": [
"y_train.replace({'yes': 1, 'no': 0}, inplace=True)\n",
"y_test.replace({'yes': 1, 'no': 0}, inplace=True)"
]
},
{
"cell_type": "markdown",
"id": "a1240db4",
"metadata": {},
"source": [
"# Fitting Machine Learning Models"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "61117362",
"metadata": {},
"outputs": [],
"source": [
"result_df = pd.DataFrame(columns = [\"Model\", \"Accuracy_train\", \"Accuracy_test\", \"Recall\", \"Precision\"])"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "4aae5ffd",
"metadata": {},
"outputs": [],
"source": [
"# Defining a function to fit various models and save important parameters in a dataframe\n",
"\n",
"def fit_models(X_train, X_test, y_train, y_test, model, model_name):\n",
" \n",
" temp_result = pd.DataFrame(columns=['Model', 'Accuracy_train', 'Accuracy_test', 'Recall', 'Precision'])\n",
" \n",
" print(f\"Fitting {model_name} model... \")\n",
" print(\"--------------------------------------------------\")\n",
" \n",
" # Fitting model and taking predictions\n",
" model.fit(X_train, y_train)\n",
" y_pred = model.predict(X_test)\n",
" \n",
" # Calculating metrics\n",
" print(f\"Accuracy on Train Data: {model.score(X_train, y_train)}\")\n",
" print(f\"Accuracy on Test Data: {model.score(X_test, y_test)}\")\n",
" print(f\"F1-score: {f1_score(y_test, y_pred)}\")\n",
" print(f\"Recall: {recall_score(y_test, y_pred)}\")\n",
" print(f\"Precision: {precision_score(y_test, y_pred)} \\n\")\n",
" \n",
" # Displaying Confusion matrix\n",
" conf = confusion_matrix(y_test, y_pred)\n",
" plt.figure(figsize=(4,3))\n",
" sns.heatmap(conf, annot=True, fmt='d', cmap='Blues')\n",
" plt.title(f\"Confusion Matrix for {model_name} Model\")\n",
" plt.show()\n",
" \n",
" # Displaying Classification Report\n",
" print(f\"Classification Report for {model_name} Model\")\n",
" print(\"--------------------------------------------------\")\n",
" print(classification_report(y_test, y_pred))\n",
" \n",
" # Saving metrics in a dataframe\n",
" temp_result.loc[0] = [model_name, model.score(X_train, y_train), model.score(X_test, y_test), recall_score(y_test, y_pred), precision_score(y_test, y_pred)]\n",
" \n",
" return temp_result"
]
},
{
"cell_type": "markdown",
"id": "34724d99",
"metadata": {},
"source": [
"### 1. Logistic Regression"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "fe1aa1a3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting Logistic Regression model... \n",
"--------------------------------------------------\n",
"Accuracy on Train Data: 0.9588718510405257\n",
"Accuracy on Test Data: 0.9579500657030223\n",
"F1-score: 0.9565020389669233\n",
"Recall: 0.9534778681120144\n",
"Precision: 0.9595454545454546 \n",
"\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report for Logistic Regression Model\n",
"--------------------------------------------------\n",
" precision recall f1-score support\n",
"\n",
" 0 0.96 0.96 0.96 2352\n",
" 1 0.96 0.95 0.96 2214\n",
"\n",
" accuracy 0.96 4566\n",
" macro avg 0.96 0.96 0.96 4566\n",
"weighted avg 0.96 0.96 0.96 4566\n",
"\n"
]
}
],
"source": [
"model_1 = LogisticRegression(max_iter= 1000, random_state=42)\n",
"\n",
"output_1 = fit_models(X_train_scaled, X_test_scaled, y_train, y_test, model_1, \"Logistic Regression\")"
]
},
{
"cell_type": "markdown",
"id": "c3c3fd83",
"metadata": {},
"source": [
"### 2. Decision Tree Classifier"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "360d020d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting Decision Tree Classifier model... \n",
"--------------------------------------------------\n",
"Accuracy on Train Data: 0.9996166484118292\n",
"Accuracy on Test Data: 0.9384581690757775\n",
"F1-score: 0.9363533408833521\n",
"Recall: 0.9336043360433605\n",
"Precision: 0.939118582462517 \n",
"\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report for Decision Tree Classifier Model\n",
"--------------------------------------------------\n",
" precision recall f1-score support\n",
"\n",
" 0 0.94 0.94 0.94 2352\n",
" 1 0.94 0.93 0.94 2214\n",
"\n",
" accuracy 0.94 4566\n",
" macro avg 0.94 0.94 0.94 4566\n",
"weighted avg 0.94 0.94 0.94 4566\n",
"\n"
]
}
],
"source": [
"model_2 = DecisionTreeClassifier(random_state=42)\n",
"\n",
"output_2 = fit_models(X_train, X_test, y_train, y_test, model_2, \"Decision Tree Classifier\")"
]
},
{
"cell_type": "markdown",
"id": "5681a126",
"metadata": {},
"source": [
"### 3. Random Forest Classifier"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "5be3dfea",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting Random Forest Classifier model... \n",
"--------------------------------------------------\n",
"Accuracy on Train Data: 0.9996166484118292\n",
"Accuracy on Test Data: 0.9561979851073149\n",
"F1-score: 0.9545454545454546\n",
"Recall: 0.948509485094851\n",
"Precision: 0.9606587374199451 \n",
"\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report for Random Forest Classifier Model\n",
"--------------------------------------------------\n",
" precision recall f1-score support\n",
"\n",
" 0 0.95 0.96 0.96 2352\n",
" 1 0.96 0.95 0.95 2214\n",
"\n",
" accuracy 0.96 4566\n",
" macro avg 0.96 0.96 0.96 4566\n",
"weighted avg 0.96 0.96 0.96 4566\n",
"\n"
]
}
],
"source": [
"model_3 = RandomForestClassifier(random_state=42)\n",
"\n",
"output_3 = fit_models(X_train, X_test, y_train, y_test, model_3, \"Random Forest Classifier\")"
]
},
{
"cell_type": "markdown",
"id": "44921e10",
"metadata": {},
"source": [
"### 4. Support Vector Classifier"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "fdd9714b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting Support Vector Classifier model... \n",
"--------------------------------------------------\n",
"Accuracy on Train Data: 0.9644578313253012\n",
"Accuracy on Test Data: 0.9568550153307052\n",
"F1-score: 0.9553591661001587\n",
"Recall: 0.952122854561879\n",
"Precision: 0.9586175534333788 \n",
"\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAccAAAEnCAYAAADcuIgwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+9UlEQVR4nO3deXgN9/4H8PfJdrKI0+yLJULt+9aIIiIEFaqltkpjV1sbS6lq0YWU26K1pbR2Kre1laorllAEoU0tF92slUhEJBKRhc/vD79MnZwEJzKJuX2/+szz1MxnZr4zOWfe5zvLOToRERAREZHCoqwbQERE9LRhOBIRERXAcCQiIiqA4UhERFQAw5GIiKgAhiMREVEBDEciIqICGI5EREQFMByJiIgKKFY4njhxAgMHDoSvry9sbW1Rrlw5NGnSBLNnz8aNGzdKuo1Gfv75ZwQEBMBgMECn02HevHklvg6dTofp06eX+HIfZcWKFdDpdNDpdIiJiTGZLiJ49tlnodPp0LZt22KtY9GiRVixYoVZ88TExBTZpuKKiopC3bp1YWdnB51Oh/j4+BJbdmHOnDmD0NBQVK1aFba2tnB1dUWTJk0wevRopKenq7ru0jZz5kxs3rz5kXVbtmyBTqdDZGRkkTXR0dHQ6XSYM2dOCbYQ2L59e5m8xwBg69at6Nq1Kzw8PGBjYwNnZ2cEBQVh7dq1yM3NVerK6jiQb/r06dDpdEbjcnJy8Prrr8PLywuWlpZo1KgRAKBKlSoYMGBAqbSrbdu20Ol0qFq1Kgr7grX9+/crxzFzjzUPk398vHDhgtnzFrYvH0nMtGTJErGyspK6devKwoULZe/evbJz506ZOXOm+Pr6Svfu3c1dpFkaNWok1atXl+3bt0tsbKwkJCSU+DpiY2Pl8uXLJb7cR1m+fLkAEEdHR+nfv7/J9L179yrTAwICirWOunXrmj1vWlqaxMbGSlpaWrHWWVBSUpJYW1tL165dJSYmRmJjYyUzM7NEll2Yn376Sezs7KRJkyayfPly2bt3r3zzzTfy7rvvyrPPPivnz59Xbd1lwcHBQcLCwh5Zl5ubK56entK8efMia/r27SvW1taSlJRUgi0UGTVqlBTj8PNE7t27JwMGDBAA8sILL8iaNWtk37598t1338nYsWOlfPnyMm/ePKUegEybNq1U2/igy5cvS2xsrNG4efPmCQCZP3++HDp0SE6cOCEi91/jv//+e6m0KyAgQBwdHQWA7Nq1y2R6WFiYlC9fXgDI8uXLS2y9+cfH4rxfp02bZvbrzazqQ4cOiaWlpXTq1Enu3LljMj07O1u2bNliVgPMZWVlJSNGjFB1HWUl/48/ZMgQsbOzMwmj/v37i7+/f7ECLp858+bk5Ehubm6x1vMwBw4cEAASFRVVYst8WLi+9tpr4uDgIOnp6YVOv3fvXom1oyzdvn1bRB4/HEVEJk6cKADk5MmTJtNSU1PF1tZWevToUZLNFBH1wjF/HxRm1qxZAkDef//9QqcnJCTIjz/+qPy7rMOxMPnHBjXdu3fvofsxICBA6tatKy1atJB+/foZTUtPTxd7e3sZOnToPyscQ0JCxMrKSi5duvRY9Xfv3pVZs2ZJzZo1xcbGRtzc3CQ0NNSkV5a/s48ePSqtWrUSOzs78fX1lYiICLl7966I/L1jCg4iRW94YTtz9+7dEhAQIM7OzmJrayuVKlWSl19+2ejgWtib4uTJk9KtWzd55plnRK/XS8OGDWXFihVGNfk9u3Xr1sk777wjXl5e4ujoKEFBQXL27NlH7q/89u7evVvs7OwkMjJSmXbz5k2xs7OTpUuXFhpw06dPl+eee06cnJzE0dFRGjduLF9++aXRgd/Hx8dk//n4+Bi1fdWqVTJu3Djx9vYWnU4nZ86cUabt3btXRESSk5OlYsWK4u/vLzk5OcryT58+Lfb29oX2evOFhYWZtOHBbdmyZYu0aNFC7OzspFy5ctK+fXs5dOiQ0TLy/97Hjx+XHj16yDPPPCOenp5FrrNLly7i5eX1WCHo4+NTaLAEBAQYtTN/n6xevVrGjh0rHh4eYmtrK23atJGffvrJZJsdHBzk1KlT0q5dO7G3txdXV1cZNWqUSahnZWXJ22+/LVWqVBFra2vx9vaWkSNHSmpqqkk7u3TpIhs2bJBGjRqJXq+XSZMmFfoeediHoXPnzgkAGTdunMm0RYsWCQD5/vvvReT+QXPhwoXSsGFDsbW1lWeeeUZ69Oghf/zxh8m8P/zwg7Rr107Kly8vdnZ2UqtWLZk5c6ayPwprZ/779En3QWFycnLE2dlZatWq9dgfhgoeB5KSkmTEiBFSu3ZtcXBwEDc3NwkMDJT9+/cXuu8aNGggDg4OUq5cOalZs6ZMnjxZmZ6ZmSnjx4+XKlWqiF6vFycnJ2natKmsW7dOqSl4XCtsn+WHT2Gv27S0NGUd+fvxzTfflIyMDJPtHDVqlCxevFhq1aol1tbWsnjx4iL3S/7xesmSJWJra2v0d1myZInY29vL7t27Cw3HH3/8Udq1ayflypUTOzs78ff3l23btpmsIzY2Vlq2bCl6vV68vLzk7bffliVLlhQajuvXr5cWLVqIvb29ODg4SHBwsMl7UNVwzMvLE3t7e/Hz83vshQ8bNkwAyOjRo2XHjh0SGRkpbm5uUqlSJUlOTlbqAgICxMXFRapXry6RkZESHR0tI0eOFACycuVKEbn/woyNjRUA0rNnT4mNjVVOOTxuOJ4/f15sbW2lQ4cOsnnzZomJiZG1a9dKaGio0R+44Jvi7Nmz4ujoKNWqVZNVq1bJ999/L3379hUAMmvWLKUu/4BZpUoVefXVV+X777+Xr7/+WipXrizVq1eXvLy8h+6v/PbGxcVJaGioPPfcc8q0xYsXK72fwsJxwIAB8tVXX0l0dLRER0fLhx9+KHZ2dkafkn/66SepWrWqNG7cWNl/+S+i/LZXqFBBevbsKd99951s27ZNUlJSTMJR5H7vz8rKSsaOHSsi99/sderUkVq1apm8+R70+++/y8KFCwWAzJw5U2JjY+X06dMiIrJ27VoBIMHBwbJ582aJioqSpk2bio2NjdEn+vy/t4+Pj0yaNEmio6Nl8+bNRa7zo48+EgDSt29fiYmJeeinYnPDsVKlSvLiiy/K1q1bZc2aNfLss89K+fLljQIjLCxMbGxspHLlyjJjxgzZuXOnTJ8+XaysrCQkJESpu3fvnnTs2FGsrKzkvffek507d8onn3wiDg4O0rhxY6OzNT4+PuLl5SVVq1aVZcuWyd69e+Xo0aMSGxsrdnZ28sILLyh/4/z9W5RWrVqJu7u70QcdEZHmzZtLhQoVlNft0KFDxdraWsaPHy87duyQdevWSa1atcTDw0MSExOV+b788kvR6XTStm1bWbdunezatUsWLVokI0eOFJH7r4GePXsKAKWNsbGxcufOnRLZB4U5dOiQACgyPAtT2HFgxIgRsn79eomJiZFt27bJ4MGDxcLCwui98fXXXwsAGTNmjOzcuVN27dolkZGR8sYbbyg1w4cPF3t7e5kzZ47s3btXtm3bJh9//LHMnz9fqSl4XIuNjZUXXnhB7OzslH2Wf7q74Os2MzNTGjVqJK6urjJnzhzZtWuXfPbZZ2IwGKRdu3ZGHxDy3/cNGjSQdevWyZ49e+TUqVNF7pf8cExPTxcHBwdZtGiRMs3Pz09ee+01iYuLMwnHmJgYsba2lqZNm0pUVJRs3rxZgoODRafTyfr165W6/A/ZderUka+//lq2bNkiHTt2lMqVK5uE44wZM0Sn08mgQYNk27ZtsnHjRvH39xcHBwej172q4ZiYmCgApE+fPo9Vf+bMGQGgvCHyHTlyRADIO++8o4wLCAgQAHLkyBGj2jp16kjHjh2NG/z/n3Ie9Ljh+O233woAiY+Pf2jbC74p+vTpI3q93qTH3LlzZ7G3t5ebN2+KyN8HzBdeeMGo7t///rdyIHiYB8Mxf1n5L9LmzZvLgAEDROTRp0bv3r0rubm58sEHH4iLi4vRG6GoefPX16ZNmyKnPXgAEPn7NNWmTZskLCxM7OzslGsgD5O/vG+++caozd7e3lK/fn3lbIGIyK1bt8Td3V1atmypjMv/e0+dOvWR6xIRuXPnjnTv3l35tG1paSmNGzeWKVOmmFxLMzccmzRpYrR/L1y4INbW1jJkyBBlXH5P6bPPPjNa5owZMwSAHDhwQEREduzYIQBk9uzZRnVRUVECQJYsWWLUTktLSzl37pxJW805rSry9+tu48aNyrhTp04JAJkyZYqIiPLB9NNPPzWa9/Lly2JnZycTJ04Ukft/r/Lly0urVq0e2kMr6rRqSe2DgtavXy8AjM7GPMqjTqvm5eVJbm6uBAUFyUsvvaSMHz16tDzzzDMPXXa9evUeeX9GYce1/LMQBRV83UZERIiFhYXExcUZ1eUfA7dv366MAyAGg0Fu3Ljx0Pbkyw/H/PY0a9ZMRO6HGgCJiYkpNBxbtGgh7u7ucuvWLWVcXl6e1KtXTypWrKi8Xnr37i12dnZGH7jy8vKkVq1aRsfzS5cuiZWVlYwZM8aofbdu3RJPT0/p1auXMq444ajaoxx79+4FAJM7qJ577jnUrl0bu3fvNhrv6emJ5557zmhcgwYNcPHixRJrU6NGjWBjY4Nhw4Zh5cqV+PPPPx9rvj179iAoKAiVKlUyGj9gwADcvn0bsbGxRuO7detm9O8GDRoAgFnbEhAQgGrVqmHZsmU4efIk4uLiMGjQoIe2sX379jAYDLC0tIS1tTWmTp2KlJQUJCUlPfZ6e/To8di1b731Frp06YK+ffti5cqVmD9/PurXr//Y8z/o3LlzuHr1KkJDQ2Fh8ffLsly5cujRowcOHz6M27dvF6uter0emzZtwn//+1/MnTsXffr0QXJyMmbMmIHatWvj3LlzxWozAPTr18/oLjgfHx+0bNlSef0/6NVXXzWZF/j7vbJnzx4Apu+ZV155BQ4ODibvmQYNGqBGjRrFbnu+Xr16wdHREcuWLVPGLVu2DDqdDgMHDgQAbNu2DTqdDv3790deXp4yeHp6omHDhsqdzIcOHUJ6ejpGjhxp/t2BKLt98LgiIyPRpEkT2NrawsrKCtbW1ti9ezfOnDmj1Dz33HO4efMm+vbtiy1btuD69esmy3nuuefwww8/4O2330ZMTAyysrJKtJ3btm1DvXr10KhRI6O/V8eOHQu987xdu3ZwcnIyez2DBg3CsWPHcPLkSXz11VeoVq0a2rRpY1KXmZmJI0eOoGfPnihXrpwy3tLSEqGhobhy5YryPty7dy+CgoLg4eFhVNe7d2+jZf7nP/9BXl4eXnvtNaNttLW1RUBAwBPfXf/Y4ejq6gp7e3ucP3/+sepTUlIAAF5eXibTvL29len5XFxcTOr0en2JvmiqVauGXbt2wd3dHaNGjUK1atVQrVo1fPbZZw+dLyUlpcjtyJ/+oILbotfrAcCsbck/MK1ZswaRkZGoUaMGWrduXWjt0aNHERwcDABYunQpDh48iLi4OEyZMsXs9Ra2nQ9r44ABA3Dnzh14enoiNDT0sect6FGvl3v37iE1NbXYbQWA2rVrIzw8HGvWrMGlS5cwZ84cpKSk4L333it2uz09PQsdV/A1YWVlZfK6yJ83vzYlJQVWVlZwc3MzqtPpdIUu09ztL4q9vT369OmDHTt2IDExEXl5eVizZo3yAQ0Arl27BhGBh4cHrK2tjYbDhw8rAZCcnAwAqFixYrHaotY+qFy5MgA89vGrMHPmzMGIESPg5+eHDRs24PDhw4iLi0OnTp2M3mOhoaFYtmwZLl68iB49esDd3R1+fn6Ijo5Waj7//HNMmjQJmzdvRmBgIJydndG9e3f89ttvxW7fg65du4YTJ06Y/K0cHR0hIiaBXdzXUps2bVC9enV88cUXWL16NQYNGlToh6LU1FSIyGMdR1NSUop8XxXcRgBo3ry5yXZGRUUV+qHEHFaPW2hpaYmgoCD88MMPuHLlyiNf/PkHgoSEBJPaq1evwtXVtRjNLZytrS0AIDs7WwkiAIXunNatW6N169a4e/cujh07hvnz5yM8PBweHh7o06dPoct3cXFBQkKCyfirV68CQIluy4MGDBiAqVOnIjIyEjNmzCiybv369bC2tsa2bduUfQHgsZ51K8icT/sJCQkYNWoUGjVqhNOnT2PChAn4/PPPzV4nYPx6Kejq1auwsLAw+WRbnJ7Jg/OOHTsWH3zwAU6dOqWMt7W1RXZ2tkn99evXC/07JyYmFjquYBDm5eUhJSXFaHz+vPnjXFxckJeXh+TkZKNwEBEkJiaiefPmJttQUgYPHoylS5di1apVqFGjBpKSkvDpp58q011dXaHT6fDjjz8avcfy5Y/Lb/eVK1eK1Q619kGzZs3g7OyMLVu2ICIiolj7bs2aNWjbti0WL15sNP7WrVsmtQMHDsTAgQORmZmJ/fv3Y9q0aQgJCcGvv/4KHx8fODg44P3338f777+Pa9euKb3Irl274uzZs2a3rSBXV1fY2dkZnQ0oOP1BT/JaGjhwIN59913odDqEhYUVWuPk5AQLC4vHOo66uLgU+b56UH79t99+Cx8fn2K3vyhmnVadPHkyRARDhw5FTk6OyfTc3Fxs3boVwP1uOnD/BfWguLg4nDlzBkFBQcVts4kqVaoAuP/lBA/Kb0thLC0t4efnh4ULFwIAfvrppyJrg4KCsGfPHuWPmG/VqlWwt7dHixYtitnyh6tQoQLeeustdO3atcgXHXD/hW1lZQVLS0tlXFZWFlavXm1SW1K98bt376Jv377Q6XT44YcfEBERgfnz52Pjxo3FWl7NmjVRoUIFrFu3zujB4szMTGzYsAH+/v6wt7cv1rILe0MC99+U6enpyidX4P5rqeDr6Ndffy3y1OvXX39t1N6LFy/i0KFDhX5Jw9q1a43+vW7dOgBQavPfEwXfMxs2bEBmZuZjv2eK8zf28/NDvXr1sHz5cixfvhwGg8HotHVISAhEBH/99ReaNWtmMuSfTm/ZsiUMBgMiIyMLfUD8wTYCpmc1SmofFGRtbY1Jkybh7Nmz+PDDDwutSUpKwsGDB4tchk6nM/lgcOLECZPLKg9ycHBA586dMWXKFOTk5OD06dMmNR4eHhgwYAD69u2Lc+fOmVw+KI6QkBD88ccfcHFxKfTvlX/MLAlhYWHo2rUr3nrrLVSoUKHQGgcHB/j5+WHjxo1Gf/N79+5hzZo1qFixonJ6PDAwELt371Z6hsD9401UVJTRMjt27AgrKyv88ccfhW5js2bNnmi7HrvnCAD+/v5YvHgxRo4ciaZNm2LEiBGoW7cucnNz8fPPP2PJkiWoV68eunbtipo1a2LYsGGYP38+LCws0LlzZ1y4cAHvvfceKlWqhLFjxz5Rwx/0wgsvwNnZGYMHD8YHH3wAKysrrFixApcvXzaqi4yMxJ49e9ClSxdUrlwZd+7cUT5ZtW/fvsjlT5s2Ddu2bUNgYCCmTp0KZ2dnrF27Ft9//z1mz54Ng8FQYttS0Mcff/zImi5dumDOnDno168fhg0bhpSUFHzyySeFfsKvX78+1q9fj6ioKOXbYopznXDatGn48ccfsXPnTnh6emL8+PHYt28fBg8ejMaNG8PX19es5VlYWGD27Nl49dVXERISguHDhyM7Oxv/+te/cPPmzcfaD0UZNmwYbt68iR49eqBevXqwtLTE2bNnMXfuXFhYWGDSpElKbWhoKPr374+RI0eiR48euHjxImbPnm1ymi9fUlISXnrpJQwdOhRpaWmYNm0abG1tMXnyZKM6GxsbfPrpp8jIyEDz5s1x6NAhfPTRR+jcuTNatWoFAOjQoQM6duyISZMmIT09Hc8//zxOnDiBadOmoXHjxo992rp+/fqIiYnB1q1b4eXlBUdHR9SsWfOR8w0aNAjjxo3DuXPnMHz4cNjZ2SnTnn/+eQwbNgwDBw7EsWPH0KZNGzg4OCAhIQEHDhxA/fr1MWLECJQrVw6ffvophgwZgvbt22Po0KHw8PDA77//jl9++QULFixQ2ggAs2bNQufOnWFpaYkGDRqU2D4ozFtvvYUzZ85g2rRpOHr0KPr164dKlSohLS0N+/fvx5IlS/D+++/j+eefL3T+kJAQfPjhh5g2bRoCAgJw7tw5fPDBB/D19UVeXp5SN3ToUNjZ2eH555+Hl5cXEhMTERERAYPBoPR8/fz8EBISggYNGsDJyQlnzpzB6tWrn+hD4IPCw8OxYcMGtGnTBmPHjkWDBg1w7949XLp0CTt37sT48ePh5+f3xOsB7p8WfZyzVBEREejQoQMCAwMxYcIE2NjYYNGiRTh16hS+/vprpff67rvv4rvvvkO7du0wdepU2NvbY+HChcjMzDRaXpUqVfDBBx9gypQp+PPPP9GpUyc4OTnh2rVrOHr0qNI7Lzazbt/5f/Hx8RIWFiaVK1cWGxsb5TbrqVOnGt39l/+cY40aNcTa2lpcXV2lf//+RT7nWFBYWJjyHF4+FHK3qojI0aNHpWXLluLg4CAVKlSQadOmyZdffml0d1NsbKy89NJL4uPjI3q9XlxcXCQgIEC+++47k3UU9pxj165dxWAwiI2NjTRs2NDkGZ7C7sIUuf8ICR7jgdgH71Z9mMLuOF22bJnUrFlT9Hq9VK1aVSIiIuSrr74yufX5woULEhwcrHzDRcHnHAu2/cFp+Xer7ty5UywsLEz2UUpKilSuXFmaN28u2dnZRbb/YevavHmz+Pn5ia2trTg4OEhQUJAcPHjQqCb/zrMHHwd6mP/85z8yaNAgqVOnjhgMBrGyshIvLy95+eWXTe4gvnfvnsyePVuqVq0qtra20qxZM9mzZ89Dn3N84403xM3NTfR6vbRu3VqOHTtmtMz8OwxPnDghbdu2FTs7O3F2dpYRI0aYPPaSlZUlkyZNEh8fH7G2thYvLy8ZMWJEkc/4FSY+Pl6ef/55sbe3f+Rzjg9KTk4WGxsbAVDkIxHLli0TPz8/cXBwEDs7O6lWrZq89tprJtu8fft2CQgIEAcHB+W2/Acfe8rOzpYhQ4aIm5ub6HQ6k+ccn3QfPMyWLVukS5cu4ubmJlZWVuLk5CSBgYESGRlp9LoteBzIzs6WCRMmSIUKFcTW1laaNGkimzdvNjlOrVy5UgIDA8XDw0NsbGzE29tbevXqZXQn99tvvy3NmjUTJycn5T07duxYuX79ulLzJHeriohkZGTIu+++qzxnbjAYpH79+jJ27FijO0GLOqYWpajj9YMKu1tV5O/nHPNfPy1atJCtW7eazH/w4EFp0aKF6PV68fT0lLfeeqvI5xw3b94sgYGBUr58edHr9eLj4yM9e/Y0+vae4tytqhN5yLkPIipUTEwMAgMD8c0336Bnz54PrR0wYAC+/fZbZGRklFLriOhJ8Vc5iIiICmA4EhERFcDTqkRERAWw50hERFQAw5GIiKgAhiMREVEBDEciIqICzPqGHCp9do1Hl3UTqBSlxi0o6yZQKbJ9giOwuceGrJ/52jIHw5GISIt0PPGnJoYjEZEWleCvspAphiMRkRax56gqhiMRkRax56gqhiMRkRax56gqhiMRkRax56gqhiMRkRZZWJZ1C/6nMRyJiLSIp1VVxXAkItIinlZVFcORiEiL2HNUFcORiEiL2HNUFcORiEiL2HNUFcORiEiLGI6qYjgSEWmRBU+rqonhSESkRew5qorhSESkRbwhR1UMRyIiLeI35KiK4UhEpEU8raoqhiMRkRbxtKqqGI5ERFrEnqOqGI5ERFrEnqOqGI5ERFrEnqOqGI5ERFrEnqOq+NGDiEiLdBbmDWaIiIhA8+bN4ejoCHd3d3Tv3h3nzp0zqhERTJ8+Hd7e3rCzs0Pbtm1x+vRpo5rs7GyMGTMGrq6ucHBwQLdu3XDlyhWjmtTUVISGhsJgMMBgMCA0NBQ3b94s1i4pSQxHIiItUjEc9+3bh1GjRuHw4cOIjo5GXl4egoODkZmZqdTMnj0bc+bMwYIFCxAXFwdPT0906NABt27dUmrCw8OxadMmrF+/HgcOHEBGRgZCQkJw9+5dpaZfv36Ij4/Hjh07sGPHDsTHxyM0NPTJ988T0omIlHUjqGh2jUeXdROoFKXGLSjrJlApsn2CC1t2L35hVn3WluHFXldycjLc3d2xb98+tGnTBiICb29vhIeHY9KkSQDu9xI9PDwwa9YsDB8+HGlpaXBzc8Pq1avRu3dvAMDVq1dRqVIlbN++HR07dsSZM2dQp04dHD58GH5+fgCAw4cPw9/fH2fPnkXNmjWL3eYnxZ4jEZEW6XRmDdnZ2UhPTzcasrOzH2tVaWlpAABnZ2cAwPnz55GYmIjg4GClRq/XIyAgAIcOHQIAHD9+HLm5uUY13t7eqFevnlITGxsLg8GgBCMAtGjRAgaDQakpKwxHIiItMvO0akREhHJdL3+IiIh45GpEBOPGjUOrVq1Qr149AEBiYiIAwMPDw6jWw8NDmZaYmAgbGxs4OTk9tMbd3d1kne7u7kpNWeHdqkREWmTm3aqTJ0/GuHHjjMbp9fpHzjd69GicOHECBw4cKKQJxm0QEZNxBRWsKaz+cZajNvYciYg0SKfTmTXo9XqUL1/eaHhUOI4ZMwbfffcd9u7di4oVKyrjPT09AcCkd5eUlKT0Jj09PZGTk4PU1NSH1ly7ds1kvcnJySa90tLGcCQi0iBzw9EcIoLRo0dj48aN2LNnD3x9fY2m+/r6wtPTE9HR0cq4nJwc7Nu3Dy1btgQANG3aFNbW1kY1CQkJOHXqlFLj7++PtLQ0HD16VKk5cuQI0tLSlJqywtOqRERapOJZx1GjRmHdunXYsmULHB0dlR6iwWCAnZ0ddDodwsPDMXPmTFSvXh3Vq1fHzJkzYW9vj379+im1gwcPxvjx4+Hi4gJnZ2dMmDAB9evXR/v27QEAtWvXRqdOnTB06FB88cX9u2+HDRuGkJCQMr1TFWA4EhFpkprX5BYvXgwAaNu2rdH45cuXY8CAAQCAiRMnIisrCyNHjkRqair8/Pywc+dOODo6KvVz586FlZUVevXqhaysLAQFBWHFihWwtPz7tyjXrl2LN954Q7mrtVu3bliwoOwfaeJzjk85Puf4z8LnHP9ZnuQ5R8feK82qvxUVVvyV/QOx50hEpEEWFrxlRE0MRyIiLeL3jquK4UhEpEFl/Rzg/zqGIxGRBjEc1cVwJCLSIIajuhiOREQaxHBUF8ORiEiLmI2qYjgSEWkQe47qYjgSEWkQw1FdDEciIg3SWTAc1cRwJCLSIPYc1cVwJCLSIIajuhiOREQaxHBUF8ORiEiDGI7qYjgSEWkRs1FVDEciIg1iz1FdDEciIg1iOKqL4UglbsKgYHRv1xA1qnggKzsXR375E1M+24LfLiYBAKysLDB9ZFd0bFUXvhVdkJ5xB3uOnMV7n3+HhOQ0o2X5NfDF9FEhaF6/CnLz7uLEub/w4uhFuJOdCwCYOLgjOreuiwY1KiInLw9ebSaW+vbS48nMzMDCzz/Dnt27cONGCmrVroOJb7+DevUbAAB2Re/Et/+Owpn/nsLNmzcR9e1m1Kpdu4xb/fRiOKqLPyVNJa51k2cRGbUfAa99gpARC2BpaYlti0fD3tYGAGBva4NGtSvh46U/wL/vLPQZvxTVK7vjm3nDjZbj18AXWxaMxO7DZ9G6/7/Qqv+/EBm1D/fuiVJjY22JjdE/Y+m3P5bqNpL5pk99F7GxhzDj49n4dtNW+Ld8HsOHDMS1a9cAAFlZt9GocWO8OXZCGbdUI3RmDmQW9hypxL04epHRv4dPX4PLez5G4zqVcPCnP5CecQchIxYY1Yyb9Q0OrJ2ISp5OuJyYCgCYPf5lLFofg0+WRyt1f1xKNprvo8jtAID+Xf3U2BQqIXfu3MHu6J2YN38RmjZrDgAYMWoM9u7ehW/Wr8PoN8eia7fuAIC//rpShi3VDgsL9m3UxL1LqitfzhYAkJp2u+gaRzvcu3cPN29lAQDcnMrhuQa+SL6Rgb0rxuHCrpnY+eWbaNmoaqm0mUrW3bt5uHv3LvR6vdF4va0tfv75pzJqlbbpdDqzBjIPw7GEXLlyBVOmTEFgYCBq166NOnXqIDAwEFOmTMHly5fLunllatb4Hjj40+/47x8JhU7X21jhwzdeRNQPx3Ar8w4AwLeiKwBgyvAXsGzjIbw4ahHiz1zG9i/GoFplt1JrO5UMB4dyaNioMZZELkJS0jXcvXsX27ZuwckTvyA5Oamsm6dJDEd1MRxLwIEDB1C7dm1s2rQJDRs2xGuvvYb+/fujYcOG2Lx5M+rWrYuDBw8+cjnZ2dlIT083GuTe3VLYAvXMfbsX6lf3RtjkFYVOt7KywOqPB8JCp8ObEf9Wxlv8/5cqf7XhAFZ/dxi/nLuCiZ9uxK8XkhD2on9pNJ1K2IyI2RARdAhsg+aN62PdmtXo3CUElhaWZd00beI1R1XxmmMJGDt2LIYMGYK5c+cWOT08PBxxcXEPXU5ERATef/99o3GWHs1h7fVcibW1NM2Z9ApCAuqj/eB5+Cvppsl0KysLrJ01GD4VXNB52Hyl1wgACcnpAIAzfyYazXPufCIqeTqp2m5SR6XKlbFs5Rrcvn0bmZkZcHNzx1vjw1GhYsWybpomsTeoLvYcS8CpU6fw+uuvFzl9+PDhOHXq1COXM3nyZKSlpRkNVh5NS7KppWbupFfwYruG6DT8c1y8mmIyPT8Yq1V2Q5fXF+BGWqbR9ItXU3A16SZqVHE3Gv+sjzsuJdxQte2kLnt7e7i5uSM9LQ2xBw+gbWBQWTdJk3haVV3sOZYALy8vHDp0CDVr1ix0emxsLLy8vB65HL1eb3LDgk6Dp5zmTe6F3p2b4ZWxS5CReQceLo4AgLSMO7iTnQtLSwus+9cQNK5VCS+/GQlLC51ScyPtNnLz7p9KnrtyF959vQtO/voXfjl3Bf27+qFmFQ/0e+srZV2VPJ3gVN4elbycYGlhgQY1KgAA/ricjMysnFLecnqYgwd+BETg4+uLy5cuYe4ns+FTxRcvvvQyACDt5k0kJCQo1yAvXDgPAHB1dYWrG68zF8S8UxfDsQRMmDABr7/+Oo4fP44OHTrAw8MDOp0OiYmJiI6Oxpdffol58+aVdTNLzfBebQAA0V+GG40fOnU11mw9ggruz6Br2/sPfh+NmmxUEzzkM/x4/DcAwIJ1MbDVW2P2+B5wMtjj5K9/IWTEApy/cl2pf29EF4R2a6H8+8j/L+/B5dDTISPjFj6fNwfXEhNhMDyDoA7BGPPmWFhbWwMAYvbuwdR3/349TJowFgDw+sjRGDFqTJm0+WnG3qC6dCIijy6jR4mKisLcuXNx/Phx3L17v+djaWmJpk2bYty4cejVq1exlmvXeHRJNpOecqlxCx5dRP8zbJ+ge1Jj4g6z6n+d3an4K/sHYs+xhPTu3Ru9e/dGbm4url+/37NxdXVVPhUTEZWk/Du6SR0MxxJmbW39WNcXiYieBMNRXQxHIiIN4iVHdTEciYg0iDfkqIvhSESkQcxGdTEciYg0iD1HdTEciYg0iOGoLoYjEZEGMRvVxXAkItIg9hzVxXAkItIgPueoLoYjEZEGseOoLoYjEZEG8bSquhiOREQaxGxUF8ORiEiD2HNUl0VZN4CIiMyn05k3mGP//v3o2rUrvL29odPpsHnzZqPpAwYMgE6nMxpatGhhVJOdnY0xY8bA1dUVDg4O6NatG65cuWJUk5qaitDQUBgMBhgMBoSGhuLmzZvF2Bslj+FIRKRBBcPpUYM5MjMz0bBhQyxYUPTvi3bq1AkJCQnKsH37dqPp4eHh2LRpE9avX48DBw4gIyMDISEhyu/dAkC/fv0QHx+PHTt2YMeOHYiPj0doaKh5O0IlPK1KRKRBap5V7dy5Mzp37vzQGr1eD09Pz0KnpaWl4auvvsLq1avRvn17AMCaNWtQqVIl7Nq1Cx07dsSZM2ewY8cOHD58GH5+fgCApUuXwt/fH+fOnUPNmjVLdqPMxJ4jEZEGmdtzzM7ORnp6utGQnZ1d7PXHxMTA3d0dNWrUwNChQ5GUlKRMO378OHJzcxEcHKyM8/b2Rr169XDo0CEAQGxsLAwGgxKMANCiRQsYDAalpiwxHImINMjCQmfWEBERoVzbyx8iIiKKte7OnTtj7dq12LNnDz799FPExcWhXbt2StgmJibCxsYGTk5ORvN5eHggMTFRqXF3dzdZtru7u1JTlnhalYhIg8y9jjh58mSMGzfOaJxery/Wunv37q38f7169dCsWTP4+Pjg+++/x8svv1zkfCJi1O7CtqFgTVlhOBIRaZC5+aHX64sdho/i5eUFHx8f/PbbbwAAT09P5OTkIDU11aj3mJSUhJYtWyo1165dM1lWcnIyPDw8VGmnOXhalYhIg9S8W9VcKSkpuHz5Mry8vAAATZs2hbW1NaKjo5WahIQEnDp1SglHf39/pKWl4ejRo0rNkSNHkJaWptSUJfYciYg0SM28y8jIwO+//678+/z584iPj4ezszOcnZ0xffp09OjRA15eXrhw4QLeeecduLq64qWXXgIAGAwGDB48GOPHj4eLiwucnZ0xYcIE1K9fX7l7tXbt2ujUqROGDh2KL774AgAwbNgwhISElPmdqgDDkYhIk9TsDR47dgyBgYHKv/OvVYaFhWHx4sU4efIkVq1ahZs3b8LLywuBgYGIioqCo6OjMs/cuXNhZWWFXr16ISsrC0FBQVixYgUsLS2VmrVr1+KNN95Q7mrt1q3bQ5+tLE06EZGybgQVza7x6LJuApWi1Lin48BApcP2CbonQfNjzarfPca/+Cv7B2LPkYhIgyyegjs6/5cxHImINIjZqC6GIxGRBj0NzwL+L2M4EhFpkKUFw1FNDEciIg1ix1FdDEciIg3SgemoJoYjEZEG8ayquhiOREQaxBty1MVwJCLSIGajuhiOREQaxC8BUBfDkYhIg5iN6mI4EhFpEK85qovhSESkQfwSAHUxHImINIjRqC6GIxGRBvG0qroYjkREGsSzqupiOBIRaRB7jupiOBIRaRCzUV0MRyIiDWLPUV0MRyIiDeI1R3UxHImINIg9R3UxHImINMiS4agqhiMRkQYxG9XFcCQi0iCeVlUXw5GISIOYjepiOBIRaRB/z1FdDEciIg1iNqqL4UhEpEG85qguhuNT7sbRBWXdBCpFTp0+LusmUCnK2vV2see1KMF2kCmGIxGRBrHnqC6GIxGRBlmx66gqhiMRkQax56guhiMRkQbxi8fVxXAkItIgdhzVxXAkItIgfgmAuhiOREQaxPtx1MVwJCLSIHYc1cVwJCLSIJ5WVRfDkYhIg5iN6mI4EhFpEB/lUBfDkYhIgyyZjqpiOBIRaRCzUV28G5iISIN0Zv5njv3796Nr167w9vaGTqfD5s2bjaaLCKZPnw5vb2/Y2dmhbdu2OH36tFFNdnY2xowZA1dXVzg4OKBbt264cuWKUU1qaipCQ0NhMBhgMBgQGhqKmzdvFmd3lDiGIxGRBlnozBvMkZmZiYYNG2LBgsJ/Mm/27NmYM2cOFixYgLi4OHh6eqJDhw64deuWUhMeHo5NmzZh/fr1OHDgADIyMhASEoK7d+8qNf369UN8fDx27NiBHTt2ID4+HqGhocXaHyVNJyJS1o2gomXllnULqDQ5d+bvOf6TPMnvOc7e+4dZ9RMDqxVrPTqdDps2bUL37t0B3O81ent7Izw8HJMmTQJwv5fo4eGBWbNmYfjw4UhLS4ObmxtWr16N3r17AwCuXr2KSpUqYfv27ejYsSPOnDmDOnXq4PDhw/Dz8wMAHD58GP7+/jh79ixq1qxZrPaWFPYciYg0SKfTmTWUlPPnzyMxMRHBwcHKOL1ej4CAABw6dAgAcPz4ceTm5hrVeHt7o169ekpNbGwsDAaDEowA0KJFCxgMBqWmLPGGHCIiDTL3VGl2djays7ONxun1euj1erOWk5iYCADw8PAwGu/h4YGLFy8qNTY2NnBycjKpyZ8/MTER7u7uJst3d3dXasoSe45ERBqk05k3REREKDe+5A8RERFPsH7jdBaRR/ZQC9YUVv84yykNDEciIg2y0OnMGiZPnoy0tDSjYfLkyWav19PTEwBMendJSUlKb9LT0xM5OTlITU19aM21a9dMlp+cnGzSKy0LDEciIg2ytDBv0Ov1KF++vNFg7ilVAPD19YWnpyeio6OVcTk5Odi3bx9atmwJAGjatCmsra2NahISEnDq1Cmlxt/fH2lpaTh69KhSc+TIEaSlpSk1ZYnXHImINMjCzGcXzZGRkYHff/9d+ff58+cRHx8PZ2dnVK5cGeHh4Zg5cyaqV6+O6tWrY+bMmbC3t0e/fv0AAAaDAYMHD8b48ePh4uICZ2dnTJgwAfXr10f79u0BALVr10anTp0wdOhQfPHFFwCAYcOGISQkpMzvVAUYjkREmqTmZbljx44hMDBQ+fe4ceMAAGFhYVixYgUmTpyIrKwsjBw5EqmpqfDz88POnTvh6OiozDN37lxYWVmhV69eyMrKQlBQEFasWAFLS0ulZu3atXjjjTeUu1q7detW5LOVpY3POT7l+JzjPwufc/xneZLnHCNjL5hV/7p/lWKv65+IPUciIg3i7zmqi+FIRKRBzEZ1MRyJiDSIPUd1MRyJiDSI2aguhiMRkQbxIXV1MRyJiDSIp1XVxXAkItIghqO6GI5ERBrEaFQXw5GISIPYcVQXw5GISIOehp91+l/GcCQi0iDeraouhiMRkQax56guhiMRkQYxGtXFcCQi0iD2HNXFcCQi0iBLhqOqGI5ERBrEaFQXw5GISIPYcVQXw5GISIMs2HdUFcORiEiD2HNUF8ORiEiDdOw5qorhSESkQew5qovhSESkQbzmqC6GIxGRBrHnqC6GIxGRBjEc1cVwJCLSIH5DjroYjkREGsS7VdXFcCQi0iB2HNXFcKRScfxYHFYu/wpn/nsKycnJmPPZQrQLaq9MFxFELlqAjd9GIT09HfXqN8Tkd6fi2WerGy3nl/ifseDzuTh58gSsrKxQs2ZtLIxcCltb29LeJPp/E/q2QPdWNVGjkjOysvNw5L9/YcrSGPx25YZS82KrGhgc0giNq3vC1WAPv+HLcOKPJKPl2Fhb4uPh7fBKYG3Y2Vhh788XEf75Tvx1/ZZS82wFJ8wc3g7+dSvAxsoSp88nY/ry/dj/y6VS296nBXuO6uKPSVOpyMq6jRo1a+Ltd6YWOn3FsqVYs2o53n5nKtau/xaurq4YMXQgMjMzlJpf4n/GqNeHwL9lK6z5+husXf8t+vR7FRYWfBmXpdYNKiNyy08IGLMaIZOiYGlpgW2zesPe1lqpsbe1Ruypv/DelzFFLudfI4PQ7fnqeG3GFgSNXYtydjbY8FFPWFj8HQKbZrwCK0sdOk/4Gi1HrsAvf1zDxo96wsPJQc1NfCpZ6MwbyDzsOVKpaNU6AK1aBxQ6TUSwdvUqDBn2OoI6BAMAPpw5C+0CWuKH77ehZ68+AIBPZkeg76uhGDRkmDKvj08V1dtOD/fi5H8b/Xv4v77H5Q1vonF1Txw8eRkA8PWu0wCAyh6GQpdR3kGPAZ0aYvCsrdj700UAwKCPt+K3dSPRrkkV7Dp2Hi7l7fBsRWe8/sl2nDqfDAB478t9eP3FpqhdxRXXUjPV2sSnEnuO6uJHbipzf125guvXk+HfspUyzsbGBs2aNUd8/M8AgBspKTh54hc4O7vgtVf7oF2blhg8oD9+/ulYWTWbilDeQQ8ASL2V9djzNK7uCRtrS+w6dl4Zl5CSgdMXrqNFnQoAgJT0LJy5eB39guvB3tYalhY6DAlphMQbGfj518SS3QgN0OnMG8g8DMdScvnyZQwaNKism/FUun79fi/A2cXFaLyziytSrl8HAFy5cr8HErloAV7u+QoWffElatWug2GDB+DixQul2l56uFmvB+Hgycv474Xrjz2Pp7MDsnPycDMj22h8UmomPJz/PmUaMnE9GlbzQPJ343Dzh7cwpkdzvDj530jLzC64yP95OjMHMg/DsZTcuHEDK1eufGhNdnY20tPTjYbs7H/Om15X4OOtiCifeO/duwcA6PFKb3R/qQdq1a6Dtya9gypVfLFl44bSbioVYe6YDqhf1R1hM74rkeXpdIDI3/+e92ZHJN+8jfZj16D1qJXYeug3bPyoJzyd/4nXHHVmDWQeXnMsId999/CDwZ9//vnIZUREROD99983GvfOu9Pw7tTpT9K0p56rqxsAIOX6dbi5uSvjU2+kwNnFFQDg5na/plq1akbz+lathoTEq6XUUnqYOaM7IMS/OtqPW2t0h+njSLyRCb2NFZ4ppzfqPbo944DDp/8CALRt7IMX/KrB66V5uHU7BwAQ/vlOBDWpgv7B9fHJ+sMltzEawLxTF8OxhHTv3h06nQ7y4MfcAgr2jAqaPHkyxo0bZzTunoW+RNr3NKtQsSJcXd0QG3sQtWrXAQDk5ubg2LE4hI+dAADwrlARbu7uuHDhvNG8Fy9ewPOt2pR6m8nY3NEd0K1VDQSPX4eLiWlmz//zb4nIyb2LoKa+2LDvLID7p1rrVnHFlKV7AQD2+vt3v967Z/weuyfyyPfW/yLekKMuhmMJ8fLywsKFC9G9e/dCp8fHx6Np06YPXYZer4debxyGWbkl1cKydft2Ji5d+vtZtL/+uoKzZ8/AYDDAy8sbr4a+hq+WfgGfylVQ2ccHXy79Ana2tujcJQTA/Q8WYQMHI3LhfNSoWQs1a9XG1i2bcOH8n/hkzudltVkEYN4bwejdrg5emboBGbdzlMcq0jKzcScnDwDg5GiLSu7l4eVSDgBQo5IzAODajUxcS81EemY2Vuz4BR8Pb4eU9Cyk3rqDiGGBOHU+GXt+ugAAOPLfv5CacQdfTgrBzNUHkZWdi0FdGqGK5zPYceSP0t/wMvYP/DxQqnTysK4OPbZu3bqhUaNG+OCDDwqd/ssvv6Bx48bKtbPH9b8SjnFHj2DooNdMxnd98SV8OONj5UsANnwThfT0NNRv0BCTp0zFs9VrGNUv+3IJor5ei7T0NNSoUQtjx09A4ybNSmszVOfc+eOyboLZsna9Xej4obO/x5qdJwEA/YPrY+nELiY1H606gBmrDgAA9NaWiBjeDr3a1XngSwD+gyvJf5+ibVLDE9MHtUGTGl6wtrTAmYvXMXP1QeyMe/Rli6dRUfvuccT9aV4PvXnVwh+jocIxHEvIjz/+iMzMTHTq1KnQ6ZmZmTh27BgCAgp/1q8o/yvhSI9Hi+FIxfdE4XjezHD0ZTiag6dVS0jr1q0fOt3BwcHsYCQiKgqvOaqL4UhEpEG85qguhiMRkQYxG9XFcCQi0iKmo6r4DTlERBqk5jfkTJ8+HTqdzmjw9PRUposIpk+fDm9vb9jZ2aFt27Y4ffq00TKys7MxZswYuLq6wsHBAd26dcOVK1dKZNtLA8ORiEiD1P5u1bp16yIhIUEZTp48qUybPXs25syZgwULFiAuLg6enp7o0KEDbt36+7Gb8PBwbNq0CevXr8eBAweQkZGBkJAQ3L17t7ibXKp4WpWISItUPq1qZWVl1FvMJyKYN28epkyZgpdffhkAsHLlSnh4eGDdunUYPnw40tLS8NVXX2H16tVo3/7+j5qvWbMGlSpVwq5du9CxY0d1G18C2HMkItIgnZn/meu3336Dt7c3fH190adPH+X7oc+fP4/ExEQEBwcrtXq9HgEBATh06BAA4Pjx48jNzTWq8fb2Rr169ZSapx17jkREGmTuoxzZ2dkmv/JT2FdWAoCfnx9WrVqFGjVq4Nq1a/joo4/QsmVLnD59GomJ938708PDw2geDw8PXLx4/4eqExMTYWNjAycnJ5Oa/Pmfduw5EhFpkLnXHCMiImAwGIyGiIiIQpfduXNn9OjRA/Xr10f79u3x/fffA4DRz+4V/hNzD0/sx6l5WjAciYi0yMx0nDx5MtLS0oyGyZMnP9aqHBwcUL9+ffz222/KdciCPcCkpCSlN+np6YmcnBykpqYWWfO0YzgSEWmQudcc9Xo9ypcvbzQUdkq1MNnZ2Thz5gy8vLzg6+sLT09PREdHK9NzcnKwb98+tGzZEgDQtGlTWFtbG9UkJCTg1KlTSs3TjtcciYg0SM2zkxMmTEDXrl1RuXJlJCUl4aOPPkJ6ejrCwsKg0+kQHh6OmTNnonr16qhevTpmzpwJe3t79OvXDwBgMBgwePBgjB8/Hi4uLnB2dsaECROU07RawHAkItIgNcPxypUr6Nu3L65fvw43Nze0aNEChw8fho+PDwBg4sSJyMrKwsiRI5Gamgo/Pz/s3LkTjo6OyjLmzp0LKysr9OrVC1lZWQgKCsKKFStgaWmpXsNLEH+y6inHn6z6Z+FPVv2zPMlPVp1NuG1WfS0v+2Kv65+IPUciIg3SyE2fmsVwJCLSIGajuhiORERaxHRUFcORiEiDivOVcPT4GI5ERBrEa47qYjgSEWkQs1FdDEciIi1iOqqK4UhEpEG85qguhiMRkQZZMBtVxXAkItIihqOqGI5ERBrE06rqYjgSEWkQH+VQF8ORiEiDmI3qYjgSEWkQe47qYjgSEWkS01FNDEciIg1iz1FdDEciIg1iNqqL4UhEpEEW7DqqiuFIRKRFzEZVMRyJiDSI2aguhiMRkQbxrKq6GI5ERBrEr49TF8ORiEiLmI2qYjgSEWkQs1FdDEciIg3iNUd1MRyJiDSI1xzVxXAkItIg9hzVxXAkItIghqO6GI5ERBrE06rqYjgSEWkQe47qYjgSEWkQs1FdDEciIi1iOqqK4UhEpEG85qguhiMRkQbxmqO6GI5ERBrEbFQXw5GISIN07DqqiuFIRKRBzEZ16UREyroRRA/Kzs5GREQEJk+eDL1eX9bNIZXx701PI4YjPXXS09NhMBiQlpaG8uXLl3VzSGX8e9PTyKKsG0BERPS0YTgSEREVwHAkIiIqgOFITx29Xo9p06bx5ox/CP696WnEG3KIiIgKYM+RiIioAIYjERFRAQxHIiKiAhiOREREBTAc6amyaNEi+Pr6wtbWFk2bNsWPP/5Y1k0ilezfvx9du3aFt7c3dDodNm/eXNZNIlIwHOmpERUVhfDwcEyZMgU///wzWrdujc6dO+PSpUtl3TRSQWZmJho2bIgFCxaUdVOITPBRDnpq+Pn5oUmTJli8eLEyrnbt2ujevTsiIiLKsGWkNp1Oh02bNqF79+5l3RQiAOw50lMiJycHx48fR3BwsNH44OBgHDp0qIxaRUT/VAxHeipcv34dd+/ehYeHh9F4Dw8PJCYmllGriOifiuFIT5WCv24uIvzFcyIqdQxHeiq4urrC0tLSpJeYlJRk0pskIlIbw5GeCjY2NmjatCmio6ONxkdHR6Nly5Zl1Coi+qeyKusGEOUbN24cQkND0axZM/j7+2PJkiW4dOkSXn/99bJuGqkgIyMDv//+u/Lv8+fPIz4+Hs7OzqhcuXIZtoyIj3LQU2bRokWYPXs2EhISUK9ePcydOxdt2rQp62aRCmJiYhAYGGgyPiwsDCtWrCj9BhE9gOFIRERUAK85EhERFcBwJCIiKoDhSEREVADDkYiIqACGIxERUQEMRyIiogIYjkRERAUwHImIiApgOBIRERXAcCQiIiqA4UhERFQAw5GIiKiA/wM21zkE59rDwgAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report for Support Vector Classifier Model\n",
"--------------------------------------------------\n",
" precision recall f1-score support\n",
"\n",
" 0 0.96 0.96 0.96 2352\n",
" 1 0.96 0.95 0.96 2214\n",
"\n",
" accuracy 0.96 4566\n",
" macro avg 0.96 0.96 0.96 4566\n",
"weighted avg 0.96 0.96 0.96 4566\n",
"\n"
]
}
],
"source": [
"model_4 = SVC(random_state=42)\n",
"output_4 = fit_models(X_train_scaled, X_test_scaled, y_train, y_test, model_4, \"Support Vector Classifier\")"
]
},
{
"cell_type": "markdown",
"id": "5943de92",
"metadata": {},
"source": [
"### 5. Naive Bayes Classifier"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "57afe978",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting Gaussian Naive Bayes model... \n",
"--------------------------------------------------\n",
"Accuracy on Train Data: 0.8757940854326397\n",
"Accuracy on Test Data: 0.8745072273324573\n",
"F1-score: 0.8720696584058941\n",
"Recall: 0.8821138211382114\n",
"Precision: 0.8622516556291391 \n",
"\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report for Gaussian Naive Bayes Model\n",
"--------------------------------------------------\n",
" precision recall f1-score support\n",
"\n",
" 0 0.89 0.87 0.88 2352\n",
" 1 0.86 0.88 0.87 2214\n",
"\n",
" accuracy 0.87 4566\n",
" macro avg 0.87 0.87 0.87 4566\n",
"weighted avg 0.87 0.87 0.87 4566\n",
"\n"
]
}
],
"source": [
"model_5 = GaussianNB()\n",
"output_5 = fit_models(X_train, X_test, y_train, y_test, model_5, \"Gaussian Naive Bayes\")"
]
},
{
"cell_type": "markdown",
"id": "652dfb32",
"metadata": {},
"source": [
"## Showcasing Results of all base models"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "18866b2a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Model | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" Recall | \n",
" Precision | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" Logistic Regression | \n",
" 0.958872 | \n",
" 0.957950 | \n",
" 0.953478 | \n",
" 0.959545 | \n",
"
\n",
" \n",
" | 1 | \n",
" Decision Tree Classifier | \n",
" 0.999617 | \n",
" 0.938458 | \n",
" 0.933604 | \n",
" 0.939119 | \n",
"
\n",
" \n",
" | 2 | \n",
" Random Forest Classifier | \n",
" 0.999617 | \n",
" 0.956198 | \n",
" 0.948509 | \n",
" 0.960659 | \n",
"
\n",
" \n",
" | 3 | \n",
" Support Vector Classifier | \n",
" 0.964458 | \n",
" 0.956855 | \n",
" 0.952123 | \n",
" 0.958618 | \n",
"
\n",
" \n",
" | 4 | \n",
" Gaussian Naive Bayes | \n",
" 0.875794 | \n",
" 0.874507 | \n",
" 0.882114 | \n",
" 0.862252 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Model Accuracy_train Accuracy_test Recall \\\n",
"0 Logistic Regression 0.958872 0.957950 0.953478 \n",
"1 Decision Tree Classifier 0.999617 0.938458 0.933604 \n",
"2 Random Forest Classifier 0.999617 0.956198 0.948509 \n",
"3 Support Vector Classifier 0.964458 0.956855 0.952123 \n",
"4 Gaussian Naive Bayes 0.875794 0.874507 0.882114 \n",
"\n",
" Precision \n",
"0 0.959545 \n",
"1 0.939119 \n",
"2 0.960659 \n",
"3 0.958618 \n",
"4 0.862252 "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result_df = pd.concat([result_df, output_1, output_2, output_3, output_4, output_5], axis=0).reset_index(drop=True)\n",
"result_df"
]
},
{
"cell_type": "markdown",
"id": "7aa0859b",
"metadata": {},
"source": [
"## Hyper Parameter Tuning\n",
"- We shall perform hyperparameter tuning for the 3 best performing base models:\n",
" - Logistic Regression\n",
" - Random Forest Classifier\n",
" - Support Vector Classifier\n",
" \n",
"- We shall use \"Optuna\" to find the best parameters for each model."
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "d56880b6",
"metadata": {},
"outputs": [],
"source": [
"import optuna\n",
"from sklearn.model_selection import cross_val_score"
]
},
{
"cell_type": "markdown",
"id": "6df4461d",
"metadata": {},
"source": [
"### 1. Logistic Regression"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "57a38bcd",
"metadata": {},
"outputs": [],
"source": [
"def objective_lr(trial):\n",
" solver = trial.suggest_categorical(\"solver\", ['liblinear', 'newton-cg', 'newton-cholesky', 'sag', 'saga'])\n",
" max_iter = trial.suggest_int(\"max_iter\", 100, 1000)\n",
" \n",
" model = LogisticRegression(solver=solver, \n",
" max_iter=max_iter, \n",
" random_state=42)\n",
" \n",
" accuracy = cross_val_score(model, X_train_scaled, y_train, cv=5, scoring='accuracy').mean()\n",
" \n",
" return accuracy"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "9ce526f6",
"metadata": {},
"outputs": [],
"source": [
"# study_lr = optuna.create_study(direction=\"maximize\")"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "3fe67512",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# study_lr.optimize(objective_lr, n_trials=50)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "7cffd9aa",
"metadata": {},
"outputs": [],
"source": [
"# study_lr.best_params"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "c5967a3a",
"metadata": {},
"outputs": [],
"source": [
"# # Visualizing optimization history\n",
"# optuna.visualization.plot_optimization_history(study_lr)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "0f925b65",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting Logistic Regression - Tuned model... \n",
"--------------------------------------------------\n",
"Accuracy on Train Data: 0.9589266155531215\n",
"Accuracy on Test Data: 0.9579500657030223\n",
"F1-score: 0.9565020389669233\n",
"Recall: 0.9534778681120144\n",
"Precision: 0.9595454545454546 \n",
"\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report for Logistic Regression - Tuned Model\n",
"--------------------------------------------------\n",
" precision recall f1-score support\n",
"\n",
" 0 0.96 0.96 0.96 2352\n",
" 1 0.96 0.95 0.96 2214\n",
"\n",
" accuracy 0.96 4566\n",
" macro avg 0.96 0.96 0.96 4566\n",
"weighted avg 0.96 0.96 0.96 4566\n",
"\n"
]
}
],
"source": [
"# Fitting best Logistic regression model tuned using Optuna\n",
"model_lr_opt = LogisticRegression(max_iter=524, solver='liblinear', random_state=42)\n",
"\n",
"output_lr_opt = fit_models(X_train_scaled, X_test_scaled, y_train, y_test, model_lr_opt, \"Logistic Regression - Tuned\")"
]
},
{
"cell_type": "markdown",
"id": "6218604a",
"metadata": {},
"source": [
"### 2. Random Forest Classifier"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "8e5e0229",
"metadata": {},
"outputs": [],
"source": [
"def objective(trial):\n",
" n_estimators= trial.suggest_int('n_estimators', 100, 1000)\n",
" max_depth= trial.suggest_int('max_depth', 5, 50)\n",
" min_samples_split= trial.suggest_int('min_samples_split', 2, 32)\n",
" min_samples_leaf= trial.suggest_int('min_samples_leaf', 1, 32)\n",
" criterion= trial.suggest_categorical('criterion', ['gini', 'entropy'])\n",
" \n",
" model = RandomForestClassifier(n_estimators=n_estimators, \n",
" max_depth=max_depth, \n",
" min_samples_split=min_samples_split, \n",
" min_samples_leaf=min_samples_leaf, \n",
" criterion=criterion, \n",
" random_state=42)\n",
" \n",
" accuracy = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy').mean()\n",
" \n",
" return accuracy"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "32a98b84",
"metadata": {},
"outputs": [],
"source": [
"# study = optuna.create_study(direction='maximize') "
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "4481bc9c",
"metadata": {},
"outputs": [],
"source": [
"# study.optimize(objective, n_trials=200)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "a29d411a",
"metadata": {},
"outputs": [],
"source": [
"# # Getting best parameters from optuna study\n",
"# study.best_params"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "676c7437",
"metadata": {},
"outputs": [],
"source": [
"# # Visualizing optimization history\n",
"# optuna.visualization.plot_optimization_history(study)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "553c94ad",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting Random Forest Classifier - Tuned model... \n",
"--------------------------------------------------\n",
"Accuracy on Train Data: 0.9965498357064622\n",
"Accuracy on Test Data: 0.9561979851073149\n",
"F1-score: 0.954524783992724\n",
"Recall: 0.9480578139114725\n",
"Precision: 0.9610805860805861 \n",
"\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report for Random Forest Classifier - Tuned Model\n",
"--------------------------------------------------\n",
" precision recall f1-score support\n",
"\n",
" 0 0.95 0.96 0.96 2352\n",
" 1 0.96 0.95 0.95 2214\n",
"\n",
" accuracy 0.96 4566\n",
" macro avg 0.96 0.96 0.96 4566\n",
"weighted avg 0.96 0.96 0.96 4566\n",
"\n"
]
}
],
"source": [
"# Fitting best Random Forest model tuned using optuna\n",
"model_rf_opt = RandomForestClassifier(n_estimators=559, \n",
" max_depth=21, \n",
" min_samples_split=2, \n",
" min_samples_leaf=1,\n",
" criterion='entropy',\n",
" random_state=42)\n",
"\n",
"output_rf_opt = fit_models(X_train, X_test, y_train, y_test, model_rf_opt, \"Random Forest Classifier - Tuned\")"
]
},
{
"cell_type": "markdown",
"id": "f18b5e81",
"metadata": {},
"source": [
"### 3. SVC"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "fdcde26e",
"metadata": {},
"outputs": [],
"source": [
"def objective_svc(trial):\n",
" C = trial.suggest_float('C', 1e-4, 1e4, log=True)\n",
" kernel = trial.suggest_categorical('kernel', ['linear', 'poly', 'rbf', 'sigmoid'])\n",
" gamma = trial.suggest_float('gamma', 1e-4, 1e4, log=True)\n",
" \n",
" model = SVC(C=C, kernel=kernel, gamma=gamma, random_state=42)\n",
" \n",
" accuracy = cross_val_score(model, X_train_scaled, y_train, cv=5, scoring='accuracy').mean()\n",
" \n",
" return accuracy"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "83942ba8",
"metadata": {},
"outputs": [],
"source": [
"# study_svc = optuna.create_study(direction='maximize')"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "89ea3581",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# study_svc.optimize(objective_svc, n_trials=50)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "936f9eee",
"metadata": {},
"outputs": [],
"source": [
"# # Getting best parameters from optuna study\n",
"# study_svc.best_params"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "477321ce",
"metadata": {},
"outputs": [],
"source": [
"# # Visualizing optimization history\n",
"# optuna.visualization.plot_optimization_history(study_svc)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "fc820ceb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting Support Vector Classifier - Tuned model... \n",
"--------------------------------------------------\n",
"Accuracy on Train Data: 0.9965498357064622\n",
"Accuracy on Test Data: 0.9561979851073149\n",
"F1-score: 0.9545454545454546\n",
"Recall: 0.948509485094851\n",
"Precision: 0.9606587374199451 \n",
"\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report for Support Vector Classifier - Tuned Model\n",
"--------------------------------------------------\n",
" precision recall f1-score support\n",
"\n",
" 0 0.95 0.96 0.96 2352\n",
" 1 0.96 0.95 0.95 2214\n",
"\n",
" accuracy 0.96 4566\n",
" macro avg 0.96 0.96 0.96 4566\n",
"weighted avg 0.96 0.96 0.96 4566\n",
"\n"
]
}
],
"source": [
"# Fitting best SVC model tuned using optuna\n",
"model_SVC_opt = SVC(C= 9.20, kernel= 'linear', gamma= 0.0045)\n",
"\n",
"output_SVC_opt = fit_models(X_train_scaled, X_test_scaled, y_train, y_test, model_rf_opt, \"Support Vector Classifier - Tuned\")"
]
},
{
"cell_type": "markdown",
"id": "62ee9e70",
"metadata": {},
"source": [
"### Optimizing RandomForestClassifier model using GridSearchCV"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "71b2b548",
"metadata": {},
"outputs": [],
"source": [
"# from sklearn.model_selection import GridSearchCV\n",
"\n",
"# # Defining param_grid for GridSearchCV\n",
"# param_grid = {'n_estimators':[100, 200, 300, 400, 500],\n",
"# 'max_depth':[x for x in range(10,30,5)],\n",
"# 'min_samples_split':[x for x in range(2,30)],\n",
"# 'criterion':['gini', 'entropy'],\n",
"# 'max_features':['sqrt', 'log2']\n",
"# }\n",
"\n",
"# # Fitting GridSearchCV on RandomForestClassifier model\n",
"# model_rf = RandomForestClassifier(random_state=42)\n",
"# grid_search = GridSearchCV(estimator=model_rf, param_grid=param_grid, cv=3, scoring='accuracy', n_jobs=4, verbose=3)\n",
"# grid_search.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "f227c1f1",
"metadata": {},
"outputs": [],
"source": [
"# grid_search.best_params_"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "caa6c521",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting Random Forest Classifier - GSCV model... \n",
"--------------------------------------------------\n",
"Accuracy on Train Data: 0.9647316538882804\n",
"Accuracy on Test Data: 0.9581690757774858\n",
"F1-score: 0.9566598593147265\n",
"Recall: 0.952122854561879\n",
"Precision: 0.9612403100775194 \n",
"\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgcAAAEnCAYAAAA95eCQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABBi0lEQVR4nO3dd3xN9/8H8NfNuhkiZCcksSI1YjQqoyUIIRWqrVLaNEqNGv2m6FAtuqR0oPaqmKXD3jFCVRDaKIrSokYiRCREZHn//vC7t06WnBDheD37OI9HnfO+53zOufec+7qfM6ITEQERERHR/zOp6AYQERHRw4XhgIiIiBQYDoiIiEiB4YCIiIgUGA6IiIhIgeGAiIiIFBgOiIiISIHhgIiIiBQYDoiIiEihTOHgjz/+wOuvv46aNWvC0tISlSpVwpNPPonx48fjypUr97uNCr///juCg4NhZ2cHnU6HiRMn3vdl6HQ6jBkz5r7P925iYmKg0+mg0+kQFxdXaLqIoE6dOtDpdGjVqlWZljFt2jTExMSoek1cXFyxbSqrZcuWoUGDBrCysoJOp0NiYuJ9m3dBhvYbBlNTUzg5OaFTp07Yv39/uS33bgzv9+nTpyusDXc6ffq0YjvdOTRr1qyim1ekJUuWqD4G3Lp1CwsXLkTbtm3h6OgIc3NzODs7Izw8HGvWrMGtW7cA/Lc91O4v91OvXr1Qo0YNxbgrV67g5ZdfhrOzM3Q6Hbp06QKg4o5bpbVr1y706NEDnp6e0Ov1sLGxQYMGDTBs2DAcO3ZMUSsiWLp0KVq0aAFnZ2dYWlqievXqaN++PebMmVNo3hkZGfj888/RrFkzVK5cGXq9HjVq1EDv3r3x22+/AQCef/55WFlZ4erVq8W28ZVXXoG5uTkuXrxYbE2rVq2g0+lQq1YtFPWA4Z07dxr3m/v52bmX48WYMWOg0+nUvUhUmjVrlpiZmUmDBg1k6tSpsn37dtm8ebOMHTtWatasKV26dFE7S1WaNGki3t7esn79eomPj5ekpKT7voz4+Hg5e/bsfZ/v3cybN08AiK2trbz66quFpm/fvt04PTg4uEzLaNCggerXpqenS3x8vKSnp5dpmQWlpKSIubm5dOrUSeLi4iQ+Pl4yMzPvy7yLYthuY8eOlfj4eNm5c6dMmjRJ7O3txdraWv76669yW3ZJDO/3qVOnKmT5BZ06dUoAyJAhQyQ+Pl4xHDp0qKKbV6SOHTuKl5dXqeuzsrKkffv2otPppEePHvLDDz/Izp075eeff5a+ffuKXq+XlStXish/22PevHnl0/hSOHnypPz222+KcVFRUWJhYSGLFi2S+Ph4OX78uIhU3HGrNEaOHCkAJDAwUGbOnCnbtm2TzZs3y1dffSW+vr4CQPLy8oz17733ngCQvn37yqpVq2Tbtm0yb948iYiIkPDwcMW8T548KbVq1ZJKlSrJ8OHDZe3atRIXFycxMTHy7LPPCgC5evWqrFmzRgDI1KlTi2zj1atXxcrK6q7fYcHBwWJraysAZMuWLYWmR0ZGSuXKle/7Z+dejhejR48WtV/3qqp3794tpqam0qFDB7l582ah6dnZ2bJq1SpVDVDLzMxM3nzzzXJdRkUxvPlvvPGGWFlZFfoyfvXVVyUwMLBMX/AGal6bk5Mjubm5ZVpOSXbt2iUAZNmyZfdtniWFC0M4+PHHHxXj58+fLwBk1KhR960dajys4eDLL78sl/mXx+dJbTh48803BYDMnz+/yOl//fWXHDx4UEQejnBQlLZt20q9evXKdRl5eXlFHuPLYsmSJQJABgwYILdu3So0/datWzJlyhRjOLhx44bo9Xp57bXXipxffn6+op2+vr5SuXLlYgPs+vXrJTMzU/Ly8sTd3V38/PyKrJs+fboAkDVr1pS4PsHBwdKgQQMJCAiQnj17KqZlZGSItbW19O3b9/EKB+Hh4WJmZib//vtvqerz8/Nl3Lhx4uPjIxYWFuLk5CQRERGF0q1hY+/bt0+eeeYZsbKykpo1a0p0dLTxg2DYMAUHkeJXvKiNuXXrVgkODhZ7e3uxtLQUDw8PeeGFFxRfLgBk9OjRinkdOnRIOnfuLFWqVBG9Xi+NGzeWmJgYRY3hS2jJkiXywQcfiJubm9ja2kpISIgcO3bsrtvL0N6tW7eKlZWVzJgxwzjNkGpnz55d5Bf8mDFjpHnz5lK1alWxtbWVpk2bypw5cxQ7o5eXV6HtZziwGtq+YMECGTp0qLi7u4tOp5OjR48ap23fvl1ERC5duiTVq1eXwMBAycnJMc7/yJEjYm1tXWSvh0FkZGShNty5LqtWrZKAgACxsrKSSpUqSdu2bWX37t2KeRje7wMHDsiLL74oVapUEVdX12KXWVw4OHLkiACQ/v37q96Whu3ZsWNH2bBhgzRt2lQsLS3Fx8dH5s6dW6gN8fHxEhQUJHq9Xtzc3OT999+XWbNmFfp8qt1ndu/eLYGBgWJpaSleXl7y3XffiYjI2rVrpWnTpmJlZSUNGzaUDRs2FLt9DEobDtTsC0V9nkREYmNjpU2bNmJraytWVlYSFBRU6FdYSkqK9O3bV6pXry4WFhbi6OgoQUFBEhsba9wGxR0TipKUlCTm5ubSvn37u26LO7fHnQf4EydOSK9evaROnTpiZWUl7u7uEh4eLn/88Yfitfn5+fLpp59K3bp1xdLSUuzs7MTX11cmTpxY6vUTub2/GPZRQ3sKDob9sqjjVlJSkvTr10+qVasm5ubmUqNGDRkzZowipBnmO27cOPn000+lRo0aYmpqWqrPTGnUr19fHB0dJSsrq1T1ly5dEgDy3nvv3bX2p59+EgASHR1dqnmPGDFCABR6v0REmjdvLm5ubooejKIY9r1Zs2aJpaWlpKWlGafNmjVLrK2tZevWrUWGg19++UXatGkjlSpVEisrKwkMDJS1a9cWWkZpjxciIkuXLpWAgACxtrYWGxsbCQ0NLdTbVK7hIC8vT6ytrcXf37/UM+/Xr58AkMGDB8vGjRtlxowZ4uTkJB4eHnLp0iVjXXBwsDg4OIi3t7fMmDFDYmNjZeDAgYqEn5KSIvHx8QJAunbtauzuFCl9ODh16pRYWlpKu3btZOXKlRIXFyeLFy+WiIgIxRtccCc7duyY2NraSu3atWXBggWybt066dGjh3GHMjAcEGvUqCGvvPKKrFu3Tr7//nvx9PQUb2/vu37oDO1NSEiQiIgIad68uXHa9OnTxcbGRjIyMooMB7169ZK5c+dKbGysxMbGyqeffipWVlby8ccfG2t+++03qVWrljRt2tS4/QwfIkPbq1WrJl27dpXVq1fL2rVrJTU1tVA4ELn969/MzEzefvttEbn9y71+/fryxBNPyPXr14tdx5MnT8rUqVMV3fxHjhwREZHFixcLAAkNDZWVK1fKsmXLxM/PTywsLOSXX34xzsPwfnt5ecl7770nsbGxxq7gohQXDtauXSsA5Ouvv1a9LUVuh4Pq1atL/fr1ZcGCBbJp0yZ56aWXBIDs2LHDWGcITfXr15fvv/9eVq1aJe3btxdPT89CO7vafcYQRjZt2iTh4eECQD7++GPx9fWV77//XtavXy8BAQGi1+vl/PnzxW4jEeWXRG5urmIwBCO1+0JRn6eFCxeKTqeTLl26yPLly2XNmjUSHh4upqamioDQvn17cXJyklmzZklcXJysXLlSRo0aJUuXLjVu16efflpcXV0Vp0CKY/gFO3369BK3Q8HtcecBfseOHTJs2DD56aefZMeOHbJixQrp0qWLWFlZKX4AREdHi6mpqYwePVq2bt0qGzdulIkTJ8qYMWNKvX4iynBw8+ZNiY+Pl6ZNm0qtWrWM62voYSx43EpKShIPDw/x8vKSmTNnypYtW+TTTz8VvV4vvXr1KrSe1apVk9atW8tPP/0kmzdvvi89WufPnxcA0qNHD1Wvq1Onjtja2srXX38tR48eLbLHQeS//cUQOu/mxIkTotPpJCoqSjHe8EPh/fffv+s8DOEgIyNDbGxsZNq0acZp/v7+8tprr0lCQkKhz05cXJyYm5uLn5+fLFu2TFauXCmhoaGi0+kU77ma48Xnn38uOp1OevfuLWvXrpXly5dLYGCg2NjYGI+rIuUcDpKTkwWAvPzyy6WqP3r0qACQgQMHKsbv3btXAMgHH3xgHGf4BbB3715Fbf369QulfAAyaNAgxbjShgNDykxMTCyx7QV3spdffln0en2hHpOwsDCxtraWq1evish/B8Rnn31WUffDDz8IgBIPXHe2NyEhwTivw4cPi4jIU089Zdyh73ZqID8/X3Jzc+WTTz4RBwcHxY5V3GsNy2vZsmWx0+4MByIi48aNEwCyYsUKiYyMFCsrqyITeXHzu/PLOj8/X9zd3cXX11fRbXjt2jVxdnaWoKAg4zjD+13a0wGG5S1btkxyc3Plxo0b8uuvv4qPj4/Ur19fEQwLKmlbenl5iaWlpZw5c8Y4LisrS+zt7RW9Ed27dxcrKytJTk42jsvLy5MnnnhC8fksyz6zf/9+47jU1FQxNTUVKysrRRBITEwUAPLtt9+WuJ2K+2UKwPhrVu2+UPDzlJmZKfb29tKpUyfF+Pz8fGncuLEiEFeqVKnQQbwgNacVvvjiCwEgGzduLFV9aU4r5OXlSU5Ojnh7exuDssjtXtYmTZqUOP/SrN+d4cDA8OVUUMHjVv/+/aVSpUqKz6eIyFdffSUAjF8ehvWsXbu2oifwftizZ0+xX7p5eXlFBlARkX379hm/DIHb11mFh4fLggULFHUdOnQQAKpOgQQHB4ujo6NiXYcNGyYASnX90Z3bPzIyUpo1ayYi/wWMuLi4IsNBQECAODs7y7Vr1xTboGHDhlK9enXjepX2ePHvv/+KmZmZDBkyRNG+a9euiaurq3Tr1s04rizhoNxuZdy+fTuA21fb3ql58+aoV68etm7dqhjv6uqK5s2bK8Y1atQIZ86cuW9tatKkCSwsLNCvXz/Mnz8f//zzT6let23bNoSEhMDDw0MxvlevXrhx4wbi4+MV4zt37qz4d6NGjQBA1boEBwejdu3a+O6773Do0CEkJCSgd+/eJbaxbdu2sLOzg6mpKczNzTFq1CikpqYiJSWl1Mt98cUXS137zjvvoGPHjujRowfmz5+PyZMnw9fXt9Svv9Px48dx4cIFREREwMTkv49lpUqV8OKLL2LPnj24ceNGmdsKAN27d4e5uTmsra3x9NNPIyMjA+vWrUOVKlUUdWq2ZZMmTeDp6Wn8t6WlJerWrat4r7dv346QkBC4uLgYx5mamqJ79+6KeandZ9zc3ODn52f8t729PZydndGkSRO4u7sbx9erVw9A6T9///vf/5CQkKAY/P39jdtGzb5Q8D3avXs3rly5gsjISOTl5RmHW7duoUOHDkhISEBmZqZxvWNiYvDZZ59hz549yM3NLVX7y1NeXh7Gjh2L+vXrw8LCAmZmZrCwsMCJEydw9OhRY13z5s1x8OBBDBw4EJs2bUJGRkaheZX3+q1duxatW7eGu7u7YluHhYUBAHbs2KGo79y5M8zNze8631u3binml5+fX6b2OTg4wNzc3Dj8/PPPxmlPPfUUTp48iY0bN+KDDz5AYGAgtm7ditdeew2dO3cu8i6B0urTpw8uX76M1atXA7j9ni5atAgtWrSAt7e3qnn17t0b+/fvx6FDhzB37lzUrl0bLVu2LFSXmZmJvXv3omvXrqhUqZJxvKmpKSIiInDu3DkcP34cQOmPF5s2bUJeXh5ee+01xfthaWmJ4ODge767rNThwNHREdbW1jh16lSp6lNTUwHcPoAV5O7ubpxu4ODgUKhOr9cjKyurtE28q9q1a2PLli1wdnbGoEGDULt2bdSuXRuTJk0q8XWpqanFrodh+p0KroterwcAVeui0+nw+uuvY9GiRZgxYwbq1q2LFi1aFFm7b98+hIaGAgBmz56NX3/9FQkJCRg5cqTq5Ra1niW1sVevXrh58yZcXV0RERFR6tcWdLfPy61bt5CWllbmtgLAuHHjkJCQgB07dmDkyJG4ePEiunTpguzsbGON2m1Zms9tamoqXF1dC9UVHKd2n7G3ty9UZ2FhUWi8hYUFAODmzZuF6otSvXp1NGvWTDHY2toa26hmXyhYa7hFrGvXroovBnNzc4wbNw4iYrwdetmyZYiMjMScOXMQGBgIe3t7vPbaa0hOTi7VehRkCHGlPYYVZejQofjoo4/QpUsXrFmzBnv37kVCQgIaN26seM9HjBiBr776Cnv27EFYWBgcHBwQEhKiuHX2fq9fQRcvXsSaNWsKbecGDRoAAC5fvqyoL+3+1Lt3b8X8QkJCiq01hMiigmlcXBwSEhIwY8aMIl9rbm6O9u3b4/PPP8emTZtw9uxZtGrVCmvXrsWGDRsAlO097dq1K+zs7DBv3jwAwPr163Hx4kX06dOn1PMwaNmyJby9vTFz5kwsXLgQvXv3LvKWwbS0NIhIqfad0h4vDPvSU089Veg9XrZsWaH3Vy2z0haampoiJCQEGzZswLlz51C9evUS6w0HzaSkpEK1Fy5cgKOjYxmaWzRLS0sAQHZ2tvGLGCj84QeAFi1aoEWLFsjPz8f+/fsxefJkREVFwcXFBS+//HKR83dwcEBSUlKh8RcuXACA+7oud+rVqxdGjRqFGTNm4PPPPy+2bunSpTA3N8fatWuN2wIAVq5cqXqZau6FTUpKwqBBg9CkSRMcOXIEw4cPx7fffqt6mYDy81LQhQsXYGJigqpVq5a5rQBQq1Yt4/36LVu2hJWVFT788ENMnjwZw4cPB3B/t6WBg4NDkQf8guMe5D5TVmr3hYLvkWH65MmTERAQUOQyDL+YHB0dMXHiREycOBH//vsvVq9ejffffx8pKSnYuHGj6ra3bt0a5ubmWLlyJQYMGKD69QCwaNEivPbaaxg7dqxi/OXLlxU9UGZmZhg6dCiGDh2Kq1evYsuWLfjggw/Qvn17nD17FtbW1vd9/QpydHREo0aNij123Nm7BJR+fxozZgwGDx5s/LchOBa3jAYNGiA2NhY3b95U7FNNmjQBAFy/fr1Uy3VwcEBUVBTi4uJw+PBhPPvss2jfvj1mzZqFlStX4v333y/VfKysrNCjRw/Mnj0bSUlJ+O6772Bra4uXXnqpVK8v6PXXX8eHH34InU6HyMjIImuqVq0KExOTUu07pT1eGOp/+ukneHl5lantJVF1WmHEiBEQEfTt2xc5OTmFpufm5mLNmjUAgDZt2gC4vTPdKSEhAUePHi0xbapleEjIH3/8oRhvaEtRTE1N4e/vj6lTpwKA8UEZRQkJCcG2bduMb6LBggULYG1tXexB7l5Vq1YN77zzDjp16lTshw64vVObmZnB1NTUOC4rKwsLFy4sVHu/emPy8/PRo0cP6HQ6bNiwAdHR0Zg8eTKWL19epvn5+PigWrVqWLJkiaLLMDMzEz///DMCAwNhbW19z+2+07vvvos6dergiy++wLVr1wCo25al1bp1a2zdulXxYJX8/HwsW7ZMUfcg95myutd94emnn0aVKlXw559/FuqdMAyGno47eXp6YvDgwWjXrp1iX1XzeXZ1dcUbb7yBTZs2YcGCBUXW/P3334WOI3fS6XSKHyAAsG7dOpw/f77Y11SpUgVdu3bFoEGDcOXKlSIfYlPc+t2L8PBwHD58GLVr1y5yOxcMB6VVo0YNxXx8fHxKrB85ciQuX76MoUOHlup0QG5ubqEeKAPDqRtD25977jn4+voiOjoahw8fLvI1mzZtKnRKsk+fPsjPz8eXX36J9evX4+WXXy7z8SUyMhKdOnXCO++8g2rVqhVZY2NjA39/fyxfvlzxeb116xYWLVqE6tWro27dugBKf7xo3749zMzM8Pfffxe7L92LUvccAEBgYCCmT5+OgQMHws/PD2+++SYaNGiA3Nxc/P7775g1axYaNmyITp06wcfHB/369cPkyZNhYmKCsLAwnD59Gh999BE8PDzw9ttv31PD7/Tss8/C3t4effr0wSeffAIzMzPExMTg7NmziroZM2Zg27Zt6NixIzw9PXHz5k189913AIC2bdsWO//Ro0cbz9+NGjUK9vb2WLx4MdatW4fx48fDzs7uvq1LQV988cVdazp27IhvvvkGPXv2RL9+/ZCamoqvvvqq0EEMAHx9fbF06VIsW7YMtWrVgqWlZZmuExg9ejR++eUXbN68Ga6urhg2bBh27NiBPn36oGnTpqhZs6aq+ZmYmGD8+PF45ZVXEB4ejv79+yM7Oxtffvklrl69WqrtoJa5uTnGjh2Lbt26YdKkSfjwww9VbcvS+vDDD7F69Wq0adMGo0aNgrW1NaZOnWo8t27wIPeZsrrXfaFSpUqYPHkyIiMjceXKFXTt2hXOzs64dOkSDh48iEuXLmH69OlIT09H69at0bNnTzzxxBOwtbVFQkICNm7ciBdeeME4P19fXyxfvhzTp0+Hn58fTExMSjwofvPNN/jnn3/Qq1cvbNq0Cc8//zxcXFxw+fJlxMbGYt68eVi6dKnxOqGCwsPDERMTgyeeeAKNGjXCgQMH8OWXXxbq6enUqRMaNmyIZs2awcnJCWfOnMHEiRPh5eUFb2/vUq/fvfjkk08QGxuLoKAgvPXWW/Dx8cHNmzdx+vRprF+/HjNmzLhrD/D90KNHDxw5cgSff/45Dh48iF69esHb2xu3bt3C2bNnjcHb0AORnp6OGjVq4KWXXkLbtm3h4eGB69evIy4uDpMmTUK9evWM28jU1BQrVqxAaGgoAgMD8eabb6J169awsbHBmTNn8NNPP2HNmjWFTkk2a9YMjRo1wsSJEyEiZTqlYODu7l6qnsXo6Gi0a9cOrVu3xvDhw2FhYYFp06bh8OHD+P777409N6U9XtSoUQOffPIJRo4ciX/++QcdOnRA1apVcfHiRezbtw82Njb4+OOPy7xeqp+QKHL76ufIyEjx9PQUCwsLsbGxkaZNm8qoUaMkJSXFWGe4Z7tu3bpibm4ujo6O8uqrrxZ7z3ZBRV2piyLuVhC5fXVrUFCQ2NjYSLVq1WT06NEyZ84cxdWd8fHx8vzzz4uXl5fo9XpxcHCQ4OBgWb16daFlFPWcg06dOomdnZ1YWFhI48aNC13FXNwtc6V9mMqddyuUpKg7Dr777jvx8fERvV4vtWrVkujoaJk7d26hW19Onz4toaGhxid8FXzOQcG23znNcLfC5s2bxcTEpNA2Sk1NFU9PT3nqqackOzu72PaXtKyVK1eKv7+/WFpaio2NjYSEhMivv/6qqDFceXvnrX0lKWl5IrdvP6patarxSvvSbkvDcw4KCg4OLvT+/Prrr8ZbCl1dXeWdd94p8TkHZd1nimtTcfvNndQ856Cs+4LBjh07pGPHjmJvby/m5uZSrVo16dixo7H+5s2bMmDAAGnUqJFUrlxZrKysxMfHR0aPHq14JsmVK1eka9euUqVKFdHpdKW6IjsvL0/mz58vbdq0EXt7ezEzMxMnJycJCwuTJUuWGO+WKWq/TUtLkz59+oizs7NYW1vLM888I7/88kuh9/zrr7+WoKAgcXR0FAsLC/H09JQ+ffrI6dOnVa3fvdytIHL7mQFvvfWW1KxZU8zNzcXe3l78/Pxk5MiRxluOy/vhVwY7d+6U7t27S/Xq1cXc3Nx4u96bb76puOsmOztbvvrqKwkLCxNPT0/R6/ViaWkp9erVk3fffVdSU1MLzfvq1avy6aefypNPPimVKlUSc3Nz8fT0lFdffbXQ8cNg0qRJAkDq16+vaj2K2/53KupuBZH/nnNgY2MjVlZWEhAQUORDl0p7vBC5fcxs3bq1VK5cWfR6vXh5eUnXrl0VtwWX5W4Fncg9XPZJREREmsO/ykhEREQKDAdERESkwHBARERECgwHREREpMBwQERERAoMB0RERKTAcEBEREQKqp6QSI8fq6aD715EmpGWMKWim0APkOU9fAOoPTZk/c7P1qOE4YCIiNTTseNZyxgOiIhIPZV/FZUeLQwHRESkHnsONI3hgIiI1GPPgaYxHBARkXrsOdA0hgMiIlKPPQeaxnBARETqmZhWdAuoHDEcEBGRejytoGkMB0REpB5PK2gawwEREanHngNNYzggIiL12HOgaQwHRESkHnsONI3hgIiI1GM40DSGAyIiUs+EpxW0jOGAiIjUY8+BpjEcEBGRerwgUdMYDoiISD0+IVHTGA6IiEg9nlbQNIYDIiJSj6cVNI3hgIiI1GPPgaYxHBARkXrsOdA0hgMiIlKPPQeaxnBARETqsedA0xj9iIhIPZ2JukGF6OhoPPXUU7C1tYWzszO6dOmC48ePK2pEBGPGjIG7uzusrKzQqlUrHDlyRFGTnZ2NIUOGwNHRETY2NujcuTPOnTunqElLS0NERATs7OxgZ2eHiIgIXL16tUybREsYDoiISL1yDAc7duzAoEGDsGfPHsTGxiIvLw+hoaHIzMw01owfPx7ffPMNpkyZgoSEBLi6uqJdu3a4du2asSYqKgorVqzA0qVLsWvXLly/fh3h4eHIz8831vTs2ROJiYnYuHEjNm7ciMTERERERNz79nnE6UREKroR9PCyajq4optAD1BawpSKbgI9QJb3cGLZ6rmZquqzVvUv87IuXboEZ2dn7NixAy1btoSIwN3dHVFRUXjvvfcA3O4lcHFxwbhx49C/f3+kp6fDyckJCxcuRPfu3QEAFy5cgIeHB9avX4/27dvj6NGjqF+/Pvbs2QN/f38AwJ49exAYGIhjx47Bx8enzG1+1LHngIiI1NPp1A33ID09HQBgb28PADh16hSSk5MRGhpqrNHr9QgODsbu3bsBAAcOHEBubq6ixt3dHQ0bNjTWxMfHw87OzhgMACAgIAB2dnbGmscVL0gkIiL1VJ4qyM7ORnZ2tmKcXq+HXq8v8XUigqFDh+KZZ55Bw4YNAQDJyckAABcXF0Wti4sLzpw5Y6yxsLBA1apVC9UYXp+cnAxnZ+dCy3R2djbWPK7Yc0BEROqp7DmIjo42XvRnGKKjo++6mMGDB+OPP/7A999/X0QTlD0SIlJoXEEFa4qqL818tI7hgIiIVNPpdKqGESNGID09XTGMGDGixGUMGTIEq1evxvbt21G9enXjeFdXVwAo9Os+JSXF2Jvg6uqKnJwcpKWllVhz8eLFQsu9dOlSoV6Jxw3DARERqaY2HOj1elSuXFkxFHdKQUQwePBgLF++HNu2bUPNmjUV02vWrAlXV1fExsYax+Xk5GDHjh0ICgoCAPj5+cHc3FxRk5SUhMOHDxtrAgMDkZ6ejn379hlr9u7di/T0dGPN44rXHBARkXrl2Os+aNAgLFmyBKtWrYKtra2xh8DOzg5WVlbQ6XSIiorC2LFj4e3tDW9vb4wdOxbW1tbo2bOnsbZPnz4YNmwYHBwcYG9vj+HDh8PX1xdt27YFANSrVw8dOnRA3759MXPm7bsv+vXrh/Dw8Mf6TgWA4YCIiMqgPM/JT58+HQDQqlUrxfh58+ahV69eAIB3330XWVlZGDhwINLS0uDv74/NmzfD1tbWWD9hwgSYmZmhW7duyMrKQkhICGJiYmBqamqsWbx4Md566y3jXQ2dO3fGlCm8pZfPOaAS8TkHjxc+5+Dxci/PObDtPl9V/bVlkWVfGD1w7DkgIiLVTEx4yZqWMRwQEZF6j/edfprHcEBERKo97s8B0DqGAyIiUo3hQNsYDoiISDWGA21jOCAiItUYDrSN4YCIiNRjNtA0hgMiIlKNPQfaxnBARESqMRxoG8MBERGppjNhONAyhgMiIlKNPQfaxnBARESqMRxoG8MBERGpxnCgbQwHRESkGsOBtjEcEBGReswGmsZwQEREqrHnQNsYDoiISDWGA21jOCDNGd47FF3aNEbdGi7Iys7F3oP/YOSkVThxJgUAYGZmgjEDO6H9Mw1Qs7oDMq7fxLa9x/DRt6uRdCldMS//RjUxZlA4nvKtgdy8fPxx/DyeGzwNN7Nz0cLPG5vn/K/INjzzyngc+PPfcl9XKp28vDzMmDoZ69atQerly3B0ckLn555HvwEDYWJiAgD46IP3sXrVCsXrfBs1xqLvf6iIJj/0GA60jeGANKfFk3UwY9lOHDhyBmZmphgzqBPWTh+Mpi98hhs3c2BtaYEm9TzwxewN+OOv86ha2RpfDn8RP07sj2deGW+cj3+jmlg1ZSC+mrcZQ8f9iJy8fDSqWw23bgkAYM/Bf1Cj7QjFskcNDEcbfx8Gg4fMvLmz8eMPS/Hp2HGoXacO/jx8GKM+HAFbW1u8EhFprHv6mRb45LNo47/Nzc0rormPBmYDTWM4IM15bvA0xb/7j1mEs9u+QNP6Hvj1t7+Rcf0mwt+coqgZOu5H7Fr8Ljxcq+JschoAYPywFzBtaRy+mhdrrPv730vG/8/Ny8fF1GvGf5uZmaBjsC9mLNtZHqtF9+DgwUS0ahOClsGtAADVqlXHhvXrcOTIYUWdhYUFHJ2cKqCFjx5DjwtpE99d0rzKlSwBAGnpN4qvsbXCrVu3cPVaFgDAqWolNG9UE5euXMf2mKE4vWUsNs/5H4Ka1Cp2HuHBjeBYpRIWrd5zf1eA7lnTpn7Yt2cPTp8+BQA4fuwYfv/9AFq0CFbU7U/Yh1YtAtHp2fb4eNSHSE1NrYjmPhJ0Op2qgR4t7DnQiHPnzmH69OnYvXs3kpOTodPp4OLigqCgIAwYMAAeHh4V3cQKM27Yi/j1t5P48++kIqfrLczw6VvPYdmG/biWeRMAULO6IwBgZP9nMWLCCvxx/BxeCW+O9TOHwO+lsYoeBIPILoGIjT+Kcxevltu6UNn0fqMvrl+/hi7hYTA1NUV+fj6G/O9thHUMN9Y83aIl2rXvADd3d5w/dw7TJk9C396RWPrjclhYWFRg6x9O/MLXNoYDDdi1axfCwsLg4eGB0NBQhIaGQkSQkpKClStXYvLkydiwYQOefvrpEueTnZ2N7OxsxTi5lQ+diWl5Nr9cTXi/G3y93RHy+oQip5uZmWDhF6/DRKfD/6L/u/DM5P//qMzcn3dh4f/3BBw8fg6tmvsg8rlAjJq8WjGfas5V0C6wHl5977tyWhO6Fxs3rMe6tasRPf5r1KlTB8eOHcWXX0TDyckZnbs8DwDoEPassd7buy4aNGyIDm3bYOeOOLRtF1pRTX94MRtoGsOBBrz99tt44403MGFC0V+Ab7/9NqKiopCQkFDifKKjo/Hxxx8rxpm6PAVzt+b3ra0P0jfvvYTwYF+07TMR51OuFppuZmaCxeP6wKuaA8L6TTb2GgBA0qUMAMDRf5IVrzl+KhkerlULzSviuQCkpmdi7Y4/7u9K0H0x4evx6N2nH8Ke7QgA8K7rg6QLFzB3zkxjOCjIyckZ7u7u+PfM6QfY0kcHew60jdccaMDhw4cxYMCAYqf3798fhw8fLna6wYgRI5Cenq4YzFz87mdTH5gJ772E59o0Rof+3+LMhcLnjQ3BoLanEzoOmIIr6ZmK6WcupOJCylXUreGsGF/Hyxn/Jl0pNL/XOgdgydp9yMu7dX9XhO6Lm1k3jb1BBqampsY7T4py9WoakpOT4OTkXGzN44zXHGgbew40wM3NDbt374aPj0+R0+Pj4+Hm5nbX+ej1euj1esW4R/GUwsQR3dA9rBleensWrmfehIuDLQAg/fpN3MzOhampCZZ8+QaaPuGBF/43A6YmOmPNlfQbyM3LBwBMmL8FHw7oiEN/ncfB4+fwaid/+NRwQc935iqW16p5XdSs7oiYlbsf7IpSqQW3ao3Zs2bA1c0dtevUwbGjR7Fw/jw89/yLAIAbmZmYPm0K2rYLhaOTEy6cP4/JkyagStWqaNO2bQW3/uHE73ttYzjQgOHDh2PAgAE4cOAA2rVrBxcXF+h0OiQnJyM2NhZz5szBxIkTK7qZD0z/bi0BALFzohTj+45aiEVr9qKacxV0atUIALBvmfI5BaFvTMIvB04AAKYsiYOl3hzjh72IqnbWOPTXeYS/OQWnzl1WvKZXlyDEJ/6N46cultMa0b16f+SHmPrtJIz99GNcuZIKJ2dndH2pO/q/OQgAYGJqihN//YU1q1fiWsY1ODk54anm/hj/1QTY2FSq4NY/nNgboG06ESm+X40eGcuWLcOECRNw4MAB5Off/uVramoKPz8/DB06FN26dSvTfK2aDr6fzaSHXFrClLsXkWZY3sPPw7rvblRV/9f4DmVfGD1w7DnQiO7du6N79+7Izc3F5cu3f9k6OjryCW9EVC4KXsNB2sJwoDHm5ualur6AiOheMBxoG8MBERGpxksOtI3hgIiIVOMFidrGcEBERKoxG2gbwwEREanGngNtYzggIiLVGA60jeGAiIhUYzbQNoYDIiJSjT0H2sZwQEREqvE5B9rGcEBERKqx40DbGA6IiEg1nlbQNoYDIiJSjdlA2xgOiIhINfYcaJtJRTeAiIgePTqdukGNnTt3olOnTnB3d4dOp8PKlSsV03v16gWdTqcYAgICFDXZ2dkYMmQIHB0dYWNjg86dO+PcuXOKmrS0NERERMDOzg52dnaIiIjA1atXy7A1tIfhgIiIVCv45Xy3QY3MzEw0btwYU6ZMKbamQ4cOSEpKMg7r169XTI+KisKKFSuwdOlS7Nq1C9evX0d4eDjy8/ONNT179kRiYiI2btyIjRs3IjExEREREeo2hEbxtAIREalWnmcVwsLCEBYWVmKNXq+Hq6trkdPS09Mxd+5cLFy4EG3btgUALFq0CB4eHtiyZQvat2+Po0ePYuPGjdizZw/8/f0BALNnz0ZgYCCOHz8OHx+f+7tSjxj2HBARkWpqew6ys7ORkZGhGLKzs8u8/Li4ODg7O6Nu3bro27cvUlJSjNMOHDiA3NxchIaGGse5u7ujYcOG2L17NwAgPj4ednZ2xmAAAAEBAbCzszPWPM4YDoiISDUTE52qITo62nhu3zBER0eXadlhYWFYvHgxtm3bhq+//hoJCQlo06aNMWwkJyfDwsICVatWVbzOxcUFycnJxhpnZ+dC83Z2djbWPM54WoGIiFRTex3BiBEjMHToUMU4vV5fpmV3797d+P8NGzZEs2bN4OXlhXXr1uGFF14o9nUiomh3UetQsOZxxXBARESqqf3+1Ov1ZQ4Dd+Pm5gYvLy+cOHECAODq6oqcnBykpaUpeg9SUlIQFBRkrLl48WKheV26dAkuLi7l0s5HCU8rEBGRauV5t4JaqampOHv2LNzc3AAAfn5+MDc3R2xsrLEmKSkJhw8fNoaDwMBApKenY9++fcaavXv3Ij093VjzOGPPARERqVae3/fXr1/HyZMnjf8+deoUEhMTYW9vD3t7e4wZMwYvvvgi3NzccPr0aXzwwQdwdHTE888/DwCws7NDnz59MGzYMDg4OMDe3h7Dhw+Hr6+v8e6FevXqoUOHDujbty9mzpwJAOjXrx/Cw8Mf+zsVAIYDIiIqg/LsDdi/fz9at25t/LfhWoXIyEhMnz4dhw4dwoIFC3D16lW4ubmhdevWWLZsGWxtbY2vmTBhAszMzNCtWzdkZWUhJCQEMTExMDU1NdYsXrwYb731lvGuhs6dO5f4bIXHiU5EpKIbQQ8vq6aDK7oJ9AClJfDA+DixvIefhyGT41XVbx0SWPaF0QPHngMiIlLNhFf0axrDARERqcZsoG0MB0REpBqfBaBtDAdERKSaqQnDgZYxHBARkWrsONA2hgMiIlJNB6YDLWM4ICIi1XhWQdsYDoiISDVekKhtDAdERKQas4G2MRwQEZFqfAiStjEcEBGRaswG2sZwQEREqvGaA21jOCAiItX4ECRtYzggIiLVGA20jeGAiIhU42kFbWM4ICIi1XhWQdsYDoiISDX2HGgbwwEREanGbKBtDAdERKQaew60jeGAiIhU4zUH2sZwQEREqrHnQNsYDoiISDVThgNNYzggIiLVmA20jeGAiIhU42kFbWM4ICIi1ZgNtI3hgIiIVDNhOtA0hgMiIlKN2UDbGA6IiEg1XnOgbQwHVKLUfZMrugn0AFXt8EVFN4EeoKwt75f5tSb3sR308GE4ICIi1dhzoG0MB0REpJoZuw40jeGAiIhUY8+BtjEcEBGRavzDS9rGcEBERKqx40DbGA6IiEg1PgRJ2xgOiIhINV6PqG0MB0REpBo7DrSN4YCIiFTjaQVtYzggIiLVmA20jeGAiIhU462M2sZwQEREqpkyHWgawwEREanGbKBtvBuFiIhU06n8T42dO3eiU6dOcHd3h06nw8qVKxXTRQRjxoyBu7s7rKys0KpVKxw5ckRRk52djSFDhsDR0RE2Njbo3Lkzzp07p6hJS0tDREQE7OzsYGdnh4iICFy9erUsm0NzGA6IiEg1E526QY3MzEw0btwYU6ZMKXL6+PHj8c0332DKlClISEiAq6sr2rVrh2vXrhlroqKisGLFCixduhS7du3C9evXER4ejvz8fGNNz549kZiYiI0bN2Ljxo1ITExEREREmbaH1uhERCq6EfTwupHLj8fjxCFsXEU3gR6grC3vl/m147f/rar+3da1y7QcnU6HFStWoEuXLgBu9xq4u7sjKioK7733HoDbvQQuLi4YN24c+vfvj/T0dDg5OWHhwoXo3r07AODChQvw8PDA+vXr0b59exw9ehT169fHnj174O/vDwDYs2cPAgMDcezYMfj4+JSpvVrBngMiIlJNp9OpGrKzs5GRkaEYsrOzVS/31KlTSE5ORmhoqHGcXq9HcHAwdu/eDQA4cOAAcnNzFTXu7u5o2LChsSY+Ph52dnbGYAAAAQEBsLOzM9Y8zhgOiIhINbWnFaKjo43n9g1DdHS06uUmJycDAFxcXBTjXVxcjNOSk5NhYWGBqlWrlljj7OxcaP7Ozs7GmscZ71YgIiLV1D4EacSIERg6dKhinF6vv4flKxsgIoXGFVSwpqj60sznccCeAyIiUs1Ep1M16PV6VK5cWTGUJRy4uroCQKFf9ykpKcbeBFdXV+Tk5CAtLa3EmosXLxaa/6VLlwr1SjyOGA6IiEg1UxN1w/1Ss2ZNuLq6IjY21jguJycHO3bsQFBQEADAz88P5ubmipqkpCQcPnzYWBMYGIj09HTs27fPWLN3716kp6cbax5nPK1ARESqmah8doEa169fx8mTJ43/PnXqFBITE2Fvbw9PT09ERUVh7Nix8Pb2hre3N8aOHQtra2v07NkTAGBnZ4c+ffpg2LBhcHBwgL29PYYPHw5fX1+0bdsWAFCvXj106NABffv2xcyZMwEA/fr1Q3h4+GN/pwLAcEBERGVQnqfl9+/fj9atWxv/bbhWITIyEjExMXj33XeRlZWFgQMHIi0tDf7+/ti8eTNsbW2Nr5kwYQLMzMzQrVs3ZGVlISQkBDExMTA1NTXWLF68GG+99ZbxrobOnTsX+2yFxw2fc0Al4nMOHi98zsHj5V6eczAj/rSq+gGBNcq8LHrw2HNARESqmfCKfk1jOCAiItWYDbSN4YCIiFRjz4G2MRwQEZFqzAbaxnBARESq8SE52sZwQEREqvG0grYxHBARkWoMB9rGcEBERKoxGmgbwwEREanGjgNtYzggIiLV+GeNtY3hgIiIVOPdCtrGcEBERKqx50DbGA6IiEg1RgNtYzggIiLV2HOgbQwHRESkminDgaYxHBARkWqMBtrGcEBERKqx40DbGA6IiEg1E/YdaBrDARERqcaeA21jOCAiItV07DnQNIYDIiJSjT0H2sZwQEREqvGaA21jOCAiItXYc6BtDAdERKQaw4G2MRwQEZFqfEKitjEcEBGRarxbQdsYDoiISDV2HGgbwwE9Fg7sT8CCeXPx559HcPnSJXwzaQpah7Q1ThcRzJw2BT//9AOuZWSgoW8jjPhwFGrX8VbM52Di75j67UQcOvQHzMzM4OPzBKbMmA1LS8sHvUr0/4b3CECXZ3xQ18MeWdl52PvneYycHYcT564Ya557pi76hDdBU29XONpZw7//d/jj7xTFfCzMTfFF/zZ4qXU9WFmYYfvvZxD17Wacv3zNWFOnWlWM7d8GgQ2qwcLMFEdOXcKYeTux8+C/D2x9HxbsOdA2k4puANGDkJWVhbo+T+D9Dz4qcnrMd3OwaEEM3v/gIyxa+iMcHJ0woG9vZGZeN9YcTPwdgwf0RUDQ01j0/Q9YtPRHdO/5CkxMuBtVpBaNPDFj1W8IHrIQ4e8tg6mpCdaO6w5rS3NjjbWlOeIPn8dHc+KKnc+XA0PQ+WlvvPb5KoS8vRiVrCzw82ddYWLy35fgis9fgpmpDmHDv0fQwBgc/Psiln/WFS5VbcpzFR9KJjp1Az1a2HNAj4VnWrTEMy1aFjlNRLBk4QL06TcAIe1CAQCfjv0CIcFPY8O6teja7WUAwNfjv8DLr0Sg9xv9jK/18qpR7m2nkj034gfFv/t/uQ5nf/4fmnq74tdDZwEA3285AgDwdLErch6VbfTo1aEx+oxbg+2/nQEA9P5iDU4sGYg2T9bAlv2n4FDZCnWq22PAV+tx+NQlAMBHc3ZgwHN+qFfDERfTMstrFR9K7DnQNv7kocfe+XPncPnyJQQGPW0cZ2FhAb9mT+Fg4u8AgCupqTj0x0HY29sj8pWXEdLyafTp9Sp+/+1ARTWbilHZRg8ASLuWVerXNPV2hYW5KbbsP2Ucl5R6HUdOX0ZA/WoAgNSMLBw9cxk9QxvC2tIcpiY6vBHeBMlXruP3v5Lv70o8AnQ6dQM9WhgOHhNnz55F7969K7oZD6XLl2//CrR3cFCMd3BwQOrlywCAc+du/wKdOW0KXuj6EqbOnI169Rqgf59eOHPm9ANtL5Vs3IAQ/HroLP48fbnUr3G1t0F2Th6uXs9WjE9Jy4SL/X+nDMLfXYrGtV1wafVQXN3wDoa8+BSeG/ED0jOzC85S83QqB3q0MBw8Jq5cuYL58+eXWJOdnY2MjAzFkJ39+Bz0dAV+3oj8N+7WrVsAgBdf6o7nnn8RT9Srj+HvjUCNGjWxavnPD7ytVLQJQ9rBt5YzIj9ffV/mp9Pd/hwYTPxfe1y6egNt316EFoPmY83uE1j+WVe42j+O1xzoVA30aOE1BxqxenXJB8N//vnnrvOIjo7Gxx9/rBj3wYejMHLUmHtp2kPP0dEJAJB6+TKcnJyN469cSTX2JhjG16pdR/HamrVqIzk56QG1lEryzeB2CA/0RtuhixV3GJRG8pVM6C3MUKWSXtF74FTFBnuOnAcAtGrqhWf9a8Pt+Ym4diMHABD17WaEPFkDr4b64qule+7fyjwC+H2vbQwHGtGlSxfodDrInT9zCij4y7igESNGYOjQoYpx+SYW96V9D7Nq1avD0dEJe+J344l69QEAubk5OLA/Af97exgAwL1aNTg5O+P06VOK1545cxpPP9PigbeZlCYMbofOz9RF6LAlOJOcrvr1v59IRk5uPkL8auLnHccA3D7V0KCGI0bO3g4AsNbfvvvh1i3lPnZL5K77lhbxgkRtYzjQCDc3N0ydOhVdunQpcnpiYiL8/PxKnIder4der1eMu5FbfNh4lNy4kYmz//53L/r58+dw/NhRVLazg5ubO3pGvIa5s2fC09MLnl5emDt7JiwtLRHWMRzA7WAV+XofzJg6GXV9fODzRD2sWbUSp0/9gy+/mVRRq0UAJr4Viu5t6uOlUT/j+o0c422F6ZnZuJmTBwCoamsJD+fKcHOoBACo62EPALh4JRMX0zKRkZmNmI0H8UX/NkjNyELatZuI7tcah09dwrbfTgMA9v55HmnXb2LOe+EYu/BXZGXnonfHJqjhWgUb9/794Fe8gj2GeeixopOSfmrSI6Nz585o0qQJPvnkkyKnHzx4EE2bNjWeOy8trYSD/fv2om/vyELjOz3XBZ98/sV/D0H68QdkZKSjYaNGGDFyFOp411XUfzdnFn74fgnSM9JRt64Pooa9g6ZPlhy6HiUOYeMqugmqZW15v8jxfcevw6LNhwAAr4b6Yva7HQvVfLZgFz5fsAsAoDc3RXT/NujWpv4dD0HahHOX/jtF8WRdV4zp3RJP1nWDuakJjp65jLELf8XmhLuftnsYFbftSiPhH3U9NE/VKvo2Uno4MRxoxC+//ILMzEx06NChyOmZmZnYv38/goODVc1XK+GASudRDAdUdvcUDk6pDAc1GQ4eJTytoBEtWpR83tvGxkZ1MCAiKg6vOdA2hgMiIlKN1xxoG8MBERGpxmygbQwHRESkHtOBpvEJiUREpFp5PiFxzJgx0Ol0isHV1dU4XUQwZswYuLu7w8rKCq1atcKRI0cU88jOzsaQIUPg6OgIGxsbdO7cGefOnbsv6/44YDggIiLVyvtvKzRo0ABJSUnG4dChQ8Zp48ePxzfffIMpU6YgISEBrq6uaNeuHa5d+++206ioKKxYsQJLly7Frl27cP36dYSHhyM/P7+sq/xY4WkFIiJSr5xPK5iZmSl6CwxEBBMnTsTIkSPxwgsvAADmz58PFxcXLFmyBP3790d6ejrmzp2LhQsXom3btgCARYsWwcPDA1u2bEH79u3Lt/EawJ4DIiJSTafyP7V/2O3EiRNwd3dHzZo18fLLLxv/PsypU6eQnJyM0NBQY61er0dwcDB2794NADhw4AByc3MVNe7u7mjYsKGxhkrGcEBERKrpdOqG6Oho2NnZKYbo6Ogi5+3v748FCxZg06ZNmD17NpKTkxEUFITU1FQkJycDAFxcXBSvcXFxMU5LTk6GhYUFqlatWmwNlYynFYiISDW1ZxWK+sNuBf+Wi0FYWJjx/319fREYGIjatWtj/vz5CAgIuL38Qn9i/e5/AKs0NXQbew6IiEg9lVck6vV6VK5cWTEUFw4KsrGxga+vL06cOGG8DqFgD0BKSoqxN8HV1RU5OTlIS0srtoZKxnBARESqqb3m4F5kZ2fj6NGjcHNzQ82aNeHq6orY2Fjj9JycHOzYsQNBQUEAAD8/P5ibmytqkpKScPjwYWMNlYynFYiISLXy7J0fPnw4OnXqBE9PT6SkpOCzzz5DRkYGIiMjodPpEBUVhbFjx8Lb2xve3t4YO3YsrK2t0bNnTwCAnZ0d+vTpg2HDhsHBwQH29vYYPnw4fH19jXcvUMkYDoiISLXyDAfnzp1Djx49cPnyZTg5OSEgIAB79uyBl5cXAODdd99FVlYWBg4ciLS0NPj7+2Pz5s2wtbU1zmPChAkwMzNDt27dkJWVhZCQEMTExMDU1LT8Gq4h/JPNVCL+yebHC/9k8+PlXv5k87GkG6rqn3CzLvOy6MFjzwEREanGi/61jeGAiIhUYzbQNoYDIiJSj+lA0xgOiIhItXu9PZEebgwHRESkGq850DaGAyIiUo3ZQNsYDoiISD2mA01jOCAiItV4zYG2MRwQEZFqJswGmsZwQERE6jEcaBrDARERqcbTCtrGcEBERKrxVkZtYzggIiLVmA20jeGAiIhUY8+BtjEcEBFRGTAdaBnDARERqcaeA21jOCAiItWYDbSN4YCIiFQzYdeBpjEcEBGReswGmsZwQEREqjEbaBvDARERqcazCtrGcEBERKrx8cnaxnBARETqMRtoGsMBERGpxmygbQwHRESkGq850DaGAyIiUo3XHGgbwwEREanGngNtYzggIiLVGA60jeGAiIhU42kFbWM4ICIi1dhzoG0MB0REpBqzgbYxHBARkXpMB5rGcEBERKrxmgNtYzggIiLVeM2BtjEcEBGRaswG2sZwQEREqunYdaBpDAdERKQas4G26UREKroRRA+T7OxsREdHY8SIEdDr9RXdHCpnfL+JCmM4ICogIyMDdnZ2SE9PR+XKlSu6OVTO+H4TFWZS0Q0gIiKihwvDARERESkwHBAREZECwwFRAXq9HqNHj+bFaY8Jvt9EhfGCRCIiIlJgzwEREREpMBwQERGRAsMBERERKTAcEBERkQLDAdEdpk2bhpo1a8LS0hJ+fn745ZdfKrpJVE527tyJTp06wd3dHTqdDitXrqzoJhE9NBgOiP7fsmXLEBUVhZEjR+L3339HixYtEBYWhn///beim0blIDMzE40bN8aUKVMquilEDx3eykj0//z9/fHkk09i+vTpxnH16tVDly5dEB0dXYEto/Km0+mwYsUKdOnSpaKbQvRQYM8BEYCcnBwcOHAAoaGhivGhoaHYvXt3BbWKiKhiMBwQAbh8+TLy8/Ph4uKiGO/i4oLk5OQKahURUcVgOCC6g06nU/xbRAqNIyLSOoYDIgCOjo4wNTUt1EuQkpJSqDeBiEjrGA6IAFhYWMDPzw+xsbGK8bGxsQgKCqqgVhERVQyzim4A0cNi6NChiIiIQLNmzRAYGIhZs2bh33//xYABAyq6aVQOrl+/jpMnTxr/ferUKSQmJsLe3h6enp4V2DKiisdbGYnuMG3aNIwfPx5JSUlo2LAhJkyYgJYtW1Z0s6gcxMXFoXXr1oXGR0ZGIiYm5sE3iOghwnBARERECrzmgIiIiBQYDoiIiEiB4YCIiIgUGA6IiIhIgeGAiIiIFBgOiIiISIHhgIiIiBQYDoiIiEiB4YCIiIgUGA6IiIhIgeGAiIiIFBgOiIiISOH/ADC+Uck9NhfAAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report for Random Forest Classifier - GSCV Model\n",
"--------------------------------------------------\n",
" precision recall f1-score support\n",
"\n",
" 0 0.96 0.96 0.96 2352\n",
" 1 0.96 0.95 0.96 2214\n",
"\n",
" accuracy 0.96 4566\n",
" macro avg 0.96 0.96 0.96 4566\n",
"weighted avg 0.96 0.96 0.96 4566\n",
"\n"
]
}
],
"source": [
"# Fitting RandomForestClassifier model with best parameters obtained from GridSearchCV\n",
"model_rf_gs = RandomForestClassifier(n_estimators=359, criterion='gini', max_depth=16, max_features='log2', min_samples_split=25, random_state=42)\n",
"\n",
"output_rf_gs = fit_models(X_train, X_test, y_train, y_test, model_rf_gs, \"Random Forest Classifier - GSCV\")"
]
},
{
"cell_type": "markdown",
"id": "b6a4be40",
"metadata": {},
"source": [
"# Selecting Best model based on accuracy"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "171fdd38",
"metadata": {},
"outputs": [],
"source": [
"# Appending tuned models to result dataframe\n",
"result_df = pd.concat([result_df, output_lr_opt, output_rf_opt, output_SVC_opt, output_rf_gs], axis=0).reset_index(drop=True)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "50b1bd32",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Model | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" Recall | \n",
" Precision | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" Logistic Regression | \n",
" 0.958872 | \n",
" 0.957950 | \n",
" 0.953478 | \n",
" 0.959545 | \n",
"
\n",
" \n",
" | 1 | \n",
" Decision Tree Classifier | \n",
" 0.999617 | \n",
" 0.938458 | \n",
" 0.933604 | \n",
" 0.939119 | \n",
"
\n",
" \n",
" | 2 | \n",
" Random Forest Classifier | \n",
" 0.999617 | \n",
" 0.956198 | \n",
" 0.948509 | \n",
" 0.960659 | \n",
"
\n",
" \n",
" | 3 | \n",
" Support Vector Classifier | \n",
" 0.964458 | \n",
" 0.956855 | \n",
" 0.952123 | \n",
" 0.958618 | \n",
"
\n",
" \n",
" | 4 | \n",
" Gaussian Naive Bayes | \n",
" 0.875794 | \n",
" 0.874507 | \n",
" 0.882114 | \n",
" 0.862252 | \n",
"
\n",
" \n",
" | 5 | \n",
" Logistic Regression - Tuned | \n",
" 0.958927 | \n",
" 0.957950 | \n",
" 0.953478 | \n",
" 0.959545 | \n",
"
\n",
" \n",
" | 6 | \n",
" Random Forest Classifier - Tuned | \n",
" 0.996550 | \n",
" 0.956198 | \n",
" 0.948058 | \n",
" 0.961081 | \n",
"
\n",
" \n",
" | 7 | \n",
" Support Vector Classifier - Tuned | \n",
" 0.996550 | \n",
" 0.956198 | \n",
" 0.948509 | \n",
" 0.960659 | \n",
"
\n",
" \n",
" | 8 | \n",
" Random Forest Classifier - GSCV | \n",
" 0.964732 | \n",
" 0.958169 | \n",
" 0.952123 | \n",
" 0.961240 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Model Accuracy_train Accuracy_test Recall \\\n",
"0 Logistic Regression 0.958872 0.957950 0.953478 \n",
"1 Decision Tree Classifier 0.999617 0.938458 0.933604 \n",
"2 Random Forest Classifier 0.999617 0.956198 0.948509 \n",
"3 Support Vector Classifier 0.964458 0.956855 0.952123 \n",
"4 Gaussian Naive Bayes 0.875794 0.874507 0.882114 \n",
"5 Logistic Regression - Tuned 0.958927 0.957950 0.953478 \n",
"6 Random Forest Classifier - Tuned 0.996550 0.956198 0.948058 \n",
"7 Support Vector Classifier - Tuned 0.996550 0.956198 0.948509 \n",
"8 Random Forest Classifier - GSCV 0.964732 0.958169 0.952123 \n",
"\n",
" Precision \n",
"0 0.959545 \n",
"1 0.939119 \n",
"2 0.960659 \n",
"3 0.958618 \n",
"4 0.862252 \n",
"5 0.959545 \n",
"6 0.961081 \n",
"7 0.960659 \n",
"8 0.961240 "
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result_df"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d321d1cc",
"metadata": {},
"outputs": [],
"source": [
"# Selecting Best model based on best test accuracy from the above table\n",
"final_model = RandomForestClassifier(n_estimators=359, \n",
" criterion='gini', \n",
" max_depth=16, \n",
" max_features='log2', \n",
" min_samples_split=25, \n",
" random_state=42)"
]
}
],
"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.10.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}