{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "# ***Part 1: Building a Classifier with Random Forest. Importing the necessary libraries in order to proceed with the machine learning.***"
      ],
      "metadata": {
        "id": "URlMkmBxrMwh"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Import necessary libraries\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "\n",
        "# Sklearn libraries for machine learning\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.decomposition import PCA\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.naive_bayes import GaussianNB\n",
        "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report\n",
        "from sklearn.decomposition import PCA\n",
        "from sklearn.preprocessing import StandardScaler\n",
        "\n",
        "# Ignore warnings for clean output\n",
        "import warnings\n",
        "warnings.filterwarnings(\"ignore\")\n"
      ],
      "metadata": {
        "id": "U-MKUyK9kONt"
      },
      "execution_count": 51,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***1. Load and Preporcess the Diabetes Dataset - Step 1. Load the Dataset***"
      ],
      "metadata": {
        "id": "p09ZHEnhryOL"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "#Load the diabetes dataset\n",
        "file_path = \"/content/diabetes.csv\"\n",
        "df=pd.read_csv(file_path)\n",
        "\n",
        "#Display the first few rows.\n",
        "df.head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "itKfO3sjlN1y",
        "outputId": "359c5909-6e83-4668-dd42-332a0b41207f"
      },
      "execution_count": 52,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   PatientId  Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin  \\\n",
              "0          1            6      148             72             35        0   \n",
              "1          2            1       85             66             29        0   \n",
              "2          3            8      183             64              0        0   \n",
              "3          4            1       89             66             23       94   \n",
              "4          5            0      137             40             35      168   \n",
              "\n",
              "    BMI  DiabetesPedigreeFunction  Age  Outcome  \n",
              "0  33.6                     0.627   50        1  \n",
              "1  26.6                     0.351   31        0  \n",
              "2  23.3                     0.672   32        1  \n",
              "3  28.1                     0.167   21        0  \n",
              "4  43.1                     2.288   33        1  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-33aece6b-1c72-4a06-818b-3a1cf1c1b131\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>PatientId</th>\n",
              "      <th>Pregnancies</th>\n",
              "      <th>Glucose</th>\n",
              "      <th>BloodPressure</th>\n",
              "      <th>SkinThickness</th>\n",
              "      <th>Insulin</th>\n",
              "      <th>BMI</th>\n",
              "      <th>DiabetesPedigreeFunction</th>\n",
              "      <th>Age</th>\n",
              "      <th>Outcome</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1</td>\n",
              "      <td>6</td>\n",
              "      <td>148</td>\n",
              "      <td>72</td>\n",
              "      <td>35</td>\n",
              "      <td>0</td>\n",
              "      <td>33.6</td>\n",
              "      <td>0.627</td>\n",
              "      <td>50</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>2</td>\n",
              "      <td>1</td>\n",
              "      <td>85</td>\n",
              "      <td>66</td>\n",
              "      <td>29</td>\n",
              "      <td>0</td>\n",
              "      <td>26.6</td>\n",
              "      <td>0.351</td>\n",
              "      <td>31</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>3</td>\n",
              "      <td>8</td>\n",
              "      <td>183</td>\n",
              "      <td>64</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>23.3</td>\n",
              "      <td>0.672</td>\n",
              "      <td>32</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4</td>\n",
              "      <td>1</td>\n",
              "      <td>89</td>\n",
              "      <td>66</td>\n",
              "      <td>23</td>\n",
              "      <td>94</td>\n",
              "      <td>28.1</td>\n",
              "      <td>0.167</td>\n",
              "      <td>21</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5</td>\n",
              "      <td>0</td>\n",
              "      <td>137</td>\n",
              "      <td>40</td>\n",
              "      <td>35</td>\n",
              "      <td>168</td>\n",
              "      <td>43.1</td>\n",
              "      <td>2.288</td>\n",
              "      <td>33</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-33aece6b-1c72-4a06-818b-3a1cf1c1b131')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-33aece6b-1c72-4a06-818b-3a1cf1c1b131 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-33aece6b-1c72-4a06-818b-3a1cf1c1b131');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-17cc265a-dfe6-4c78-94e7-ca0ad5ceab99\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-17cc265a-dfe6-4c78-94e7-ca0ad5ceab99')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-17cc265a-dfe6-4c78-94e7-ca0ad5ceab99 button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df",
              "summary": "{\n  \"name\": \"df\",\n  \"rows\": 768,\n  \"fields\": [\n    {\n      \"column\": \"PatientId\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 221,\n        \"min\": 1,\n        \"max\": 768,\n        \"num_unique_values\": 768,\n        \"samples\": [\n          669,\n          325,\n          625\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Pregnancies\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 3,\n        \"min\": 0,\n        \"max\": 17,\n        \"num_unique_values\": 17,\n        \"samples\": [\n          6,\n          1,\n          3\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Glucose\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 31,\n        \"min\": 0,\n        \"max\": 199,\n        \"num_unique_values\": 136,\n        \"samples\": [\n          151,\n          101,\n          112\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"BloodPressure\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 19,\n        \"min\": 0,\n        \"max\": 122,\n        \"num_unique_values\": 47,\n        \"samples\": [\n          86,\n          46,\n          85\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"SkinThickness\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 15,\n        \"min\": 0,\n        \"max\": 99,\n        \"num_unique_values\": 51,\n        \"samples\": [\n          7,\n          12,\n          48\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Insulin\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 115,\n        \"min\": 0,\n        \"max\": 846,\n        \"num_unique_values\": 186,\n        \"samples\": [\n          52,\n          41,\n          183\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"BMI\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 7.8841603203754405,\n        \"min\": 0.0,\n        \"max\": 67.1,\n        \"num_unique_values\": 248,\n        \"samples\": [\n          19.9,\n          31.0,\n          38.1\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"DiabetesPedigreeFunction\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.33132859501277484,\n        \"min\": 0.078,\n        \"max\": 2.42,\n        \"num_unique_values\": 517,\n        \"samples\": [\n          1.731,\n          0.426,\n          0.138\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Age\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 11,\n        \"min\": 21,\n        \"max\": 81,\n        \"num_unique_values\": 52,\n        \"samples\": [\n          60,\n          47,\n          72\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Outcome\",\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}"
            }
          },
          "metadata": {},
          "execution_count": 52
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 2. Check for Missing Values***"
      ],
      "metadata": {
        "id": "V9hot1PHq1hn"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Check for missing values\n",
        "print(\"\\nMissing Values in Each Column:\\n\", df.isnull().sum())\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "phD2sd2klrw0",
        "outputId": "3014e023-14e6-4a1d-c000-7c8b506428a3"
      },
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Missing Values in Each Column:\n",
            " PatientId                   0\n",
            "Pregnancies                 0\n",
            "Glucose                     0\n",
            "BloodPressure               0\n",
            "SkinThickness               0\n",
            "Insulin                     0\n",
            "BMI                         0\n",
            "DiabetesPedigreeFunction    0\n",
            "Age                         0\n",
            "Outcome                     0\n",
            "dtype: int64\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***2.1. Handling Missing Values***"
      ],
      "metadata": {
        "id": "Fs5EA1Btq6Vp"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Replace missing values with column mean (if any)\n",
        "df.fillna(df.mean(), inplace=True)\n"
      ],
      "metadata": {
        "id": "VC1ozmVLlsyE"
      },
      "execution_count": 6,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 3. Data Overview and Preprocessing***"
      ],
      "metadata": {
        "id": "LmGv7JkKqtu3"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Check dataset shape\n",
        "print(f\"Dataset contains {df.shape[0]} rows and {df.shape[1]} columns.\")\n",
        "\n",
        "# Check column data types\n",
        "print(\"\\nData Types:\\n\", df.dtypes)\n",
        "\n",
        "# Summary statistics of numerical features\n",
        "print(\"\\nSummary Statistics:\\n\", df.describe())\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "bBm_YYFEluvM",
        "outputId": "7daa9a99-0727-44e3-fec6-1e693bf2bc94"
      },
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Dataset contains 768 rows and 10 columns.\n",
            "\n",
            "Data Types:\n",
            " PatientId                     int64\n",
            "Pregnancies                   int64\n",
            "Glucose                       int64\n",
            "BloodPressure                 int64\n",
            "SkinThickness                 int64\n",
            "Insulin                       int64\n",
            "BMI                         float64\n",
            "DiabetesPedigreeFunction    float64\n",
            "Age                           int64\n",
            "Outcome                       int64\n",
            "dtype: object\n",
            "\n",
            "Summary Statistics:\n",
            "         PatientId  Pregnancies     Glucose  BloodPressure  SkinThickness  \\\n",
            "count  768.000000   768.000000  768.000000     768.000000     768.000000   \n",
            "mean   384.500000     3.845052  120.894531      69.105469      20.536458   \n",
            "std    221.846794     3.369578   31.972618      19.355807      15.952218   \n",
            "min      1.000000     0.000000    0.000000       0.000000       0.000000   \n",
            "25%    192.750000     1.000000   99.000000      62.000000       0.000000   \n",
            "50%    384.500000     3.000000  117.000000      72.000000      23.000000   \n",
            "75%    576.250000     6.000000  140.250000      80.000000      32.000000   \n",
            "max    768.000000    17.000000  199.000000     122.000000      99.000000   \n",
            "\n",
            "          Insulin         BMI  DiabetesPedigreeFunction         Age  \\\n",
            "count  768.000000  768.000000                768.000000  768.000000   \n",
            "mean    79.799479   31.992578                  0.471876   33.240885   \n",
            "std    115.244002    7.884160                  0.331329   11.760232   \n",
            "min      0.000000    0.000000                  0.078000   21.000000   \n",
            "25%      0.000000   27.300000                  0.243750   24.000000   \n",
            "50%     30.500000   32.000000                  0.372500   29.000000   \n",
            "75%    127.250000   36.600000                  0.626250   41.000000   \n",
            "max    846.000000   67.100000                  2.420000   81.000000   \n",
            "\n",
            "          Outcome  \n",
            "count  768.000000  \n",
            "mean     0.348958  \n",
            "std      0.476951  \n",
            "min      0.000000  \n",
            "25%      0.000000  \n",
            "50%      0.000000  \n",
            "75%      1.000000  \n",
            "max      1.000000  \n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 4. Check for Zero Values in Key Features***"
      ],
      "metadata": {
        "id": "s6hf3ZFMqoUG"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# List of features where zero is not a valid value\n",
        "invalid_zero_features = [\"Glucose\", \"BloodPressure\", \"SkinThickness\", \"Insulin\", \"BMI\"]\n",
        "\n",
        "# Replace zero values with the column mean (except for Outcome)\n",
        "for column in invalid_zero_features:\n",
        "    df[column] = df[column].replace(0, df[column].mean())\n",
        "\n",
        "# Confirm no more zero values\n",
        "print(\"\\nZero Value Check After Replacement:\\n\", (df[invalid_zero_features] == 0).sum())\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "gES7IsEilv8r",
        "outputId": "f620429f-6c11-4f46-d942-bd512ea1b8c3"
      },
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Zero Value Check After Replacement:\n",
            " Glucose          0\n",
            "BloodPressure    0\n",
            "SkinThickness    0\n",
            "Insulin          0\n",
            "BMI              0\n",
            "dtype: int64\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***2. Train a Random Forest Classifier - Step 1. Split the Data Features (X) and Target (y)***"
      ],
      "metadata": {
        "id": "ptFghTifqIzt"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Define features and target variable\n",
        "X = df.drop(columns=['Outcome'])  # Features\n",
        "y = df['Outcome']  # Target\n"
      ],
      "metadata": {
        "id": "kgHs3GCOlxnr"
      },
      "execution_count": 9,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Split into 80% train and 20% test data\n",
        "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n"
      ],
      "metadata": {
        "id": "-zGL4n5mmJim"
      },
      "execution_count": 10,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Print shape of training and testing sets\n",
        "print(f\"Training set shape: {X_train.shape}, Testing set shape: {X_test.shape}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "O_78YQY6mTLO",
        "outputId": "2aa0fe29-1754-4fa6-db55-3c31b14bd376"
      },
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training set shape: (614, 9), Testing set shape: (154, 9)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 2. Train a Random Forest Classifier***"
      ],
      "metadata": {
        "id": "82ovBKL5qCkt"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Initialize Random Forest model\n",
        "rf_model = RandomForestClassifier(n_estimators=100, random_state=42)"
      ],
      "metadata": {
        "id": "WHuVepoxmZvG"
      },
      "execution_count": 13,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Train the model\n",
        "rf_model.fit(X_train, y_train)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 80
        },
        "id": "8d6nC4rymdO-",
        "outputId": "0fea56be-2161-451a-baa0-6d56966e56c2"
      },
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "RandomForestClassifier(random_state=42)"
            ],
            "text/html": [
              "<style>#sk-container-id-1 {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-icon: #696969;\n",
              "\n",
              "  @media (prefers-color-scheme: dark) {\n",
              "    /* Redefinition of color scheme for dark theme */\n",
              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-icon: #878787;\n",
              "  }\n",
              "}\n",
              "\n",
              "#sk-container-id-1 {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip: rect(1px 1px 1px 1px);\n",
              "  clip: rect(1px, 1px, 1px, 1px);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              "#sk-container-id-1 div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              "#sk-container-id-1 label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: start;\n",
              "  justify-content: space-between;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable__content {\n",
              "  max-height: 0;\n",
              "  max-width: 0;\n",
              "  overflow: hidden;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  max-height: 200px;\n",
              "  max-width: 100%;\n",
              "  overflow: auto;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
              "#sk-container-id-1 div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              "#sk-container-id-1 div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  display: inline-block;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              "#sk-container-id-1 div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              "#sk-container-id-1 div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              "#sk-container-id-1 a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "#sk-container-id-1 a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>RandomForestClassifier</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(random_state=42)</pre></div> </div></div></div></div>"
            ]
          },
          "metadata": {},
          "execution_count": 14
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Make predictions on test set\n",
        "y_pred = rf_model.predict(X_test)"
      ],
      "metadata": {
        "id": "6WnySQfVme7-"
      },
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 3. Evaluate Model Performance***"
      ],
      "metadata": {
        "id": "kq4CVMbzp5SM"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Compute evaluation metrics\n",
        "accuracy = accuracy_score(y_test, y_pred)\n",
        "precision = precision_score(y_test, y_pred)\n",
        "recall = recall_score(y_test, y_pred)\n",
        "f1 = f1_score(y_test, y_pred)\n"
      ],
      "metadata": {
        "id": "tdlfYXPkmhC-"
      },
      "execution_count": 50,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Print the classification report\n",
        "print(\"\\nClassification Report:\\n\", classification_report(y_test, y_pred))\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "bYcsFTIkmkO-",
        "outputId": "a6f9e7f4-9da8-4f7d-d761-c3335631841a"
      },
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Classification Report:\n",
            "               precision    recall  f1-score   support\n",
            "\n",
            "           0       0.82      0.79      0.80        99\n",
            "           1       0.64      0.69      0.67        55\n",
            "\n",
            "    accuracy                           0.75       154\n",
            "   macro avg       0.73      0.74      0.74       154\n",
            "weighted avg       0.76      0.75      0.76       154\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Print key metrics\n",
        "print(f\"✅ Accuracy: {accuracy:.4f}\")\n",
        "print(f\"✅ Precision: {precision:.4f}\")\n",
        "print(f\"✅ Recall: {recall:.4f}\")\n",
        "print(f\"✅ F1-score: {f1:.4f}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "gNZ6ikGxmpgX",
        "outputId": "b94c0739-5172-41ae-df62-b26b1fdac578"
      },
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "✅ Accuracy: 0.7532\n",
            "✅ Precision: 0.6441\n",
            "✅ Recall: 0.6909\n",
            "✅ F1-score: 0.6667\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***3. Manually Select Important Features - Step 1. Extract Feature Importance Scores***"
      ],
      "metadata": {
        "id": "KNBaDLNSpjGa"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Extract feature importances\n",
        "feature_importances = rf_model.feature_importances_"
      ],
      "metadata": {
        "id": "q3RF8dugm3vP"
      },
      "execution_count": 19,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Create a DataFrame for visualization\n",
        "feature_importance_df = pd.DataFrame({'Feature': X.columns, 'Importance': feature_importances})\n"
      ],
      "metadata": {
        "id": "ybo52QQlmtGu"
      },
      "execution_count": 20,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Sort features by importance\n",
        "feature_importance_df = feature_importance_df.sort_values(by='Importance', ascending=False)"
      ],
      "metadata": {
        "id": "azaOzJ0Em9GI"
      },
      "execution_count": 21,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Display feature importances\n",
        "print(feature_importance_df)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "WopzBBnOm_WP",
        "outputId": "d2c0da34-5e06-4335-c484-6f2d5b49a9c6"
      },
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "                    Feature  Importance\n",
            "2                   Glucose    0.269512\n",
            "6                       BMI    0.146728\n",
            "8                       Age    0.125184\n",
            "7  DiabetesPedigreeFunction    0.106558\n",
            "0                 PatientId    0.090439\n",
            "3             BloodPressure    0.071946\n",
            "5                   Insulin    0.069960\n",
            "1               Pregnancies    0.062901\n",
            "4             SkinThickness    0.056772\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 2. Visualise Feature Importances***"
      ],
      "metadata": {
        "id": "rHwN86mjpccS"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Plot feature importance\n",
        "plt.figure(figsize=(10,6))\n",
        "sns.barplot(x=feature_importance_df['Importance'], y=feature_importance_df['Feature'])\n",
        "plt.xlabel('Feature Importance Score')\n",
        "plt.ylabel('Features')\n",
        "plt.title('Feature Importance from Random Forest')\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 564
        },
        "id": "BrdWOhzRnCsh",
        "outputId": "36747921-1ba8-4456-87a8-2f3058d721fa"
      },
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x600 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 3. Select the Top N Features***"
      ],
      "metadata": {
        "id": "6KVt-JovpXZi"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Select the top N features\n",
        "top_n = 5  # Change this value if needed\n",
        "top_features = feature_importance_df['Feature'][:top_n].tolist()\n",
        "\n",
        "print(f\"Selected Top {top_n} Features: {top_features}\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "aYfO-O5XnG-R",
        "outputId": "003c734d-dd5b-482b-fb26-1c000dd5ea01"
      },
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Selected Top 5 Features: ['Glucose', 'BMI', 'Age', 'DiabetesPedigreeFunction', 'PatientId']\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 4. Retrain the Model with Selected Features***"
      ],
      "metadata": {
        "id": "1uGF_f1JpQu5"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Create a new dataset with only top N features\n",
        "X_train_selected = X_train[top_features]\n",
        "X_test_selected = X_test[top_features]"
      ],
      "metadata": {
        "id": "K6Kz50wOnKWR"
      },
      "execution_count": 25,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Initialize a new Random Forest model\n",
        "rf_model_selected = RandomForestClassifier(n_estimators=100, random_state=42)"
      ],
      "metadata": {
        "id": "dbQjZxKYnOPB"
      },
      "execution_count": 27,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Train the model on selected features\n",
        "rf_model_selected.fit(X_train_selected, y_train)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 80
        },
        "id": "O7XbdUYVnQhR",
        "outputId": "9e794227-9794-447b-f701-006735b87a5a"
      },
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "RandomForestClassifier(random_state=42)"
            ],
            "text/html": [
              "<style>#sk-container-id-2 {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-icon: #696969;\n",
              "\n",
              "  @media (prefers-color-scheme: dark) {\n",
              "    /* Redefinition of color scheme for dark theme */\n",
              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-icon: #878787;\n",
              "  }\n",
              "}\n",
              "\n",
              "#sk-container-id-2 {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip: rect(1px 1px 1px 1px);\n",
              "  clip: rect(1px, 1px, 1px, 1px);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              "#sk-container-id-2 div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              "#sk-container-id-2 label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: start;\n",
              "  justify-content: space-between;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable__content {\n",
              "  max-height: 0;\n",
              "  max-width: 0;\n",
              "  overflow: hidden;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  max-height: 200px;\n",
              "  max-width: 100%;\n",
              "  overflow: auto;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
              "#sk-container-id-2 div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              "#sk-container-id-2 div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  display: inline-block;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              "#sk-container-id-2 div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              "#sk-container-id-2 div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              "#sk-container-id-2 a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "#sk-container-id-2 a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>RandomForestClassifier</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(random_state=42)</pre></div> </div></div></div></div>"
            ]
          },
          "metadata": {},
          "execution_count": 28
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Make predictions\n",
        "y_pred_selected = rf_model_selected.predict(X_test_selected)"
      ],
      "metadata": {
        "id": "JbZKg2wUnS5S"
      },
      "execution_count": 29,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 5. Compare Model Performance Before and After Feature Selection***"
      ],
      "metadata": {
        "id": "YgMTEZCapJLA"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Compute new evaluation metrics\n",
        "accuracy_selected = accuracy_score(y_test, y_pred_selected)\n",
        "precision_selected = precision_score(y_test, y_pred_selected)\n",
        "recall_selected = recall_score(y_test, y_pred_selected)\n",
        "f1_selected = f1_score(y_test, y_pred_selected)"
      ],
      "metadata": {
        "id": "F4CUFY2snUaC"
      },
      "execution_count": 31,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Print comparison results\n",
        "print(\"\\nModel Performance Before and After Feature Selection:\\n\")\n",
        "print(f\"📌 **Original Model** (All Features)\")\n",
        "print(f\"✅ Accuracy: {accuracy:.4f}, Precision: {precision:.4f}, Recall: {recall:.4f}, F1-score: {f1:.4f}\")\n",
        "\n",
        "print(f\"\\n📌 **Feature-Selected Model** (Top {top_n} Features)\")\n",
        "print(f\"✅ Accuracy: {accuracy_selected:.4f}, Precision: {precision_selected:.4f}, Recall: {recall_selected:.4f}, F1-score: {f1_selected:.4f}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "OvNHfb3lnYQK",
        "outputId": "29864387-98ba-4df0-943e-55185cbd9d9f"
      },
      "execution_count": 49,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Model Performance Before and After Feature Selection:\n",
            "\n",
            "📌 **Original Model** (All Features)\n",
            "✅ Accuracy: 0.7532, Precision: 0.6441, Recall: 0.6909, F1-score: 0.6667\n",
            "\n",
            "📌 **Feature-Selected Model** (Top 5 Features)\n",
            "✅ Accuracy: 0.7532, Precision: 0.6491, Recall: 0.6727, F1-score: 0.6607\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***4. Use PCA for Feature Selection - Step 1. Apply PCA***"
      ],
      "metadata": {
        "id": "Ygu1mlrpo0MQ"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Standardize the dataset (important for PCA)\n",
        "scaler = StandardScaler()\n",
        "X_train_scaled = scaler.fit_transform(X_train)\n",
        "X_test_scaled = scaler.transform(X_test)"
      ],
      "metadata": {
        "id": "LaYD2LmMnhdz"
      },
      "execution_count": 40,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Apply PCA and keep enough components to explain 95% of variance\n",
        "pca = PCA(n_components=0.95)  # Keeps 95% of variance\n",
        "X_train_pca = pca.fit_transform(X_train_scaled)\n",
        "X_test_pca = pca.transform(X_test_scaled)"
      ],
      "metadata": {
        "id": "a4geLaKTn4OM"
      },
      "execution_count": 42,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Print the number of selected components\n",
        "print(f\"Original features: {X_train.shape[1]}, PCA components: {X_train_pca.shape[1]}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3yO92ASun6sU",
        "outputId": "0fd7391a-3a5d-4109-d93c-d2a178252c93"
      },
      "execution_count": 43,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Original features: 9, PCA components: 8\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 2. Train Random Forest on PCA-Reduced Data***"
      ],
      "metadata": {
        "id": "XqofDb-votCv"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Train a Random Forest model on PCA-transformed data\n",
        "rf_model_pca = RandomForestClassifier(n_estimators=100, random_state=42)\n",
        "rf_model_pca.fit(X_train_pca, y_train)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 80
        },
        "id": "GsWlBKFxn-0F",
        "outputId": "66f3921b-8953-44d9-8d02-67e72666157d"
      },
      "execution_count": 44,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "RandomForestClassifier(random_state=42)"
            ],
            "text/html": [
              "<style>#sk-container-id-3 {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-icon: #696969;\n",
              "\n",
              "  @media (prefers-color-scheme: dark) {\n",
              "    /* Redefinition of color scheme for dark theme */\n",
              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-icon: #878787;\n",
              "  }\n",
              "}\n",
              "\n",
              "#sk-container-id-3 {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip: rect(1px 1px 1px 1px);\n",
              "  clip: rect(1px, 1px, 1px, 1px);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              "#sk-container-id-3 div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              "#sk-container-id-3 label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: start;\n",
              "  justify-content: space-between;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content {\n",
              "  max-height: 0;\n",
              "  max-width: 0;\n",
              "  overflow: hidden;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  max-height: 200px;\n",
              "  max-width: 100%;\n",
              "  overflow: auto;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
              "#sk-container-id-3 div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              "#sk-container-id-3 div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  display: inline-block;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              "#sk-container-id-3 div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              "#sk-container-id-3 div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              "#sk-container-id-3 a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "#sk-container-id-3 a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>RandomForestClassifier</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(random_state=42)</pre></div> </div></div></div></div>"
            ]
          },
          "metadata": {},
          "execution_count": 44
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Make predictions\n",
        "y_pred_pca = rf_model_pca.predict(X_test_pca)"
      ],
      "metadata": {
        "id": "1MBpD_pooAXF"
      },
      "execution_count": 45,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 3. Compare the Model Performance***"
      ],
      "metadata": {
        "id": "-34NrAwBohPG"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Compute evaluation metrics for PCA model\n",
        "accuracy_pca = accuracy_score(y_test, y_pred_pca)\n",
        "precision_pca = precision_score(y_test, y_pred_pca)\n",
        "recall_pca = recall_score(y_test, y_pred_pca)\n",
        "f1_pca = f1_score(y_test, y_pred_pca)"
      ],
      "metadata": {
        "id": "GhrRTMTAoCG1"
      },
      "execution_count": 46,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Print comparison results\n",
        "print(\"\\n📌 **Model Performance Comparison**\")\n",
        "print(f\"Original Model (All Features): Accuracy: {accuracy:.4f}, Precision: {precision:.4f}, Recall: {recall:.4f}, F1-score: {f1:.4f}\")\n",
        "print(f\"Feature-Selected Model (Top Features): Accuracy: {accuracy_selected:.4f}, Precision: {precision_selected:.4f}, Recall: {recall_selected:.4f}, F1-score: {f1_selected:.4f}\")\n",
        "print(f\"PCA-Reduced Model: Accuracy: {accuracy_pca:.4f}, Precision: {precision_pca:.4f}, Recall: {recall_pca:.4f}, F1-score: {f1_pca:.4f}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "kgyuCnP0oD0N",
        "outputId": "14a1f537-cc26-42df-ad13-3a3a9afa8d4a"
      },
      "execution_count": 47,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "📌 **Model Performance Comparison**\n",
            "✅ Original Model (All Features): Accuracy: 0.7532, Precision: 0.6441, Recall: 0.6909, F1-score: 0.6667\n",
            "✅ Feature-Selected Model (Top Features): Accuracy: 0.7532, Precision: 0.6491, Recall: 0.6727, F1-score: 0.6607\n",
            "✅ PCA-Reduced Model: Accuracy: 0.7338, Precision: 0.6400, Recall: 0.5818, F1-score: 0.6095\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 4. Visualising PCA Explained Variance***"
      ],
      "metadata": {
        "id": "ic6OyAAroWiG"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Plot explained variance ratio\n",
        "plt.figure(figsize=(8,5))\n",
        "plt.plot(np.cumsum(pca.explained_variance_ratio_), marker='o', linestyle='--')\n",
        "plt.xlabel(\"Number of Principal Components\")\n",
        "plt.ylabel(\"Cumulative Explained Variance\")\n",
        "plt.title(\"PCA - Explained Variance Ratio\")\n",
        "plt.grid(True)\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 487
        },
        "id": "P4b1S856oSX2",
        "outputId": "0cb589c1-f5ea-4877-fbf8-518c86696b62"
      },
      "execution_count": 48,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 800x500 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Part 2:***"
      ],
      "metadata": {
        "id": "Wn6x0d41sA2E"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 1. Train Logistic Regression Model***"
      ],
      "metadata": {
        "id": "SUUxlh-rsJ8M"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Initialize Logistic Regression model\n",
        "logistic_model = LogisticRegression(random_state=42, max_iter=500)"
      ],
      "metadata": {
        "id": "2PYdp9ImsEGT"
      },
      "execution_count": 53,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Train the model\n",
        "logistic_model.fit(X_train, y_train)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 80
        },
        "id": "SFl7GQpBsT9c",
        "outputId": "9eebb6c1-9504-4e1a-ce80-f508ca1ef3fa"
      },
      "execution_count": 54,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "LogisticRegression(max_iter=500, random_state=42)"
            ],
            "text/html": [
              "<style>#sk-container-id-4 {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-icon: #696969;\n",
              "\n",
              "  @media (prefers-color-scheme: dark) {\n",
              "    /* Redefinition of color scheme for dark theme */\n",
              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-icon: #878787;\n",
              "  }\n",
              "}\n",
              "\n",
              "#sk-container-id-4 {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip: rect(1px 1px 1px 1px);\n",
              "  clip: rect(1px, 1px, 1px, 1px);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              "#sk-container-id-4 div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              "#sk-container-id-4 div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              "#sk-container-id-4 div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              "#sk-container-id-4 label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: start;\n",
              "  justify-content: space-between;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              "#sk-container-id-4 div.sk-toggleable__content {\n",
              "  max-height: 0;\n",
              "  max-width: 0;\n",
              "  overflow: hidden;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  max-height: 200px;\n",
              "  max-width: 100%;\n",
              "  overflow: auto;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              "#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              "#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-label label.sk-toggleable__label,\n",
              "#sk-container-id-4 div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              "#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              "#sk-container-id-4 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              "#sk-container-id-4 div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  display: inline-block;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              "#sk-container-id-4 div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              "#sk-container-id-4 div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-4 div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              "#sk-container-id-4 a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "#sk-container-id-4 a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "#sk-container-id-4 a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(max_iter=500, random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(max_iter=500, random_state=42)</pre></div> </div></div></div></div>"
            ]
          },
          "metadata": {},
          "execution_count": 54
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Make predictions\n",
        "y_pred_logistic = logistic_model.predict(X_test)"
      ],
      "metadata": {
        "id": "bJYM5LvpsV11"
      },
      "execution_count": 55,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 2. Train Naive Bayes Model***"
      ],
      "metadata": {
        "id": "Wx4LIrzJsZ59"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Initialize Naïve Bayes model\n",
        "naive_bayes_model = GaussianNB()"
      ],
      "metadata": {
        "id": "GgF8cb03sd1t"
      },
      "execution_count": 56,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Train the model\n",
        "naive_bayes_model.fit(X_train, y_train)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 80
        },
        "id": "CkIksguTsgot",
        "outputId": "8624e290-e91b-4b4a-c484-9427c0e68a6f"
      },
      "execution_count": 57,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "GaussianNB()"
            ],
            "text/html": [
              "<style>#sk-container-id-5 {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-icon: #696969;\n",
              "\n",
              "  @media (prefers-color-scheme: dark) {\n",
              "    /* Redefinition of color scheme for dark theme */\n",
              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-icon: #878787;\n",
              "  }\n",
              "}\n",
              "\n",
              "#sk-container-id-5 {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip: rect(1px 1px 1px 1px);\n",
              "  clip: rect(1px, 1px, 1px, 1px);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              "#sk-container-id-5 div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              "#sk-container-id-5 div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              "#sk-container-id-5 div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              "#sk-container-id-5 label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: start;\n",
              "  justify-content: space-between;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              "#sk-container-id-5 div.sk-toggleable__content {\n",
              "  max-height: 0;\n",
              "  max-width: 0;\n",
              "  overflow: hidden;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  max-height: 200px;\n",
              "  max-width: 100%;\n",
              "  overflow: auto;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              "#sk-container-id-5 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              "#sk-container-id-5 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-label label.sk-toggleable__label,\n",
              "#sk-container-id-5 div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              "#sk-container-id-5 div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              "#sk-container-id-5 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              "#sk-container-id-5 div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  display: inline-block;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              "#sk-container-id-5 div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              "#sk-container-id-5 div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-5 div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              "#sk-container-id-5 a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "#sk-container-id-5 a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "#sk-container-id-5 a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "</style><div id=\"sk-container-id-5\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GaussianNB()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-5\" type=\"checkbox\" checked><label for=\"sk-estimator-id-5\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>GaussianNB</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.naive_bayes.GaussianNB.html\">?<span>Documentation for GaussianNB</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>GaussianNB()</pre></div> </div></div></div></div>"
            ]
          },
          "metadata": {},
          "execution_count": 57
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Make predictions\n",
        "y_pred_nb = naive_bayes_model.predict(X_test)"
      ],
      "metadata": {
        "id": "6U-g_iiGsiQu"
      },
      "execution_count": 58,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 3. Evaluate Performance of All Models***"
      ],
      "metadata": {
        "id": "I4iGsETVslSv"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Compute evaluation metrics for Logistic Regression\n",
        "accuracy_logistic = accuracy_score(y_test, y_pred_logistic)\n",
        "precision_logistic = precision_score(y_test, y_pred_logistic)\n",
        "recall_logistic = recall_score(y_test, y_pred_logistic)\n",
        "f1_logistic = f1_score(y_test, y_pred_logistic)"
      ],
      "metadata": {
        "id": "A27d4nNpsn5M"
      },
      "execution_count": 60,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Compute evaluation metrics for Naïve Bayes\n",
        "accuracy_nb = accuracy_score(y_test, y_pred_nb)\n",
        "precision_nb = precision_score(y_test, y_pred_nb)\n",
        "recall_nb = recall_score(y_test, y_pred_nb)\n",
        "f1_nb = f1_score(y_test, y_pred_nb)"
      ],
      "metadata": {
        "id": "qNadB_DgssRe"
      },
      "execution_count": 61,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Print model performance comparison\n",
        "print(\"\\n**Model Performance Comparison**\")\n",
        "print(f\"Random Forest (All Features): Accuracy: {accuracy:.4f}, Precision: {precision:.4f}, Recall: {recall:.4f}, F1-score: {f1:.4f}\")\n",
        "print(f\"Random Forest (Feature Selection): Accuracy: {accuracy_selected:.4f}, Precision: {precision_selected:.4f}, Recall: {recall_selected:.4f}, F1-score: {f1_selected:.4f}\")\n",
        "print(f\"Random Forest (PCA-Reduced): Accuracy: {accuracy_pca:.4f}, Precision: {precision_pca:.4f}, Recall: {recall_pca:.4f}, F1-score: {f1_pca:.4f}\")\n",
        "print(f\"Logistic Regression: Accuracy: {accuracy_logistic:.4f}, Precision: {precision_logistic:.4f}, Recall: {recall_logistic:.4f}, F1-score: {f1_logistic:.4f}\")\n",
        "print(f\"Naïve Bayes: Accuracy: {accuracy_nb:.4f}, Precision: {precision_nb:.4f}, Recall: {recall_nb:.4f}, F1-score: {f1_nb:.4f}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "jefl7AGgsuPe",
        "outputId": "164f39b9-d785-4df6-dab3-6f3790368f87"
      },
      "execution_count": 63,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "**Model Performance Comparison**\n",
            "Random Forest (All Features): Accuracy: 0.7532, Precision: 0.6441, Recall: 0.6909, F1-score: 0.6667\n",
            "Random Forest (Feature Selection): Accuracy: 0.7532, Precision: 0.6491, Recall: 0.6727, F1-score: 0.6607\n",
            "Random Forest (PCA-Reduced): Accuracy: 0.7338, Precision: 0.6400, Recall: 0.5818, F1-score: 0.6095\n",
            "Logistic Regression: Accuracy: 0.7597, Precision: 0.6731, Recall: 0.6364, F1-score: 0.6542\n",
            "Naïve Bayes: Accuracy: 0.7532, Precision: 0.6441, Recall: 0.6909, F1-score: 0.6667\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# ***Step 4. Visualisation of Model Performance***"
      ],
      "metadata": {
        "id": "_ASpkPJEs4Gn"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Create a dataframe for visualization\n",
        "model_names = [\"Random Forest (All Features)\", \"Random Forest (Feature Selection)\",\n",
        "               \"Random Forest (PCA)\", \"Logistic Regression\", \"Naïve Bayes\"]\n",
        "\n",
        "accuracy_scores = [accuracy, accuracy_selected, accuracy_pca, accuracy_logistic, accuracy_nb]\n",
        "f1_scores = [f1, f1_selected, f1_pca, f1_logistic, f1_nb]"
      ],
      "metadata": {
        "id": "EzEnzNwps7Vo"
      },
      "execution_count": 64,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Plot accuracy and F1-score\n",
        "plt.figure(figsize=(10,5))\n",
        "X_axis = np.arange(len(model_names))\n",
        "\n",
        "plt.bar(X_axis - 0.2, accuracy_scores, 0.4, label='Accuracy', color='blue')\n",
        "plt.bar(X_axis + 0.2, f1_scores, 0.4, label='F1-score', color='green')\n",
        "\n",
        "plt.xticks(X_axis, model_names, rotation=45, ha=\"right\")\n",
        "plt.ylabel(\"Score\")\n",
        "plt.title(\"Model Performance Comparison\")\n",
        "plt.legend()\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 634
        },
        "id": "uyRFX_dqs9-3",
        "outputId": "c231e5f9-938c-4d8b-c615-67630c416e08"
      },
      "execution_count": 65,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x500 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1UAAAJpCAYAAABFMBikAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAArexJREFUeJzs3Xd8zdfjx/F3dkRsEUJqllB7j2rRoFZLqVV71F7R1qiiqBQ1WnvE3ru2aqwWpWjUqFmzGqNICBLJPb8//HK/uURLb0g0r+fjcR+Vc8/nc89NTj/3877nfM7HwRhjBAAAAAD4VxwTuwEAAAAA8DIjVAEAAACAHQhVAAAAAGAHQhUAAAAA2IFQBQAAAAB2IFQBAAAAgB0IVQAAAABgB0IVAAAAANiBUAUAAAAAdiBUAUAS4ODgoMGDBz/zdufOnZODg4Nmz56d4G2yx7x58+Tn5ycXFxelTZs2sZuDl1xS7ecAEItQBQD/b/bs2XJwcJCDg4N+/PHHx543xsjX11cODg6qXbt2IrTw39u+fbv1vTk4OMjFxUW5cuVSixYt9Pvvvyfoax0/flytWrVS7ty5NX36dE2bNi1B959chYSEqFmzZvL19ZWbm5vSp08vf39/zZo1SzExMYndPABI1pwTuwEAkNS4u7tr4cKFev31123Kd+zYoUuXLsnNzS2RWma/7t27q1SpUnrw4IEOHjyoadOmaf369Tp8+LB8fHwS5DW2b98ui8Wir7/+Wnny5EmQfSZ3M2bMUMeOHeXt7a3mzZvr1Vdf1e3btxUcHKy2bdvqzz//VP/+/RO7mc9N9uzZde/ePbm4uCR2UwAgXoQqAHhEzZo1tWzZMn3zzTdydv7fYXLhwoUqUaKErl+/noits0/FihXVoEEDSVLr1q2VN29ede/eXXPmzFG/fv3s2ndERIRSpkypq1evSlKCTvu7e/euPDw8Emx/L5OffvpJHTt2VLly5bRhwwalSpXK+lzPnj21f/9+HTlyJBFb+PxER0fLYrHI1dVV7u7uid0cAHgipv8BwCOaNGmiv/76S1u2bLGWRUVFafny5WratGm820RERKh3797WqVn58uXTV199JWOMTb3IyEj16tVLXl5eSpUqld555x1dunQp3n3+8ccfatOmjby9veXm5qbXXntNM2fOTLg3KqlKlSqSpLNnz1rLNm7cqIoVKyplypRKlSqVatWqpaNHj9ps16pVK3l6eurMmTOqWbOmUqVKpQ8++EA5cuTQoEGDJEleXl6PXSs2adIkvfbaa3Jzc5OPj4+6dOmiW7du2ey7UqVKKliwoA4cOKA33nhDHh4e6t+/v/W6mq+++koTJ05Urly55OHhoWrVqunixYsyxmjo0KHKli2bUqRIoXfffVc3btyw2fe3336rWrVqycfHR25ubsqdO7eGDh362PS52DYcO3ZMlStXloeHh7JmzaqRI0c+9ju8f/++Bg8erLx588rd3V1ZsmTRe++9pzNnzljrWCwWjRs3Tq+99prc3d3l7e2tDh066ObNm//4N/r888/l4OCgBQsW2ASqWCVLllSrVq2sPz9tX3RwcFDXrl21bNkyFShQQClSpFC5cuV0+PBhSdLUqVOVJ08eubu7q1KlSjp37twT/07ly5dXihQplDNnTk2ZMsWmXlRUlAYOHKgSJUooTZo0SpkypSpWrKht27bZ1Iv79x03bpxy584tNzc3HTt2LN5rqkJDQ9W6dWtly5ZNbm5uypIli959993H2vksfe5p/t4AEB9GqgDgETly5FC5cuW0aNEi1ahRQ9LDoBEWFqbGjRvrm2++salvjNE777yjbdu2qW3btipatKg2b96sjz/+WH/88YfGjh1rrduuXTvNnz9fTZs2Vfny5bV161bVqlXrsTZcuXJFZcuWtZ74enl5aePGjWrbtq3Cw8PVs2fPBHmvsSf+GTJkkPRwgYmWLVuqevXqGjFihO7evavJkyfr9ddf1y+//KIcOXJYt42Ojlb16tX1+uuv66uvvpKHh4datWqluXPnatWqVZo8ebI8PT1VuHBhSdLgwYP1+eefy9/fX506ddKJEyc0efJk/fzzz9q1a5fN1K6//vpLNWrUUOPGjdWsWTN5e3tbn1uwYIGioqLUrVs33bhxQyNHjlTDhg1VpUoVbd++XX369NHp06c1fvx4ffTRRzZBdPbs2fL09FRAQIA8PT21detWDRw4UOHh4Ro1apTN7+bmzZt6++239d5776lhw4Zavny5+vTpo0KFCln7RUxMjGrXrq3g4GA1btxYPXr00O3bt7VlyxYdOXJEuXPnliR16NBBs2fPVuvWrdW9e3edPXtWEyZM0C+//PLYe4/r7t27Cg4O1htvvKFXXnnlH/+ez9IXJemHH37QmjVr1KVLF0lSYGCgateurU8++USTJk1S586ddfPmTY0cOVJt2rTR1q1bH/sd1axZUw0bNlSTJk20dOlSderUSa6urmrTpo0kKTw8XDNmzFCTJk3Uvn173b59W0FBQapevbr27dunokWL2uxz1qxZun//vj788EPrtWMWi+Wx91q/fn0dPXpU3bp1U44cOXT16lVt2bJFFy5csPbTZ+lzT/P3BoAnMgAAY4wxs2bNMpLMzz//bCZMmGBSpUpl7t69a4wx5v333zeVK1c2xhiTPXt2U6tWLet2q1evNpLMsGHDbPbXoEED4+DgYE6fPm2MMSYkJMRIMp07d7ap17RpUyPJDBo0yFrWtm1bkyVLFnP9+nWbuo0bNzZp0qSxtuvs2bNGkpk1a9bfvrdt27YZSWbmzJnm2rVr5vLly2b9+vUmR44cxsHBwfz888/m9u3bJm3atKZ9+/Y224aGhpo0adLYlLds2dJIMn379n3stQYNGmQkmWvXrlnLrl69alxdXU21atVMTEyMtXzChAnWdsV68803jSQzZcoUm/3GvlcvLy9z69Yta3m/fv2MJFOkSBHz4MEDa3mTJk2Mq6uruX//vrUs9vcWV4cOHYyHh4dNvdg2zJ0711oWGRlpMmfObOrXr28tmzlzppFkxowZ89h+LRaLMcaYH374wUgyCxYssHl+06ZN8ZbHdejQISPJ9OjR44l14nravmiMMZKMm5ubOXv2rLVs6tSpRpLJnDmzCQ8Pt5bH/o7j1o39HY0ePdpaFhkZaYoWLWoyZcpkoqKijDHGREdHm8jISJv23Lx503h7e5s2bdpYy2L/vqlTpzZXr161qf9oP79586aRZEaNGvXE38W/6XP/9PcGgCdh+h8AxKNhw4a6d++e1q1bp9u3b2vdunVPnPq3YcMGOTk5qXv37jblvXv3ljFGGzdutNaT9Fi9R0edjDFasWKF6tSpI2OMrl+/bn1Ur15dYWFhOnjw4L96X23atJGXl5d8fHxUq1YtRUREaM6cOSpZsqS2bNmiW7duqUmTJjav6eTkpDJlyjw2XUuSOnXq9FSv+/333ysqKko9e/aUo+P/Pnrat2+v1KlTa/369Tb13dzc1Lp163j39f777ytNmjTWn8uUKSNJatasmc01cGXKlFFUVJT++OMPa1mKFCms/759+7auX7+uihUr6u7duzp+/LjN63h6eqpZs2bWn11dXVW6dGmb1RJXrFihjBkzqlu3bo+108HBQZK0bNkypUmTRlWrVrX5vZYoUUKenp7x/l5jhYeHS1K80/7i87R9MdZbb71lM/oY+7usX7++zWvGlj+6UqSzs7M6dOhg/dnV1VUdOnTQ1atXdeDAAUmSk5OTXF1dJT2cBnnjxg1FR0erZMmS8fbj+vXry8vL62/fZ4oUKeTq6qrt27c/cQrls/a5p/l7A8CTMP0PAOLh5eUlf39/LVy4UHfv3lVMTIx1gYdHnT9/Xj4+Po+d+ObPn9/6fOx/HR0drVPCYuXLl8/m52vXrunWrVuaNm3aE5cjj10M4lkNHDhQFStWlJOTkzJmzKj8+fNbg8ipU6ck/e86q0elTp3a5mdnZ2dly5btqV439nfw6Ht1dXVVrly5rM/Hypo1q/VE/FGPToOLDVi+vr7xlsc96T569KgGDBigrVu3WgNLrLCwMJufs2XLZg1GsdKlS6dff/3V+vOZM2eUL18+mzD3qFOnTiksLEyZMmWK9/m/+1vG/s5v3779xDpxPW1fjGXP71KSfHx8lDJlSpuyvHnzSnp4jVTZsmUlSXPmzNHo0aN1/PhxPXjwwFo3Z86cj72H+Moe5ebmphEjRqh3797y9vZW2bJlVbt2bbVo0UKZM2e2ea9P2+ee5u8NAE9CqAKAJ2jatKnat2+v0NBQ1ahR44XdxDb2+pFmzZqpZcuW8daJvU7pWRUqVEj+/v5/+7rz5s2znpjG9WhwcHNzsxkBSEhxR5Qe5eTk9Ezl5v8XaLh165befPNNpU6dWkOGDFHu3Lnl7u6ugwcPqk+fPo9dt/NP+3taFotFmTJl0oIFC+J9/u9GZfLkySNnZ2fr4hEJ7d/+Lp/F/Pnz1apVK9WtW1cff/yxMmXKJCcnJwUGBtos5hHr7/72cfXs2VN16tTR6tWrtXnzZn322WcKDAzU1q1bVaxYsWduZ0K+ZwDJD6EKAJ6gXr166tChg3766SctWbLkifWyZ8+u77//Xrdv37YZIYidTpY9e3brfy0Wi3V0I9aJEyds9he7MmBMTMwTA9DzEDuClilTpgR/3djfwYkTJ5QrVy5reVRUlM6ePftC3uf27dv1119/aeXKlXrjjTes5XFXPnxWuXPn1t69e/XgwYMnLjaRO3duff/996pQocJTB4ZYHh4eqlKlirZu3aqLFy8+NoL0qKftiwnl8uXL1qX0Y508eVKSrNMKly9frly5cmnlypU2I0Gxq0TaI3fu3Ordu7d69+6tU6dOqWjRoho9erTmz5+fJPocgOSDa6oA4Ak8PT01efJkDR48WHXq1HlivZo1ayomJkYTJkywKR87dqwcHBysK4fF/vfR1QPHjRtn87OTk5Pq16+vFStWxHv/oWvXrv2bt/OPqlevrtSpU2v48OE2U7QS4nX9/f3l6uqqb775xuab/6CgIIWFhcW7AmJCix2JiPv6UVFRmjRp0r/eZ/369XX9+vXH/vZxX6dhw4aKiYnR0KFDH6sTHR392PLejxo0aJCMMWrevLnu3Lnz2PMHDhzQnDlzJD19X0wo0dHRmjp1qvXnqKgoTZ06VV5eXipRooSk+H/ve/fu1Z49e/716969e1f379+3KcudO7dSpUqlyMhISUmjzwFIPhipAoC/8aTpd3HVqVNHlStX1qeffqpz586pSJEi+u677/Ttt9+qZ8+e1hGgokWLqkmTJpo0aZLCwsJUvnx5BQcH6/Tp04/t88svv9S2bdtUpkwZtW/fXgUKFNCNGzd08OBBff/994/dfykhpE6dWpMnT1bz5s1VvHhxNW7cWF5eXrpw4YLWr1+vChUqxBsenoaXl5f69eunzz//XG+//bbeeecdnThxQpMmTVKpUqVsFgh4XsqXL6906dKpZcuW6t69uxwcHDRv3jy7pne1aNFCc+fOVUBAgPbt26eKFSsqIiJC33//vTp37qx3331Xb775pjp06KDAwECFhISoWrVqcnFx0alTp7Rs2TJ9/fXXT7xeL7bdEydOVOfOneXn56fmzZvr1Vdf1e3bt7V9+3atWbNGw4YNk/T0fTGh+Pj4aMSIETp37pzy5s2rJUuWKCQkRNOmTbOO3NWuXVsrV65UvXr1VKtWLZ09e1ZTpkxRgQIF4g2JT+PkyZN666231LBhQxUoUEDOzs5atWqVrly5osaNG0tKGn0OQPJBqAIAOzk6OmrNmjUaOHCglixZolmzZilHjhwaNWqUevfubVN35syZ8vLy0oIFC7R69WpVqVJF69evf2xal7e3t/bt26chQ4Zo5cqVmjRpkjJkyKDXXntNI0aMeG7vpWnTpvLx8dGXX36pUaNGKTIyUlmzZlXFihWfuBrf0xo8eLC8vLw0YcIE9erVS+nTp9eHH36o4cOHP3HqXELKkCGD1q1bp969e2vAgAFKly6dmjVrprfeekvVq1f/V/t0cnLShg0b9MUXX2jhwoVasWKFMmTIoNdff12FChWy1psyZYpKlCihqVOnqn///nJ2dlaOHDnUrFkzVahQ4R9fp0OHDipVqpRGjx6tuXPn6tq1a/L09FTx4sU1a9Ysa0B4lr6YENKlS6c5c+aoW7dumj59ury9vTVhwgS1b9/eWqdVq1YKDQ3V1KlTtXnzZhUoUEDz58/XsmXLtH379n/1ur6+vmrSpImCg4M1b948OTs7y8/PT0uXLlX9+vWt9RK7zwFIPhwMV2ACAIBnVKlSJV2/fj3eKaoAkNxwTRUAAAAA2IFQBQAAAAB2IFQBAAAAgB24pgoAAAAA7MBIFQAAAADYgVAFAAAAAHbgPlVxWCwWXb58WalSpZKDg0NiNwcAAABAIjHG6Pbt2/Lx8ZGj49+PRRGq4rh8+fJjN+AEAAAAkHxdvHhR2bJl+9s6hKo4UqVKJenhLy516tSJ3BoAAAAAiSU8PFy+vr7WjPB3CFVxxE75S506NaEKAAAAwFNdFsRCFQAAAABgB0IVAAAAANiBUAUAAAAAduCaKgAAAMBOMTExevDgQWI3A8/I1dX1H5dLfxqEKgAAAOBfMsYoNDRUt27dSuym4F9wdHRUzpw55erqatd+CFUAAADAvxQbqDJlyiQPD4+nWikOSYPFYtHly5f1559/6pVXXrHrb0eoAgAAAP6FmJgYa6DKkCFDYjcH/4KXl5cuX76s6Ohoubi4/Ov9sFAFAAAA8C/EXkPl4eGRyC3BvxU77S8mJsau/RCqAAAAADsw5e/llVB/O0IVAAAAANiBUAUAAAAAdiBUAQAAAAnIweHFPv6tPXv2yMnJSbVq1Uq4N59MEaoAAACAZCgoKEjdunXTzp07dfny5URrR1RUVKK9dkIhVAEAAADJzJ07d7RkyRJ16tRJtWrV0uzZs22eX7t2rUqVKiV3d3dlzJhR9erVsz4XGRmpPn36yNfXV25ubsqTJ4+CgoIkSbNnz1batGlt9rV69WqbBSEGDx6sokWLasaMGcqZM6fc3d0lSZs2bdLrr7+utGnTKkOGDKpdu7bOnDljs69Lly6pSZMmSp8+vVKmTKmSJUtq7969OnfunBwdHbV//36b+uPGjVP27NllsVjs/ZX9LUIVAAAAkMwsXbpUfn5+ypcvn5o1a6aZM2fKGCNJWr9+verVq6eaNWvql19+UXBwsEqXLm3dtkWLFlq0aJG++eYb/fbbb5o6dao8PT2f6fVPnz6tFStWaOXKlQoJCZEkRUREKCAgQPv371dwcLAcHR1Vr149ayC6c+eO3nzzTf3xxx9as2aNDh06pE8++UQWi0U5cuSQv7+/Zs2aZfM6s2bNUqtWreTo+HxjDzf/BQAAL1xyWoH6/89TgSQlKChIzZo1kyS9/fbbCgsL044dO1SpUiV98cUXaty4sT7//HNr/SJFikiSTp48qaVLl2rLli3y9/eXJOXKleuZXz8qKkpz586Vl5eXtax+/fo2dWbOnCkvLy8dO3ZMBQsW1MKFC3Xt2jX9/PPPSp8+vSQpT5481vrt2rVTx44dNWbMGLm5uengwYM6fPiwvv3222du37NipAoAAABIRk6cOKF9+/apSZMmkiRnZ2c1atTIOoUvJCREb731VrzbhoSEyMnJSW+++aZdbciePbtNoJKkU6dOqUmTJsqVK5dSp06tHDlySJIuXLhgfe1ixYpZA9Wj6tatKycnJ61atUrSw6mIlStXtu7neWKkCgAAAEhGgoKCFB0dLR8fH2uZMUZubm6aMGGCUqRI8cRt/+45SXJ0dLROI4z14MGDx+qlTJnysbI6deooe/bsmj59unx8fGSxWFSwYEHrQhb/9Nqurq5q0aKFZs2apffee08LFy7U119//bfbJBRGqgAAAIBkIjo6WnPnztXo0aMVEhJifRw6dEg+Pj5atGiRChcurODg4Hi3L1SokCwWi3bs2BHv815eXrp9+7YiIiKsZbHXTP2dv/76SydOnNCAAQP01ltvKX/+/Lp586ZNncKFCyskJEQ3btx44n7atWun77//XpMmTVJ0dLTee++9f3zthMBIVRLGfHMkFPoSAOC/KjE/47Jnl6ZMkeLkhyRv3bp1unnzptq2bas0adLYPFe/fn0FBQVp1KhReuutt5Q7d241btxY0dHR2rBhg/r06aMcOXKoZcuWatOmjb755hsVKVJE58+f19WrV9WwYUOVKVNGHh4e6t+/v7p37669e/c+trJgfNKlS6cMGTJo2rRpypIliy5cuKC+ffva1GnSpImGDx+uunXrKjAwUFmyZNEvv/wiHx8flStXTpKUP39+lS1bVn369FGbNm3+cXQroTBSBQAA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6NFaunSp9u7dqw0bNmjz5s1avHix7t27p/r162vq1KlycXGx6Tcck/Cor7/+WkOGDNH69evl6empW7duqUGDBvLz89PEiRP12muvSZL69Omj3bt3a+fOnRyLYBX3s+n27dtKlSqVvv76a/3++++qVauW6tevr1GjRqljx46SHl5ndeLECXXv3l1p0qRJzKbjJUKoesk8GqLKlStnHSHo1auXUqdOrc8//1zDhw/XV199pSVLlqhq1ao6f/683N3d5e3tbbMPTl7wqHr16unMmTN64403lCJFCo0ePVpTp061TqkpVaqU7ty5oylTpujNN99M5NYiKYnveLJ3716VK1dOpUqV0oULF9SwYUPVq1dP169fV/PmzXXgwAHryLpEMEf8WrduLYvFojlz5ljLzp49qzJlyqhEiRIaOXKkChUqJOl//ZC+hEeNGzdOzs7O6tq1qzZv3qwaNWpIenjz6BYtWkiSIiIi9N577ylv3rwaP358YjYXLxnOpl8icT8gAgIC1Lt3b5ubYFosFl27dk2jR4/WV199pYULF6pq1aoyxmjJkiUaO3asIiMjbT5kCFSIKygoSKdOndLGjRs1YcIEZciQQSlTplSOHDmsdX7++Wfdvn1bGzZsSLyGIsmJiYmxHk9+/PFH7dixQyEhISpTpox2796tt956SytWrNCQIUNUqVIlFS5cWIUKFXpsWWNOghGXxWKRMUbXr1/XjRs3rOWRkZHKmTOnPvvsM23evFmffvqpzQInBCrE5+TJkwoMDFRERISqV6+uMWPGyNHRUXfv3tXBgwd14MABvffee7p69arGjh0r6WFfAp6KwUunR48eJl26dObQoUM25atWrTL58uUzqVKlMt9++621/Pz586Z06dJmxIgRL7qpSIIsFstjZTExMcYYY/r3729atWpljDFm+PDhJl26dOa7774zxhhz7tw5s3v37hfXULw04vapJk2aGD8/P1OwYEHj6elpBgwYYO7du2d9/s6dO+bcuXOmYMGCpnHjxonRXCRhsceiR61atcp4eHiYmTNn2pTPnTvXtGvXznh5eVmPXYAxxjx48MD679h+9fvvv5vy5cubCRMmGGOMCQsLM1988YVJmzatyZQpkylevLipWrWqiYqKMsYYEx0d/eIbjpcWwxQvmUGDBmnKlCn69ddfVbhwYUkPvyGeOnWq6tatqwoV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80REREREagvNVIkRqEJCQnj77bdJT0+ndevWFBYW0qVLFzIzMykrK8Pa+np3+cMf/kBaWhojR44EoGPHjowbNw7Qkj8RERERqX20p0oA+PDDDxkwYAD+/v4sWLAAgB9++IHHHnsMCwsLli1bhqurK61btwbgxIkTnDp1iitXrjBkyBAAKioqjNksEREREZHaQqFKADh37hxhYWEcOHAAb29vAgMD6dSpE3l5eTz33HPs37+f4uJiSkpK8Pf3p02bNvTs2dO4X4FKRERERGorhSox5ObmEh4eTkZGBqdPn8bd3Z2UlBQsLS0pLS3l7NmzzJs3j127dtGhQwcSEhKqu8kiIiIiItVOoUqqyM3NJSIigqSkJPz8/Jg1axZQdSYqNzcXFxeXamyliIiIiEjNoUIVUoWLiwvTp0+noqKCbdu2UbduXYKDg7G0tKSkpARbW1sjUKkohYiIiIiIZqrkR1QuBdy3bx8DBw4kODi4upskIiIiIlIjqbKA3JKLiwuhoaF07NiRpUuXkpqaWt1NEhERERGpkTRTJT/p22+/ZceOHcaZVCIiIiIiUpVClfxs2kMlIiIiInIzLf+Tn02BSkRERETkZgpVIiIiIiIit0GhSkRERERE5DYoVImIiIiIiNwGhSoREREREZHboFAlIiIiIiJyGxSqREREREREboNClYiIiIiIyG1QqBIREREREbkNClUiIiIiIiK3QaFKRERERETkNvx/anSaEj4RVuEAAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "Part 2"
      ],
      "metadata": {
        "id": "h1W8bDmgtPh5"
      }
    }
  ]
}