{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"mount_file_id":"1tci8ZuGzB3rplXrAtP3MSv1n0w3L1w4Z","authorship_tag":"ABX9TyM2dl3juUj4Pgegnyb/QZxp"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","execution_count":1,"metadata":{"id":"evVFCSHgpDLU","executionInfo":{"status":"ok","timestamp":1760477624779,"user_tz":-60,"elapsed":5296,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}}},"outputs":[],"source":["import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","from sklearn.model_selection import train_test_split\n","from sklearn.preprocessing import StandardScaler, LabelEncoder\n","from sklearn.ensemble import RandomForestClassifier\n","from sklearn.linear_model import LogisticRegression\n","from sklearn.naive_bayes import GaussianNB\n","from sklearn.decomposition import PCA\n","from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score"]},{"cell_type":"code","source":["df = pd.read_csv('/content/drive/MyDrive/UWTSD/Application of Machine Learning (ACCA7025_BIRM)/diabetes.csv')"],"metadata":{"id":"MNhlvmEmpXJQ","executionInfo":{"status":"ok","timestamp":1760477712547,"user_tz":-60,"elapsed":288,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}}},"execution_count":2,"outputs":[]},{"cell_type":"code","source":["df.info()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"0JfBml2ppmK6","executionInfo":{"status":"ok","timestamp":1760477737614,"user_tz":-60,"elapsed":43,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"5732dbd8-b331-466b-af98-232a511f2a5f"},"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["<class 'pandas.core.frame.DataFrame'>\n","RangeIndex: 768 entries, 0 to 767\n","Data columns (total 10 columns):\n"," #   Column                    Non-Null Count  Dtype  \n","---  ------                    --------------  -----  \n"," 0   PatientId                 768 non-null    int64  \n"," 1   Pregnancies               768 non-null    int64  \n"," 2   Glucose                   768 non-null    int64  \n"," 3   BloodPressure             768 non-null    int64  \n"," 4   SkinThickness             768 non-null    int64  \n"," 5   Insulin                   768 non-null    int64  \n"," 6   BMI                       768 non-null    float64\n"," 7   DiabetesPedigreeFunction  768 non-null    float64\n"," 8   Age                       768 non-null    int64  \n"," 9   Outcome                   768 non-null    int64  \n","dtypes: float64(2), int64(8)\n","memory usage: 60.1 KB\n"]}]},{"cell_type":"code","source":["df.head()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"id":"vPcm1Bv5ppyq","executionInfo":{"status":"ok","timestamp":1760477752923,"user_tz":-60,"elapsed":54,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"e09c0992-e4e9-461a-ad86-3b97f30064c8"},"execution_count":4,"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-a8f73613-3722-40da-886c-28a6bbe3a6ba\" 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-a8f73613-3722-40da-886c-28a6bbe3a6ba')\"\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-a8f73613-3722-40da-886c-28a6bbe3a6ba 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-a8f73613-3722-40da-886c-28a6bbe3a6ba');\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-9cca1ed3-ad3a-4897-bdfe-3aafe2b9de19\">\n","      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-9cca1ed3-ad3a-4897-bdfe-3aafe2b9de19')\"\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-9cca1ed3-ad3a-4897-bdfe-3aafe2b9de19 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":4}]},{"cell_type":"code","source":["# Handle missing values (if any)\n","df.dropna(inplace=True)\n","\n","# Encode categorical features (if using Titanic dataset)\n","if 'Sex' in df.columns:\n","    df['Sex'] = LabelEncoder().fit_transform(df['Sex'])\n","\n","# Define features and target\n","X = df.drop(columns=['Outcome']) if 'Outcome' in df.columns else df.drop(columns=['Survived'])\n","y = df['Outcome'] if 'Outcome' in df.columns else df['Survived']\n","\n","# Split data\n","X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"],"metadata":{"id":"UTYL-z80prpj","executionInfo":{"status":"ok","timestamp":1760477823107,"user_tz":-60,"elapsed":41,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}}},"execution_count":7,"outputs":[]},{"cell_type":"code","source":["X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"],"metadata":{"id":"p1yaqAfjqAHi","executionInfo":{"status":"ok","timestamp":1760477842586,"user_tz":-60,"elapsed":43,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}}},"execution_count":8,"outputs":[]},{"cell_type":"code","source":["rf = RandomForestClassifier(n_estimators=100, random_state=42)\n","rf.fit(X_train, y_train)\n","y_pred = rf.predict(X_test)"],"metadata":{"id":"8Dt3GcuQqBX1","executionInfo":{"status":"ok","timestamp":1760477853188,"user_tz":-60,"elapsed":259,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}}},"execution_count":9,"outputs":[]},{"cell_type":"code","source":["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_Score = f1_score(y_test, y_pred)\n","\n","print(f\"Accuracy: {Accuracy}\")\n","print(f\"Precision: {Precision}\")\n","print(f\"Recall: {Recall}\")\n","print(f\"F1 Score: {F1_Score}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"4UBh493dqFtS","executionInfo":{"status":"ok","timestamp":1760477865480,"user_tz":-60,"elapsed":42,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"d96c5dc8-aae5-4aa3-800a-f9563caa05b8"},"execution_count":10,"outputs":[{"output_type":"stream","name":"stdout","text":["Accuracy: 0.7532467532467533\n","Precision: 0.6440677966101694\n","Recall: 0.6909090909090909\n","F1 Score: 0.6666666666666666\n"]}]},{"cell_type":"code","source":["feature_importances = pd.DataFrame({'Feature': X.columns, 'Importance': rf.feature_importances_})\n","feature_importances = feature_importances.sort_values(by='Importance', ascending=False)\n","print(feature_importances)\n","\n","# VISUALIZATION\n","\n","plt.bar(range(X_train.shape[1]),\n","rf.feature_importances_)\n","plt.xlabel(\"Features\")\n","plt.ylabel(\"Importance\")\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":623},"id":"s7GFpGa8qKqY","executionInfo":{"status":"ok","timestamp":1760477885664,"user_tz":-60,"elapsed":341,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"ff951c69-4b8a-4f4c-e0db-90be9a1f7bf9"},"execution_count":11,"outputs":[{"output_type":"stream","name":"stdout","text":["                    Feature  Importance\n","2                   Glucose    0.267089\n","6                       BMI    0.153334\n","8                       Age    0.129185\n","7  DiabetesPedigreeFunction    0.102934\n","0                 PatientId    0.090048\n","3             BloodPressure    0.075748\n","1               Pregnancies    0.065340\n","5                   Insulin    0.060622\n","4             SkinThickness    0.055700\n"]},{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"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/avThg8frueff14PPvigHnjgAfXp00cbN27UgAEDJEn+/v765JNP9PTTT+vo0aOKiorS6NGjNX/+fAUGBlpyjAAAwLdYHkCSNGPGDNcZnP9UWlp62trEiRM1ceLEZrcPDg7WX/7yF2+OBwAALjKWvwUGAADQ1gggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABjHJwJo5cqViomJUVBQkJKTk7V58+azbv/SSy/pqquuUlBQkOLi4vTGG2+4Pd/U1KTc3Fz16NFDwcHBSklJ0e7du1vzEAAAQDtieQCtX79edrtdeXl52rp1qxISEpSamqrKyspmt//www81efJk3XLLLdq2bZsmTJigCRMmaMeOHa5tlixZouXLl2v16tXatGmTOnbsqNTUVJ04caKtDgsAAPgwywOooKBA06ZNU1ZWlvr376/Vq1crJCREa9eubXb7Rx99VGlpaZo9e7b69eun+fPna9CgQSoqKpL0w9mfwsJCPfjgg7rxxhsVHx+vZ555RocOHdLGjRvb8MgAAICvusTKP7yhoUHl5eXKyclxrfn5+SklJUVlZWXNvqasrEx2u91tLTU11RU3e/bskcPhUEpKiuv50NBQJScnq6ysTJMmTTptn/X19aqvr3d9X11dLUmqqanx+NjOprG+rlX2603ne+wcS9sy8Viki+t4OJa2xbH4ptb69/XUfpuams65raUBVFVVJafTqYiICLf1iIgI7dq1q9nXOByOZrd3OByu50+tnWmb/5Sfn6958+adth4dHX1+B3IRCi20egLv4Vh808V0LNLFdTwci2/iWM7fsWPHFBoaetZtLA0gX5GTk+N2VqmxsVH//Oc/ddlll8lms1k42bnV1NQoOjpa+/fvV+fOna0eB/+Gn41v4ufiu/jZ+Kb29HNpamrSsWPHFBUVdc5tLQ2g8PBw+fv7q6Kiwm29oqJCkZGRzb4mMjLyrNuf+s+Kigr16NHDbZvExMRm9xkYGKjAwEC3tS5dulzIoViuc+fOPv9fTFPxs/FN/Fx8Fz8b39Refi7nOvNziqUXQQcEBGjw4MEqKSlxrTU2NqqkpETDhg1r9jXDhg1z216S3nrrLdf2sbGxioyMdNumpqZGmzZtOuM+AQCAWSx/C8xutyszM1NJSUkaOnSoCgsLVVtbq6ysLElSRkaGLr/8cuXn50uS7r77bo0aNUrLli3T2LFj9eKLL2rLli164oknJEk2m02zZs3SggUL1KdPH8XGxmrOnDmKiorShAkTrDpMAADgQywPoPT0dB05ckS5ublyOBxKTExUcXGx6yLmffv2yc/vXyeqhg8frueff14PPvigHnjgAfXp00cbN27UgAEDXNvcd999qq2t1W233aajR4/qmmuuUXFxsYKCgtr8+FpbYGCg8vLyTnsLD9bjZ+Ob+Ln4Ln42vuli/bnYms7ns2IAAAAXEctvhAgAANDWCCAAAGAcAggAABiHAAIAAMYhgNq5lStXKiYmRkFBQUpOTtbmzZutHslo+fn5GjJkiDp16qTu3btrwoQJ+uKLL6weC/9h0aJFrltmwHoHDx7UL3/5S1122WUKDg5WXFyctmzZYvVYxnM6nZozZ45iY2MVHBysK6+8UvPnzz+v37PVHhBA7dj69etlt9uVl5enrVu3KiEhQampqaqsrLR6NGO98847uvPOO/XRRx/prbfe0smTJzV69GjV1tZaPRr+v48//liPP/644uPjrR4Fkr777juNGDFCHTp00J///Gft3LlTy5YtU1hYmNWjGW/x4sVatWqVioqK9Pnnn2vx4sVasmSJVqxYYfVoXsHH4Nux5ORkDRkyREVFRZJ+uIt2dHS07rrrLmVnZ1s8HSTpyJEj6t69u9555x1de+21Vo9jvOPHj2vQoEF67LHHtGDBAiUmJqqwsNDqsYyWnZ2tDz74QO+9957Vo+A/jBs3ThEREfrd737nWvv5z3+u4OBg/f73v7dwMu/gDFA71dDQoPLycqWkpLjW/Pz8lJKSorKyMgsnw7+rrq6WJHXt2tXiSSBJd955p8aOHev2vxtY649//KOSkpI0ceJEde/eXQMHDtSaNWusHgv64cbDJSUl+sc//iFJ+vvf/673339fY8aMsXgy77D8TtDwTFVVlZxOp+uO2adERERo165dFk2Ff9fY2KhZs2ZpxIgRbncqhzVefPFFbd26VR9//LHVo+DffP3111q1apXsdrseeOABffzxx5o5c6YCAgKUmZlp9XhGy87OVk1Nja666ir5+/vL6XRq4cKFmjJlitWjeQUBBLSSO++8Uzt27ND7779v9SjG279/v+6++2699dZbF+WvxGnPGhsblZSUpIceekiSNHDgQO3YsUOrV68mgCy2YcMGPffcc3r++ed19dVXa/v27Zo1a5aioqIuip8NAdROhYeHy9/fXxUVFW7rFRUVioyMtGgqnDJjxgy99tprevfdd/WjH/3I6nGMV15ersrKSg0aNMi15nQ69e6776qoqEj19fXy9/e3cEJz9ejRQ/3793db69evn/7whz9YNBFOmT17trKzszVp0iRJUlxcnL755hvl5+dfFAHENUDtVEBAgAYPHqySkhLXWmNjo0pKSjRs2DALJzNbU1OTZsyYoVdeeUV/+9vfFBsba/VIkHT99dfr008/1fbt212PpKQkTZkyRdu3byd+LDRixIjTbhXxj3/8Qz179rRoIpxSV1fn9svIJcnf31+NjY0WTeRdnAFqx+x2uzIzM5WUlKShQ4eqsLBQtbW1ysrKsno0Y9155516/vnn9eqrr6pTp05yOBySpNDQUAUHB1s8nbk6dep02nVYHTt21GWXXcb1WRa75557NHz4cD300EO6+eabtXnzZj3xxBN64oknrB7NeOPHj9fChQt1xRVX6Oqrr9a2bdtUUFCgX/3qV1aP5hV8DL6dKyoq0sMPPyyHw6HExEQtX75cycnJVo9lLJvN1uz6U089palTp7btMDir//qv/+Jj8D7itddeU05Ojnbv3q3Y2FjZ7XZNmzbN6rGMd+zYMc2ZM0evvPKKKisrFRUVpcmTJys3N1cBAQFWj9diBBAAADAO1wABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAACw3depU2Wy20x5ffvlli/e9bt06denSpeVDArio8MtQAfiEtLQ0PfXUU25r3bp1s2ia5p08eVIdOnSwegwAXsAZIAA+ITAwUJGRkW4Pf39/vfrqqxo0aJCCgoLUq1cvzZs3T99//73rdQUFBYqLi1PHjh0VHR2tO+64Q8ePH5cklZaWKisrS9XV1a6zSnPnzpX0wy+u3bhxo9sMXbp00bp16yRJe/fulc1m0/r16zVq1CgFBQXpueeekyQ9+eST6tevn4KCgnTVVVfpsccec+2joaFBM2bMUI8ePRQUFKSePXsqPz+/9f7iAHiEM0AAfNZ7772njIwMLV++XCNHjtRXX32l2267TZKUl5cnSfLz89Py5csVGxurr7/+WnfccYfuu+8+PfbYYxo+fLgKCwuVm5urL774QpJ06aWXXtAM2dnZWrZsmQYOHOiKoNzcXBUVFWngwIHatm2bpk2bpo4dOyozM1PLly/XH//4R23YsEFXXHGF9u/fr/3793v3LwZAixFAAHzCa6+95hYnY8aM0Xfffafs7GxlZmZKknr16qX58+frvvvucwXQrFmzXK+JiYnRggULdPvtt+uxxx5TQECAQkNDZbPZFBkZ6dFcs2bN0s9+9jPX93l5eVq2bJlrLTY2Vjt37tTjjz+uzMxM7du3T3369NE111wjm82mnj17evTnAmhdBBAAn/Df//3fWrVqlev7jh07Kj4+Xh988IEWLlzoWnc6nTpx4oTq6uoUEhKiv/71r8rPz9euXbtUU1Oj77//3u35lkpKSnJ9XVtbq6+++kq33HKLpk2b5lr//vvvFRoaKumHC7r/53/+R3379lVaWprGjRun0aNHt3gOAN5FAAHwCR07dlTv3r3d1o4fP6558+a5nYE5JSgoSHv37tW4ceM0ffp0LVy4UF27dtX777+vW265RQ0NDWcNIJvNpqamJre1kydPNjvXv88jSWvWrFFycrLbdv7+/pKkQYMGac+ePfrzn/+sv/71r7r55puVkpKil19++Rx/AwDaEgEEwGcNGjRIX3zxxWlhdEp5ebkaGxu1bNky+fn98JmODRs2uG0TEBAgp9N52mu7deumw4cPu77fvXu36urqzjpPRESEoqKi9PXXX2vKlCln3K5z585KT09Xenq6brrpJqWlpemf//ynunbtetb9A2g7BBAAn5Wbm6tx48bpiiuu0E033SQ/Pz/9/e9/144dO7RgwQL17t1bJ0+e1IoVKzR+/Hh98MEHWr16tds+YmJidPz4cZWUlCghIUEhISEKCQnRddddp6KiIg0bNkxOp1P333//eX3Efd68eZo5c6ZCQ0OVlpam+vp6bdmyRd99953sdrsKCgrUo0cPDRw4UH5+fnrppZcUGRnJvYgAH8PH4AH4rNTUVL322mt68803NWTIEP3kJz/RI4884rqwOCEhQQUFBVq8eLEGDBig55577rSPnA8fPly333670tPT1a1bNy1ZskSStGzZMkVHR2vkyJH6xS9+oXvvvfe8rhm69dZb9eSTT+qpp55SXFycRo0apXXr1ik2NlaS1KlTJy1ZskRJSUkaMmSI9u7dqzfeeMN1hgqAb7A1/eeb4AAAABc5/i8JAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4/w/1HtacKxYZN0AAAAASUVORK5CYII=\n"},"metadata":{}}]},{"cell_type":"code","source":["N=4\n","top_features = feature_importances.head(N)['Feature'].values\n","X_train_reduced = X_train[top_features]\n","X_test_reduced = X_test[top_features]\n","\n","\n","rf_top = RandomForestClassifier(n_estimators=100, random_state=42)\n","rf_top.fit(X_train_reduced, y_train)\n","y_pred_top = rf_top.predict(X_test_reduced)\n","\n","accuracy_top = accuracy_score(y_test, y_pred_top)\n","precision_top = precision_score(y_test, y_pred_top)\n","recall_top = recall_score(y_test, y_pred_top)\n","f1_score_top = f1_score(y_test, y_pred_top)\n","\n","print(f\"Accuracy (Top {N} Features): {accuracy_top}\")\n","print(f\"Precision (Top {N} Features): {precision_top}\")\n","print(f\"Recall (Top {N} Features): {recall_top}\")\n","print(f\"F1 Score (Top {N} Features): {f1_score_top}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"pgqJkucfqOQz","executionInfo":{"status":"ok","timestamp":1760477901159,"user_tz":-60,"elapsed":491,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"199ececd-e638-4a18-88f0-2509548f21a7"},"execution_count":12,"outputs":[{"output_type":"stream","name":"stdout","text":["Accuracy (Top 4 Features): 0.7662337662337663\n","Precision (Top 4 Features): 0.6610169491525424\n","Recall (Top 4 Features): 0.7090909090909091\n","F1 Score (Top 4 Features): 0.6842105263157895\n"]}]},{"cell_type":"markdown","source":["COMPARISON"],"metadata":{"id":"AlBoc82Iqdch"}},{"cell_type":"code","source":["print(f\"Accuracy_TOP {accuracy_top} vs Accuracy {Accuracy}\")\n","print(f\"Precision_TOP {precision_top} vs Precision {Precision}\")\n","print(f\"Recall_TOP {recall_top} vs Recall {Recall}\")\n","print(f\"F1 Score_TOP {f1_score_top} vs F1 Score {F1_Score}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"LEkROicAqYmp","executionInfo":{"status":"ok","timestamp":1760477943268,"user_tz":-60,"elapsed":47,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"5596cb09-c918-4f14-c05c-d0dca325c58c"},"execution_count":13,"outputs":[{"output_type":"stream","name":"stdout","text":["Accuracy_TOP 0.7662337662337663 vs Accuracy 0.7532467532467533\n","Precision_TOP 0.6610169491525424 vs Precision 0.6440677966101694\n","Recall_TOP 0.7090909090909091 vs Recall 0.6909090909090909\n","F1 Score_TOP 0.6842105263157895 vs F1 Score 0.6666666666666666\n"]}]},{"cell_type":"markdown","source":["PCA"],"metadata":{"id":"9OXftaQUqfmp"}},{"cell_type":"code","source":["pca = PCA(n_components=2)\n","X_train_pca = pca.fit_transform(X_train)\n","X_test_pca = pca.transform(X_test)"],"metadata":{"id":"3nUQE8kRqhdu","executionInfo":{"status":"ok","timestamp":1760478004731,"user_tz":-60,"elapsed":26,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}}},"execution_count":15,"outputs":[]},{"cell_type":"code","source":["from re import A\n","X_train_reduced = X_train_pca\n","X_test_reduced = X_test_pca\n","\n","rf_pca = RandomForestClassifier(n_estimators=100, random_state=42)\n","rf_pca.fit(X_train_reduced, y_train)\n","y_pred_pca = rf_pca.predict(X_test_reduced)\n","\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_Score_PCA = f1_score(y_test, y_pred_pca)\n","\n","print(f\"Accuracy (PCA): {Accuracy_PCA}\")\n","print(f\"Precision (PCA): {Precision_PCA}\")\n","print(f\"Recall (PCA): {Recall_PCA}\")\n","print(f\"F1 Score (PCA): {F1_Score_PCA}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"MLINaAG1qrcS","executionInfo":{"status":"ok","timestamp":1760478019570,"user_tz":-60,"elapsed":283,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"4320ce1d-17b1-4bb5-a339-0bb9722f1eaf"},"execution_count":16,"outputs":[{"output_type":"stream","name":"stdout","text":["Accuracy (PCA): 0.5714285714285714\n","Precision (PCA): 0.3877551020408163\n","Recall (PCA): 0.34545454545454546\n","F1 Score (PCA): 0.36538461538461536\n"]}]},{"cell_type":"markdown","source":["LOGISTIC REGRESSION"],"metadata":{"id":"jAjvZChJquwC"}},{"cell_type":"code","source":["lr = LogisticRegression(max_iter=1000 , random_state=42)\n","lr.fit(X_train, y_train)\n","y_pred_lr = lr.predict(X_test)\n","\n","accuracy_lr = accuracy_score(y_test, y_pred_lr)\n","precision_lr = precision_score(y_test, y_pred_lr)\n","recall_lr = recall_score(y_test, y_pred_lr)\n","f1_score_lr = f1_score(y_test, y_pred_lr)\n","\n","print(f\"Accuracy (Logistic Regression): {accuracy_lr}\")\n","print(f\"Precision (Logistic Regression): {precision_lr}\")\n","print(f\"Recall (Logistic Regression): {recall_lr}\")\n","print(f\"F1 Score (Logistic Regression): {f1_score_lr}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"RA5NpJOvqsch","executionInfo":{"status":"ok","timestamp":1760478044541,"user_tz":-60,"elapsed":839,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"3c964eeb-e0de-45d2-fd56-3fde95ba7140"},"execution_count":17,"outputs":[{"output_type":"stream","name":"stdout","text":["Accuracy (Logistic Regression): 0.7532467532467533\n","Precision (Logistic Regression): 0.6491228070175439\n","Recall (Logistic Regression): 0.6727272727272727\n","F1 Score (Logistic Regression): 0.6607142857142857\n"]}]},{"cell_type":"markdown","source":["NAIVE BAYES"],"metadata":{"id":"PK4A6Y6oq1Lt"}},{"cell_type":"code","source":["nb = GaussianNB()\n","nb.fit(X_train, y_train)\n","y_pred_nb = nb.predict(X_test)\n","\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_score_nb = f1_score(y_test, y_pred_nb)\n","\n","print(f\"Accuracy (Naive Bayes): {accuracy_nb}\")\n","print(f\"Precision (Naive Bayes): {precision_nb}\")\n","print(f\"Recall (Naive Bayes): {recall_nb}\")\n","print(f\"F1 Score (Naive Bayes): {f1_score_nb}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8pHAvCMFqyt8","executionInfo":{"status":"ok","timestamp":1760478070499,"user_tz":-60,"elapsed":52,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"b075d22c-d9cf-4a68-9b5a-4124b5e34ca6"},"execution_count":18,"outputs":[{"output_type":"stream","name":"stdout","text":["Accuracy (Naive Bayes): 0.7597402597402597\n","Precision (Naive Bayes): 0.65\n","Recall (Naive Bayes): 0.7090909090909091\n","F1 Score (Naive Bayes): 0.6782608695652174\n"]}]},{"cell_type":"markdown","source":["COMPARISON"],"metadata":{"id":"nKDlMLygq63D"}},{"cell_type":"code","source":["compare = pd.DataFrame({\n","    'Model': ['Random Forest', 'PCA', 'Logistic Regression', 'Naive Bayes'],\n","    'Accuracy': [Accuracy, Accuracy_PCA, accuracy_lr, accuracy_nb],\n","    'Precision': [Precision, Precision_PCA ,precision_lr, precision_nb],\n","    'Recall': [Recall, Recall_PCA, recall_lr, recall_nb],\n","    'F1 Score': [F1_Score, F1_Score_PCA, f1_score_lr, f1_score_nb]\n","})\n","\n","print(compare)"],"metadata":{"id":"d27oB5Jyq6gH","executionInfo":{"status":"ok","timestamp":1760478094681,"user_tz":-60,"elapsed":45,"user":{"displayName":"Patel Shivam","userId":"17668739110627672419"}},"outputId":"f50c4e9f-41cc-4073-e999-5eba0786f65f","colab":{"base_uri":"https://localhost:8080/"}},"execution_count":19,"outputs":[{"output_type":"stream","name":"stdout","text":["                 Model  Accuracy  Precision    Recall  F1 Score\n","0        Random Forest  0.753247   0.644068  0.690909  0.666667\n","1                  PCA  0.571429   0.387755  0.345455  0.365385\n","2  Logistic Regression  0.753247   0.649123  0.672727  0.660714\n","3          Naive Bayes  0.759740   0.650000  0.709091  0.678261\n"]}]}]}