Diff of /liver_prediction.ipynb [000000] .. [b018ba]

Switch to unified view

a b/liver_prediction.ipynb
1
{
2
 "cells": [
3
  {
4
   "cell_type": "markdown",
5
   "id": "073c1361-bcae-45d9-ad98-a07133b4f412",
6
   "metadata": {},
7
   "source": [
8
    "Liver Disease Prediction"
9
   ]
10
  },
11
  {
12
   "cell_type": "code",
13
   "execution_count": 1,
14
   "id": "ce0cfb84-91cc-46d0-9971-3478aa0045a4",
15
   "metadata": {},
16
   "outputs": [
17
    {
18
     "ename": "ModuleNotFoundError",
19
     "evalue": "No module named 'seaborn'",
20
     "output_type": "error",
21
     "traceback": [
22
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
23
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
24
      "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",
25
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'seaborn'"
26
     ]
27
    }
28
   ],
29
   "source": [
30
    "\n",
31
    "import numpy as np\n",
32
    "import pandas as pd\n",
33
    "import seaborn as sns\n",
34
    "from matplotlib import pyplot as plt\n",
35
    "\n",
36
    "# Ignore Warnings\n",
37
    "import warnings\n",
38
    "warnings.filterwarnings(\"ignore\")\n",
39
    "\n",
40
    "from math import sqrt\n",
41
    "from sklearn.model_selection import train_test_split\n",
42
    "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
43
    "\n",
44
    "from sklearn.model_selection import GridSearchCV\n",
45
    "\n",
46
    "\n",
47
    "\n",
48
    "from sklearn.linear_model import LogisticRegression\n",
49
    "from sklearn.tree import DecisionTreeClassifier\n",
50
    "from sklearn.svm import SVC\n",
51
    "from sklearn.preprocessing import StandardScaler\n",
52
    "from sklearn.model_selection import train_test_split\n",
53
    "from sklearn.neighbors import KNeighborsClassifier\n",
54
    "\n",
55
    "plt.style.use('ggplot')\n"
56
   ]
57
  },
58
  {
59
   "cell_type": "code",
60
   "execution_count": 133,
61
   "id": "5d94117e-65b4-4806-b4d4-36eab6594700",
62
   "metadata": {},
63
   "outputs": [
64
    {
65
     "data": {
66
      "text/html": [
67
       "<div>\n",
68
       "<style scoped>\n",
69
       "    .dataframe tbody tr th:only-of-type {\n",
70
       "        vertical-align: middle;\n",
71
       "    }\n",
72
       "\n",
73
       "    .dataframe tbody tr th {\n",
74
       "        vertical-align: top;\n",
75
       "    }\n",
76
       "\n",
77
       "    .dataframe thead th {\n",
78
       "        text-align: right;\n",
79
       "    }\n",
80
       "</style>\n",
81
       "<table border=\"1\" class=\"dataframe\">\n",
82
       "  <thead>\n",
83
       "    <tr style=\"text-align: right;\">\n",
84
       "      <th></th>\n",
85
       "      <th>Age of the patient</th>\n",
86
       "      <th>Gender of the patient</th>\n",
87
       "      <th>Total Bilirubin</th>\n",
88
       "      <th>Direct Bilirubin</th>\n",
89
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
90
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
91
       "      <th>Sgot Aspartate Aminotransferase</th>\n",
92
       "      <th>Total Protiens</th>\n",
93
       "      <th>ALB Albumin</th>\n",
94
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
95
       "      <th>Result</th>\n",
96
       "    </tr>\n",
97
       "  </thead>\n",
98
       "  <tbody>\n",
99
       "    <tr>\n",
100
       "      <th>0</th>\n",
101
       "      <td>65.0</td>\n",
102
       "      <td>Female</td>\n",
103
       "      <td>0.7</td>\n",
104
       "      <td>0.1</td>\n",
105
       "      <td>187.0</td>\n",
106
       "      <td>16.0</td>\n",
107
       "      <td>18.0</td>\n",
108
       "      <td>6.8</td>\n",
109
       "      <td>3.3</td>\n",
110
       "      <td>0.90</td>\n",
111
       "      <td>1</td>\n",
112
       "    </tr>\n",
113
       "    <tr>\n",
114
       "      <th>1</th>\n",
115
       "      <td>62.0</td>\n",
116
       "      <td>Male</td>\n",
117
       "      <td>10.9</td>\n",
118
       "      <td>5.5</td>\n",
119
       "      <td>699.0</td>\n",
120
       "      <td>64.0</td>\n",
121
       "      <td>100.0</td>\n",
122
       "      <td>7.5</td>\n",
123
       "      <td>3.2</td>\n",
124
       "      <td>0.74</td>\n",
125
       "      <td>1</td>\n",
126
       "    </tr>\n",
127
       "    <tr>\n",
128
       "      <th>2</th>\n",
129
       "      <td>62.0</td>\n",
130
       "      <td>Male</td>\n",
131
       "      <td>7.3</td>\n",
132
       "      <td>4.1</td>\n",
133
       "      <td>490.0</td>\n",
134
       "      <td>60.0</td>\n",
135
       "      <td>68.0</td>\n",
136
       "      <td>7.0</td>\n",
137
       "      <td>3.3</td>\n",
138
       "      <td>0.89</td>\n",
139
       "      <td>1</td>\n",
140
       "    </tr>\n",
141
       "    <tr>\n",
142
       "      <th>3</th>\n",
143
       "      <td>58.0</td>\n",
144
       "      <td>Male</td>\n",
145
       "      <td>1.0</td>\n",
146
       "      <td>0.4</td>\n",
147
       "      <td>182.0</td>\n",
148
       "      <td>14.0</td>\n",
149
       "      <td>20.0</td>\n",
150
       "      <td>6.8</td>\n",
151
       "      <td>3.4</td>\n",
152
       "      <td>1.00</td>\n",
153
       "      <td>1</td>\n",
154
       "    </tr>\n",
155
       "    <tr>\n",
156
       "      <th>4</th>\n",
157
       "      <td>72.0</td>\n",
158
       "      <td>Male</td>\n",
159
       "      <td>3.9</td>\n",
160
       "      <td>2.0</td>\n",
161
       "      <td>195.0</td>\n",
162
       "      <td>27.0</td>\n",
163
       "      <td>59.0</td>\n",
164
       "      <td>7.3</td>\n",
165
       "      <td>2.4</td>\n",
166
       "      <td>0.40</td>\n",
167
       "      <td>1</td>\n",
168
       "    </tr>\n",
169
       "  </tbody>\n",
170
       "</table>\n",
171
       "</div>"
172
      ],
173
      "text/plain": [
174
       "   Age of the patient Gender of the patient  Total Bilirubin  \\\n",
175
       "0                65.0                Female              0.7   \n",
176
       "1                62.0                  Male             10.9   \n",
177
       "2                62.0                  Male              7.3   \n",
178
       "3                58.0                  Male              1.0   \n",
179
       "4                72.0                  Male              3.9   \n",
180
       "\n",
181
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
182
       "0               0.1                          187.0   \n",
183
       "1               5.5                          699.0   \n",
184
       "2               4.1                          490.0   \n",
185
       "3               0.4                          182.0   \n",
186
       "4               2.0                          195.0   \n",
187
       "\n",
188
       "    Sgpt Alamine Aminotransferase  Sgot Aspartate Aminotransferase  \\\n",
189
       "0                            16.0                             18.0   \n",
190
       "1                            64.0                            100.0   \n",
191
       "2                            60.0                             68.0   \n",
192
       "3                            14.0                             20.0   \n",
193
       "4                            27.0                             59.0   \n",
194
       "\n",
195
       "   Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
196
       "0             6.8           3.3                                  0.90       1  \n",
197
       "1             7.5           3.2                                  0.74       1  \n",
198
       "2             7.0           3.3                                  0.89       1  \n",
199
       "3             6.8           3.4                                  1.00       1  \n",
200
       "4             7.3           2.4                                  0.40       1  "
201
      ]
202
     },
203
     "execution_count": 133,
204
     "metadata": {},
205
     "output_type": "execute_result"
206
    }
207
   ],
208
   "source": [
209
    "df=pd.read_csv(r'datasets\\Liver.csv',encoding='ISO-8859-1')\n",
210
    "df.head()"
211
   ]
212
  },
213
  {
214
   "cell_type": "code",
215
   "execution_count": 134,
216
   "id": "2a8f3ab1-5de2-4b9d-9aa9-8cc2d1e8e6f7",
217
   "metadata": {},
218
   "outputs": [
219
    {
220
     "data": {
221
      "text/html": [
222
       "<div>\n",
223
       "<style scoped>\n",
224
       "    .dataframe tbody tr th:only-of-type {\n",
225
       "        vertical-align: middle;\n",
226
       "    }\n",
227
       "\n",
228
       "    .dataframe tbody tr th {\n",
229
       "        vertical-align: top;\n",
230
       "    }\n",
231
       "\n",
232
       "    .dataframe thead th {\n",
233
       "        text-align: right;\n",
234
       "    }\n",
235
       "</style>\n",
236
       "<table border=\"1\" class=\"dataframe\">\n",
237
       "  <thead>\n",
238
       "    <tr style=\"text-align: right;\">\n",
239
       "      <th></th>\n",
240
       "      <th>Age of the patient</th>\n",
241
       "      <th>Gender of the patient</th>\n",
242
       "      <th>Total Bilirubin</th>\n",
243
       "      <th>Direct Bilirubin</th>\n",
244
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
245
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
246
       "      <th>Aspartate_Aminotransferase</th>\n",
247
       "      <th>Total Protiens</th>\n",
248
       "      <th>ALB Albumin</th>\n",
249
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
250
       "      <th>Result</th>\n",
251
       "    </tr>\n",
252
       "  </thead>\n",
253
       "  <tbody>\n",
254
       "    <tr>\n",
255
       "      <th>0</th>\n",
256
       "      <td>65.0</td>\n",
257
       "      <td>Female</td>\n",
258
       "      <td>0.7</td>\n",
259
       "      <td>0.1</td>\n",
260
       "      <td>187.0</td>\n",
261
       "      <td>16.0</td>\n",
262
       "      <td>18.0</td>\n",
263
       "      <td>6.8</td>\n",
264
       "      <td>3.3</td>\n",
265
       "      <td>0.90</td>\n",
266
       "      <td>1</td>\n",
267
       "    </tr>\n",
268
       "    <tr>\n",
269
       "      <th>1</th>\n",
270
       "      <td>62.0</td>\n",
271
       "      <td>Male</td>\n",
272
       "      <td>10.9</td>\n",
273
       "      <td>5.5</td>\n",
274
       "      <td>699.0</td>\n",
275
       "      <td>64.0</td>\n",
276
       "      <td>100.0</td>\n",
277
       "      <td>7.5</td>\n",
278
       "      <td>3.2</td>\n",
279
       "      <td>0.74</td>\n",
280
       "      <td>1</td>\n",
281
       "    </tr>\n",
282
       "    <tr>\n",
283
       "      <th>2</th>\n",
284
       "      <td>62.0</td>\n",
285
       "      <td>Male</td>\n",
286
       "      <td>7.3</td>\n",
287
       "      <td>4.1</td>\n",
288
       "      <td>490.0</td>\n",
289
       "      <td>60.0</td>\n",
290
       "      <td>68.0</td>\n",
291
       "      <td>7.0</td>\n",
292
       "      <td>3.3</td>\n",
293
       "      <td>0.89</td>\n",
294
       "      <td>1</td>\n",
295
       "    </tr>\n",
296
       "    <tr>\n",
297
       "      <th>3</th>\n",
298
       "      <td>58.0</td>\n",
299
       "      <td>Male</td>\n",
300
       "      <td>1.0</td>\n",
301
       "      <td>0.4</td>\n",
302
       "      <td>182.0</td>\n",
303
       "      <td>14.0</td>\n",
304
       "      <td>20.0</td>\n",
305
       "      <td>6.8</td>\n",
306
       "      <td>3.4</td>\n",
307
       "      <td>1.00</td>\n",
308
       "      <td>1</td>\n",
309
       "    </tr>\n",
310
       "    <tr>\n",
311
       "      <th>4</th>\n",
312
       "      <td>72.0</td>\n",
313
       "      <td>Male</td>\n",
314
       "      <td>3.9</td>\n",
315
       "      <td>2.0</td>\n",
316
       "      <td>195.0</td>\n",
317
       "      <td>27.0</td>\n",
318
       "      <td>59.0</td>\n",
319
       "      <td>7.3</td>\n",
320
       "      <td>2.4</td>\n",
321
       "      <td>0.40</td>\n",
322
       "      <td>1</td>\n",
323
       "    </tr>\n",
324
       "  </tbody>\n",
325
       "</table>\n",
326
       "</div>"
327
      ],
328
      "text/plain": [
329
       "   Age of the patient Gender of the patient  Total Bilirubin  \\\n",
330
       "0                65.0                Female              0.7   \n",
331
       "1                62.0                  Male             10.9   \n",
332
       "2                62.0                  Male              7.3   \n",
333
       "3                58.0                  Male              1.0   \n",
334
       "4                72.0                  Male              3.9   \n",
335
       "\n",
336
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
337
       "0               0.1                          187.0   \n",
338
       "1               5.5                          699.0   \n",
339
       "2               4.1                          490.0   \n",
340
       "3               0.4                          182.0   \n",
341
       "4               2.0                          195.0   \n",
342
       "\n",
343
       "    Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  Total Protiens  \\\n",
344
       "0                            16.0                        18.0             6.8   \n",
345
       "1                            64.0                       100.0             7.5   \n",
346
       "2                            60.0                        68.0             7.0   \n",
347
       "3                            14.0                        20.0             6.8   \n",
348
       "4                            27.0                        59.0             7.3   \n",
349
       "\n",
350
       "    ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
351
       "0           3.3                                  0.90       1  \n",
352
       "1           3.2                                  0.74       1  \n",
353
       "2           3.3                                  0.89       1  \n",
354
       "3           3.4                                  1.00       1  \n",
355
       "4           2.4                                  0.40       1  "
356
      ]
357
     },
358
     "execution_count": 134,
359
     "metadata": {},
360
     "output_type": "execute_result"
361
    }
362
   ],
363
   "source": [
364
    "column_rename_dict = {\n",
365
    "    'Sgot Aspartate Aminotransferase': 'Aspartate_Aminotransferase'\n",
366
    "}\n",
367
    "\n",
368
    "df.rename(columns=column_rename_dict, inplace=True)\n",
369
    "df.head()"
370
   ]
371
  },
372
  {
373
   "cell_type": "code",
374
   "execution_count": 135,
375
   "id": "beafdf96",
376
   "metadata": {},
377
   "outputs": [
378
    {
379
     "name": "stdout",
380
     "output_type": "stream",
381
     "text": [
382
      "[1]\n",
383
      "M\n"
384
     ]
385
    }
386
   ],
387
   "source": [
388
    "from sklearn.linear_model import LogisticRegression\n",
389
    "input_data =(26.0,0,0.7,0.2,185.0,16.0,22.0,7.3,3.7,1.00\n",
390
    ")\n",
391
    "#100,12,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1) \n",
392
    "\n",
393
    "'''(14.36,0.09779,0.08129,0.04781,0.1885,0.05766,0.7886,23.56,0.008462,\n",
394
    "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",
395
    ")'''\n",
396
    "\n",
397
    "input_data_as_numpy_array = np.asarray(input_data)\n",
398
    "\n",
399
    "# reshape the array as we are predicting for one instance\n",
400
    "input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
401
    "predictions = svc.predict(input_data_reshaped)\n",
402
    "print(predictions)\n",
403
    "if (predictions == 0):\n",
404
    "  print('B')\n",
405
    "else:\n",
406
    "  print('M')"
407
   ]
408
  },
409
  {
410
   "cell_type": "code",
411
   "execution_count": 136,
412
   "id": "da3fe93c-cf85-44bd-b380-6b76b8047fba",
413
   "metadata": {},
414
   "outputs": [
415
    {
416
     "data": {
417
      "text/plain": [
418
       "(30691, 11)"
419
      ]
420
     },
421
     "execution_count": 136,
422
     "metadata": {},
423
     "output_type": "execute_result"
424
    }
425
   ],
426
   "source": [
427
    "df.shape"
428
   ]
429
  },
430
  {
431
   "cell_type": "markdown",
432
   "id": "5ffcf663-aa04-47bc-9006-68315a8e1cf6",
433
   "metadata": {},
434
   "source": [
435
    "\n",
436
    "Exploratory Data Analysis"
437
   ]
438
  },
439
  {
440
   "cell_type": "code",
441
   "execution_count": 137,
442
   "id": "40315d82-475f-439f-aa15-cb287393b7a7",
443
   "metadata": {},
444
   "outputs": [
445
    {
446
     "data": {
447
      "text/plain": [
448
       "5425"
449
      ]
450
     },
451
     "execution_count": 137,
452
     "metadata": {},
453
     "output_type": "execute_result"
454
    }
455
   ],
456
   "source": [
457
    "df.isna().sum().sum()"
458
   ]
459
  },
460
  {
461
   "cell_type": "code",
462
   "execution_count": 138,
463
   "id": "2ce172d1-e6ec-46a3-941c-bb414dab5192",
464
   "metadata": {},
465
   "outputs": [
466
    {
467
     "data": {
468
      "text/plain": [
469
       "Age of the patient                      0\n",
470
       "Gender of the patient                   0\n",
471
       "Total Bilirubin                         0\n",
472
       "Direct Bilirubin                        0\n",
473
       " Alkphos Alkaline Phosphotase           0\n",
474
       " Sgpt Alamine Aminotransferase          0\n",
475
       "Aspartate_Aminotransferase              0\n",
476
       "Total Protiens                          0\n",
477
       " ALB Albumin                            0\n",
478
       "A/G Ratio Albumin and Globulin Ratio    0\n",
479
       "Result                                  0\n",
480
       "dtype: int64"
481
      ]
482
     },
483
     "execution_count": 138,
484
     "metadata": {},
485
     "output_type": "execute_result"
486
    }
487
   ],
488
   "source": [
489
    "df = df.dropna()\n",
490
    "df.isna().sum()"
491
   ]
492
  },
493
  {
494
   "cell_type": "markdown",
495
   "id": "b58e5846-2b1f-45a7-8689-57a17d124404",
496
   "metadata": {},
497
   "source": [
498
    "Distribution of Numerical Features"
499
   ]
500
  },
501
  {
502
   "cell_type": "code",
503
   "execution_count": 139,
504
   "id": "4716666d-5d2e-4d7c-a366-5907ce220b57",
505
   "metadata": {},
506
   "outputs": [
507
    {
508
     "data": {
509
      "text/html": [
510
       "<div>\n",
511
       "<style scoped>\n",
512
       "    .dataframe tbody tr th:only-of-type {\n",
513
       "        vertical-align: middle;\n",
514
       "    }\n",
515
       "\n",
516
       "    .dataframe tbody tr th {\n",
517
       "        vertical-align: top;\n",
518
       "    }\n",
519
       "\n",
520
       "    .dataframe thead th {\n",
521
       "        text-align: right;\n",
522
       "    }\n",
523
       "</style>\n",
524
       "<table border=\"1\" class=\"dataframe\">\n",
525
       "  <thead>\n",
526
       "    <tr style=\"text-align: right;\">\n",
527
       "      <th></th>\n",
528
       "      <th>Age of the patient</th>\n",
529
       "      <th>Gender of the patient</th>\n",
530
       "      <th>Total Bilirubin</th>\n",
531
       "      <th>Direct Bilirubin</th>\n",
532
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
533
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
534
       "      <th>Aspartate_Aminotransferase</th>\n",
535
       "      <th>Total Protiens</th>\n",
536
       "      <th>ALB Albumin</th>\n",
537
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
538
       "      <th>Result</th>\n",
539
       "    </tr>\n",
540
       "  </thead>\n",
541
       "  <tbody>\n",
542
       "    <tr>\n",
543
       "      <th>5090</th>\n",
544
       "      <td>29.0</td>\n",
545
       "      <td>Female</td>\n",
546
       "      <td>1.3</td>\n",
547
       "      <td>0.6</td>\n",
548
       "      <td>166.0</td>\n",
549
       "      <td>49.0</td>\n",
550
       "      <td>42.0</td>\n",
551
       "      <td>5.6</td>\n",
552
       "      <td>2.5</td>\n",
553
       "      <td>0.80</td>\n",
554
       "      <td>2</td>\n",
555
       "    </tr>\n",
556
       "    <tr>\n",
557
       "      <th>3055</th>\n",
558
       "      <td>16.0</td>\n",
559
       "      <td>Male</td>\n",
560
       "      <td>0.6</td>\n",
561
       "      <td>0.1</td>\n",
562
       "      <td>186.0</td>\n",
563
       "      <td>20.0</td>\n",
564
       "      <td>21.0</td>\n",
565
       "      <td>6.2</td>\n",
566
       "      <td>3.3</td>\n",
567
       "      <td>1.10</td>\n",
568
       "      <td>2</td>\n",
569
       "    </tr>\n",
570
       "    <tr>\n",
571
       "      <th>24182</th>\n",
572
       "      <td>38.0</td>\n",
573
       "      <td>Male</td>\n",
574
       "      <td>1.1</td>\n",
575
       "      <td>0.5</td>\n",
576
       "      <td>128.0</td>\n",
577
       "      <td>20.0</td>\n",
578
       "      <td>30.0</td>\n",
579
       "      <td>3.9</td>\n",
580
       "      <td>1.9</td>\n",
581
       "      <td>0.95</td>\n",
582
       "      <td>2</td>\n",
583
       "    </tr>\n",
584
       "    <tr>\n",
585
       "      <th>30230</th>\n",
586
       "      <td>60.0</td>\n",
587
       "      <td>Female</td>\n",
588
       "      <td>1.4</td>\n",
589
       "      <td>0.7</td>\n",
590
       "      <td>195.0</td>\n",
591
       "      <td>36.0</td>\n",
592
       "      <td>16.0</td>\n",
593
       "      <td>7.9</td>\n",
594
       "      <td>3.7</td>\n",
595
       "      <td>0.90</td>\n",
596
       "      <td>2</td>\n",
597
       "    </tr>\n",
598
       "    <tr>\n",
599
       "      <th>20921</th>\n",
600
       "      <td>56.0</td>\n",
601
       "      <td>Male</td>\n",
602
       "      <td>5.0</td>\n",
603
       "      <td>2.1</td>\n",
604
       "      <td>103.0</td>\n",
605
       "      <td>18.0</td>\n",
606
       "      <td>40.0</td>\n",
607
       "      <td>5.0</td>\n",
608
       "      <td>2.1</td>\n",
609
       "      <td>1.72</td>\n",
610
       "      <td>1</td>\n",
611
       "    </tr>\n",
612
       "  </tbody>\n",
613
       "</table>\n",
614
       "</div>"
615
      ],
616
      "text/plain": [
617
       "       Age of the patient Gender of the patient  Total Bilirubin  \\\n",
618
       "5090                 29.0                Female              1.3   \n",
619
       "3055                 16.0                  Male              0.6   \n",
620
       "24182                38.0                  Male              1.1   \n",
621
       "30230                60.0                Female              1.4   \n",
622
       "20921                56.0                  Male              5.0   \n",
623
       "\n",
624
       "       Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
625
       "5090                0.6                          166.0   \n",
626
       "3055                0.1                          186.0   \n",
627
       "24182               0.5                          128.0   \n",
628
       "30230               0.7                          195.0   \n",
629
       "20921               2.1                          103.0   \n",
630
       "\n",
631
       "        Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  \\\n",
632
       "5090                             49.0                        42.0   \n",
633
       "3055                             20.0                        21.0   \n",
634
       "24182                            20.0                        30.0   \n",
635
       "30230                            36.0                        16.0   \n",
636
       "20921                            18.0                        40.0   \n",
637
       "\n",
638
       "       Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  \\\n",
639
       "5090              5.6           2.5                                  0.80   \n",
640
       "3055              6.2           3.3                                  1.10   \n",
641
       "24182             3.9           1.9                                  0.95   \n",
642
       "30230             7.9           3.7                                  0.90   \n",
643
       "20921             5.0           2.1                                  1.72   \n",
644
       "\n",
645
       "       Result  \n",
646
       "5090        2  \n",
647
       "3055        2  \n",
648
       "24182       2  \n",
649
       "30230       2  \n",
650
       "20921       1  "
651
      ]
652
     },
653
     "execution_count": 139,
654
     "metadata": {},
655
     "output_type": "execute_result"
656
    }
657
   ],
658
   "source": [
659
    "df.sample(5)\n"
660
   ]
661
  },
662
  {
663
   "cell_type": "code",
664
   "execution_count": 140,
665
   "id": "fd8f4fb9-7d74-49c2-ad94-284b09263880",
666
   "metadata": {},
667
   "outputs": [
668
    {
669
     "data": {
670
      "text/html": [
671
       "<div>\n",
672
       "<style scoped>\n",
673
       "    .dataframe tbody tr th:only-of-type {\n",
674
       "        vertical-align: middle;\n",
675
       "    }\n",
676
       "\n",
677
       "    .dataframe tbody tr th {\n",
678
       "        vertical-align: top;\n",
679
       "    }\n",
680
       "\n",
681
       "    .dataframe thead th {\n",
682
       "        text-align: right;\n",
683
       "    }\n",
684
       "</style>\n",
685
       "<table border=\"1\" class=\"dataframe\">\n",
686
       "  <thead>\n",
687
       "    <tr style=\"text-align: right;\">\n",
688
       "      <th></th>\n",
689
       "      <th>Age of the patient</th>\n",
690
       "      <th>Total Bilirubin</th>\n",
691
       "      <th>Direct Bilirubin</th>\n",
692
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
693
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
694
       "      <th>Aspartate_Aminotransferase</th>\n",
695
       "      <th>Total Protiens</th>\n",
696
       "      <th>ALB Albumin</th>\n",
697
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
698
       "      <th>Result</th>\n",
699
       "    </tr>\n",
700
       "  </thead>\n",
701
       "  <tbody>\n",
702
       "    <tr>\n",
703
       "      <th>count</th>\n",
704
       "      <td>27158.000000</td>\n",
705
       "      <td>27158.000000</td>\n",
706
       "      <td>27158.000000</td>\n",
707
       "      <td>27158.000000</td>\n",
708
       "      <td>27158.000000</td>\n",
709
       "      <td>27158.000000</td>\n",
710
       "      <td>27158.000000</td>\n",
711
       "      <td>27158.000000</td>\n",
712
       "      <td>27158.000000</td>\n",
713
       "      <td>27158.000000</td>\n",
714
       "    </tr>\n",
715
       "    <tr>\n",
716
       "      <th>mean</th>\n",
717
       "      <td>44.125046</td>\n",
718
       "      <td>3.407909</td>\n",
719
       "      <td>1.541630</td>\n",
720
       "      <td>290.142021</td>\n",
721
       "      <td>81.279292</td>\n",
722
       "      <td>112.102879</td>\n",
723
       "      <td>6.472605</td>\n",
724
       "      <td>3.124044</td>\n",
725
       "      <td>0.943567</td>\n",
726
       "      <td>1.282790</td>\n",
727
       "    </tr>\n",
728
       "    <tr>\n",
729
       "      <th>std</th>\n",
730
       "      <td>15.971563</td>\n",
731
       "      <td>6.332486</td>\n",
732
       "      <td>2.895084</td>\n",
733
       "      <td>239.595473</td>\n",
734
       "      <td>181.571537</td>\n",
735
       "      <td>283.616005</td>\n",
736
       "      <td>1.081477</td>\n",
737
       "      <td>0.792329</td>\n",
738
       "      <td>0.324205</td>\n",
739
       "      <td>0.450363</td>\n",
740
       "    </tr>\n",
741
       "    <tr>\n",
742
       "      <th>min</th>\n",
743
       "      <td>4.000000</td>\n",
744
       "      <td>0.400000</td>\n",
745
       "      <td>0.100000</td>\n",
746
       "      <td>63.000000</td>\n",
747
       "      <td>10.000000</td>\n",
748
       "      <td>10.000000</td>\n",
749
       "      <td>2.700000</td>\n",
750
       "      <td>0.900000</td>\n",
751
       "      <td>0.300000</td>\n",
752
       "      <td>1.000000</td>\n",
753
       "    </tr>\n",
754
       "    <tr>\n",
755
       "      <th>25%</th>\n",
756
       "      <td>33.000000</td>\n",
757
       "      <td>0.800000</td>\n",
758
       "      <td>0.200000</td>\n",
759
       "      <td>175.000000</td>\n",
760
       "      <td>23.000000</td>\n",
761
       "      <td>26.000000</td>\n",
762
       "      <td>5.800000</td>\n",
763
       "      <td>2.600000</td>\n",
764
       "      <td>0.700000</td>\n",
765
       "      <td>1.000000</td>\n",
766
       "    </tr>\n",
767
       "    <tr>\n",
768
       "      <th>50%</th>\n",
769
       "      <td>45.000000</td>\n",
770
       "      <td>1.000000</td>\n",
771
       "      <td>0.300000</td>\n",
772
       "      <td>209.000000</td>\n",
773
       "      <td>36.000000</td>\n",
774
       "      <td>42.000000</td>\n",
775
       "      <td>6.600000</td>\n",
776
       "      <td>3.100000</td>\n",
777
       "      <td>0.900000</td>\n",
778
       "      <td>1.000000</td>\n",
779
       "    </tr>\n",
780
       "    <tr>\n",
781
       "      <th>75%</th>\n",
782
       "      <td>55.000000</td>\n",
783
       "      <td>2.700000</td>\n",
784
       "      <td>1.300000</td>\n",
785
       "      <td>298.000000</td>\n",
786
       "      <td>62.000000</td>\n",
787
       "      <td>88.000000</td>\n",
788
       "      <td>7.200000</td>\n",
789
       "      <td>3.700000</td>\n",
790
       "      <td>1.100000</td>\n",
791
       "      <td>2.000000</td>\n",
792
       "    </tr>\n",
793
       "    <tr>\n",
794
       "      <th>max</th>\n",
795
       "      <td>90.000000</td>\n",
796
       "      <td>75.000000</td>\n",
797
       "      <td>19.700000</td>\n",
798
       "      <td>2110.000000</td>\n",
799
       "      <td>2000.000000</td>\n",
800
       "      <td>4929.000000</td>\n",
801
       "      <td>9.600000</td>\n",
802
       "      <td>5.500000</td>\n",
803
       "      <td>2.800000</td>\n",
804
       "      <td>2.000000</td>\n",
805
       "    </tr>\n",
806
       "  </tbody>\n",
807
       "</table>\n",
808
       "</div>"
809
      ],
810
      "text/plain": [
811
       "       Age of the patient  Total Bilirubin  Direct Bilirubin  \\\n",
812
       "count        27158.000000     27158.000000      27158.000000   \n",
813
       "mean            44.125046         3.407909          1.541630   \n",
814
       "std             15.971563         6.332486          2.895084   \n",
815
       "min              4.000000         0.400000          0.100000   \n",
816
       "25%             33.000000         0.800000          0.200000   \n",
817
       "50%             45.000000         1.000000          0.300000   \n",
818
       "75%             55.000000         2.700000          1.300000   \n",
819
       "max             90.000000        75.000000         19.700000   \n",
820
       "\n",
821
       "        Alkphos Alkaline Phosphotase   Sgpt Alamine Aminotransferase  \\\n",
822
       "count                   27158.000000                    27158.000000   \n",
823
       "mean                      290.142021                       81.279292   \n",
824
       "std                       239.595473                      181.571537   \n",
825
       "min                        63.000000                       10.000000   \n",
826
       "25%                       175.000000                       23.000000   \n",
827
       "50%                       209.000000                       36.000000   \n",
828
       "75%                       298.000000                       62.000000   \n",
829
       "max                      2110.000000                     2000.000000   \n",
830
       "\n",
831
       "       Aspartate_Aminotransferase  Total Protiens   ALB Albumin  \\\n",
832
       "count                27158.000000    27158.000000  27158.000000   \n",
833
       "mean                   112.102879        6.472605      3.124044   \n",
834
       "std                    283.616005        1.081477      0.792329   \n",
835
       "min                     10.000000        2.700000      0.900000   \n",
836
       "25%                     26.000000        5.800000      2.600000   \n",
837
       "50%                     42.000000        6.600000      3.100000   \n",
838
       "75%                     88.000000        7.200000      3.700000   \n",
839
       "max                   4929.000000        9.600000      5.500000   \n",
840
       "\n",
841
       "       A/G Ratio Albumin and Globulin Ratio        Result  \n",
842
       "count                          27158.000000  27158.000000  \n",
843
       "mean                               0.943567      1.282790  \n",
844
       "std                                0.324205      0.450363  \n",
845
       "min                                0.300000      1.000000  \n",
846
       "25%                                0.700000      1.000000  \n",
847
       "50%                                0.900000      1.000000  \n",
848
       "75%                                1.100000      2.000000  \n",
849
       "max                                2.800000      2.000000  "
850
      ]
851
     },
852
     "execution_count": 140,
853
     "metadata": {},
854
     "output_type": "execute_result"
855
    }
856
   ],
857
   "source": [
858
    "df.describe()"
859
   ]
860
  },
861
  {
862
   "cell_type": "code",
863
   "execution_count": 141,
864
   "id": "a5454137-8361-4e5e-90b5-88a55e8cd37e",
865
   "metadata": {},
866
   "outputs": [],
867
   "source": [
868
    "## if score==negative, mark 0 ;else 1 \n",
869
    "def partition(x):\n",
870
    "    if x == 2:\n",
871
    "        return 0\n",
872
    "    return 1\n",
873
    "\n",
874
    "\n",
875
    "df['Result'] = df['Result'].map(partition)"
876
   ]
877
  },
878
  {
879
   "cell_type": "code",
880
   "execution_count": 142,
881
   "id": "047d3234-04c3-47f3-8027-4f6a959c9a33",
882
   "metadata": {},
883
   "outputs": [
884
    {
885
     "name": "stdout",
886
     "output_type": "stream",
887
     "text": [
888
      "Number of patients that are male:  19478\n",
889
      "Number of patients that are female:  7680\n"
890
     ]
891
    },
892
    {
893
     "data": {
894
      "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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",
895
      "text/plain": [
896
       "<Figure size 640x480 with 1 Axes>"
897
      ]
898
     },
899
     "metadata": {},
900
     "output_type": "display_data"
901
    }
902
   ],
903
   "source": [
904
    "\n",
905
    "sns.countplot(data=df, x = 'Result', label='Count')\n",
906
    "\n",
907
    "M, F = df['Result'].value_counts()\n",
908
    "print('Number of patients that are male: ',M)\n",
909
    "print('Number of patients that are female: ',F)"
910
   ]
911
  },
912
  {
913
   "cell_type": "code",
914
   "execution_count": 160,
915
   "id": "bad0e537-76f6-4224-b489-bd47eab5e849",
916
   "metadata": {},
917
   "outputs": [],
918
   "source": [
919
    "## if score==negative, mark 0 ;else 1 \n",
920
    "def partition(x):\n",
921
    "    if x =='Male':\n",
922
    "        return 0\n",
923
    "    return 1\n",
924
    "\n",
925
    "df['Gender of the patient'] = df['Gender of the patient'].map(partition)"
926
   ]
927
  },
928
  {
929
   "cell_type": "code",
930
   "execution_count": 161,
931
   "id": "5943a716",
932
   "metadata": {},
933
   "outputs": [
934
    {
935
     "data": {
936
      "text/html": [
937
       "<div>\n",
938
       "<style scoped>\n",
939
       "    .dataframe tbody tr th:only-of-type {\n",
940
       "        vertical-align: middle;\n",
941
       "    }\n",
942
       "\n",
943
       "    .dataframe tbody tr th {\n",
944
       "        vertical-align: top;\n",
945
       "    }\n",
946
       "\n",
947
       "    .dataframe thead th {\n",
948
       "        text-align: right;\n",
949
       "    }\n",
950
       "</style>\n",
951
       "<table border=\"1\" class=\"dataframe\">\n",
952
       "  <thead>\n",
953
       "    <tr style=\"text-align: right;\">\n",
954
       "      <th></th>\n",
955
       "      <th>Age of the patient</th>\n",
956
       "      <th>Gender of the patient</th>\n",
957
       "      <th>Total Bilirubin</th>\n",
958
       "      <th>Direct Bilirubin</th>\n",
959
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
960
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
961
       "      <th>Aspartate_Aminotransferase</th>\n",
962
       "      <th>Total Protiens</th>\n",
963
       "      <th>ALB Albumin</th>\n",
964
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
965
       "      <th>Result</th>\n",
966
       "    </tr>\n",
967
       "  </thead>\n",
968
       "  <tbody>\n",
969
       "    <tr>\n",
970
       "      <th>0</th>\n",
971
       "      <td>52.0</td>\n",
972
       "      <td>1</td>\n",
973
       "      <td>0.9</td>\n",
974
       "      <td>0.2</td>\n",
975
       "      <td>116.0</td>\n",
976
       "      <td>36.0</td>\n",
977
       "      <td>16.0</td>\n",
978
       "      <td>6.2</td>\n",
979
       "      <td>3.2</td>\n",
980
       "      <td>1.00</td>\n",
981
       "      <td>0</td>\n",
982
       "    </tr>\n",
983
       "    <tr>\n",
984
       "      <th>1</th>\n",
985
       "      <td>36.0</td>\n",
986
       "      <td>1</td>\n",
987
       "      <td>0.7</td>\n",
988
       "      <td>0.2</td>\n",
989
       "      <td>188.0</td>\n",
990
       "      <td>11.0</td>\n",
991
       "      <td>10.0</td>\n",
992
       "      <td>5.5</td>\n",
993
       "      <td>2.3</td>\n",
994
       "      <td>0.71</td>\n",
995
       "      <td>0</td>\n",
996
       "    </tr>\n",
997
       "    <tr>\n",
998
       "      <th>2</th>\n",
999
       "      <td>28.0</td>\n",
1000
       "      <td>0</td>\n",
1001
       "      <td>0.5</td>\n",
1002
       "      <td>0.1</td>\n",
1003
       "      <td>162.0</td>\n",
1004
       "      <td>155.0</td>\n",
1005
       "      <td>108.0</td>\n",
1006
       "      <td>8.1</td>\n",
1007
       "      <td>4.0</td>\n",
1008
       "      <td>0.90</td>\n",
1009
       "      <td>1</td>\n",
1010
       "    </tr>\n",
1011
       "    <tr>\n",
1012
       "      <th>3</th>\n",
1013
       "      <td>49.0</td>\n",
1014
       "      <td>0</td>\n",
1015
       "      <td>0.7</td>\n",
1016
       "      <td>0.2</td>\n",
1017
       "      <td>188.0</td>\n",
1018
       "      <td>13.0</td>\n",
1019
       "      <td>21.0</td>\n",
1020
       "      <td>6.0</td>\n",
1021
       "      <td>3.2</td>\n",
1022
       "      <td>1.10</td>\n",
1023
       "      <td>0</td>\n",
1024
       "    </tr>\n",
1025
       "    <tr>\n",
1026
       "      <th>4</th>\n",
1027
       "      <td>51.0</td>\n",
1028
       "      <td>0</td>\n",
1029
       "      <td>1.0</td>\n",
1030
       "      <td>0.3</td>\n",
1031
       "      <td>75.0</td>\n",
1032
       "      <td>25.0</td>\n",
1033
       "      <td>26.0</td>\n",
1034
       "      <td>5.1</td>\n",
1035
       "      <td>2.9</td>\n",
1036
       "      <td>1.30</td>\n",
1037
       "      <td>1</td>\n",
1038
       "    </tr>\n",
1039
       "  </tbody>\n",
1040
       "</table>\n",
1041
       "</div>"
1042
      ],
1043
      "text/plain": [
1044
       "   Age of the patient  Gender of the patient  Total Bilirubin  \\\n",
1045
       "0                52.0                      1              0.9   \n",
1046
       "1                36.0                      1              0.7   \n",
1047
       "2                28.0                      0              0.5   \n",
1048
       "3                49.0                      0              0.7   \n",
1049
       "4                51.0                      0              1.0   \n",
1050
       "\n",
1051
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
1052
       "0               0.2                          116.0   \n",
1053
       "1               0.2                          188.0   \n",
1054
       "2               0.1                          162.0   \n",
1055
       "3               0.2                          188.0   \n",
1056
       "4               0.3                           75.0   \n",
1057
       "\n",
1058
       "    Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  Total Protiens  \\\n",
1059
       "0                            36.0                        16.0             6.2   \n",
1060
       "1                            11.0                        10.0             5.5   \n",
1061
       "2                           155.0                       108.0             8.1   \n",
1062
       "3                            13.0                        21.0             6.0   \n",
1063
       "4                            25.0                        26.0             5.1   \n",
1064
       "\n",
1065
       "    ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
1066
       "0           3.2                                  1.00       0  \n",
1067
       "1           2.3                                  0.71       0  \n",
1068
       "2           4.0                                  0.90       1  \n",
1069
       "3           3.2                                  1.10       0  \n",
1070
       "4           2.9                                  1.30       1  "
1071
      ]
1072
     },
1073
     "execution_count": 161,
1074
     "metadata": {},
1075
     "output_type": "execute_result"
1076
    }
1077
   ],
1078
   "source": [
1079
    "df.head()"
1080
   ]
1081
  },
1082
  {
1083
   "cell_type": "code",
1084
   "execution_count": 145,
1085
   "id": "39cc88eb",
1086
   "metadata": {},
1087
   "outputs": [],
1088
   "source": [
1089
    "# Filter rows for each class\n",
1090
    "class_0 = df[df['Result'] == 0]  # Replace 'target' with your column name\n",
1091
    "class_1 = df[df['Result'] == 1]\n",
1092
    "\n",
1093
    "# Downsample class 1 to 10,000 samples\n",
1094
    "class_1_downsampled = class_1.sample(n=10000, random_state=42)\n",
1095
    "\n",
1096
    "# Combine the two classes\n",
1097
    "df = pd.concat([class_0, class_1_downsampled])\n",
1098
    "\n",
1099
    "# Shuffle the resulting DataFrame to mix the classes\n",
1100
    "df = balanced_df.sample(frac=1, random_state=42).reset_index(drop=True)\n",
1101
    "\n"
1102
   ]
1103
  },
1104
  {
1105
   "cell_type": "code",
1106
   "execution_count": 146,
1107
   "id": "24000c18",
1108
   "metadata": {},
1109
   "outputs": [
1110
    {
1111
     "name": "stdout",
1112
     "output_type": "stream",
1113
     "text": [
1114
      "Number of patients that are male:  10000\n",
1115
      "Number of patients that are female:  7680\n"
1116
     ]
1117
    },
1118
    {
1119
     "data": {
1120
      "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==",
1121
      "text/plain": [
1122
       "<Figure size 640x480 with 1 Axes>"
1123
      ]
1124
     },
1125
     "metadata": {},
1126
     "output_type": "display_data"
1127
    }
1128
   ],
1129
   "source": [
1130
    "\n",
1131
    "sns.countplot(data=df, x = 'Result', label='Count')\n",
1132
    "\n",
1133
    "M, F = df['Result'].value_counts()\n",
1134
    "print('Number of patients that are male: ',M)\n",
1135
    "print('Number of patients that are female: ',F)"
1136
   ]
1137
  },
1138
  {
1139
   "cell_type": "code",
1140
   "execution_count": 147,
1141
   "id": "ca0ada46-6d91-41c6-b6dc-a11dddf657d2",
1142
   "metadata": {},
1143
   "outputs": [
1144
    {
1145
     "data": {
1146
      "text/html": [
1147
       "<div>\n",
1148
       "<style scoped>\n",
1149
       "    .dataframe tbody tr th:only-of-type {\n",
1150
       "        vertical-align: middle;\n",
1151
       "    }\n",
1152
       "\n",
1153
       "    .dataframe tbody tr th {\n",
1154
       "        vertical-align: top;\n",
1155
       "    }\n",
1156
       "\n",
1157
       "    .dataframe thead th {\n",
1158
       "        text-align: right;\n",
1159
       "    }\n",
1160
       "</style>\n",
1161
       "<table border=\"1\" class=\"dataframe\">\n",
1162
       "  <thead>\n",
1163
       "    <tr style=\"text-align: right;\">\n",
1164
       "      <th></th>\n",
1165
       "      <th>Age of the patient</th>\n",
1166
       "      <th>Gender of the patient</th>\n",
1167
       "      <th>Total Bilirubin</th>\n",
1168
       "      <th>Direct Bilirubin</th>\n",
1169
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
1170
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
1171
       "      <th>Aspartate_Aminotransferase</th>\n",
1172
       "      <th>Total Protiens</th>\n",
1173
       "      <th>ALB Albumin</th>\n",
1174
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
1175
       "      <th>Result</th>\n",
1176
       "    </tr>\n",
1177
       "  </thead>\n",
1178
       "  <tbody>\n",
1179
       "    <tr>\n",
1180
       "      <th>0</th>\n",
1181
       "      <td>52.0</td>\n",
1182
       "      <td>Female</td>\n",
1183
       "      <td>0.9</td>\n",
1184
       "      <td>0.2</td>\n",
1185
       "      <td>116.0</td>\n",
1186
       "      <td>36.0</td>\n",
1187
       "      <td>16.0</td>\n",
1188
       "      <td>6.2</td>\n",
1189
       "      <td>3.2</td>\n",
1190
       "      <td>1.00</td>\n",
1191
       "      <td>0</td>\n",
1192
       "    </tr>\n",
1193
       "    <tr>\n",
1194
       "      <th>1</th>\n",
1195
       "      <td>36.0</td>\n",
1196
       "      <td>Female</td>\n",
1197
       "      <td>0.7</td>\n",
1198
       "      <td>0.2</td>\n",
1199
       "      <td>188.0</td>\n",
1200
       "      <td>11.0</td>\n",
1201
       "      <td>10.0</td>\n",
1202
       "      <td>5.5</td>\n",
1203
       "      <td>2.3</td>\n",
1204
       "      <td>0.71</td>\n",
1205
       "      <td>0</td>\n",
1206
       "    </tr>\n",
1207
       "    <tr>\n",
1208
       "      <th>2</th>\n",
1209
       "      <td>28.0</td>\n",
1210
       "      <td>Male</td>\n",
1211
       "      <td>0.5</td>\n",
1212
       "      <td>0.1</td>\n",
1213
       "      <td>162.0</td>\n",
1214
       "      <td>155.0</td>\n",
1215
       "      <td>108.0</td>\n",
1216
       "      <td>8.1</td>\n",
1217
       "      <td>4.0</td>\n",
1218
       "      <td>0.90</td>\n",
1219
       "      <td>1</td>\n",
1220
       "    </tr>\n",
1221
       "    <tr>\n",
1222
       "      <th>3</th>\n",
1223
       "      <td>49.0</td>\n",
1224
       "      <td>Male</td>\n",
1225
       "      <td>0.7</td>\n",
1226
       "      <td>0.2</td>\n",
1227
       "      <td>188.0</td>\n",
1228
       "      <td>13.0</td>\n",
1229
       "      <td>21.0</td>\n",
1230
       "      <td>6.0</td>\n",
1231
       "      <td>3.2</td>\n",
1232
       "      <td>1.10</td>\n",
1233
       "      <td>0</td>\n",
1234
       "    </tr>\n",
1235
       "    <tr>\n",
1236
       "      <th>4</th>\n",
1237
       "      <td>51.0</td>\n",
1238
       "      <td>Male</td>\n",
1239
       "      <td>1.0</td>\n",
1240
       "      <td>0.3</td>\n",
1241
       "      <td>75.0</td>\n",
1242
       "      <td>25.0</td>\n",
1243
       "      <td>26.0</td>\n",
1244
       "      <td>5.1</td>\n",
1245
       "      <td>2.9</td>\n",
1246
       "      <td>1.30</td>\n",
1247
       "      <td>1</td>\n",
1248
       "    </tr>\n",
1249
       "  </tbody>\n",
1250
       "</table>\n",
1251
       "</div>"
1252
      ],
1253
      "text/plain": [
1254
       "   Age of the patient Gender of the patient  Total Bilirubin  \\\n",
1255
       "0                52.0                Female              0.9   \n",
1256
       "1                36.0                Female              0.7   \n",
1257
       "2                28.0                  Male              0.5   \n",
1258
       "3                49.0                  Male              0.7   \n",
1259
       "4                51.0                  Male              1.0   \n",
1260
       "\n",
1261
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
1262
       "0               0.2                          116.0   \n",
1263
       "1               0.2                          188.0   \n",
1264
       "2               0.1                          162.0   \n",
1265
       "3               0.2                          188.0   \n",
1266
       "4               0.3                           75.0   \n",
1267
       "\n",
1268
       "    Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  Total Protiens  \\\n",
1269
       "0                            36.0                        16.0             6.2   \n",
1270
       "1                            11.0                        10.0             5.5   \n",
1271
       "2                           155.0                       108.0             8.1   \n",
1272
       "3                            13.0                        21.0             6.0   \n",
1273
       "4                            25.0                        26.0             5.1   \n",
1274
       "\n",
1275
       "    ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
1276
       "0           3.2                                  1.00       0  \n",
1277
       "1           2.3                                  0.71       0  \n",
1278
       "2           4.0                                  0.90       1  \n",
1279
       "3           3.2                                  1.10       0  \n",
1280
       "4           2.9                                  1.30       1  "
1281
      ]
1282
     },
1283
     "execution_count": 147,
1284
     "metadata": {},
1285
     "output_type": "execute_result"
1286
    }
1287
   ],
1288
   "source": [
1289
    "df.head()"
1290
   ]
1291
  },
1292
  {
1293
   "cell_type": "code",
1294
   "execution_count": null,
1295
   "id": "6b6b87ad",
1296
   "metadata": {},
1297
   "outputs": [],
1298
   "source": []
1299
  },
1300
  {
1301
   "cell_type": "markdown",
1302
   "id": "2c629af8-771d-46a6-9689-d8167458d448",
1303
   "metadata": {},
1304
   "source": [
1305
    "Data Cleaning"
1306
   ]
1307
  },
1308
  {
1309
   "cell_type": "code",
1310
   "execution_count": 148,
1311
   "id": "9a11c005-9add-4b4d-b1a2-b21bc2496d87",
1312
   "metadata": {},
1313
   "outputs": [
1314
    {
1315
     "name": "stdout",
1316
     "output_type": "stream",
1317
     "text": [
1318
      "(12181, 11)\n"
1319
     ]
1320
    }
1321
   ],
1322
   "source": [
1323
    "df = df.drop_duplicates()\n",
1324
    "print( df.shape )"
1325
   ]
1326
  },
1327
  {
1328
   "cell_type": "markdown",
1329
   "id": "bcfbdec2-af4a-4159-9eba-31573a5d2fba",
1330
   "metadata": {},
1331
   "source": [
1332
    "Removing Outliers"
1333
   ]
1334
  },
1335
  {
1336
   "cell_type": "code",
1337
   "execution_count": 149,
1338
   "id": "a0bfed13-3cff-43cd-893b-5729743fab71",
1339
   "metadata": {},
1340
   "outputs": [
1341
    {
1342
     "data": {
1343
      "text/plain": [
1344
       "<Axes: ylabel='Aspartate_Aminotransferase'>"
1345
      ]
1346
     },
1347
     "execution_count": 149,
1348
     "metadata": {},
1349
     "output_type": "execute_result"
1350
    },
1351
    {
1352
     "data": {
1353
      "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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",
1354
      "text/plain": [
1355
       "<Figure size 640x480 with 1 Axes>"
1356
      ]
1357
     },
1358
     "metadata": {},
1359
     "output_type": "display_data"
1360
    }
1361
   ],
1362
   "source": [
1363
    "sns.boxplot(df.Aspartate_Aminotransferase)"
1364
   ]
1365
  },
1366
  {
1367
   "cell_type": "code",
1368
   "execution_count": 150,
1369
   "id": "b4d93eea-ac9d-49f4-a853-146942bdea52",
1370
   "metadata": {},
1371
   "outputs": [
1372
    {
1373
     "data": {
1374
      "text/plain": [
1375
       "2987     4929.0\n",
1376
       "6010     4929.0\n",
1377
       "6619     4929.0\n",
1378
       "11615    4929.0\n",
1379
       "12126    4929.0\n",
1380
       "Name: Aspartate_Aminotransferase, dtype: float64"
1381
      ]
1382
     },
1383
     "execution_count": 150,
1384
     "metadata": {},
1385
     "output_type": "execute_result"
1386
    }
1387
   ],
1388
   "source": [
1389
    "df.Aspartate_Aminotransferase.sort_values(ascending=False).head()"
1390
   ]
1391
  },
1392
  {
1393
   "cell_type": "code",
1394
   "execution_count": 151,
1395
   "id": "b2d8955c-67d3-4030-b2df-c8314c479ca8",
1396
   "metadata": {},
1397
   "outputs": [
1398
    {
1399
     "data": {
1400
      "text/plain": [
1401
       "(12165, 11)"
1402
      ]
1403
     },
1404
     "execution_count": 151,
1405
     "metadata": {},
1406
     "output_type": "execute_result"
1407
    }
1408
   ],
1409
   "source": [
1410
    "df = df[df.Aspartate_Aminotransferase <=3000 ]\n",
1411
    "df.shape"
1412
   ]
1413
  },
1414
  {
1415
   "cell_type": "code",
1416
   "execution_count": 152,
1417
   "id": "52c13b7b-7acc-48b3-a056-41d8245aef16",
1418
   "metadata": {},
1419
   "outputs": [
1420
    {
1421
     "data": {
1422
      "text/plain": [
1423
       "<Axes: ylabel='Aspartate_Aminotransferase'>"
1424
      ]
1425
     },
1426
     "execution_count": 152,
1427
     "metadata": {},
1428
     "output_type": "execute_result"
1429
    },
1430
    {
1431
     "data": {
1432
      "image/png": "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6OKLL1Z4eLg3blvrcZI2AAD+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+MX0OUuPGjXXnnXd6sRQA8I2HH37YWD7LyMhwW1bLyMhwGwegfjAdkACgrii78bp0Q3ZFy2ps0AbqD1PnIElnD4XctGmTjh07pvz8fHnexmKx6KmnnvJKkbUZ5yABdQfnIAF1X7W+i+2rr77SwoULFRgYqMjISIWHh5cbYzJ3AYDPzJ8/n5O0AUgyOYM0ZcoUhYeH6/HHH1ejRo2qoy6/wQwSAAD+o1pnkE6cOKHrr7++3ocjAHXP4cOHNXfuXKM9depUtWvXzocVAfAFUwGpffv2OnHihLdrUXJysj755BMdPHhQOTk5mjp1qi6//HKj/7XXXtPmzZvdfiYuLk7Tp0832nl5eVq6dKm+++47WSwW9enTR3fddZfba1EOHTqkJUuWaP/+/WrUqJGGDRumESNGeP37APAvFe1BKg1L7EEC6hdT5yCNGzdO//nPf/Tzzz97tZjTp08rOjpad9999znHxMfH68033zT+9+CDD7r1z58/X+np6XriiSc0bdo0/fjjj3rjjTeM/oKCAs2aNUvNmzfXCy+8oNtvv10rV67UF1984dXvAsC/lA1HFotFv/vd72SxWCrsB1D3mZpB+vjjjxUaGqqnnnpKUVFRat68uQIC3LOWxWLRY489dkH37dmzp3r27HneMVarVXa7vcK+I0eOaPfu3Zo9e7YuuugiSdKECRM0e/Zs3XHHHWratKm2bNkip9OpSZMmyWq1qm3btkpLS9Nnn32mwYMHX1C9AOqGsi/Xfvzxx9W6dWtJ0siRI3X06FHNnj3bGMdyG1A/mApIpf8xad68uQoLC3XkyJFyY8r+zcubkpOTdc899ygsLEzdunXTH/7wBzVs2FCSlJKSorCwMCMcSVL37t1lsViUmpqqyy+/XCkpKbrkkktktf7vq8fFxenjjz9WXl5ehU/kSVJRUZHbZmyLxaKQkBDjMwD/VbqMZrFYKnwXm8Vikcvl0ty5c/Xqq6/6okQANcxUQHrttde8XUelxMfHq0+fPoqIiFBmZqbef/99Pf/883ruuecUEBAgh8NRbuN4YGCgwsPD5XA4JEkOh6Pca1BKZ6QcDsc5A9Lq1au1atUqo92hQwe9+OKLldoJD8A/XH/99cbsUVnXXnut1q5dK0kV9gOoe/zqJO1+/foZn9u1a6f27dtrypQpSkpKUvfu3av1d48cOVLDhw832qWzRtnZ2XI6ndX6uwHUjE8//VTXXHNNuevr1q0zPh89erQmSwLgZVar1XuP+R8/flzS2SW1su3fUjq+urRs2VINGzZUZmamunfvLrvdrpMnT7qNKS4uVl5enjFLZLfbjdmkUqXtc+1tks6em2Cz2Srs41BMwL9NnTpVc+fOlcvlUkZGhtss0dGjR41/x6dOncq/70A9UamANHnyZEnSu+++K6vVarR/y4oVK8xXVgm//vqr8vLy1KRJE0lSbGys8vPzdeDAAcXExEiSEhMT5XK51LFjR2PM+++/L6fTaexD2rNnzzlPBAdQ95XdeD179mxZLBZdddVVSkhIcAtEbNAG6o9KBaT77rtP0tn9PGXb3lZYWKjMzEyjnZWVpbS0NIWHhys8PFwrV65Unz59ZLfbdezYMb3zzjtq1aqV4uLiJElRUVGKj4/XG2+8oYkTJ8rpdGrp0qXq27evmjZtKknq37+/Vq5cqddff10jRoxQenq61q1bp/Hjx1fLdwLgH+bPn288yu9yufTVV1+V6wdQf5h+WW11SEpK0syZM8tdHzBggCZOnKg5c+bo4MGDys/PV9OmTdWjRw+NGjXKbWksLy9PS5YscTsocsKECec8KLJhw4YaNmyYbrzxRlM186oRoG7hJG2gbqvsq0ZqVUDyRwQkAAD8R7W+i006uxz2zTff6NixY8rPzy+3cdFiseiuu+4ye3sAAACfMRWQ9u7dq3nz5qmgoOC84whIAADAH5kKSEuWLFFwcLAeeughdezYUaGhod6uCwAAwGdMvaz2+PHjuuGGG9SjRw/CEQAAqHNMBaT27dv/5vIaAACAvzIVkMaOHasNGzZo//793q4HAADA50w/5r9t2za9+uqratOmjZo1a6aAAPesZbFY9Nhjj3mlyNqMx/wBAPAf1fqY/9dff61XX31VJSUl+vXXX3Xq1KlyY0pf5goAAOBvTAWk9957T5GRkXrkkUcUGRnp7ZoAAAB8ytQepJycHA0ZMoRwBAAA6iRTAemiiy7S8ePHvV0LAABArWAqIE2YMEHbtm3Ttm3bvF0PAACAz5l6im3q1KnKy8tTTk6OgoODz/kU25w5c7xWaG3FU2wAAPiPan2KLTw8XA0bNlTr1q3N/DgAAECtZvocJJzFDBIAAP6jsjNIpvYg/ZaTJ0/q3//+d3XcGgAAoNqZWmKryOnTp/Xtt98qISFBe/fuVXFxsYYNG+at2wMAANSYKgWkkpIS/fDDD0pISNDOnTt1+vRptWrVStdee6169erlrRoBAABqlKmAlJKSoi1btmj79u06efKkWrRoodOnT+tPf/qTrr76am/XCAAAUKMqHZAyMjKUkJCgLVu2KCsrSy1bttSgQYPUr18/2Ww2PfjggwoLC6vOWgEAAGpEpQPSQw89JLvdrn79+qlv377q2LGj0ZeZmVktxQEAAPhCpZ9is1qtys/P1/Hjx/Xrr7/yaDsAAKizKj2DtGjRIm3fvl0JCQmaN2+egoODddlll6l///6VOk8AAADAX1Q6IIWGhmrQoEEaNGiQjh8/ri1btmjr1q1KSEhQcHCwJOmXX36R0+mU1eq10wMAAABqXJVP0j506JASEhK0detWnThxQsHBwerevbt69+6tgQMHeqnM2ouTtAEA8B+VPUnbq68aSUpKUkJCgr755hsVFBRoxYoV3rp1rUVAAgDAf/gkIJVyOp3atWuXLr/8cklSYWGhPvvsM/3f//2fIiIivP3rfIqABACA//Dpu9isVqsRjqSzAWnlypXKysqqjl8HAADgVdUSkAAAAPwZAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMCDVw6KLCgoUHBwsAICKs5bJSUl+vXXX2W322Wz2ar662oVDooEAMB/VPtBkfv379dzzz2n22+/XRMmTFBycrIk6eTJk3rppZeUlJT0v18SEKAWLVrUuXAEAADqJlMB6eeff9ZTTz2lzMxMXXXVVSo7CdWoUSMVFBTo888/91qRAAAANclUQHr//ffVpk0bzZs3T6NHjy7X37VrV6Wmpla5OAAAAF+wmvmh/fv3a/To0bLZbCosLCzX37RpUzkcjqrWBgA1buPGjfr444+N9ogRIzRo0CAfVgTAF0zNIAUGBup8e7tPnDih4OBg00UBgC888MADbuFIkj7++GM98MADPqoIgK+YCkidOnXS119/XWFfYWGhNm3apC5dulSpMACoSZ4hqEmTJuftB1C3mVpiu+222zRjxgzNnj1b/fr1kySlpaXp2LFj+vTTT3Xy5EndfPPNXi0UAKrLxo0bjc/33HOPevToYbT37NmjxYsXG+NYbgPqB9PnICUmJmrRokXKzMx0u96yZUvde++99WYGiXOQAP9XdnZo/vz5F9wPwH9U9hwkUzNIktStWzf9/e9/V1pamo4ePSqXy6WWLVsqJiZGFovF7G0BwGc8l9VKNW7cWLm5uTVcDQBfMhWQNm/erEsuuUQRERGKjo5WdHS0W39WVpZ+/PFHDRgwwBs1AkCNyMnJqfA64Qiof0wFpIULF2rKlCmKiIiosD81NVULFy684ICUnJysTz75RAcPHlROTo6mTp2qyy+/3Oh3uVz68MMPtXHjRuXn56tz586655571Lp1a2NMXl6eli5dqu+++04Wi0V9+vTRXXfd5fZU3aFDh7RkyRLt379fjRo10rBhwzRixIgL/FMAUFeMGDHCeHptz5495fYglR0HoH4wvcR2PoWFhQoMDLzgnzt9+rSio6N19dVXa+7cueX6P/74Y61bt06TJ09WRESEVqxYoeeee07z5s1TUFCQpLP7A3JycvTEE0+ouLhYCxcu1BtvvKEHH3xQ0tn3xs2aNUvdu3fXxIkTdfjwYf3jH/9QWFiYBg8eXLUvDsAvDRo0yAhIpRuyK1pWY4M2UH9UOiAdOnRIaWlpRvvHH39UcXFxuXH5+fn6/PPP3WZ1Kqtnz57q2bNnhX0ul0tr167VTTfdpMsuu0ySdP/992vixIn69ttv1a9fPx05ckS7d+/W7NmzddFFF0mSJkyYoNmzZ+uOO+5Q06ZNtWXLFjmdTk2aNElWq1Vt27ZVWlqaPvvsMwISUI/Nnz/fbTO2ZzhiczZQv1Q6IO3YsUOrVq0y2l988YW++OKLCseGhobq/vvvr3p1ZWRlZcnhcLhNfYeGhqpjx45KSUlRv379lJKSorCwMCMcSVL37t1lsViUmpqqyy+/XCkpKbrkkktktf7vq8fFxenjjz9WXl6ewsPDK/z9RUVFbk+rWSwWhYSEGJ8B+L9XX31VGzdu1L/+9S/j2o033sjMEVAPVTogDR48WL169ZLL5dJf//pX3XbbbRXO9gQHB6tly5amltjOp/TVJY0bN3a73rhxY6PP4XCoUaNGbv2BgYEKDw93G+O5d8putxt95wpIq1evdguIHTp00IsvvlipRwUB+I+4uDi3gBQXF2dqRhyAf6t0QGrSpInxCOzTTz+tNm3alAsrddnIkSM1fPhwo106a5SdnS2n0+mrsgB40ZQpU8pdmzlzpqSzs0sA/J/Vaq2+c5B8cQhk6SxPbm6u21klubm5xjEDdrtdJ0+edPu54uJi5eXlGT9vt9vLvUi3tF06piI2m002m63CPpNnbQKoRX7rVSJTpkxhHxJQj5h+is3hcOjLL7/UgQMHdOrUKZWUlLj1WywWPfXUU1UusFRERITsdrv27t1rBKKCggKlpqZqyJAhkqTY2Fjl5+frwIEDiomJkXT2xG+Xy6WOHTsaY95//305nU5jH9KePXsUGRl5zuU1AHVbYmJiuWs9evRwe8S/dFy3bt1qqiwAPmQqIB06dEgzZszQmTNnFBkZqcOHDysqKkoFBQU6ceKEWrZsqWbNml3wfQsLC91eXZKVlaW0tDSFh4erefPm+v3vf6+PPvpIrVu3VkREhD744AM1adLEeKotKipK8fHxeuONNzRx4kQ5nU4tXbpUffv2VdOmTSVJ/fv318qVK/X6669rxIgRSk9P17p16zR+/HgzfxQA6oA333zT+PzII4+offv2RvvQoUN6+eWXjXHMIgH1g6mA9N577yk4OFhz5sxRUFCQJk6cqLvuukvdunXT9u3btXjxYlNvvt6/f7+x3i9Jy5cvlyQNGDBAkydP1ogRI3T69Gm98cYbKigoUOfOnfXXv/7VOANJOjtNvmTJEj3zzDPGQZETJkww+kNDQ/XEE09oyZIlmjZtmho2bKibb76ZR/wBSJJbOKqoDaB+MBWQfvrpJ40YMULNmzdXXl6eJBlLbFdeeaV++uknvf32225hpzK6du2qDz/88Jz9FotFo0aN0qhRo845Jjw83DgU8lzat2+vZ5555oJqAwAA9UeAmR9yuVzGE2yhoaEKCAgwgpIktWvXTgcOHPBOhQBQg8oeiFtRG0D9YGoGKSIiQllZWZKkgIAARUREaO/everbt68k6eeff1ZYWJj3qgSAanTvvffq9ddflyTNmzdPktS5c2f99NNP5cYBqB9MBaQePXro66+/1ujRoyVJ11xzjd5++21lZWXJ5XIpKSlJ119/vVcLBYDqUtHRJZ7h6FzjANRNFpeJQ3zy8vKUlZWldu3ayWq1yuVy6aOPPtI333yjgIAAXXrppbrpppvcXudRV2VnZ7u9ggSA/zrfwyU8vQbUDTabrVIHRZoKSPgfAhJQtyQnJxvLbdLZZTVmjoC6o7IBydQm7ZkzZ2rv3r3n7E9MTLzgJ9gAoDZYv379edsA6gdTASk5OVm5ubnn7D958qSSk5NNFwUAvvDAAw/o4MGDbtcOHjxo6lw3AP7NVED6LZmZmQoJCamOWwNAtfitEERIAuqXSu+i3rRpkzZv3my0P/roI23cuLHcuIKCAh06dEg9e/b0ToUAUM3+9re/lbtW0bvY/va3v+mhhx6qqbIA+FClA9KZM2d08uRJo33q1ClZLBa3MRaLRQ0aNNA111yjW265xXtVAkA1Krusdr53sXkuvwGouyodkIYMGaIhQ4ZIkiZPnqy77rpLvXv3rrbCAMAXeBcbAMnEHqQzZ87osssuq45aAAAAaoULPskxKChIGzduVNu2baujHgDwqeeff16ZmZlGu1WrVj6sBoCvmHqKLSYmRunp6d6uBQB8ouw71sqGI88272ID6g9TAWn8+PHaunWrNm7cqOLiYm/XBAA1qrInZXOiNlB/mHpZ2sKFCxUQEKA333xT/+///T81bdpUQUFBbmMsFovmzJnjlSIBoDrt3r270uPi4+OrtRYAtYOpGaTw8HBFRkaqS5cu6tSpk5o1a6aGDRu6/S88PNzbtQJAtVi6dKnx2XMZrWy77DgAdZupGaQZM2Z4uQwA8L3Y2Fh16dJF8+fPd7t+0UUXaf/+/T6qCoAvVMurRgDAH6WkpFR4nXAE1D+mZpBKOZ1OZWRkqKCgQCUlJeX62dAIwB9MmDDBWD5bs2aN1q9fb/QNHTrUbRyA+sFUQCopKdF7772nDRs26PTp0+cct2LFCtOFAUBNKbvxumw48myzQRuoP0wFpNWrV+vTTz/V4MGD1blzZy1YsEBjx45VaGioNmzYIIvForFjx3q7VgAAgBphag/Spk2bdOWVV2rixInG36hiYmI0ePBgPf/885KkxMRErxUJANVp165dxufrrrvOra9su+w4AHWbqRmkEydOaMSIEZIkm80m6ew72iTJarXqqquu0po1azRmzBgvlQkA1WfZsmXG56FDh7rtO5LO7ksqHXfppZfWZGkAfMT0OUiFhYWSpODgYIWEhCgrK8ttTF5eXtWrA4Aa1LFjxwqvd+jQoYYrAeBrpmaQOnTooNTUVKPdtWtXrVmzRtHR0XK5XFq3bp2io6O9VSMA1Iiy/10r6+DBgzVcCQBfMzWDNHjwYDmdThUVFUmSRo8erYKCAj399NOaMWOGTp06pTvuuMOrhQJAdbnzzjuNz55nHpVtlx0HoG6zuFwulzduVFBQoKSkJAUEBOjiiy+uN68ayc7ONoIiAP/1wAMPuLU7dOhQbubI84RtAP7HZrOpRYsWvznOawGpviIgAXWHZ0gqi3AE1A01EpC+++47ff/998rOzpYktWjRQj179lSvXr3M3tLvEJCAumXXrl1uT7XdeeedPLkG1CGVDUimNmnn5+dr7ty5Sk5OVkBAgJo0aSJJ2rNnjz7//HNdcsklevTRRxUWFmbm9gDgMydPnjxvG0D9YGoGacGCBdqyZYvGjBmjIUOGKDg4WJJUWFioDRs26L333lP//v11//33e73g2oYZJKDuYIkNqPsqO4Nk6im2b7/9VkOGDNENN9xghCPp7JlIN9xwg4YMGaJvv/3WzK0BwCfOF44q0w+gbjEVkKxWqyIjI8/ZHxkZKavV1OodANS4TZs2lbvWt2/fSo0DUDeZCkh9+vTR119/rZKSknJ9xcXF2r59u6644ooqFwcANeGjjz4yPo8cOVKStG3bNre25zgAdZupPUg//vijli5dKpvNpsGDB6tVq1aSpKNHj+qLL76Q0+nU3XffraCgILefi4mJ8U7VtQh7kAD/dyHLZ+xFAvxbtT7FNmPGDOOz56mzpZ5++uly11asWGHm1wFAjevcubN++uknX5cBwEdMBaT77rvP23UAQK3Qp08fffPNN0Y4Km0DqF9MBaSBAwd6uQwAqB08wxDhCKifTG3SPpdjx47pyJEj3rwlAABAjTM1g7R27VqlpKToz3/+s3Ft4cKF2rx5s6SzL3l8/PHH1bhxY68UCQAAUJNMzSB9+eWXbuFn9+7d2rx5swYPHqwJEybo2LFjWrlypdeKBICa0rVr1/O2AdQPpmaQsrOz1aZNG6O9fft2RUREaOLEiZIkh8Ohr776yjsVAkANSkpKOm8bQP3glT1Ie/bsUXx8vNFu0aKFHA6HN24NAABQ40wFpNatWxvvWtu9e7dOnDihnj17Gv0nTpxQWFiYdyoEgBrUo0eP87YB1A+mltiuv/56zZ8/X3fddZcKCwsVFRWluLg4oz8xMVHR0dHeqhEAasyePXvO2wZQP5gKSP369VPDhg21a9cuhYWFaejQoQoMDJQk5eXlKTw8XP/3f//n1UJLffjhh1q1apXbtcjISL3yyiuSpDNnzmj58uXatm2bioqKFBcXp3vuuUd2u90Yf/z4cS1atEhJSUkKDg7WgAEDNGbMGOM7AACA+s1UQJLOTjt7Tj0XFRVp7969Kikp0d///ne9++67VS6wIm3bttWTTz5ptAMC/rdS+NZbb2nXrl16+OGHFRoaqiVLlujll1/Ws88+K0kqKSnR7NmzZbfbNWvWLOXk5GjBggUKDAzUmDFjqqVeAADgX0wHpFIul0t79+7Vli1btGPHDp06dUqNGjVSv379vFFfhQICAtxmhEoVFBToyy+/1IMPPqhu3bpJkiZNmqSHHnpIKSkpio2N1Q8//KAjR47oySeflN1uV3R0tEaNGqV3331Xt912m6zWKv+RAAAAP2c6DRw4cEAJCQnatm2b8cRav379NGzYMHXq1EkWi8VbNZaTmZmpP/3pT7LZbIqNjdWYMWPUvHlzHThwQMXFxerevbsxtk2bNmrevLkRkFJSUtSuXTu3gBUfH6/FixcrPT1dHTp0qPB3FhUVqaioyGhbLBaFhIQYnwHULb1799bOnTvLXeffd6B+uKCAdOzYMSUkJGjLli06evSomjZtqv79+6tjx4565ZVX1KdPH8XGxlZXrZKkTp06adKkSYqMjFROTo5WrVqlp556Si+//LIcDoesVmu5J+gaN25shDiHw1Fu9qn00MvzHU2wevVqt71PHTp00IsvvqgWLVp45XsBqF0qCkfS2ad4AdR9lQ5I06dPV2pqqho1aqQ+ffro3nvvVefOnSWdndGpKWWPE2jfvr0RmLZv366goKBq+70jR47U8OHDjXbp3yKzs7PldDqr7fcCqFmjRo3SihUrztk+evSoL8oC4CVWq7VSkxuVDkipqamKiIjQuHHjdOmll9aaJ77CwsIUGRmpzMxM9ejRQ06nU/n5+W6zSLm5ucaskd1uV2pqqts9cnNzjb5zsdlsstlsFfa5XK6qfQkAtUbZMFRRm3/fgfqh0gdFTpgwQXa7XXPnztUf//hHvfnmm0pMTPT5fywKCwuVmZkpu92umJgYBQYGau/evUZ/RkaGjh8/biz9xcbG6vDhw0Yoks6ecxISEqKoqKgarx+A791///1eHQfA/1V6Bmno0KEaOnSosrKyjH1IGzdulN1uN17mWBObF5cvX67evXurefPmysnJ0YcffqiAgAD1799foaGhuvrqq7V8+XKFh4crNDRUS5cuVWxsrBGQ4uLiFBUVpQULFmjs2LFyOBz64IMPNHTo0HPOEAGo2yq7d7K691gCqD0sripMAXk+yda4cWP16tVLvXv3Vvfu3atlT9Arr7yiH3/8Uf/973/VqFEjde7cWX/4wx/UqlUrSf87KHLr1q1yOp0VHhSZnZ2txYsXKykpSQ0aNNCAAQM0duxYU8uG2dnZbk+3AfA/P/30kxYuXPib4yZNmmTsvQTgn2w2W6X2IFUpIJUqKSlRYmKiEhIStGPHDhUWFiooKEhvv/12VW9d6xGQAP/3wAMPGJ8HDhyoTZs2nbM9f/78GqwMgLdVNiB55VTEgIAA42TtiRMnaufOndqyZYs3bg0ANapsGKqoDaB+8Pqx0UFBQerbt6/69u3r7VsDAADUiEo/xQYAddWAAQO8Og6A/yMgAaj3Nm/e7NVxAPwfAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMADAQkAAMCD1dcFAJDOnDmjY8eO+boMVEJ6erqvS6iXWrZsqaCgIF+XgXrE4nK5XL4uwp9lZ2erqKjI12XAz6Wnp2vOnDm+LgOotR599FG1bdvW12WgDrDZbGrRosVvjiMgVREBCd7ADJJv7du3T//6179+c9yNN96oTp06VX9BKIcZJHhLZQMSS2xALRAUFMTfjn2obdu2lQpIV199dfUXA6BWYJM2AEiaP39+lfoB1C0ssVURS2xA3ZKcnKzXX3/daN97773q0qWLDysC4E2VXWJjBgkAyujSpYseffRRSWc3BhOOgPqJgAQAAOCBgAQAAOCBp9jquRMnTig/P9/XZQC1SumRCxy9ALgLCwtT06ZNfV1GjWCTdhX58ybtEydO6LlZs1TkdPq6FACAH7BZrZr+xBN+HZI4Bwm/KT8/X0VOp663nlZzS4mvywEA1GLHXQH61Hn2/zv8OSBVFgEJam4pUasAJhIBAOdRUr/+Is0mbQAAAA/MIEHHXRapfv3FAABwgY67LL4uoUbV64D073//W59++qkcDofat2+vCRMmqGPHjr4uq8Z96gz2dQkAANQq9TYgbdu2TcuXL9fEiRPVqVMnrVmzRs8995xeeeUVNW7c2Nfl1airAs/IziZtAMB5OFwBSigO8nUZNabeBqTPPvtMgwYN0u9+9ztJ0sSJE7Vr1y795z//0Y033ujb4mpIWFiYbFarEnjKHwBQCTarVWFhYb4uo0bUy4DkdDp14MABtyAUEBCg7t27KyUlpcKfKSoqcjvvyGKxKCQkxPjsj5o1a6YnnnySgyJrgczMTC1fvtzXZQC11rhx49SqVStfl1Hv1aeDIutlQDp58qRKSkpkt9vdrtvtdmVkZFT4M6tXr9aqVauMdocOHfTiiy9W6rCp2qx169a+LgGSTp8+rW7duvm6DKDWatOmjRo0aODrMlCP1MuAZMbIkSM1fPhwo106a5SdnS0nJ1HDC0pnJAGUd+LECV+XgDrCarVykva5NGrUSAEBAXI4HG7XHQ5HuVmlUjabTTabrcI+3tYCAEDdUi8PirRarYqJiVFiYqJxraSkRImJiYqNjfVhZQAAoDaolzNIkjR8+HC99tpriomJUceOHbV27VqdPn1aAwcO9HVpAADAx+ptQOrbt69OnjypDz/8UA6HQ9HR0frrX/96ziU2AABQf1hcbKCpkuzsbLfH/wEAQO1ls9kqtUm7Xu5BAgAAOB8CEgAAgAcCEgAAgAcCEgAAgAcCEgAAgAcCEgAAgAcCEgAAgAcCEgAAgId6e5K2t1it/BECAOAvKvv/25ykDQAA4IElNgDwcOrUKf3lL3/RqVOnfF0KAB8hIAGAB5fLpYMHD4oJdqD+IiABAAB4ICABAAB4ICABgAebzaZbbrlFNpvN16UA8BGeYgMAAPDADBIAAIAHAhIAAIAHAhIAAIAHAhIAAIAHAhIAAIAHAhIAAIAHAhIAAIAHAhIAAICH/w+mMHkWYan/ngAAAABJRU5ErkJggg==",
1433
      "text/plain": [
1434
       "<Figure size 640x480 with 1 Axes>"
1435
      ]
1436
     },
1437
     "metadata": {},
1438
     "output_type": "display_data"
1439
    }
1440
   ],
1441
   "source": [
1442
    "sns.boxplot(df.Aspartate_Aminotransferase)"
1443
   ]
1444
  },
1445
  {
1446
   "cell_type": "code",
1447
   "execution_count": 153,
1448
   "id": "041012fb-531e-458a-8560-7ed33f16ac3b",
1449
   "metadata": {},
1450
   "outputs": [
1451
    {
1452
     "data": {
1453
      "text/plain": [
1454
       "10996    2946.0\n",
1455
       "8375     2946.0\n",
1456
       "5602     2946.0\n",
1457
       "6813     2946.0\n",
1458
       "5133     2946.0\n",
1459
       "Name: Aspartate_Aminotransferase, dtype: float64"
1460
      ]
1461
     },
1462
     "execution_count": 153,
1463
     "metadata": {},
1464
     "output_type": "execute_result"
1465
    }
1466
   ],
1467
   "source": [
1468
    "df.Aspartate_Aminotransferase.sort_values(ascending=False).head()"
1469
   ]
1470
  },
1471
  {
1472
   "cell_type": "code",
1473
   "execution_count": 154,
1474
   "id": "b0c9c216-bdee-4ed3-a100-5e621276c8fa",
1475
   "metadata": {},
1476
   "outputs": [
1477
    {
1478
     "data": {
1479
      "text/plain": [
1480
       "(12149, 11)"
1481
      ]
1482
     },
1483
     "execution_count": 154,
1484
     "metadata": {},
1485
     "output_type": "execute_result"
1486
    }
1487
   ],
1488
   "source": [
1489
    "df = df[df.Aspartate_Aminotransferase <=2500 ]\n",
1490
    "df.shape"
1491
   ]
1492
  },
1493
  {
1494
   "cell_type": "code",
1495
   "execution_count": 155,
1496
   "id": "1a1b9373-19dc-4416-95a6-c1a9d3900f49",
1497
   "metadata": {},
1498
   "outputs": [
1499
    {
1500
     "data": {
1501
      "text/plain": [
1502
       "False"
1503
      ]
1504
     },
1505
     "execution_count": 155,
1506
     "metadata": {},
1507
     "output_type": "execute_result"
1508
    }
1509
   ],
1510
   "source": [
1511
    "df.isnull().values.any()"
1512
   ]
1513
  },
1514
  {
1515
   "cell_type": "code",
1516
   "execution_count": 156,
1517
   "id": "3194fba5-d50d-4f53-9deb-f3ca78b51a7e",
1518
   "metadata": {},
1519
   "outputs": [
1520
    {
1521
     "data": {
1522
      "text/plain": [
1523
       "(12149, 11)"
1524
      ]
1525
     },
1526
     "execution_count": 156,
1527
     "metadata": {},
1528
     "output_type": "execute_result"
1529
    }
1530
   ],
1531
   "source": [
1532
    "df=df.dropna(how='any')  \n",
1533
    "df.shape"
1534
   ]
1535
  },
1536
  {
1537
   "cell_type": "code",
1538
   "execution_count": 157,
1539
   "id": "0d2b6ba0-8197-4a18-9faf-2f3d582a419a",
1540
   "metadata": {},
1541
   "outputs": [
1542
    {
1543
     "data": {
1544
      "text/html": [
1545
       "<div>\n",
1546
       "<style scoped>\n",
1547
       "    .dataframe tbody tr th:only-of-type {\n",
1548
       "        vertical-align: middle;\n",
1549
       "    }\n",
1550
       "\n",
1551
       "    .dataframe tbody tr th {\n",
1552
       "        vertical-align: top;\n",
1553
       "    }\n",
1554
       "\n",
1555
       "    .dataframe thead th {\n",
1556
       "        text-align: right;\n",
1557
       "    }\n",
1558
       "</style>\n",
1559
       "<table border=\"1\" class=\"dataframe\">\n",
1560
       "  <thead>\n",
1561
       "    <tr style=\"text-align: right;\">\n",
1562
       "      <th></th>\n",
1563
       "      <th>Age of the patient</th>\n",
1564
       "      <th>Gender of the patient</th>\n",
1565
       "      <th>Total Bilirubin</th>\n",
1566
       "      <th>Direct Bilirubin</th>\n",
1567
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
1568
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
1569
       "      <th>Aspartate_Aminotransferase</th>\n",
1570
       "      <th>Total Protiens</th>\n",
1571
       "      <th>ALB Albumin</th>\n",
1572
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
1573
       "      <th>Result</th>\n",
1574
       "    </tr>\n",
1575
       "  </thead>\n",
1576
       "  <tbody>\n",
1577
       "    <tr>\n",
1578
       "      <th>0</th>\n",
1579
       "      <td>52.0</td>\n",
1580
       "      <td>Female</td>\n",
1581
       "      <td>0.9</td>\n",
1582
       "      <td>0.2</td>\n",
1583
       "      <td>116.0</td>\n",
1584
       "      <td>36.0</td>\n",
1585
       "      <td>16.0</td>\n",
1586
       "      <td>6.2</td>\n",
1587
       "      <td>3.2</td>\n",
1588
       "      <td>1.00</td>\n",
1589
       "      <td>0</td>\n",
1590
       "    </tr>\n",
1591
       "    <tr>\n",
1592
       "      <th>1</th>\n",
1593
       "      <td>36.0</td>\n",
1594
       "      <td>Female</td>\n",
1595
       "      <td>0.7</td>\n",
1596
       "      <td>0.2</td>\n",
1597
       "      <td>188.0</td>\n",
1598
       "      <td>11.0</td>\n",
1599
       "      <td>10.0</td>\n",
1600
       "      <td>5.5</td>\n",
1601
       "      <td>2.3</td>\n",
1602
       "      <td>0.71</td>\n",
1603
       "      <td>0</td>\n",
1604
       "    </tr>\n",
1605
       "    <tr>\n",
1606
       "      <th>2</th>\n",
1607
       "      <td>28.0</td>\n",
1608
       "      <td>Male</td>\n",
1609
       "      <td>0.5</td>\n",
1610
       "      <td>0.1</td>\n",
1611
       "      <td>162.0</td>\n",
1612
       "      <td>155.0</td>\n",
1613
       "      <td>108.0</td>\n",
1614
       "      <td>8.1</td>\n",
1615
       "      <td>4.0</td>\n",
1616
       "      <td>0.90</td>\n",
1617
       "      <td>1</td>\n",
1618
       "    </tr>\n",
1619
       "    <tr>\n",
1620
       "      <th>3</th>\n",
1621
       "      <td>49.0</td>\n",
1622
       "      <td>Male</td>\n",
1623
       "      <td>0.7</td>\n",
1624
       "      <td>0.2</td>\n",
1625
       "      <td>188.0</td>\n",
1626
       "      <td>13.0</td>\n",
1627
       "      <td>21.0</td>\n",
1628
       "      <td>6.0</td>\n",
1629
       "      <td>3.2</td>\n",
1630
       "      <td>1.10</td>\n",
1631
       "      <td>0</td>\n",
1632
       "    </tr>\n",
1633
       "    <tr>\n",
1634
       "      <th>4</th>\n",
1635
       "      <td>51.0</td>\n",
1636
       "      <td>Male</td>\n",
1637
       "      <td>1.0</td>\n",
1638
       "      <td>0.3</td>\n",
1639
       "      <td>75.0</td>\n",
1640
       "      <td>25.0</td>\n",
1641
       "      <td>26.0</td>\n",
1642
       "      <td>5.1</td>\n",
1643
       "      <td>2.9</td>\n",
1644
       "      <td>1.30</td>\n",
1645
       "      <td>1</td>\n",
1646
       "    </tr>\n",
1647
       "  </tbody>\n",
1648
       "</table>\n",
1649
       "</div>"
1650
      ],
1651
      "text/plain": [
1652
       "   Age of the patient Gender of the patient  Total Bilirubin  \\\n",
1653
       "0                52.0                Female              0.9   \n",
1654
       "1                36.0                Female              0.7   \n",
1655
       "2                28.0                  Male              0.5   \n",
1656
       "3                49.0                  Male              0.7   \n",
1657
       "4                51.0                  Male              1.0   \n",
1658
       "\n",
1659
       "   Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
1660
       "0               0.2                          116.0   \n",
1661
       "1               0.2                          188.0   \n",
1662
       "2               0.1                          162.0   \n",
1663
       "3               0.2                          188.0   \n",
1664
       "4               0.3                           75.0   \n",
1665
       "\n",
1666
       "    Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  Total Protiens  \\\n",
1667
       "0                            36.0                        16.0             6.2   \n",
1668
       "1                            11.0                        10.0             5.5   \n",
1669
       "2                           155.0                       108.0             8.1   \n",
1670
       "3                            13.0                        21.0             6.0   \n",
1671
       "4                            25.0                        26.0             5.1   \n",
1672
       "\n",
1673
       "    ALB Albumin  A/G Ratio Albumin and Globulin Ratio  Result  \n",
1674
       "0           3.2                                  1.00       0  \n",
1675
       "1           2.3                                  0.71       0  \n",
1676
       "2           4.0                                  0.90       1  \n",
1677
       "3           3.2                                  1.10       0  \n",
1678
       "4           2.9                                  1.30       1  "
1679
      ]
1680
     },
1681
     "execution_count": 157,
1682
     "metadata": {},
1683
     "output_type": "execute_result"
1684
    }
1685
   ],
1686
   "source": [
1687
    "df.head()"
1688
   ]
1689
  },
1690
  {
1691
   "cell_type": "markdown",
1692
   "id": "574de37d-d4fb-4b68-95f6-330e61a2320b",
1693
   "metadata": {},
1694
   "source": [
1695
    "Machine Learning Models"
1696
   ]
1697
  },
1698
  {
1699
   "cell_type": "markdown",
1700
   "id": "abce595d-98c0-4e66-9a05-8e84facfdd4a",
1701
   "metadata": {},
1702
   "source": [
1703
    "Data Preparation"
1704
   ]
1705
  },
1706
  {
1707
   "cell_type": "code",
1708
   "execution_count": 163,
1709
   "id": "274c73aa-a739-45a3-b4ac-fec2f5e8f0b2",
1710
   "metadata": {},
1711
   "outputs": [
1712
    {
1713
     "name": "stdout",
1714
     "output_type": "stream",
1715
     "text": [
1716
      "(8504, 10) (3645, 10) (8504,) (3645,)\n"
1717
     ]
1718
    }
1719
   ],
1720
   "source": [
1721
    "# Create separate object for target variable\n",
1722
    "y = df.Result\n",
1723
    "\n",
1724
    "# Create separate object for input features\n",
1725
    "X = df.drop('Result', axis=1)\n",
1726
    "# Split X and y into train and test sets\n",
1727
    "X_train, X_test, y_train, y_test = train_test_split(X, y, \n",
1728
    "                                                    test_size=0.3, \n",
1729
    "                                                    random_state=0,\n",
1730
    "                                                    stratify=df.Result)\n",
1731
    "# Print number of observations in X_train, X_test, y_train, and y_test\n",
1732
    "print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)"
1733
   ]
1734
  },
1735
  {
1736
   "cell_type": "markdown",
1737
   "id": "467f4e74-e6fa-4ae4-8cf6-6d5d92e67e11",
1738
   "metadata": {},
1739
   "source": [
1740
    "Data standardization"
1741
   ]
1742
  },
1743
  {
1744
   "cell_type": "code",
1745
   "execution_count": 164,
1746
   "id": "c1f9a786-f74d-4a33-af65-11aa3126b3fb",
1747
   "metadata": {},
1748
   "outputs": [
1749
    {
1750
     "data": {
1751
      "text/html": [
1752
       "<div>\n",
1753
       "<style scoped>\n",
1754
       "    .dataframe tbody tr th:only-of-type {\n",
1755
       "        vertical-align: middle;\n",
1756
       "    }\n",
1757
       "\n",
1758
       "    .dataframe tbody tr th {\n",
1759
       "        vertical-align: top;\n",
1760
       "    }\n",
1761
       "\n",
1762
       "    .dataframe thead th {\n",
1763
       "        text-align: right;\n",
1764
       "    }\n",
1765
       "</style>\n",
1766
       "<table border=\"1\" class=\"dataframe\">\n",
1767
       "  <thead>\n",
1768
       "    <tr style=\"text-align: right;\">\n",
1769
       "      <th></th>\n",
1770
       "      <th>Age of the patient</th>\n",
1771
       "      <th>Gender of the patient</th>\n",
1772
       "      <th>Total Bilirubin</th>\n",
1773
       "      <th>Direct Bilirubin</th>\n",
1774
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
1775
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
1776
       "      <th>Aspartate_Aminotransferase</th>\n",
1777
       "      <th>Total Protiens</th>\n",
1778
       "      <th>ALB Albumin</th>\n",
1779
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
1780
       "    </tr>\n",
1781
       "  </thead>\n",
1782
       "  <tbody>\n",
1783
       "    <tr>\n",
1784
       "      <th>count</th>\n",
1785
       "      <td>8.504000e+03</td>\n",
1786
       "      <td>8.504000e+03</td>\n",
1787
       "      <td>8.504000e+03</td>\n",
1788
       "      <td>8.504000e+03</td>\n",
1789
       "      <td>8.504000e+03</td>\n",
1790
       "      <td>8.504000e+03</td>\n",
1791
       "      <td>8.504000e+03</td>\n",
1792
       "      <td>8.504000e+03</td>\n",
1793
       "      <td>8.504000e+03</td>\n",
1794
       "      <td>8.504000e+03</td>\n",
1795
       "    </tr>\n",
1796
       "    <tr>\n",
1797
       "      <th>mean</th>\n",
1798
       "      <td>-1.215710e-16</td>\n",
1799
       "      <td>1.215710e-16</td>\n",
1800
       "      <td>1.169755e-17</td>\n",
1801
       "      <td>-6.182992e-17</td>\n",
1802
       "      <td>1.932185e-18</td>\n",
1803
       "      <td>-8.982049e-18</td>\n",
1804
       "      <td>-2.548395e-17</td>\n",
1805
       "      <td>-2.197469e-16</td>\n",
1806
       "      <td>-3.843481e-17</td>\n",
1807
       "      <td>-1.478905e-16</td>\n",
1808
       "    </tr>\n",
1809
       "    <tr>\n",
1810
       "      <th>std</th>\n",
1811
       "      <td>1.000000e+00</td>\n",
1812
       "      <td>1.000000e+00</td>\n",
1813
       "      <td>1.000000e+00</td>\n",
1814
       "      <td>1.000000e+00</td>\n",
1815
       "      <td>1.000000e+00</td>\n",
1816
       "      <td>1.000000e+00</td>\n",
1817
       "      <td>1.000000e+00</td>\n",
1818
       "      <td>1.000000e+00</td>\n",
1819
       "      <td>1.000000e+00</td>\n",
1820
       "      <td>1.000000e+00</td>\n",
1821
       "    </tr>\n",
1822
       "    <tr>\n",
1823
       "      <th>min</th>\n",
1824
       "      <td>-2.422689e+00</td>\n",
1825
       "      <td>-6.412252e-01</td>\n",
1826
       "      <td>-4.594191e-01</td>\n",
1827
       "      <td>-4.656438e-01</td>\n",
1828
       "      <td>-9.303106e-01</td>\n",
1829
       "      <td>-4.163797e-01</td>\n",
1830
       "      <td>-4.956979e-01</td>\n",
1831
       "      <td>-3.476604e+00</td>\n",
1832
       "      <td>-2.820396e+00</td>\n",
1833
       "      <td>-2.052873e+00</td>\n",
1834
       "    </tr>\n",
1835
       "    <tr>\n",
1836
       "      <th>25%</th>\n",
1837
       "      <td>-7.125996e-01</td>\n",
1838
       "      <td>-6.412252e-01</td>\n",
1839
       "      <td>-3.878698e-01</td>\n",
1840
       "      <td>-4.279415e-01</td>\n",
1841
       "      <td>-4.664464e-01</td>\n",
1842
       "      <td>-3.305702e-01</td>\n",
1843
       "      <td>-4.089980e-01</td>\n",
1844
       "      <td>-6.316850e-01</td>\n",
1845
       "      <td>-6.980597e-01</td>\n",
1846
       "      <td>-7.707068e-01</td>\n",
1847
       "    </tr>\n",
1848
       "    <tr>\n",
1849
       "      <th>50%</th>\n",
1850
       "      <td>8.137060e-02</td>\n",
1851
       "      <td>-6.412252e-01</td>\n",
1852
       "      <td>-3.699824e-01</td>\n",
1853
       "      <td>-3.902392e-01</td>\n",
1854
       "      <td>-3.387774e-01</td>\n",
1855
       "      <td>-2.590623e-01</td>\n",
1856
       "      <td>-3.099125e-01</td>\n",
1857
       "      <td>1.024876e-01</td>\n",
1858
       "      <td>-7.384312e-02</td>\n",
1859
       "      <td>1.361914e-01</td>\n",
1860
       "    </tr>\n",
1861
       "    <tr>\n",
1862
       "      <th>75%</th>\n",
1863
       "      <td>6.921169e-01</td>\n",
1864
       "      <td>1.559331e+00</td>\n",
1865
       "      <td>-1.374469e-01</td>\n",
1866
       "      <td>-8.862079e-02</td>\n",
1867
       "      <td>3.571851e-02</td>\n",
1868
       "      <td>-8.029253e-02</td>\n",
1869
       "      <td>-6.839148e-02</td>\n",
1870
       "      <td>6.531171e-01</td>\n",
1871
       "      <td>8.000601e-01</td>\n",
1872
       "      <td>4.489149e-01</td>\n",
1873
       "    </tr>\n",
1874
       "    <tr>\n",
1875
       "      <th>max</th>\n",
1876
       "      <td>2.829729e+00</td>\n",
1877
       "      <td>1.559331e+00</td>\n",
1878
       "      <td>1.288454e+01</td>\n",
1879
       "      <td>6.924007e+00</td>\n",
1880
       "      <td>7.780974e+00</td>\n",
1881
       "      <td>1.152544e+01</td>\n",
1882
       "      <td>9.350928e+00</td>\n",
1883
       "      <td>2.855635e+00</td>\n",
1884
       "      <td>2.922396e+00</td>\n",
1885
       "      <td>5.765214e+00</td>\n",
1886
       "    </tr>\n",
1887
       "  </tbody>\n",
1888
       "</table>\n",
1889
       "</div>"
1890
      ],
1891
      "text/plain": [
1892
       "       Age of the patient  Gender of the patient  Total Bilirubin  \\\n",
1893
       "count        8.504000e+03           8.504000e+03     8.504000e+03   \n",
1894
       "mean        -1.215710e-16           1.215710e-16     1.169755e-17   \n",
1895
       "std          1.000000e+00           1.000000e+00     1.000000e+00   \n",
1896
       "min         -2.422689e+00          -6.412252e-01    -4.594191e-01   \n",
1897
       "25%         -7.125996e-01          -6.412252e-01    -3.878698e-01   \n",
1898
       "50%          8.137060e-02          -6.412252e-01    -3.699824e-01   \n",
1899
       "75%          6.921169e-01           1.559331e+00    -1.374469e-01   \n",
1900
       "max          2.829729e+00           1.559331e+00     1.288454e+01   \n",
1901
       "\n",
1902
       "       Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
1903
       "count      8.504000e+03                   8.504000e+03   \n",
1904
       "mean      -6.182992e-17                   1.932185e-18   \n",
1905
       "std        1.000000e+00                   1.000000e+00   \n",
1906
       "min       -4.656438e-01                  -9.303106e-01   \n",
1907
       "25%       -4.279415e-01                  -4.664464e-01   \n",
1908
       "50%       -3.902392e-01                  -3.387774e-01   \n",
1909
       "75%       -8.862079e-02                   3.571851e-02   \n",
1910
       "max        6.924007e+00                   7.780974e+00   \n",
1911
       "\n",
1912
       "        Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  \\\n",
1913
       "count                    8.504000e+03                8.504000e+03   \n",
1914
       "mean                    -8.982049e-18               -2.548395e-17   \n",
1915
       "std                      1.000000e+00                1.000000e+00   \n",
1916
       "min                     -4.163797e-01               -4.956979e-01   \n",
1917
       "25%                     -3.305702e-01               -4.089980e-01   \n",
1918
       "50%                     -2.590623e-01               -3.099125e-01   \n",
1919
       "75%                     -8.029253e-02               -6.839148e-02   \n",
1920
       "max                      1.152544e+01                9.350928e+00   \n",
1921
       "\n",
1922
       "       Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  \n",
1923
       "count    8.504000e+03  8.504000e+03                          8.504000e+03  \n",
1924
       "mean    -2.197469e-16 -3.843481e-17                         -1.478905e-16  \n",
1925
       "std      1.000000e+00  1.000000e+00                          1.000000e+00  \n",
1926
       "min     -3.476604e+00 -2.820396e+00                         -2.052873e+00  \n",
1927
       "25%     -6.316850e-01 -6.980597e-01                         -7.707068e-01  \n",
1928
       "50%      1.024876e-01 -7.384312e-02                          1.361914e-01  \n",
1929
       "75%      6.531171e-01  8.000601e-01                          4.489149e-01  \n",
1930
       "max      2.855635e+00  2.922396e+00                          5.765214e+00  "
1931
      ]
1932
     },
1933
     "execution_count": 164,
1934
     "metadata": {},
1935
     "output_type": "execute_result"
1936
    }
1937
   ],
1938
   "source": [
1939
    "train_mean = X_train.mean()\n",
1940
    "train_std = X_train.std()\n",
1941
    "## Standardize the train data set\n",
1942
    "X_train = (X_train - train_mean) / train_std\n",
1943
    "## Check for mean and std dev.\n",
1944
    "X_train.describe()"
1945
   ]
1946
  },
1947
  {
1948
   "cell_type": "code",
1949
   "execution_count": 165,
1950
   "id": "6ffea4b9-4fec-41e8-adce-3105c9d76226",
1951
   "metadata": {},
1952
   "outputs": [
1953
    {
1954
     "data": {
1955
      "text/html": [
1956
       "<div>\n",
1957
       "<style scoped>\n",
1958
       "    .dataframe tbody tr th:only-of-type {\n",
1959
       "        vertical-align: middle;\n",
1960
       "    }\n",
1961
       "\n",
1962
       "    .dataframe tbody tr th {\n",
1963
       "        vertical-align: top;\n",
1964
       "    }\n",
1965
       "\n",
1966
       "    .dataframe thead th {\n",
1967
       "        text-align: right;\n",
1968
       "    }\n",
1969
       "</style>\n",
1970
       "<table border=\"1\" class=\"dataframe\">\n",
1971
       "  <thead>\n",
1972
       "    <tr style=\"text-align: right;\">\n",
1973
       "      <th></th>\n",
1974
       "      <th>Age of the patient</th>\n",
1975
       "      <th>Gender of the patient</th>\n",
1976
       "      <th>Total Bilirubin</th>\n",
1977
       "      <th>Direct Bilirubin</th>\n",
1978
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
1979
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
1980
       "      <th>Aspartate_Aminotransferase</th>\n",
1981
       "      <th>Total Protiens</th>\n",
1982
       "      <th>ALB Albumin</th>\n",
1983
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
1984
       "    </tr>\n",
1985
       "  </thead>\n",
1986
       "  <tbody>\n",
1987
       "    <tr>\n",
1988
       "      <th>count</th>\n",
1989
       "      <td>3645.000000</td>\n",
1990
       "      <td>3645.000000</td>\n",
1991
       "      <td>3645.000000</td>\n",
1992
       "      <td>3645.000000</td>\n",
1993
       "      <td>3645.000000</td>\n",
1994
       "      <td>3645.000000</td>\n",
1995
       "      <td>3645.000000</td>\n",
1996
       "      <td>3645.000000</td>\n",
1997
       "      <td>3645.000000</td>\n",
1998
       "      <td>3645.000000</td>\n",
1999
       "    </tr>\n",
2000
       "    <tr>\n",
2001
       "      <th>mean</th>\n",
2002
       "      <td>0.026914</td>\n",
2003
       "      <td>0.014414</td>\n",
2004
       "      <td>0.047909</td>\n",
2005
       "      <td>0.038988</td>\n",
2006
       "      <td>-0.012918</td>\n",
2007
       "      <td>0.030375</td>\n",
2008
       "      <td>0.010400</td>\n",
2009
       "      <td>0.020988</td>\n",
2010
       "      <td>0.030279</td>\n",
2011
       "      <td>0.034189</td>\n",
2012
       "    </tr>\n",
2013
       "    <tr>\n",
2014
       "      <th>std</th>\n",
2015
       "      <td>1.018290</td>\n",
2016
       "      <td>1.006571</td>\n",
2017
       "      <td>1.147725</td>\n",
2018
       "      <td>1.085461</td>\n",
2019
       "      <td>0.951881</td>\n",
2020
       "      <td>1.148324</td>\n",
2021
       "      <td>1.022681</td>\n",
2022
       "      <td>0.991725</td>\n",
2023
       "      <td>0.980889</td>\n",
2024
       "      <td>1.011914</td>\n",
2025
       "    </tr>\n",
2026
       "    <tr>\n",
2027
       "      <th>min</th>\n",
2028
       "      <td>-2.422689</td>\n",
2029
       "      <td>-0.641225</td>\n",
2030
       "      <td>-0.459419</td>\n",
2031
       "      <td>-0.465644</td>\n",
2032
       "      <td>-0.930311</td>\n",
2033
       "      <td>-0.416380</td>\n",
2034
       "      <td>-0.495698</td>\n",
2035
       "      <td>-3.476604</td>\n",
2036
       "      <td>-2.820396</td>\n",
2037
       "      <td>-2.052873</td>\n",
2038
       "    </tr>\n",
2039
       "    <tr>\n",
2040
       "      <th>25%</th>\n",
2041
       "      <td>-0.712600</td>\n",
2042
       "      <td>-0.641225</td>\n",
2043
       "      <td>-0.387870</td>\n",
2044
       "      <td>-0.427941</td>\n",
2045
       "      <td>-0.457935</td>\n",
2046
       "      <td>-0.323419</td>\n",
2047
       "      <td>-0.408998</td>\n",
2048
       "      <td>-0.631685</td>\n",
2049
       "      <td>-0.698060</td>\n",
2050
       "      <td>-0.551800</td>\n",
2051
       "    </tr>\n",
2052
       "    <tr>\n",
2053
       "      <th>50%</th>\n",
2054
       "      <td>0.081371</td>\n",
2055
       "      <td>-0.641225</td>\n",
2056
       "      <td>-0.352095</td>\n",
2057
       "      <td>-0.390239</td>\n",
2058
       "      <td>-0.326010</td>\n",
2059
       "      <td>-0.251912</td>\n",
2060
       "      <td>-0.309912</td>\n",
2061
       "      <td>0.102488</td>\n",
2062
       "      <td>0.051000</td>\n",
2063
       "      <td>0.136191</td>\n",
2064
       "    </tr>\n",
2065
       "    <tr>\n",
2066
       "      <th>75%</th>\n",
2067
       "      <td>0.753192</td>\n",
2068
       "      <td>1.559331</td>\n",
2069
       "      <td>-0.119560</td>\n",
2070
       "      <td>-0.088621</td>\n",
2071
       "      <td>0.035719</td>\n",
2072
       "      <td>-0.065991</td>\n",
2073
       "      <td>-0.049813</td>\n",
2074
       "      <td>0.653117</td>\n",
2075
       "      <td>0.800060</td>\n",
2076
       "      <td>0.448915</td>\n",
2077
       "    </tr>\n",
2078
       "    <tr>\n",
2079
       "      <th>max</th>\n",
2080
       "      <td>2.829729</td>\n",
2081
       "      <td>1.559331</td>\n",
2082
       "      <td>12.884541</td>\n",
2083
       "      <td>6.924007</td>\n",
2084
       "      <td>7.780974</td>\n",
2085
       "      <td>11.525442</td>\n",
2086
       "      <td>9.350928</td>\n",
2087
       "      <td>2.855635</td>\n",
2088
       "      <td>2.922396</td>\n",
2089
       "      <td>5.765214</td>\n",
2090
       "    </tr>\n",
2091
       "  </tbody>\n",
2092
       "</table>\n",
2093
       "</div>"
2094
      ],
2095
      "text/plain": [
2096
       "       Age of the patient  Gender of the patient  Total Bilirubin  \\\n",
2097
       "count         3645.000000            3645.000000      3645.000000   \n",
2098
       "mean             0.026914               0.014414         0.047909   \n",
2099
       "std              1.018290               1.006571         1.147725   \n",
2100
       "min             -2.422689              -0.641225        -0.459419   \n",
2101
       "25%             -0.712600              -0.641225        -0.387870   \n",
2102
       "50%              0.081371              -0.641225        -0.352095   \n",
2103
       "75%              0.753192               1.559331        -0.119560   \n",
2104
       "max              2.829729               1.559331        12.884541   \n",
2105
       "\n",
2106
       "       Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
2107
       "count       3645.000000                    3645.000000   \n",
2108
       "mean           0.038988                      -0.012918   \n",
2109
       "std            1.085461                       0.951881   \n",
2110
       "min           -0.465644                      -0.930311   \n",
2111
       "25%           -0.427941                      -0.457935   \n",
2112
       "50%           -0.390239                      -0.326010   \n",
2113
       "75%           -0.088621                       0.035719   \n",
2114
       "max            6.924007                       7.780974   \n",
2115
       "\n",
2116
       "        Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  \\\n",
2117
       "count                     3645.000000                 3645.000000   \n",
2118
       "mean                         0.030375                    0.010400   \n",
2119
       "std                          1.148324                    1.022681   \n",
2120
       "min                         -0.416380                   -0.495698   \n",
2121
       "25%                         -0.323419                   -0.408998   \n",
2122
       "50%                         -0.251912                   -0.309912   \n",
2123
       "75%                         -0.065991                   -0.049813   \n",
2124
       "max                         11.525442                    9.350928   \n",
2125
       "\n",
2126
       "       Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  \n",
2127
       "count     3645.000000   3645.000000                           3645.000000  \n",
2128
       "mean         0.020988      0.030279                              0.034189  \n",
2129
       "std          0.991725      0.980889                              1.011914  \n",
2130
       "min         -3.476604     -2.820396                             -2.052873  \n",
2131
       "25%         -0.631685     -0.698060                             -0.551800  \n",
2132
       "50%          0.102488      0.051000                              0.136191  \n",
2133
       "75%          0.653117      0.800060                              0.448915  \n",
2134
       "max          2.855635      2.922396                              5.765214  "
2135
      ]
2136
     },
2137
     "execution_count": 165,
2138
     "metadata": {},
2139
     "output_type": "execute_result"
2140
    }
2141
   ],
2142
   "source": [
2143
    "## Note: We use train_mean and train_std_dev to standardize test data set\n",
2144
    "X_test = (X_test - train_mean) / train_std\n",
2145
    "## Check for mean and std dev. - not exactly 0 and 1\n",
2146
    "X_test.describe()"
2147
   ]
2148
  },
2149
  {
2150
   "cell_type": "code",
2151
   "execution_count": null,
2152
   "id": "20b45207-0560-4252-b809-51117de3d9d5",
2153
   "metadata": {},
2154
   "outputs": [],
2155
   "source": []
2156
  },
2157
  {
2158
   "cell_type": "markdown",
2159
   "id": "81b8c6ab-58f2-40e6-a2b8-6b64575c11ad",
2160
   "metadata": {},
2161
   "source": [
2162
    "logestic regression"
2163
   ]
2164
  },
2165
  {
2166
   "cell_type": "code",
2167
   "execution_count": 166,
2168
   "id": "c2678bdc-b816-488c-b664-ea79c010bc1a",
2169
   "metadata": {},
2170
   "outputs": [
2171
    {
2172
     "data": {
2173
      "text/html": [
2174
       "<style>#sk-container-id-5 {\n",
2175
       "  /* Definition of color scheme common for light and dark mode */\n",
2176
       "  --sklearn-color-text: black;\n",
2177
       "  --sklearn-color-line: gray;\n",
2178
       "  /* Definition of color scheme for unfitted estimators */\n",
2179
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
2180
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
2181
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
2182
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
2183
       "  /* Definition of color scheme for fitted estimators */\n",
2184
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
2185
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
2186
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
2187
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
2188
       "\n",
2189
       "  /* Specific color for light theme */\n",
2190
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
2191
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
2192
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
2193
       "  --sklearn-color-icon: #696969;\n",
2194
       "\n",
2195
       "  @media (prefers-color-scheme: dark) {\n",
2196
       "    /* Redefinition of color scheme for dark theme */\n",
2197
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
2198
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
2199
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
2200
       "    --sklearn-color-icon: #878787;\n",
2201
       "  }\n",
2202
       "}\n",
2203
       "\n",
2204
       "#sk-container-id-5 {\n",
2205
       "  color: var(--sklearn-color-text);\n",
2206
       "}\n",
2207
       "\n",
2208
       "#sk-container-id-5 pre {\n",
2209
       "  padding: 0;\n",
2210
       "}\n",
2211
       "\n",
2212
       "#sk-container-id-5 input.sk-hidden--visually {\n",
2213
       "  border: 0;\n",
2214
       "  clip: rect(1px 1px 1px 1px);\n",
2215
       "  clip: rect(1px, 1px, 1px, 1px);\n",
2216
       "  height: 1px;\n",
2217
       "  margin: -1px;\n",
2218
       "  overflow: hidden;\n",
2219
       "  padding: 0;\n",
2220
       "  position: absolute;\n",
2221
       "  width: 1px;\n",
2222
       "}\n",
2223
       "\n",
2224
       "#sk-container-id-5 div.sk-dashed-wrapped {\n",
2225
       "  border: 1px dashed var(--sklearn-color-line);\n",
2226
       "  margin: 0 0.4em 0.5em 0.4em;\n",
2227
       "  box-sizing: border-box;\n",
2228
       "  padding-bottom: 0.4em;\n",
2229
       "  background-color: var(--sklearn-color-background);\n",
2230
       "}\n",
2231
       "\n",
2232
       "#sk-container-id-5 div.sk-container {\n",
2233
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
2234
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
2235
       "     so we also need the `!important` here to be able to override the\n",
2236
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
2237
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
2238
       "  display: inline-block !important;\n",
2239
       "  position: relative;\n",
2240
       "}\n",
2241
       "\n",
2242
       "#sk-container-id-5 div.sk-text-repr-fallback {\n",
2243
       "  display: none;\n",
2244
       "}\n",
2245
       "\n",
2246
       "div.sk-parallel-item,\n",
2247
       "div.sk-serial,\n",
2248
       "div.sk-item {\n",
2249
       "  /* draw centered vertical line to link estimators */\n",
2250
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
2251
       "  background-size: 2px 100%;\n",
2252
       "  background-repeat: no-repeat;\n",
2253
       "  background-position: center center;\n",
2254
       "}\n",
2255
       "\n",
2256
       "/* Parallel-specific style estimator block */\n",
2257
       "\n",
2258
       "#sk-container-id-5 div.sk-parallel-item::after {\n",
2259
       "  content: \"\";\n",
2260
       "  width: 100%;\n",
2261
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
2262
       "  flex-grow: 1;\n",
2263
       "}\n",
2264
       "\n",
2265
       "#sk-container-id-5 div.sk-parallel {\n",
2266
       "  display: flex;\n",
2267
       "  align-items: stretch;\n",
2268
       "  justify-content: center;\n",
2269
       "  background-color: var(--sklearn-color-background);\n",
2270
       "  position: relative;\n",
2271
       "}\n",
2272
       "\n",
2273
       "#sk-container-id-5 div.sk-parallel-item {\n",
2274
       "  display: flex;\n",
2275
       "  flex-direction: column;\n",
2276
       "}\n",
2277
       "\n",
2278
       "#sk-container-id-5 div.sk-parallel-item:first-child::after {\n",
2279
       "  align-self: flex-end;\n",
2280
       "  width: 50%;\n",
2281
       "}\n",
2282
       "\n",
2283
       "#sk-container-id-5 div.sk-parallel-item:last-child::after {\n",
2284
       "  align-self: flex-start;\n",
2285
       "  width: 50%;\n",
2286
       "}\n",
2287
       "\n",
2288
       "#sk-container-id-5 div.sk-parallel-item:only-child::after {\n",
2289
       "  width: 0;\n",
2290
       "}\n",
2291
       "\n",
2292
       "/* Serial-specific style estimator block */\n",
2293
       "\n",
2294
       "#sk-container-id-5 div.sk-serial {\n",
2295
       "  display: flex;\n",
2296
       "  flex-direction: column;\n",
2297
       "  align-items: center;\n",
2298
       "  background-color: var(--sklearn-color-background);\n",
2299
       "  padding-right: 1em;\n",
2300
       "  padding-left: 1em;\n",
2301
       "}\n",
2302
       "\n",
2303
       "\n",
2304
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
2305
       "clickable and can be expanded/collapsed.\n",
2306
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
2307
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
2308
       "*/\n",
2309
       "\n",
2310
       "/* Pipeline and ColumnTransformer style (default) */\n",
2311
       "\n",
2312
       "#sk-container-id-5 div.sk-toggleable {\n",
2313
       "  /* Default theme specific background. It is overwritten whether we have a\n",
2314
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
2315
       "  background-color: var(--sklearn-color-background);\n",
2316
       "}\n",
2317
       "\n",
2318
       "/* Toggleable label */\n",
2319
       "#sk-container-id-5 label.sk-toggleable__label {\n",
2320
       "  cursor: pointer;\n",
2321
       "  display: block;\n",
2322
       "  width: 100%;\n",
2323
       "  margin-bottom: 0;\n",
2324
       "  padding: 0.5em;\n",
2325
       "  box-sizing: border-box;\n",
2326
       "  text-align: center;\n",
2327
       "}\n",
2328
       "\n",
2329
       "#sk-container-id-5 label.sk-toggleable__label-arrow:before {\n",
2330
       "  /* Arrow on the left of the label */\n",
2331
       "  content: \"▸\";\n",
2332
       "  float: left;\n",
2333
       "  margin-right: 0.25em;\n",
2334
       "  color: var(--sklearn-color-icon);\n",
2335
       "}\n",
2336
       "\n",
2337
       "#sk-container-id-5 label.sk-toggleable__label-arrow:hover:before {\n",
2338
       "  color: var(--sklearn-color-text);\n",
2339
       "}\n",
2340
       "\n",
2341
       "/* Toggleable content - dropdown */\n",
2342
       "\n",
2343
       "#sk-container-id-5 div.sk-toggleable__content {\n",
2344
       "  max-height: 0;\n",
2345
       "  max-width: 0;\n",
2346
       "  overflow: hidden;\n",
2347
       "  text-align: left;\n",
2348
       "  /* unfitted */\n",
2349
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
2350
       "}\n",
2351
       "\n",
2352
       "#sk-container-id-5 div.sk-toggleable__content.fitted {\n",
2353
       "  /* fitted */\n",
2354
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
2355
       "}\n",
2356
       "\n",
2357
       "#sk-container-id-5 div.sk-toggleable__content pre {\n",
2358
       "  margin: 0.2em;\n",
2359
       "  border-radius: 0.25em;\n",
2360
       "  color: var(--sklearn-color-text);\n",
2361
       "  /* unfitted */\n",
2362
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
2363
       "}\n",
2364
       "\n",
2365
       "#sk-container-id-5 div.sk-toggleable__content.fitted pre {\n",
2366
       "  /* unfitted */\n",
2367
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
2368
       "}\n",
2369
       "\n",
2370
       "#sk-container-id-5 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
2371
       "  /* Expand drop-down */\n",
2372
       "  max-height: 200px;\n",
2373
       "  max-width: 100%;\n",
2374
       "  overflow: auto;\n",
2375
       "}\n",
2376
       "\n",
2377
       "#sk-container-id-5 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
2378
       "  content: \"▾\";\n",
2379
       "}\n",
2380
       "\n",
2381
       "/* Pipeline/ColumnTransformer-specific style */\n",
2382
       "\n",
2383
       "#sk-container-id-5 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
2384
       "  color: var(--sklearn-color-text);\n",
2385
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
2386
       "}\n",
2387
       "\n",
2388
       "#sk-container-id-5 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
2389
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
2390
       "}\n",
2391
       "\n",
2392
       "/* Estimator-specific style */\n",
2393
       "\n",
2394
       "/* Colorize estimator box */\n",
2395
       "#sk-container-id-5 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
2396
       "  /* unfitted */\n",
2397
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
2398
       "}\n",
2399
       "\n",
2400
       "#sk-container-id-5 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
2401
       "  /* fitted */\n",
2402
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
2403
       "}\n",
2404
       "\n",
2405
       "#sk-container-id-5 div.sk-label label.sk-toggleable__label,\n",
2406
       "#sk-container-id-5 div.sk-label label {\n",
2407
       "  /* The background is the default theme color */\n",
2408
       "  color: var(--sklearn-color-text-on-default-background);\n",
2409
       "}\n",
2410
       "\n",
2411
       "/* On hover, darken the color of the background */\n",
2412
       "#sk-container-id-5 div.sk-label:hover label.sk-toggleable__label {\n",
2413
       "  color: var(--sklearn-color-text);\n",
2414
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
2415
       "}\n",
2416
       "\n",
2417
       "/* Label box, darken color on hover, fitted */\n",
2418
       "#sk-container-id-5 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
2419
       "  color: var(--sklearn-color-text);\n",
2420
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
2421
       "}\n",
2422
       "\n",
2423
       "/* Estimator label */\n",
2424
       "\n",
2425
       "#sk-container-id-5 div.sk-label label {\n",
2426
       "  font-family: monospace;\n",
2427
       "  font-weight: bold;\n",
2428
       "  display: inline-block;\n",
2429
       "  line-height: 1.2em;\n",
2430
       "}\n",
2431
       "\n",
2432
       "#sk-container-id-5 div.sk-label-container {\n",
2433
       "  text-align: center;\n",
2434
       "}\n",
2435
       "\n",
2436
       "/* Estimator-specific */\n",
2437
       "#sk-container-id-5 div.sk-estimator {\n",
2438
       "  font-family: monospace;\n",
2439
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
2440
       "  border-radius: 0.25em;\n",
2441
       "  box-sizing: border-box;\n",
2442
       "  margin-bottom: 0.5em;\n",
2443
       "  /* unfitted */\n",
2444
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
2445
       "}\n",
2446
       "\n",
2447
       "#sk-container-id-5 div.sk-estimator.fitted {\n",
2448
       "  /* fitted */\n",
2449
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
2450
       "}\n",
2451
       "\n",
2452
       "/* on hover */\n",
2453
       "#sk-container-id-5 div.sk-estimator:hover {\n",
2454
       "  /* unfitted */\n",
2455
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
2456
       "}\n",
2457
       "\n",
2458
       "#sk-container-id-5 div.sk-estimator.fitted:hover {\n",
2459
       "  /* fitted */\n",
2460
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
2461
       "}\n",
2462
       "\n",
2463
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
2464
       "\n",
2465
       "/* Common style for \"i\" and \"?\" */\n",
2466
       "\n",
2467
       ".sk-estimator-doc-link,\n",
2468
       "a:link.sk-estimator-doc-link,\n",
2469
       "a:visited.sk-estimator-doc-link {\n",
2470
       "  float: right;\n",
2471
       "  font-size: smaller;\n",
2472
       "  line-height: 1em;\n",
2473
       "  font-family: monospace;\n",
2474
       "  background-color: var(--sklearn-color-background);\n",
2475
       "  border-radius: 1em;\n",
2476
       "  height: 1em;\n",
2477
       "  width: 1em;\n",
2478
       "  text-decoration: none !important;\n",
2479
       "  margin-left: 1ex;\n",
2480
       "  /* unfitted */\n",
2481
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
2482
       "  color: var(--sklearn-color-unfitted-level-1);\n",
2483
       "}\n",
2484
       "\n",
2485
       ".sk-estimator-doc-link.fitted,\n",
2486
       "a:link.sk-estimator-doc-link.fitted,\n",
2487
       "a:visited.sk-estimator-doc-link.fitted {\n",
2488
       "  /* fitted */\n",
2489
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
2490
       "  color: var(--sklearn-color-fitted-level-1);\n",
2491
       "}\n",
2492
       "\n",
2493
       "/* On hover */\n",
2494
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
2495
       ".sk-estimator-doc-link:hover,\n",
2496
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
2497
       ".sk-estimator-doc-link:hover {\n",
2498
       "  /* unfitted */\n",
2499
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
2500
       "  color: var(--sklearn-color-background);\n",
2501
       "  text-decoration: none;\n",
2502
       "}\n",
2503
       "\n",
2504
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
2505
       ".sk-estimator-doc-link.fitted:hover,\n",
2506
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
2507
       ".sk-estimator-doc-link.fitted:hover {\n",
2508
       "  /* fitted */\n",
2509
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
2510
       "  color: var(--sklearn-color-background);\n",
2511
       "  text-decoration: none;\n",
2512
       "}\n",
2513
       "\n",
2514
       "/* Span, style for the box shown on hovering the info icon */\n",
2515
       ".sk-estimator-doc-link span {\n",
2516
       "  display: none;\n",
2517
       "  z-index: 9999;\n",
2518
       "  position: relative;\n",
2519
       "  font-weight: normal;\n",
2520
       "  right: .2ex;\n",
2521
       "  padding: .5ex;\n",
2522
       "  margin: .5ex;\n",
2523
       "  width: min-content;\n",
2524
       "  min-width: 20ex;\n",
2525
       "  max-width: 50ex;\n",
2526
       "  color: var(--sklearn-color-text);\n",
2527
       "  box-shadow: 2pt 2pt 4pt #999;\n",
2528
       "  /* unfitted */\n",
2529
       "  background: var(--sklearn-color-unfitted-level-0);\n",
2530
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
2531
       "}\n",
2532
       "\n",
2533
       ".sk-estimator-doc-link.fitted span {\n",
2534
       "  /* fitted */\n",
2535
       "  background: var(--sklearn-color-fitted-level-0);\n",
2536
       "  border: var(--sklearn-color-fitted-level-3);\n",
2537
       "}\n",
2538
       "\n",
2539
       ".sk-estimator-doc-link:hover span {\n",
2540
       "  display: block;\n",
2541
       "}\n",
2542
       "\n",
2543
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
2544
       "\n",
2545
       "#sk-container-id-5 a.estimator_doc_link {\n",
2546
       "  float: right;\n",
2547
       "  font-size: 1rem;\n",
2548
       "  line-height: 1em;\n",
2549
       "  font-family: monospace;\n",
2550
       "  background-color: var(--sklearn-color-background);\n",
2551
       "  border-radius: 1rem;\n",
2552
       "  height: 1rem;\n",
2553
       "  width: 1rem;\n",
2554
       "  text-decoration: none;\n",
2555
       "  /* unfitted */\n",
2556
       "  color: var(--sklearn-color-unfitted-level-1);\n",
2557
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
2558
       "}\n",
2559
       "\n",
2560
       "#sk-container-id-5 a.estimator_doc_link.fitted {\n",
2561
       "  /* fitted */\n",
2562
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
2563
       "  color: var(--sklearn-color-fitted-level-1);\n",
2564
       "}\n",
2565
       "\n",
2566
       "/* On hover */\n",
2567
       "#sk-container-id-5 a.estimator_doc_link:hover {\n",
2568
       "  /* unfitted */\n",
2569
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
2570
       "  color: var(--sklearn-color-background);\n",
2571
       "  text-decoration: none;\n",
2572
       "}\n",
2573
       "\n",
2574
       "#sk-container-id-5 a.estimator_doc_link.fitted:hover {\n",
2575
       "  /* fitted */\n",
2576
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
2577
       "}\n",
2578
       "</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>"
2579
      ],
2580
      "text/plain": [
2581
       "LogisticRegression()"
2582
      ]
2583
     },
2584
     "execution_count": 166,
2585
     "metadata": {},
2586
     "output_type": "execute_result"
2587
    }
2588
   ],
2589
   "source": [
2590
    "# fitting data to model\n",
2591
    "\n",
2592
    "from sklearn.linear_model import LogisticRegression\n",
2593
    "\n",
2594
    "lr = LogisticRegression()\n",
2595
    "lr.fit(X_train, y_train)"
2596
   ]
2597
  },
2598
  {
2599
   "cell_type": "code",
2600
   "execution_count": 167,
2601
   "id": "ccc5be4f-5129-467e-9ecd-72128e825b07",
2602
   "metadata": {},
2603
   "outputs": [
2604
    {
2605
     "name": "stdout",
2606
     "output_type": "stream",
2607
     "text": [
2608
      "0.6845014111006585\n",
2609
      "0.697119341563786\n"
2610
     ]
2611
    }
2612
   ],
2613
   "source": [
2614
    "# model predictions\n",
2615
    "\n",
2616
    "y_pred = lr.predict(X_test)\n",
2617
    "# accuracy score\n",
2618
    "\n",
2619
    "print(accuracy_score(y_train, lr.predict(X_train)))\n",
2620
    "\n",
2621
    "lr_acc = accuracy_score(y_test, lr.predict(X_test))\n",
2622
    "print(lr_acc)"
2623
   ]
2624
  },
2625
  {
2626
   "cell_type": "code",
2627
   "execution_count": 168,
2628
   "id": "4737a5e2-a9e1-4bdb-9921-01e419e985c9",
2629
   "metadata": {},
2630
   "outputs": [
2631
    {
2632
     "name": "stdout",
2633
     "output_type": "stream",
2634
     "text": [
2635
      "[[ 898  494]\n",
2636
      " [ 610 1643]]\n"
2637
     ]
2638
    }
2639
   ],
2640
   "source": [
2641
    "# confusion matrix\n",
2642
    "\n",
2643
    "print(confusion_matrix(y_test, y_pred))"
2644
   ]
2645
  },
2646
  {
2647
   "cell_type": "code",
2648
   "execution_count": 169,
2649
   "id": "6c9a3ad7-148e-40eb-99af-3853f0d2d883",
2650
   "metadata": {},
2651
   "outputs": [
2652
    {
2653
     "name": "stdout",
2654
     "output_type": "stream",
2655
     "text": [
2656
      "              precision    recall  f1-score   support\n",
2657
      "\n",
2658
      "           0       0.60      0.65      0.62      1392\n",
2659
      "           1       0.77      0.73      0.75      2253\n",
2660
      "\n",
2661
      "    accuracy                           0.70      3645\n",
2662
      "   macro avg       0.68      0.69      0.68      3645\n",
2663
      "weighted avg       0.70      0.70      0.70      3645\n",
2664
      "\n"
2665
     ]
2666
    }
2667
   ],
2668
   "source": [
2669
    "# classification report\n",
2670
    "\n",
2671
    "print(classification_report(y_test, y_pred))"
2672
   ]
2673
  },
2674
  {
2675
   "cell_type": "markdown",
2676
   "id": "242a7711-d64f-4762-8a00-093426a8fed2",
2677
   "metadata": {},
2678
   "source": [
2679
    "KNN"
2680
   ]
2681
  },
2682
  {
2683
   "cell_type": "code",
2684
   "execution_count": 170,
2685
   "id": "cf5f36d6-174f-467d-9119-ea777e0de770",
2686
   "metadata": {},
2687
   "outputs": [
2688
    {
2689
     "data": {
2690
      "text/html": [
2691
       "<style>#sk-container-id-6 {\n",
2692
       "  /* Definition of color scheme common for light and dark mode */\n",
2693
       "  --sklearn-color-text: black;\n",
2694
       "  --sklearn-color-line: gray;\n",
2695
       "  /* Definition of color scheme for unfitted estimators */\n",
2696
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
2697
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
2698
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
2699
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
2700
       "  /* Definition of color scheme for fitted estimators */\n",
2701
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
2702
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
2703
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
2704
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
2705
       "\n",
2706
       "  /* Specific color for light theme */\n",
2707
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
2708
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
2709
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
2710
       "  --sklearn-color-icon: #696969;\n",
2711
       "\n",
2712
       "  @media (prefers-color-scheme: dark) {\n",
2713
       "    /* Redefinition of color scheme for dark theme */\n",
2714
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
2715
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
2716
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
2717
       "    --sklearn-color-icon: #878787;\n",
2718
       "  }\n",
2719
       "}\n",
2720
       "\n",
2721
       "#sk-container-id-6 {\n",
2722
       "  color: var(--sklearn-color-text);\n",
2723
       "}\n",
2724
       "\n",
2725
       "#sk-container-id-6 pre {\n",
2726
       "  padding: 0;\n",
2727
       "}\n",
2728
       "\n",
2729
       "#sk-container-id-6 input.sk-hidden--visually {\n",
2730
       "  border: 0;\n",
2731
       "  clip: rect(1px 1px 1px 1px);\n",
2732
       "  clip: rect(1px, 1px, 1px, 1px);\n",
2733
       "  height: 1px;\n",
2734
       "  margin: -1px;\n",
2735
       "  overflow: hidden;\n",
2736
       "  padding: 0;\n",
2737
       "  position: absolute;\n",
2738
       "  width: 1px;\n",
2739
       "}\n",
2740
       "\n",
2741
       "#sk-container-id-6 div.sk-dashed-wrapped {\n",
2742
       "  border: 1px dashed var(--sklearn-color-line);\n",
2743
       "  margin: 0 0.4em 0.5em 0.4em;\n",
2744
       "  box-sizing: border-box;\n",
2745
       "  padding-bottom: 0.4em;\n",
2746
       "  background-color: var(--sklearn-color-background);\n",
2747
       "}\n",
2748
       "\n",
2749
       "#sk-container-id-6 div.sk-container {\n",
2750
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
2751
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
2752
       "     so we also need the `!important` here to be able to override the\n",
2753
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
2754
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
2755
       "  display: inline-block !important;\n",
2756
       "  position: relative;\n",
2757
       "}\n",
2758
       "\n",
2759
       "#sk-container-id-6 div.sk-text-repr-fallback {\n",
2760
       "  display: none;\n",
2761
       "}\n",
2762
       "\n",
2763
       "div.sk-parallel-item,\n",
2764
       "div.sk-serial,\n",
2765
       "div.sk-item {\n",
2766
       "  /* draw centered vertical line to link estimators */\n",
2767
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
2768
       "  background-size: 2px 100%;\n",
2769
       "  background-repeat: no-repeat;\n",
2770
       "  background-position: center center;\n",
2771
       "}\n",
2772
       "\n",
2773
       "/* Parallel-specific style estimator block */\n",
2774
       "\n",
2775
       "#sk-container-id-6 div.sk-parallel-item::after {\n",
2776
       "  content: \"\";\n",
2777
       "  width: 100%;\n",
2778
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
2779
       "  flex-grow: 1;\n",
2780
       "}\n",
2781
       "\n",
2782
       "#sk-container-id-6 div.sk-parallel {\n",
2783
       "  display: flex;\n",
2784
       "  align-items: stretch;\n",
2785
       "  justify-content: center;\n",
2786
       "  background-color: var(--sklearn-color-background);\n",
2787
       "  position: relative;\n",
2788
       "}\n",
2789
       "\n",
2790
       "#sk-container-id-6 div.sk-parallel-item {\n",
2791
       "  display: flex;\n",
2792
       "  flex-direction: column;\n",
2793
       "}\n",
2794
       "\n",
2795
       "#sk-container-id-6 div.sk-parallel-item:first-child::after {\n",
2796
       "  align-self: flex-end;\n",
2797
       "  width: 50%;\n",
2798
       "}\n",
2799
       "\n",
2800
       "#sk-container-id-6 div.sk-parallel-item:last-child::after {\n",
2801
       "  align-self: flex-start;\n",
2802
       "  width: 50%;\n",
2803
       "}\n",
2804
       "\n",
2805
       "#sk-container-id-6 div.sk-parallel-item:only-child::after {\n",
2806
       "  width: 0;\n",
2807
       "}\n",
2808
       "\n",
2809
       "/* Serial-specific style estimator block */\n",
2810
       "\n",
2811
       "#sk-container-id-6 div.sk-serial {\n",
2812
       "  display: flex;\n",
2813
       "  flex-direction: column;\n",
2814
       "  align-items: center;\n",
2815
       "  background-color: var(--sklearn-color-background);\n",
2816
       "  padding-right: 1em;\n",
2817
       "  padding-left: 1em;\n",
2818
       "}\n",
2819
       "\n",
2820
       "\n",
2821
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
2822
       "clickable and can be expanded/collapsed.\n",
2823
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
2824
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
2825
       "*/\n",
2826
       "\n",
2827
       "/* Pipeline and ColumnTransformer style (default) */\n",
2828
       "\n",
2829
       "#sk-container-id-6 div.sk-toggleable {\n",
2830
       "  /* Default theme specific background. It is overwritten whether we have a\n",
2831
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
2832
       "  background-color: var(--sklearn-color-background);\n",
2833
       "}\n",
2834
       "\n",
2835
       "/* Toggleable label */\n",
2836
       "#sk-container-id-6 label.sk-toggleable__label {\n",
2837
       "  cursor: pointer;\n",
2838
       "  display: block;\n",
2839
       "  width: 100%;\n",
2840
       "  margin-bottom: 0;\n",
2841
       "  padding: 0.5em;\n",
2842
       "  box-sizing: border-box;\n",
2843
       "  text-align: center;\n",
2844
       "}\n",
2845
       "\n",
2846
       "#sk-container-id-6 label.sk-toggleable__label-arrow:before {\n",
2847
       "  /* Arrow on the left of the label */\n",
2848
       "  content: \"▸\";\n",
2849
       "  float: left;\n",
2850
       "  margin-right: 0.25em;\n",
2851
       "  color: var(--sklearn-color-icon);\n",
2852
       "}\n",
2853
       "\n",
2854
       "#sk-container-id-6 label.sk-toggleable__label-arrow:hover:before {\n",
2855
       "  color: var(--sklearn-color-text);\n",
2856
       "}\n",
2857
       "\n",
2858
       "/* Toggleable content - dropdown */\n",
2859
       "\n",
2860
       "#sk-container-id-6 div.sk-toggleable__content {\n",
2861
       "  max-height: 0;\n",
2862
       "  max-width: 0;\n",
2863
       "  overflow: hidden;\n",
2864
       "  text-align: left;\n",
2865
       "  /* unfitted */\n",
2866
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
2867
       "}\n",
2868
       "\n",
2869
       "#sk-container-id-6 div.sk-toggleable__content.fitted {\n",
2870
       "  /* fitted */\n",
2871
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
2872
       "}\n",
2873
       "\n",
2874
       "#sk-container-id-6 div.sk-toggleable__content pre {\n",
2875
       "  margin: 0.2em;\n",
2876
       "  border-radius: 0.25em;\n",
2877
       "  color: var(--sklearn-color-text);\n",
2878
       "  /* unfitted */\n",
2879
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
2880
       "}\n",
2881
       "\n",
2882
       "#sk-container-id-6 div.sk-toggleable__content.fitted pre {\n",
2883
       "  /* unfitted */\n",
2884
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
2885
       "}\n",
2886
       "\n",
2887
       "#sk-container-id-6 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
2888
       "  /* Expand drop-down */\n",
2889
       "  max-height: 200px;\n",
2890
       "  max-width: 100%;\n",
2891
       "  overflow: auto;\n",
2892
       "}\n",
2893
       "\n",
2894
       "#sk-container-id-6 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
2895
       "  content: \"▾\";\n",
2896
       "}\n",
2897
       "\n",
2898
       "/* Pipeline/ColumnTransformer-specific style */\n",
2899
       "\n",
2900
       "#sk-container-id-6 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
2901
       "  color: var(--sklearn-color-text);\n",
2902
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
2903
       "}\n",
2904
       "\n",
2905
       "#sk-container-id-6 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
2906
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
2907
       "}\n",
2908
       "\n",
2909
       "/* Estimator-specific style */\n",
2910
       "\n",
2911
       "/* Colorize estimator box */\n",
2912
       "#sk-container-id-6 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
2913
       "  /* unfitted */\n",
2914
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
2915
       "}\n",
2916
       "\n",
2917
       "#sk-container-id-6 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
2918
       "  /* fitted */\n",
2919
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
2920
       "}\n",
2921
       "\n",
2922
       "#sk-container-id-6 div.sk-label label.sk-toggleable__label,\n",
2923
       "#sk-container-id-6 div.sk-label label {\n",
2924
       "  /* The background is the default theme color */\n",
2925
       "  color: var(--sklearn-color-text-on-default-background);\n",
2926
       "}\n",
2927
       "\n",
2928
       "/* On hover, darken the color of the background */\n",
2929
       "#sk-container-id-6 div.sk-label:hover label.sk-toggleable__label {\n",
2930
       "  color: var(--sklearn-color-text);\n",
2931
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
2932
       "}\n",
2933
       "\n",
2934
       "/* Label box, darken color on hover, fitted */\n",
2935
       "#sk-container-id-6 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
2936
       "  color: var(--sklearn-color-text);\n",
2937
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
2938
       "}\n",
2939
       "\n",
2940
       "/* Estimator label */\n",
2941
       "\n",
2942
       "#sk-container-id-6 div.sk-label label {\n",
2943
       "  font-family: monospace;\n",
2944
       "  font-weight: bold;\n",
2945
       "  display: inline-block;\n",
2946
       "  line-height: 1.2em;\n",
2947
       "}\n",
2948
       "\n",
2949
       "#sk-container-id-6 div.sk-label-container {\n",
2950
       "  text-align: center;\n",
2951
       "}\n",
2952
       "\n",
2953
       "/* Estimator-specific */\n",
2954
       "#sk-container-id-6 div.sk-estimator {\n",
2955
       "  font-family: monospace;\n",
2956
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
2957
       "  border-radius: 0.25em;\n",
2958
       "  box-sizing: border-box;\n",
2959
       "  margin-bottom: 0.5em;\n",
2960
       "  /* unfitted */\n",
2961
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
2962
       "}\n",
2963
       "\n",
2964
       "#sk-container-id-6 div.sk-estimator.fitted {\n",
2965
       "  /* fitted */\n",
2966
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
2967
       "}\n",
2968
       "\n",
2969
       "/* on hover */\n",
2970
       "#sk-container-id-6 div.sk-estimator:hover {\n",
2971
       "  /* unfitted */\n",
2972
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
2973
       "}\n",
2974
       "\n",
2975
       "#sk-container-id-6 div.sk-estimator.fitted:hover {\n",
2976
       "  /* fitted */\n",
2977
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
2978
       "}\n",
2979
       "\n",
2980
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
2981
       "\n",
2982
       "/* Common style for \"i\" and \"?\" */\n",
2983
       "\n",
2984
       ".sk-estimator-doc-link,\n",
2985
       "a:link.sk-estimator-doc-link,\n",
2986
       "a:visited.sk-estimator-doc-link {\n",
2987
       "  float: right;\n",
2988
       "  font-size: smaller;\n",
2989
       "  line-height: 1em;\n",
2990
       "  font-family: monospace;\n",
2991
       "  background-color: var(--sklearn-color-background);\n",
2992
       "  border-radius: 1em;\n",
2993
       "  height: 1em;\n",
2994
       "  width: 1em;\n",
2995
       "  text-decoration: none !important;\n",
2996
       "  margin-left: 1ex;\n",
2997
       "  /* unfitted */\n",
2998
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
2999
       "  color: var(--sklearn-color-unfitted-level-1);\n",
3000
       "}\n",
3001
       "\n",
3002
       ".sk-estimator-doc-link.fitted,\n",
3003
       "a:link.sk-estimator-doc-link.fitted,\n",
3004
       "a:visited.sk-estimator-doc-link.fitted {\n",
3005
       "  /* fitted */\n",
3006
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
3007
       "  color: var(--sklearn-color-fitted-level-1);\n",
3008
       "}\n",
3009
       "\n",
3010
       "/* On hover */\n",
3011
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
3012
       ".sk-estimator-doc-link:hover,\n",
3013
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
3014
       ".sk-estimator-doc-link:hover {\n",
3015
       "  /* unfitted */\n",
3016
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
3017
       "  color: var(--sklearn-color-background);\n",
3018
       "  text-decoration: none;\n",
3019
       "}\n",
3020
       "\n",
3021
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
3022
       ".sk-estimator-doc-link.fitted:hover,\n",
3023
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
3024
       ".sk-estimator-doc-link.fitted:hover {\n",
3025
       "  /* fitted */\n",
3026
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
3027
       "  color: var(--sklearn-color-background);\n",
3028
       "  text-decoration: none;\n",
3029
       "}\n",
3030
       "\n",
3031
       "/* Span, style for the box shown on hovering the info icon */\n",
3032
       ".sk-estimator-doc-link span {\n",
3033
       "  display: none;\n",
3034
       "  z-index: 9999;\n",
3035
       "  position: relative;\n",
3036
       "  font-weight: normal;\n",
3037
       "  right: .2ex;\n",
3038
       "  padding: .5ex;\n",
3039
       "  margin: .5ex;\n",
3040
       "  width: min-content;\n",
3041
       "  min-width: 20ex;\n",
3042
       "  max-width: 50ex;\n",
3043
       "  color: var(--sklearn-color-text);\n",
3044
       "  box-shadow: 2pt 2pt 4pt #999;\n",
3045
       "  /* unfitted */\n",
3046
       "  background: var(--sklearn-color-unfitted-level-0);\n",
3047
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
3048
       "}\n",
3049
       "\n",
3050
       ".sk-estimator-doc-link.fitted span {\n",
3051
       "  /* fitted */\n",
3052
       "  background: var(--sklearn-color-fitted-level-0);\n",
3053
       "  border: var(--sklearn-color-fitted-level-3);\n",
3054
       "}\n",
3055
       "\n",
3056
       ".sk-estimator-doc-link:hover span {\n",
3057
       "  display: block;\n",
3058
       "}\n",
3059
       "\n",
3060
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
3061
       "\n",
3062
       "#sk-container-id-6 a.estimator_doc_link {\n",
3063
       "  float: right;\n",
3064
       "  font-size: 1rem;\n",
3065
       "  line-height: 1em;\n",
3066
       "  font-family: monospace;\n",
3067
       "  background-color: var(--sklearn-color-background);\n",
3068
       "  border-radius: 1rem;\n",
3069
       "  height: 1rem;\n",
3070
       "  width: 1rem;\n",
3071
       "  text-decoration: none;\n",
3072
       "  /* unfitted */\n",
3073
       "  color: var(--sklearn-color-unfitted-level-1);\n",
3074
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
3075
       "}\n",
3076
       "\n",
3077
       "#sk-container-id-6 a.estimator_doc_link.fitted {\n",
3078
       "  /* fitted */\n",
3079
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
3080
       "  color: var(--sklearn-color-fitted-level-1);\n",
3081
       "}\n",
3082
       "\n",
3083
       "/* On hover */\n",
3084
       "#sk-container-id-6 a.estimator_doc_link:hover {\n",
3085
       "  /* unfitted */\n",
3086
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
3087
       "  color: var(--sklearn-color-background);\n",
3088
       "  text-decoration: none;\n",
3089
       "}\n",
3090
       "\n",
3091
       "#sk-container-id-6 a.estimator_doc_link.fitted:hover {\n",
3092
       "  /* fitted */\n",
3093
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
3094
       "}\n",
3095
       "</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>"
3096
      ],
3097
      "text/plain": [
3098
       "KNeighborsClassifier()"
3099
      ]
3100
     },
3101
     "execution_count": 170,
3102
     "metadata": {},
3103
     "output_type": "execute_result"
3104
    }
3105
   ],
3106
   "source": [
3107
    "from sklearn.neighbors import KNeighborsClassifier\n",
3108
    "\n",
3109
    "knn = KNeighborsClassifier()\n",
3110
    "knn.fit(X_train, y_train)"
3111
   ]
3112
  },
3113
  {
3114
   "cell_type": "code",
3115
   "execution_count": 171,
3116
   "id": "fc32ab9f-9b41-41f4-b5a9-4ac3680d3d5b",
3117
   "metadata": {},
3118
   "outputs": [
3119
    {
3120
     "name": "stdout",
3121
     "output_type": "stream",
3122
     "text": [
3123
      "0.9047507055503292\n",
3124
      "0.8153635116598079\n"
3125
     ]
3126
    }
3127
   ],
3128
   "source": [
3129
    "# model predictions \n",
3130
    "\n",
3131
    "y_pred = knn.predict(X_test)\n",
3132
    "# accuracy score\n",
3133
    "\n",
3134
    "print(accuracy_score(y_train, knn.predict(X_train)))\n",
3135
    "\n",
3136
    "knn_acc = accuracy_score(y_test, knn.predict(X_test))\n",
3137
    "print(knn_acc)"
3138
   ]
3139
  },
3140
  {
3141
   "cell_type": "code",
3142
   "execution_count": 172,
3143
   "id": "a9911e52-734d-4987-afe9-77073672dfb5",
3144
   "metadata": {},
3145
   "outputs": [
3146
    {
3147
     "name": "stdout",
3148
     "output_type": "stream",
3149
     "text": [
3150
      "[[1120  272]\n",
3151
      " [ 401 1852]]\n"
3152
     ]
3153
    }
3154
   ],
3155
   "source": [
3156
    "# confusion matrix\n",
3157
    "\n",
3158
    "print(confusion_matrix(y_test, y_pred))"
3159
   ]
3160
  },
3161
  {
3162
   "cell_type": "code",
3163
   "execution_count": 173,
3164
   "id": "9711d627-2120-41df-b9c5-4a4c796e07ac",
3165
   "metadata": {},
3166
   "outputs": [
3167
    {
3168
     "name": "stdout",
3169
     "output_type": "stream",
3170
     "text": [
3171
      "              precision    recall  f1-score   support\n",
3172
      "\n",
3173
      "           0       0.74      0.80      0.77      1392\n",
3174
      "           1       0.87      0.82      0.85      2253\n",
3175
      "\n",
3176
      "    accuracy                           0.82      3645\n",
3177
      "   macro avg       0.80      0.81      0.81      3645\n",
3178
      "weighted avg       0.82      0.82      0.82      3645\n",
3179
      "\n"
3180
     ]
3181
    }
3182
   ],
3183
   "source": [
3184
    "# classification report\n",
3185
    "\n",
3186
    "print(classification_report(y_test, y_pred))"
3187
   ]
3188
  },
3189
  {
3190
   "cell_type": "markdown",
3191
   "id": "45d2d477-dc9d-405d-869b-d62e4587ca51",
3192
   "metadata": {},
3193
   "source": [
3194
    "SVM"
3195
   ]
3196
  },
3197
  {
3198
   "cell_type": "code",
3199
   "execution_count": 174,
3200
   "id": "9e36c0d7-b9a6-42a9-8ed9-797b1d44cedc",
3201
   "metadata": {},
3202
   "outputs": [],
3203
   "source": [
3204
    "from sklearn.svm import SVC"
3205
   ]
3206
  },
3207
  {
3208
   "cell_type": "code",
3209
   "execution_count": 175,
3210
   "id": "b7745b13-0d48-47cb-b76f-74fbf820e776",
3211
   "metadata": {},
3212
   "outputs": [
3213
    {
3214
     "data": {
3215
      "text/html": [
3216
       "<style>#sk-container-id-7 {\n",
3217
       "  /* Definition of color scheme common for light and dark mode */\n",
3218
       "  --sklearn-color-text: black;\n",
3219
       "  --sklearn-color-line: gray;\n",
3220
       "  /* Definition of color scheme for unfitted estimators */\n",
3221
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
3222
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
3223
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
3224
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
3225
       "  /* Definition of color scheme for fitted estimators */\n",
3226
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
3227
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
3228
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
3229
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
3230
       "\n",
3231
       "  /* Specific color for light theme */\n",
3232
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
3233
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
3234
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
3235
       "  --sklearn-color-icon: #696969;\n",
3236
       "\n",
3237
       "  @media (prefers-color-scheme: dark) {\n",
3238
       "    /* Redefinition of color scheme for dark theme */\n",
3239
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
3240
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
3241
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
3242
       "    --sklearn-color-icon: #878787;\n",
3243
       "  }\n",
3244
       "}\n",
3245
       "\n",
3246
       "#sk-container-id-7 {\n",
3247
       "  color: var(--sklearn-color-text);\n",
3248
       "}\n",
3249
       "\n",
3250
       "#sk-container-id-7 pre {\n",
3251
       "  padding: 0;\n",
3252
       "}\n",
3253
       "\n",
3254
       "#sk-container-id-7 input.sk-hidden--visually {\n",
3255
       "  border: 0;\n",
3256
       "  clip: rect(1px 1px 1px 1px);\n",
3257
       "  clip: rect(1px, 1px, 1px, 1px);\n",
3258
       "  height: 1px;\n",
3259
       "  margin: -1px;\n",
3260
       "  overflow: hidden;\n",
3261
       "  padding: 0;\n",
3262
       "  position: absolute;\n",
3263
       "  width: 1px;\n",
3264
       "}\n",
3265
       "\n",
3266
       "#sk-container-id-7 div.sk-dashed-wrapped {\n",
3267
       "  border: 1px dashed var(--sklearn-color-line);\n",
3268
       "  margin: 0 0.4em 0.5em 0.4em;\n",
3269
       "  box-sizing: border-box;\n",
3270
       "  padding-bottom: 0.4em;\n",
3271
       "  background-color: var(--sklearn-color-background);\n",
3272
       "}\n",
3273
       "\n",
3274
       "#sk-container-id-7 div.sk-container {\n",
3275
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
3276
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
3277
       "     so we also need the `!important` here to be able to override the\n",
3278
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
3279
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
3280
       "  display: inline-block !important;\n",
3281
       "  position: relative;\n",
3282
       "}\n",
3283
       "\n",
3284
       "#sk-container-id-7 div.sk-text-repr-fallback {\n",
3285
       "  display: none;\n",
3286
       "}\n",
3287
       "\n",
3288
       "div.sk-parallel-item,\n",
3289
       "div.sk-serial,\n",
3290
       "div.sk-item {\n",
3291
       "  /* draw centered vertical line to link estimators */\n",
3292
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
3293
       "  background-size: 2px 100%;\n",
3294
       "  background-repeat: no-repeat;\n",
3295
       "  background-position: center center;\n",
3296
       "}\n",
3297
       "\n",
3298
       "/* Parallel-specific style estimator block */\n",
3299
       "\n",
3300
       "#sk-container-id-7 div.sk-parallel-item::after {\n",
3301
       "  content: \"\";\n",
3302
       "  width: 100%;\n",
3303
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
3304
       "  flex-grow: 1;\n",
3305
       "}\n",
3306
       "\n",
3307
       "#sk-container-id-7 div.sk-parallel {\n",
3308
       "  display: flex;\n",
3309
       "  align-items: stretch;\n",
3310
       "  justify-content: center;\n",
3311
       "  background-color: var(--sklearn-color-background);\n",
3312
       "  position: relative;\n",
3313
       "}\n",
3314
       "\n",
3315
       "#sk-container-id-7 div.sk-parallel-item {\n",
3316
       "  display: flex;\n",
3317
       "  flex-direction: column;\n",
3318
       "}\n",
3319
       "\n",
3320
       "#sk-container-id-7 div.sk-parallel-item:first-child::after {\n",
3321
       "  align-self: flex-end;\n",
3322
       "  width: 50%;\n",
3323
       "}\n",
3324
       "\n",
3325
       "#sk-container-id-7 div.sk-parallel-item:last-child::after {\n",
3326
       "  align-self: flex-start;\n",
3327
       "  width: 50%;\n",
3328
       "}\n",
3329
       "\n",
3330
       "#sk-container-id-7 div.sk-parallel-item:only-child::after {\n",
3331
       "  width: 0;\n",
3332
       "}\n",
3333
       "\n",
3334
       "/* Serial-specific style estimator block */\n",
3335
       "\n",
3336
       "#sk-container-id-7 div.sk-serial {\n",
3337
       "  display: flex;\n",
3338
       "  flex-direction: column;\n",
3339
       "  align-items: center;\n",
3340
       "  background-color: var(--sklearn-color-background);\n",
3341
       "  padding-right: 1em;\n",
3342
       "  padding-left: 1em;\n",
3343
       "}\n",
3344
       "\n",
3345
       "\n",
3346
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
3347
       "clickable and can be expanded/collapsed.\n",
3348
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
3349
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
3350
       "*/\n",
3351
       "\n",
3352
       "/* Pipeline and ColumnTransformer style (default) */\n",
3353
       "\n",
3354
       "#sk-container-id-7 div.sk-toggleable {\n",
3355
       "  /* Default theme specific background. It is overwritten whether we have a\n",
3356
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
3357
       "  background-color: var(--sklearn-color-background);\n",
3358
       "}\n",
3359
       "\n",
3360
       "/* Toggleable label */\n",
3361
       "#sk-container-id-7 label.sk-toggleable__label {\n",
3362
       "  cursor: pointer;\n",
3363
       "  display: block;\n",
3364
       "  width: 100%;\n",
3365
       "  margin-bottom: 0;\n",
3366
       "  padding: 0.5em;\n",
3367
       "  box-sizing: border-box;\n",
3368
       "  text-align: center;\n",
3369
       "}\n",
3370
       "\n",
3371
       "#sk-container-id-7 label.sk-toggleable__label-arrow:before {\n",
3372
       "  /* Arrow on the left of the label */\n",
3373
       "  content: \"▸\";\n",
3374
       "  float: left;\n",
3375
       "  margin-right: 0.25em;\n",
3376
       "  color: var(--sklearn-color-icon);\n",
3377
       "}\n",
3378
       "\n",
3379
       "#sk-container-id-7 label.sk-toggleable__label-arrow:hover:before {\n",
3380
       "  color: var(--sklearn-color-text);\n",
3381
       "}\n",
3382
       "\n",
3383
       "/* Toggleable content - dropdown */\n",
3384
       "\n",
3385
       "#sk-container-id-7 div.sk-toggleable__content {\n",
3386
       "  max-height: 0;\n",
3387
       "  max-width: 0;\n",
3388
       "  overflow: hidden;\n",
3389
       "  text-align: left;\n",
3390
       "  /* unfitted */\n",
3391
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
3392
       "}\n",
3393
       "\n",
3394
       "#sk-container-id-7 div.sk-toggleable__content.fitted {\n",
3395
       "  /* fitted */\n",
3396
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
3397
       "}\n",
3398
       "\n",
3399
       "#sk-container-id-7 div.sk-toggleable__content pre {\n",
3400
       "  margin: 0.2em;\n",
3401
       "  border-radius: 0.25em;\n",
3402
       "  color: var(--sklearn-color-text);\n",
3403
       "  /* unfitted */\n",
3404
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
3405
       "}\n",
3406
       "\n",
3407
       "#sk-container-id-7 div.sk-toggleable__content.fitted pre {\n",
3408
       "  /* unfitted */\n",
3409
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
3410
       "}\n",
3411
       "\n",
3412
       "#sk-container-id-7 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
3413
       "  /* Expand drop-down */\n",
3414
       "  max-height: 200px;\n",
3415
       "  max-width: 100%;\n",
3416
       "  overflow: auto;\n",
3417
       "}\n",
3418
       "\n",
3419
       "#sk-container-id-7 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
3420
       "  content: \"▾\";\n",
3421
       "}\n",
3422
       "\n",
3423
       "/* Pipeline/ColumnTransformer-specific style */\n",
3424
       "\n",
3425
       "#sk-container-id-7 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
3426
       "  color: var(--sklearn-color-text);\n",
3427
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
3428
       "}\n",
3429
       "\n",
3430
       "#sk-container-id-7 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
3431
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
3432
       "}\n",
3433
       "\n",
3434
       "/* Estimator-specific style */\n",
3435
       "\n",
3436
       "/* Colorize estimator box */\n",
3437
       "#sk-container-id-7 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
3438
       "  /* unfitted */\n",
3439
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
3440
       "}\n",
3441
       "\n",
3442
       "#sk-container-id-7 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
3443
       "  /* fitted */\n",
3444
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
3445
       "}\n",
3446
       "\n",
3447
       "#sk-container-id-7 div.sk-label label.sk-toggleable__label,\n",
3448
       "#sk-container-id-7 div.sk-label label {\n",
3449
       "  /* The background is the default theme color */\n",
3450
       "  color: var(--sklearn-color-text-on-default-background);\n",
3451
       "}\n",
3452
       "\n",
3453
       "/* On hover, darken the color of the background */\n",
3454
       "#sk-container-id-7 div.sk-label:hover label.sk-toggleable__label {\n",
3455
       "  color: var(--sklearn-color-text);\n",
3456
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
3457
       "}\n",
3458
       "\n",
3459
       "/* Label box, darken color on hover, fitted */\n",
3460
       "#sk-container-id-7 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
3461
       "  color: var(--sklearn-color-text);\n",
3462
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
3463
       "}\n",
3464
       "\n",
3465
       "/* Estimator label */\n",
3466
       "\n",
3467
       "#sk-container-id-7 div.sk-label label {\n",
3468
       "  font-family: monospace;\n",
3469
       "  font-weight: bold;\n",
3470
       "  display: inline-block;\n",
3471
       "  line-height: 1.2em;\n",
3472
       "}\n",
3473
       "\n",
3474
       "#sk-container-id-7 div.sk-label-container {\n",
3475
       "  text-align: center;\n",
3476
       "}\n",
3477
       "\n",
3478
       "/* Estimator-specific */\n",
3479
       "#sk-container-id-7 div.sk-estimator {\n",
3480
       "  font-family: monospace;\n",
3481
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
3482
       "  border-radius: 0.25em;\n",
3483
       "  box-sizing: border-box;\n",
3484
       "  margin-bottom: 0.5em;\n",
3485
       "  /* unfitted */\n",
3486
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
3487
       "}\n",
3488
       "\n",
3489
       "#sk-container-id-7 div.sk-estimator.fitted {\n",
3490
       "  /* fitted */\n",
3491
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
3492
       "}\n",
3493
       "\n",
3494
       "/* on hover */\n",
3495
       "#sk-container-id-7 div.sk-estimator:hover {\n",
3496
       "  /* unfitted */\n",
3497
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
3498
       "}\n",
3499
       "\n",
3500
       "#sk-container-id-7 div.sk-estimator.fitted:hover {\n",
3501
       "  /* fitted */\n",
3502
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
3503
       "}\n",
3504
       "\n",
3505
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
3506
       "\n",
3507
       "/* Common style for \"i\" and \"?\" */\n",
3508
       "\n",
3509
       ".sk-estimator-doc-link,\n",
3510
       "a:link.sk-estimator-doc-link,\n",
3511
       "a:visited.sk-estimator-doc-link {\n",
3512
       "  float: right;\n",
3513
       "  font-size: smaller;\n",
3514
       "  line-height: 1em;\n",
3515
       "  font-family: monospace;\n",
3516
       "  background-color: var(--sklearn-color-background);\n",
3517
       "  border-radius: 1em;\n",
3518
       "  height: 1em;\n",
3519
       "  width: 1em;\n",
3520
       "  text-decoration: none !important;\n",
3521
       "  margin-left: 1ex;\n",
3522
       "  /* unfitted */\n",
3523
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
3524
       "  color: var(--sklearn-color-unfitted-level-1);\n",
3525
       "}\n",
3526
       "\n",
3527
       ".sk-estimator-doc-link.fitted,\n",
3528
       "a:link.sk-estimator-doc-link.fitted,\n",
3529
       "a:visited.sk-estimator-doc-link.fitted {\n",
3530
       "  /* fitted */\n",
3531
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
3532
       "  color: var(--sklearn-color-fitted-level-1);\n",
3533
       "}\n",
3534
       "\n",
3535
       "/* On hover */\n",
3536
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
3537
       ".sk-estimator-doc-link:hover,\n",
3538
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
3539
       ".sk-estimator-doc-link:hover {\n",
3540
       "  /* unfitted */\n",
3541
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
3542
       "  color: var(--sklearn-color-background);\n",
3543
       "  text-decoration: none;\n",
3544
       "}\n",
3545
       "\n",
3546
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
3547
       ".sk-estimator-doc-link.fitted:hover,\n",
3548
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
3549
       ".sk-estimator-doc-link.fitted:hover {\n",
3550
       "  /* fitted */\n",
3551
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
3552
       "  color: var(--sklearn-color-background);\n",
3553
       "  text-decoration: none;\n",
3554
       "}\n",
3555
       "\n",
3556
       "/* Span, style for the box shown on hovering the info icon */\n",
3557
       ".sk-estimator-doc-link span {\n",
3558
       "  display: none;\n",
3559
       "  z-index: 9999;\n",
3560
       "  position: relative;\n",
3561
       "  font-weight: normal;\n",
3562
       "  right: .2ex;\n",
3563
       "  padding: .5ex;\n",
3564
       "  margin: .5ex;\n",
3565
       "  width: min-content;\n",
3566
       "  min-width: 20ex;\n",
3567
       "  max-width: 50ex;\n",
3568
       "  color: var(--sklearn-color-text);\n",
3569
       "  box-shadow: 2pt 2pt 4pt #999;\n",
3570
       "  /* unfitted */\n",
3571
       "  background: var(--sklearn-color-unfitted-level-0);\n",
3572
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
3573
       "}\n",
3574
       "\n",
3575
       ".sk-estimator-doc-link.fitted span {\n",
3576
       "  /* fitted */\n",
3577
       "  background: var(--sklearn-color-fitted-level-0);\n",
3578
       "  border: var(--sklearn-color-fitted-level-3);\n",
3579
       "}\n",
3580
       "\n",
3581
       ".sk-estimator-doc-link:hover span {\n",
3582
       "  display: block;\n",
3583
       "}\n",
3584
       "\n",
3585
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
3586
       "\n",
3587
       "#sk-container-id-7 a.estimator_doc_link {\n",
3588
       "  float: right;\n",
3589
       "  font-size: 1rem;\n",
3590
       "  line-height: 1em;\n",
3591
       "  font-family: monospace;\n",
3592
       "  background-color: var(--sklearn-color-background);\n",
3593
       "  border-radius: 1rem;\n",
3594
       "  height: 1rem;\n",
3595
       "  width: 1rem;\n",
3596
       "  text-decoration: none;\n",
3597
       "  /* unfitted */\n",
3598
       "  color: var(--sklearn-color-unfitted-level-1);\n",
3599
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
3600
       "}\n",
3601
       "\n",
3602
       "#sk-container-id-7 a.estimator_doc_link.fitted {\n",
3603
       "  /* fitted */\n",
3604
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
3605
       "  color: var(--sklearn-color-fitted-level-1);\n",
3606
       "}\n",
3607
       "\n",
3608
       "/* On hover */\n",
3609
       "#sk-container-id-7 a.estimator_doc_link:hover {\n",
3610
       "  /* unfitted */\n",
3611
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
3612
       "  color: var(--sklearn-color-background);\n",
3613
       "  text-decoration: none;\n",
3614
       "}\n",
3615
       "\n",
3616
       "#sk-container-id-7 a.estimator_doc_link.fitted:hover {\n",
3617
       "  /* fitted */\n",
3618
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
3619
       "}\n",
3620
       "</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>"
3621
      ],
3622
      "text/plain": [
3623
       "SVC(C=0.01, gamma=0.0001, probability=True)"
3624
      ]
3625
     },
3626
     "execution_count": 175,
3627
     "metadata": {},
3628
     "output_type": "execute_result"
3629
    }
3630
   ],
3631
   "source": [
3632
    "svc = SVC(C = 0.01, gamma = 0.0001, probability=True)\n",
3633
    "svc.fit(X_train, y_train)"
3634
   ]
3635
  },
3636
  {
3637
   "cell_type": "code",
3638
   "execution_count": 176,
3639
   "id": "fff63e68-bec8-450b-a147-7544e65e0083",
3640
   "metadata": {},
3641
   "outputs": [
3642
    {
3643
     "name": "stdout",
3644
     "output_type": "stream",
3645
     "text": [
3646
      "0.6181796801505174\n",
3647
      "0.6181069958847737\n"
3648
     ]
3649
    }
3650
   ],
3651
   "source": [
3652
    "# model predictions \n",
3653
    "\n",
3654
    "y_pred = svc.predict(X_test)\n",
3655
    "# accuracy score\n",
3656
    "\n",
3657
    "print(accuracy_score(y_train, svc.predict(X_train)))\n",
3658
    "\n",
3659
    "svc_acc = accuracy_score(y_test, svc.predict(X_test))\n",
3660
    "print(svc_acc)"
3661
   ]
3662
  },
3663
  {
3664
   "cell_type": "code",
3665
   "execution_count": 177,
3666
   "id": "dcc62841-8a28-4802-a196-9548ec0f2b25",
3667
   "metadata": {},
3668
   "outputs": [
3669
    {
3670
     "name": "stdout",
3671
     "output_type": "stream",
3672
     "text": [
3673
      "[[   0 1392]\n",
3674
      " [   0 2253]]\n"
3675
     ]
3676
    }
3677
   ],
3678
   "source": [
3679
    "# confusion matrix\n",
3680
    "\n",
3681
    "print(confusion_matrix(y_test, y_pred))"
3682
   ]
3683
  },
3684
  {
3685
   "cell_type": "code",
3686
   "execution_count": 178,
3687
   "id": "8b94bf63-7488-47b6-901d-a4449b027414",
3688
   "metadata": {},
3689
   "outputs": [
3690
    {
3691
     "name": "stdout",
3692
     "output_type": "stream",
3693
     "text": [
3694
      "              precision    recall  f1-score   support\n",
3695
      "\n",
3696
      "           0       0.00      0.00      0.00      1392\n",
3697
      "           1       0.62      1.00      0.76      2253\n",
3698
      "\n",
3699
      "    accuracy                           0.62      3645\n",
3700
      "   macro avg       0.31      0.50      0.38      3645\n",
3701
      "weighted avg       0.38      0.62      0.47      3645\n",
3702
      "\n"
3703
     ]
3704
    }
3705
   ],
3706
   "source": [
3707
    "# classification report\n",
3708
    "\n",
3709
    "print(classification_report(y_test, y_pred))"
3710
   ]
3711
  },
3712
  {
3713
   "cell_type": "markdown",
3714
   "id": "b8da0359-9496-4444-8154-80cb6831fcd9",
3715
   "metadata": {},
3716
   "source": [
3717
    "DT"
3718
   ]
3719
  },
3720
  {
3721
   "cell_type": "code",
3722
   "execution_count": 179,
3723
   "id": "77c86f51-9a2c-41b0-b9bc-fc29d311ba59",
3724
   "metadata": {},
3725
   "outputs": [
3726
    {
3727
     "name": "stdout",
3728
     "output_type": "stream",
3729
     "text": [
3730
      "Training Accuracy of Decision Tree Classifier is 1.0\n",
3731
      "Test Accuracy of Decision Tree Classifier is 1.0 \n",
3732
      "\n",
3733
      "Confusion Matrix :- \n",
3734
      "[[1392    0]\n",
3735
      " [   0 2253]]\n",
3736
      "\n",
3737
      "Classification Report :- \n",
3738
      "               precision    recall  f1-score   support\n",
3739
      "\n",
3740
      "           0       1.00      1.00      1.00      1392\n",
3741
      "           1       1.00      1.00      1.00      2253\n",
3742
      "\n",
3743
      "    accuracy                           1.00      3645\n",
3744
      "   macro avg       1.00      1.00      1.00      3645\n",
3745
      "weighted avg       1.00      1.00      1.00      3645\n",
3746
      "\n"
3747
     ]
3748
    }
3749
   ],
3750
   "source": [
3751
    "from sklearn.tree import DecisionTreeClassifier\n",
3752
    "\n",
3753
    "dtc = DecisionTreeClassifier()\n",
3754
    "\n",
3755
    "dtc.fit(X_train, y_train)\n",
3756
    "\n",
3757
    "# accuracy score, confusion matrix and classification report of decision tree\n",
3758
    "\n",
3759
    "dtc_acc = accuracy_score(y_test, dtc.predict(X_test))\n",
3760
    "\n",
3761
    "print(f\"Training Accuracy of Decision Tree Classifier is {accuracy_score(y_train, dtc.predict(X_train))}\")\n",
3762
    "print(f\"Test Accuracy of Decision Tree Classifier is {dtc_acc} \\n\")\n",
3763
    "\n",
3764
    "print(f\"Confusion Matrix :- \\n{confusion_matrix(y_test, dtc.predict(X_test))}\\n\")\n",
3765
    "print(f\"Classification Report :- \\n {classification_report(y_test, dtc.predict(X_test))}\")"
3766
   ]
3767
  },
3768
  {
3769
   "cell_type": "code",
3770
   "execution_count": 180,
3771
   "id": "54e581ec-708d-4fae-ba6b-dc815afe3ac1",
3772
   "metadata": {},
3773
   "outputs": [
3774
    {
3775
     "name": "stdout",
3776
     "output_type": "stream",
3777
     "text": [
3778
      "Fitting 24 folds for each of 1200 candidates, totalling 28800 fits\n"
3779
     ]
3780
    },
3781
    {
3782
     "data": {
3783
      "text/html": [
3784
       "<style>#sk-container-id-8 {\n",
3785
       "  /* Definition of color scheme common for light and dark mode */\n",
3786
       "  --sklearn-color-text: black;\n",
3787
       "  --sklearn-color-line: gray;\n",
3788
       "  /* Definition of color scheme for unfitted estimators */\n",
3789
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
3790
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
3791
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
3792
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
3793
       "  /* Definition of color scheme for fitted estimators */\n",
3794
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
3795
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
3796
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
3797
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
3798
       "\n",
3799
       "  /* Specific color for light theme */\n",
3800
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
3801
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
3802
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
3803
       "  --sklearn-color-icon: #696969;\n",
3804
       "\n",
3805
       "  @media (prefers-color-scheme: dark) {\n",
3806
       "    /* Redefinition of color scheme for dark theme */\n",
3807
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
3808
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
3809
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
3810
       "    --sklearn-color-icon: #878787;\n",
3811
       "  }\n",
3812
       "}\n",
3813
       "\n",
3814
       "#sk-container-id-8 {\n",
3815
       "  color: var(--sklearn-color-text);\n",
3816
       "}\n",
3817
       "\n",
3818
       "#sk-container-id-8 pre {\n",
3819
       "  padding: 0;\n",
3820
       "}\n",
3821
       "\n",
3822
       "#sk-container-id-8 input.sk-hidden--visually {\n",
3823
       "  border: 0;\n",
3824
       "  clip: rect(1px 1px 1px 1px);\n",
3825
       "  clip: rect(1px, 1px, 1px, 1px);\n",
3826
       "  height: 1px;\n",
3827
       "  margin: -1px;\n",
3828
       "  overflow: hidden;\n",
3829
       "  padding: 0;\n",
3830
       "  position: absolute;\n",
3831
       "  width: 1px;\n",
3832
       "}\n",
3833
       "\n",
3834
       "#sk-container-id-8 div.sk-dashed-wrapped {\n",
3835
       "  border: 1px dashed var(--sklearn-color-line);\n",
3836
       "  margin: 0 0.4em 0.5em 0.4em;\n",
3837
       "  box-sizing: border-box;\n",
3838
       "  padding-bottom: 0.4em;\n",
3839
       "  background-color: var(--sklearn-color-background);\n",
3840
       "}\n",
3841
       "\n",
3842
       "#sk-container-id-8 div.sk-container {\n",
3843
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
3844
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
3845
       "     so we also need the `!important` here to be able to override the\n",
3846
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
3847
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
3848
       "  display: inline-block !important;\n",
3849
       "  position: relative;\n",
3850
       "}\n",
3851
       "\n",
3852
       "#sk-container-id-8 div.sk-text-repr-fallback {\n",
3853
       "  display: none;\n",
3854
       "}\n",
3855
       "\n",
3856
       "div.sk-parallel-item,\n",
3857
       "div.sk-serial,\n",
3858
       "div.sk-item {\n",
3859
       "  /* draw centered vertical line to link estimators */\n",
3860
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
3861
       "  background-size: 2px 100%;\n",
3862
       "  background-repeat: no-repeat;\n",
3863
       "  background-position: center center;\n",
3864
       "}\n",
3865
       "\n",
3866
       "/* Parallel-specific style estimator block */\n",
3867
       "\n",
3868
       "#sk-container-id-8 div.sk-parallel-item::after {\n",
3869
       "  content: \"\";\n",
3870
       "  width: 100%;\n",
3871
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
3872
       "  flex-grow: 1;\n",
3873
       "}\n",
3874
       "\n",
3875
       "#sk-container-id-8 div.sk-parallel {\n",
3876
       "  display: flex;\n",
3877
       "  align-items: stretch;\n",
3878
       "  justify-content: center;\n",
3879
       "  background-color: var(--sklearn-color-background);\n",
3880
       "  position: relative;\n",
3881
       "}\n",
3882
       "\n",
3883
       "#sk-container-id-8 div.sk-parallel-item {\n",
3884
       "  display: flex;\n",
3885
       "  flex-direction: column;\n",
3886
       "}\n",
3887
       "\n",
3888
       "#sk-container-id-8 div.sk-parallel-item:first-child::after {\n",
3889
       "  align-self: flex-end;\n",
3890
       "  width: 50%;\n",
3891
       "}\n",
3892
       "\n",
3893
       "#sk-container-id-8 div.sk-parallel-item:last-child::after {\n",
3894
       "  align-self: flex-start;\n",
3895
       "  width: 50%;\n",
3896
       "}\n",
3897
       "\n",
3898
       "#sk-container-id-8 div.sk-parallel-item:only-child::after {\n",
3899
       "  width: 0;\n",
3900
       "}\n",
3901
       "\n",
3902
       "/* Serial-specific style estimator block */\n",
3903
       "\n",
3904
       "#sk-container-id-8 div.sk-serial {\n",
3905
       "  display: flex;\n",
3906
       "  flex-direction: column;\n",
3907
       "  align-items: center;\n",
3908
       "  background-color: var(--sklearn-color-background);\n",
3909
       "  padding-right: 1em;\n",
3910
       "  padding-left: 1em;\n",
3911
       "}\n",
3912
       "\n",
3913
       "\n",
3914
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
3915
       "clickable and can be expanded/collapsed.\n",
3916
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
3917
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
3918
       "*/\n",
3919
       "\n",
3920
       "/* Pipeline and ColumnTransformer style (default) */\n",
3921
       "\n",
3922
       "#sk-container-id-8 div.sk-toggleable {\n",
3923
       "  /* Default theme specific background. It is overwritten whether we have a\n",
3924
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
3925
       "  background-color: var(--sklearn-color-background);\n",
3926
       "}\n",
3927
       "\n",
3928
       "/* Toggleable label */\n",
3929
       "#sk-container-id-8 label.sk-toggleable__label {\n",
3930
       "  cursor: pointer;\n",
3931
       "  display: block;\n",
3932
       "  width: 100%;\n",
3933
       "  margin-bottom: 0;\n",
3934
       "  padding: 0.5em;\n",
3935
       "  box-sizing: border-box;\n",
3936
       "  text-align: center;\n",
3937
       "}\n",
3938
       "\n",
3939
       "#sk-container-id-8 label.sk-toggleable__label-arrow:before {\n",
3940
       "  /* Arrow on the left of the label */\n",
3941
       "  content: \"▸\";\n",
3942
       "  float: left;\n",
3943
       "  margin-right: 0.25em;\n",
3944
       "  color: var(--sklearn-color-icon);\n",
3945
       "}\n",
3946
       "\n",
3947
       "#sk-container-id-8 label.sk-toggleable__label-arrow:hover:before {\n",
3948
       "  color: var(--sklearn-color-text);\n",
3949
       "}\n",
3950
       "\n",
3951
       "/* Toggleable content - dropdown */\n",
3952
       "\n",
3953
       "#sk-container-id-8 div.sk-toggleable__content {\n",
3954
       "  max-height: 0;\n",
3955
       "  max-width: 0;\n",
3956
       "  overflow: hidden;\n",
3957
       "  text-align: left;\n",
3958
       "  /* unfitted */\n",
3959
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
3960
       "}\n",
3961
       "\n",
3962
       "#sk-container-id-8 div.sk-toggleable__content.fitted {\n",
3963
       "  /* fitted */\n",
3964
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
3965
       "}\n",
3966
       "\n",
3967
       "#sk-container-id-8 div.sk-toggleable__content pre {\n",
3968
       "  margin: 0.2em;\n",
3969
       "  border-radius: 0.25em;\n",
3970
       "  color: var(--sklearn-color-text);\n",
3971
       "  /* unfitted */\n",
3972
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
3973
       "}\n",
3974
       "\n",
3975
       "#sk-container-id-8 div.sk-toggleable__content.fitted pre {\n",
3976
       "  /* unfitted */\n",
3977
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
3978
       "}\n",
3979
       "\n",
3980
       "#sk-container-id-8 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
3981
       "  /* Expand drop-down */\n",
3982
       "  max-height: 200px;\n",
3983
       "  max-width: 100%;\n",
3984
       "  overflow: auto;\n",
3985
       "}\n",
3986
       "\n",
3987
       "#sk-container-id-8 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
3988
       "  content: \"▾\";\n",
3989
       "}\n",
3990
       "\n",
3991
       "/* Pipeline/ColumnTransformer-specific style */\n",
3992
       "\n",
3993
       "#sk-container-id-8 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
3994
       "  color: var(--sklearn-color-text);\n",
3995
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
3996
       "}\n",
3997
       "\n",
3998
       "#sk-container-id-8 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
3999
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
4000
       "}\n",
4001
       "\n",
4002
       "/* Estimator-specific style */\n",
4003
       "\n",
4004
       "/* Colorize estimator box */\n",
4005
       "#sk-container-id-8 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
4006
       "  /* unfitted */\n",
4007
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
4008
       "}\n",
4009
       "\n",
4010
       "#sk-container-id-8 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
4011
       "  /* fitted */\n",
4012
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
4013
       "}\n",
4014
       "\n",
4015
       "#sk-container-id-8 div.sk-label label.sk-toggleable__label,\n",
4016
       "#sk-container-id-8 div.sk-label label {\n",
4017
       "  /* The background is the default theme color */\n",
4018
       "  color: var(--sklearn-color-text-on-default-background);\n",
4019
       "}\n",
4020
       "\n",
4021
       "/* On hover, darken the color of the background */\n",
4022
       "#sk-container-id-8 div.sk-label:hover label.sk-toggleable__label {\n",
4023
       "  color: var(--sklearn-color-text);\n",
4024
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
4025
       "}\n",
4026
       "\n",
4027
       "/* Label box, darken color on hover, fitted */\n",
4028
       "#sk-container-id-8 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
4029
       "  color: var(--sklearn-color-text);\n",
4030
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
4031
       "}\n",
4032
       "\n",
4033
       "/* Estimator label */\n",
4034
       "\n",
4035
       "#sk-container-id-8 div.sk-label label {\n",
4036
       "  font-family: monospace;\n",
4037
       "  font-weight: bold;\n",
4038
       "  display: inline-block;\n",
4039
       "  line-height: 1.2em;\n",
4040
       "}\n",
4041
       "\n",
4042
       "#sk-container-id-8 div.sk-label-container {\n",
4043
       "  text-align: center;\n",
4044
       "}\n",
4045
       "\n",
4046
       "/* Estimator-specific */\n",
4047
       "#sk-container-id-8 div.sk-estimator {\n",
4048
       "  font-family: monospace;\n",
4049
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
4050
       "  border-radius: 0.25em;\n",
4051
       "  box-sizing: border-box;\n",
4052
       "  margin-bottom: 0.5em;\n",
4053
       "  /* unfitted */\n",
4054
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
4055
       "}\n",
4056
       "\n",
4057
       "#sk-container-id-8 div.sk-estimator.fitted {\n",
4058
       "  /* fitted */\n",
4059
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
4060
       "}\n",
4061
       "\n",
4062
       "/* on hover */\n",
4063
       "#sk-container-id-8 div.sk-estimator:hover {\n",
4064
       "  /* unfitted */\n",
4065
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
4066
       "}\n",
4067
       "\n",
4068
       "#sk-container-id-8 div.sk-estimator.fitted:hover {\n",
4069
       "  /* fitted */\n",
4070
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
4071
       "}\n",
4072
       "\n",
4073
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
4074
       "\n",
4075
       "/* Common style for \"i\" and \"?\" */\n",
4076
       "\n",
4077
       ".sk-estimator-doc-link,\n",
4078
       "a:link.sk-estimator-doc-link,\n",
4079
       "a:visited.sk-estimator-doc-link {\n",
4080
       "  float: right;\n",
4081
       "  font-size: smaller;\n",
4082
       "  line-height: 1em;\n",
4083
       "  font-family: monospace;\n",
4084
       "  background-color: var(--sklearn-color-background);\n",
4085
       "  border-radius: 1em;\n",
4086
       "  height: 1em;\n",
4087
       "  width: 1em;\n",
4088
       "  text-decoration: none !important;\n",
4089
       "  margin-left: 1ex;\n",
4090
       "  /* unfitted */\n",
4091
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
4092
       "  color: var(--sklearn-color-unfitted-level-1);\n",
4093
       "}\n",
4094
       "\n",
4095
       ".sk-estimator-doc-link.fitted,\n",
4096
       "a:link.sk-estimator-doc-link.fitted,\n",
4097
       "a:visited.sk-estimator-doc-link.fitted {\n",
4098
       "  /* fitted */\n",
4099
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
4100
       "  color: var(--sklearn-color-fitted-level-1);\n",
4101
       "}\n",
4102
       "\n",
4103
       "/* On hover */\n",
4104
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
4105
       ".sk-estimator-doc-link:hover,\n",
4106
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
4107
       ".sk-estimator-doc-link:hover {\n",
4108
       "  /* unfitted */\n",
4109
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
4110
       "  color: var(--sklearn-color-background);\n",
4111
       "  text-decoration: none;\n",
4112
       "}\n",
4113
       "\n",
4114
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
4115
       ".sk-estimator-doc-link.fitted:hover,\n",
4116
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
4117
       ".sk-estimator-doc-link.fitted:hover {\n",
4118
       "  /* fitted */\n",
4119
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
4120
       "  color: var(--sklearn-color-background);\n",
4121
       "  text-decoration: none;\n",
4122
       "}\n",
4123
       "\n",
4124
       "/* Span, style for the box shown on hovering the info icon */\n",
4125
       ".sk-estimator-doc-link span {\n",
4126
       "  display: none;\n",
4127
       "  z-index: 9999;\n",
4128
       "  position: relative;\n",
4129
       "  font-weight: normal;\n",
4130
       "  right: .2ex;\n",
4131
       "  padding: .5ex;\n",
4132
       "  margin: .5ex;\n",
4133
       "  width: min-content;\n",
4134
       "  min-width: 20ex;\n",
4135
       "  max-width: 50ex;\n",
4136
       "  color: var(--sklearn-color-text);\n",
4137
       "  box-shadow: 2pt 2pt 4pt #999;\n",
4138
       "  /* unfitted */\n",
4139
       "  background: var(--sklearn-color-unfitted-level-0);\n",
4140
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
4141
       "}\n",
4142
       "\n",
4143
       ".sk-estimator-doc-link.fitted span {\n",
4144
       "  /* fitted */\n",
4145
       "  background: var(--sklearn-color-fitted-level-0);\n",
4146
       "  border: var(--sklearn-color-fitted-level-3);\n",
4147
       "}\n",
4148
       "\n",
4149
       ".sk-estimator-doc-link:hover span {\n",
4150
       "  display: block;\n",
4151
       "}\n",
4152
       "\n",
4153
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
4154
       "\n",
4155
       "#sk-container-id-8 a.estimator_doc_link {\n",
4156
       "  float: right;\n",
4157
       "  font-size: 1rem;\n",
4158
       "  line-height: 1em;\n",
4159
       "  font-family: monospace;\n",
4160
       "  background-color: var(--sklearn-color-background);\n",
4161
       "  border-radius: 1rem;\n",
4162
       "  height: 1rem;\n",
4163
       "  width: 1rem;\n",
4164
       "  text-decoration: none;\n",
4165
       "  /* unfitted */\n",
4166
       "  color: var(--sklearn-color-unfitted-level-1);\n",
4167
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
4168
       "}\n",
4169
       "\n",
4170
       "#sk-container-id-8 a.estimator_doc_link.fitted {\n",
4171
       "  /* fitted */\n",
4172
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
4173
       "  color: var(--sklearn-color-fitted-level-1);\n",
4174
       "}\n",
4175
       "\n",
4176
       "/* On hover */\n",
4177
       "#sk-container-id-8 a.estimator_doc_link:hover {\n",
4178
       "  /* unfitted */\n",
4179
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
4180
       "  color: var(--sklearn-color-background);\n",
4181
       "  text-decoration: none;\n",
4182
       "}\n",
4183
       "\n",
4184
       "#sk-container-id-8 a.estimator_doc_link.fitted:hover {\n",
4185
       "  /* fitted */\n",
4186
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
4187
       "}\n",
4188
       "</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",
4189
       "             param_grid={&#x27;criterion&#x27;: [&#x27;gini&#x27;, &#x27;entropy&#x27;],\n",
4190
       "                         &#x27;max_depth&#x27;: [3, 5, 7, 10],\n",
4191
       "                         &#x27;max_features&#x27;: [&#x27;auto&#x27;, &#x27;sqrt&#x27;, &#x27;log2&#x27;],\n",
4192
       "                         &#x27;min_samples_leaf&#x27;: [1, 2, 3, 5, 7],\n",
4193
       "                         &#x27;min_samples_split&#x27;: [1, 2, 3, 5, 7],\n",
4194
       "                         &#x27;splitter&#x27;: [&#x27;best&#x27;, &#x27;random&#x27;]},\n",
4195
       "             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",
4196
       "             param_grid={&#x27;criterion&#x27;: [&#x27;gini&#x27;, &#x27;entropy&#x27;],\n",
4197
       "                         &#x27;max_depth&#x27;: [3, 5, 7, 10],\n",
4198
       "                         &#x27;max_features&#x27;: [&#x27;auto&#x27;, &#x27;sqrt&#x27;, &#x27;log2&#x27;],\n",
4199
       "                         &#x27;min_samples_leaf&#x27;: [1, 2, 3, 5, 7],\n",
4200
       "                         &#x27;min_samples_split&#x27;: [1, 2, 3, 5, 7],\n",
4201
       "                         &#x27;splitter&#x27;: [&#x27;best&#x27;, &#x27;random&#x27;]},\n",
4202
       "             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>"
4203
      ],
4204
      "text/plain": [
4205
       "GridSearchCV(cv=24, estimator=DecisionTreeClassifier(), n_jobs=-1,\n",
4206
       "             param_grid={'criterion': ['gini', 'entropy'],\n",
4207
       "                         'max_depth': [3, 5, 7, 10],\n",
4208
       "                         'max_features': ['auto', 'sqrt', 'log2'],\n",
4209
       "                         'min_samples_leaf': [1, 2, 3, 5, 7],\n",
4210
       "                         'min_samples_split': [1, 2, 3, 5, 7],\n",
4211
       "                         'splitter': ['best', 'random']},\n",
4212
       "             verbose=1)"
4213
      ]
4214
     },
4215
     "execution_count": 180,
4216
     "metadata": {},
4217
     "output_type": "execute_result"
4218
    }
4219
   ],
4220
   "source": [
4221
    "# hyper parameter tuning of decision tree \n",
4222
    "\n",
4223
    "from sklearn.model_selection import GridSearchCV\n",
4224
    "grid_param = {\n",
4225
    "    'criterion' : ['gini', 'entropy'],\n",
4226
    "    'max_depth' : [3, 5, 7, 10],\n",
4227
    "    'splitter' : ['best', 'random'],\n",
4228
    "    'min_samples_leaf' : [1, 2, 3, 5, 7],\n",
4229
    "    'min_samples_split' : [1, 2, 3, 5, 7],\n",
4230
    "    'max_features' : ['auto', 'sqrt', 'log2']\n",
4231
    "}\n",
4232
    "\n",
4233
    "grid_search_dtc = GridSearchCV(dtc, grid_param, cv = 24, n_jobs = -1, verbose = 1)\n",
4234
    "grid_search_dtc.fit(X_train, y_train)"
4235
   ]
4236
  },
4237
  {
4238
   "cell_type": "code",
4239
   "execution_count": 181,
4240
   "id": "99f5a2e2-e069-4984-b10b-0d16cca9ca73",
4241
   "metadata": {},
4242
   "outputs": [
4243
    {
4244
     "name": "stdout",
4245
     "output_type": "stream",
4246
     "text": [
4247
      "{'criterion': 'gini', 'max_depth': 10, 'max_features': 'sqrt', 'min_samples_leaf': 5, 'min_samples_split': 5, 'splitter': 'best'}\n"
4248
     ]
4249
    }
4250
   ],
4251
   "source": [
4252
    "# best parameters \n",
4253
    "\n",
4254
    "print(grid_search_dtc.best_params_)\n"
4255
   ]
4256
  },
4257
  {
4258
   "cell_type": "code",
4259
   "execution_count": 182,
4260
   "id": "e5a2f0d1-c71a-474c-b7de-e3eae9d8df24",
4261
   "metadata": {},
4262
   "outputs": [
4263
    {
4264
     "name": "stdout",
4265
     "output_type": "stream",
4266
     "text": [
4267
      "Training Accuracy of Decision Tree Classifier is 0.8996942615239887\n",
4268
      "Test Accuracy of Decision Tree Classifier is 0.8880658436213992 \n",
4269
      "\n",
4270
      "Confusion Matrix :- \n",
4271
      "[[1184  208]\n",
4272
      " [ 200 2053]]\n",
4273
      "\n",
4274
      "Classification Report :- \n",
4275
      "               precision    recall  f1-score   support\n",
4276
      "\n",
4277
      "           0       0.86      0.85      0.85      1392\n",
4278
      "           1       0.91      0.91      0.91      2253\n",
4279
      "\n",
4280
      "    accuracy                           0.89      3645\n",
4281
      "   macro avg       0.88      0.88      0.88      3645\n",
4282
      "weighted avg       0.89      0.89      0.89      3645\n",
4283
      "\n"
4284
     ]
4285
    }
4286
   ],
4287
   "source": [
4288
    "# best estimator\n",
4289
    "\n",
4290
    "dtc = grid_search_dtc.best_estimator_\n",
4291
    "\n",
4292
    "# accuracy score, confusion matrix and classification report of decision tree\n",
4293
    "\n",
4294
    "dtc_acc = accuracy_score(y_test, dtc.predict(X_test))\n",
4295
    "\n",
4296
    "print(f\"Training Accuracy of Decision Tree Classifier is {accuracy_score(y_train, dtc.predict(X_train))}\")\n",
4297
    "print(f\"Test Accuracy of Decision Tree Classifier is {dtc_acc} \\n\")\n",
4298
    "\n",
4299
    "print(f\"Confusion Matrix :- \\n{confusion_matrix(y_test, dtc.predict(X_test))}\\n\")\n",
4300
    "print(f\"Classification Report :- \\n {classification_report(y_test, dtc.predict(X_test))}\")"
4301
   ]
4302
  },
4303
  {
4304
   "cell_type": "code",
4305
   "execution_count": 183,
4306
   "id": "72e8219b-e200-4672-bbd4-850b9ef03428",
4307
   "metadata": {},
4308
   "outputs": [
4309
    {
4310
     "data": {
4311
      "text/html": [
4312
       "<div>\n",
4313
       "<style scoped>\n",
4314
       "    .dataframe tbody tr th:only-of-type {\n",
4315
       "        vertical-align: middle;\n",
4316
       "    }\n",
4317
       "\n",
4318
       "    .dataframe tbody tr th {\n",
4319
       "        vertical-align: top;\n",
4320
       "    }\n",
4321
       "\n",
4322
       "    .dataframe thead th {\n",
4323
       "        text-align: right;\n",
4324
       "    }\n",
4325
       "</style>\n",
4326
       "<table border=\"1\" class=\"dataframe\">\n",
4327
       "  <thead>\n",
4328
       "    <tr style=\"text-align: right;\">\n",
4329
       "      <th></th>\n",
4330
       "      <th>Model</th>\n",
4331
       "      <th>Score</th>\n",
4332
       "    </tr>\n",
4333
       "  </thead>\n",
4334
       "  <tbody>\n",
4335
       "    <tr>\n",
4336
       "      <th>3</th>\n",
4337
       "      <td>Decision Tree Classifier</td>\n",
4338
       "      <td>88.81</td>\n",
4339
       "    </tr>\n",
4340
       "    <tr>\n",
4341
       "      <th>1</th>\n",
4342
       "      <td>KNN</td>\n",
4343
       "      <td>81.54</td>\n",
4344
       "    </tr>\n",
4345
       "    <tr>\n",
4346
       "      <th>0</th>\n",
4347
       "      <td>Logistic Regression</td>\n",
4348
       "      <td>69.71</td>\n",
4349
       "    </tr>\n",
4350
       "    <tr>\n",
4351
       "      <th>2</th>\n",
4352
       "      <td>SVM</td>\n",
4353
       "      <td>61.81</td>\n",
4354
       "    </tr>\n",
4355
       "  </tbody>\n",
4356
       "</table>\n",
4357
       "</div>"
4358
      ],
4359
      "text/plain": [
4360
       "                      Model  Score\n",
4361
       "3  Decision Tree Classifier  88.81\n",
4362
       "1                       KNN  81.54\n",
4363
       "0       Logistic Regression  69.71\n",
4364
       "2                       SVM  61.81"
4365
      ]
4366
     },
4367
     "execution_count": 183,
4368
     "metadata": {},
4369
     "output_type": "execute_result"
4370
    }
4371
   ],
4372
   "source": [
4373
    "models = pd.DataFrame({\n",
4374
    "    'Model': ['Logistic Regression', 'KNN', 'SVM', 'Decision Tree Classifier'],\n",
4375
    "    'Score': [100*round(lr_acc,4), 100*round(knn_acc,4), 100*round(svc_acc,4), 100*round(dtc_acc,4)]\n",
4376
    "})\n",
4377
    "models.sort_values(by = 'Score', ascending = False)"
4378
   ]
4379
  },
4380
  {
4381
   "cell_type": "code",
4382
   "execution_count": 184,
4383
   "id": "f394aff4-ce78-465b-98a9-aabfbc2b020b",
4384
   "metadata": {},
4385
   "outputs": [
4386
    {
4387
     "name": "stdout",
4388
     "output_type": "stream",
4389
     "text": [
4390
      "Model: LR\n",
4391
      "Mean Accuracy: 69.71%\n",
4392
      "Mean ROC AUC: 76.83%\n",
4393
      "------------------------------\n",
4394
      "Model: DT\n",
4395
      "Mean Accuracy: 87.24%\n",
4396
      "Mean ROC AUC: 96.03%\n",
4397
      "------------------------------\n",
4398
      "Model: SVM\n",
4399
      "Mean Accuracy: 61.81%\n",
4400
      "Mean ROC AUC: 74.32%\n",
4401
      "------------------------------\n",
4402
      "Model: KNN\n",
4403
      "Mean Accuracy: 81.54%\n",
4404
      "Mean ROC AUC: 90.04%\n",
4405
      "------------------------------\n"
4406
     ]
4407
    },
4408
    {
4409
     "data": {
4410
      "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/VyqVSExMFOeb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TWOaiYkJKlWqJE7v0KED1q5dC0tLS5ibm2PlypXw8fFh2CUiIiJ6AxU77CqVSkRERMDNza006imxkSNHQiaTYcGCBcjNzRVvKkFEREREbx6dbirh6emJ2NjycWXk9OnTNR4rlUqMGTOGAZeIiIiIijbO7n+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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",
4411
      "text/plain": [
4412
       "<Figure size 800x500 with 1 Axes>"
4413
      ]
4414
     },
4415
     "metadata": {},
4416
     "output_type": "display_data"
4417
    }
4418
   ],
4419
   "source": [
4420
    "from sklearn import metrics\n",
4421
    "import numpy as np\n",
4422
    "import matplotlib.pyplot as plt\n",
4423
    "\n",
4424
    "# Define models with labels\n",
4425
    "models = [\n",
4426
    "    {'label': 'LR', 'model': lr},\n",
4427
    "    {'label': 'DT', 'model': dtc},\n",
4428
    "    {'label': 'SVM', 'model': svc},\n",
4429
    "    {'label': 'KNN', 'model': knn}\n",
4430
    "]\n",
4431
    "\n",
4432
    "# Initialize lists to store performance metrics\n",
4433
    "means_roc = []\n",
4434
    "means_accuracy = []\n",
4435
    "\n",
4436
    "# Evaluate each model\n",
4437
    "for m in models:\n",
4438
    "    model = m['model']\n",
4439
    "    label = m['label']\n",
4440
    "    \n",
4441
    "    # Fit model and make predictions\n",
4442
    "    model.fit(X_train, y_train)\n",
4443
    "    y_pred = model.predict(X_test)\n",
4444
    "    \n",
4445
    "    # Calculate accuracy\n",
4446
    "    accuracy = metrics.accuracy_score(y_test, y_pred)\n",
4447
    "    mean_accuracy = 100 * round(accuracy, 4)\n",
4448
    "    means_accuracy.append(mean_accuracy)\n",
4449
    "    \n",
4450
    "    # Calculate ROC AUC\n",
4451
    "    if hasattr(model, 'predict_proba'):\n",
4452
    "        y_pred_prob = model.predict_proba(X_test)[:,1]\n",
4453
    "        mean_roc = 100 * round(metrics.roc_auc_score(y_test, y_pred_prob), 4)\n",
4454
    "    else:\n",
4455
    "        mean_roc = np.nan  # Use NaN if predict_proba is not available\n",
4456
    "    \n",
4457
    "    means_roc.append(mean_roc)\n",
4458
    "    \n",
4459
    "    # Display mean accuracy and mean ROC AUC for each model\n",
4460
    "    print(f\"Model: {label}\")\n",
4461
    "    print(f\"Mean Accuracy: {mean_accuracy:.2f}%\")\n",
4462
    "    print(f\"Mean ROC AUC: {mean_roc:.2f}%\")\n",
4463
    "    print(\"-\" * 30)\n",
4464
    "\n",
4465
    "# Convert lists to tuples for plotting\n",
4466
    "means_accuracy = tuple(means_accuracy)\n",
4467
    "means_roc = tuple(means_roc)\n",
4468
    "\n",
4469
    "# Create plot\n",
4470
    "index = np.arange(len(models))\n",
4471
    "bar_width = 0.35\n",
4472
    "\n",
4473
    "# Create a figure\n",
4474
    "fig, ax = plt.subplots(figsize=(8, 5))\n",
4475
    "\n",
4476
    "# Plot accuracy and ROC AUC as bar charts\n",
4477
    "rects1 = plt.bar(index, means_accuracy, bar_width, alpha=0.8, color='mediumpurple', label='Accuracy (%)')\n",
4478
    "rects2 = plt.bar(index + bar_width, means_roc, bar_width, alpha=0.8, color='rebeccapurple', label='ROC AUC (%)')\n",
4479
    "\n",
4480
    "# Set axis labels and title\n",
4481
    "ax.set_xlabel('Models')\n",
4482
    "ax.set_ylabel('Performance (%)')\n",
4483
    "ax.set_title('Performance Evaluation - Liver Disease Prediction')\n",
4484
    "\n",
4485
    "# Set x-ticks and labels\n",
4486
    "ax.set_xticks(index + bar_width / 2)\n",
4487
    "ax.set_xticklabels([model['label'] for model in models], rotation=40, ha='center')\n",
4488
    "\n",
4489
    "# Add legend\n",
4490
    "ax.legend()\n",
4491
    "\n",
4492
    "# Show the plot\n",
4493
    "plt.show()\n"
4494
   ]
4495
  },
4496
  {
4497
   "cell_type": "code",
4498
   "execution_count": 190,
4499
   "id": "4339012f",
4500
   "metadata": {},
4501
   "outputs": [
4502
    {
4503
     "data": {
4504
      "text/html": [
4505
       "<div>\n",
4506
       "<style scoped>\n",
4507
       "    .dataframe tbody tr th:only-of-type {\n",
4508
       "        vertical-align: middle;\n",
4509
       "    }\n",
4510
       "\n",
4511
       "    .dataframe tbody tr th {\n",
4512
       "        vertical-align: top;\n",
4513
       "    }\n",
4514
       "\n",
4515
       "    .dataframe thead th {\n",
4516
       "        text-align: right;\n",
4517
       "    }\n",
4518
       "</style>\n",
4519
       "<table border=\"1\" class=\"dataframe\">\n",
4520
       "  <thead>\n",
4521
       "    <tr style=\"text-align: right;\">\n",
4522
       "      <th></th>\n",
4523
       "      <th>Age of the patient</th>\n",
4524
       "      <th>Gender of the patient</th>\n",
4525
       "      <th>Total Bilirubin</th>\n",
4526
       "      <th>Direct Bilirubin</th>\n",
4527
       "      <th>Alkphos Alkaline Phosphotase</th>\n",
4528
       "      <th>Sgpt Alamine Aminotransferase</th>\n",
4529
       "      <th>Aspartate_Aminotransferase</th>\n",
4530
       "      <th>Total Protiens</th>\n",
4531
       "      <th>ALB Albumin</th>\n",
4532
       "      <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
4533
       "      <th>Result</th>\n",
4534
       "    </tr>\n",
4535
       "  </thead>\n",
4536
       "  <tbody>\n",
4537
       "    <tr>\n",
4538
       "      <th>15940</th>\n",
4539
       "      <td>50.0</td>\n",
4540
       "      <td>1</td>\n",
4541
       "      <td>0.8</td>\n",
4542
       "      <td>0.2</td>\n",
4543
       "      <td>148.0</td>\n",
4544
       "      <td>23.0</td>\n",
4545
       "      <td>35.0</td>\n",
4546
       "      <td>6.0</td>\n",
4547
       "      <td>3.0</td>\n",
4548
       "      <td>1.0</td>\n",
4549
       "      <td>1</td>\n",
4550
       "    </tr>\n",
4551
       "    <tr>\n",
4552
       "      <th>11861</th>\n",
4553
       "      <td>30.0</td>\n",
4554
       "      <td>1</td>\n",
4555
       "      <td>0.8</td>\n",
4556
       "      <td>0.2</td>\n",
4557
       "      <td>650.0</td>\n",
4558
       "      <td>70.0</td>\n",
4559
       "      <td>138.0</td>\n",
4560
       "      <td>6.6</td>\n",
4561
       "      <td>3.1</td>\n",
4562
       "      <td>0.8</td>\n",
4563
       "      <td>1</td>\n",
4564
       "    </tr>\n",
4565
       "    <tr>\n",
4566
       "      <th>14768</th>\n",
4567
       "      <td>35.0</td>\n",
4568
       "      <td>1</td>\n",
4569
       "      <td>2.2</td>\n",
4570
       "      <td>1.0</td>\n",
4571
       "      <td>310.0</td>\n",
4572
       "      <td>119.0</td>\n",
4573
       "      <td>42.0</td>\n",
4574
       "      <td>7.9</td>\n",
4575
       "      <td>4.1</td>\n",
4576
       "      <td>1.0</td>\n",
4577
       "      <td>0</td>\n",
4578
       "    </tr>\n",
4579
       "    <tr>\n",
4580
       "      <th>17664</th>\n",
4581
       "      <td>26.0</td>\n",
4582
       "      <td>0</td>\n",
4583
       "      <td>0.7</td>\n",
4584
       "      <td>0.1</td>\n",
4585
       "      <td>162.0</td>\n",
4586
       "      <td>52.0</td>\n",
4587
       "      <td>41.0</td>\n",
4588
       "      <td>5.2</td>\n",
4589
       "      <td>2.5</td>\n",
4590
       "      <td>0.9</td>\n",
4591
       "      <td>0</td>\n",
4592
       "    </tr>\n",
4593
       "    <tr>\n",
4594
       "      <th>4052</th>\n",
4595
       "      <td>57.0</td>\n",
4596
       "      <td>0</td>\n",
4597
       "      <td>1.4</td>\n",
4598
       "      <td>0.8</td>\n",
4599
       "      <td>178.0</td>\n",
4600
       "      <td>13.0</td>\n",
4601
       "      <td>26.0</td>\n",
4602
       "      <td>8.0</td>\n",
4603
       "      <td>4.6</td>\n",
4604
       "      <td>1.3</td>\n",
4605
       "      <td>0</td>\n",
4606
       "    </tr>\n",
4607
       "  </tbody>\n",
4608
       "</table>\n",
4609
       "</div>"
4610
      ],
4611
      "text/plain": [
4612
       "       Age of the patient  Gender of the patient  Total Bilirubin  \\\n",
4613
       "15940                50.0                      1              0.8   \n",
4614
       "11861                30.0                      1              0.8   \n",
4615
       "14768                35.0                      1              2.2   \n",
4616
       "17664                26.0                      0              0.7   \n",
4617
       "4052                 57.0                      0              1.4   \n",
4618
       "\n",
4619
       "       Direct Bilirubin   Alkphos Alkaline Phosphotase  \\\n",
4620
       "15940               0.2                          148.0   \n",
4621
       "11861               0.2                          650.0   \n",
4622
       "14768               1.0                          310.0   \n",
4623
       "17664               0.1                          162.0   \n",
4624
       "4052                0.8                          178.0   \n",
4625
       "\n",
4626
       "        Sgpt Alamine Aminotransferase  Aspartate_Aminotransferase  \\\n",
4627
       "15940                            23.0                        35.0   \n",
4628
       "11861                            70.0                       138.0   \n",
4629
       "14768                           119.0                        42.0   \n",
4630
       "17664                            52.0                        41.0   \n",
4631
       "4052                             13.0                        26.0   \n",
4632
       "\n",
4633
       "       Total Protiens   ALB Albumin  A/G Ratio Albumin and Globulin Ratio  \\\n",
4634
       "15940             6.0           3.0                                   1.0   \n",
4635
       "11861             6.6           3.1                                   0.8   \n",
4636
       "14768             7.9           4.1                                   1.0   \n",
4637
       "17664             5.2           2.5                                   0.9   \n",
4638
       "4052              8.0           4.6                                   1.3   \n",
4639
       "\n",
4640
       "       Result  \n",
4641
       "15940       1  \n",
4642
       "11861       1  \n",
4643
       "14768       0  \n",
4644
       "17664       0  \n",
4645
       "4052        0  "
4646
      ]
4647
     },
4648
     "execution_count": 190,
4649
     "metadata": {},
4650
     "output_type": "execute_result"
4651
    }
4652
   ],
4653
   "source": [
4654
    "df.sample(5)"
4655
   ]
4656
  },
4657
  {
4658
   "cell_type": "code",
4659
   "execution_count": 192,
4660
   "id": "d7770e6a-f844-4c3c-8a8f-3c864d76f281",
4661
   "metadata": {},
4662
   "outputs": [
4663
    {
4664
     "name": "stdout",
4665
     "output_type": "stream",
4666
     "text": [
4667
      "[1]\n",
4668
      "M\n"
4669
     ]
4670
    }
4671
   ],
4672
   "source": [
4673
    "from sklearn.linear_model import LogisticRegression\n",
4674
    "input_data =(26.0,0,0.7,0.1,162.0,52.0,41.0,5.2,2.5,0.9)\n",
4675
    "#(26.0,0,0.7,0.2,185.0,16.0,22.0,7.3,3.7,1.00)\n",
4676
    "#100,12,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1) \n",
4677
    "\n",
4678
    "'''(14.36,0.09779,0.08129,0.04781,0.1885,0.05766,0.7886,23.56,0.008462,\n",
4679
    "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",
4680
    ")'''\n",
4681
    "\n",
4682
    "input_data_as_numpy_array = np.asarray(input_data)\n",
4683
    "\n",
4684
    "# reshape the array as we are predicting for one instance\n",
4685
    "input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
4686
    "predictions = lr.predict(input_data_reshaped)\n",
4687
    "print(predictions)\n",
4688
    "if (predictions == 0):\n",
4689
    "  print('B')\n",
4690
    "else:\n",
4691
    "  print('M')"
4692
   ]
4693
  },
4694
  {
4695
   "cell_type": "code",
4696
   "execution_count": null,
4697
   "id": "e8337a7a-1d7d-4141-821c-ba6d4af45151",
4698
   "metadata": {},
4699
   "outputs": [],
4700
   "source": []
4701
  },
4702
  {
4703
   "cell_type": "code",
4704
   "execution_count": null,
4705
   "id": "1f597232-8f9c-4a8d-8edd-495539d95274",
4706
   "metadata": {},
4707
   "outputs": [],
4708
   "source": [
4709
    "\n",
4710
    "import pickle\n",
4711
    "model = dtc\n",
4712
    "filename = r'C:\\Users\\Pranshu Saini\\Desktop\\disease-prediction-main\\docpat\\model\\liver_prediction.pkl'\n",
4713
    "pickle.dump(model, open(filename,'wb'))"
4714
   ]
4715
  },
4716
  {
4717
   "cell_type": "code",
4718
   "execution_count": null,
4719
   "id": "10843248",
4720
   "metadata": {},
4721
   "outputs": [],
4722
   "source": []
4723
  },
4724
  {
4725
   "cell_type": "code",
4726
   "execution_count": null,
4727
   "id": "fd047969",
4728
   "metadata": {},
4729
   "outputs": [],
4730
   "source": []
4731
  }
4732
 ],
4733
 "metadata": {
4734
  "kernelspec": {
4735
   "display_name": "Python 3",
4736
   "language": "python",
4737
   "name": "python3"
4738
  },
4739
  "language_info": {
4740
   "codemirror_mode": {
4741
    "name": "ipython",
4742
    "version": 3
4743
   },
4744
   "file_extension": ".py",
4745
   "mimetype": "text/x-python",
4746
   "name": "python",
4747
   "nbconvert_exporter": "python",
4748
   "pygments_lexer": "ipython3",
4749
   "version": "3.12.4"
4750
  }
4751
 },
4752
 "nbformat": 4,
4753
 "nbformat_minor": 5
4754
}