[06cc32]: / liver_prediction.ipynb

Download this file

4755 lines (4754 with data), 286.1 kB

{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "073c1361-bcae-45d9-ad98-a07133b4f412",
   "metadata": {},
   "source": [
    "Liver Disease Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ce0cfb84-91cc-46d0-9971-3478aa0045a4",
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'seaborn'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[1], line 3\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpd\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mseaborn\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01msns\u001b[39;00m\n\u001b[0;32m      4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m pyplot \u001b[38;5;28;01mas\u001b[39;00m plt\n\u001b[0;32m      6\u001b[0m \u001b[38;5;66;03m# Ignore Warnings\u001b[39;00m\n",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'seaborn'"
     ]
    }
   ],
   "source": [
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "# Ignore Warnings\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "from math import sqrt\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "plt.style.use('ggplot')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "id": "5d94117e-65b4-4806-b4d4-36eab6594700",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Gender of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Sgot Aspartate Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "      <th>Result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>65.0</td>\n",
       "      <td>Female</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.1</td>\n",
       "      <td>187.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>6.8</td>\n",
       "      <td>3.3</td>\n",
       "      <td>0.90</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>62.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>10.9</td>\n",
       "      <td>5.5</td>\n",
       "      <td>699.0</td>\n",
       "      <td>64.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>7.5</td>\n",
       "      <td>3.2</td>\n",
       "      <td>0.74</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>62.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>7.3</td>\n",
       "      <td>4.1</td>\n",
       "      <td>490.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>68.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>3.3</td>\n",
       "      <td>0.89</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>58.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.4</td>\n",
       "      <td>182.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>6.8</td>\n",
       "      <td>3.4</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>72.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>3.9</td>\n",
       "      <td>2.0</td>\n",
       "      <td>195.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>7.3</td>\n",
       "      <td>2.4</td>\n",
       "      <td>0.40</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Age of the patient Gender of the patient  Total Bilirubin  \\\n",
       "0                65.0                Female              0.7   \n",
       "1                62.0                  Male             10.9   \n",
       "2                62.0                  Male              7.3   \n",
       "3                58.0                  Male              1.0   \n",
       "4                72.0                  Male              3.9   \n",
       "\n",
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
       "0               0.1                          187.0   \n",
       "1               5.5                          699.0   \n",
       "2               4.1                          490.0   \n",
       "3               0.4                          182.0   \n",
       "4               2.0                          195.0   \n",
       "\n",
       "    Sgpt Alamine Aminotransferase  Sgot Aspartate Aminotransferase  \\\n",
       "0                            16.0                             18.0   \n",
       "1                            64.0                            100.0   \n",
       "2                            60.0                             68.0   \n",
       "3                            14.0                             20.0   \n",
       "4                            27.0                             59.0   \n",
       "\n",
       "   Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
       "0             6.8           3.3                                  0.90       1  \n",
       "1             7.5           3.2                                  0.74       1  \n",
       "2             7.0           3.3                                  0.89       1  \n",
       "3             6.8           3.4                                  1.00       1  \n",
       "4             7.3           2.4                                  0.40       1  "
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df=pd.read_csv(r'datasets\\Liver.csv',encoding='ISO-8859-1')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "id": "2a8f3ab1-5de2-4b9d-9aa9-8cc2d1e8e6f7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Gender of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Aspartate_Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "      <th>Result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>65.0</td>\n",
       "      <td>Female</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.1</td>\n",
       "      <td>187.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>6.8</td>\n",
       "      <td>3.3</td>\n",
       "      <td>0.90</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>62.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>10.9</td>\n",
       "      <td>5.5</td>\n",
       "      <td>699.0</td>\n",
       "      <td>64.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>7.5</td>\n",
       "      <td>3.2</td>\n",
       "      <td>0.74</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>62.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>7.3</td>\n",
       "      <td>4.1</td>\n",
       "      <td>490.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>68.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>3.3</td>\n",
       "      <td>0.89</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>58.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.4</td>\n",
       "      <td>182.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>6.8</td>\n",
       "      <td>3.4</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>72.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>3.9</td>\n",
       "      <td>2.0</td>\n",
       "      <td>195.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>7.3</td>\n",
       "      <td>2.4</td>\n",
       "      <td>0.40</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Age of the patient Gender of the patient  Total Bilirubin  \\\n",
       "0                65.0                Female              0.7   \n",
       "1                62.0                  Male             10.9   \n",
       "2                62.0                  Male              7.3   \n",
       "3                58.0                  Male              1.0   \n",
       "4                72.0                  Male              3.9   \n",
       "\n",
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
       "0               0.1                          187.0   \n",
       "1               5.5                          699.0   \n",
       "2               4.1                          490.0   \n",
       "3               0.4                          182.0   \n",
       "4               2.0                          195.0   \n",
       "\n",
       "    Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  Total Protiens  \\\n",
       "0                            16.0                        18.0             6.8   \n",
       "1                            64.0                       100.0             7.5   \n",
       "2                            60.0                        68.0             7.0   \n",
       "3                            14.0                        20.0             6.8   \n",
       "4                            27.0                        59.0             7.3   \n",
       "\n",
       "    ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
       "0           3.3                                  0.90       1  \n",
       "1           3.2                                  0.74       1  \n",
       "2           3.3                                  0.89       1  \n",
       "3           3.4                                  1.00       1  \n",
       "4           2.4                                  0.40       1  "
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "column_rename_dict = {\n",
    "    'Sgot Aspartate Aminotransferase': 'Aspartate_Aminotransferase'\n",
    "}\n",
    "\n",
    "df.rename(columns=column_rename_dict, inplace=True)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "id": "beafdf96",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1]\n",
      "M\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "input_data =(26.0,0,0.7,0.2,185.0,16.0,22.0,7.3,3.7,1.00\n",
    ")\n",
    "#100,12,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1) \n",
    "\n",
    "'''(14.36,0.09779,0.08129,0.04781,0.1885,0.05766,0.7886,23.56,0.008462,\n",
    "0.0146,0.02387,0.01315,0.0198,0.0023,15.11,711.2,0.144,0.1773,0.239,0.1288,0.2977,0.07259\n",
    ")'''\n",
    "\n",
    "input_data_as_numpy_array = np.asarray(input_data)\n",
    "\n",
    "# reshape the array as we are predicting for one instance\n",
    "input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
    "predictions = svc.predict(input_data_reshaped)\n",
    "print(predictions)\n",
    "if (predictions == 0):\n",
    "  print('B')\n",
    "else:\n",
    "  print('M')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "id": "da3fe93c-cf85-44bd-b380-6b76b8047fba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(30691, 11)"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ffcf663-aa04-47bc-9006-68315a8e1cf6",
   "metadata": {},
   "source": [
    "\n",
    "Exploratory Data Analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "id": "40315d82-475f-439f-aa15-cb287393b7a7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5425"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.isna().sum().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "id": "2ce172d1-e6ec-46a3-941c-bb414dab5192",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Age of the patient                      0\n",
       "Gender of the patient                   0\n",
       "Total Bilirubin                         0\n",
       "Direct Bilirubin                        0\n",
       " Alkphos Alkaline Phosphotase           0\n",
       " Sgpt Alamine Aminotransferase          0\n",
       "Aspartate_Aminotransferase              0\n",
       "Total Protiens                          0\n",
       " ALB Albumin                            0\n",
       "A/G Ratio Albumin and Globulin Ratio    0\n",
       "Result                                  0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.dropna()\n",
    "df.isna().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b58e5846-2b1f-45a7-8689-57a17d124404",
   "metadata": {},
   "source": [
    "Distribution of Numerical Features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "id": "4716666d-5d2e-4d7c-a366-5907ce220b57",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Gender of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Aspartate_Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "      <th>Result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5090</th>\n",
       "      <td>29.0</td>\n",
       "      <td>Female</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.6</td>\n",
       "      <td>166.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>42.0</td>\n",
       "      <td>5.6</td>\n",
       "      <td>2.5</td>\n",
       "      <td>0.80</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3055</th>\n",
       "      <td>16.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.1</td>\n",
       "      <td>186.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>6.2</td>\n",
       "      <td>3.3</td>\n",
       "      <td>1.10</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24182</th>\n",
       "      <td>38.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>1.1</td>\n",
       "      <td>0.5</td>\n",
       "      <td>128.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>30.0</td>\n",
       "      <td>3.9</td>\n",
       "      <td>1.9</td>\n",
       "      <td>0.95</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30230</th>\n",
       "      <td>60.0</td>\n",
       "      <td>Female</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.7</td>\n",
       "      <td>195.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>7.9</td>\n",
       "      <td>3.7</td>\n",
       "      <td>0.90</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20921</th>\n",
       "      <td>56.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2.1</td>\n",
       "      <td>103.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2.1</td>\n",
       "      <td>1.72</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Age of the patient Gender of the patient  Total Bilirubin  \\\n",
       "5090                 29.0                Female              1.3   \n",
       "3055                 16.0                  Male              0.6   \n",
       "24182                38.0                  Male              1.1   \n",
       "30230                60.0                Female              1.4   \n",
       "20921                56.0                  Male              5.0   \n",
       "\n",
       "       Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
       "5090                0.6                          166.0   \n",
       "3055                0.1                          186.0   \n",
       "24182               0.5                          128.0   \n",
       "30230               0.7                          195.0   \n",
       "20921               2.1                          103.0   \n",
       "\n",
       "        Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  \\\n",
       "5090                             49.0                        42.0   \n",
       "3055                             20.0                        21.0   \n",
       "24182                            20.0                        30.0   \n",
       "30230                            36.0                        16.0   \n",
       "20921                            18.0                        40.0   \n",
       "\n",
       "       Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  \\\n",
       "5090              5.6           2.5                                  0.80   \n",
       "3055              6.2           3.3                                  1.10   \n",
       "24182             3.9           1.9                                  0.95   \n",
       "30230             7.9           3.7                                  0.90   \n",
       "20921             5.0           2.1                                  1.72   \n",
       "\n",
       "       Result  \n",
       "5090        2  \n",
       "3055        2  \n",
       "24182       2  \n",
       "30230       2  \n",
       "20921       1  "
      ]
     },
     "execution_count": 139,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sample(5)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "id": "fd8f4fb9-7d74-49c2-ad94-284b09263880",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Aspartate_Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "      <th>Result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>27158.000000</td>\n",
       "      <td>27158.000000</td>\n",
       "      <td>27158.000000</td>\n",
       "      <td>27158.000000</td>\n",
       "      <td>27158.000000</td>\n",
       "      <td>27158.000000</td>\n",
       "      <td>27158.000000</td>\n",
       "      <td>27158.000000</td>\n",
       "      <td>27158.000000</td>\n",
       "      <td>27158.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>44.125046</td>\n",
       "      <td>3.407909</td>\n",
       "      <td>1.541630</td>\n",
       "      <td>290.142021</td>\n",
       "      <td>81.279292</td>\n",
       "      <td>112.102879</td>\n",
       "      <td>6.472605</td>\n",
       "      <td>3.124044</td>\n",
       "      <td>0.943567</td>\n",
       "      <td>1.282790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>15.971563</td>\n",
       "      <td>6.332486</td>\n",
       "      <td>2.895084</td>\n",
       "      <td>239.595473</td>\n",
       "      <td>181.571537</td>\n",
       "      <td>283.616005</td>\n",
       "      <td>1.081477</td>\n",
       "      <td>0.792329</td>\n",
       "      <td>0.324205</td>\n",
       "      <td>0.450363</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>2.700000</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0.300000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>33.000000</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>175.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>26.000000</td>\n",
       "      <td>5.800000</td>\n",
       "      <td>2.600000</td>\n",
       "      <td>0.700000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>45.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.300000</td>\n",
       "      <td>209.000000</td>\n",
       "      <td>36.000000</td>\n",
       "      <td>42.000000</td>\n",
       "      <td>6.600000</td>\n",
       "      <td>3.100000</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>55.000000</td>\n",
       "      <td>2.700000</td>\n",
       "      <td>1.300000</td>\n",
       "      <td>298.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>88.000000</td>\n",
       "      <td>7.200000</td>\n",
       "      <td>3.700000</td>\n",
       "      <td>1.100000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>90.000000</td>\n",
       "      <td>75.000000</td>\n",
       "      <td>19.700000</td>\n",
       "      <td>2110.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>4929.000000</td>\n",
       "      <td>9.600000</td>\n",
       "      <td>5.500000</td>\n",
       "      <td>2.800000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Age of the patient  Total Bilirubin  Direct Bilirubin  \\\n",
       "count        27158.000000     27158.000000      27158.000000   \n",
       "mean            44.125046         3.407909          1.541630   \n",
       "std             15.971563         6.332486          2.895084   \n",
       "min              4.000000         0.400000          0.100000   \n",
       "25%             33.000000         0.800000          0.200000   \n",
       "50%             45.000000         1.000000          0.300000   \n",
       "75%             55.000000         2.700000          1.300000   \n",
       "max             90.000000        75.000000         19.700000   \n",
       "\n",
       "        Alkphos Alkaline Phosphotase   Sgpt Alamine Aminotransferase  \\\n",
       "count                   27158.000000                    27158.000000   \n",
       "mean                      290.142021                       81.279292   \n",
       "std                       239.595473                      181.571537   \n",
       "min                        63.000000                       10.000000   \n",
       "25%                       175.000000                       23.000000   \n",
       "50%                       209.000000                       36.000000   \n",
       "75%                       298.000000                       62.000000   \n",
       "max                      2110.000000                     2000.000000   \n",
       "\n",
       "       Aspartate_Aminotransferase  Total Protiens   ALB Albumin  \\\n",
       "count                27158.000000    27158.000000  27158.000000   \n",
       "mean                   112.102879        6.472605      3.124044   \n",
       "std                    283.616005        1.081477      0.792329   \n",
       "min                     10.000000        2.700000      0.900000   \n",
       "25%                     26.000000        5.800000      2.600000   \n",
       "50%                     42.000000        6.600000      3.100000   \n",
       "75%                     88.000000        7.200000      3.700000   \n",
       "max                   4929.000000        9.600000      5.500000   \n",
       "\n",
       "       A/G Ratio Albumin and Globulin Ratio        Result  \n",
       "count                          27158.000000  27158.000000  \n",
       "mean                               0.943567      1.282790  \n",
       "std                                0.324205      0.450363  \n",
       "min                                0.300000      1.000000  \n",
       "25%                                0.700000      1.000000  \n",
       "50%                                0.900000      1.000000  \n",
       "75%                                1.100000      2.000000  \n",
       "max                                2.800000      2.000000  "
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "id": "a5454137-8361-4e5e-90b5-88a55e8cd37e",
   "metadata": {},
   "outputs": [],
   "source": [
    "## if score==negative, mark 0 ;else 1 \n",
    "def partition(x):\n",
    "    if x == 2:\n",
    "        return 0\n",
    "    return 1\n",
    "\n",
    "\n",
    "df['Result'] = df['Result'].map(partition)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "id": "047d3234-04c3-47f3-8027-4f6a959c9a33",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of patients that are male:  19478\n",
      "Number of patients that are female:  7680\n"
     ]
    },
    {
     "data": {
      "image/png": "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/D/vBNxhIhYsq9fxbTbbdd8T5VMhqjEiRAEwixAF1ORLIcqnLucBAAD4C0IUAACACYQoAAAAEwhRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwwHaI+//xzORyOOtsdDoc+//xzs8MDAAD4NNMh6p133lFeXl6d7cePH9c777xjdngAAACfVm+X8y5fvqzAwMD6Gh4AAKBBWW+k86lTp1RQUGBsHz58WJWVlTX6Xbx4UX/5y18UERFx0wUCAAD4ohsKUXv37lVmZqaxvW3bNm3btq3Wvs2bN9cLL7xwc9UBAAD4qBsKUf3799cDDzwgj8ejl19+WSNHjlS3bt1q9GvWrJnatWvH5TwAANBo3VCIatmypVq2bClJeuWVV3TXXXcpLCysXgoDAADwZTcUoq51zz333Mo6AAAA/IrpECVJBw4c0GeffSaHw6GLFy/K4/F4tVssFr399ts3VSAAAIAvMh2iNmzYoJUrV8put+vuu+9Wp06dbmVdAAAAPs10iNqyZYvuu+8+/b//9/9ktd7UhBYAAIDfMb3Y5sWLF/WjH/2IAAUAAO5IpkNUbGyszp49eytrAQAA8BumQ9S4ceO0d+9e7dq161bWAwAA4BdMX4v7/e9/r8rKSr399ttaunSpWrdurYAA70xmsVi0YMGCmy4SAADA15gOUSEhIWrRogW/jwcAAO5IpkPUrFmzbmEZAAAA/sX0PVEAAAB3MtMzUbm5udfVj5+HAQAAjZHpEDV79uzr6rd69WqzLwEAAOCzTIeoV155pca+qqoqORwOffrpp6qqqtKYMWNuqjgAAABfZTpEfd9lupSUFL3yyivKycnRfffdd91j5ubmasOGDTp58qRKSko0depU9ejRw2j3eDxas2aNPv30U128eFFdunTR+PHjvb4hWFZWpvfee09fffWVLBaLevbsqWeffVbNmjUz+pw6dUrp6ek6ceKEQkNDNXDgQD3xxBNetezZs0erV6+W0+lU+/btNWbMGHXv3v26jwUAADRu9XJjeUBAgB566CF99tlnN/S8K1euKDo6WuPGjau1ff369froo480YcIE/e53v1PTpk01d+5cXb161ejz1ltvqbCwUNOnT9dLL72kw4cP69133zXay8vLNWfOHLVp00bz58/XU089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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "sns.countplot(data=df, x = 'Result', label='Count')\n",
    "\n",
    "M, F = df['Result'].value_counts()\n",
    "print('Number of patients that are male: ',M)\n",
    "print('Number of patients that are female: ',F)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "id": "bad0e537-76f6-4224-b489-bd47eab5e849",
   "metadata": {},
   "outputs": [],
   "source": [
    "## if score==negative, mark 0 ;else 1 \n",
    "def partition(x):\n",
    "    if x =='Male':\n",
    "        return 0\n",
    "    return 1\n",
    "\n",
    "df['Gender of the patient'] = df['Gender of the patient'].map(partition)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "id": "5943a716",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Gender of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Aspartate_Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "      <th>Result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>52.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.9</td>\n",
       "      <td>0.2</td>\n",
       "      <td>116.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>6.2</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.00</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>36.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.2</td>\n",
       "      <td>188.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>5.5</td>\n",
       "      <td>2.3</td>\n",
       "      <td>0.71</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>28.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.1</td>\n",
       "      <td>162.0</td>\n",
       "      <td>155.0</td>\n",
       "      <td>108.0</td>\n",
       "      <td>8.1</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.90</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>49.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.2</td>\n",
       "      <td>188.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.10</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>51.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.3</td>\n",
       "      <td>75.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>5.1</td>\n",
       "      <td>2.9</td>\n",
       "      <td>1.30</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Age of the patient  Gender of the patient  Total Bilirubin  \\\n",
       "0                52.0                      1              0.9   \n",
       "1                36.0                      1              0.7   \n",
       "2                28.0                      0              0.5   \n",
       "3                49.0                      0              0.7   \n",
       "4                51.0                      0              1.0   \n",
       "\n",
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
       "0               0.2                          116.0   \n",
       "1               0.2                          188.0   \n",
       "2               0.1                          162.0   \n",
       "3               0.2                          188.0   \n",
       "4               0.3                           75.0   \n",
       "\n",
       "    Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  Total Protiens  \\\n",
       "0                            36.0                        16.0             6.2   \n",
       "1                            11.0                        10.0             5.5   \n",
       "2                           155.0                       108.0             8.1   \n",
       "3                            13.0                        21.0             6.0   \n",
       "4                            25.0                        26.0             5.1   \n",
       "\n",
       "    ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
       "0           3.2                                  1.00       0  \n",
       "1           2.3                                  0.71       0  \n",
       "2           4.0                                  0.90       1  \n",
       "3           3.2                                  1.10       0  \n",
       "4           2.9                                  1.30       1  "
      ]
     },
     "execution_count": 161,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "id": "39cc88eb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Filter rows for each class\n",
    "class_0 = df[df['Result'] == 0]  # Replace 'target' with your column name\n",
    "class_1 = df[df['Result'] == 1]\n",
    "\n",
    "# Downsample class 1 to 10,000 samples\n",
    "class_1_downsampled = class_1.sample(n=10000, random_state=42)\n",
    "\n",
    "# Combine the two classes\n",
    "df = pd.concat([class_0, class_1_downsampled])\n",
    "\n",
    "# Shuffle the resulting DataFrame to mix the classes\n",
    "df = balanced_df.sample(frac=1, random_state=42).reset_index(drop=True)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "id": "24000c18",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of patients that are male:  10000\n",
      "Number of patients that are female:  7680\n"
     ]
    },
    {
     "data": {
      "image/png": "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U1MlSV26dFFJSYk++OADpaWlWWeLysrKFB0dbb2vrKxM8fHxki6eUSovL/fabk1NjSoqKqz3R0VFWWel6tS9rhsDAACubwH103nnz59XUJD3lIOCgqwqjY2NVVRUlL755htrvcvlUn5+vhITEyVdvK+qsrJSBQUF1picnBx5PB4lJCRYY3Jzc70uwx04cEAdO3a85KU8AABw/QmoiOrfv7/Wr1+vr776SsXFxdqzZ482b95s/SSezWbTyJEjtX79eu3bt08nTpzQsmXLFB0dbY2Ji4tTSkqKli9frvz8fB0+fFgrV67UkCFDFBMTI0m69dZbZbfb9eabb6qwsFBZWVnaunWr1z1PAADg+mbz+NPFxZ9RVVWl1atXa8+ePSorK1NMTIxSU1M1fvx46yfp6h62mZmZKZfLpV69emnq1Knq2LGjtZ2Kigqlp6d7PWxzypQpl33YZuvWrTVixAiNHTv2qudcUlLi9egDALhSp38/zddTAPxOh6UrmnT7Dofjim8sD6iICkREFABTRBRQnz9FVEBdzgMAAPAXRBQAAIABIgoAAMBAQD0nCvVxzwRQX1PfMwEAEmeiAAAAjBBRAAAABogoAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwQEQBAAAYIKIAAAAMEFEAAAAGiCgAAAADRBQAAIABIgoAAMAAEQUAAGCAiAIAADBARAEAABggogAAAAwQUQAAAAaIKAAAAANEFAAAgAEiCgAAwAARBQAAYICIAgAAMEBEAQAAGCCiAAAADBBRAAAABogoAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwQEQBAAAYIKIAAAAMEFEAAAAGiCgAAAADRBQAAIABIgoAAMAAEQUAAGCAiAIAADBARAEAABggogAAAAwQUQAAAAaIKAAAAANEFAAAgAEiCgAAwAARBQAAYICIAgAAMEBEAQAAGCCiAAAADBBRAAAABogoAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwYPf1BK7W2bNn9c477yg7O1vnz59X+/btNWPGDPXo0UOS5PF4tGbNGu3YsUOVlZXq1auXpk2bpg4dOljbqKio0MqVK7V//37ZbDYNGjRIDz/8sFq2bGmN+e6775Senq5jx44pIiJCI0aM0JgxY675/gIAAP8UUBFVUVGhefPm6eabb9acOXMUERGh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q5vN/yPGT6uqqtKzzz6rZ599VqGhob6eDoBGxPGNyyGiLiMiIkJBQUFyOp1ey51OZ72zU9LF04sE0/XL4/Ho22+/lcfj8fVUADQyjm9cDjeWX4bdblf37t2Vk5NjLautrVVOTo4SExN9ODMAAOAPOBP1E0aPHq3XXntN3bt3V0JCgrZs2aLz588rLS3N11MDAAA+RkT9hCFDhqi8vFxr1qyR0+lUfHy85syZc8nLebi+ORwOjR8/nku6QDPE8Y3LsXm4yAsAAHDVuCcKAADAABEFAABggIgCAAAwQEQBAAAY4KfzgEawbds2ffjhh3I6nerataumTJmihIQEX08LQAMcOnRImzZt0rfffqvS0lI9+eSTGjhwoK+nBT/CmSiggbKyspSRkaHx48dryZIl6tq1qxYuXKiysjJfTw1AA5w/f17x8fGaOnWqr6cCP0VEAQ20efNm3X777Ro2bJji4uI0ffp0tWjRQp999pmvpwagAfr166f77ruPs0+4LCIKaAC3262CggIlJSVZy4KCgpSUlKS8vDwfzgwA0NSIKKABysvLVVtbW+8p9lFRUfV+eTUAoHkhogAAAAwQUUADREREKCgoqN5ZJ6fTye9YBIBmjogCGsBut6t79+7KycmxltXW1ionJ0eJiYk+nBkAoKnxnCiggUaPHq3XXntN3bt3V0JCgrZs2aLz588rLS3N11MD0ADnzp3T999/b70uLi7W8ePHFR4errZt2/pwZvAXNo/H4/H1JIBAt23bNm3atElOp1Px8fF6+OGH1bNnT19PC0ADHDx4UPPnz6+3fOjQoZo5c6YPZgR/Q0QBAAAY4J4oAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwQEQBAAAYIKIAAAAMEFEAAAAGiCgA8IEJEyZozZo1vp4GgAbgd+cBaJZ27typ119/3XodFBSkyMhI9e3bV/fff79iYmJ8OLv6jhw5oq+//lqjRo1SWFiYr6cD4AoQUQCatQkTJig2NlbV1dU6evSodu7cqcOHD+uFF15QixYtfD09y5EjR7Ru3TqlpaURUUCAIKIANGv9+vVTjx49JEm33367WrdurY0bN2rfvn0aMmSIj2cHIJARUQCuK71799bGjRv197//3Vp26tQpvf/++8rJydGFCxfUuXNnjR8/Xrfccos1xu12a8OGDfr888/1v//7vwoJCVGnTp30r//6r+rbt68k6dlnn/X6u85rr72mQ4cO6bXXXrvknNasWaN169ZJkmbNmmUtX7ZsmWJjYxtjtwE0ASIKwHWluLhYkqxLZoWFhZo3b55iYmI0duxYhYSEaPfu3Vq6dKl+97vfaeDAgZKktWvX6oMPPtBtt92mhIQEVVVV6dixYyooKLAiytSgQYN0+vRpffHFF5o8ebJat24tSYqIiGjQdgE0LSIKQLPmcrlUXl5u3RO1bt06ORwO9e/fX5K0atUqtW3bVosWLZLD4ZAkDR8+XE8//bTeffddK6K++uor9evXT7/5zW8afY5du3ZVt27d9MUXX2jAgAGcfQICBBEFoFn7r//6L6/X7dq106OPPqo2bdqooqJCOTk5mjBhgqqqqlRVVWWNS05O1po1a3T27FnFxMQoLCxMhYWFOn36tDp06HCtdwOAHyKiADRrU6dOVYcOHeRyufTZZ58pNzfXOuP0/fffy+PxaPXq1Vq9evUl319WVqaYmBhNmDBBS5cu1eOPP67OnTsrJSVF//zP/6yuXbtey90B4EeIKADNWkJCgvXTeQMHDtS8efP08ssv6+WXX1Ztba0k6V/+5V+UnJx8yfe3b99eknTTTTfp1Vdf1d69e/X111/r008/1UcffaTp06fr9ttvlyTZbDZ5PJ5626j7HADNCxEF4LoRFBSkBx54QPPnz9e2bds0bNgwSVJwcPAV3RweHh6uYcOGadiwYTp37pyeeeYZrV271oqosLAwr5/6q3PmzJmf3bbNZrvKvQHga/zaFwDXlZtvvlkJCQn66KOPFBoaqptvvlmZmZkqLS2tN7a8vNz69w8//OC1rmXLlrrhhhtUXV1tLbvhhhtUVFTk9b7jx4/r8OHDPzuvkJAQSRdvhAcQGDgTBeC6c/fdd+vFF1/Uzp07NXXqVM2bN09PPvmkbr/9dsXGxqqsrEx5eXk6e/asli5dKkl64okndNNNN6l79+4KDw/XsWPH9OWXX2r48OHWdocNG6bNmzdr4cKFGjZsmMrLy7V9+3Z17tzZ66b1S+nevbsk6b333lNqaqqCg4PVv39/tWzZsum+EAAahIgCcN0ZOHCgbrjhBn344Ye64447tHjxYq1du1Y7d+7UDz/8oMjISMXHx+vee++13nPXXXdp3759OnDggKqrq9WuXTtNnDhRd999tzUmLi5Os2bN0po1a5SRkWG93rVrlw4dOvSTc0pISNDEiRO1fft2ZWdny+PxaNmyZUQU4MdsnkvdBQkAAICfxD1RAAAABogoAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwQEQBAAAYIKIAAAAMEFEAAAAGiCgAAAADRBQAAIABIgoAAMDA/wF/c0g/H9/HlQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "sns.countplot(data=df, x = 'Result', label='Count')\n",
    "\n",
    "M, F = df['Result'].value_counts()\n",
    "print('Number of patients that are male: ',M)\n",
    "print('Number of patients that are female: ',F)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "id": "ca0ada46-6d91-41c6-b6dc-a11dddf657d2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Gender of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Aspartate_Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "      <th>Result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>52.0</td>\n",
       "      <td>Female</td>\n",
       "      <td>0.9</td>\n",
       "      <td>0.2</td>\n",
       "      <td>116.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>6.2</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.00</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>36.0</td>\n",
       "      <td>Female</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.2</td>\n",
       "      <td>188.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>5.5</td>\n",
       "      <td>2.3</td>\n",
       "      <td>0.71</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>28.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.1</td>\n",
       "      <td>162.0</td>\n",
       "      <td>155.0</td>\n",
       "      <td>108.0</td>\n",
       "      <td>8.1</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.90</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>49.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.2</td>\n",
       "      <td>188.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.10</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>51.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.3</td>\n",
       "      <td>75.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>5.1</td>\n",
       "      <td>2.9</td>\n",
       "      <td>1.30</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Age of the patient Gender of the patient  Total Bilirubin  \\\n",
       "0                52.0                Female              0.9   \n",
       "1                36.0                Female              0.7   \n",
       "2                28.0                  Male              0.5   \n",
       "3                49.0                  Male              0.7   \n",
       "4                51.0                  Male              1.0   \n",
       "\n",
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
       "0               0.2                          116.0   \n",
       "1               0.2                          188.0   \n",
       "2               0.1                          162.0   \n",
       "3               0.2                          188.0   \n",
       "4               0.3                           75.0   \n",
       "\n",
       "    Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  Total Protiens  \\\n",
       "0                            36.0                        16.0             6.2   \n",
       "1                            11.0                        10.0             5.5   \n",
       "2                           155.0                       108.0             8.1   \n",
       "3                            13.0                        21.0             6.0   \n",
       "4                            25.0                        26.0             5.1   \n",
       "\n",
       "    ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
       "0           3.2                                  1.00       0  \n",
       "1           2.3                                  0.71       0  \n",
       "2           4.0                                  0.90       1  \n",
       "3           3.2                                  1.10       0  \n",
       "4           2.9                                  1.30       1  "
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6b6b87ad",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "2c629af8-771d-46a6-9689-d8167458d448",
   "metadata": {},
   "source": [
    "Data Cleaning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "id": "9a11c005-9add-4b4d-b1a2-b21bc2496d87",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(12181, 11)\n"
     ]
    }
   ],
   "source": [
    "df = df.drop_duplicates()\n",
    "print( df.shape )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcfbdec2-af4a-4159-9eba-31573a5d2fba",
   "metadata": {},
   "source": [
    "Removing Outliers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "id": "a0bfed13-3cff-43cd-893b-5729743fab71",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: ylabel='Aspartate_Aminotransferase'>"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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BAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4KTaASkrK0tJSUkqLCx0RT0AAABuZzogHTp0SE899ZSmTZum559/XgkJCZKk3NxcPffcczp48KDLigQAAKhNpgLS4cOHtWTJEjVu3Fj33XefQ1uTJk3UrFkz7d692xX1AQAA1DpTAelvf/ubOnfurNdee03Dhw+/pj08PFxnz56tdnEAAADuYCogJScn684777xue9OmTZWbm2u6KAAAAHcyFZAaNWr0o5uyL168qKCgINNFAQAAuJOpgNSlSxft2bNHJSUl17RlZ2dr586dioiIqHZxAAAA7mAqII0bN06ZmZl64YUX9Pnnn0uSjh07pg0bNuiZZ56RJN17772uqxIAAKAWWcrKysrMfDElJUVr165VbGysw/3OnTvr4YcfVmhoaLWL+/jjj7V+/Xr99re/1YMPPihJKioqUnR0tPbv36/i4mJFRERoypQpstlsxvcyMjK0evVqxcXFyc/PTwMGDND48ePl7e1t9ImLi1N0dLRSUlLUvHlzjRkzRgMHDrzhGtPT01VcXFzN3xQAANQGq9Wqli1b/mQ/H7N/wM0336yXX35ZeXl5Sk1NVVlZmVq1aqUmTZqYHdJBQkKCPv/8c91yyy0O99etW6cjR45o5syZCggIUFRUlJYuXarXXntNklRaWqoFCxbIZrPp9ddfV1ZWllauXClvb2+NHz9ekpSWlqaFCxdq6NChmjFjhmJjY/XOO+/IZrMpMjLSJfUDAADPVe2TtIOCgtShQwd17NjRZeGosLBQK1as0COPPKLAwEDjfkFBgXbt2qVJkyapa9euCgsL0/Tp03Xq1CnFx8dLkr7++mudP39eM2bMULt27dSjRw+NHTtW27dvl91ulyTt2LFDwcHBmjhxokJDQzVixAj17t1bW7dudUn9AADAs5maQTpx4oTOnj2ru+++27i3a9cubdq0SXa7XX379tXEiRPl5WUuf61Zs0Y9evRQ9+7d9dFHHxn3ExMTVVJSom7duhn32rRpoxYtWig+Pl7h4eGKj49X27ZtHZbcIiMjtWbNGqWkpKh9+/Y6ffq0wxiSFBERobVr1163puLiYoelNIvFIn9/f+MzAACoP0wFpE2bNqlFixbGdXJy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ZrMZs2EAAKBhM7XE1r59eyUkJBjXXbp00datW/Xtt9/qm2++0WeffaZ27drd8Li33367brvtNrVu3VohISEaN26c/Pz8dPr0aRUUFGjXrl2aNGmSunbtqrCwME2fPl2nTp1SfHy8JOnrr7/W+fPnNWPGDLVr1049evTQ2LFjtX37dtntdklXZ6mCg4M1ceJEhYaGasSIEerdu7e2bt1q5q8CAADUQ6ZmkAYPHqw9e/aouLhYVqtV48aN0yuvvKJXXnlFkhQYGKgHHnigWoWVlpbqwIEDunLlisLDw5WYmKiSkhJ169bN6NOmTRu1aNFC8fHxCg8PV3x8vNq2beuw5BYZGak1a9YoJSVF7du31+nTpx3GkKSIiAitXbv2R+spLi52OBDSYrHI39/f+AygfkhKStLSpUuN62eeecbUf/AB8GymAtIdd9yhO+64w7gODQ3VihUrFBcXJy8vL/385z9XUFCQqYKSk5M1Z84cFRcXy8/PT7NmzVJoaKiSkpLk4+OjwMBAh/5NmzZVdna2JCk7O9shHJW3l7eV/yy/V7HP5cuXVVRUJF9f30rr2rJlizZv3mxct2/fXosWLarSaZwAPMO99957zb3ysFTx338A9d8NB6SioiL95S9/UZcuXXT77bcb9wMCAhxCk1khISFavHixCgoK9OWXX+pPf/qT5s2bV+1xq2v06NEaOXKkcV0+a5Senm4s3wHwXDNmzHC4/tWvfqUvvvjCuL733nu1YsWK2i4LgIv5+PjUzMtqfX199a9//UuhoaGmCvspPj4+uummmyRdPTrgzJkz2rZtm/r06SO73a78/HyHWaScnBxj1shmsznsjSpvL28r/1l+r2Iff3//684eSVef1it/Ys8Zr7MDPFtSUpLxefbs2QoJCZF0NRRduHBBCxculCSdPXuW5TaggTC1STssLEwpKSmurqVSpaWlKi4uVlhYmLy9vXXixAmj7cKFC8rIyFB4eLgkKTw8XMnJyQ4B6Pjx4/L39zcCXceOHR3GKO9TPgaAhmfZsmXG5/JwVNl1xX4A6jdTAWnSpEnat2+fdu7cqZKSEpcVs379ep08eVJpaWlKTk42rvv376+AgAANGjRI0dHRio2NVWJiolatWqXw8HAj3ERERCg0NFQrV65UUlKSjh07pg0bNmj48OHG7M+wYcOUlpamDz74QN999522b9+u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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.boxplot(df.Aspartate_Aminotransferase)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "id": "b4d93eea-ac9d-49f4-a853-146942bdea52",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2987     4929.0\n",
       "6010     4929.0\n",
       "6619     4929.0\n",
       "11615    4929.0\n",
       "12126    4929.0\n",
       "Name: Aspartate_Aminotransferase, dtype: float64"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.Aspartate_Aminotransferase.sort_values(ascending=False).head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "id": "b2d8955c-67d3-4030-b2df-c8314c479ca8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(12165, 11)"
      ]
     },
     "execution_count": 151,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df[df.Aspartate_Aminotransferase <=3000 ]\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "id": "52c13b7b-7acc-48b3-a056-41d8245aef16",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: ylabel='Aspartate_Aminotransferase'>"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAGKCAYAAAD31r6NAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9iklEQVR4nO3de1jUZf7/8dfADHJSxxMqoiIpmScwLUvtq5umtllmJ1ctLcvd0qytrLW1g5ZlpbmtmVt5+JkdTTe3g7pathoeysxMgQpRUQwRTAYXEGVgfn948VlmQMMPA8PA83FdezX357758B6vq/blfd+f+2NxuVwuAQAAwBDg6wIAAABqGwISAACABwISAACABwISAACABwISAACABwISAACABwISAACABwISAACABwISAACABwISAACAB6uvC/B3OTk5cjqdvi4DAABUgtVqVZMmTX57XA3UUqc5nU4VFRX5ugwAAOBFLLEBAAB4ICABAAB4ICABAAB4qFV7kDZs2KANGzYoOztbkhQVFaVbbrlFPXv2lCSdOXNGy5cv17Zt21RUVKS4uDjdc889stvtxj2OHz+uRYsWKSkpScHBwRowYIDGjBmjwMBAY0xSUpKWL1+u9PR0NWvWTDfffLMGDhxYk18VAADUYhaXy+XydRGldu7cqYCAALVu3Voul0ubN2/WJ598opdeeklt27bVokWLtGvXLk2ePFmhoaFasmSJAgIC9Oyzz0qSSkpK9Oijj8put+uOO+5QTk6OFixYoEGDBmnMmDGSpKysLD3yyCO65pprdPXVVysxMVHLli3TtGnTFB8ff8E1Z2dns0kbAAA/YbPZ1KJFi98cV6uW2Hr37q1LL71UrVu3VmRkpEaPHq3g4GDt27dPBQUF+vLLLzV+/Hh169ZNMTExmjRpkn7++WelpKRIkn744QcdOXJEU6ZMUXR0tHr27KlRo0Zp/fr1xqP4GzZsUEREhMaNG6eoqCgNGzZMV1xxhdasWePLrw4AAGqRWrXEVlZJSYm2b9+u06dPKzY2VgcOHFBxcbG6d+9ujGnTpo2aN2+ulJQUxcbGKiUlRe3atXNbcouPj9fixYuVnp6uDh06aN++fW73kKS4uDgtW7bsvPUUFRW5zRRZLBaFhIQYnwEAQN1R6wLS4cOHNX36dBUVFSk4OFhTp05VVFSU0tLSZLVaFRYW5ja+cePGcjgckiSHw+EWjkr7S/tK/1l6reyYU6dO6cyZMwoKCqqwrtWrV2vVqlVGu0OHDnrxxRcrNU0HAAD8S60LSJGRkZozZ44KCgr09ddf67XXXtPMmTN9XZZGjhyp4cOHG+3SWaPs7GxO0gbqkLS0NL388stG+5FHHlF0dLTvCgLgVVartVKTG7UuIFmtVrVq1UqSFBMTo/3792vt2rXq27evnE6n8vPz3WaRcnNzjVkju92u1NRUt/vl5uYafaX/LL1WdkxISMg5Z4+ks5u6bDZbhX21aJ87gCp44IEHyl0rDUvz58+v6XIA+FCt2qRdkZKSEhUVFSkmJkaBgYHau3ev0ZeRkaHjx48rNjZWkhQbG6vDhw+7BaA9e/YoJCREUVFRkqROnTq53aN0TOk9ANRPnuHoqquuOm8/gLqtVs0gvffee4qPj1fz5s1VWFioLVu2KDk5WdOnT1doaKiuvvpqLV++XOHh4QoNDdXSpUsVGxtrhJu4uDhFRUVpwYIFGjt2rBwOhz744AMNHTrUmP0ZMmSI1q9fr3feeUe/+93vlJiYqO3bt2vatGm+/OoAfCgtLc34PG3aNEVGRkqSbr31VmVkZOiFF14wxrHcBtQPteocpH/84x9KTExUTk6OQkND1b59e40YMUI9evSQ9L+DIrdu3Sqn01nhQZHZ2dlavHixkpKS1KBBAw0YMEBjx44td1DkW2+9pSNHjlT5oEjOQQL8X9nZoYqW0n6rH4D/qOw5SLUqIPkjAhLg/0oD0FVXXaVbb721XP8HH3ygbdu2SSIgAf7OLw+KBABfSkhIqPB6aTgCUH8QkADUew8//LDxOSMjw62vbLvsOAB1W63apA0AvlB243Xphuy+ffuWmzligzZQf7AHqYrYgwTUHed7lJ+9R0DdwCbtGkJAAuqWtLQ0zZs3z2g//PDDzBwBdQgBqYYQkAAA8B88xQYAAGASAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMCD1dcFlLV69Wrt2LFDv/zyi4KCghQbG6vbb79dkZGRxpgZM2YoOTnZ7ecGDx6sP/7xj0b7+PHjWrRokZKSkhQcHKwBAwZozJgxCgwMNMYkJSVp+fLlSk9PV7NmzXTzzTdr4MCB1f4dAQBA7VerAlJycrKGDh2qiy66SMXFxXr//fc1a9YszZs3T8HBwca4QYMGadSoUUY7KCjI+FxSUqLZs2fLbrdr1qxZysnJ0YIFCxQYGKgxY8ZIkrKysvTCCy/ommuu0ZQpU5SYmKjXX39ddrtd8fHxNfZ9AQBA7VSrltimT5+ugQMHqm3btoqOjtbkyZN1/PhxHThwwG1cgwYNZLfbjf+FhoYafT/88IOOHDmiKVOmKDo6Wj179tSoUaO0fv16OZ1OSdKGDRsUERGhcePGKSoqSsOGDdMVV1yhNWvW1Oj3BQAAtVOtmkHyVFBQIEkKDw93u56QkKCEhATZ7Xb16tVLN998sxo0aCBJSklJUbt27WS3243x8fHxWrx4sdLT09WhQwft27dP3bt3d7tnXFycli1bds5aioqKVFRUZLQtFotCQkKMzwAAoO6otQGppKREy5Yt08UXX6x27doZ1/v376/mzZuradOmOnTokN59911lZGRo6tSpkiSHw+EWjiSpcePGRl/pP0uvlR1z6tQpnTlzxm3JrtTq1au1atUqo92hQwe9+OKLatGihTe+LgAAqEWqHJBycnKUm5urVq1aue0TqqolS5YoPT1dzzzzjNv1wYMHG5/btWunJk2a6JlnnlFmZqZatWrltd/vaeTIkRo+fLjRLp01ys7ONpbuAABA7Wa1Wis1uWE6IH377bd69913dfToUUnSk08+qW7duunkyZOaNWuWbrnlFl1++eWm7r1kyRLt2rVLM2fOVLNmzc47tmPHjpJkBCS73a7U1FS3Mbm5uZJkzCzZ7XbjWtkxISEhFc4eSZLNZpPNZquwz+Vy/eZ3AgAA/sPUJu2dO3dq7ty5atiwoW699Va3vkaNGqlp06batGnTBd/X5XJpyZIl2rFjh5566ilFRET85s+kpaVJkpo0aSJJio2N1eHDh90C0J49exQSEqKoqChJUqdOnbR37163++zZs0exsbEXXDMAAKh7TAWkf/7zn+rSpYueffZZDR06tFx/bGysDh48eMH3XbJkiRISEvTggw8qJCREDodDDodDZ86ckXR2lmjVqlU6cOCAsrKytHPnTr322mu65JJL1L59e0lnN1tHRUVpwYIFSktL0+7du/XBBx9o6NChxgzQkCFDlJWVpXfeeUe//PKL1q9fr+3bt+u6664z88cBAADqGFNLbIcPH9b48ePP2d+4cWOdPHnygu+7YcMGSWcPgyxr0qRJGjhwoKxWq/bu3au1a9fq9OnTatasmfr06aObbrrJGBsQEKBp06Zp8eLFeuKJJ9SgQQMNGDDA7dykiIgITZs2TW+99ZbWrl2rZs2a6d577+UMJAAAIMlkQGrQoIEKCwvP2X/s2LFyj+ZXxocffnje/ubNm2vmzJm/eZ8WLVro8ccfP++Yrl276qWXXrqg+gAAQP1gaomta9eu2rx5s4qLi8v1ORwObdy4UXFxcVUuDgAAwBdMBaTRo0frxIkTevzxx/X5559LkrHX55FHHpEk3XLLLd6rEgAAoAZZXCafUU9PT9eyZcuUmJjodr1Lly66++67jSfG6rrs7Gy3E7YBAEDtZbPZKnUOkumAVCovL0+ZmZlyuVxq2bKlGjVqVJXb+R0CEgAA/qOyAanKJ2mHh4cbhzUCAADUBaYC0t69e3Xw4EHdcMMNxrUvv/xSK1eulNPpVL9+/TRu3DgFBJja4gQAAOBTphLMypUrjROspbPnIi1atEiNGjVSly5dtG7dOn3yySfeqhEAAKBGmQpIv/zyiy666CKj/dVXXykkJETPPPOMHnroIQ0aNEhfffWV14oEAACoSaYCUmFhoUJCQoz27t27FR8frwYNGkg6+wLZ7Oxs71QIAABQw0wFpObNm2v//v2Szr4fLT09XT169DD68/LyjPeeAQAA+BtTm7T79++vVatW6cSJEzpy5IjCwsJ02WWXGf0HDhxQ69atvVYkAABATTIVkG666SY5nU59//33at68uSZNmqSwsDBJZ2ePkpKS9Pvf/96rhQIAANSUKh8UWd9xUCQAAP6jsgdFclARAACAB9MnaZ85c0bffPONDh48qIKCApWUlLj1WywW3XfffVUuEAAAoKaZCkjZ2dmaOXOmsrOzFRoaqoKCAoWHhxtBqWHDhgoODvZ2rQAAADXC1BLb22+/rYKCAj333HP6+9//Lkl66KGHtHz5co0dO1ZBQUGaPn26VwsFAACoKaYCUlJSkoYMGaKOHTsa71tzuVyy2Wy64YYb1K1bNy1btsybdQIAANQYUwHp9OnTioiIkCTjRO2CggKjPzY2Vj/99JMXygMAAKh5pk/S/vXXXyVJgYGBatq0qfbt22f0HzlyREFBQd6pEAAAoIaZ2qTdrVs37dy5U7feeqskaeDAgfrXv/6lvLw8uVwuffXVVxowYIBXCwUAAKgppgLSjTfeqNTUVBUVFclms2nkyJHKycnRN998o4CAAPXv31/jxo3zdq0AAAA1gpO0q4iTtAEA8B/VdpL26dOnNWHCBH3yySemCgMAAKjtLjggNWjQQIGBgWrQoEF11AMAAOBzpp5i69Onj77++muxOgcAAOoiU3uQkpOTtWTJEjVs2FCDBg1SixYtKnysPyYmxitF1mbsQQIAwH9Udg+SqYA0atSoSo1bsWLFhd7a7xCQAADwH5UNSKYe87/vvvvM/BgAAIBf4DH/KmIGCQAA/1Ftj/l7ysnJUVpamgoLC6t6KwAAgFrBdED69ttv9ec//1n33nuv/vKXvyg1NVWSdPLkST322GPasWOH14oEAACoSaYC0s6dOzV37lw1bNjQeB9bqUaNGqlp06batGmTN+oDAACocaYC0j//+U916dJFzz77rIYOHVquPzY2VgcPHqxycQAAAL5gKiAdPnxYV1555Tn7GzdurJMnT5ouCgAAwJdMBaQGDRqcd1P2sWPHFB4ebrooAAAAXzIVkLp27arNmzeruLi4XJ/D4dDGjRsVFxdX5eIAAAB8wVRAGj16tE6cOKHHH39cn3/+uSRp9+7d+uCDD/TII49Ikm655RbvVQkAAFCDTB8UmZ6ermXLlikxMdHtepcuXXT33XcrKirKKwXWdhwUCQCA//Dqu9gOHTqkFi1aKDQ0tFxfXl6eMjMz5XK51LJlSzVq1MhcxX6KgAQAgP/w6knajz32mHbt2mW0Z86cqb1790qSwsPD1bFjR3Xq1KnehSMAAFA3VSogBQUF6fTp00Y7OTlZubm51VYUAACAL1krMyg6OlqfffaZAgICjGW21NRU2Wy28/5cnz59ql4hAABADavUHqT9+/dr3rx5On78+AXdfMWKFaYL8xfsQQIAwH94dZO2JBUXF+vYsWNyOByaOXOmRo4cqR49epz3Z7p06VK5av0YAQkAAP9R2YBUqSU2SQoMDFRkZKQiIyM1YMAA9erVS506dapSkQAAALWR6XOQKuJ0OuV0OhUcHOytW9Z6zCABAOA/vD6DVNbWrVu1b98+3Xnnnca1lStX6qOPPpIkXXrppZoyZcoFB6XVq1drx44d+uWXXxQUFKTY2FjdfvvtioyMNMacOXNGy5cv17Zt21RUVKS4uDjdc889stvtxpjjx49r0aJFSkpKUnBwsAYMGKAxY8YoMDDQGJOUlKTly5crPT1dzZo1080336yBAwea+eMAAAB1jKlXjXz22Wduj/3//PPPWrVqleLi4nTddddp9+7dRli6EMnJyRo6dKiee+45PfHEEyouLtasWbPcXoz71ltv6bvvvtPDDz+smTNnKicnRy+//LLRX1JSotmzZ8vpdGrWrFmaPHmyNm3a5LZhPCsrSy+88IK6du2ql156Sdddd51ef/117d6928wfBwAAqGNMBaTMzEy1b9/eaG/ZskV2u12PPvqobr/9dg0dOlTffPPNBd93+vTpGjhwoNq2bavo6GhNnjxZx48f14EDByRJBQUF+vLLLzV+/Hh169ZNMTExmjRpkn7++WelpKRIkn744QcdOXJEU6ZMUXR0tHr27KlRo0Zp/fr1cjqdkqQNGzYoIiJC48aNU1RUlIYNG6YrrrhCa9asMfPHAQAA6hhTS2xOp9PtDKQ9e/YoPj7eWMKKiorShg0bqlxcQUGBpLOndUvSgQMHVFxcrO7duxtj2rRpo+bNmyslJUWxsbFKSUlRu3bt3Jbc4uPjtXjxYqWnp6tDhw7at2+f2z0kKS4uTsuWLTtnLUVFRW57jSwWi0JCQozPAACg7jAVkCIiIrR3714NGjRI+/fvV2Zmpv7whz8Y/bm5uVXeqF1SUqJly5bp4osvVrt27SRJDodDVqtVYWFhbmMbN24sh8NhjCkbjkr7S/tK/1l6reyYU6dO6cyZMwoKCipXz+rVq7Vq1Sqj3aFDB7344ouV2ugFAAD8i6mANHjwYC1btkxHjhzRr7/+qqZNm6pXr15G/88//6y2bdtWqbAlS5YoPT1dzzzzTJXu4y0jR47U8OHDjXbprFF2draxdAcAAGo3q9VafU+xXXvttbLZbPr+++8VExOjESNGGLMueXl5cjgcuuaaa8zcWtLZcLRr1y7NnDlTzZo1M67b7XY5nU7l5+e7zSLl5uYas0Z2u12pqalu9yt9b1zZMZ7vksvNzVVISEiFs0fS2ccCz/VqFS+elAAAAGoBUwFJOjuLNHjw4HLXw8PD9cILL5i6p8vl0tKlS7Vjxw7NmDFDERERbv0xMTEKDAzU3r17dcUVV0iSMjIydPz4ccXGxkqSYmNj9dFHHyk3N9dYRtuzZ49CQkIUFRUlSerUqZO+//57t3vv2bPHuAcAAKjfTD3FVl2WLFmihIQEPfjggwoJCZHD4ZDD4dCZM2ckSaGhobr66qu1fPlyJSYm6sCBA1q4cKFiY2ONcBMXF6eoqCgtWLBAaWlp2r17tz744AMNHTrUmAEaMmSIsrKy9M477+iXX37R+vXrtX37dl133XU+++4AAKD2MH2S9u7du/Xll18qKytL+fn55ZaZLBaLXn311Qu652233Vbh9UmTJhmHOJYeFLl161Y5nc4KD4rMzs7W4sWLlZSUpAYNGmjAgAEaO3ZsuYMi33rrLR05cqRKB0VykjYAAP7D6y+rLeuTTz7Ru+++K7vdrosuush4DN/TpEmTLvTWfoeABACA/6jWV42sXbtW3bp10+OPPy6r1fQ2JgAAgFrJ1B6k/Px8XXHFFYQjAABQJ5kKSB07dlRGRoa3awEAAKgVTAWku+++Wzt27NCWLVu8XQ8AAIDPmdqkPXXqVOXl5SknJ0fBwcFq1qyZAgLcs5bFYtGcOXO8VmhtxSZtAAD8R7Vu0g4PD1fDhg3VunVrMz8OAABQq5k+BwlnMYMEAID/qOwMUq06SRsAAKA2qNJz+k6nUxkZGSooKFBJSUm5/i5dulTl9gAAAD5hKiCVlJTovffe04YNG3T69OlzjluxYoXpwgAAAHzFVEBavXq1Pv30Uw0ePFidO3fWggULNHbsWIWGhmrDhg2yWCwaO3ast2sFAACoEab2IG3atElXXnmlJk6cqPj4eElSTEyMBg8erOeff16SlJiY6LUiAQAAapKpgHTixAl169ZN0tnd4JJ05swZSZLVatVVV12lhIQEL5UIAABQs0wFpPDwcBUWFkqSgoODFRISoqysLLcxeXl5Va8OAADAB0ztQerQoYNSU1ONdteuXbVmzRpFR0fL5XJp3bp1io6O9laNAAAANcrUDNKgQYPkdDqNAxJHjx6tgoICPf3005oxY4ZOnTqlO+64w6uFAgAA1BSvnaRdUFCgpKQkBQQE6OKLL1Z4eLg3blvrcZI2AAD+o7InaV9wQDpz5ozef/99de3aVb179zZdYF1BQAIAwH9U26tGgoKC9MUXXyg3N9dUYQAAALWdqT1IMTExSk9P93YtAAAAtYKpgDR+/Hht3bpVGzduVHFxsbdrAgAA8ClTm7SnTp2q//73v3I4HLLZbGratKmCgoLcb2yxaM6cOV4rtLZiDxIAAP6jsnuQTJ2DFB4eroYNGyoyMtLMjwMAANRqXnvMv75iBgkAAP9RbU+xSdLmzZvLvVqkrOzsbG3evNnMrQEAAHzOVEBauHChUlJSztm/b98+LVy40HRRAAAAvmQqIP2WwsJCBQYGVsetAQAAql2lN2kfOnRIaWlpRvvHH3+s8BH//Px8ff7552rdurVXCgQAAKhpld6kvXLlSq1atapSNw0NDdX999+vXr16Vak4f8AmbQAA/IfX38WWk5OjnJwcuVwu/fWvf9Vtt92mnj17lhsXHBysli1b1pslNgISAAD+o9peVitJycnJatOmjRo3bmyquLqEgAQAgP+o1oMiu3TpYnw+cuSIsrOzJUktWrRQVFSUmVsCAADUGqYCkiR9++23Wr58ebnzkCIiIjR+/Hj17t27ysUBAAD4gqkltl27dumll15SixYtNGjQIGPW6MiRI9q4caOys7M1bdo0xcfHe7veWoclNqBuSUtL07x584z2ww8/rOjoaN8VBMCrqnUP0vTp0+V0OjVz5kwFBwe79RUWFuqpp56SzWbTc889d6G39jsEJKDueOCBB87ZN3/+/BqsBEB1qdZXjRw+fFgDBgwoF46ks0+xDRw4UIcPHzZzawDwCc9wdNVVV523H0DdZmoPks1mU15e3jn78/LyZLPZTBcFADWp7CG406ZNU2RkpCTp1ltvVUZGhl544QVjHMttQP1gagapW7duWrt2bYXvY9u3b5/WrVun7t27V7k4AKgJZfcclYajitplxwGo20zNIN1+++2aPn26nnzySXXs2NH4D0hGRoZSU1PVuHFjjR071quFAkB181xWK9W3b19t27athqsB4EumZpAiIiI0d+5cXXvttcrPz9e2bdu0bds25efn6/e//73mzJmjiIgIb9cKANUqISGhwuuEI6D+MX0OUuPGjXXnnXd6sRQA8I2HH37YWD7LyMhwW1bLyMhwGwegfjAdkACgrii78bp0Q3ZFy2ps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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.boxplot(df.Aspartate_Aminotransferase)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "id": "041012fb-531e-458a-8560-7ed33f16ac3b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10996    2946.0\n",
       "8375     2946.0\n",
       "5602     2946.0\n",
       "6813     2946.0\n",
       "5133     2946.0\n",
       "Name: Aspartate_Aminotransferase, dtype: float64"
      ]
     },
     "execution_count": 153,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.Aspartate_Aminotransferase.sort_values(ascending=False).head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "b0c9c216-bdee-4ed3-a100-5e621276c8fa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(12149, 11)"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df[df.Aspartate_Aminotransferase <=2500 ]\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "id": "1a1b9373-19dc-4416-95a6-c1a9d3900f49",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 155,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.isnull().values.any()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "id": "3194fba5-d50d-4f53-9deb-f3ca78b51a7e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(12149, 11)"
      ]
     },
     "execution_count": 156,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df=df.dropna(how='any')  \n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "id": "0d2b6ba0-8197-4a18-9faf-2f3d582a419a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Gender of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Aspartate_Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "      <th>Result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>52.0</td>\n",
       "      <td>Female</td>\n",
       "      <td>0.9</td>\n",
       "      <td>0.2</td>\n",
       "      <td>116.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>6.2</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.00</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>36.0</td>\n",
       "      <td>Female</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.2</td>\n",
       "      <td>188.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>5.5</td>\n",
       "      <td>2.3</td>\n",
       "      <td>0.71</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>28.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.1</td>\n",
       "      <td>162.0</td>\n",
       "      <td>155.0</td>\n",
       "      <td>108.0</td>\n",
       "      <td>8.1</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.90</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>49.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.2</td>\n",
       "      <td>188.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.10</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>51.0</td>\n",
       "      <td>Male</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.3</td>\n",
       "      <td>75.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>5.1</td>\n",
       "      <td>2.9</td>\n",
       "      <td>1.30</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Age of the patient Gender of the patient  Total Bilirubin  \\\n",
       "0                52.0                Female              0.9   \n",
       "1                36.0                Female              0.7   \n",
       "2                28.0                  Male              0.5   \n",
       "3                49.0                  Male              0.7   \n",
       "4                51.0                  Male              1.0   \n",
       "\n",
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
       "0               0.2                          116.0   \n",
       "1               0.2                          188.0   \n",
       "2               0.1                          162.0   \n",
       "3               0.2                          188.0   \n",
       "4               0.3                           75.0   \n",
       "\n",
       "    Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  Total Protiens  \\\n",
       "0                            36.0                        16.0             6.2   \n",
       "1                            11.0                        10.0             5.5   \n",
       "2                           155.0                       108.0             8.1   \n",
       "3                            13.0                        21.0             6.0   \n",
       "4                            25.0                        26.0             5.1   \n",
       "\n",
       "    ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
       "0           3.2                                  1.00       0  \n",
       "1           2.3                                  0.71       0  \n",
       "2           4.0                                  0.90       1  \n",
       "3           3.2                                  1.10       0  \n",
       "4           2.9                                  1.30       1  "
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "574de37d-d4fb-4b68-95f6-330e61a2320b",
   "metadata": {},
   "source": [
    "Machine Learning Models"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "abce595d-98c0-4e66-9a05-8e84facfdd4a",
   "metadata": {},
   "source": [
    "Data Preparation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "id": "274c73aa-a739-45a3-b4ac-fec2f5e8f0b2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(8504, 10) (3645, 10) (8504,) (3645,)\n"
     ]
    }
   ],
   "source": [
    "# Create separate object for target variable\n",
    "y = df.Result\n",
    "\n",
    "# Create separate object for input features\n",
    "X = df.drop('Result', axis=1)\n",
    "# Split X and y into train and test sets\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, \n",
    "                                                    test_size=0.3, \n",
    "                                                    random_state=0,\n",
    "                                                    stratify=df.Result)\n",
    "# Print number of observations in X_train, X_test, y_train, and y_test\n",
    "print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "467f4e74-e6fa-4ae4-8cf6-6d5d92e67e11",
   "metadata": {},
   "source": [
    "Data standardization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "id": "c1f9a786-f74d-4a33-af65-11aa3126b3fb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Gender of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Aspartate_Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>8.504000e+03</td>\n",
       "      <td>8.504000e+03</td>\n",
       "      <td>8.504000e+03</td>\n",
       "      <td>8.504000e+03</td>\n",
       "      <td>8.504000e+03</td>\n",
       "      <td>8.504000e+03</td>\n",
       "      <td>8.504000e+03</td>\n",
       "      <td>8.504000e+03</td>\n",
       "      <td>8.504000e+03</td>\n",
       "      <td>8.504000e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-1.215710e-16</td>\n",
       "      <td>1.215710e-16</td>\n",
       "      <td>1.169755e-17</td>\n",
       "      <td>-6.182992e-17</td>\n",
       "      <td>1.932185e-18</td>\n",
       "      <td>-8.982049e-18</td>\n",
       "      <td>-2.548395e-17</td>\n",
       "      <td>-2.197469e-16</td>\n",
       "      <td>-3.843481e-17</td>\n",
       "      <td>-1.478905e-16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-2.422689e+00</td>\n",
       "      <td>-6.412252e-01</td>\n",
       "      <td>-4.594191e-01</td>\n",
       "      <td>-4.656438e-01</td>\n",
       "      <td>-9.303106e-01</td>\n",
       "      <td>-4.163797e-01</td>\n",
       "      <td>-4.956979e-01</td>\n",
       "      <td>-3.476604e+00</td>\n",
       "      <td>-2.820396e+00</td>\n",
       "      <td>-2.052873e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-7.125996e-01</td>\n",
       "      <td>-6.412252e-01</td>\n",
       "      <td>-3.878698e-01</td>\n",
       "      <td>-4.279415e-01</td>\n",
       "      <td>-4.664464e-01</td>\n",
       "      <td>-3.305702e-01</td>\n",
       "      <td>-4.089980e-01</td>\n",
       "      <td>-6.316850e-01</td>\n",
       "      <td>-6.980597e-01</td>\n",
       "      <td>-7.707068e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>8.137060e-02</td>\n",
       "      <td>-6.412252e-01</td>\n",
       "      <td>-3.699824e-01</td>\n",
       "      <td>-3.902392e-01</td>\n",
       "      <td>-3.387774e-01</td>\n",
       "      <td>-2.590623e-01</td>\n",
       "      <td>-3.099125e-01</td>\n",
       "      <td>1.024876e-01</td>\n",
       "      <td>-7.384312e-02</td>\n",
       "      <td>1.361914e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.921169e-01</td>\n",
       "      <td>1.559331e+00</td>\n",
       "      <td>-1.374469e-01</td>\n",
       "      <td>-8.862079e-02</td>\n",
       "      <td>3.571851e-02</td>\n",
       "      <td>-8.029253e-02</td>\n",
       "      <td>-6.839148e-02</td>\n",
       "      <td>6.531171e-01</td>\n",
       "      <td>8.000601e-01</td>\n",
       "      <td>4.489149e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.829729e+00</td>\n",
       "      <td>1.559331e+00</td>\n",
       "      <td>1.288454e+01</td>\n",
       "      <td>6.924007e+00</td>\n",
       "      <td>7.780974e+00</td>\n",
       "      <td>1.152544e+01</td>\n",
       "      <td>9.350928e+00</td>\n",
       "      <td>2.855635e+00</td>\n",
       "      <td>2.922396e+00</td>\n",
       "      <td>5.765214e+00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Age of the patient  Gender of the patient  Total Bilirubin  \\\n",
       "count        8.504000e+03           8.504000e+03     8.504000e+03   \n",
       "mean        -1.215710e-16           1.215710e-16     1.169755e-17   \n",
       "std          1.000000e+00           1.000000e+00     1.000000e+00   \n",
       "min         -2.422689e+00          -6.412252e-01    -4.594191e-01   \n",
       "25%         -7.125996e-01          -6.412252e-01    -3.878698e-01   \n",
       "50%          8.137060e-02          -6.412252e-01    -3.699824e-01   \n",
       "75%          6.921169e-01           1.559331e+00    -1.374469e-01   \n",
       "max          2.829729e+00           1.559331e+00     1.288454e+01   \n",
       "\n",
       "       Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
       "count      8.504000e+03                   8.504000e+03   \n",
       "mean      -6.182992e-17                   1.932185e-18   \n",
       "std        1.000000e+00                   1.000000e+00   \n",
       "min       -4.656438e-01                  -9.303106e-01   \n",
       "25%       -4.279415e-01                  -4.664464e-01   \n",
       "50%       -3.902392e-01                  -3.387774e-01   \n",
       "75%       -8.862079e-02                   3.571851e-02   \n",
       "max        6.924007e+00                   7.780974e+00   \n",
       "\n",
       "        Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  \\\n",
       "count                    8.504000e+03                8.504000e+03   \n",
       "mean                    -8.982049e-18               -2.548395e-17   \n",
       "std                      1.000000e+00                1.000000e+00   \n",
       "min                     -4.163797e-01               -4.956979e-01   \n",
       "25%                     -3.305702e-01               -4.089980e-01   \n",
       "50%                     -2.590623e-01               -3.099125e-01   \n",
       "75%                     -8.029253e-02               -6.839148e-02   \n",
       "max                      1.152544e+01                9.350928e+00   \n",
       "\n",
       "       Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  \n",
       "count    8.504000e+03  8.504000e+03                          8.504000e+03  \n",
       "mean    -2.197469e-16 -3.843481e-17                         -1.478905e-16  \n",
       "std      1.000000e+00  1.000000e+00                          1.000000e+00  \n",
       "min     -3.476604e+00 -2.820396e+00                         -2.052873e+00  \n",
       "25%     -6.316850e-01 -6.980597e-01                         -7.707068e-01  \n",
       "50%      1.024876e-01 -7.384312e-02                          1.361914e-01  \n",
       "75%      6.531171e-01  8.000601e-01                          4.489149e-01  \n",
       "max      2.855635e+00  2.922396e+00                          5.765214e+00  "
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_mean = X_train.mean()\n",
    "train_std = X_train.std()\n",
    "## Standardize the train data set\n",
    "X_train = (X_train - train_mean) / train_std\n",
    "## Check for mean and std dev.\n",
    "X_train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "id": "6ffea4b9-4fec-41e8-adce-3105c9d76226",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Gender of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Aspartate_Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>3645.000000</td>\n",
       "      <td>3645.000000</td>\n",
       "      <td>3645.000000</td>\n",
       "      <td>3645.000000</td>\n",
       "      <td>3645.000000</td>\n",
       "      <td>3645.000000</td>\n",
       "      <td>3645.000000</td>\n",
       "      <td>3645.000000</td>\n",
       "      <td>3645.000000</td>\n",
       "      <td>3645.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.026914</td>\n",
       "      <td>0.014414</td>\n",
       "      <td>0.047909</td>\n",
       "      <td>0.038988</td>\n",
       "      <td>-0.012918</td>\n",
       "      <td>0.030375</td>\n",
       "      <td>0.010400</td>\n",
       "      <td>0.020988</td>\n",
       "      <td>0.030279</td>\n",
       "      <td>0.034189</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.018290</td>\n",
       "      <td>1.006571</td>\n",
       "      <td>1.147725</td>\n",
       "      <td>1.085461</td>\n",
       "      <td>0.951881</td>\n",
       "      <td>1.148324</td>\n",
       "      <td>1.022681</td>\n",
       "      <td>0.991725</td>\n",
       "      <td>0.980889</td>\n",
       "      <td>1.011914</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-2.422689</td>\n",
       "      <td>-0.641225</td>\n",
       "      <td>-0.459419</td>\n",
       "      <td>-0.465644</td>\n",
       "      <td>-0.930311</td>\n",
       "      <td>-0.416380</td>\n",
       "      <td>-0.495698</td>\n",
       "      <td>-3.476604</td>\n",
       "      <td>-2.820396</td>\n",
       "      <td>-2.052873</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.712600</td>\n",
       "      <td>-0.641225</td>\n",
       "      <td>-0.387870</td>\n",
       "      <td>-0.427941</td>\n",
       "      <td>-0.457935</td>\n",
       "      <td>-0.323419</td>\n",
       "      <td>-0.408998</td>\n",
       "      <td>-0.631685</td>\n",
       "      <td>-0.698060</td>\n",
       "      <td>-0.551800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.081371</td>\n",
       "      <td>-0.641225</td>\n",
       "      <td>-0.352095</td>\n",
       "      <td>-0.390239</td>\n",
       "      <td>-0.326010</td>\n",
       "      <td>-0.251912</td>\n",
       "      <td>-0.309912</td>\n",
       "      <td>0.102488</td>\n",
       "      <td>0.051000</td>\n",
       "      <td>0.136191</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.753192</td>\n",
       "      <td>1.559331</td>\n",
       "      <td>-0.119560</td>\n",
       "      <td>-0.088621</td>\n",
       "      <td>0.035719</td>\n",
       "      <td>-0.065991</td>\n",
       "      <td>-0.049813</td>\n",
       "      <td>0.653117</td>\n",
       "      <td>0.800060</td>\n",
       "      <td>0.448915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.829729</td>\n",
       "      <td>1.559331</td>\n",
       "      <td>12.884541</td>\n",
       "      <td>6.924007</td>\n",
       "      <td>7.780974</td>\n",
       "      <td>11.525442</td>\n",
       "      <td>9.350928</td>\n",
       "      <td>2.855635</td>\n",
       "      <td>2.922396</td>\n",
       "      <td>5.765214</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Age of the patient  Gender of the patient  Total Bilirubin  \\\n",
       "count         3645.000000            3645.000000      3645.000000   \n",
       "mean             0.026914               0.014414         0.047909   \n",
       "std              1.018290               1.006571         1.147725   \n",
       "min             -2.422689              -0.641225        -0.459419   \n",
       "25%             -0.712600              -0.641225        -0.387870   \n",
       "50%              0.081371              -0.641225        -0.352095   \n",
       "75%              0.753192               1.559331        -0.119560   \n",
       "max              2.829729               1.559331        12.884541   \n",
       "\n",
       "       Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
       "count       3645.000000                    3645.000000   \n",
       "mean           0.038988                      -0.012918   \n",
       "std            1.085461                       0.951881   \n",
       "min           -0.465644                      -0.930311   \n",
       "25%           -0.427941                      -0.457935   \n",
       "50%           -0.390239                      -0.326010   \n",
       "75%           -0.088621                       0.035719   \n",
       "max            6.924007                       7.780974   \n",
       "\n",
       "        Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  \\\n",
       "count                     3645.000000                 3645.000000   \n",
       "mean                         0.030375                    0.010400   \n",
       "std                          1.148324                    1.022681   \n",
       "min                         -0.416380                   -0.495698   \n",
       "25%                         -0.323419                   -0.408998   \n",
       "50%                         -0.251912                   -0.309912   \n",
       "75%                         -0.065991                   -0.049813   \n",
       "max                         11.525442                    9.350928   \n",
       "\n",
       "       Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  \n",
       "count     3645.000000   3645.000000                           3645.000000  \n",
       "mean         0.020988      0.030279                              0.034189  \n",
       "std          0.991725      0.980889                              1.011914  \n",
       "min         -3.476604     -2.820396                             -2.052873  \n",
       "25%         -0.631685     -0.698060                             -0.551800  \n",
       "50%          0.102488      0.051000                              0.136191  \n",
       "75%          0.653117      0.800060                              0.448915  \n",
       "max          2.855635      2.922396                              5.765214  "
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## Note: We use train_mean and train_std_dev to standardize test data set\n",
    "X_test = (X_test - train_mean) / train_std\n",
    "## Check for mean and std dev. - not exactly 0 and 1\n",
    "X_test.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "20b45207-0560-4252-b809-51117de3d9d5",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "81b8c6ab-58f2-40e6-a2b8-6b64575c11ad",
   "metadata": {},
   "source": [
    "logestic regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "id": "c2678bdc-b816-488c-b664-ea79c010bc1a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-5 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-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: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-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: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-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>LogisticRegression()</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-7\" type=\"checkbox\" checked><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/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></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression()"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# fitting data to model\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "lr = LogisticRegression()\n",
    "lr.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "id": "ccc5be4f-5129-467e-9ecd-72128e825b07",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6845014111006585\n",
      "0.697119341563786\n"
     ]
    }
   ],
   "source": [
    "# model predictions\n",
    "\n",
    "y_pred = lr.predict(X_test)\n",
    "# accuracy score\n",
    "\n",
    "print(accuracy_score(y_train, lr.predict(X_train)))\n",
    "\n",
    "lr_acc = accuracy_score(y_test, lr.predict(X_test))\n",
    "print(lr_acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "id": "4737a5e2-a9e1-4bdb-9921-01e419e985c9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 898  494]\n",
      " [ 610 1643]]\n"
     ]
    }
   ],
   "source": [
    "# confusion matrix\n",
    "\n",
    "print(confusion_matrix(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "6c9a3ad7-148e-40eb-99af-3853f0d2d883",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.60      0.65      0.62      1392\n",
      "           1       0.77      0.73      0.75      2253\n",
      "\n",
      "    accuracy                           0.70      3645\n",
      "   macro avg       0.68      0.69      0.68      3645\n",
      "weighted avg       0.70      0.70      0.70      3645\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# classification report\n",
    "\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "242a7711-d64f-4762-8a00-093426a8fed2",
   "metadata": {},
   "source": [
    "KNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "cf5f36d6-174f-467d-9119-ea777e0de770",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-6 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-6 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 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-6 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-6 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-6 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-6 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-6 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-6 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-6 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-6 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-6 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 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-6 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-6 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-6 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 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-6 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 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-6 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-6 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-6 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-6 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-6 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-6 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-6 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-6 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-6 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-6 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-6 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-6 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-6 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-6 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-6 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-6 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-6 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-6 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-6\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KNeighborsClassifier()</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-8\" type=\"checkbox\" checked><label for=\"sk-estimator-id-8\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KNeighborsClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.neighbors.KNeighborsClassifier.html\">?<span>Documentation for KNeighborsClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KNeighborsClassifier()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KNeighborsClassifier()"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "knn = KNeighborsClassifier()\n",
    "knn.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "id": "fc32ab9f-9b41-41f4-b5a9-4ac3680d3d5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9047507055503292\n",
      "0.8153635116598079\n"
     ]
    }
   ],
   "source": [
    "# model predictions \n",
    "\n",
    "y_pred = knn.predict(X_test)\n",
    "# accuracy score\n",
    "\n",
    "print(accuracy_score(y_train, knn.predict(X_train)))\n",
    "\n",
    "knn_acc = accuracy_score(y_test, knn.predict(X_test))\n",
    "print(knn_acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "id": "a9911e52-734d-4987-afe9-77073672dfb5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1120  272]\n",
      " [ 401 1852]]\n"
     ]
    }
   ],
   "source": [
    "# confusion matrix\n",
    "\n",
    "print(confusion_matrix(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "9711d627-2120-41df-b9c5-4a4c796e07ac",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.74      0.80      0.77      1392\n",
      "           1       0.87      0.82      0.85      2253\n",
      "\n",
      "    accuracy                           0.82      3645\n",
      "   macro avg       0.80      0.81      0.81      3645\n",
      "weighted avg       0.82      0.82      0.82      3645\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# classification report\n",
    "\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45d2d477-dc9d-405d-869b-d62e4587ca51",
   "metadata": {},
   "source": [
    "SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "id": "9e36c0d7-b9a6-42a9-8ed9-797b1d44cedc",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "id": "b7745b13-0d48-47cb-b76f-74fbf820e776",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-7 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-7 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 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-7 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-7 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-7 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-7 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-7 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-7 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-7 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-7 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-7 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 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-7 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-7 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-7 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 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-7 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 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-7 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-7 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-7 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-7 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-7 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-7 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-7 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-7 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-7 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-7 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-7 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-7 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-7 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-7 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-7 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-7 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-7 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-7 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-7\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(C=0.01, gamma=0.0001, probability=True)</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-9\" type=\"checkbox\" checked><label for=\"sk-estimator-id-9\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;SVC<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.svm.SVC.html\">?<span>Documentation for SVC</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>SVC(C=0.01, gamma=0.0001, probability=True)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "SVC(C=0.01, gamma=0.0001, probability=True)"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "svc = SVC(C = 0.01, gamma = 0.0001, probability=True)\n",
    "svc.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "id": "fff63e68-bec8-450b-a147-7544e65e0083",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6181796801505174\n",
      "0.6181069958847737\n"
     ]
    }
   ],
   "source": [
    "# model predictions \n",
    "\n",
    "y_pred = svc.predict(X_test)\n",
    "# accuracy score\n",
    "\n",
    "print(accuracy_score(y_train, svc.predict(X_train)))\n",
    "\n",
    "svc_acc = accuracy_score(y_test, svc.predict(X_test))\n",
    "print(svc_acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "id": "dcc62841-8a28-4802-a196-9548ec0f2b25",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[   0 1392]\n",
      " [   0 2253]]\n"
     ]
    }
   ],
   "source": [
    "# confusion matrix\n",
    "\n",
    "print(confusion_matrix(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "id": "8b94bf63-7488-47b6-901d-a4449b027414",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.00      0.00      0.00      1392\n",
      "           1       0.62      1.00      0.76      2253\n",
      "\n",
      "    accuracy                           0.62      3645\n",
      "   macro avg       0.31      0.50      0.38      3645\n",
      "weighted avg       0.38      0.62      0.47      3645\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# classification report\n",
    "\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8da0359-9496-4444-8154-80cb6831fcd9",
   "metadata": {},
   "source": [
    "DT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "id": "77c86f51-9a2c-41b0-b9bc-fc29d311ba59",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training Accuracy of Decision Tree Classifier is 1.0\n",
      "Test Accuracy of Decision Tree Classifier is 1.0 \n",
      "\n",
      "Confusion Matrix :- \n",
      "[[1392    0]\n",
      " [   0 2253]]\n",
      "\n",
      "Classification Report :- \n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00      1392\n",
      "           1       1.00      1.00      1.00      2253\n",
      "\n",
      "    accuracy                           1.00      3645\n",
      "   macro avg       1.00      1.00      1.00      3645\n",
      "weighted avg       1.00      1.00      1.00      3645\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "\n",
    "dtc = DecisionTreeClassifier()\n",
    "\n",
    "dtc.fit(X_train, y_train)\n",
    "\n",
    "# accuracy score, confusion matrix and classification report of decision tree\n",
    "\n",
    "dtc_acc = accuracy_score(y_test, dtc.predict(X_test))\n",
    "\n",
    "print(f\"Training Accuracy of Decision Tree Classifier is {accuracy_score(y_train, dtc.predict(X_train))}\")\n",
    "print(f\"Test Accuracy of Decision Tree Classifier is {dtc_acc} \\n\")\n",
    "\n",
    "print(f\"Confusion Matrix :- \\n{confusion_matrix(y_test, dtc.predict(X_test))}\\n\")\n",
    "print(f\"Classification Report :- \\n {classification_report(y_test, dtc.predict(X_test))}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "id": "54e581ec-708d-4fae-ba6b-dc815afe3ac1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 24 folds for each of 1200 candidates, totalling 28800 fits\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-8 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-8 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-8 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-8 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-8 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-8 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-8 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-8 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-8 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-8 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-8 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-8 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-8 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-8 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-8 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-8 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-8 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-8 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-8 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-8 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-8 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-8 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-8 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-8 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-8 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-8 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-8 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-8 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-8 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-8 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-8 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-8 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-8 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-8 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-8 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-8 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-8 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-8 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-8 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-8 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-8 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-8 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-8\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=24, estimator=DecisionTreeClassifier(), n_jobs=-1,\n",
       "             param_grid={&#x27;criterion&#x27;: [&#x27;gini&#x27;, &#x27;entropy&#x27;],\n",
       "                         &#x27;max_depth&#x27;: [3, 5, 7, 10],\n",
       "                         &#x27;max_features&#x27;: [&#x27;auto&#x27;, &#x27;sqrt&#x27;, &#x27;log2&#x27;],\n",
       "                         &#x27;min_samples_leaf&#x27;: [1, 2, 3, 5, 7],\n",
       "                         &#x27;min_samples_split&#x27;: [1, 2, 3, 5, 7],\n",
       "                         &#x27;splitter&#x27;: [&#x27;best&#x27;, &#x27;random&#x27;]},\n",
       "             verbose=1)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-10\" type=\"checkbox\" ><label for=\"sk-estimator-id-10\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;GridSearchCV<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=24, estimator=DecisionTreeClassifier(), n_jobs=-1,\n",
       "             param_grid={&#x27;criterion&#x27;: [&#x27;gini&#x27;, &#x27;entropy&#x27;],\n",
       "                         &#x27;max_depth&#x27;: [3, 5, 7, 10],\n",
       "                         &#x27;max_features&#x27;: [&#x27;auto&#x27;, &#x27;sqrt&#x27;, &#x27;log2&#x27;],\n",
       "                         &#x27;min_samples_leaf&#x27;: [1, 2, 3, 5, 7],\n",
       "                         &#x27;min_samples_split&#x27;: [1, 2, 3, 5, 7],\n",
       "                         &#x27;splitter&#x27;: [&#x27;best&#x27;, &#x27;random&#x27;]},\n",
       "             verbose=1)</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-11\" type=\"checkbox\" ><label for=\"sk-estimator-id-11\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">estimator: DecisionTreeClassifier</label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier()</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-12\" type=\"checkbox\" ><label for=\"sk-estimator-id-12\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;DecisionTreeClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.tree.DecisionTreeClassifier.html\">?<span>Documentation for DecisionTreeClassifier</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier()</pre></div> </div></div></div></div></div></div></div></div></div>"
      ],
      "text/plain": [
       "GridSearchCV(cv=24, estimator=DecisionTreeClassifier(), n_jobs=-1,\n",
       "             param_grid={'criterion': ['gini', 'entropy'],\n",
       "                         'max_depth': [3, 5, 7, 10],\n",
       "                         'max_features': ['auto', 'sqrt', 'log2'],\n",
       "                         'min_samples_leaf': [1, 2, 3, 5, 7],\n",
       "                         'min_samples_split': [1, 2, 3, 5, 7],\n",
       "                         'splitter': ['best', 'random']},\n",
       "             verbose=1)"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# hyper parameter tuning of decision tree \n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "grid_param = {\n",
    "    'criterion' : ['gini', 'entropy'],\n",
    "    'max_depth' : [3, 5, 7, 10],\n",
    "    'splitter' : ['best', 'random'],\n",
    "    'min_samples_leaf' : [1, 2, 3, 5, 7],\n",
    "    'min_samples_split' : [1, 2, 3, 5, 7],\n",
    "    'max_features' : ['auto', 'sqrt', 'log2']\n",
    "}\n",
    "\n",
    "grid_search_dtc = GridSearchCV(dtc, grid_param, cv = 24, n_jobs = -1, verbose = 1)\n",
    "grid_search_dtc.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "id": "99f5a2e2-e069-4984-b10b-0d16cca9ca73",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'criterion': 'gini', 'max_depth': 10, 'max_features': 'sqrt', 'min_samples_leaf': 5, 'min_samples_split': 5, 'splitter': 'best'}\n"
     ]
    }
   ],
   "source": [
    "# best parameters \n",
    "\n",
    "print(grid_search_dtc.best_params_)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "id": "e5a2f0d1-c71a-474c-b7de-e3eae9d8df24",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training Accuracy of Decision Tree Classifier is 0.8996942615239887\n",
      "Test Accuracy of Decision Tree Classifier is 0.8880658436213992 \n",
      "\n",
      "Confusion Matrix :- \n",
      "[[1184  208]\n",
      " [ 200 2053]]\n",
      "\n",
      "Classification Report :- \n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       0.86      0.85      0.85      1392\n",
      "           1       0.91      0.91      0.91      2253\n",
      "\n",
      "    accuracy                           0.89      3645\n",
      "   macro avg       0.88      0.88      0.88      3645\n",
      "weighted avg       0.89      0.89      0.89      3645\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# best estimator\n",
    "\n",
    "dtc = grid_search_dtc.best_estimator_\n",
    "\n",
    "# accuracy score, confusion matrix and classification report of decision tree\n",
    "\n",
    "dtc_acc = accuracy_score(y_test, dtc.predict(X_test))\n",
    "\n",
    "print(f\"Training Accuracy of Decision Tree Classifier is {accuracy_score(y_train, dtc.predict(X_train))}\")\n",
    "print(f\"Test Accuracy of Decision Tree Classifier is {dtc_acc} \\n\")\n",
    "\n",
    "print(f\"Confusion Matrix :- \\n{confusion_matrix(y_test, dtc.predict(X_test))}\\n\")\n",
    "print(f\"Classification Report :- \\n {classification_report(y_test, dtc.predict(X_test))}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "id": "72e8219b-e200-4672-bbd4-850b9ef03428",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Model</th>\n",
       "      <th>Score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Decision Tree Classifier</td>\n",
       "      <td>88.81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>KNN</td>\n",
       "      <td>81.54</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Logistic Regression</td>\n",
       "      <td>69.71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>SVM</td>\n",
       "      <td>61.81</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      Model  Score\n",
       "3  Decision Tree Classifier  88.81\n",
       "1                       KNN  81.54\n",
       "0       Logistic Regression  69.71\n",
       "2                       SVM  61.81"
      ]
     },
     "execution_count": 183,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "models = pd.DataFrame({\n",
    "    'Model': ['Logistic Regression', 'KNN', 'SVM', 'Decision Tree Classifier'],\n",
    "    'Score': [100*round(lr_acc,4), 100*round(knn_acc,4), 100*round(svc_acc,4), 100*round(dtc_acc,4)]\n",
    "})\n",
    "models.sort_values(by = 'Score', ascending = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "id": "f394aff4-ce78-465b-98a9-aabfbc2b020b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: LR\n",
      "Mean Accuracy: 69.71%\n",
      "Mean ROC AUC: 76.83%\n",
      "------------------------------\n",
      "Model: DT\n",
      "Mean Accuracy: 87.24%\n",
      "Mean ROC AUC: 96.03%\n",
      "------------------------------\n",
      "Model: SVM\n",
      "Mean Accuracy: 61.81%\n",
      "Mean ROC AUC: 74.32%\n",
      "------------------------------\n",
      "Model: KNN\n",
      "Mean Accuracy: 81.54%\n",
      "Mean ROC AUC: 90.04%\n",
      "------------------------------\n"
     ]
    },
    {
     "data": {
      "image/png": "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lBTY2tqKz0tJSYGHh0eB61UoFFAU8OmKB7mSEQSB+5D0Tt2kpNiy+PdSvvAYRqVBqsew8vq3UqEuUMvKyoJcrlmyXC4Xd66TkxNsbGxw9epVcX56ejru3r0LHx+fMq2ViIiIiAyvQp3ZbdKkCbZs2QIHBwe4uroiJiYG27dvh7+/P4CXXzsFBARgy5YtcHFxgZOTEzZu3AhbW1s0a9bMwNUTERERUVmrUGF39OjRCAkJwYoVK5CSkgI7Ozt07twZ/fv3F5fp1asXsrKysGzZMqSnp8PX1xdTp06FUqk0YOVEREREZAgVKuyamZkhODgYwcHBBS4jk8kwaNAgDBo0qOwKIyIiIqJyqUL12SUiIiIiKg6GXSIiIiKSLIZdIiIiIpIshl0iIiIikiyGXSIiIiKSrAo1GgNVLLOHb5HcLR7H/djG0CUQERFRMfDMLhERERFJFsMuEREREUkWwy4RERERSRbDLhERERFJFsMuEREREUkWwy4RERERSRbDLhERERFJFsMuEREREUkWwy4RERERSRbvoEZERKQF7wJJJA08s0tEREREksWwS0RERESSxbBLRERERJLFsEtEREREksWwS0RERESSxbBLRERERJLFsEtEREREksWwS0RERESSxbBLRERERJLFsEtEREREksWwS0RERESSxbBLRERERJLFsEtEREREksWwS0RERESSxbBLRERERJLFsEtEREREkmVs6ALopQNrMw1dAhEREZHk8MwuEREREUkWwy4RERERSRbDLhERERFJFsMuEREREUkWwy4RERERSRbDLhERERFJVrGHHsvKysKVK1dw+/ZtxMXF4fnz5wCASpUqwdXVFTVr1kS9evVgamqq92KJiIiIiIqjyGH3/v37CA8Px5kzZ5CZmQmlUgl7e3tYWFgAAB49eoRr164hPDwcJiYmaNGiBXr06IFq1aqVWvFERERERIUpUtj96aefcPr0aXh5eWHAgAGoX78+XF1dIZdr9oJQqVSIi4vD5cuXcerUKUyePBktW7bEhx9+WBq1ExEREREVqkhhVyaTYe7cufDw8Ch0OblcjmrVqqFatWro0aMHYmJiEBYWpocyiYiIiIiKr0hhV9czsx4eHjyrS0REREQGw9EYiIiIiEiyij0agzaHDh3CsWPHkJSUBBsbG/j5+aFjx46QyWT6WD0RERERkU5KHHY3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ERERkT7oFHZbt26N/fv3IzIyMt+8/fv34+TJk2jbtm2JiyMiIiIiKgmdujH07dsXd+7cwbRp01C1alUAwJo1a5CWloakpCQ0atRI4yYNRERERESGoFPYNTY2xtSpU3H06FGcOnUKKpUKubm5cHd3x+DBg9G2bdtye39kIiIiInpz6HwHNZlMhrZt27K7AhERERGVWzr12U1LS8O9e/cKnH///n2kpaXpXBQRERERkT7oFHZXr16N33//vcD5v//+O9atW6dzUURERERE+qBT2L1+/XqhY902adIEV69e1bkoIiIiIiJ90CnspqamwsrKqsD5lSpVQkpKis5FERERERHpg05h18bGBtHR0QXOj4qKKjQMExERERGVBZ3CbrNmzXDgwAGcO3cu37yzZ8/i4MGDaN68eYmLIyIiIiIqCZ2GHhs4cCCuXr2K77//Hh4eHnBzcwMAxMbGIiYmBq6urhg4cKBeCyUiIiIiKi6dwq65uTlmz56Nbdu24fTp0zh16hQAoHLlyujXrx969uwJU1NTvRZKRERERFRcOt9UwtTUFAMHDuQZXCIiIiIqt3Tqs0tEREREVBHofGY3Li4Ohw4dwpMnT/DixQsIgqAxXyaT4ZtvvilxgUREREREutIp7B45cgRLliyBkZERqlSpAktLy3zL/Df8EhERERGVNZ3C7t9//43q1avjiy++4Hi6RERERFRu6dRnNykpCf7+/gy6RERERFSu6RR23d3dkZSUpO9aiIiIiIj0SqewO2LECBw8eBC3b9/Wdz1ERERERHqjU5/drVu3wtzcHN988w1cXV3h4OAAuVwzN8tkMkyePFkvRRIRERER6UKnsHv//n0AgIODAzIzMxEXF5dvGZlMVrLKiIiIiIhKSKewu3jxYn3XQURERESkd7yDGhERERFJls53UFPLyMhAenq61ptIODg4lHT1REREREQ60zns7t27F9u3b8eTJ08KXCYkJETX1RMRERERlZhO3Rj27t2LP/74A87Ozhg8eDAAIDAwEL1794aNjQ08PDwwfvx4vRZKRERERFRcOoXd3bt3o0GDBpg6dSo6deoEAGjcuDGGDBmCn376CRkZGXj+/LleCyUiIiIiKi6dwu6TJ0/QpEkTAICRkREAIDc3FwBgbm6ODh06YO/evXoqkYiIiIhINzqFXXNzc+Tl5Yn/VyqVSExMFOebmZkhOTlZLwUSEREREelKp7Dr5uaGe/fuiY99fHywb98+JCUlITExEfv374eLi4veiiQiIiIi0oVOYbdNmzaIjY1FTk4OAGDAgAGIi4vD+PHjMXHiRDx8+FC8cI2IiIiIyFB0GnrM398f/v7+4mNfX1/8+OOPOH/+PORyOerXr48qVarorUgiIiIiIl2U+KYSapUrV0ZAQIC+VkdEREREVGIlDrsqlQrp6ela51laWpZ09UREREREOtMp7Obm5mLr1q04ePAgnj59CpVKpXU53kGNiIiIiAxJp7D7+++/4/Dhw/Dx8UGzZs1gbm6u77qIiIiIiEpMp7B76tQptG3bFhMnTtR3PUREREREeqPT0GMmJiaoUaOGvmshIiIiItIrncJuq1atcOHCBX3XQkRERESkVzp1Yxg2bBiWLFmCuXPnwt/fH/b29pDL8+dmT0/PEhdIRERERKQrncJuTk4OBEHAxYsXcfHixQKX42gMRERERGRIOoXd3377DWfOnEGrVq3g7e3N0RiIiIiIqFzSKexevnwZ3bp1Q3BwsJ7LISIiIiLSH50uUDMzM4Ozs7O+ayEiIiIi0iudwm7Hjh1x/PjxAu+cRkRERERUHujUjcHV1RXnzp3DlClT0K5duwJHY2jRokWJCyQiIiIi0pVOYXfhwoXi/9etW1fgchyNgYiIiIgMSaewO23aNH3XQURERESkd8UOu9nZ2YiJiYGHhwdq165dGjUREREREelFsS9QUyqV+PPPP/Hw4cPSqIeIiIiISG90Go2hWrVqSEhI0HctRERERER6pVPYHTx4MPbv348rV67oux4iIiIiIr3R6QK13bt3w9LSErNnz4aTkxOcnJygVCo1lpHJZJg8ebJeiiQiIiIi0oVOYff+/fsAAAcHB6hUKjx+/DjfMjKZrGSVERERERGVkE5hd/Hixfqug4iIiIhI73Tqs0tEREREVBHodGZX7caNG7hw4YI4MoOjoyMaN27M8XeJiIiIqFzQKezm5uZi4cKFOHv2LADA3NwcAJCeno7w8HA0b94ckyZNgrFxibI0EREREVGJ6JRG//77b5w9exY9evRAUFAQbGxsAAApKSkIDw9HeHg4Nm/ejMGDB+uzViIiIiKiYtGpz+6xY8fQrl07DBs2TAy6AGBtbY1hw4ahbdu2OHr0qL5qJCIiIiLSiU5hNzk5Gd7e3gXOr1GjBpKTk3WtiYiIiIhIL3QKu3Z2drhx40aB82/cuAE7OzudiyIiIiIi0gedwm67du1w8uRJ/P7773j48CFUKhVUKhUePnyI5cuX4+TJk2jfvr2eSyUiIiIiKh6dLlDr27cvnjx5goiICEREREAuf5mZVSoVgJdhuE+fPvqrsgBhYWH466+/EBAQgODgYABAdnY21q5dixMnTiAnJwcNGjTAmDFjNPoWExEREdGbQaewK5fLMXHiRAQFBeHixYsa4+w2atQI7u7uei1Sm7t372Lfvn35trVmzRpcuHABH3/8MczNzfHHH39gwYIFmDVrVqnXRERERETlS5HC7pQpUzBkyBA0bNgQAHD48GHUqlUL7u7uZRJs/yszMxOLFi3CO++8gy1btojT09PTceDAAUyaNAl169YFAEyYMAEfffQRIiMj4ePjU+a1EhEREZHhFKnP7r1795Camio+XrJkCSIjI0utqNdZsWIFGjVqhPr162tMj4qKQl5eHurVqydOq1q1KhwcHAqtNycnB+np6eJPRkaGOE8mk5XJj9SoX5LUXllZtQe2r8JJtX0BbGPlhVTbmKHbCdvXS2xfZdsuinRm19HREVevXkXr1q3F/rmGcvz4cURHR2POnDn55iUnJ8PY2BgWFhYa062trQsdCi00NBSbN28WH1evXh3z5s2Do6Oj3up+HYUitsy2VZaMFQpDl6BXLi4uhi5BJ2xfFQfbWPkitTbG9lW+sH2VjSKF3c6dO+PPP//EsWPHoFQqAQBLly7F8uXLC33emjVrSl7hKxITE7F69Wp89dVXYh360KdPHwQFBYmP1Z8WEhISkJubq7ftFCYnJ6dMtlNW1B+4cnNyIBi2FL169OiRoUvQCdtXxcE2Vj5ItY2xfZUPbF/6YWxsXKQTk0UKuz179oS7uzuuX7+O5ORkHD58GF5eXqhcuXKJCy2OqKgopKSkYMqUKeI0lUqFmzdvYvfu3fjyyy+Rm5uLFy9eaJzdTUlJKXQ0BoVCAUUBn64EQUrNsOyod5vU9h7bQ/kg1fYFsI2VF1JtY2xf5QPbV9kq8mgMDRo0QIMGDQC8vECtc+fOaN26dakVpk29evXwww8/aEz77bffUKVKFfTq1QsODg4wMjLC1atX0bJlSwDAw4cPkZiYyIvTiIiIiN5AxR56LDs7G927d4epqWlp1FMoMzMzVKtWTWOaiYkJKlWqJE7v0KED1q5dC0tLS5ibm2PlypXw8fFh2CUiIiJ6AxU77CqVSkRERMDNza006imxkSNHQiaTYcGCBcjNzRVvKkFEREREbx6dbirh6emJ2NjycWXk9OnTNR4rlUqMGTOGAZeIiIiIijbO7n+NHDkSx48fR0REBPLy8vRdExERERGRXuh0ZnfJkiWQy+X4/fffsWrVKtjZ2eUbCkwmk+H777/XS5FERERERLrQKexaWlqiUqVKqFKlir7rISIiIiLSG53C7n/7yRIRERERlUeGvfcvEREREVEp0unMLgCkp6dj7969uH79OlJSUjBu3Dh4e3sjLS0Nhw4dQtOmTeHs7KzPWomIiIiIikWnsPv06VNMnz4diYmJcHFxwYMHD5CZmQngZX/effv2ISEhAaNGjdJrsURERERExaFT2F23bh0yMjLw/fffw8rKCmPHjtWY36xZM1y4cEEvBRIRERER6UqnPrtXrlxB9+7d4erqCplMlm9+5cqV8fTp0xIXR0RERERUEjqF3ezsbFhZWRU4PyMjQ+eCiIiIiIj0Raew6+rqips3bxY4/+zZs/Dw8NC1JiIiIiIivdAp7AYEBOD48eMICwtDeno6AEClUuHx48dYtGgRIiMjERgYqNdCiYiIiIiKS6cL1Nq2bYvExESEhIRg48aNAIDvvvsOgiBALpdjyJAhaN68uV4LJSIiIiIqLp3H2e3bty/atm2LU6dO4fHjxxAEAZUrV0aLFi1QuXJlfdZIRERERKSTYoXd7OxsnDt3DvHx8bC0tESTJk0QFBRUWrUREREREZVIkcNuSkoKvvrqK8THx4vT1qxZg88++wz169cvleKIiIiIiEqiyBeo/fPPP0hISEBgYCCmTJmCkSNHQqlUYvny5aVZHxERERGRzop8Zvfy5cto27YtRowYIU6zsbHBzz//jIcPH6JKlSqlUiARERERka6KfGY3MTERvr6+GtPUj5OTk/VaFBERERGRPhQ57Obm5kKpVGpMUygUAF6OsUtEREREVN4UazSG+Ph4REVFiY/VN5R49OgRzM3N8y3v6elZwvKIiIiIiHRXrLAbEhKCkJCQfNNXrFhR4PJERERERIZS5LA7fvz40qyDiIiIiEjvihx227dvX4plEBERERHpX5EvUCMiIiIiqmgYdomIiIhIshh2iYiIiEiyGHaJiIiI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",
      "text/plain": [
       "<Figure size 800x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn import metrics\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Define models with labels\n",
    "models = [\n",
    "    {'label': 'LR', 'model': lr},\n",
    "    {'label': 'DT', 'model': dtc},\n",
    "    {'label': 'SVM', 'model': svc},\n",
    "    {'label': 'KNN', 'model': knn}\n",
    "]\n",
    "\n",
    "# Initialize lists to store performance metrics\n",
    "means_roc = []\n",
    "means_accuracy = []\n",
    "\n",
    "# Evaluate each model\n",
    "for m in models:\n",
    "    model = m['model']\n",
    "    label = m['label']\n",
    "    \n",
    "    # Fit model and make predictions\n",
    "    model.fit(X_train, y_train)\n",
    "    y_pred = model.predict(X_test)\n",
    "    \n",
    "    # Calculate accuracy\n",
    "    accuracy = metrics.accuracy_score(y_test, y_pred)\n",
    "    mean_accuracy = 100 * round(accuracy, 4)\n",
    "    means_accuracy.append(mean_accuracy)\n",
    "    \n",
    "    # Calculate ROC AUC\n",
    "    if hasattr(model, 'predict_proba'):\n",
    "        y_pred_prob = model.predict_proba(X_test)[:,1]\n",
    "        mean_roc = 100 * round(metrics.roc_auc_score(y_test, y_pred_prob), 4)\n",
    "    else:\n",
    "        mean_roc = np.nan  # Use NaN if predict_proba is not available\n",
    "    \n",
    "    means_roc.append(mean_roc)\n",
    "    \n",
    "    # Display mean accuracy and mean ROC AUC for each model\n",
    "    print(f\"Model: {label}\")\n",
    "    print(f\"Mean Accuracy: {mean_accuracy:.2f}%\")\n",
    "    print(f\"Mean ROC AUC: {mean_roc:.2f}%\")\n",
    "    print(\"-\" * 30)\n",
    "\n",
    "# Convert lists to tuples for plotting\n",
    "means_accuracy = tuple(means_accuracy)\n",
    "means_roc = tuple(means_roc)\n",
    "\n",
    "# Create plot\n",
    "index = np.arange(len(models))\n",
    "bar_width = 0.35\n",
    "\n",
    "# Create a figure\n",
    "fig, ax = plt.subplots(figsize=(8, 5))\n",
    "\n",
    "# Plot accuracy and ROC AUC as bar charts\n",
    "rects1 = plt.bar(index, means_accuracy, bar_width, alpha=0.8, color='mediumpurple', label='Accuracy (%)')\n",
    "rects2 = plt.bar(index + bar_width, means_roc, bar_width, alpha=0.8, color='rebeccapurple', label='ROC AUC (%)')\n",
    "\n",
    "# Set axis labels and title\n",
    "ax.set_xlabel('Models')\n",
    "ax.set_ylabel('Performance (%)')\n",
    "ax.set_title('Performance Evaluation - Liver Disease Prediction')\n",
    "\n",
    "# Set x-ticks and labels\n",
    "ax.set_xticks(index + bar_width / 2)\n",
    "ax.set_xticklabels([model['label'] for model in models], rotation=40, ha='center')\n",
    "\n",
    "# Add legend\n",
    "ax.legend()\n",
    "\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "id": "4339012f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>Age of the patient</th>\n",
       "      <th>Gender of the patient</th>\n",
       "      <th>Total Bilirubin</th>\n",
       "      <th>Direct Bilirubin</th>\n",
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
       "      <th>Aspartate_Aminotransferase</th>\n",
       "      <th>Total Protiens</th>\n",
       "      <th>ALB Albumin</th>\n",
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
       "      <th>Result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>15940</th>\n",
       "      <td>50.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.8</td>\n",
       "      <td>0.2</td>\n",
       "      <td>148.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11861</th>\n",
       "      <td>30.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.8</td>\n",
       "      <td>0.2</td>\n",
       "      <td>650.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>138.0</td>\n",
       "      <td>6.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>0.8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14768</th>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2.2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>310.0</td>\n",
       "      <td>119.0</td>\n",
       "      <td>42.0</td>\n",
       "      <td>7.9</td>\n",
       "      <td>4.1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17664</th>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.1</td>\n",
       "      <td>162.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>41.0</td>\n",
       "      <td>5.2</td>\n",
       "      <td>2.5</td>\n",
       "      <td>0.9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4052</th>\n",
       "      <td>57.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.8</td>\n",
       "      <td>178.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>4.6</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Age of the patient  Gender of the patient  Total Bilirubin  \\\n",
       "15940                50.0                      1              0.8   \n",
       "11861                30.0                      1              0.8   \n",
       "14768                35.0                      1              2.2   \n",
       "17664                26.0                      0              0.7   \n",
       "4052                 57.0                      0              1.4   \n",
       "\n",
       "       Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
       "15940               0.2                          148.0   \n",
       "11861               0.2                          650.0   \n",
       "14768               1.0                          310.0   \n",
       "17664               0.1                          162.0   \n",
       "4052                0.8                          178.0   \n",
       "\n",
       "        Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  \\\n",
       "15940                            23.0                        35.0   \n",
       "11861                            70.0                       138.0   \n",
       "14768                           119.0                        42.0   \n",
       "17664                            52.0                        41.0   \n",
       "4052                             13.0                        26.0   \n",
       "\n",
       "       Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  \\\n",
       "15940             6.0           3.0                                   1.0   \n",
       "11861             6.6           3.1                                   0.8   \n",
       "14768             7.9           4.1                                   1.0   \n",
       "17664             5.2           2.5                                   0.9   \n",
       "4052              8.0           4.6                                   1.3   \n",
       "\n",
       "       Result  \n",
       "15940       1  \n",
       "11861       1  \n",
       "14768       0  \n",
       "17664       0  \n",
       "4052        0  "
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sample(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "id": "d7770e6a-f844-4c3c-8a8f-3c864d76f281",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1]\n",
      "M\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "input_data =(26.0,0,0.7,0.1,162.0,52.0,41.0,5.2,2.5,0.9)\n",
    "#(26.0,0,0.7,0.2,185.0,16.0,22.0,7.3,3.7,1.00)\n",
    "#100,12,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1) \n",
    "\n",
    "'''(14.36,0.09779,0.08129,0.04781,0.1885,0.05766,0.7886,23.56,0.008462,\n",
    "0.0146,0.02387,0.01315,0.0198,0.0023,15.11,711.2,0.144,0.1773,0.239,0.1288,0.2977,0.07259\n",
    ")'''\n",
    "\n",
    "input_data_as_numpy_array = np.asarray(input_data)\n",
    "\n",
    "# reshape the array as we are predicting for one instance\n",
    "input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
    "predictions = lr.predict(input_data_reshaped)\n",
    "print(predictions)\n",
    "if (predictions == 0):\n",
    "  print('B')\n",
    "else:\n",
    "  print('M')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e8337a7a-1d7d-4141-821c-ba6d4af45151",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1f597232-8f9c-4a8d-8edd-495539d95274",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "import pickle\n",
    "model = dtc\n",
    "filename = r'C:\\Users\\Pranshu Saini\\Desktop\\disease-prediction-main\\docpat\\model\\liver_prediction.pkl'\n",
    "pickle.dump(model, open(filename,'wb'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "10843248",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fd047969",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}