d7cc01273ad0d1c400c50deb2a6a15e96aff65f1
[thoth.git] / models / failure_prediction / jnotebooks / Decision_Tree.ipynb
1 {
2   "nbformat": 4,
3   "nbformat_minor": 0,
4   "metadata": {
5     "colab": {
6       "name": "Decision_Tree.ipynb",
7       "provenance": [],
8       "collapsed_sections": []
9     },
10     "kernelspec": {
11       "display_name": "Python 3",
12       "name": "python3"
13     },
14     "language_info": {
15       "name": "python"
16     }
17   },
18   "cells": [
19     {
20       "cell_type": "markdown",
21       "metadata": {
22         "id": "FxPrqgIEVsdg"
23       },
24       "source": [
25         "Contributors: **Rohit Singh Rathaur, Girish L.** \n",
26         "\n",
27         "Copyright [2021](2021) [*Rohit Singh Rathaur, BIT Mesra and Girish L., CIT GUBBI, Karnataka*]\n",
28         "\n",
29         "Licensed under the Apache License, Version 2.0 (the \"License\");\n",
30         "you may not use this file except in compliance with the License.\n",
31         "You may obtain a copy of the License at\n",
32         "\n",
33         "    http://www.apache.org/licenses/LICENSE-2.0\n",
34         "\n",
35         "Unless required by applicable law or agreed to in writing, software\n",
36         "distributed under the License is distributed on an \"AS IS\" BASIS,\n",
37         "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
38         "See the License for the specific language governing permissions and\n",
39         "limitations under the License."
40       ]
41     },
42     {
43       "cell_type": "markdown",
44       "metadata": {
45         "id": "sV1Drb9ccUFw"
46       },
47       "source": [
48         "We mounted the drive to access the data"
49       ]
50     },
51     {
52       "cell_type": "code",
53       "metadata": {
54         "colab": {
55           "base_uri": "https://localhost:8080/"
56         },
57         "id": "YQ6lT1e2hrx4",
58         "outputId": "df8b6b61-66a0-4bca-9ec5-c21216f5b46d"
59       },
60       "source": [
61         "from google.colab import drive\n",
62         "drive.mount('/content/drive')"
63       ],
64       "execution_count": null,
65       "outputs": [
66         {
67           "output_type": "stream",
68           "name": "stdout",
69           "text": [
70             "Mounted at /content/drive\n"
71           ]
72         }
73       ]
74     },
75     {
76       "cell_type": "markdown",
77       "metadata": {
78         "id": "yhhkDCI7cc43"
79       },
80       "source": [
81         "We are importing libraries to read the CSV and to train the models"
82       ]
83     },
84     {
85       "cell_type": "code",
86       "metadata": {
87         "id": "tLhroy5BnMnC"
88       },
89       "source": [
90         "# Importing libraries\n",
91         "import tensorflow as tf\n",
92         "import matplotlib.pyplot as plt\n",
93         "import matplotlib as mpl\n",
94         "import pandas as pd\n",
95         "import numpy as np\n",
96         "import os"
97       ],
98       "execution_count": null,
99       "outputs": []
100     },
101     {
102       "cell_type": "markdown",
103       "metadata": {
104         "id": "9wFIhTogcl4z"
105       },
106       "source": [
107         "We are reading CSV file using `read_csv` function and dropping the `Timestamp` column and storing it in a DataFrame called `df_Ellis`."
108       ]
109     },
110     {
111       "cell_type": "code",
112       "metadata": {
113         "id": "2-UpMVsSnfCI",
114         "colab": {
115           "base_uri": "https://localhost:8080/",
116           "height": 419
117         },
118         "outputId": "38b85609-e8c4-493f-ee6d-43d1b627db7f"
119       },
120       "source": [
121         "df_Ellis  = pd.read_csv(\"/content/drive/MyDrive/Failure/lstm/Ellis_FinalTwoConditionwithOR.csv\")\n",
122         "df_Ellis=df_Ellis.drop(columns='Timestamp')\n",
123         "df_Ellis"
124       ],
125       "execution_count": null,
126       "outputs": [
127         {
128           "output_type": "execute_result",
129           "data": {
130             "text/html": [
131               "<div>\n",
132               "<style scoped>\n",
133               "    .dataframe tbody tr th:only-of-type {\n",
134               "        vertical-align: middle;\n",
135               "    }\n",
136               "\n",
137               "    .dataframe tbody tr th {\n",
138               "        vertical-align: top;\n",
139               "    }\n",
140               "\n",
141               "    .dataframe thead th {\n",
142               "        text-align: right;\n",
143               "    }\n",
144               "</style>\n",
145               "<table border=\"1\" class=\"dataframe\">\n",
146               "  <thead>\n",
147               "    <tr style=\"text-align: right;\">\n",
148               "      <th></th>\n",
149               "      <th>ellis-cpu.system_perc</th>\n",
150               "      <th>ellis-cpu.wait_perc</th>\n",
151               "      <th>ellis-load.avg_1_min</th>\n",
152               "      <th>ellis-mem.free_mb</th>\n",
153               "      <th>ellis-net.in_bytes_sec</th>\n",
154               "      <th>ellis-net.out_packets_sec</th>\n",
155               "      <th>Label</th>\n",
156               "    </tr>\n",
157               "  </thead>\n",
158               "  <tbody>\n",
159               "    <tr>\n",
160               "      <th>0</th>\n",
161               "      <td>0.5</td>\n",
162               "      <td>12.9</td>\n",
163               "      <td>1.730</td>\n",
164               "      <td>3949</td>\n",
165               "      <td>5413.200</td>\n",
166               "      <td>62.067</td>\n",
167               "      <td>1</td>\n",
168               "    </tr>\n",
169               "    <tr>\n",
170               "      <th>1</th>\n",
171               "      <td>0.4</td>\n",
172               "      <td>10.3</td>\n",
173               "      <td>1.790</td>\n",
174               "      <td>3950</td>\n",
175               "      <td>5201.667</td>\n",
176               "      <td>59.567</td>\n",
177               "      <td>1</td>\n",
178               "    </tr>\n",
179               "    <tr>\n",
180               "      <th>2</th>\n",
181               "      <td>0.4</td>\n",
182               "      <td>11.8</td>\n",
183               "      <td>1.520</td>\n",
184               "      <td>3950</td>\n",
185               "      <td>5370.733</td>\n",
186               "      <td>61.200</td>\n",
187               "      <td>1</td>\n",
188               "    </tr>\n",
189               "    <tr>\n",
190               "      <th>3</th>\n",
191               "      <td>0.4</td>\n",
192               "      <td>12.9</td>\n",
193               "      <td>1.430</td>\n",
194               "      <td>3949</td>\n",
195               "      <td>5292.467</td>\n",
196               "      <td>60.400</td>\n",
197               "      <td>1</td>\n",
198               "    </tr>\n",
199               "    <tr>\n",
200               "      <th>4</th>\n",
201               "      <td>0.5</td>\n",
202               "      <td>12.1</td>\n",
203               "      <td>1.440</td>\n",
204               "      <td>3950</td>\n",
205               "      <td>5318.167</td>\n",
206               "      <td>61.700</td>\n",
207               "      <td>1</td>\n",
208               "    </tr>\n",
209               "    <tr>\n",
210               "      <th>...</th>\n",
211               "      <td>...</td>\n",
212               "      <td>...</td>\n",
213               "      <td>...</td>\n",
214               "      <td>...</td>\n",
215               "      <td>...</td>\n",
216               "      <td>...</td>\n",
217               "      <td>...</td>\n",
218               "    </tr>\n",
219               "    <tr>\n",
220               "      <th>176995</th>\n",
221               "      <td>0.4</td>\n",
222               "      <td>0.3</td>\n",
223               "      <td>0.030</td>\n",
224               "      <td>3484</td>\n",
225               "      <td>230.967</td>\n",
226               "      <td>2.167</td>\n",
227               "      <td>0</td>\n",
228               "    </tr>\n",
229               "    <tr>\n",
230               "      <th>176996</th>\n",
231               "      <td>0.2</td>\n",
232               "      <td>0.3</td>\n",
233               "      <td>0.018</td>\n",
234               "      <td>3484</td>\n",
235               "      <td>218.433</td>\n",
236               "      <td>0.767</td>\n",
237               "      <td>0</td>\n",
238               "    </tr>\n",
239               "    <tr>\n",
240               "      <th>176997</th>\n",
241               "      <td>0.6</td>\n",
242               "      <td>0.3</td>\n",
243               "      <td>0.010</td>\n",
244               "      <td>3483</td>\n",
245               "      <td>160.967</td>\n",
246               "      <td>1.867</td>\n",
247               "      <td>0</td>\n",
248               "    </tr>\n",
249               "    <tr>\n",
250               "      <th>176998</th>\n",
251               "      <td>0.6</td>\n",
252               "      <td>0.3</td>\n",
253               "      <td>0.007</td>\n",
254               "      <td>3484</td>\n",
255               "      <td>188.367</td>\n",
256               "      <td>2.100</td>\n",
257               "      <td>0</td>\n",
258               "    </tr>\n",
259               "    <tr>\n",
260               "      <th>176999</th>\n",
261               "      <td>0.4</td>\n",
262               "      <td>0.1</td>\n",
263               "      <td>0.040</td>\n",
264               "      <td>3484</td>\n",
265               "      <td>229.833</td>\n",
266               "      <td>2.400</td>\n",
267               "      <td>0</td>\n",
268               "    </tr>\n",
269               "  </tbody>\n",
270               "</table>\n",
271               "<p>177000 rows Ã— 7 columns</p>\n",
272               "</div>"
273             ],
274             "text/plain": [
275               "        ellis-cpu.system_perc  ...  Label\n",
276               "0                         0.5  ...      1\n",
277               "1                         0.4  ...      1\n",
278               "2                         0.4  ...      1\n",
279               "3                         0.4  ...      1\n",
280               "4                         0.5  ...      1\n",
281               "...                       ...  ...    ...\n",
282               "176995                    0.4  ...      0\n",
283               "176996                    0.2  ...      0\n",
284               "176997                    0.6  ...      0\n",
285               "176998                    0.6  ...      0\n",
286               "176999                    0.4  ...      0\n",
287               "\n",
288               "[177000 rows x 7 columns]"
289             ]
290           },
291           "metadata": {},
292           "execution_count": 45
293         }
294       ]
295     },
296     {
297       "cell_type": "markdown",
298       "metadata": {
299         "id": "o9SAQoIodC1V"
300       },
301       "source": [
302         "First we stored the `feature_cols` and defined the `X` matrix and `y` vector where `X` is a matrix and containing all the feature matrix and `y` is a vector which is having target value."
303       ]
304     },
305     {
306       "cell_type": "code",
307       "metadata": {
308         "id": "27TqMF9VNQgh"
309       },
310       "source": [
311         "\n",
312         "# define X and y\n",
313         "feature_cols = ['ellis-cpu.wait_perc',\t'ellis-load.avg_1_min',\t'ellis-net.in_bytes_sec','ellis-cpu.system_perc','ellis-mem.free_mb']\n",
314         "\n",
315         "# X is a matrix, hence we use [] to access the features we want in feature_cols\n",
316         "X = df_Ellis[feature_cols]\n",
317         "\n",
318         "# y is a vector, hence we use dot to access 'label'\n",
319         "y = df_Ellis.Label"
320       ],
321       "execution_count": null,
322       "outputs": []
323     },
324     {
325       "cell_type": "markdown",
326       "metadata": {
327         "id": "lBGYYW2Fdsra"
328       },
329       "source": [
330         "We splitted `X` and `y` into `X_train`, `X_test`, `y_train`, and `y_test` using `train_test_split` function."
331       ]
332     },
333     {
334       "cell_type": "code",
335       "metadata": {
336         "id": "6YiG55Z8NqJR"
337       },
338       "source": [
339         "# split X and y into training and testing sets\n",
340         "from sklearn.model_selection import train_test_split\n",
341         "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=5)"
342       ],
343       "execution_count": null,
344       "outputs": []
345     },
346     {
347       "cell_type": "markdown",
348       "metadata": {
349         "id": "UfHBs8eweLT_"
350       },
351       "source": [
352         "We are training the model with Decision Tree."
353       ]
354     },
355     {
356       "cell_type": "code",
357       "metadata": {
358         "colab": {
359           "base_uri": "https://localhost:8080/"
360         },
361         "id": "r1LWPgeBNvMA",
362         "outputId": "3fb01e3e-9d22-4547-b5ec-355821675af6"
363       },
364       "source": [
365         "# train a logistic regression model on the training set\n",
366         "from sklearn.linear_model import LogisticRegression\n",
367         "from sklearn import tree\n",
368         "\n",
369         "# instantiate model\n",
370         "logreg=tree.DecisionTreeClassifier()\n",
371         "\n",
372         "# fit model\n",
373         "logreg.fit(X_train, y_train)"
374       ],
375       "execution_count": null,
376       "outputs": [
377         {
378           "output_type": "execute_result",
379           "data": {
380             "text/plain": [
381               "DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',\n",
382               "                       max_depth=None, max_features=None, max_leaf_nodes=None,\n",
383               "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
384               "                       min_samples_leaf=1, min_samples_split=2,\n",
385               "                       min_weight_fraction_leaf=0.0, presort='deprecated',\n",
386               "                       random_state=None, splitter='best')"
387             ]
388           },
389           "metadata": {},
390           "execution_count": 119
391         }
392       ]
393     },
394     {
395       "cell_type": "markdown",
396       "metadata": {
397         "id": "koopvyUxe1BR"
398       },
399       "source": [
400         "We are making predictions for test set"
401       ]
402     },
403     {
404       "cell_type": "code",
405       "metadata": {
406         "id": "YNrCzlWVODRZ"
407       },
408       "source": [
409         "# make class predictions for the testing set\n",
410         "y_pred_class = logreg.predict(X_test)"
411       ],
412       "execution_count": null,
413       "outputs": []
414     },
415     {
416       "cell_type": "markdown",
417       "metadata": {
418         "id": "61cWU-hAejuK"
419       },
420       "source": [
421         ""
422       ]
423     },
424     {
425       "cell_type": "markdown",
426       "metadata": {
427         "id": "r9XsgzK6e8Sj"
428       },
429       "source": [
430         "Here, we are calculating the accuracy using `sklearn` library"
431       ]
432     },
433     {
434       "cell_type": "code",
435       "metadata": {
436         "colab": {
437           "base_uri": "https://localhost:8080/"
438         },
439         "id": "nrmeurYhOF9A",
440         "outputId": "af9f0179-2e24-4b85-e702-09f8cf5dd176"
441       },
442       "source": [
443         "# calculate accuracy\n",
444         "from sklearn import metrics\n",
445         "print(metrics.accuracy_score(y_test, y_pred_class))"
446       ],
447       "execution_count": null,
448       "outputs": [
449         {
450           "output_type": "stream",
451           "name": "stdout",
452           "text": [
453             "0.6620338983050847\n"
454           ]
455         }
456       ]
457     },
458     {
459       "cell_type": "markdown",
460       "metadata": {
461         "id": "We67ligTfEyz"
462       },
463       "source": [
464         "We are examining the class distribution of the testing set using a `pandas` series method"
465       ]
466     },
467     {
468       "cell_type": "code",
469       "metadata": {
470         "colab": {
471           "base_uri": "https://localhost:8080/"
472         },
473         "id": "zdWWQ7p9OLuA",
474         "outputId": "d30b7eed-a72b-42dc-946b-6ce13f9d46e1"
475       },
476       "source": [
477         "# examine the class distribution of the testing set (using a Pandas Series method)\n",
478         "y_test.value_counts()"
479       ],
480       "execution_count": null,
481       "outputs": [
482         {
483           "output_type": "execute_result",
484           "data": {
485             "text/plain": [
486               "0    33686\n",
487               "1    19414\n",
488               "Name: Label, dtype: int64"
489             ]
490           },
491           "metadata": {},
492           "execution_count": 122
493         }
494       ]
495     },
496     {
497       "cell_type": "markdown",
498       "metadata": {
499         "id": "2mHqdHaOfPHh"
500       },
501       "source": [
502         "We counted the value for each lables"
503       ]
504     },
505     {
506       "cell_type": "code",
507       "metadata": {
508         "colab": {
509           "base_uri": "https://localhost:8080/"
510         },
511         "id": "5y6mGyYwOQf4",
512         "outputId": "d8aaf9cc-eb8a-417e-8804-4613e034e8a1"
513       },
514       "source": [
515         "y_train.value_counts()"
516       ],
517       "execution_count": null,
518       "outputs": [
519         {
520           "output_type": "execute_result",
521           "data": {
522             "text/plain": [
523               "0    78460\n",
524               "1    45440\n",
525               "Name: Label, dtype: int64"
526             ]
527           },
528           "metadata": {},
529           "execution_count": 123
530         }
531       ]
532     },
533     {
534       "cell_type": "markdown",
535       "metadata": {
536         "id": "gHYoAXK3fUNr"
537       },
538       "source": [
539         "We are calculating the percentage of ones because `y_test` only contains ones and zeroes, we can simply calculate the mean = percentage of ones"
540       ]
541     },
542     {
543       "cell_type": "code",
544       "metadata": {
545         "colab": {
546           "base_uri": "https://localhost:8080/"
547         },
548         "id": "bGLlh0lVOVMp",
549         "outputId": "f389d7cb-bf0b-4cf5-8b5b-6bf962c68717"
550       },
551       "source": [
552         "# calculate the percentage of ones\n",
553         "# because y_test only contains ones and zeros, we can simply calculate the mean = percentage of ones\n",
554         "y_test.mean()"
555       ],
556       "execution_count": null,
557       "outputs": [
558         {
559           "output_type": "execute_result",
560           "data": {
561             "text/plain": [
562               "0.3656120527306968"
563             ]
564           },
565           "metadata": {},
566           "execution_count": 124
567         }
568       ]
569     },
570     {
571       "cell_type": "markdown",
572       "metadata": {
573         "id": "vjerEaxJfhAw"
574       },
575       "source": [
576         "We are calculating the percentage of zeros"
577       ]
578     },
579     {
580       "cell_type": "code",
581       "metadata": {
582         "colab": {
583           "base_uri": "https://localhost:8080/"
584         },
585         "id": "GbU1cj6OOcGq",
586         "outputId": "8d1936a2-35c3-4813-be8f-9873c680f59f"
587       },
588       "source": [
589         "# calculate the percentage of zeros\n",
590         "1 - y_test.mean()"
591       ],
592       "execution_count": null,
593       "outputs": [
594         {
595           "output_type": "execute_result",
596           "data": {
597             "text/plain": [
598               "0.6343879472693033"
599             ]
600           },
601           "metadata": {},
602           "execution_count": 125
603         }
604       ]
605     },
606     {
607       "cell_type": "code",
608       "metadata": {
609         "colab": {
610           "base_uri": "https://localhost:8080/"
611         },
612         "id": "t8w_x6f4OgCL",
613         "outputId": "23b3fc85-aa56-4060-922d-cdb04dcbf75e"
614       },
615       "source": [
616         "# calculate null accuracy in a single line of code\n",
617         "# only for binary classification problems coded as 0/1\n",
618         "max(y_test.mean(), 1 - y_test.mean())"
619       ],
620       "execution_count": null,
621       "outputs": [
622         {
623           "output_type": "execute_result",
624           "data": {
625             "text/plain": [
626               "0.6343879472693033"
627             ]
628           },
629           "metadata": {},
630           "execution_count": 126
631         }
632       ]
633     },
634     {
635       "cell_type": "code",
636       "metadata": {
637         "colab": {
638           "base_uri": "https://localhost:8080/"
639         },
640         "id": "iEsa9XIwOkX5",
641         "outputId": "9f890113-031a-48ef-f497-644550336b88"
642       },
643       "source": [
644         "# calculate null accuracy (for multi-class classification problems)\n",
645         "y_test.value_counts().head(1) / len(y_test)"
646       ],
647       "execution_count": null,
648       "outputs": [
649         {
650           "output_type": "execute_result",
651           "data": {
652             "text/plain": [
653               "0    0.634388\n",
654               "Name: Label, dtype: float64"
655             ]
656           },
657           "metadata": {},
658           "execution_count": 127
659         }
660       ]
661     },
662     {
663       "cell_type": "code",
664       "metadata": {
665         "colab": {
666           "base_uri": "https://localhost:8080/"
667         },
668         "id": "uYAoMBHPOqPB",
669         "outputId": "58da15d1-50c6-42cb-d09c-3f719e333b79"
670       },
671       "source": [
672         "\n",
673         "# print the first 25 true and predicted responses\n",
674         "print('True:', y_test.values[0:50])\n",
675         "print('False:', y_pred_class[0:50])"
676       ],
677       "execution_count": null,
678       "outputs": [
679         {
680           "output_type": "stream",
681           "name": "stdout",
682           "text": [
683             "True: [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 1 1 1 0 0 0 1 0 0\n",
684             " 0 0 0 1 1 0 0 1 1 1 0 0 1]\n",
685             "False: [0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 1 0 0 1 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0\n",
686             " 0 0 0 1 1 1 1 0 0 0 0 0 0]\n"
687           ]
688         }
689       ]
690     },
691     {
692       "cell_type": "code",
693       "metadata": {
694         "colab": {
695           "base_uri": "https://localhost:8080/"
696         },
697         "id": "puC1RxKmOw8C",
698         "outputId": "30df8b66-f7dc-4cb4-c869-179e2630c240"
699       },
700       "source": [
701         "# IMPORTANT: first argument is true values, second argument is predicted values\n",
702         "# this produces a 2x2 numpy array (matrix)\n",
703         "print(metrics.confusion_matrix(y_test, y_pred_class))"
704       ],
705       "execution_count": null,
706       "outputs": [
707         {
708           "output_type": "stream",
709           "name": "stdout",
710           "text": [
711             "[[24355  9331]\n",
712             " [ 8615 10799]]\n"
713           ]
714         }
715       ]
716     },
717     {
718       "cell_type": "code",
719       "metadata": {
720         "colab": {
721           "base_uri": "https://localhost:8080/"
722         },
723         "id": "eXqJUVOlPA_z",
724         "outputId": "bbfb9a96-d2fc-4726-e4af-d87fcd9ef7ee"
725       },
726       "source": [
727         "# save confusion matrix and slice into four pieces\n",
728         "confusion = metrics.confusion_matrix(y_test, y_pred_class)\n",
729         "print(confusion)\n",
730         "#[row, column]\n",
731         "TP = confusion[1, 1]\n",
732         "TN = confusion[0, 0]\n",
733         "FP = confusion[0, 1]\n",
734         "FN = confusion[1, 0]"
735       ],
736       "execution_count": null,
737       "outputs": [
738         {
739           "output_type": "stream",
740           "name": "stdout",
741           "text": [
742             "[[24355  9331]\n",
743             " [ 8615 10799]]\n"
744           ]
745         }
746       ]
747     },
748     {
749       "cell_type": "code",
750       "metadata": {
751         "colab": {
752           "base_uri": "https://localhost:8080/"
753         },
754         "id": "klBfDQSgPG4C",
755         "outputId": "9928f546-6f0b-4aa9-e647-6a0c0487f798"
756       },
757       "source": [
758         "\n",
759         "# use float to perform true division, not integer division\n",
760         "print((TP + TN) / float(TP + TN + FP + FN))\n",
761         "print(metrics.accuracy_score(y_test, y_pred_class))"
762       ],
763       "execution_count": null,
764       "outputs": [
765         {
766           "output_type": "stream",
767           "name": "stdout",
768           "text": [
769             "0.6620338983050847\n",
770             "0.6620338983050847\n"
771           ]
772         }
773       ]
774     },
775     {
776       "cell_type": "markdown",
777       "metadata": {
778         "id": "aeoA5XY_fyfU"
779       },
780       "source": [
781         "We are defining a function `print_results` to print the result of `y_test` and `y_pred`."
782       ]
783     },
784     {
785       "cell_type": "code",
786       "metadata": {
787         "id": "D8GDuytFHL0o"
788       },
789       "source": [
790         "def print_results(y_test, y_pred):\n",
791         "    \n",
792         "    #f1-score\n",
793         "    f1 = metrics.f1_score(y_test, y_pred)\n",
794         "    print(\"F1 Score: \", f1)\n",
795         "    print(classification_report(y_test, y_pred))\n",
796         "    \n",
797         "    conf_matrix = metrics.confusion_matrix(y_test, y_pred)\n",
798         "    plt.figure(figsize=(12,12))\n",
799         "    plt.subplot(221)\n",
800         "    sns.heatmap(conf_matrix, fmt = \"d\",annot=True, cmap='Blues')\n",
801         "    b, t = plt.ylim()\n",
802         "    plt.ylim(b + 0.5, t - 0.5)\n",
803         "    plt.title('Confuion Matrix')\n",
804         "    plt.ylabel('True Values')\n",
805         "    plt.xlabel('Predicted Values')\n",
806         "\n",
807         "    #roc_auc_score\n",
808         "    model_roc_auc = metrics.roc_auc_score(y_test, y_pred) \n",
809         "    print (\"Area under curve : \",model_roc_auc,\"\\n\")\n",
810         "    fpr,tpr,thresholds = metrics.roc_curve(y_test, y_pred)\n",
811         "    gmeans = np.sqrt(tpr * (1-fpr))\n",
812         "    ix = np.argmax(gmeans)\n",
813         "    threshold = np.round(thresholds[ix],3)\n",
814         "\n",
815         "    plt.subplot(222)\n",
816         "    plt.plot(fpr, tpr, color='darkorange', lw=1, label = \"Auc : %.3f\" %model_roc_auc)\n",
817         "    plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')\n",
818         "    plt.scatter(fpr[ix], tpr[ix], marker='o', color='black', label='Best Threshold:' + str(threshold))\n",
819         "    plt.xlim([0.0, 1.0])\n",
820         "    plt.ylim([0.0, 1.05])\n",
821         "    plt.xlabel('False Positive Rate')\n",
822         "    plt.ylabel('True Positive Rate')\n",
823         "    plt.title('Receiver operating characteristic')\n",
824         "    plt.legend(loc=\"lower right\")"
825       ],
826       "execution_count": null,
827       "outputs": []
828     },
829     {
830       "cell_type": "code",
831       "metadata": {
832         "colab": {
833           "base_uri": "https://localhost:8080/",
834           "height": 578
835         },
836         "id": "X2tMErOPHQZQ",
837         "outputId": "f6e44631-e5fe-4423-9cae-b6bed5c7a874"
838       },
839       "source": [
840         "import sklearn.metrics as metrics\n",
841         "import seaborn as sns\n",
842         "\n",
843         "from sklearn.metrics import classification_report\n",
844         "print_results(y_test, y_pred_class)"
845       ],
846       "execution_count": null,
847       "outputs": [
848         {
849           "output_type": "stream",
850           "name": "stdout",
851           "text": [
852             "F1 Score:  0.5461764110863848\n",
853             "              precision    recall  f1-score   support\n",
854             "\n",
855             "           0       0.74      0.72      0.73     33686\n",
856             "           1       0.54      0.56      0.55     19414\n",
857             "\n",
858             "    accuracy                           0.66     53100\n",
859             "   macro avg       0.64      0.64      0.64     53100\n",
860             "weighted avg       0.66      0.66      0.66     53100\n",
861             "\n",
862             "Area under curve :  0.6396243607472745 \n",
863             "\n"
864           ]
865         },
866         {
867           "output_type": "display_data",
868           "data": {
869             "image/png": "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\n",
870             "text/plain": [
871               "<Figure size 864x864 with 3 Axes>"
872             ]
873           },
874           "metadata": {
875             "needs_background": "light"
876           }
877         }
878       ]
879     },
880     {
881       "cell_type": "code",
882       "metadata": {
883         "id": "-NpF2Zc4lIdW"
884       },
885       "source": [
886         ""
887       ],
888       "execution_count": null,
889       "outputs": []
890     }
891   ]
892 }