{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "# **Admission and Visa approval Prediction**" ], "metadata": { "id": "vEaiIHQy_4N_" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Cca3qrTTSWOT" }, "outputs": [], "source": [ "#import libraries\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "source": [ "# **==========ADMISSIONS MODEL==========**" ], "metadata": { "id": "puDlRyHsUOfz" } }, { "cell_type": "code", "source": [ "adm_df = pd.read_csv('/content/admission_data.csv')" ], "metadata": { "id": "mHSgKKTrf1NE" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "adm_df.shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "BIu3TdBgCDSq", "outputId": "8a55e34a-ec0a-4724-b6e7-8da7e808db2f" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(500, 8)" ] }, "metadata": {}, "execution_count": 3 } ] }, { "cell_type": "code", "source": [ "adm_df.info()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "jgOXx1vggNUl", "outputId": "ed5882e0-2c76-42c0-878f-83a42036a1d0" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 500 entries, 0 to 499\n", "Data columns (total 8 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 GRE Score 500 non-null int64 \n", " 1 TOEFL Score 500 non-null int64 \n", " 2 University Rating 500 non-null int64 \n", " 3 SOP 500 non-null float64\n", " 4 LOR 500 non-null float64\n", " 5 CGPA 500 non-null float64\n", " 6 Research 500 non-null int64 \n", " 7 Chance of Admit 500 non-null float64\n", "dtypes: float64(4), int64(4)\n", "memory usage: 31.4 KB\n" ] } ] }, { "cell_type": "code", "source": [ "adm_df.rename(columns={\n", " \"GRE Score\": \"gre_score\",\n", " \"TOEFL Score\": \"toefl_score\",\n", " \"University Rating\": \"university_rating\",\n", " \"SOP\": \"sop\",\n", " \"LOR \": \"lor\",\n", " \"CGPA\": \"cgpa\",\n", " \"Research\": \"research\",\n", " \"Chance of Admit \": \"chance_of_admit\"\n", "}, inplace=True)\n" ], "metadata": { "id": "YysTfKpcCP7o" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "adm_df.columns" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "BWoEQqpZDFnj", "outputId": "ef2823c4-bc9e-4eb7-db8b-8fa126807993" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Index(['gre_score', 'toefl_score', 'university_rating', 'sop', 'lor', 'cgpa',\n", " 'research', 'chance_of_admit'],\n", " dtype='object')" ] }, "metadata": {}, "execution_count": 6 } ] }, { "cell_type": "code", "source": [ "adm_df.info()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "38PnZgT1CtTr", "outputId": "90e48dd4-1b80-49e3-adad-a085fd6d88ea" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 500 entries, 0 to 499\n", "Data columns (total 8 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 gre_score 500 non-null int64 \n", " 1 toefl_score 500 non-null int64 \n", " 2 university_rating 500 non-null int64 \n", " 3 sop 500 non-null float64\n", " 4 lor 500 non-null float64\n", " 5 cgpa 500 non-null float64\n", " 6 research 500 non-null int64 \n", " 7 chance_of_admit 500 non-null float64\n", "dtypes: float64(4), int64(4)\n", "memory usage: 31.4 KB\n" ] } ] }, { "cell_type": "code", "source": [ "adm_df['chance_of_admit'].value_counts()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 489 }, "id": "CrIjd2HTClPQ", "outputId": "6ae1c057-354e-429c-eaaa-2b3003dc5a74" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "chance_of_admit\n", "0.71 23\n", "0.64 19\n", "0.73 18\n", "0.72 16\n", "0.79 16\n", " ..\n", "0.60 2\n", "0.51 2\n", "0.43 1\n", "0.39 1\n", "0.37 1\n", "Name: count, Length: 61, dtype: int64" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
count
chance_of_admit
0.7123
0.6419
0.7318
0.7216
0.7916
......
0.602
0.512
0.431
0.391
0.371
\n", "

61 rows × 1 columns

\n", "

" ] }, "metadata": {}, "execution_count": 8 } ] }, { "cell_type": "code", "source": [ "# Create binary target column (0/1) using 0.75 threshold\n", "adm_df[\"admission_status\"] = (adm_df[\"chance_of_admit\"] >= 0.75).astype(int)\n", "\n", "# Drop the original continuous column\n", "\n", "adm_df.drop(\"chance_of_admit\", axis=1, inplace=True)\n", "\n", "# Map 0/1 to readable categories\n", "\n", "adm_df[\"admission_status\"] = adm_df[\"admission_status\"].map({0: \"Not Admitted\", 1: \"Admitted\"})\n", "\n", "# Check the DataFrame\n", "print(adm_df.head())\n", "print(adm_df[\"admission_status\"].value_counts())\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "eJAr0Os-EtqF", "outputId": "7a3573b7-0200-42d4-9b06-3deeb98224d2" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " gre_score toefl_score university_rating sop lor cgpa research \\\n", "0 337 118 4 4.5 4.5 9.65 1 \n", "1 324 107 4 4.0 4.5 8.87 1 \n", "2 316 104 3 3.0 3.5 8.00 1 \n", "3 322 110 3 3.5 2.5 8.67 1 \n", "4 314 103 2 2.0 3.0 8.21 0 \n", "\n", " admission_status \n", "0 Admitted \n", "1 Admitted \n", "2 Not Admitted \n", "3 Admitted \n", "4 Not Admitted \n", "admission_status\n", "Not Admitted 282\n", "Admitted 218\n", "Name: count, dtype: int64\n" ] } ] }, { "cell_type": "code", "source": [ "adm_df.head()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "pqe2iDiUgrNn", "outputId": "a0b9f376-a00c-4cf5-eb7f-63648c2458cc" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " gre_score toefl_score university_rating sop lor cgpa research \\\n", "0 337 118 4 4.5 4.5 9.65 1 \n", "1 324 107 4 4.0 4.5 8.87 1 \n", "2 316 104 3 3.0 3.5 8.00 1 \n", "3 322 110 3 3.5 2.5 8.67 1 \n", "4 314 103 2 2.0 3.0 8.21 0 \n", "\n", " admission_status \n", "0 Admitted \n", "1 Admitted \n", "2 Not Admitted \n", "3 Admitted \n", "4 Not Admitted " ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
gre_scoretoefl_scoreuniversity_ratingsoplorcgparesearchadmission_status
033711844.54.59.651Admitted
132410744.04.58.871Admitted
231610433.03.58.001Not Admitted
332211033.52.58.671Admitted
431410322.03.08.210Not Admitted
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "variable_name": "adm_df", "summary": "{\n \"name\": \"adm_df\",\n \"rows\": 500,\n \"fields\": [\n {\n \"column\": \"gre_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 11,\n \"min\": 290,\n \"max\": 340,\n \"num_unique_values\": 49,\n \"samples\": [\n 307,\n 335,\n 297\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"toefl_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6,\n \"min\": 92,\n \"max\": 120,\n \"num_unique_values\": 29,\n \"samples\": [\n 94,\n 119,\n 112\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"university_rating\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 1,\n \"max\": 5,\n \"num_unique_values\": 5,\n \"samples\": [\n 3,\n 1,\n 2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"sop\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.9910036207566069,\n \"min\": 1.0,\n \"max\": 5.0,\n \"num_unique_values\": 9,\n \"samples\": [\n 1.0,\n 4.0,\n 5.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lor\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.9254495738978181,\n \"min\": 1.0,\n \"max\": 5.0,\n \"num_unique_values\": 9,\n \"samples\": [\n 5.0,\n 3.5,\n 1.5\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cgpa\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.6048128003332052,\n \"min\": 6.8,\n \"max\": 9.92,\n \"num_unique_values\": 184,\n \"samples\": [\n 9.6,\n 8.9,\n 8.24\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"research\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 0,\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"admission_status\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Not Admitted\",\n \"Admitted\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 10 } ] }, { "cell_type": "markdown", "source": [ "EDA" ], "metadata": { "id": "MBRa0FMaIW0S" } }, { "cell_type": "code", "source": [ "adm_df.describe()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 300 }, "id": "TsRP6spAIjdX", "outputId": "9a408a48-afdb-4407-8532-893d72af6c73" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " gre_score toefl_score university_rating sop lor \\\n", "count 500.000000 500.000000 500.000000 500.000000 500.00000 \n", "mean 316.472000 107.192000 3.114000 3.374000 3.48400 \n", "std 11.295148 6.081868 1.143512 0.991004 0.92545 \n", "min 290.000000 92.000000 1.000000 1.000000 1.00000 \n", "25% 308.000000 103.000000 2.000000 2.500000 3.00000 \n", "50% 317.000000 107.000000 3.000000 3.500000 3.50000 \n", "75% 325.000000 112.000000 4.000000 4.000000 4.00000 \n", "max 340.000000 120.000000 5.000000 5.000000 5.00000 \n", "\n", " cgpa research \n", "count 500.000000 500.000000 \n", "mean 8.576440 0.560000 \n", "std 0.604813 0.496884 \n", "min 6.800000 0.000000 \n", "25% 8.127500 0.000000 \n", "50% 8.560000 1.000000 \n", "75% 9.040000 1.000000 \n", "max 9.920000 1.000000 " ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
gre_scoretoefl_scoreuniversity_ratingsoplorcgparesearch
count500.000000500.000000500.000000500.000000500.00000500.000000500.000000
mean316.472000107.1920003.1140003.3740003.484008.5764400.560000
std11.2951486.0818681.1435120.9910040.925450.6048130.496884
min290.00000092.0000001.0000001.0000001.000006.8000000.000000
25%308.000000103.0000002.0000002.5000003.000008.1275000.000000
50%317.000000107.0000003.0000003.5000003.500008.5600001.000000
75%325.000000112.0000004.0000004.0000004.000009.0400001.000000
max340.000000120.0000005.0000005.0000005.000009.9200001.000000
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"adm_df\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"gre_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 134.31959598717793,\n \"min\": 11.295148372354694,\n \"max\": 500.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 316.472,\n 317.0,\n 500.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"toefl_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 148.54698537663884,\n \"min\": 6.081867659564522,\n \"max\": 500.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 107.192,\n 107.0,\n 500.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"university_rating\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 175.8093363236959,\n \"min\": 1.0,\n \"max\": 500.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 3.114,\n 3.0,\n 500.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"sop\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 175.75364204315028,\n \"min\": 0.9910036207566069,\n \"max\": 500.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 3.374,\n 3.5,\n 500.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lor\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 175.72621272918164,\n \"min\": 0.9254495738978181,\n \"max\": 500.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 3.484,\n 3.5,\n 500.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"cgpa\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 174.19317432229437,\n \"min\": 0.6048128003332052,\n \"max\": 500.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 8.576439999999998,\n 8.56,\n 500.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"research\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 176.57228090801308,\n \"min\": 0.0,\n \"max\": 500.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 0.56,\n 1.0,\n 0.49688407860903494\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 11 } ] }, { "cell_type": "code", "source": [ "sns.countplot(data=adm_df, x=\"admission_status\")\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 450 }, "id": "KekFkKnYIVum", "outputId": "4a4424e8-8e01-46b6-e046-47a7d402d7c5" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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NYcPHzbGGLNmzRoTEBBgMjIyTE5Ojlm2bJmJjo42EydONMYYc/78edOyZUvTvXt3s2XLFpOZmWluuukmI8ksWrSoQv98cPmIHbjVrbfeaqZPn26MMaa4uNjUq1fPrFq1yhhjTHx8vHn00Udd9u/QoUOZ2ImKijLnz593rmvWrJm5/fbbncslJSWmdu3a5r333jPGuMaOMcasWrXKSDLHjx93eaw77rijTKBMnjzZ9OjRw2XdgQMHnLF04sQJ4+XlZT744APn9qNHjxpfX19iB9ecn2LHGGM6duzojI6fx879999v7rzzTpf7jh492sTGxjqXo6KizLRp037xMQsKCoyvr6/ZsmWLMcaYzZs3Gz8/P3PixAljjLns11hUVJT5/e9/71zOzc01ksxzzz3nXJeVlWUkOePrwtgxxpgJEya4/Lz5SXmB0r17d/Piiy+6rPvrX/9qwsPDjTHGfP7556ZGjRrmf//3f53bP/vsM2LnKuE0FtwmOztbX331lQYOHChJqlGjhu677z6lp6dLknbu3KkOHTq43Cc+Pr7McVq0aCEPj///r3JoaKhatWrlXPb09FTdunV1+PDhSs+8detWrVq1Sn5+fs5b8+bNJUk5OTnKycnRuXPnXOYODg5Ws2bNKv3YgDu9/PLLeuedd7Rz584y23bu3KlOnTq5rOvUqZN2796t8+fP/6rHee+999SkSRPFxcVJktq0aaOoqCgtWLBAkn7Va6x169bOr3/680EX/mz4aV1V/WxITU11+dkwfPhw5ebm6vTp09q5c6ciIyNd/jp3eT/PcGVwhSbcJj09XSUlJS4vfmOMvL299cYbb1z2cWrWrOmy7HA4yl1XWlpauYH14zVGffv21csvv1xmW3h4uPbs2VPpxwCqo86dOysxMVHjxo3TkCFDrtjjpKena8eOHS4fICgtLdWcOXM0bNiwX3WsC38O/HSdUHnrqupnw6RJk9S/f/8y23x8fCp9fFQOsQO3KCkp0bvvvqupU6eqR48eLtv69eun9957TzExMVq/fr0efPBB57Z169ZV+SxeXl6SVOb/QL28vMqsu/nmm7Vw4UJFR0eX+2muJk2aqGbNmlq/fr0aNmwoSTp+/Li+++473XHHHVU+O3A1vfTSS2rTpk2Zd1FiYmK0du1al3Vr165V06ZN5enpKan819PPffPNN9q4caNWr16t4OBg5/pjx46pS5cu2rVr11V9jV1s5po1a5b7syE7O1s33HBDuceKiYnRgQMHlJubq/DwcElX5ucZykfswC2WLFmi48ePa9iwYQoMDHTZlpSUpPT0dD311FMaMmSI2rVrp06dOmnevHnasWOHGjduXKWzREVFyeFwaMmSJerdu7d8fX3l5+en6OhorV+/Xvv27ZOfn5+Cg4M1cuRIvf322xo4cKDGjBmj4OBg7dmzR++//77+8pe/yM/PT8OGDdPo0aNVt25dhYSE6JlnnnE5zQZcq1q1aqVBgwbp9ddfd1n/5JNPqn379po8ebLuu+8+ZWVl6Y033tCbb77p3Cc6Olpr1qzRgAED5O3trXr16pU5fnp6um655RZ17ty5zLb27dsrPT1dr7zyylV7jUVHR2vv3r3asmWLGjRoIH9/f+enzVasWKFOnTrJ29tbderU0fjx43XXXXepYcOGuueee+Th4aGtW7dq+/btev7555WQkKCmTZtq8ODBeuWVV1RYWKhnnnmmymdG+fgJDLdIT09XQkJCmdCRfoydjRs3KiYmRs8995zGjBmjtm3b6vvvv9eIESOqfJbf/OY3mjRpkp5++mmFhoYqOTlZkvTUU0/J09NTsbGxql+/vvbv36+IiAitXbtW58+fV48ePdSqVSuNGjVKQUFBzh+2r7zyim6//Xb17dtXCQkJuu2229S2bdsqnxtwh9TU1DKnfW6++WZ98MEHev/999WyZUuNHz9eqampLqe7UlNTtW/fPjVp0kT169cvc9xz587pb3/7m5KSksp93KSkJL377rsqLi6+aq+xpKQk9ezZU127dlX9+vX13nvvSZKmTp2q5cuXKzIyUjfddJMkKTExUUuWLNGyZcvUvn17dezYUdOmTVNUVJQkycPDQ4sWLdKZM2d0yy236A9/+INeeOGFKp8Z5eOvngMAAKvxzg4AALAasQMAAKxG7AAAAKsROwAAwGrEDgAAsBqxAwAArEbsAAAAqxE7AADAasQOgMu2b98+ORwObdmypVLH6dKli0aNGlXpeYYMGaJ+/fpV+jgA7MbfxgJw1X344Ydl/jJ9Rbz22muqLr8EPiMjQ6NGjVJ+fv6vut/q1avVtWtXHT9+XEFBQVdkNuB6R+wAuOou/IvWlVHe31YDgJ/jNBZwHVu6dKluu+02BQUFqW7durrrrruUk5Pj3P7VV1/ppptuko+Pj9q1a6fNmze73H/16tVyOBz6/PPPddNNN8nX11fdunXT4cOH9dlnnykmJkYBAQG6//77dfr0aef9fn4a680339SNN94oHx8fhYaG6p577nFu+8c//qFWrVrJ19dXdevWVUJCgk6dOiWp7GmsoqIiPf744woJCZGPj49uu+02bdiwocy8K1asULt27VSrVi3deuutys7Ovqzv19atW9W1a1f5+/srICBAbdu21caNG7V69Wo99NBDKigokMPhkMPh0MSJEyVJf/3rX9WuXTv5+/srLCxM999/vw4fPizpx9OCXbt2lSTVqVNHDofD+cczo6OjNX36dJfHb9OmjfO4xhhNnDhRDRs2lLe3tyIiIvT4449f1vMArjfEDnAdO3XqlFJSUrRx40atWLFCHh4e+u1vf6vS0lKdPHlSd911l2JjY7Vp0yZNnDhRTz31VLnHmThxot544w19+eWXOnDggH73u99p+vTpmj9/vj755BMtW7ZMM2bMKPe+Gzdu1OOPP67U1FRlZ2dr6dKl6ty5syQpNzdXAwcO1NChQ7Vz506tXr1a/fv3v+ipqzFjxmjhwoV655139PXXX+uGG25QYmKijh075rLfM888o6lTp2rjxo2qUaOGhg4delnfr0GDBqlBgwbasGGDNm3apKefflo1a9bUrbfequnTpysgIEC5ubnKzc11fq+Ki4s1efJkbd26VYsXL9a+ffucQRMZGamFCxdKkrKzs5Wbm6vXXnvtsmZZuHChpk2bprfeeku7d+/W4sWL1apVq8u6L3DdMQDwf44cOWIkmW+++ca89dZbpm7duubMmTPO7bNmzTKSzObNm40xxqxatcpIMl988YVzn7S0NCPJ5OTkONf913/9l0lMTHQu33HHHeaPf/yjMcaYhQsXmoCAAFNYWFhmnk2bNhlJZt++feXOO3jwYHP33XcbY4w5efKkqVmzppk3b55z+7lz50xERISZMmXKRef95JNPjCSX53kx/v7+JiMjo9xtc+fONYGBgb94jA0bNhhJ5sSJEy4zHT9+3GW/qKgoM23aNJd1cXFxZsKECcYYY6ZOnWqaNm1qzp0794uPCVzveGcHuI7t3r1bAwcOVOPGjRUQEKDo6GhJ0v79+7Vz5061bt1aPj4+zv3j4+PLPU7r1q2dX4eGhqpWrVpq3Lixy7qfTt383J133qmoqCg1btxYDzzwgObNm+c85RUXF6fu3burVatWuvfee/X222/r+PHj5R4nJydHxcXF6tSpk3NdzZo1dcstt2jnzp0XnTc8PFySLjrfhVJSUvSHP/xBCQkJeumll1xO+V3Mpk2b1LdvXzVs2FD+/v664447JP34Pa6Me++9V2fOnFHjxo01fPhwLVq0SCUlJZU6JmArYge4jvXt21fHjh3T22+/rfXr12v9+vWSpHPnzv2q41z4ySqHw1Hmk1YOh0OlpaXl3tff319ff/213nvvPYWHh2v8+PGKi4tTfn6+PD09tXz5cn322WeKjY3VjBkz1KxZM+3du/dXPtNLzyvpovNdaOLEidqxY4f69OmjlStXKjY2VosWLbro/qdOnVJiYqICAgI0b948bdiwwbn/L32PPTw8ypyuKy4udn4dGRmp7Oxsvfnmm/L19dWjjz6qzp07u+wD4EfEDnCdOnr0qLKzs/Xss8+qe/fuiomJcXnXJCYmRtu2bdPZs2ed69atW3dFZqlRo4YSEhI0ZcoUbdu2Tfv27dPKlSsl/RgjnTp10qRJk7R582Z5eXmVGxhNmjSRl5eX1q5d61xXXFysDRs2KDY2tspmbdq0qZ544gktW7ZM/fv319y5cyVJXl5eOn/+vMu+u3bt0tGjR/XSSy/p9ttvV/Pmzcu8g+Tl5SVJZe5bv3595ebmOpcLCwvLRJ6vr6/69u2r119/XatXr1ZWVpa++eabKnuugC346DlwnapTp47q1q2rP//5zwoPD9f+/fv19NNPO7fff//9euaZZzR8+HCNGzdO+/bt06uvvlrlcyxZskT/8z//o86dO6tOnTr69NNPVVpaqmbNmmn9+vVasWKFevTooZCQEK1fv15HjhxRTExMmePUrl1bI0aM0OjRoxUcHKyGDRtqypQpOn36tIYNG1bpOc+cOaPRo0frnnvuUaNGjfTDDz9ow4YNSkpKkvTjp6dOnjypFStWKC4uTrVq1VLDhg3l5eWlGTNm6JFHHtH27ds1efJkl+NGRUXJ4XBoyZIl6t27t3x9feXn56du3bopIyNDffv2VVBQkMaPHy9PT0/n/TIyMnT+/Hl16NBBtWrV0t/+9jf5+voqKiqq0s8VsI67LxoC4D7Lly83MTExxtvb27Ru3dqsXr3aSDKLFi0yxhiTlZVl4uLijJeXl2nTpo1ZuHBhuRcoX3hxbXkX6k6YMMHExcU5ly+8QPlf//qXueOOO0ydOnWMr6+vad26tVmwYIExxphvv/3WJCYmmvr16xtvb2/TtGlTM2PGDOdxLrxA2Rhjzpw5Yx577DFTr1494+3tbTp16mS++uor5/by5t28ebORZPbu3XvJ71VRUZEZMGCAiYyMNF5eXiYiIsIkJye7XNj8yCOPmLp16xpJzguJ58+fb6Kjo423t7eJj483//znP12+h8YYk5qaasLCwozD4TCDBw82xhhTUFBg7rvvPhMQEGAiIyNNRkaGywXKixYtMh06dDABAQGmdu3apmPHji4XXgP4/xzGVJNfPwoAAHAFcM0OAACwGrEDAP+nRYsW8vPzK/c2b948d48HoII4jQUA/+f777+/6Ee3Q0ND5e/vf5UnAlAViB0AAGA1TmMBAACrETsAAMBqxA4AALAasQMAAKxG7AAAAKsROwAAwGrEDgAAsBqxAwAArPb/AKiVNDdVTr0zAAAAAElFTkSuQmCC\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "# Select numeric columns (exclude target)\n", "numeric_cols = adm_df.select_dtypes(include=['int64', 'float64']).columns\n", "\n", "# Create a boxplot for all numeric features\n", "plt.figure(figsize=(12,6))\n", "sns.boxplot(data=adm_df[numeric_cols])\n", "plt.title(\"Boxplot of Numeric Features\")\n", "plt.xticks(rotation=45)\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 623 }, "id": "finQJyOiIVrI", "outputId": "b8feda5e-2bbe-4c05-8e18-009fe105261e" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9oAAAJeCAYAAABLQX09AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAdSBJREFUeJzt3Xd4FNX/9vF7U6lJaEkIhNCU3mtEQYp0RIpKLwICUgSUzleKSJEuoDSlN+lFegfpTYp0IdSEUJJAIH2eP3yyPwKoBCZZQt6v69oLdmZ25rNh2Ow9Z845FsMwDAEAAAAAAFPY2boAAAAAAADeJARtAAAAAABMRNAGAAAAAMBEBG0AAAAAAExE0AYAAAAAwEQEbQAAAAAATETQBgAAAADARARtAAAAAABMRNAGAAAAAMBEBG0AwBvBYrFo0KBBti4jjkOHDumdd95R6tSpZbFYdPz4cVuXZDPZs2dXq1atbF0GAACJgqANAPhXs2bNksViifNwd3dXxYoVtX79eluX98r+/PNPDRo0SFeuXDF1v5GRkfr444917949jRs3TnPnzpWPj89zt92xY4f1Z3vkyJFn1rdq1Upp0qQxtb6kLHv27M+ck7GPsLCwBDnmsGHDtHLlygTZNwDgzeNg6wIAAEnDkCFDlCNHDhmGoYCAAM2aNUs1a9bUmjVrVLt2bVuX99L+/PNPDR48WO+//76yZ89u2n4vXbokPz8/TZ8+XW3btn3h1w0aNEhr1qwxrY7Xxblz52RnZ971/aJFi+qrr756ZrmTk5Npx3jSsGHD1LBhQ3300UcJsn8AwJuFoA0AeCE1atRQyZIlrc/btGkjDw8PLVy4MEkH7YRy+/ZtSZKbm9sLv6Zo0aJau3atjh49quLFiydQZYnHMAyFhYUpZcqUcnZ2NnXfWbJkUbNmzUzdZ2KLiYlRRESEUqRIYetSAAAm49ZxAMBLcXNzU8qUKeXgEPeabWhoqL766it5e3vL2dlZefLk0ejRo2UYhiTp8ePHyps3r/LmzavHjx9bX3fv3j1lzpxZ77zzjqKjoyX93y3Tf/31l6pVq6bUqVPLy8tLQ4YMse7v3xw7dkw1atSQi4uL0qRJo8qVK2v//v3W9bNmzdLHH38sSapYsaL19uMdO3b86363bdum9957T6lTp5abm5vq1q2rM2fOWNe3atVKFSpUkCR9/PHHslgsev/99/+z3i5duihdunQv1Nf8n/qkP90XOvbW/z179qhr167KlCmT3Nzc1L59e0VERCgoKEgtWrRQunTplC5dOvXq1euZn21MTIzGjx+vAgUKKEWKFPLw8FD79u11//79Z45du3Ztbdy4USVLllTKlCk1derU59YlSUFBQerevbuyZ88uZ2dnZc2aVS1atNCdO3f+8/3/l6CgIHXr1s16HubOnVsjR45UTExMnO1Gjx6td955RxkyZFDKlClVokQJLV26NM42FotFoaGhmj17tvUciX0vrVq1eu6dEIMGDZLFYnlmP507d9b8+fNVoEABOTs7a8OGDZKkGzdu6LPPPpOHh4ecnZ1VoEAB/fLLL8/sd+LEiSpQoIBSpUqldOnSqWTJklqwYMEr/KQAAAmBFm0AwAsJDg7WnTt3ZBiGbt++rYkTJ+rhw4dxWhUNw9CHH36o7du3q02bNipatKg2btyonj176saNGxo3bpxSpkyp2bNnq1y5curfv7/Gjh0rSerUqZOCg4M1a9Ys2dvbW/cZHR2t6tWrq2zZsvr++++1YcMGDRw4UFFRURoyZMg/1nv69Gm99957cnFxUa9eveTo6KipU6fq/fff186dO1WmTBmVL19eXbt21Q8//KB+/fopX758kmT983m2bNmiGjVqKGfOnBo0aJAeP36siRMnqly5cjp69KiyZ8+u9u3bK0uWLBo2bJi6du2qUqVKycPD4z9/xi4uLurevbu++eYb01u1u3TpIk9PTw0ePFj79+/XtGnT5Obmpr179ypbtmwaNmyY1q1bp1GjRqlgwYJq0aKF9bXt27fXrFmz1Lp1a3Xt2lWXL1/WpEmTdOzYMf3+++9ydHS0bnvu3Dk1btxY7du3V7t27ZQnT57n1vPw4UO99957OnPmjD777DMVL15cd+7c0erVq3X9+nVlzJjxX99PZGTkM4E8VapUSpUqlR49eqQKFSroxo0bat++vbJly6a9e/eqb9++unXrlsaPH299zYQJE/Thhx+qadOmioiI0KJFi/Txxx9r7dq1qlWrliRp7ty5atu2rUqXLq3PP/9ckpQrV654/fxjbdu2Tb/++qs6d+6sjBkzKnv27AoICFDZsmWtQTxTpkxav3692rRpo5CQEHXr1k2SNH36dHXt2lUNGzbUl19+qbCwMJ04cUIHDhxQkyZNXqoeAEAC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GS8wddu/+eSTT7Rv3z7rHRNPCgoKsl4gsre3l8ViifMzu3LlilauXPnM61KnTv3c95orVy4FBwfrxIkT1mW3bt167vt6Hnt7ezVo0EDLli177oWHwMBA69/v3r0bZ52Tk5Py588vwzAUGRn5QscDACQOWrQBAC9k/fr11pbp27dva8GCBbpw4YL69OljDa116tRRxYoV1b9/f125ckVFihTRpk2btGrVKnXr1s06JVJsn9itW7cqbdq0Kly4sL755hsNGDBADRs2jBNYU6RIoQ0bNqhly5YqU6aM1q9fr99++039+vX7xz64scfYvHmz3n33XX3xxRdycHDQ1KlTFR4eru+//966XdGiRWVvb6+RI0cqODhYzs7OqlSp0j/2SR41apRq1KghX19ftWnTxjq9l6ur6wvNfx0fsX21//jjj2daytu2basOHTqoQYMG+uCDD/THH39o48aN/zktVnxVqFBB7du31/Dhw3X8+HFVrVpVjo6OunDhgpYsWaIJEyaoYcOG8d5vz549tXTpUn388cf67LPPVKJECd27d0+rV6/WlClTVKRIkZeuuWfPnlq9erVq166tVq1aqUSJEgoNDdXJkye1dOlSXblyRRkzZlStWrU0duxYVa9eXU2aNNHt27c1efJk5c6dO05wlqQSJUpoy5YtGjt2rLy8vJQjRw6VKVNGjRo1Uu/evVWvXj117dpVjx490k8//aS33377hQdUGzFihLZv364yZcqoXbt2yp8/v+7du6ejR49qy5YtunfvniSpatWq8vT0VLly5eTh4aEzZ85o0qRJqlWr1jPjIgAAbMx2A54DAJKC503vlSJFCqNo0aLGTz/99MxUTA8ePDC6d+9ueHl5GY6OjsZbb71ljBo1yrrdkSNHDAcHhzhTdhnG31NLlSpVyvDy8jLu379vGMb/TWt16dIlo2rVqkaqVKkMDw8PY+DAgUZ0dHSc1+s5010dPXrUqFatmpEmTRojVapURsWKFY29e/c+8x6nT59u5MyZ07C3t3+hqb62bNlilCtXzkiZMqXh4uJi1KlTx/jzzz/jbPOy03s9LXaaqKen94qOjjZ69+5tZMyY0UiVKpVRrVo14+LFi/84vdehQ4eeu98np0gzjOdPJWYYhjFt2jSjRIkSRsqUKY20adMahQoVMnr16mXcvHnTuo2Pj49Rq1at577Hp+syDMO4e/eu0blzZyNLliyGk5OTkTVrVqNly5bPTHP1vH3903FiPXjwwOjbt6+RO3duw8nJyciYMaPxzjvvGKNHjzYiIiKs2/3888/GW2+9ZTg7Oxt58+Y1Zs6c+dypuc6ePWuUL1/eSJkypSEpznvZtGmTUbBgQcPJycnIkyePMW/evH+c3qtTp07PrTcgIMDo1KmT4e3tbTg6Ohqenp5G5cqVjWnTplm3mTp1qlG+fHkjQ4YMhrOzs5ErVy6jZ8+eRnBw8L/+LAAAic9iGK94fxYAAAmkVatWWrp0qbUPOAAAQFJAH20AAAAAAExE0AYAAAAAwEQEbQAAAAAATEQfbQAAAAAATESLNgAAAAAAJiJoAwAAAABgIgdbF/AyYmJidPPmTaVNm1YWi8XW5QAAAAAA3nCGYejBgwfy8vKSnd2/t1knyaB98+ZNeXt727oMAAAAAEAyc+3aNWXNmvVft0mSQTtt2rSS/n6DLi4uNq4GAAAAAPCmCwkJkbe3tzWP/pskGbRjbxd3cXEhaAMAAAAAEs2LdF9mMDQAAAAAAEwUr6D9008/qXDhwtaWZF9fX61fv966/v3335fFYonz6NChQ5x9XL16VbVq1VKqVKnk7u6unj17Kioqypx3AwAAAACAjcXr1vGsWbNqxIgReuutt2QYhmbPnq26devq2LFjKlCggCSpXbt2GjJkiPU1qVKlsv49OjpatWrVkqenp/bu3atbt26pRYsWcnR01LBhw0x6SwAAAAAA2I7FMAzjVXaQPn16jRo1Sm3atNH777+vokWLavz48c/ddv369apdu7Zu3rwpDw8PSdKUKVPUu3dvBQYGysnJ6YWOGRISIldXVwUHB9NHGwAAAACQ4OKTQ1+6j3Z0dLQWLVqk0NBQ+fr6WpfPnz9fGTNmVMGCBdW3b189evTIum7fvn0qVKiQNWRLUrVq1RQSEqLTp0//47HCw8MVEhIS5wEAAAAAwOso3qOOnzx5Ur6+vgoLC1OaNGm0YsUK5c+fX5LUpEkT+fj4yMvLSydOnFDv3r117tw5LV++XJLk7+8fJ2RLsj739/f/x2MOHz5cgwcPjm+pAAAAAAAkungH7Tx58uj48eMKDg7W0qVL1bJlS+3cuVP58+fX559/bt2uUKFCypw5sypXrqxLly4pV65cL11k37591aNHD+vz2PnLAAAAAAB43cT71nEnJyflzp1bJUqU0PDhw1WkSBFNmDDhuduWKVNGknTx4kVJkqenpwICAuJsE/vc09PzH4/p7OxsHemcubMBAAAAAK+zV55HOyYmRuHh4c9dd/z4cUlS5syZJUm+vr46efKkbt++bd1m8+bNcnFxsd5+DgAAAABAUhavW8f79u2rGjVqKFu2bHrw4IEWLFigHTt2aOPGjbp06ZIWLFigmjVrKkOGDDpx4oS6d++u8uXLq3DhwpKkqlWrKn/+/GrevLm+//57+fv7a8CAAerUqZOcnZ0T5A0CAAAAAJCY4hW0b9++rRYtWujWrVtydXVV4cKFtXHjRn3wwQe6du2atmzZovHjxys0NFTe3t5q0KCBBgwYYH29vb291q5dq44dO8rX11epU6dWy5Yt48y7DQAAAABAUvbK82jbAvNoAwAAAAASU6LMow0AAAAAAJ5F0AYAAAAAwEQEbQAAAAAATETQBgAAAADARARtAAAAAABMFK/pvfBiwsLC5OfnZ+syEoSPj49SpEhh6zIAAAAA4LVF0E4Afn5+ateuna3LSBDTp09Xnjx5bF0GAAAAALy2CNoJwMfHR9OnT0+UY/n5+Wno0KEaMGCAfHx8Evx4iXEMAAAAAEjKCNoJIEWKFIne6uvj40NLMwAAAAC8BhgMDQAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwkYOtC0hMAQEBCgoKsnUZpvLz84vz55vCzc1NHh4eti4DAAAAAOLNYhiGYesi4iskJESurq4KDg6Wi4vLC70mICBATZs2U0REeAJXBzM4OTlr/vx5hG0AAAAAr4X45NBk06IdFBSkiIhwheV6X0ZKN1uXg39heRwkXdqhoKAggjYAAACAJCfZBO1YRko3xaTOaOsy8C8YOAAAAABAUkamAQAAAADARARtAAAAAABMRNAGAAAAAMBEBG0AAAAAAExE0AYAAAAAwEQEbQAAAAAATJTspveyPA7i6sJrzvI4yNYlAAAAAMBLS3ZBO8WlHbYuAQAAAADwBkt2QTss1/syUrrZugz8C8vjIC6IAAAAAEiykl3QNlK6KSZ1RluXgX/Brf0AAAAAkjIyDQAAAAAAJiJoAwAAAABgIoI2AAAAAAAmImgDAAAAAGAigjYAAAAAACYiaAMAAAAAYCKCNgAAAAAAJkp282hbHgdxdeE1Z3kcZOsSAAAAAOClJZug7ebmJicnZ+nSDluXghfg5OQsNzc3W5cBAAAAAPGWbIK2h4eH5s+fp6CgIFuXYio/Pz8NHTpUAwYMkI+Pj63LMY2bm5s8PDxsXQYAAAAAxFuyCdrS32H7TQ1vPj4+ypMnj63LAAAAAIBkj+7KAAAAAACYiKANAAAAAICJCNoAAAAAAJgoXkH7p59+UuHCheXi4iIXFxf5+vpq/fr11vVhYWHq1KmTMmTIoDRp0qhBgwYKCAiIs4+rV6+qVq1aSpUqldzd3dWzZ09FRUWZ824AAAAAALCxeAXtrFmzasSIETpy5IgOHz6sSpUqqW7dujp9+rQkqXv37lqzZo2WLFminTt36ubNm6pfv7719dHR0apVq5YiIiK0d+9ezZ49W7NmzdI333xj7rsCAAAAAMBGLIZhGK+yg/Tp02vUqFFq2LChMmXKpAULFqhhw4aSpLNnzypfvnzat2+fypYtq/Xr16t27dq6efOmdfTvKVOmqHfv3goMDJSTk9MLHTMkJESurq4KDg6Wi4vLq5Sf5J07d07t2rXT9OnTGXUcAAAAABJIfHLoS/fRjo6O1qJFixQaGipfX18dOXJEkZGRqlKlinWbvHnzKlu2bNq3b58kad++fSpUqFCcKbaqVaumkJAQa6v484SHhyskJCTOAwAAAACA11G8g/bJkyeVJk0aOTs7q0OHDlqxYoXy588vf39/OTk5yc3NLc72Hh4e8vf3lyT5+/s/M4917PPYbZ5n+PDhcnV1tT68vb3jWzYAAAAAAIki3kE7T548On78uA4cOKCOHTuqZcuW+vPPPxOiNqu+ffsqODjY+rh27VqCHg8AAAAAgJflEN8XODk5KXfu3JKkEiVK6NChQ5owYYI+/fRTRUREKCgoKE6rdkBAgDw9PSVJnp6eOnjwYJz9xY5KHrvN8zg7O8vZ2Tm+pQIAAAAAkOheeR7tmJgYhYeHq0SJEnJ0dNTWrVut686dO6erV6/K19dXkuTr66uTJ0/q9u3b1m02b94sFxcX5c+f/1VLAQAAAADA5uLVot23b1/VqFFD2bJl04MHD7RgwQLt2LFDGzdulKurq9q0aaMePXooffr0cnFxUZcuXeTr66uyZctKkqpWrar8+fOrefPm+v777+Xv768BAwaoU6dOtFgDAAAAAN4I8Qrat2/fVosWLXTr1i25urqqcOHC2rhxoz744ANJ0rhx42RnZ6cGDRooPDxc1apV048//mh9vb29vdauXauOHTvK19dXqVOnVsuWLTVkyBBz3xUAAAAAADbyyvNo2wLzaP8f5tEGAAAAgISXKPNoAwAAAACAZxG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADBRvEYdx4sJCwuTn59fohwr9jiJdTwfHx+lSJEiUY4FAAAAAEkRQTsB+Pn5qV27dol6zKFDhybKcRjdHAAAAAD+HUE7Afj4+Gj69Om2LiNB+Pj42LoEAAAAAHitEbQTQIoUKWj1BQAAAIBkisHQAAAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwUbyC9vDhw1WqVCmlTZtW7u7u+uijj3Tu3Lk427z//vuyWCxxHh06dIizzdWrV1WrVi2lSpVK7u7u6tmzp6Kiol793QAAAAAAYGMO8dl4586d6tSpk0qVKqWoqCj169dPVatW1Z9//qnUqVNbt2vXrp2GDBlifZ4qVSrr36Ojo1WrVi15enpq7969unXrllq0aCFHR0cNGzbMhLcEAAAAAIDtWAzDMF72xYGBgXJ3d9fOnTtVvnx5SX+3aBctWlTjx49/7mvWr1+v2rVr6+bNm/Lw8JAkTZkyRb1791ZgYKCcnJz+87ghISFydXVVcHCwXFxcXrZ8AAAAAABeSHxy6Cv10Q4ODpYkpU+fPs7y+fPnK2PGjCpYsKD69u2rR48eWdft27dPhQoVsoZsSapWrZpCQkJ0+vTp5x4nPDxcISEhcR4AAAAAALyO4nXr+JNiYmLUrVs3lStXTgULFrQub9KkiXx8fOTl5aUTJ06od+/eOnfunJYvXy5J8vf3jxOyJVmf+/v7P/dYw4cP1+DBg1+2VAAAAAAAEs1LB+1OnTrp1KlT2rNnT5zln3/+ufXvhQoVUubMmVW5cmVdunRJuXLleqlj9e3bVz169LA+DwkJkbe398sVDgAAAABAAnqpW8c7d+6stWvXavv27cqaNeu/blumTBlJ0sWLFyVJnp6eCggIiLNN7HNPT8/n7sPZ2VkuLi5xHgAAAAAAvI7iFbQNw1Dnzp21YsUKbdu2TTly5PjP1xw/flySlDlzZkmSr6+vTp48qdu3b1u32bx5s1xcXJQ/f/74lAMAAAAAwGsnXreOd+rUSQsWLNCqVauUNm1aa59qV1dXpUyZUpcuXdKCBQtUs2ZNZciQQSdOnFD37t1Vvnx5FS5cWJJUtWpV5c+fX82bN9f3338vf39/DRgwQJ06dZKzs7P57xAAAAAAgEQUr+m9LBbLc5fPnDlTrVq10rVr19SsWTOdOnVKoaGh8vb2Vr169TRgwIA4t3v7+fmpY8eO2rFjh1KnTq2WLVtqxIgRcnB4sdzP9F4AAAAAgMQUnxz6SvNo2wpBGwAAAACQmBJtHm0AAAAAABAXQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMFG8gvbw4cNVqlQppU2bVu7u7vroo4907ty5ONuEhYWpU6dOypAhg9KkSaMGDRooICAgzjZXr15VrVq1lCpVKrm7u6tnz56Kiop69XcDAAAAAICNxSto79y5U506ddL+/fu1efNmRUZGqmrVqgoNDbVu0717d61Zs0ZLlizRzp07dfPmTdWvX9+6Pjo6WrVq1VJERIT27t2r2bNna9asWfrmm2/Me1cAAAAAANiIxTAM42VfHBgYKHd3d+3cuVPly5dXcHCwMmXKpAULFqhhw4aSpLNnzypfvnzat2+fypYtq/Xr16t27dq6efOmPDw8JElTpkxR7969FRgYKCcnp2eOEx4ervDwcOvzkJAQeXt7Kzg4WC4uLi9bPgAAAAAALyQkJESurq4vlENfqY92cHCwJCl9+vSSpCNHjigyMlJVqlSxbpM3b15ly5ZN+/btkyTt27dPhQoVsoZsSapWrZpCQkJ0+vTp5x5n+PDhcnV1tT68vb1fpWwAAAAAABLMSwftmJgYdevWTeXKlVPBggUlSf7+/nJycpKbm1ucbT08POTv72/d5smQHbs+dt3z9O3bV8HBwdbHtWvXXrZsAAAAAAASlMPLvrBTp046deqU9uzZY2Y9z+Xs7CxnZ+cEPw4AAAAAAK/qpVq0O3furLVr12r79u3KmjWrdbmnp6ciIiIUFBQUZ/uAgAB5enpat3l6FPLY57HbAAAAAACQVMUraBuGoc6dO2vFihXatm2bcuTIEWd9iRIl5OjoqK1bt1qXnTt3TlevXpWvr68kydfXVydPntTt27et22zevFkuLi7Knz//q7wXAAAAAABsLl63jnfq1EkLFizQqlWrlDZtWmufaldXV6VMmVKurq5q06aNevToofTp08vFxUVdunSRr6+vypYtK0mqWrWq8ufPr+bNm+v777+Xv7+/BgwYoE6dOnF7OAAAAAAgyYvX9F4Wi+W5y2fOnKlWrVpJksLCwvTVV19p4cKFCg8PV7Vq1fTjjz/GuS3cz89PHTt21I4dO5Q6dWq1bNlSI0aMkIPDi+X++AyrDgAAAADAq4pPDn2lebRthaANAAAAAEhMiTaPNgAAAAAAiIugDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYKN5Be9euXapTp468vLxksVi0cuXKOOtbtWoli8US51G9evU429y7d09NmzaVi4uL3Nzc1KZNGz18+PCV3ggAAAAAAK+DeAft0NBQFSlSRJMnT/7HbapXr65bt25ZHwsXLoyzvmnTpjp9+rQ2b96stWvXateuXfr888/jXz0AAAAAAK8Zh/i+oEaNGqpRo8a/buPs7CxPT8/nrjtz5ow2bNigQ4cOqWTJkpKkiRMnqmbNmho9erS8vLyeeU14eLjCw8Otz0NCQuJbNgAAAAAAiSJB+mjv2LFD7u7uypMnjzp27Ki7d+9a1+3bt09ubm7WkC1JVapUkZ2dnQ4cOPDc/Q0fPlyurq7Wh7e3d0KUDQAAAADAKzM9aFevXl1z5szR1q1bNXLkSO3cuVM1atRQdHS0JMnf31/u7u5xXuPg4KD06dPL39//ufvs27evgoODrY9r166ZXTYAAAAAAKaI963j/6VRo0bWvxcqVEiFCxdWrly5tGPHDlWuXPml9uns7CxnZ2ezSgQAAAAAIMEk+PReOXPmVMaMGXXx4kVJkqenp27fvh1nm6ioKN27d+8f+3UDAAAAAJBUJHjQvn79uu7evavMmTNLknx9fRUUFKQjR45Yt9m2bZtiYmJUpkyZhC4HAAAAAIAEFe9bxx8+fGhtnZaky5cv6/jx40qfPr3Sp0+vwYMHq0GDBvL09NSlS5fUq1cv5c6dW9WqVZMk5cuXT9WrV1e7du00ZcoURUZGqnPnzmrUqNFzRxwHAAAAACApsRiGYcTnBTt27FDFihWfWd6yZUv99NNP+uijj3Ts2DEFBQXJy8tLVatW1bfffisPDw/rtvfu3VPnzp21Zs0a2dnZqUGDBvrhhx+UJk2aF6ohJCRErq6uCg4OlouLS3zKBwAAAAAg3uKTQ+MdtF8HBG0AAAAAQGKKTw5N8D7aAAAAAAAkJwRtAAAAAABMRNAGAAAAAMBEBG0AAAAAAExE0AYAAAAAwEQEbQAAAAAATETQBgAAAADARARtAAAAAABMRNAGAAAAAMBEBG0AAAAAAExE0AYAAAAAwEQEbQAAAAAATETQBgAAAADARARtAAAAAABMRNAGAAAAAMBEBG0AAAAAAExE0AYAAAAAwEQEbQAAAAAATETQBgAAAADARARtAAAAAABMRNAGAAAAAMBEBG0AAAAAAExE0AYAAAAAwEQEbQAAAAAATETQBgAAAADARARtAAAAAABMRNAGAAAAAMBEBG0AAAAAAEzkYOsCgOQgLCxMfn5+ti4jQfj4+ChFihS2LgMAAAB4bRC0gUTg5+endu3a2bqMBDF9+nTlyZPH1mUAAAAArw2CNpAIfHx8NH369AQ/jp+fn4YOHaoBAwbIx8cnwY8nKdGOAwAAACQVBG0gEaRIkSJRW319fHxoZQYAAABshMHQAAAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAEzG9F5K1gIAABQUF2boM0/j5+cX5803i5uYmDw8PW5cBAAAA/CeLYRiGrYuIr5CQELm6uio4OFguLi62LgdJVEBAgJo1barwiAhbl4IX4OzkpHnz5xO2AQAAYBPxyaG0aCPZCgoKUnhEhDoWCJVX6mhbl4N/cTPUXj+d/vvfjKANAACA1x1BG8meV+po5XAhaAMAAAAwB4OhAQAAAABgIoI2AAAAAAAm4tZxJHs3Q7ne9Lrj3wgAAABJCUEbyd5Pp9PYugQAAAAAbxCCNpK9jgUeyit1jK3LwL+4GWrHBREAAAAkGQRtJHteqWMYdRwAAACAaej4CAAAAACAiWjRRrJ3M9Te1iXgP/BvBAAAgKQk3kF7165dGjVqlI4cOaJbt25pxYoV+uijj6zrDcPQwIEDNX36dAUFBalcuXL66aef9NZbb1m3uXfvnrp06aI1a9bIzs5ODRo00IQJE5QmDX0wkXjc3Nzk7OSkn07buhK8CGcnJ7m5udm6DAAAAOA/xTtoh4aGqkiRIvrss89Uv379Z9Z///33+uGHHzR79mzlyJFD//vf/1StWjX9+eefSpEihSSpadOmunXrljZv3qzIyEi1bt1an3/+uRYsWPDq7wh4QR4eHpo3f76CgoJsXYpp/Pz8NHToUA0YMEA+Pj62LsdUbm5u8vDwsHUZAAAAwH+Kd9CuUaOGatSo8dx1hmFo/PjxGjBggOrWrStJmjNnjjw8PLRy5Uo1atRIZ86c0YYNG3To0CGVLFlSkjRx4kTVrFlTo0ePlpeX1yu8HSB+PDw83sjw5uPjozx58ti6DAAAACBZMnUwtMuXL8vf319VqlSxLnN1dVWZMmW0b98+SdK+ffvk5uZmDdmSVKVKFdnZ2enAgQPP3W94eLhCQkLiPAAAAAAAeB2ZGrT9/f0l6ZkWQg8PD+s6f39/ubu7x1nv4OCg9OnTW7d52vDhw+Xq6mp9eHt7m1k2AAAAAACmSRLTe/Xt21fBwcHWx7Vr12xdEgAAAAAAz2Vq0Pb09JQkBQQExFkeEBBgXefp6anbt2/HWR8VFaV79+5Zt3mas7OzXFxc4jwAAAAAAHgdmRq0c+TIIU9PT23dutW6LCQkRAcOHJCvr68kydfXV0FBQTpy5Ih1m23btikmJkZlypQxsxwAAAAAABJdvEcdf/jwoS5evGh9fvnyZR0/flzp06dXtmzZ1K1bNw0dOlRvvfWWdXovLy8v61zb+fLlU/Xq1dWuXTtNmTJFkZGR6ty5sxo1asSI4wAAAACAJC/eQfvw4cOqWLGi9XmPHj0kSS1bttSsWbPUq1cvhYaG6vPPP1dQUJDeffddbdiwwTqHtiTNnz9fnTt3VuXKlWVnZ6cGDRrohx9+MOHtAAAAAABgWxbDMAxbFxFfISEhcnV1VXBwMP21gSecO3dO7dq10/Tp05lHGwAAADBRfHJokhh1HAAAAACApIKgDQAAAACAieLdRxtA/IWFhcnPzy/BjxN7jMQ4ViwfH584YzAAAAAAyR1BG0gEfn5+ateuXaIdb+jQoYl2LPqDAwAAAHERtIFE4OPjo+nTp9u6jATh4+Nj6xIAAACA1wpBG0gEKVKkoNUXAAAASCYYDA0AAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAE5ketAcNGiSLxRLnkTdvXuv6sLAwderUSRkyZFCaNGnUoEEDBQQEmF0GAAAAAAA2kSAt2gUKFNCtW7esjz179ljXde/eXWvWrNGSJUu0c+dO3bx5U/Xr10+IMgAAAAAASHQOCbJTBwd5eno+szw4OFg///yzFixYoEqVKkmSZs6cqXz58mn//v0qW7ZsQpQDAAAAAECiSZAW7QsXLsjLy0s5c+ZU06ZNdfXqVUnSkSNHFBkZqSpVqli3zZs3r7Jly6Z9+/b94/7Cw8MVEhIS5wEAAAAAwOvI9KBdpkwZzZo1Sxs2bNBPP/2ky5cv67333tODBw/k7+8vJycnubm5xXmNh4eH/P39/3Gfw4cPl6urq/Xh7e1tdtkAAAAAAJjC9FvHa9SoYf174cKFVaZMGfn4+OjXX39VypQpX2qfffv2VY8ePazPQ0JCCNsAAAAAgNdSgk/v5ebmprffflsXL16Up6enIiIiFBQUFGebgICA5/bpjuXs7CwXF5c4DwAAAAAAXkcJHrQfPnyoS5cuKXPmzCpRooQcHR21detW6/pz587p6tWr8vX1TehSAAAAAABIcKbfOv7111+rTp068vHx0c2bNzVw4EDZ29urcePGcnV1VZs2bdSjRw+lT59eLi4u6tKli3x9fRlxHAAAAADwRjA9aF+/fl2NGzfW3bt3lSlTJr377rvav3+/MmXKJEkaN26c7Ozs1KBBA4WHh6tatWr68ccfzS4DAAAAAACbsBiGYdi6iPgKCQmRq6urgoOD6a8NAAAAAEhw8cmhCd5HGwAAAACA5ISgDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJiIoA0AAAAAgIkI2gAAAAAAmIigDQAAAACAiQjaAAAAAACYiKANAAAAAICJCNoAAAAAAJjIwdYFAAAAAPh3YWFh8vPzs3UZCcLHx0cpUqSwdRmAqQjaAAAAwCsICAhQUFBQgh7Dz89PQ4cOTdBj2MqAAQPk4+OT4Mdxc3OTh4dHgh8HkCSLYRiGrYuIr5CQELm6uio4OFguLi62LgcAAADJVEBAgJo0aaLIyEhbl4L/4OjoqAULFhC28dLik0Ppow0AAAC8pKCgIEJ2EhEZGZngdx4AsQjaAAAAwEtyc3OTo6OjrcvAC3B0dJSbm5uty0AyQR9tAAAA4CV5eHhowYIF9NF+BfTRxpuIPtoAYAOMHouncU7gSW/y+SBxTryMN/mc4HxAUhGfHEqLNgDYgJ+fn9q1a2frMhLE9OnTlSdPHluXkeRwTuBJb/L5IHFOvIwUKVLwMwOSEFq0AeAJiTFFiySFh4fL398/wY9z69Yt/fzzz2rTpo0yZ86c4MeTJE9PTzk7OyfoMRLz9r+zZ8/q6tWrCX6cyMhI3blzJ8GPc+fOHa1atUp169ZVxowZE/x4kpQxY8YE78OaLVs25c2bN0GPESsxzonEOB+uXLmiAwcO6OHDh9ZladKkUZkyZZQ9e/YEPfabdk4ASB7ik0MJ2gDw/wUEBKhJ0yaKjGD02Nedo5OjFsxP+ClaAgIC1OjTTxUdE5Ogx8Grs7ez06LFixPpnGik6JjoBD0OXp29nb0WLV5En1wApkky03tNnjxZ2bNnV4oUKVSmTBkdPHjQluUASOaCgoII2UlEZETiTdFib2+fKMfBq0nMfyfOiaSBfycAtmSzPtqLFy9Wjx49NGXKFJUpU0bjx49XtWrVdO7cObm7u9uqLADJmJubmxydHAnbSYCjU+JM0eLh4aH5iTCasER3gleVWN0J/j4n5if4OZGQ58OVK1c0b948tWrVSlmzZn3mnLh+/bpmzZqlZs2aJdgt5G/SOQE8z5vSxcRWEqN7iZSwXUxsdut4mTJlVKpUKU2aNEmSFBMTI29vb3Xp0kV9+vT519dy6ziAhJJYfbSZpuXVvIlfoM+dO/fGDn7FwFfx9yafDxLnBN5sdDFJOuLbxeS1H3U8IiJCR44cUd++fa3L7OzsVKVKFe3bt++Z7cPDwxUeHm59HhISkih1Akh+PDw8EiXA+fj4aPr06Ql+HFtgmpaX86afE4ifhDwfzp07p9GjR6tPnz7KlSvXM+svXbqkESNG6Ouvv06wMMw5gTdZUFCQomOiVS5LMbk6p0mw40RERyrw0f0E278tZUqVTk72CduiHRz+UL/fOKagoKAE+e5nk6B9584dRUdHP/OGPDw8dPbs2We2Hz58uAYPHpxY5QFAgmOaFjyNcwJPSsjzIXfu3Jo3b5527dql6tWry87u/4bsiYmJ0cyZM5U5c2bVqlWLfs7AS3Bzc5Ozk7N+v3HM1qXgPzg7OSdYV7QkMY9237591aNHD+vzkJAQeXt727AiAACApMne3l6dOnXSN998o379+qlZs2bKmTOn/vrrL82bN0/79u3TkCFDCNnAS/Lw8NC8+fOS9FgOtpYY4zhICdsVzSZBO2PGjLK3t1dAQECc5QEBAfL09Hxme2dn50T5QQMAACQHFSpU0JAhQzR58mR98cUX1uWZM2fWkCFDVKFCBRtWByR9idUVrXDhwgl+DLwcmwRtJycnlShRQlu3btVHH30k6e9blbZu3arOnTvboiQAAIBkpUKFCnr33Xd14sQJ3b17VxkyZFDhwoVpyQYAE9js1vEePXqoZcuWKlmypEqXLq3x48crNDRUrVu3tlVJAAAAyYq9vb2KFStm6zIA4I1js6D96aefKjAwUN988438/f1VtGhRbdiw4Y2brgUAAAAAkLzYbB7tV8E82gAAAACAxBSfHGr3r2sBAAAAAEC8ELQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATOdi6gJdhGIYkKSQkxMaVAAAAAACSg9j8GZtH/02SDNoPHjyQJHl7e9u4EgAAAABAcvLgwQO5urr+6zYW40Xi+GsmJiZGN2/eVNq0aWWxWGxdjk2FhITI29tb165dk4uLi63LgY1xPuBpnBN4GucEnsY5gadxTuBpnBN/MwxDDx48kJeXl+zs/r0XdpJs0bazs1PWrFltXcZrxcXFJVmf9IiL8wFP45zA0zgn8DTOCTyNcwJP45zQf7Zkx2IwNAAAAAAATETQBgAAAADARATtJM7Z2VkDBw6Us7OzrUvBa4DzAU/jnMDTOCfwNM4JPI1zAk/jnIi/JDkYGgAAAAAArytatAEAAAAAMBFBGwAAAAAAExG0AQAAAAAwEUEbAAAAAAATEbQBAAAAADARQRsAAAAAABMRtAEAAJI5wzDEjK8AYB4HWxeA18PmzZsVGhqq8PBw1atXT05OTrYuCa+BmJgY2dk9ez3OMAxZLBYbVISk7HnnDeeS7V2+fFlhYWHKly/fP/6fx5sv9v/hsmXL5OjoqA8//NDGFQFIqp6+aPf07/nk8ruGoA317t1bixYtUrZs2XTu3DlNmTJFAwcO1Pvvv2/r0mBDT34Ibt++XTdu3FD69OlVoEAB+fj4JJsPSZjjyUC9cOFCnT9/XgMHDpTFYiFs21Dfvn21cOFC3bt3T2+99ZYaN26sNm3aKF26dLYuDYko9v/gmTNn9PHHH+vHH3/k/yWea968eTp9+rQcHR1VtWpVvfvuu7YuCa+hoKAgpUuXThEREXJyctLOnTu1c+dOpUmTRnXq1NFbb72l6Oho2dvb27rUBEXQTuamTZum2bNna8OGDSpatKjmzJmjVq1acfsYrCG6V69eWr58udKmTatMmTLpwoULWrlypYoUKWLjCpFUPHlR5uDBg5o7d67OnTsnd3d3dezYkbBtI/PmzdOcOXM0YcIEZcuWTdOnT9eyZct08+ZNDRw4UK6urrYuEYnEYrFo//79un79ugYOHKgOHTrYuiS8hnr37q1Zs2apevXqOn/+vLZv366PP/5YXbt2tXVpeI0sXrxYbdu21dGjR/XWW29p2bJlatmypQoWLKiQkBCNHTtWK1asUKlSpd74sE1zVDIVG6RPnz6tVq1aqWjRolq0aJG6du2qyZMnq2LFinr8+LHCw8NtXCls6eeff9acOXM0b948HTt2TNWqVZOfn58uXrxo69KQhMSG7J49e2rgwIGKjo5WaGioRo8erbFjx0qSNWwjcaxcuVKBgYHq3bu3GjZsqNKlS2v69OmqU6eOtm3bpq1bt9q6RCSi+/fv68svv9Qnn3wiPz8/SVJ0dLSNq8LrZMqUKfr111/122+/afbs2erUqZP279+vX375RaNGjbJ1eXiN5MiRQ76+vqpRo4bOnj2rU6dOaeLEidq/f79+/fVXlS9fXuXLl9fBgwdlb2//Rn/WELSTqR07dkiSzp07p/Tp0+vIkSNq166dRowYoY4dOyomJkZjx47Vr7/+attCkahiYmLiPP/jjz/Upk0blS1bVqtWrdKgQYM0depUNWjQQA8fPlRgYKCNKkVSs2DBAs2YMUNDhgzRqlWrdPToUZUrV06LFi3S+PHjJRG2E8udO3fUrFkzffXVV7p8+XKcdf369VO6dOk0Z84cG1UHW3BxcdHgwYNVoUIFbdu2TQ8fPnzjvwDjxUVGRiogIEDt27dXyZIltWLFCnXp0kVDhgxRvnz59MMPP2jChAm2LhOvidKlS2vkyJF66623VKVKFW3evFn58uWTJBUsWFAjRoxQvXr1VKFCBR06dEj29vbPfP98UxC0k6EBAwaofv36evDggZo2baqJEyeqdOnSmjx5svV2sdDQUO3atUsXLlywcbVILIZhWFse9+3bp9DQUBmGoXTp0mnt2rVq1qyZRo0apXbt2ikmJkbLli3T4sWLFRERYePKkRRcvHhRb731lkqWLKkUKVLIy8tLQ4YMUaZMmTR69GhNnjxZEmE7MWTMmFEHDx5U/vz5tWPHDl25ciXO+goVKigsLEyRkZG2KRAJ7sn/Y7G3bn7wwQcaMmSIUqdOrfLlyys0NJSwDRmGIUdHR7Vv317NmzfX5cuX1a9fP/3vf/9T37591a1bN4WGhmrcuHGaNWuWrcuFjcUG5mLFimn48OHy9fXVvn37rJ85MTExypYtm0aOHKmGDRuqTJkyOnr06Bs75s+b+a7wj44ePapr165pzZo1Sps2rUqXLq1y5copT548ypw5syTpr7/+0qeffqp79+7pm2++sXHFSAwxMTHW/rG9evVS+/btFRgYqEyZMmnChAlq0qSJRo0aZb0QExQUpAULFigoKIgR6vGvYn/pZsqUSZGRkbpx44Z1efbs2dWnTx+FhIRo3rx5+vHHHyU9OzopzBEVFaWoqChJUv78+bV48WLdvn1bbdu21enTpxUaGqpHjx5p48aNypAhgxwdHW1cMRJC7HgIW7duVbdu3fTxxx9r8uTJun79ut577z1NnTpVkvT+++/r0aNHhO1kLjYgeXp6KkuWLDp69Kjs7e3VpEkTSX83zLz//vv66quv1KJFC1uWChuLbbA5c+aMzp8/r6JFi6p///6qWLGiGjRooIsXL8rOzk6GYcjb21vffvut2rRpo1SpUtm69ARD0E5GlixZog4dOujUqVN6++23JUl58uRR+/btVbhwYdWvX1/Zs2dXvXr1FBISor1798rBwYFfsMlA7JVEf39/Xbx4UePHj1f27Nn1zTffqECBAnJwcFCJEiV08+ZNXblyRU2bNtX9+/fVp08fG1eO183Tt3/FnltlypTRhQsXNGnSJD1+/DjO1esqVapYB0y5fft2otabXIwZM0bNmzdXmTJlNHr0aB06dEgFChTQxo0bde7cOVWqVEk1atRQy5YtFR4erpkzZ0p6dooWJG2xIXvFihWqVauWbt68KQcHBw0YMEDdu3fXrl279O6772rcuHGyt7dXkSJFrGEbycvYsWPVokULVa9eXUuWLNHVq1clSY6OjgoPD9fmzZt1584d6/eFzp07y87Oju+MyVTsZ8vy5ctVq1YtrVmzRrdu3VLRokU1atQoFSlSRFWqVNHFixetd65lz55dP/30k/LmzWvr8hOOgWRjwYIFRrly5YxUqVIZu3fvjrMuICDA2L9/vzFnzhxj+/btRlRUlGEYhhEZGWmLUmEDEydONLy9vY0yZcoYf/31l3X5vXv3jDJlyhjZs2c30qdPb5QtW9YoW7asERERYRiGYT1XgJiYGOvfp06davTu3dsYMmSIcfPmTcMwDGP+/PmGnZ2d0aVLF2PTpk3GuXPnjBo1ahh9+/Y1Tp06ZVgsFmPdunW2Kv+N1adPHyN9+vTGoEGDjObNmxulS5c23n33XWPr1q2GYRjGqVOnjIIFCxqZM2c29u7da/13jP0/jqTtt99+M/744w/r8+vXrxuFChUyfvjhB+uygwcPGuXKlTPq169v3Lp1y4iKijI2bNhgvP/++3F+HyB56N+/v5E+fXqjbdu2Rr169Yx06dIZ7du3N/78808jMDDQqFevnuHt7W1kyZLFKFasmPWz4snfAUh+Nm/ebKRKlcqYPHmycefOnTjrjhw5YlSvXt3InTu3cfbsWRtVmPgI2snMb7/9Zvj6+hrvv/++ceDAAevy6OjoZ7YlQCUv586dM4oUKWI4OTkZ+/btMwwj7i/NTZs2GYsXLzZ2797NhRg848nPkF69ehkZM2Y03n//faNAgQJGjhw5jMuXLxuGYRjLli0zcufObXh5eRne3t5GsWLFjMePHxuBgYFG/vz5jf3799voHbyZTpw4YeTJk8fYtm2bddm2bduMRo0aGVWqVDEuXrxoGIZhnD592sicObNRvXp14/79+3xhfkP4+/sbOXLkMFq3bm38+eefhmH8fWE9Z86cxvLlyw3D+L//uwcPHjTSpEljzJw507o8NDTUJnXDdm7dumV06dLF2LVrl3XZwoULjSJFihhdunQxDMMwrly5YuzYscNYtmwZ3wdgREZGGpGRkUaLFi2M9u3bP7Mu1h9//GGULVvWKFy4sBEREZEsfs9w6/gbbufOndq4caPWrl0rSapZs6b69esnBwcHDRkyRIcOHZKk5w5CwK1ib67nje749ttva/ny5fL29laPHj1069YtWSwW621gH3zwgT755BO9++671hEiHRwcErt0vIaMJwbSCwwM1IMHD7R582Zt375dCxYsUM6cOVWqVClduXJF9evX15YtW7Rx40b9+uuvOnz4sFKkSKHRo0crPDxc2bJls/G7ebNERUUpICAgzv/VihUrqmXLlrpw4YKuX78u6e8+25s3b9aZM2dUs2ZN3b9/31Ylw0QeHh5aunSpTp06pbFjx+rUqVNKkSKFHj9+rICAAEl/nyMxMTEqVaqU3nnnHe3bt0/S398L3uS+k3jW4sWL5eXlpVWrVsUZo6FRo0b6+uuvNX36dB0/flw+Pj6qUKGC6tevb+3Dz/eB5Md4omuRg4ODLl68qHTp0kn6v+kBY88LPz8/FS5cWNOnT9eaNWvk6OiYLMZjIWi/wXr27KnmzZurXbt2at26tcqVK6cLFy6odu3a6tSpkyIjI/Xtt9/q999/t3WpSEQxMTHWULR3716tXLlSJ06c0K1bt5QzZ05t2LBBN2/eVOPGjeXv7/+PF1ze1BEi8eJWr14t6f8GL5s9e7befvtt/fHHH8qUKZMkqXDhwpo8ebKKFi2q0qVLy8/PTz4+PipYsKDKli2rEydOqFGjRvrll1+0dOlS66CMeDXLly+Xn5+fXF1d5eHhYZ0bOfaLUfXq1eXs7Kzdu3dbX1OgQAGtXr1aQUFBevjwoU3qhvmKFy+uqVOn6ujRoxo/frwePnyonj176ssvv9Tu3bvl5ORk/TyPjo7m/2AyVrZsWTVu3FjXrl2zjpcRO/tAs2bNlDlzZuuFmCfRMJM8WSwWzZo1S6VLl5YkZciQQXv27JGkOIMo3rx5U/Pnz9fly5dVsGDBZHVBnW/Kb6hp06Zp5syZWrFihXbs2KHdu3fr4cOHql+/vm7fvq2PPvpI7du3140bN7Ry5Upbl4tEFPuFqnfv3mrYsKG6deumihUr6rPPPtP69euVO3dubd26VVevXlWTJk2so0QDT5o1a5a++eYbxcTEyPi7G5IyZ86sEiVK6PTp09ar2IZhKE+ePJo0aZKKFSumHDlyWL/AGYYhV1dXZcuWTdu3b1fRokVt+I7eHP369VPXrl21Zs0a5cyZU2XLltVXX32lvXv3Wre5f/++UqVKJW9v7zivLVy4sI4fP56svgglB8WKFdOMGTN05MgRDRw4UEWKFFGHDh1UqVIljRkzRjNnzlTPnj116NAhNW7c2NblIpFt3bpVUVFR8vHx0YgRI1SnTh199tlnOn78uLVl+86dOzIMQ2nTprVxtbC12Au2d+7c0ezZs/Xpp59Kkrp166YbN27o888/l/R/F2AmTpyoBQsWJMs7ZCyGwZCib6IePXooMDBQc+fOtY4E+PjxYxUqVEhFixbV0qVLJUm7d+9WuXLlaJ1MZn755Rf16dNHS5cuVfHixbV7927Nnj1bV65c0XfffafKlSvrr7/+UuHChdWyZUvrHMdArLCwMDk6Osre3l5Hjx5V8eLFFR0drd9//11ffvmlIiMj9fvvv8vV1dX6mtOnT2v69OkaM2ZMnBaQ2Hl88eq+/fZb/fDDD1q3bp3eeustubm5SZI+/fRT7dy5U02aNFHGjBm1Y8cO+fv76+jRo9zymYwcO3ZM7dq1U8mSJdW4cWOdOnVK48aNU8qUKeXq6qpJkyZxwSuZOX/+vPLmzatBgwapb9++cnR01PXr19W+fXvt27dPXbt2lYeHh3777TddvXqVzwxIkvbt26dJkyYpPDxc06dPV7p06fTw4UPNnj1b48ePl5ubm4oUKaJ79+5p+/btyfZiOkH7DdWgQQPduXNHO3fulCSFh4fL2dlZc+bM0fDhw7VlyxZlyZLFuv2TtxPjzffFF19Y5y6OtW/fPg0aNEi5cuWyzmd88+ZNeXh4EIJgFdt6Hft5sXv3blWoUEGTJ09Wx44drWG7V69eCgsL086dO+Xq6mq94BcrKiqKL2smu3fvnj799FO1atVKTZs21Y0bN3T+/HktWrRIlStX1qpVq/To0SPdvn1buXPn1owZM+To6MiFjmTm6NGj+vzzz1WsWDF9++23Sp8+vSIjIxUdHS0XFxdbl4dENGzYMIWHh2vcuHF6+PCh+vTpo2+//Vb29va6fv26unfvrmXLlqlZs2aqUKGCmjZtqhQpUvD5ncxFRERo5MiRmjZtmpydnXXx4kXrusePH+vPP//UxIkTFRoaKnd3d3Xu3Fn58uWzYcU2lOjDryHB7Nixwzpk/rp164wsWbIYP/30U5xtFi5caBQqVOiZYffx5nreiPLdunUzPvjgA+Px48dxlo8ePdpInz69cf/+/TjLGYEesR48eGD9+6VLl4zIyEhj8ODBhqOjo/XzJioqyti5c6fh6+trFCtWzLh7966tyk1W7t27Z3h5eRn9+/c3du7caXz66adG6dKljRIlSlh/H0RFRcUZSZqRgpOno0ePGqVKlTI+/fRT4/Tp07YuBzYwZMgQI2PGjMb69euNlStXGt99951hb29v9OrVy/o7/8qVK8Ynn3xiuLu7G2fOnDEMwzDCwsJsWTZs6MlRwm/cuGEMGzbMSJUqlfHll1++0GuSI5ow3xB9+vTRl19+qQ0bNujx48cqXLiwPvroI82ZM0fjx49XdHS0rl+/rnnz5il79uxKnz69rUtGInjyToWdO3fq5s2bkqRChQrp4MGD2rFjR5xRI/PmzatcuXIpKioqzn5o7YIkbdq0Sf3791d4eLg6deqk6tWrKzIyUl9//bUGDhyoL774QlOmTJG9vb3KlSunkSNHKiQkRN27d7d16clCunTpNGTIEP3444+qU6eOfHx89N133+nw4cOqUKGC9u3bJ3t7e2s/OcMwaJVKpooVK6bJkyfL39/fOkowko+wsDBt3bpVX375papXr666deuqX79++vnnnzVmzBgNHjxYERER8vHx0ejRo1WyZElVrlxZp06dkrOzs63LRyKL/Z4YHh4u6e8B8ry8vNS6dWv169dPGzduVL9+/azbR0RE2KTO15KNgz5MMHz4cCNjxozG7t27jZCQEOvys2fPGl9//bWRIUMGI2PGjEaePHmM4sWLGxEREYZhPL+lE2+OJ68i9unTx8iRI4cxe/ZsIzw83DAMw2jWrJmRLl06Y/HixcbZs2eNwMBAo0qVKkb16tWT/RVIPN+wYcOMQoUKGaVKlTIyZMhgvYPGMAzj0aNHxtChQw2LxWJMmTLFMIy/W7aPHTvGHRGJzM/Pzzh//rz1eXR0tFG5cmWjf//+NqwKr6On72rCm+/OnTtGTEyMkTNnTmPAgAGGYfz9fSE6OtqIjo42mjZtalgsFmPQoEHW11y9etV49913jbfeesv6HRLJQ+z3wU2bNhlNmzY1atasaXz11VfGzZs3DcMwjOvXrxvffvutkS9fPuv5hP9DH+0kzDAM3b9/Xx9//LEaN26stm3bWvtBxva5Cw0N1f3797Vjxw65u7urcuXKsre3p39NMjJy5EiNHTtWy5cvV4ECBayDI0lS27ZttWHDBoWFhcnLy0sODg46cOCAHB0d6beP56pTp45+++03NW/eXOPHj4/TGvb48WONHTtWgwYN0ogRI/TVV19Z19EPOPE9fPhQx48f18iRI+Xn58cgRkAyN2bMGF26dEn9+/fXzz//rLlz52rhwoUqWbKk9fvj//73Px05ckQbNmzQlClTrCNI37x5U9HR0c/MVIA338qVK9WsWTN17NjR+j3xwYMHWrlypbJkyaIbN25ozpw5+uGHH/TFF1/of//7n61Lfm0QtJO4oKAgFStWTL1791aHDh3irHv8+LH8/f2VI0eOOMv5wpt8PHr0SHXr1lXNmjXj3L775IWWgwcP6vbt2zIMQzVr1uRCDJ4rdrCkoUOHWgc5e++999S9e3d5e3tbL8w8fvxYgwYN0u+//67du3fHGQANiccwDO3cuVNjxoxRZGSk1qxZw8BnQDLWu3dvzZw5UxMmTFC5cuV0+/ZtDR48WFFRUfruu+9UvHhxPXr0SI0bN1aLFi108OBB/fbbb9q6das8PDxsXT5s5OTJk2rUqJG6du2q9u3b69q1aypTpowiIiKUPn16bdu2TVmzZtW1a9f066+/6qOPPlKuXLlsXfZrg2/SSVTsKOIRERFKlSqVLly4IClun9yzZ89qwYIF+uqrr+Tp6Wl9LV+yko/g4GAdO3ZMbdq0kfR/54eDg4MeP36s4OBglS5dOs5roqOjCdmQFPfzxNHRUY6Ojho6dKikv0erjZ0mMDZsS9KVK1c0YsQISZLFYnlmtHEkDovFIl9fXw0ZMkRFihSRnZ0dF9CAZGrr1q1asmSJVqxYoXLlykmSsmXLpnbt2mnGjBl6//33VbRoUd2+fVuOjo5q0KCBrl+/LgcHB/rwJ3PBwcHy9fVV+/btdfXqVVWqVEk1a9ZU48aN1apVK3300Udavny5smXLpm7dupExnsJv3CRozJgxOnv2rEaPHi13d3f16dNHrVq10ltvvWVt1X748KH69++v1KlTcyUymXgyFAUHB8vV1VWZM2dW0aJFtWLFCtWuXVtp0qSxtmgdPXpUW7ZsUffu3eNM6cKHJKS459OqVat04cIFeXh4qEiRIipcuLB14JPly5crPDxcLVq00IABAxQaGqq9e/dKEiHbxpydnVWsWDFJf/97ErKB5Onq1atKlSqVChQoIOn/Pt8//PBD5cuXT2fOnNGuXbvk7u6ubt26SZLOnTsnHx8fRUZGysnJyYbVw5beffddZcqUSdLfAy+XLl1a06ZNk52dnd5++21t375ddevW1aFDh/j++Bz81k1ievXqpQULFqhv3766c+eOXF1d1ahRI924cUNffPGF1qxZIzs7OwUFBSkoKEhHjx6lVSkZeDIUjRo1SiEhIWrUqJEKFCig6tWra9GiRRo3bpz69esne3t7PX78WMOHD5dhGEqbNq2Nq8frxnhinuzevXtrzpw5KlCggG7duiUfHx999tlnatiwofr16ydnZ2ctWbJEa9euVdasWbVjxw7rfvjMeX0w3gKQ/MR+93v8+LGio6Oty58cy+f48eMqXry4PvzwQ0nSjRs3NHr0aC1cuFC7d+9W6tSpbVU+Elns+XLnzh1FRkbK3t5e7u7uypMnjwIDA3XmzBl9+eWXsrOzU0REhLJnz6758+erQoUKXMj9B/TRTkIWL16sbt26afXq1SpVqpSkv/tNhoSEKEOGDNqzZ4+WLFmi0NBQ+fj4qG/fvnJwcOB2wWSkV69emjVrlsaOHavKlSsrc+bMioyMVP/+/bVp0ybFxMQoX758unTpksLDw3X06FE5OjpyIQbPNWHCBI0dO1aLFy9W2bJlNX78ePXp00fFihVTly5d1KRJE0nSn3/+qUePHqlYsWL08QeA18yZM2dUqFAhDRgwQIMGDbIuf/jwoZo2baqqVauqU6dOun//vqZMmaLNmzdr3LhxKlKkiO2KRqKK/R64atUqjRkzRn5+fipYsKDy5MmjsWPHSpKqVKmimJgYjRo1SosWLdLq1au1bds2ZcmSxcbVv74I2knI0KFDdfDgQa1evVonT57Uli1bNG3aNN29e1e9evXS119//cxI0Qx8k3zMnz9fPXv21MaNG1WoUCFJf99CHhUVpQwZMmj37t1atmyZHj16pGzZsqlPnz5ciEEcT35+PHr0SD179lSePHnUtWtXrVy5Uq1atVKHDh104MAB3bt3T//73//UsGHDOPvgMwcAXj/Tpk1T586d1bFjR9WuXVtOTk4aNmyY/P39deTIEev3gDt37sjOzk7p06e3ccVIbBs2bFC9evU0cuRIVahQQStXrtTgwYO1YsUK1a1bVytXrtR3332n69evK02aNFq8eLGKFy9u67JfawTtJGTx4sXWabx27dqlokWL6p133lFQUJC+/fZbXbp0SdmyZbN1mbCRH374QRs2bNC6det04cIF/fbbb5o0aZJSp06tihUravz48c+8hlCE51myZImKFSsmwzCUKlUqBQcHq06dOurSpYu6deumhQsXql27dsqSJYsmTJig6tWr27pkAMC/MAxDq1evVteuXRUdHS03NzdlyZJFa9eulaOjIxfdk7mIiAh98cUX8vb21sCBAxUYGKjixYurXr16+uGHH6zbhYSE6NKlS/Ly8mIMqBfA/6gkpGrVqpo0aZKWLFmiHj16qEqVKsqZM6cuXryoDRs2KCoqytYlwoaio6N1/vx5ffbZZ9q3b5+KFi2qFi1aKEWKFJo+fbo+//xz5c+fP85rCNmQ4rZkDx06VBMmTNCePXuUK1cuOTg4aO3atcqcObN19Hp7e3tVqFBBFSpUUNWqVW1ZOgDgBVgsFtWtW1flypVTcHCwYmJilCtXLmYkgCTJyclJf/31l8qWLatbt26pVKlSqlmzpjVk//rrr3JxcVH16tWtg2ziv/G/KglJly6dvvjiC7Vr187arzY8PFxdu3ZVqlSplD17dluXCBvq3r277t27p4sXL+qrr75SpUqVlDNnTh0+fFiLFy9WihQpbF0iXlOxIfvy5ct68OCBZs6cqTx58ujJG57u3r2rw4cP691339X8+fPl6+urnj17xhlUBwDwesuYMaMyZsxofc6MBMlTbJ/siIgIOTk5KSoqSnny5NHhw4c1bNgw1axZU9OmTZP0dzfEjRs3qkiRIqpSpQrnSzxw63gS9fjxY61YsULTpk1TSEiIDhw4IEdHx2f6aCN5eDLoxH5oGoahx48f65NPPlFkZKTWr1/PuYF/tG7dOtWuXVsZMmTQ/Pnz47RUHzp0SL169dKlS5fk4OCg1KlTM5AeAABJUOzv7Q0bNmjx4sX67rvv5OXlpc2bN6t69eoqWLCgdu7cKTc3NxmGoQEDBmjBggXasmWLcuXKZevykxS+dSdRd+/e1YMHD1S0aFEdPHjQ2r+GIPVm+6frYvb29tZ1Tk5OCg0N1YQJE9SwYUPduHFDa9eulZ2dnWJiYhKzXCQhNWvW1Ndff627d+/q3Llzcc61UqVKafTo0Ro9erR69eqlY8eOWT9zCNkAACQdFotFy5YtU6NGjZQ+fXoFBARIkj744APNnj1bp06dUuvWrfXxxx+rWbNm+vHHH7V8+XJC9kugRTsJCw0Ntc5vGBkZKUdHRxtXhITQqlUrhYSEaPny5ZL0wi2Iw4YNU0BAgMaMGcPo4nghhmGoS5cu+uWXX/Trr7+qdu3a/7gtt4sDAJD0nDx5UpUrV9Z3332ndu3aWZffuXNHGTNm1N69e7Vw4ULduHFDhQsXVuPGjZUnTx4bVpx0EbRfI5cuXZKTk5MsFouyZs36r9tyu2bysHz5chmGoc8++0yNGjXS1KlTJf37v//z1hGyER8dOnTQvHnztHjxYtWqVcvW5QAAAJOsXr1aI0aM0N69e3Xv3j2tWbNGCxYs0KlTp9SiRQsNGTJEDg4O5AwT8M37NTF48GCtXr1aoaGhioiI0KBBg9SiRYvnbvtkkBo/frweP36svn37Jma5SAQVKlSQh4eHZs+erdmzZ6tFixaKjo7WjBkzZLFY/jFsWyyWOMH64cOHSpMmTWKXjyRsypQpslgsatKkiX755Rc1aNDA1iUBAICX9OR3xgwZMmj//v3q3bu3tm3bJi8vL+XLl0+VK1fWgAED9OGHH8rX19fGFb8Z6ND7GhgyZIgmTpyokSNHasuWLSpevLjatm2rixcvPrPtk/9Rpk2bpv79+8vHxyexS0YCW7Rokc6fP68ZM2YoZcqUKl68uLWF8fPPP5cka9h+mmEY1pA9d+5cTZgwQWFhYYlaP14/8e2f/9NPP6lGjRr66aefEqgiAACQkGK/J967d08PHz5UUFCQypUrpxkzZmjPnj167733NHToUI0fP169evVS0aJF9eDBAxtX/eagRdvGHj58qN9//11Tp05VlSpVtHLlSm3btk0//PCDcufObe0HaRiGDMOwDnY2depU9erVS3PnzlX9+vVt/C6QEDJlyqQbN26of//+cnR01JAhQzR37lw1b95c0t8XWp5u2X76QkynTp20cuVKpvaC9bPj8ePHSpky5QvNULBo0SJrQKe7CgAASUfs7+21a9dqxIgRevz4sR48eKAhQ4bos88+U7NmzeTk5GTdvl+/frpz544KFChgw6rfLLRo29CtW7dkb2+vgwcP6u2339bWrVvVvHlzDRs2TB06dFBYWJiGDBmi8+fPy2KxWL8UT5s2Tb169dIvv/xCyH5DVatWTfb29qpbt66mTJmiFi1aKE2aNKpVq5bmzp2rhQsXPtOy/WQQir0QQx9bPGnmzJkqVaqUoqOj/zNkxwZsZjIAACDpsVgsWrdunT755BPVr19fs2bNUtWqVdWkSRP9/vvv1kGUV69erZYtW2rGjBlatmyZsmTJYuPK3xx8g7KRvn37qlevXpKkevXqadiwYapbt67Gjx+vDh06SJJu376t/fv36/jx49bXTZo0SV9++aVmzpxJv8k3VHR0tNKlS6eCBQvq4sWLKl68uBwcHBQTEyNHR0fVrl1bc+fO1aJFi6znisViiROye/furZ9//pkLMYjDy8tLKVKk0JEjRyT983RxT949s27dOl26dInWbAAAkoAnf7cvWrRI3bp1U48ePeTq6qpNmzapbdu2KleunCwWi6KjoxUaGqqoqCjt2LFDxYoVs2Hlbx6Ctg1s27ZNv/32m7p27aqUKVMqf/782rBhg+rUqWO9LTg4OFgdO3ZURESENVCHhobq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\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "# **Feature and Target Selection**" ], "metadata": { "id": "HfjyL7qXLeBB" } }, { "cell_type": "code", "source": [ "X = adm_df.drop(\"admission_status\", axis=1)\n", "y = adm_df[\"admission_status\"].map({\"Not Admitted\": 0, \"Admitted\": 1})\n", "print(X.shape)\n", "print(y.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_zo5oo00IVoj", "outputId": "a8152c2b-bed5-48c5-dab6-2457fcdd45f8" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(500, 7)\n", "(500,)\n" ] } ] }, { "cell_type": "code", "source": [ "y.value_counts()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 178 }, "id": "sCoMKiXuIVl5", "outputId": "7f9c9dc4-c982-4bc4-a516-7b0196f39b3e" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "admission_status\n", "0 282\n", "1 218\n", "Name: count, dtype: int64" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
count
admission_status
0282
1218
\n", "

" ] }, "metadata": {}, "execution_count": 15 } ] }, { "cell_type": "markdown", "source": [ "# **Train test split**" ], "metadata": { "id": "JmaV_NvfMFC9" } }, { "cell_type": "code", "source": [ "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2, random_state=42, stratify=y)\n", "print(X_train.shape)\n", "print(X_test.shape)\n", "print(y_train.shape)\n", "print(y_test.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "7Fdq7nmTIVjU", "outputId": "af334ae2-717c-4c77-cdb6-a67da97aa76f" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(400, 7)\n", "(100, 7)\n", "(400,)\n", "(100,)\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **Pipeline**" ], "metadata": { "id": "Aiy9_9fIP-bX" } }, { "cell_type": "code", "source": [ "# Preprocessing and pipeline\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.pipeline import Pipeline\n", "\n", "# Metrics\n", "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n", "\n", "# Classifiers\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier\n", "from sklearn.svm import SVC\n", "import xgboost as xgb" ], "metadata": { "id": "YiponoSzIVd_" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "# **KNN**" ], "metadata": { "id": "ZXKUdpyZQaGu" } }, { "cell_type": "code", "source": [ "# Create pipeline\n", "pipe = Pipeline(steps=[('scaler', StandardScaler()), ('model', KNeighborsClassifier())])\n", "\n", "# Train\n", "pipe.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"K-Nearest Neighbors-->\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "#store result\n", "results = {}\n", "results[\"KNN\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "hig9Dm89IVbM", "outputId": "6bcb13ee-452a-4bdf-f204-2dcb504e9f7e" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "K-Nearest Neighbors-->\n", "Accuracy: 0.91\n", "Confusion Matrix:\n", " [[52 4]\n", " [ 5 39]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.91 0.93 0.92 56\n", " 1 0.91 0.89 0.90 44\n", "\n", " accuracy 0.91 100\n", " macro avg 0.91 0.91 0.91 100\n", "weighted avg 0.91 0.91 0.91 100\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **Naive Bayes Pipeline**" ], "metadata": { "id": "Z1u1IZvoQxbL" } }, { "cell_type": "code", "source": [ "# Create pipeline\n", "pipe = Pipeline(steps=[\n", " ('scaler', StandardScaler()),\n", " ('model', GaussianNB())\n", "])\n", "\n", "# Train\n", "pipe.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== Naive Bayes ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results[\"Naive Bayes\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "tONpKba_IVYZ", "outputId": "e6a20b20-3315-4855-f69b-1c513fd51e1d" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Naive Bayes ===\n", "Accuracy: 0.9\n", "Confusion Matrix:\n", " [[52 4]\n", " [ 6 38]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.90 0.93 0.91 56\n", " 1 0.90 0.86 0.88 44\n", "\n", " accuracy 0.90 100\n", " macro avg 0.90 0.90 0.90 100\n", "weighted avg 0.90 0.90 0.90 100\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **Decision Tree Pipeline**" ], "metadata": { "id": "lJyvmAFqRFAy" } }, { "cell_type": "code", "source": [ "# Create pipeline\n", "pipe = Pipeline(steps=[\n", " ('scaler', StandardScaler()), # optional for trees\n", " ('model', DecisionTreeClassifier(random_state=42))\n", "])\n", "\n", "# Train\n", "pipe.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== Decision Tree ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results[\"Decision Tree\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "g6M06xkcIVVj", "outputId": "cf08c9ff-9337-415e-cfda-b8b15ce8073a" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Decision Tree ===\n", "Accuracy: 0.88\n", "Confusion Matrix:\n", " [[54 2]\n", " [10 34]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.84 0.96 0.90 56\n", " 1 0.94 0.77 0.85 44\n", "\n", " accuracy 0.88 100\n", " macro avg 0.89 0.87 0.88 100\n", "weighted avg 0.89 0.88 0.88 100\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **Random Forest Pipeline**" ], "metadata": { "id": "tqRTOo7xRip_" } }, { "cell_type": "code", "source": [ "# Create pipeline\n", "pipe_rf = Pipeline(steps=[\n", " ('scaler', StandardScaler()), # optional for tree-based models\n", " ('model', RandomForestClassifier(random_state=42))\n", "])\n", "\n", "# Train\n", "pipe_rf.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe_rf.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== Random Forest ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results[\"Random Forest\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "wf13VzqGIVSf", "outputId": "1e50fe39-5987-45da-9068-adc3dc6bca31" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Random Forest ===\n", "Accuracy: 0.92\n", "Confusion Matrix:\n", " [[53 3]\n", " [ 5 39]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.91 0.95 0.93 56\n", " 1 0.93 0.89 0.91 44\n", "\n", " accuracy 0.92 100\n", " macro avg 0.92 0.92 0.92 100\n", "weighted avg 0.92 0.92 0.92 100\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **AdaBoost Pipeline**" ], "metadata": { "id": "qWnaysSCRn9F" } }, { "cell_type": "code", "source": [ "# Create pipeline\n", "pipe = Pipeline(steps=[\n", " ('scaler', StandardScaler()), # optional for AdaBoost\n", " ('model', AdaBoostClassifier(n_estimators=100, random_state=42))\n", "])\n", "\n", "# Train\n", "pipe.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== AdaBoost ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results[\"AdaBoost\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sZpsaHimIVPY", "outputId": "181cf6bd-d3df-43e1-da2c-6a7efd7c5a4e" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== AdaBoost ===\n", "Accuracy: 0.9\n", "Confusion Matrix:\n", " [[51 5]\n", " [ 5 39]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.91 0.91 0.91 56\n", " 1 0.89 0.89 0.89 44\n", "\n", " accuracy 0.90 100\n", " macro avg 0.90 0.90 0.90 100\n", "weighted avg 0.90 0.90 0.90 100\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **Gradient Boosting Pipeline**" ], "metadata": { "id": "HNzySNSyR2M9" } }, { "cell_type": "code", "source": [ "# Create pipeline\n", "pipe = Pipeline(steps=[\n", " ('scaler', StandardScaler()), # optional for tree-based models\n", " ('model', GradientBoostingClassifier(random_state=42))\n", "])\n", "\n", "# Train\n", "pipe.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== Gradient Boosting ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results[\"Gradient Boosting\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ZDWoYmZgIVMP", "outputId": "25776063-3e74-4cf7-b791-c84eb39ebc50" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Gradient Boosting ===\n", "Accuracy: 0.91\n", "Confusion Matrix:\n", " [[53 3]\n", " [ 6 38]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.90 0.95 0.92 56\n", " 1 0.93 0.86 0.89 44\n", "\n", " accuracy 0.91 100\n", " macro avg 0.91 0.91 0.91 100\n", "weighted avg 0.91 0.91 0.91 100\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **XGBoost Pipeline**" ], "metadata": { "id": "p4Wxp5DsSBMD" } }, { "cell_type": "code", "source": [ "# Create pipeline\n", "pipe = Pipeline(steps=[\n", " ('scaler', StandardScaler()), # optional for tree-based models\n", " ('model', xgb.XGBClassifier(use_label_encoder=False, eval_metric='logloss', random_state=42))\n", "])\n", "\n", "# Train\n", "pipe.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== XGBoost ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results[\"XGBoost\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_BNGCrf0IVJL", "outputId": "a0c1a849-51e3-4cfa-810c-43f0267d2f44" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== XGBoost ===\n", "Accuracy: 0.86\n", "Confusion Matrix:\n", " [[50 6]\n", " [ 8 36]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.86 0.89 0.88 56\n", " 1 0.86 0.82 0.84 44\n", "\n", " accuracy 0.86 100\n", " macro avg 0.86 0.86 0.86 100\n", "weighted avg 0.86 0.86 0.86 100\n", "\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.12/dist-packages/xgboost/training.py:199: UserWarning: [14:20:27] WARNING: /workspace/src/learner.cc:790: \n", "Parameters: { \"use_label_encoder\" } are not used.\n", "\n", " bst.update(dtrain, iteration=i, fobj=obj)\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **SVC pipeline**" ], "metadata": { "id": "E_P0cmIbTdd0" } }, { "cell_type": "code", "source": [ "# Create pipeline\n", "pipe_svc = Pipeline(steps=[\n", " ('scaler', StandardScaler()),\n", " ('model', SVC(random_state=42, probability=True))\n", "])\n", "\n", "# Train\n", "pipe_svc.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe_svc.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== SVC ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results[\"SVC\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "yNKL_oISIVFv", "outputId": "93d6611f-22d0-440f-e519-5e2e46b3d246" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== SVC ===\n", "Accuracy: 0.92\n", "Confusion Matrix:\n", " [[53 3]\n", " [ 5 39]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.91 0.95 0.93 56\n", " 1 0.93 0.89 0.91 44\n", "\n", " accuracy 0.92 100\n", " macro avg 0.92 0.92 0.92 100\n", "weighted avg 0.92 0.92 0.92 100\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **Logistic regression**" ], "metadata": { "id": "dGLYoWn9ThLp" } }, { "cell_type": "code", "source": [ "# Create pipeline\n", "pipe = Pipeline(steps=[\n", " ('scaler', StandardScaler()),\n", " ('model', LogisticRegression(random_state=42))\n", "])\n", "\n", "# Train\n", "pipe.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== Logistic Regression ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results[\"Logistic Regression\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "KBtJDs8SIMGF", "outputId": "f34f865c-54df-4b86-e48b-8432363cc3aa" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Logistic Regression ===\n", "Accuracy: 0.91\n", "Confusion Matrix:\n", " [[53 3]\n", " [ 6 38]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.90 0.95 0.92 56\n", " 1 0.93 0.86 0.89 44\n", "\n", " accuracy 0.91 100\n", " macro avg 0.91 0.91 0.91 100\n", "weighted avg 0.91 0.91 0.91 100\n", "\n" ] } ] }, { "cell_type": "code", "source": [ "# Convert results dictionary to DataFrame\n", "results_df = pd.DataFrame(list(results.items()), columns=[\"Model\", \"Accuracy\"])\n", "results_df = results_df.sort_values(by=\"Accuracy\", ascending=False)\n", "results_df.reset_index(drop=True, inplace=True)\n", "results_df\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 331 }, "id": "4HpoxPxSSrnf", "outputId": "282244d9-6a5a-4105-8552-33b3b352581e" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Model Accuracy\n", "0 Random Forest 0.92\n", "1 SVC 0.92\n", "2 KNN 0.91\n", "3 Gradient Boosting 0.91\n", "4 Logistic Regression 0.91\n", "5 Naive Bayes 0.90\n", "6 AdaBoost 0.90\n", "7 Decision Tree 0.88\n", "8 XGBoost 0.86" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ModelAccuracy
0Random Forest0.92
1SVC0.92
2KNN0.91
3Gradient Boosting0.91
4Logistic Regression0.91
5Naive Bayes0.90
6AdaBoost0.90
7Decision Tree0.88
8XGBoost0.86
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", " \n", " \n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "variable_name": "results_df", "summary": "{\n \"name\": \"results_df\",\n \"rows\": 9,\n \"fields\": [\n {\n \"column\": \"Model\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9,\n \"samples\": [\n \"Decision Tree\",\n \"SVC\",\n \"Naive Bayes\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Accuracy\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.019649710204252678,\n \"min\": 0.86,\n \"max\": 0.92,\n \"num_unique_values\": 5,\n \"samples\": [\n 0.91,\n 0.86,\n 0.9\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 27 } ] }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "plt.figure(figsize=(10,6))\n", "sns.barplot(x=\"Accuracy\", y=\"Model\", data=results_df, palette=\"viridis\")\n", "plt.title(\"Comparison of Model Accuracies\")\n", "plt.xlim(0,1)\n", "plt.xlabel(\"Accuracy\")\n", "plt.ylabel(\"Model\")\n", "plt.show()\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 671 }, "id": "39aiD0ooIO3H", "outputId": "0fc0b6b8-d395-40c7-d8c8-e55881d42ec8" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/tmp/ipython-input-942810132.py:5: FutureWarning: \n", "\n", "Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.\n", "\n", " sns.barplot(x=\"Accuracy\", y=\"Model\", data=results_df, palette=\"viridis\")\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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X3zxhfbu3WtxO3R6ihUrptTUVJ06dco8YyhJly9f1o0bN1SsWLEsrS01NVVnzpwxzxpL0smTJyXJ/HKtlStXysHBQZs2bbL4vtewsLB/vH9PT0/16tVLvXr10pUrV1S5cmV99NFHatSokflYo6Ki0sy2RkVFZdm5uH8/98+mJyUl6ezZswoKCsqS/bz66qsaMWKEYmNj9dVXXz20niNHjig1NdUi4N17C/a9eosVK6Zt27YpISHBYhY5KirKYrx7x2Rra5tlx7Jw4UIVKFBAn376aZp1q1at0urVq/XZZ5/J0dFRPj4+j/wBkY+Pj/bt26c7d+7I1tY23T65c+eWpDQvZ8vIDP/Ro0d18uRJzZ8/3+KlXFu2bLHod++cZfQHWz4+PpKkAgUKPNa59vHx0cCBAzVw4ECdOnVKFStW1OTJk/X1119naL8A8HfcYg0AeGoNHjxYTk5O6t69uy5fvpxmfXR0tPntxI0bN5Z0943J95syZYokPZHvzZ05c6b514ZhaObMmbK1tVWDBg0k3Z2ZNZlMFjN1586d05o1azK9z5SUlDS3ZxcoUECFChUyf51V1apVVaBAAX322WcWX3H13XffKTIyMsvORVBQkOzs7PTJJ59YzLDPnTtXcXFxWbYfHx8fTZs2TePGjVP16tUf2K9x48a6dOmSli5dam5LTk7WjBkz5OzsbL4duHHjxkpOTtbs2bPN/VJSUjRjxgyL8QoUKKB69erp888/V2xsbJr9/f777xk6jtu3b2vVqlVq2rSpXnnllTRLnz59dPPmTfNXSLVu3VqHDx9O923Z985369atdfXqVYtr8e99ihUrJmtra+3atcti/axZsx679nt3Gdz/+2wYhsXbwaW7X+NVp04dzZs3L81bpR92F0ZwcLBcXV01duxY89vP73fvXP/555/m7we/x8fHRy4uLmm+zg0AMoMZZADAU8vHx0eLFi1Su3bt5O/vr86dO6tcuXJKSkrSnj17tHz5coWEhEiSKlSooC5duuiLL77QjRs3VLduXe3fv1/z589XixYtzC9EyioODg7auHGjunTpoho1aui7777T+vXr9d5775mf523SpImmTJmihg0b6tVXX9WVK1f06aefytfXV0eOHMnUfm/evKkiRYrolVdeUYUKFeTs7KytW7fqwIEDmjx5sqS7M54TJkzQ66+/rrp166pD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Z482b96sGTNm6P3339e+fftUvHjxx9qnvb297O3tM10zAAAAAGTEf/oZZCsrK7333nv64IMPdPv2bUnS7t271bx5c7322muqUKGCSpQooZMnT2ZoXH9/f124cEGxsbHmtv/9739p+hw+fFi3bt0yt+3evVtWVlYqXbr0PziqjPH399fevXt1/532u3fvlouLi4oUKfLA7SpXrqxffvlF3t7e8vX1tVjuhWmTyaTAwECNGjVKhw4dkp2dnVavXi1JsrOzU0pKypM9OAAAAADIgP90QJakNm3ayNraWp9++qkkqWTJkuaZz8jISL3xxhu6fPlyhsYMCgpSqVKl1KVLFx0+fFg//PCD3n//fYs+HTt2lIODg7p06aJjx45p+/bt6tu3rzp16mS+vTo79OrVSxcuXFDfvn114sQJffPNNwoNDdWAAQMsbu3+u969e+vatWvq0KGDDhw4oOjoaG3atEmvv/66UlJStG/fPo0dO1YHDx5UTEyMVq1apd9//13+/v6SJG9vbx05ckRRUVG6evWq7ty5k12HDAAAAADp+s8HZBsbG/Xp00cTJ07UrVu39MEHH6hy5coKDg5WvXr15OHhoRYtWmRoTCsrK61evVq3b99W9erV1b17d3300UcWfXLlyqVNmzbp2rVrqlatml555RU1aNBAM2dm7wP2hQsX1oYNG7R//35VqFBBb775prp166YPPvjgodsVKlRIu3fvVkpKil566SUFBASof//+cnd3l5WVlVxdXbVr1y41btxYpUqV0gcffKDJkyerUaNGkqQePXqodOnSqlq1qvLnz6/du3dnx+ECAAAAwAP9p95ijWfbvTfV8RZrAAAA4P/wFuuse4v1f34GGQAAAAAAiYAMAAAAAIAkAjIAAAAAAJIIyAAAAAAASCIgAwAAAAAgiYAMAAAAAIAkAjIAAAAAAJIIyAAAAAAASCIgAwAAAAAgiYAMAAAAAIAkAjIAAAAAAJIIyAAAAAAASCIgAwAAAAAgiYAMAAAAAIAkySanCwAyauWeSXJ1dc3pMgAAAAD8yzCDDAAAAACACMgAAAAAAEgiIAMAAAAAIImADAAAAACAJAIyAAAAAACSCMgAAAAAAEgiIAMAAAAAIImADAAAAACAJAIyAAAAAACSJJucLgDIqFfajpWtrX1OlwEAAAA8FdZ/OyqnS/jXYAYZAAAAAAAR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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "import pickle\n", "\n", "with open(\"admission_model_rf.pkl\", \"wb\") as f:\n", " pickle.dump(pipe_rf, f)" ], "metadata": { "id": "0RpFJIZuT5mx" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "with open(\"admission_model_svc.pkl\", \"wb\") as f:\n", " pickle.dump(pipe_svc, f)" ], "metadata": { "id": "qvZUD-51Ckil" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "# **=============VISA MODEL===========**\n", "\n", "\n" ], "metadata": { "id": "VEZZ_EcsUGGQ" } }, { "cell_type": "code", "source": [ "visa_df = pd.read_csv('/content/visa_data.csv')" ], "metadata": { "id": "PptLLVN3WmO7" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "visa_df.info()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "LfdmDNh55xGQ", "outputId": "8dc70a6f-13fb-4265-cf93-b41eef4c12e6" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 650 entries, 0 to 649\n", "Data columns (total 10 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Interview Location 650 non-null object\n", " 1 Program 650 non-null object\n", " 2 Degree Level 650 non-null object\n", " 3 University 650 non-null object\n", " 4 Universities Applied 650 non-null int64 \n", " 5 Sponsor 650 non-null object\n", " 6 Scholarship 650 non-null object\n", " 7 Relatives in US 650 non-null object\n", " 8 Visa Attempts 650 non-null object\n", " 9 Visa Result 650 non-null object\n", "dtypes: int64(1), object(9)\n", "memory usage: 50.9+ KB\n" ] } ] }, { "cell_type": "code", "source": [ "visa_df.shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "3e3NG-Ml53-w", "outputId": "d2c54d57-84a3-4ae5-f647-1d97facce890" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(650, 10)" ] }, "metadata": {}, "execution_count": 287 } ] }, { "cell_type": "code", "source": [ "visa_df.head()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 310 }, "id": "yD3Shv8v56Ms", "outputId": "fd259ebe-f58c-481c-fb0b-f99b9791a536" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Interview Location Program Degree Level \\\n", "0 Islamabad Other Masters \n", "1 Islamabad Other Masters \n", "2 Karachi Computer Science / IT Bachelors \n", "3 Islamabad Computer Science / IT Bachelors \n", "4 Other Business / Management / MBA Bachelors \n", "\n", " University Universities Applied Sponsor \\\n", "0 Other 3 Father \n", "1 Other 3 Uncle \n", "2 University of South Florida 1 Father \n", "3 University of Southern California 3 Parents \n", "4 Other 2 Parents \n", "\n", " Scholarship Relatives in US Visa Attempts Visa Result \n", "0 Yes No First Accepted \n", "1 Yes No Second Accepted \n", "2 Yes No First Accepted \n", "3 Yes Yes First Accepted \n", "4 Yes Yes Second Accepted " ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Interview LocationProgramDegree LevelUniversityUniversities AppliedSponsorScholarshipRelatives in USVisa AttemptsVisa Result
0IslamabadOtherMastersOther3FatherYesNoFirstAccepted
1IslamabadOtherMastersOther3UncleYesNoSecondAccepted
2KarachiComputer Science / ITBachelorsUniversity of South Florida1FatherYesNoFirstAccepted
3IslamabadComputer Science / ITBachelorsUniversity of Southern California3ParentsYesYesFirstAccepted
4OtherBusiness / Management / MBABachelorsOther2ParentsYesYesSecondAccepted
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "variable_name": "visa_df", "summary": "{\n \"name\": \"visa_df\",\n \"rows\": 650,\n \"fields\": [\n {\n \"column\": \"Interview Location\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"Islamabad\",\n \"Karachi\",\n \"Other\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Program\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 9,\n \"samples\": [\n \"Social Sciences / Arts\",\n \"Computer Science / IT\",\n \"Engineering\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Degree Level\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Bachelors\",\n \"Other\",\n \"PhD\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"University\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 90,\n \"samples\": [\n \"New Mexico State University\",\n \"Southern Illinois University\",\n \"New York University\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Universities Applied\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2,\n \"min\": 1,\n \"max\": 20,\n \"num_unique_values\": 16,\n \"samples\": [\n 3,\n 1,\n 20\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sponsor\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 12,\n \"samples\": [\n \"Friend\",\n \"Sibling\",\n \"Father\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Scholarship\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"No\",\n \"Assistantship\",\n \"Yes\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Relatives in US\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"No\",\n \"Yes\",\n \"Unknown\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Visa Attempts\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Second\",\n \"More than four\",\n \"Fourth\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Visa Result\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Rejected\",\n \"Accepted\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 288 } ] }, { "cell_type": "code", "source": [ "visa_df['Universities Applied'].unique()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Cj8l1OnHVRfV", "outputId": "f86482ac-3567-44b0-9e8b-7bee96aed224" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([ 3, 1, 2, 4, 14, 20, 11, 5, 6, 9, 7, 8, 10, 13, 17, 16])" ] }, "metadata": {}, "execution_count": 289 } ] }, { "cell_type": "code", "source": [ "visa_df.duplicated().sum()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "wtunDCsti8UU", "outputId": "6df3a82d-783e-4d2d-a779-e379790d364a" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "np.int64(0)" ] }, "metadata": {}, "execution_count": 290 } ] }, { "cell_type": "code", "source": [ "visa_df.shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "5_CLetUEjB5q", "outputId": "55bb91aa-7445-4d5d-cbd5-c10049e02b0c" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(650, 10)" ] }, "metadata": {}, "execution_count": 298 } ] }, { "cell_type": "code", "source": [ "visa_df.info()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "EhUr3pusjPhf", "outputId": "af5f6b17-8492-49e8-fb69-e11d8bb6310d" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 650 entries, 0 to 649\n", "Data columns (total 10 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Interview Location 650 non-null object\n", " 1 Program 650 non-null object\n", " 2 Degree Level 650 non-null object\n", " 3 University 650 non-null object\n", " 4 Universities Applied 650 non-null int64 \n", " 5 Sponsor 650 non-null object\n", " 6 Scholarship 650 non-null object\n", " 7 Relatives in US 650 non-null object\n", " 8 Visa Attempts 650 non-null object\n", " 9 Visa Result 650 non-null object\n", "dtypes: int64(1), object(9)\n", "memory usage: 50.9+ KB\n" ] } ] }, { "cell_type": "code", "source": [ "visa_df['University'].unique()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "v8r8M4kfuxiu", "outputId": "1085a6ec-f94f-4729-d5c8-becbc36cd5c3" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['Other', 'University of South Florida',\n", " 'University of Southern California', 'Tennessee State University',\n", " 'Mercer University', 'Illinois Institute of Technology',\n", " 'Pace University', 'Adelphi University', 'Texas A&M University',\n", " 'Georgia State University', 'Wright State University',\n", " 'University of Utah', 'Northeastern University',\n", " 'University of Minnesota', 'University of Maine',\n", " 'Harvard University', 'University of Central Oklahoma',\n", " 'Lamar University', 'University of Houston',\n", " 'University of Washington Seattle', 'Eastern Michigan University',\n", " 'Central Michigan University', 'Southern Illinois University',\n", " 'University of Cincinnati', 'DePaul University',\n", " 'University of North Texas Denton', 'University of South Alabama',\n", " 'Purdue University', 'University of Idaho', 'University of Kansas',\n", " 'Rutgers University', 'University of Texas at Austin',\n", " 'Virginia Tech', 'Minnesota State University Mankato',\n", " 'Southwest Minnesota State University',\n", " 'Cleveland State University', 'University of Illinois at Chicago',\n", " 'Stevens Institute of Technology', 'Ohio State University',\n", " 'University of New Haven', 'New Mexico State University',\n", " 'Drexel University', 'Saint Louis University',\n", " 'University of Alabama', 'University of Southern Mississippi',\n", " 'University of Illinois at Urbana-Champaign',\n", " 'University of Missouri–Kansas City',\n", " 'University of the Pacific Stockton', 'University of Illinois',\n", " 'Iowa State University', 'University of Dallas',\n", " 'Long Island University', 'University of Central Florida',\n", " 'Maharishi International University', 'Missouri State University',\n", " 'New York University', 'St. Cloud State University',\n", " 'Westcliff University', 'Texas Tech University',\n", " 'California Institute of Technology',\n", " 'University of Wisconsin Milwaukee', 'Full Sail University',\n", " 'New York Institute of Technology', 'Troy University',\n", " 'San Francisco State University', 'University of Bridgeport',\n", " 'Miami University', 'Gannon University',\n", " 'Texas A&M University–Corpus Christi', 'Tacoma Community College',\n", " 'South Dakota State University', 'Illinois State University',\n", " 'California State University', 'Florida State University',\n", " 'George Mason University', 'Washington State University',\n", " 'Ohio University', 'University of Dayton',\n", " 'Bay Atlantic University', 'University of the Potomac',\n", " 'Webster University Missouri', 'Indiana Institute of Technology',\n", " 'University of Texas at Arlington', 'Murray State University',\n", " 'Rhodes College', 'Queens College',\n", " 'University of California, Davis', 'Boston University',\n", " 'University of Massachusetts Amherst', 'University of Arizona'],\n", " dtype=object)" ] }, "metadata": {}, "execution_count": 300 } ] }, { "cell_type": "code", "source": [ "# Check distribution of target\n", "visa_df['Visa Result'].value_counts()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 178 }, "id": "hM3feCWejahf", "outputId": "4d66e789-5d25-4b76-a1b7-148a48ed5cef" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Visa Result\n", "Rejected 376\n", "Accepted 274\n", "Name: count, dtype: int64" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
count
Visa Result
Rejected376
Accepted274
\n", "

" ] }, "metadata": {}, "execution_count": 301 } ] }, { "cell_type": "code", "source": [ "# Check relationship with Program\n", "pd.crosstab(visa_df['Program'], visa_df['Visa Result'], normalize='index')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 363 }, "id": "Ud7DsZ2ZVAo5", "outputId": "c0d583ee-cead-483c-dbb0-5b887ccbd76f" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Visa Result Accepted Rejected\n", "Program \n", "Business / Management / MBA 0.304000 0.696000\n", "Computer Science / IT 0.413333 0.586667\n", "Economics / Finance / Accounting 0.538462 0.461538\n", "Engineering 0.617978 0.382022\n", "Health / Medicine 0.562500 0.437500\n", "Law 1.000000 0.000000\n", "Other 0.371795 0.628205\n", "Science 0.416667 0.583333\n", "Social Sciences / Arts 0.500000 0.500000" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Visa ResultAcceptedRejected
Program
Business / Management / MBA0.3040000.696000
Computer Science / IT0.4133330.586667
Economics / Finance / Accounting0.5384620.461538
Engineering0.6179780.382022
Health / Medicine0.5625000.437500
Law1.0000000.000000
Other0.3717950.628205
Science0.4166670.583333
Social Sciences / Arts0.5000000.500000
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"pd\",\n \"rows\": 9,\n \"fields\": [\n {\n \"column\": \"Program\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9,\n \"samples\": [\n \"Science\",\n \"Computer Science / IT\",\n \"Law\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Accepted\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.2040222545293589,\n \"min\": 0.304,\n \"max\": 1.0,\n \"num_unique_values\": 9,\n \"samples\": [\n 0.4166666666666667,\n 0.41333333333333333,\n 1.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Rejected\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.20402225452935888,\n \"min\": 0.0,\n \"max\": 0.696,\n \"num_unique_values\": 9,\n \"samples\": [\n 0.5833333333333334,\n 0.5866666666666667,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 302 } ] }, { "cell_type": "code", "source": [ "sns.countplot(data=visa_df, x=\"Visa Result\")\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 449 }, "id": "od_VEKGZg2ui", "outputId": "21a6a921-f663-488f-8c83-005a332a1a02" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGwCAYAAABPSaTdAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMTpJREFUeJzt3Xt0VOWh///PJJAhF5IYSDKJTCgXNVAJIFAYtYiKhIt4i9YLFag5UDFoJRVoPMpVTdVSUIugFogcSfUoogdsUUCIqAFqNIKAEZAWLAlYNRkuEkjy/P7w6/51JIiEhBke36+1Zi1mP3vveXbWmvh27z0TlzHGCAAAwFJhwZ4AAABAUyJ2AACA1YgdAABgNWIHAABYjdgBAABWI3YAAIDViB0AAGC1ZsGeQCioq6vTnj171LJlS7lcrmBPBwAA/ADGGO3fv1+pqakKCzv++RtiR9KePXvk9XqDPQ0AANAAu3fvVps2bY47TuxIatmypaRvflixsbFBng0AAPgh/H6/vF6v89/x4yF2JOfSVWxsLLEDAMAZ5kS3oHCDMgAAsBqxAwAArEbsAAAAqxE7AADAasQOAACwGrEDAACsRuwAAACrETsAAMBqxA4AALAasQMAAKxG7AAAAKsROwAAwGrEDgAAsBqxAwAArEbsAAAAqzUL9gQA4EzXY/zCYE8BCEkljw4P9hQkcWYHAABYjtgBAABWI3YAAIDViB0AAGA1YgcAAFiN2AEAAFYjdgAAgNWIHQAAYDViBwAAWI3YAQAAViN2AACA1YgdAABgNWIHAABYjdgBAABWI3YAAIDViB0AAGA1YgcAAFiN2AEAAFYjdgAAgNWCGjtz5sxRRkaGYmNjFRsbK5/Pp7/97W/OeL9+/eRyuQIet99+e8A+du3apSFDhigqKkpJSUkaP368ampqTvehAACAENUsmC/epk0b/f73v9c555wjY4yeffZZXX311frggw/005/+VJI0atQoTZs2zdkmKirK+Xdtba2GDBkij8ejd999V+Xl5Ro+fLiaN2+uhx566LQfDwAACD1BjZ2hQ4cGPH/wwQc1Z84crVu3zomdqKgoeTyeerd/4403tGXLFq1cuVLJycnq1q2bpk+frokTJ2rKlCmKiIho8mMAAAChLWTu2amtrdXzzz+vgwcPyufzOcsXLVqk1q1b6/zzz1deXp4OHTrkjBUXF6tLly5KTk52lmVmZsrv92vz5s3Hfa3q6mr5/f6ABwAAsFNQz+xI0qZNm+Tz+XT48GHFxMRoyZIl6ty5syTplltuUdu2bZWamqqNGzdq4sSJKisr08svvyxJqqioCAgdSc7zioqK475mfn6+pk6d2kRHBAAAQknQY+e8885TaWmpqqqq9NJLL2nEiBEqKipS586dNXr0aGe9Ll26KCUlRZdffrl27NihDh06NPg18/LylJub6zz3+/3yer2ndBwAACA0Bf0yVkREhDp27KgePXooPz9fXbt21WOPPVbvur1795Ykbd++XZLk8Xi0d+/egHW+fX68+3wkye12O58A+/YBAADsFPTY+a66ujpVV1fXO1ZaWipJSklJkST5fD5t2rRJ+/btc9ZZsWKFYmNjnUthAADgxy2ol7Hy8vI0aNAgpaWlaf/+/SosLNSaNWv0+uuva8eOHSosLNTgwYPVqlUrbdy4UePGjVPfvn2VkZEhSRowYIA6d+6sW2+9VY888ogqKip03333KScnR263O5iHBgAAQkRQY2ffvn0aPny4ysvLFRcXp4yMDL3++uu64oortHv3bq1cuVKzZs3SwYMH5fV6lZWVpfvuu8/ZPjw8XMuWLdOYMWPk8/kUHR2tESNGBHwvDwAA+HFzGWNMsCcRbH6/X3FxcaqqquL+HQAnrcf4hcGeAhCSSh4d3qT7/6H//Q65e3YAAAAaE7EDAACsRuwAAACrETsAAMBqxA4AALAasQMAAKxG7AAAAKsROwAAwGrEDgAAsBqxAwAArEbsAAAAqxE7AADAasQOAACwGrEDAACsRuwAAACrETsAAMBqxA4AALAasQMAAKxG7AAAAKsROwAAwGrEDgAAsBqxAwAArEbsAAAAqxE7AADAasQOAACwGrEDAACsRuwAAACrETsAAMBqxA4AALAasQMAAKxG7AAAAKsROwAAwGrEDgAAsBqxAwAArEbsAAAAqxE7AADAakGNnTlz5igjI0OxsbGKjY2Vz+fT3/72N2f88OHDysnJUatWrRQTE6OsrCzt3bs3YB+7du3SkCFDFBUVpaSkJI0fP141NTWn+1AAAECICmrstGnTRr///e9VUlKi9957T5dddpmuvvpqbd68WZI0btw4LV26VC+++KKKioq0Z88eXXfddc72tbW1GjJkiI4cOaJ3331Xzz77rAoK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\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "# **Feature and Target Selection**" ], "metadata": { "id": "_VFQXvDzV6L8" } }, { "cell_type": "code", "source": [ "X = visa_df.drop('Visa Result', axis=1)\n", "y = visa_df['Visa Result']\n", "print(X.shape)\n", "print(y.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "DMESjf27Vu6O", "outputId": "b441ace9-e5c0-4f2e-a92d-fe5011c9a8bf" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(650, 9)\n", "(650,)\n" ] } ] }, { "cell_type": "markdown", "source": [ "# **Train Test Split**" ], "metadata": { "id": "cn4zddmYWTol" } }, { "cell_type": "code", "source": [ "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2, random_state=42, stratify=y)\n", "print(X_train.shape)\n", "print(X_test.shape)\n", "print(y_train.shape)\n", "print(y_test.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "NBpXUld9WIr2", "outputId": "49962b75-eeec-43bd-85a1-a70f9d24c016" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(520, 9)\n", "(130, 9)\n", "(520,)\n", "(130,)\n" ] } ] }, { "cell_type": "code", "source": [ "X.info()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "65Acjq91XiIb", "outputId": "a6a25fd9-0130-44df-a8f7-1a8201c2baff" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 650 entries, 0 to 649\n", "Data columns (total 9 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Interview Location 650 non-null object\n", " 1 Program 650 non-null object\n", " 2 Degree Level 650 non-null object\n", " 3 University 650 non-null object\n", " 4 Universities Applied 650 non-null int64 \n", " 5 Sponsor 650 non-null object\n", " 6 Scholarship 650 non-null object\n", " 7 Relatives in US 650 non-null object\n", " 8 Visa Attempts 650 non-null object\n", "dtypes: int64(1), object(8)\n", "memory usage: 45.8+ KB\n" ] } ] }, { "cell_type": "code", "source": [ "from sklearn.compose import ColumnTransformer\n", "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", "# Preprocessor\n", "preprocessor = ColumnTransformer(\n", " transformers=[\n", " ('num', StandardScaler(), [4]), # optional for RF\n", " ('cat', OneHotEncoder(handle_unknown='ignore', sparse_output=False), [0,1,2,3,5,6,7,8])\n", " ]\n", ")" ], "metadata": { "id": "kdrqB6SmXOBb" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "EDA" ], "metadata": { "id": "vrbkJ_jmIkOH" } }, { "cell_type": "markdown", "source": [ "# **PIPELINE**" ], "metadata": { "id": "pVB8UySIXLwN" } }, { "cell_type": "code", "source": [ "# Preprocessing and pipeline\n", "from sklearn.pipeline import Pipeline\n", "\n", "# Metrics\n", "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n", "\n", "# Classifiers\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier\n", "from sklearn.svm import SVC\n", "import xgboost as xgb" ], "metadata": { "id": "cKoJtdRsWhE2" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "KNN pipeline" ], "metadata": { "id": "xs0O99aJYqW8" } }, { "cell_type": "code", "source": [ "# Pipeline with preprocessing + KNN\n", "pipe_knn = Pipeline(steps=[\n", " ('preprocessor', preprocessor),\n", " ('model', KNeighborsClassifier())\n", "])\n", "\n", "# Train\n", "pipe_knn.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe_knn.predict(X_test)\n", "\n", "# Evaluate\n", "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n", "\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== K-Nearest Neighbors ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results_visa = {}\n", "results_visa[\"KNN\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "dPKPNSkwYpo9", "outputId": "fb3beeb1-1f40-420b-b1d0-7a8b5f3d73c8" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== K-Nearest Neighbors ===\n", "Accuracy: 0.6076923076923076\n", "Confusion Matrix:\n", " [[24 31]\n", " [20 55]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " Accepted 0.55 0.44 0.48 55\n", " Rejected 0.64 0.73 0.68 75\n", "\n", " accuracy 0.61 130\n", " macro avg 0.59 0.58 0.58 130\n", "weighted avg 0.60 0.61 0.60 130\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "Naive Bayes Pipeline" ], "metadata": { "id": "IU2V7BaFY4LF" } }, { "cell_type": "code", "source": [ "# Use the same preprocessor (numeric scaled + categorical OneHotEncoded)\n", "pipe_nb = Pipeline(steps=[\n", " ('preprocessor', preprocessor), # numeric + categorical\n", " ('model', GaussianNB())\n", "])\n", "\n", "# Train\n", "pipe_nb.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe_nb.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== Naive Bayes ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results_visa[\"Naive Bayes\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "F5rveI99Yydu", "outputId": "3d00bd10-d41c-4539-c443-13fc5e30996a" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Naive Bayes ===\n", "Accuracy: 0.5153846153846153\n", "Confusion Matrix:\n", " [[42 13]\n", " [50 25]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " Accepted 0.46 0.76 0.57 55\n", " Rejected 0.66 0.33 0.44 75\n", "\n", " accuracy 0.52 130\n", " macro avg 0.56 0.55 0.51 130\n", "weighted avg 0.57 0.52 0.50 130\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "Decision Tree Pipeline" ], "metadata": { "id": "ebJWoWsWZyLt" } }, { "cell_type": "code", "source": [ "# Pipeline with preprocessing + Decision Tree\n", "pipe_dt = Pipeline(steps=[\n", " ('preprocessor', preprocessor), # numeric + categorical\n", " ('model', DecisionTreeClassifier(random_state=42))\n", "])\n", "\n", "# Train\n", "pipe_dt.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe_dt.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== Decision Tree ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results_visa[\"Decision Tree\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "EsIeNGuLY8Qa", "outputId": "a5e963fa-b458-402d-c9ec-31ada3f00cb7" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Decision Tree ===\n", "Accuracy: 0.6307692307692307\n", "Confusion Matrix:\n", " [[27 28]\n", " [20 55]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " Accepted 0.57 0.49 0.53 55\n", " Rejected 0.66 0.73 0.70 75\n", "\n", " accuracy 0.63 130\n", " macro avg 0.62 0.61 0.61 130\n", "weighted avg 0.63 0.63 0.63 130\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "Random Forest Pipeline" ], "metadata": { "id": "ZObSchIEZ3Ds" } }, { "cell_type": "code", "source": [ "# Pipeline with preprocessing + Random Forest\n", "pipe_rf = Pipeline(steps=[\n", " ('preprocessor', preprocessor), # numeric + categorical\n", " ('model', RandomForestClassifier(random_state=42))\n", "])\n", "\n", "# Train\n", "pipe_rf.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe_rf.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== Random Forest ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results_visa[\"Random Forest\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GoBs_6ZKZs1p", "outputId": "376b6e2a-90a5-467d-bfc3-a2157f86ca29" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Random Forest ===\n", "Accuracy: 0.676923076923077\n", "Confusion Matrix:\n", " [[28 27]\n", " [15 60]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " Accepted 0.65 0.51 0.57 55\n", " Rejected 0.69 0.80 0.74 75\n", "\n", " accuracy 0.68 130\n", " macro avg 0.67 0.65 0.66 130\n", "weighted avg 0.67 0.68 0.67 130\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "AdaBoost Pipeline" ], "metadata": { "id": "1dQ-n-KuaB9m" } }, { "cell_type": "code", "source": [ "# Pipeline with preprocessing + AdaBoost\n", "pipe_ada = Pipeline(steps=[\n", " ('preprocessor', preprocessor), # numeric + categorical\n", " ('model', AdaBoostClassifier(n_estimators=100, random_state=42))\n", "])\n", "\n", "# Train\n", "pipe_ada.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe_ada.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== AdaBoost ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results_visa[\"AdaBoost\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6-76ws1YZ6T5", "outputId": "bea0fe9c-0997-49b4-dcc9-033bb1784667" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== AdaBoost ===\n", "Accuracy: 0.7230769230769231\n", "Confusion Matrix:\n", " [[22 33]\n", " [ 3 72]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " Accepted 0.88 0.40 0.55 55\n", " Rejected 0.69 0.96 0.80 75\n", "\n", " accuracy 0.72 130\n", " macro avg 0.78 0.68 0.68 130\n", "weighted avg 0.77 0.72 0.69 130\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "Gradient Boosting Pipeline" ], "metadata": { "id": "RA-wJjLZaNLr" } }, { "cell_type": "code", "source": [ "from sklearn.ensemble import GradientBoostingClassifier\n", "\n", "# Pipeline with preprocessing + Gradient Boosting\n", "pipe_gb = Pipeline(steps=[\n", " ('preprocessor', preprocessor), # numeric + categorical\n", " ('model', GradientBoostingClassifier(n_estimators=100, random_state=42))\n", "])\n", "\n", "# Train\n", "pipe_gb.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = pipe_gb.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test, y_pred)\n", "print(\"=== Gradient Boosting ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", "\n", "# Store result\n", "results_visa[\"Gradient Boosting\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "YYLiFtyzaF_u", "outputId": "7655b0cb-d9d5-4841-cc58-0395562505fe" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Gradient Boosting ===\n", "Accuracy: 0.7384615384615385\n", "Confusion Matrix:\n", " [[27 28]\n", " [ 6 69]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " Accepted 0.82 0.49 0.61 55\n", " Rejected 0.71 0.92 0.80 75\n", "\n", " accuracy 0.74 130\n", " macro avg 0.76 0.71 0.71 130\n", "weighted avg 0.76 0.74 0.72 130\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "XGBoost Pipeline" ], "metadata": { "id": "yIHyGtuWaZ-e" } }, { "cell_type": "code", "source": [ "from sklearn.preprocessing import LabelEncoder\n", "\n", "# Create LabelEncoder\n", "le = LabelEncoder()\n", "\n", "# Fit on training target and transform both train and test\n", "y_train_enc = le.fit_transform(y_train) # Accepted → 0, Rejected → 1 (or vice versa)\n", "y_test_enc = le.transform(y_test)" ], "metadata": { "id": "DI3sHYoIybdY" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Pipeline with preprocessing + XGBoost\n", "pipe_xgb = Pipeline(steps=[\n", " ('preprocessor', preprocessor), # numeric + categorical\n", " ('model', xgb.XGBClassifier(n_estimators=100, use_label_encoder=False, eval_metric='logloss', random_state=42))\n", "])\n", "\n", "# Train\n", "pipe_xgb.fit(X_train, y_train_enc)\n", "\n", "# Predict\n", "y_pred = pipe_xgb.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test_enc, y_pred)\n", "print(\"=== Visa XGBoost ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test_enc, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test_enc, y_pred))\n", "\n", "# Store result\n", "results_visa[\"XGBoost\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "xLh5KTDzaQPy", "outputId": "6d2611ab-c27b-4089-eb21-9b58789a0ab3" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Visa XGBoost ===\n", "Accuracy: 0.6538461538461539\n", "Confusion Matrix:\n", " [[27 28]\n", " [17 58]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.61 0.49 0.55 55\n", " 1 0.67 0.77 0.72 75\n", "\n", " accuracy 0.65 130\n", " macro avg 0.64 0.63 0.63 130\n", "weighted avg 0.65 0.65 0.65 130\n", "\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.12/dist-packages/xgboost/training.py:199: UserWarning: [15:45:27] WARNING: /workspace/src/learner.cc:790: \n", "Parameters: { \"use_label_encoder\" } are not used.\n", "\n", " bst.update(dtrain, iteration=i, fobj=obj)\n" ] } ] }, { "cell_type": "markdown", "source": [ "Logistic Regression Pipeline" ], "metadata": { "id": "A1-h7eMrbMrq" } }, { "cell_type": "code", "source": [ "# Pipeline with preprocessing + Logistic Regression\n", "pipe_lr = Pipeline(steps=[\n", " ('preprocessor', preprocessor), # numeric + categorical\n", " ('model', LogisticRegression(max_iter=1000, random_state=42))\n", "])\n", "\n", "# Train\n", "pipe_lr.fit(X_train, y_train_enc) # use encoded numeric target\n", "\n", "# Predict\n", "y_pred = pipe_lr.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test_enc, y_pred)\n", "print(\"=== Visa Logistic Regression ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test_enc, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test_enc, y_pred))\n", "\n", "# Store result\n", "results_visa[\"Logistic Regression\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "320yP_SjaduK", "outputId": "e866e088-3d33-49e8-81b9-9b88825320fd" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Visa Logistic Regression ===\n", "Accuracy: 0.676923076923077\n", "Confusion Matrix:\n", " [[24 31]\n", " [11 64]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.69 0.44 0.53 55\n", " 1 0.67 0.85 0.75 75\n", "\n", " accuracy 0.68 130\n", " macro avg 0.68 0.64 0.64 130\n", "weighted avg 0.68 0.68 0.66 130\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "SVC Pipeline" ], "metadata": { "id": "dsWTQOPjbagC" } }, { "cell_type": "code", "source": [ "# Pipeline with preprocessing + SVC\n", "pipe_svc = Pipeline(steps=[\n", " ('preprocessor', preprocessor), # numeric + categorical\n", " ('model', SVC(kernel='rbf', random_state=42))\n", "])\n", "\n", "# Train\n", "pipe_svc.fit(X_train, y_train_enc) # use encoded numeric target\n", "\n", "# Predict\n", "y_pred = pipe_svc.predict(X_test)\n", "\n", "# Evaluate\n", "acc = accuracy_score(y_test_enc, y_pred)\n", "print(\"=== Visa SVC ===\")\n", "print(\"Accuracy:\", acc)\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test_enc, y_pred))\n", "print(\"Classification Report:\\n\", classification_report(y_test_enc, y_pred))\n", "\n", "# Store result\n", "results_visa[\"SVC\"] = acc\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "v03oeJGSbQtX", "outputId": "19f53b05-9630-4829-e1b6-2c7dace6e76c" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "=== Visa SVC ===\n", "Accuracy: 0.7076923076923077\n", "Confusion Matrix:\n", " [[23 32]\n", " [ 6 69]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.79 0.42 0.55 55\n", " 1 0.68 0.92 0.78 75\n", "\n", " accuracy 0.71 130\n", " macro avg 0.74 0.67 0.67 130\n", "weighted avg 0.73 0.71 0.68 130\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "Tuning" ], "metadata": { "id": "gCZoBFyZ3JkM" } }, { "cell_type": "code", "source": [ "from sklearn.preprocessing import LabelEncoder\n", "\n", "# Create LabelEncoder\n", "le = LabelEncoder()\n", "\n", "# Fit on training target and transform both train and test\n", "y_train_enc = le.fit_transform(y_train) # Accepted → 0, Rejected → 1 (or vice versa)\n", "y_test_enc = le.transform(y_test)" ], "metadata": { "id": "A6K-R7sCalED" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "from sklearn.model_selection import RandomizedSearchCV\n", "from scipy.stats import uniform\n", "from sklearn.svm import SVC\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n", "\n", "\n", "param_dist_svc_finetune = {\n", " 'model__C': uniform(8, 10), # around best C=12, slightly lower/higher\n", " 'model__gamma': [0.05, 0.08, 0.1, 0.12, 0.15], # around gamma=0.1\n", " 'model__kernel': ['rbf', 'poly'], # keep best kernels\n", " 'model__degree': [2, 3, 4], # only for poly\n", " 'model__class_weight': [None, 'balanced']\n", "}\n", "\n", "# RandomizedSearchCV\n", "random_search_svc_finetune = RandomizedSearchCV(\n", " estimator=Pipeline([\n", " ('preprocessor', preprocessor),\n", " ('model', SVC(probability=True, random_state=42))\n", " ]),\n", " param_distributions=param_dist_svc_finetune,\n", " n_iter=40,\n", " scoring='accuracy',\n", " cv=5,\n", " verbose=2,\n", " n_jobs=-1,\n", " random_state=42\n", ")\n", "\n", "\n", "random_search_svc_finetune.fit(X_train, y_train_enc)\n", "\n", "best_svc_finetune = random_search_svc_finetune.best_estimator_\n", "y_pred_svc_finetune = best_svc_finetune.predict(X_test)\n", "\n", "print(\"=== Final Fine-Tuned SVC ===\")\n", "print(\"Best Parameters:\", random_search_svc_finetune.best_params_)\n", "print(\"Best CV Accuracy:\", random_search_svc_finetune.best_score_)\n", "print(\"Test Accuracy:\", accuracy_score(y_test_enc, y_pred_svc_finetune))\n", "print(confusion_matrix(y_test_enc, y_pred_svc_finetune))\n", "print(classification_report(y_test_enc, y_pred_svc_finetune))\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "xj8rN746XhJo", "outputId": "c1535bec-df82-41ba-ec63-67319fd256e1" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Fitting 5 folds for each of 40 candidates, totalling 200 fits\n", "=== Final Fine-Tuned SVC ===\n", "Best Parameters: {'model__C': np.float64(9.84854455525527), 'model__class_weight': None, 'model__degree': 3, 'model__gamma': 0.08, 'model__kernel': 'poly'}\n", "Best CV Accuracy: 0.6788461538461539\n", "Test Accuracy: 0.6923076923076923\n", "[[28 27]\n", " [13 62]]\n", " precision recall f1-score support\n", "\n", " 0 0.68 0.51 0.58 55\n", " 1 0.70 0.83 0.76 75\n", "\n", " accuracy 0.69 130\n", " macro avg 0.69 0.67 0.67 130\n", "weighted avg 0.69 0.69 0.68 130\n", "\n" ] } ] }, { "cell_type": "code", "source": [ "from sklearn.ensemble import AdaBoostClassifier\n", "from sklearn.model_selection import RandomizedSearchCV\n", "from sklearn.metrics import classification_report, confusion_matrix\n", "from scipy.stats import uniform, randint\n", "\n", "# Parameter distributions for AdaBoost\n", "param_dist_ada = {\n", " 'model__n_estimators': randint(50, 400),\n", " 'model__learning_rate': uniform(0.01, 1.0)\n", "}\n", "\n", "# RandomizedSearchCV setup for AdaBoost\n", "random_search_ada = RandomizedSearchCV(\n", " estimator=pipe_ada, # your pipeline with AdaBoostClassifier\n", " param_distributions=param_dist_ada,\n", " n_iter=40, # number of random parameter combinations\n", " scoring='accuracy',\n", " cv=5,\n", " verbose=2,\n", " n_jobs=-1,\n", " random_state=42\n", ")\n", "\n", "# Fit\n", "random_search_ada.fit(X_train, y_train)\n", "\n", "# Results\n", "print(\"=== tuned AdaBoost ===\")\n", "print(\"Best Parameters:\", random_search_ada.best_params_)\n", "\n", "# Evaluate on test data\n", "best_ada_random = random_search_ada.best_estimator_\n", "test_acc_ada = best_ada_random.score(X_test, y_test)\n", "print(\"Test Accuracy:\", test_acc_ada)\n", "\n", "# Predictions\n", "y_pred_ada = best_ada_random.predict(X_test)\n", "\n", "# Evaluation\n", "print(\"=== Randomized AdaBoost Evaluation ===\")\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred_ada))\n", "print(\"\\nClassification Report:\\n\", classification_report(y_test, y_pred_ada))\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "fuT0JCbxwA5V", "outputId": "05432ad8-5dd2-4b77-bdd0-bb4e8b5057e4" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Fitting 5 folds for each of 40 candidates, totalling 200 fits\n", "=== tuned AdaBoost ===\n", "Best Parameters: {'model__learning_rate': np.float64(0.9799098521619943), 'model__n_estimators': 343}\n", "Test Accuracy: 0.7307692307692307\n", "=== Randomized AdaBoost Evaluation ===\n", "Confusion Matrix:\n", " [[26 29]\n", " [ 6 69]]\n", "\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " Accepted 0.81 0.47 0.60 55\n", " Rejected 0.70 0.92 0.80 75\n", "\n", " accuracy 0.73 130\n", " macro avg 0.76 0.70 0.70 130\n", "weighted avg 0.75 0.73 0.71 130\n", "\n" ] } ] }, { "cell_type": "code", "source": [ "from sklearn.model_selection import RandomizedSearchCV\n", "from sklearn.metrics import classification_report, confusion_matrix, accuracy_score\n", "from scipy.stats import uniform, randint\n", "\n", "# Parameter distributions\n", "param_dist_gb = {\n", " 'model__n_estimators': randint(100, 400),\n", " 'model__learning_rate': uniform(0.01, 0.1),\n", " 'model__max_depth': randint(2, 5),\n", " 'model__min_samples_split': randint(2, 10),\n", " 'model__min_samples_leaf': randint(1, 5),\n", " 'model__subsample': uniform(0.8, 0.2)\n", "}\n", "\n", "# RandomizedSearchCV setup\n", "random_search_gb = RandomizedSearchCV(\n", " estimator=pipe_gb,\n", " param_distributions=param_dist_gb,\n", " n_iter=40, # number of random combinations to try\n", " scoring='accuracy',\n", " cv=5,\n", " verbose=2,\n", " n_jobs=-1,\n", " random_state=42\n", ")\n", "\n", "# Fit\n", "random_search_gb.fit(X_train, y_train)\n", "\n", "# Results\n", "print(\"=== tuned Gradient Boosting ===\")\n", "print(\"Best Parameters:\", random_search_gb.best_params_)\n", "\n", "# Evaluate on test data\n", "best_gb_random = random_search_gb.best_estimator_\n", "test_acc = best_gb_random.score(X_test, y_test)\n", "print(\"Test Accuracy:\", test_acc)\n", "\n", "# Predictions\n", "y_pred_gb = best_gb_random.predict(X_test)\n", "\n", "# Evaluation\n", "print(\"=== Randomized Gradient Boosting Evaluation ===\")\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred_gb))\n", "print(\"\\nClassification Report:\\n\", classification_report(y_test, y_pred_gb))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "XXhebCJH9vuj", "outputId": "b2b24f50-7ef2-478b-f072-c07f2193a65f" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Fitting 5 folds for each of 40 candidates, totalling 200 fits\n", "=== tuned Gradient Boosting ===\n", "Best Parameters: {'model__learning_rate': np.float64(0.0813244787222995), 'model__max_depth': 2, 'model__min_samples_leaf': 1, 'model__min_samples_split': 3, 'model__n_estimators': 354, 'model__subsample': np.float64(0.8512136645522649)}\n", "Test Accuracy: 0.7692307692307693\n", "=== Randomized Gradient Boosting Evaluation ===\n", "Confusion Matrix:\n", " [[32 23]\n", " [ 7 68]]\n", "\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " Accepted 0.82 0.58 0.68 55\n", " Rejected 0.75 0.91 0.82 75\n", "\n", " accuracy 0.77 130\n", " macro avg 0.78 0.74 0.75 130\n", "weighted avg 0.78 0.77 0.76 130\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "Pickle file" ], "metadata": { "id": "yCxrbVtgT6J3" } }, { "cell_type": "code", "source": [ "with open(\"visa_model_gb.pkl\", \"wb\") as file:\n", " pickle.dump(pipe_gb, file)\n", "\n", "print(\"Gradient Boosting model saved successfully!\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "JDG1ZrSS5hyK", "outputId": "4f1fb6e8-ba9c-4ffa-aae8-7da33950db7f" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Gradient Boosting model saved successfully!\n" ] } ] }, { "cell_type": "code", "source": [ "with open(\"visa_model_tuned_gb.pkl\", \"wb\") as file:\n", " pickle.dump(best_gb_random, file)\n", "\n", "print(\"Tuned Gradient Boosting model saved successfully!\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "0P1eEjVDpKHj", "outputId": "ec08c3c4-4bdf-4710-8a53-5814bc175896" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Tuned Gradient Boosting model saved successfully!\n" ] } ] }, { "cell_type": "code", "source": [], "metadata": { "id": "27ZoOfc6mPx3" }, "execution_count": null, "outputs": [] } ] }