Skip to content

Instantly share code, notes, and snippets.

@netEmmanuel
Created January 9, 2021 20:33
Show Gist options
  • Save netEmmanuel/dfe6fa042f8119e9c0956b5d039fb2fa to your computer and use it in GitHub Desktop.
Save netEmmanuel/dfe6fa042f8119e9c0956b5d039fb2fa to your computer and use it in GitHub Desktop.
anomaly_detection.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"accelerator": "GPU",
"colab": {
"name": "anomaly_detection.ipynb",
"provenance": [],
"collapsed_sections": [
"PIPhnG1vg-Dr",
"4w8YzNyHhXA5",
"OiNzr_2Xx5Xl",
"t2L0tJPo3kMD",
"Bd96lKYiSOK_",
"7_ePtKtFufQf",
"0xmdYMAE7wWw",
"MbxrM2aJ9Pwj"
],
"authorship_tag": "ABX9TyOPAbfbuRZeH6nhxBaERWJ6",
"include_colab_link": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/netEmmanuel/dfe6fa042f8119e9c0956b5d039fb2fa/anomaly_detection.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "PIPhnG1vg-Dr"
},
"source": [
"# **Importing libraries**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Ydron68UrqeE",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "10ccbb70-877f-422d-bcb2-8805b2d6f10e"
},
"source": [
"!pip install ipython-autotime\r\n",
"import numpy as np\r\n",
"import pandas as pd\r\n",
"import sklearn\r\n",
"from sklearn.ensemble import IsolationForest\r\n",
"from sklearn.neighbors import LocalOutlierFactor\r\n",
"from sklearn.svm import OneClassSVM\r\n",
"import matplotlib.pyplot as plt\r\n",
"from sklearn.model_selection import train_test_split\r\n",
"from sklearn.metrics import roc_curve, roc_auc_score, accuracy_score, average_precision_score\r\n",
"%load_ext autotime"
],
"execution_count": 156,
"outputs": [
{
"output_type": "stream",
"text": [
"Requirement already satisfied: ipython-autotime in /usr/local/lib/python3.6/dist-packages (0.3.0)\n",
"Requirement already satisfied: ipython in /usr/local/lib/python3.6/dist-packages (from ipython-autotime) (5.5.0)\n",
"Requirement already satisfied: pygments in /usr/local/lib/python3.6/dist-packages (from ipython->ipython-autotime) (2.6.1)\n",
"Requirement already satisfied: prompt-toolkit<2.0.0,>=1.0.4 in /usr/local/lib/python3.6/dist-packages (from ipython->ipython-autotime) (1.0.18)\n",
"Requirement already satisfied: traitlets>=4.2 in /usr/local/lib/python3.6/dist-packages (from ipython->ipython-autotime) (4.3.3)\n",
"Requirement already satisfied: decorator in /usr/local/lib/python3.6/dist-packages (from ipython->ipython-autotime) (4.4.2)\n",
"Requirement already satisfied: pickleshare in /usr/local/lib/python3.6/dist-packages (from ipython->ipython-autotime) (0.7.5)\n",
"Requirement already satisfied: simplegeneric>0.8 in /usr/local/lib/python3.6/dist-packages (from ipython->ipython-autotime) (0.8.1)\n",
"Requirement already satisfied: pexpect; sys_platform != \"win32\" in /usr/local/lib/python3.6/dist-packages (from ipython->ipython-autotime) (4.8.0)\n",
"Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.6/dist-packages (from ipython->ipython-autotime) (51.1.1)\n",
"Requirement already satisfied: wcwidth in /usr/local/lib/python3.6/dist-packages (from prompt-toolkit<2.0.0,>=1.0.4->ipython->ipython-autotime) (0.2.5)\n",
"Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from prompt-toolkit<2.0.0,>=1.0.4->ipython->ipython-autotime) (1.15.0)\n",
"Requirement already satisfied: ipython-genutils in /usr/local/lib/python3.6/dist-packages (from traitlets>=4.2->ipython->ipython-autotime) (0.2.0)\n",
"Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.6/dist-packages (from pexpect; sys_platform != \"win32\"->ipython->ipython-autotime) (0.6.0)\n",
"The autotime extension is already loaded. To reload it, use:\n",
" %reload_ext autotime\n",
"time: 2.23 s (started: 2021-01-09 20:16:02 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4w8YzNyHhXA5"
},
"source": [
"# **Import Data**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "06b9z76BwoIq",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "752f8278-890d-4bbe-dcce-96021ca86956"
},
"source": [
"data = pd.read_csv('creditcard.csv')\r\n",
"data = data.drop(['Time'] , axis=1)"
],
"execution_count": 157,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 1.16 s (started: 2021-01-09 20:16:04 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "pMNhc1bpxJiO",
"outputId": "02c34735-730d-4227-afe7-1d8c7a600547"
},
"source": [
"data.head()"
],
"execution_count": 158,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>V1</th>\n",
" <th>V2</th>\n",
" <th>V3</th>\n",
" <th>V4</th>\n",
" <th>V5</th>\n",
" <th>V6</th>\n",
" <th>V7</th>\n",
" <th>V8</th>\n",
" <th>V9</th>\n",
" <th>V10</th>\n",
" <th>V11</th>\n",
" <th>V12</th>\n",
" <th>V13</th>\n",
" <th>V14</th>\n",
" <th>V15</th>\n",
" <th>V16</th>\n",
" <th>V17</th>\n",
" <th>V18</th>\n",
" <th>V19</th>\n",
" <th>V20</th>\n",
" <th>V21</th>\n",
" <th>V22</th>\n",
" <th>V23</th>\n",
" <th>V24</th>\n",
" <th>V25</th>\n",
" <th>V26</th>\n",
" <th>V27</th>\n",
" <th>V28</th>\n",
" <th>Amount</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>-1.359807</td>\n",
" <td>-0.072781</td>\n",
" <td>2.536347</td>\n",
" <td>1.378155</td>\n",
" <td>-0.338321</td>\n",
" <td>0.462388</td>\n",
" <td>0.239599</td>\n",
" <td>0.098698</td>\n",
" <td>0.363787</td>\n",
" <td>0.090794</td>\n",
" <td>-0.551600</td>\n",
" <td>-0.617801</td>\n",
" <td>-0.991390</td>\n",
" <td>-0.311169</td>\n",
" <td>1.468177</td>\n",
" <td>-0.470401</td>\n",
" <td>0.207971</td>\n",
" <td>0.025791</td>\n",
" <td>0.403993</td>\n",
" <td>0.251412</td>\n",
" <td>-0.018307</td>\n",
" <td>0.277838</td>\n",
" <td>-0.110474</td>\n",
" <td>0.066928</td>\n",
" <td>0.128539</td>\n",
" <td>-0.189115</td>\n",
" <td>0.133558</td>\n",
" <td>-0.021053</td>\n",
" <td>149.62</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.191857</td>\n",
" <td>0.266151</td>\n",
" <td>0.166480</td>\n",
" <td>0.448154</td>\n",
" <td>0.060018</td>\n",
" <td>-0.082361</td>\n",
" <td>-0.078803</td>\n",
" <td>0.085102</td>\n",
" <td>-0.255425</td>\n",
" <td>-0.166974</td>\n",
" <td>1.612727</td>\n",
" <td>1.065235</td>\n",
" <td>0.489095</td>\n",
" <td>-0.143772</td>\n",
" <td>0.635558</td>\n",
" <td>0.463917</td>\n",
" <td>-0.114805</td>\n",
" <td>-0.183361</td>\n",
" <td>-0.145783</td>\n",
" <td>-0.069083</td>\n",
" <td>-0.225775</td>\n",
" <td>-0.638672</td>\n",
" <td>0.101288</td>\n",
" <td>-0.339846</td>\n",
" <td>0.167170</td>\n",
" <td>0.125895</td>\n",
" <td>-0.008983</td>\n",
" <td>0.014724</td>\n",
" <td>2.69</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>-1.358354</td>\n",
" <td>-1.340163</td>\n",
" <td>1.773209</td>\n",
" <td>0.379780</td>\n",
" <td>-0.503198</td>\n",
" <td>1.800499</td>\n",
" <td>0.791461</td>\n",
" <td>0.247676</td>\n",
" <td>-1.514654</td>\n",
" <td>0.207643</td>\n",
" <td>0.624501</td>\n",
" <td>0.066084</td>\n",
" <td>0.717293</td>\n",
" <td>-0.165946</td>\n",
" <td>2.345865</td>\n",
" <td>-2.890083</td>\n",
" <td>1.109969</td>\n",
" <td>-0.121359</td>\n",
" <td>-2.261857</td>\n",
" <td>0.524980</td>\n",
" <td>0.247998</td>\n",
" <td>0.771679</td>\n",
" <td>0.909412</td>\n",
" <td>-0.689281</td>\n",
" <td>-0.327642</td>\n",
" <td>-0.139097</td>\n",
" <td>-0.055353</td>\n",
" <td>-0.059752</td>\n",
" <td>378.66</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>-0.966272</td>\n",
" <td>-0.185226</td>\n",
" <td>1.792993</td>\n",
" <td>-0.863291</td>\n",
" <td>-0.010309</td>\n",
" <td>1.247203</td>\n",
" <td>0.237609</td>\n",
" <td>0.377436</td>\n",
" <td>-1.387024</td>\n",
" <td>-0.054952</td>\n",
" <td>-0.226487</td>\n",
" <td>0.178228</td>\n",
" <td>0.507757</td>\n",
" <td>-0.287924</td>\n",
" <td>-0.631418</td>\n",
" <td>-1.059647</td>\n",
" <td>-0.684093</td>\n",
" <td>1.965775</td>\n",
" <td>-1.232622</td>\n",
" <td>-0.208038</td>\n",
" <td>-0.108300</td>\n",
" <td>0.005274</td>\n",
" <td>-0.190321</td>\n",
" <td>-1.175575</td>\n",
" <td>0.647376</td>\n",
" <td>-0.221929</td>\n",
" <td>0.062723</td>\n",
" <td>0.061458</td>\n",
" <td>123.50</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>-1.158233</td>\n",
" <td>0.877737</td>\n",
" <td>1.548718</td>\n",
" <td>0.403034</td>\n",
" <td>-0.407193</td>\n",
" <td>0.095921</td>\n",
" <td>0.592941</td>\n",
" <td>-0.270533</td>\n",
" <td>0.817739</td>\n",
" <td>0.753074</td>\n",
" <td>-0.822843</td>\n",
" <td>0.538196</td>\n",
" <td>1.345852</td>\n",
" <td>-1.119670</td>\n",
" <td>0.175121</td>\n",
" <td>-0.451449</td>\n",
" <td>-0.237033</td>\n",
" <td>-0.038195</td>\n",
" <td>0.803487</td>\n",
" <td>0.408542</td>\n",
" <td>-0.009431</td>\n",
" <td>0.798278</td>\n",
" <td>-0.137458</td>\n",
" <td>0.141267</td>\n",
" <td>-0.206010</td>\n",
" <td>0.502292</td>\n",
" <td>0.219422</td>\n",
" <td>0.215153</td>\n",
" <td>69.99</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" V1 V2 V3 V4 ... V27 V28 Amount Class\n",
"0 -1.359807 -0.072781 2.536347 1.378155 ... 0.133558 -0.021053 149.62 0.0\n",
"1 1.191857 0.266151 0.166480 0.448154 ... -0.008983 0.014724 2.69 0.0\n",
"2 -1.358354 -1.340163 1.773209 0.379780 ... -0.055353 -0.059752 378.66 0.0\n",
"3 -0.966272 -0.185226 1.792993 -0.863291 ... 0.062723 0.061458 123.50 0.0\n",
"4 -1.158233 0.877737 1.548718 0.403034 ... 0.219422 0.215153 69.99 0.0\n",
"\n",
"[5 rows x 30 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 158
},
{
"output_type": "stream",
"text": [
"time: 53.5 ms (started: 2021-01-09 20:16:05 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "BA7USfnKz70M",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "509db350-9adc-4e29-9a04-d00a30f9b1a0"
},
"source": [
"Fraud = data[data['Class']==1]\r\n",
"Nofraud = data[data['Class']==0]\r\n",
"outlier_fraction = len(Fraud)/float(len(Nofraud))"
],
"execution_count": 159,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 21.8 ms (started: 2021-01-09 20:16:05 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "S0SSSq910m6f",
"outputId": "62db004e-db1f-491b-cd6b-debe403c0d4b"
},
"source": [
"outlier_fraction"
],
"execution_count": 160,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.0019275057574847303"
]
},
"metadata": {
"tags": []
},
"execution_count": 160
},
{
"output_type": "stream",
"text": [
"time: 2.95 ms (started: 2021-01-09 20:16:05 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "t-AFuwWn8GeP",
"outputId": "cb77dadd-1fc0-47bc-fd9d-e404a8c9fbe3"
},
"source": [
"data.isna().values.any()"
],
"execution_count": 161,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"True"
]
},
"metadata": {
"tags": []
},
"execution_count": 161
},
{
"output_type": "stream",
"text": [
"time: 11.3 ms (started: 2021-01-09 20:16:05 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OiNzr_2Xx5Xl"
},
"source": [
"# **Data Pre-processing**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "VCfXAX7Uw0es",
"outputId": "dbbdf36c-b68c-4b6c-dc24-53fdf54f4dd5"
},
"source": [
"X = data.drop('Class',axis=1) \r\n",
"y = data['Class']\r\n",
"y = pd.DataFrame(y)\r\n",
"y.head(5)"
],
"execution_count": 162,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Class\n",
"0 0.0\n",
"1 0.0\n",
"2 0.0\n",
"3 0.0\n",
"4 0.0"
]
},
"metadata": {
"tags": []
},
"execution_count": 162
},
{
"output_type": "stream",
"text": [
"time: 28.7 ms (started: 2021-01-09 20:16:05 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "MCf57sxgO53G",
"outputId": "3340d661-bf63-4be2-ebbb-178a25dbdbd7"
},
"source": [
"#outlier dataframe to test model on Unsupervised\r\n",
"X_outliers = Fraud.drop(['Class'], axis=1)\r\n",
"len(X_outliers)"
],
"execution_count": 163,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"385"
]
},
"metadata": {
"tags": []
},
"execution_count": 163
},
{
"output_type": "stream",
"text": [
"time: 3.51 ms (started: 2021-01-09 20:16:05 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ljBwxq_0IbzG",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "39468d77-04c3-422e-c856-8375b10e48af"
},
"source": [
"#Split data into test and train set\r\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .3, random_state = 123)"
],
"execution_count": 164,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 73.8 ms (started: 2021-01-09 20:16:05 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "zpZ4eFNMymnF",
"outputId": "b0247815-791d-48b7-d0fc-a06b7fbd220c"
},
"source": [
"#replace inifinty values in dataframe\r\n",
"X_test= np.nan_to_num(X_test)\r\n",
"y_test = np.nan_to_num(y_test)"
],
"execution_count": 165,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 19 ms (started: 2021-01-09 20:16:06 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "t2L0tJPo3kMD"
},
"source": [
"# **Isolation forest**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "5GdYjfg23diT",
"outputId": "9052fbf0-2330-4fe3-b047-dd62600f90d7"
},
"source": [
"clf = IsolationForest(max_samples=100)\r\n",
"\r\n",
"clf"
],
"execution_count": 166,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"IsolationForest(behaviour='deprecated', bootstrap=False, contamination='auto',\n",
" max_features=1.0, max_samples=100, n_estimators=100,\n",
" n_jobs=None, random_state=None, verbose=0, warm_start=False)"
]
},
"metadata": {
"tags": []
},
"execution_count": 166
},
{
"output_type": "stream",
"text": [
"time: 4.55 ms (started: 2021-01-09 20:16:06 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dBUtJNXcyqJS"
},
"source": [
"**Fit model on data**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "AB9ZVbw6KZ5c",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "0c1d45b9-a9f3-4ba0-c0a6-b1449d718e05"
},
"source": [
"Iso_outliers = clf.fit(X_train)"
],
"execution_count": 167,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 1.56 s (started: 2021-01-09 20:16:06 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yuB7ISf4NEPl"
},
"source": [
"**predictions**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "lss8cFtoMo2W",
"outputId": "5076a81c-6e52-4b11-d3fe-0462684afee6"
},
"source": [
"#Predict on train data\r\n",
"Iso_outliers_train = Iso_outliers.predict(X_train)\r\n",
"Iso_outliers_train"
],
"execution_count": 168,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([1, 1, 1, ..., 1, 1, 1])"
]
},
"metadata": {
"tags": []
},
"execution_count": 168
},
{
"output_type": "stream",
"text": [
"time: 4.59 s (started: 2021-01-09 20:16:07 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "wZLm3lmSMqnQ",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "d5bd23d2-f0f0-4079-e8f6-e72f50f1c4a9"
},
"source": [
"#Predict on test data\r\n",
"Iso_outliers_test = Iso_outliers.predict(X_test)\r\n",
"Iso_outliers_test"
],
"execution_count": 169,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([1, 1, 1, ..., 1, 1, 1])"
]
},
"metadata": {
"tags": []
},
"execution_count": 169
},
{
"output_type": "stream",
"text": [
"time: 1.92 s (started: 2021-01-09 20:16:12 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "XgALb10IpQYr",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "a8d974de-2270-4c05-bc97-4364c2169c28"
},
"source": [
"#Calcuate the decision function on the test data\r\n",
"y_score = - Iso_outliers.decision_function(X_test)"
],
"execution_count": 170,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 1.91 s (started: 2021-01-09 20:16:14 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "LEwSfO3rQMkb",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "64e5a7ee-40ef-4bf8-9f4c-6eaef7fac752"
},
"source": [
"#Predict on outlier data\r\n",
"Iso_outliers_pred = Iso_outliers.predict(X_outliers)"
],
"execution_count": 171,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 61.8 ms (started: 2021-01-09 20:16:16 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Bd96lKYiSOK_"
},
"source": [
"# **Isolation Forest Model Evaulation**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "jJzBYoI6QgDE",
"outputId": "5bebc8fd-59a6-4bf8-9e04-e9ac73d3706f"
},
"source": [
"#isolation Forest\r\n",
"print(\"Accuracy test :\", list(Iso_outliers_test).count(1)/Iso_outliers_test.shape[0])\r\n",
"print(\"Accuracy outliners:\", list(Iso_outliers_pred).count(-1)/Iso_outliers_pred.shape[0])"
],
"execution_count": 172,
"outputs": [
{
"output_type": "stream",
"text": [
"Accuracy test : 0.9391552017055864\n",
"Accuracy outliners: 0.8675324675324675\n",
"time: 26.4 ms (started: 2021-01-09 20:16:16 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "tJWIcgC_mRgd",
"outputId": "837ed0f0-9f9c-4d82-a8f8-c0ee424820f4"
},
"source": [
"print(\"ROC AUC: %0.1f%%\" % (roc_auc_score(y_test, y_score) * 100.))"
],
"execution_count": 173,
"outputs": [
{
"output_type": "stream",
"text": [
"ROC AUC: 94.6%\n",
"time: 28.7 ms (started: 2021-01-09 20:16:16 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "baE4FDt7nLJZ",
"outputId": "d3a12f69-6dbd-4832-ebda-b1b2a774e77e"
},
"source": [
"fp1, tp1, thres1 = roc_curve(y_test, y_score)\r\n",
"plt.plot(fp, tp, label=\"Isolation Forest\")\r\n",
"plt.xlabel(\"false positive rate\")\r\n",
"plt.ylabel(\"true positive rate (recall)\")\r\n",
"plt.legend()"
],
"execution_count": 174,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f9a1a284438>"
]
},
"metadata": {
"tags": []
},
"execution_count": 174
},
{
"output_type": "display_data",
"data": {
"image/png": "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l+SSkwj2VQ3pH7ZIFEoCuakuP7fkJIJ901BnORARkUYmMYmgnPKASG5o3759nc7r27cvmzZtqvaYm2++ucL7r3zlK3W6V2WTJ0+mX79+5Ofnk5+fz4wZMxrkupVt27aN3/3udw12vcQkAs0wISLlKieC1157rcGuPX36dBYtWsSiRYu4+uqrI51TUlJSq3s0dCJITK+hfXlARQKRWvn535aybP2OBr3m4IM78rOvDol07Mcff8x5553Hjh07KCkp4a677mL06NE89NBD3Hzzzbg7Z511Fr/61a/2O3fixImsW7eOoqIipk6dypQpU7j22mvZs2cP+fn5DBkyhAceeID27duza9cu3J0f//jHPPPMM5gZP/3pTznvvPOYM2cO06ZNo1u3bixZsoSjjjqK+++/P1J9fFFREZdffjnz58+nefPm3H777Zx00kncc889PP744+zatYvS0lKefvpprrrqKpYsWUJxcTHTpk1jwoQJLF26lIsvvpi9e/dSVlbGY489xg033MAHH3xAfn4+p512GtOnT6/1zyBVYhJBeZFAjcUiueXBBx/k9NNP5/rrr6e0tJTdu3ezfv16fvKTn7BgwQI6d+7M2LFjefLJJ5k4cWKFc2fNmkWXLl3Ys2cPRx99NF//+te59dZbueOOO1i0aNF+93r88cdZtGgRb7/9Nps2beLoo4/mhBNOAGDhwoUsXbqUgw8+mFGjRvHqq69y/PHH73eNa665hv/4j/8A4L777uP555/HzHjnnXd49913GTt2LO+99x4Ab731FosXL6ZLly78+7//OyeffDKzZs1i27ZtjBw5klNPPZW7776bqVOnMmnSJPbu3UtpaSm33norS5YsSfsMdZGcRBBSY7FI7UT9yz0uRx99NJdccgnFxcVMnDiR/Px8XnzxRcaMGUP37t0BmDRpEnPnzt0vEcyYMYMnnngCgHXr1vH+++/TtWvXKu/1yiuvcMEFF5CXl8eBBx7IiSeeyLx58+jYsSMjR46kd+/eAOTn57N69eq0iWD69Omce+65+97feOONXHXVVQAMHDiQQw89dF8iOO200+jSpQsAzz//PLNnz+bXv/41EJQk1q5dy3HHHccvf/lLCgsL+drXvsaAAQPq9H2sTqxtBGY2zsxWmNlKM7s2zeetzOyR8PM3zaxvXLGoiUAkN51wwgnMnTuXXr16MXny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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"time: 189 ms (started: 2021-01-09 20:16:16 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7_ePtKtFufQf"
},
"source": [
"# **Local Outlier Factor**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Famaqyf7uxNI",
"outputId": "752ef2b8-f7d3-47cb-ae25-191e4d59a910"
},
"source": [
"clf2= LocalOutlierFactor(n_neighbors=20, novelty=True)\r\n",
"clf2"
],
"execution_count": 175,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"LocalOutlierFactor(algorithm='auto', contamination='auto', leaf_size=30,\n",
" metric='minkowski', metric_params=None, n_jobs=None,\n",
" n_neighbors=20, novelty=True, p=2)"
]
},
"metadata": {
"tags": []
},
"execution_count": 175
},
{
"output_type": "stream",
"text": [
"time: 4.57 ms (started: 2021-01-09 20:16:16 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "g4uIoW46ymli"
},
"source": [
"**Fit Model on data**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "xUuLj_N_yg3k",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "eab970fa-4407-42fa-bbd3-9ba9cd5388c7"
},
"source": [
"lof_outliers = clf2.fit(X_train)"
],
"execution_count": 176,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 1min 51s (started: 2021-01-09 20:16:16 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "jbJmcNuazJtf",
"outputId": "22ec02af-5827-40ec-9a15-0e99b700a721"
},
"source": [
"#Predict on train data\r\n",
"lof_outliers_train = lof_outliers.predict(X_train)\r\n",
"lof_outliers_train"
],
"execution_count": 177,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([1, 1, 1, ..., 1, 1, 1])"
]
},
"metadata": {
"tags": []
},
"execution_count": 177
},
{
"output_type": "stream",
"text": [
"time: 1min 47s (started: 2021-01-09 20:18:08 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "HR7jKAOY1Zgl",
"outputId": "bec8e306-3f5b-483d-9c85-d79d9363b979"
},
"source": [
"#Predict on test data\r\n",
"lof_outliers_test = lof_outliers.predict(X_test)\r\n",
"lof_outliers_test"
],
"execution_count": 178,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([1, 1, 1, ..., 1, 1, 1])"
]
},
"metadata": {
"tags": []
},
"execution_count": 178
},
{
"output_type": "stream",
"text": [
"time: 46.2 s (started: 2021-01-09 20:19:55 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "0d3WDNnY1cm4",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "37c49713-809b-4a8e-d679-b6cabaf5bd85"
},
"source": [
"#Calcuate the decision function on the test data\r\n",
"lof_y_score = - lof_outliers.decision_function(X_test)"
],
"execution_count": 179,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 46.5 s (started: 2021-01-09 20:20:42 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "6vmaC4sU1fIu",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "16df39d9-67c6-470d-8e6b-bd2182a1aeb5"
},
"source": [
"#Predict on outlier data\r\n",
"lof_outliers_pred = lof_outliers.predict(X_outliers)"
],
"execution_count": 180,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 314 ms (started: 2021-01-09 20:21:28 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0xmdYMAE7wWw"
},
"source": [
"# **Local Outlier Factor Model Evaulation**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "evIP3D6d6Ts8",
"outputId": "d3610a33-bc34-42e4-afbe-56b21dc1ad1a"
},
"source": [
"print(\"ROC AUC: %0.1f%%\" % (roc_auc_score(y_test, lof_y_score) * 100.))"
],
"execution_count": 181,
"outputs": [
{
"output_type": "stream",
"text": [
"ROC AUC: 68.4%\n",
"time: 24.5 ms (started: 2021-01-09 20:21:28 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "4J4s2ivy6e5o",
"outputId": "8d3c7816-1f7f-4b08-81ab-172745b4ec44"
},
"source": [
"#LOF\r\n",
"print(\"Accuracy test :\", list(lof_outliers_test).count(1)/lof_outliers_test.shape[0])\r\n",
"print(\"Accuracy outliners:\", list(lof_outliers_pred).count(-1)/lof_outliers_pred.shape[0])"
],
"execution_count": 182,
"outputs": [
{
"output_type": "stream",
"text": [
"Accuracy test : 0.9580932076351644\n",
"Accuracy outliners: 0.36623376623376624\n",
"time: 17.4 ms (started: 2021-01-09 20:21:28 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "Yh7z3mnz6y2h",
"outputId": "f8424c63-8009-4824-b5c9-f86ebd011ab5"
},
"source": [
"fp2, tp2, thres2 = roc_curve(y_test, lof_y_score)\r\n",
"plt.plot(fp, tp, label=\"Local Outlier Factor\")\r\n",
"plt.xlabel(\"false positive rate\")\r\n",
"plt.ylabel(\"true positive rate (recall)\")\r\n",
"plt.legend()"
],
"execution_count": 183,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f9a1cab2668>"
]
},
"metadata": {
"tags": []
},
"execution_count": 183
},
{
"output_type": "display_data",
"data": {
"image/png": "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Gl06zJxEUF01pP8s0vYoCUiVpvxbyJxEUD0NdZoDERFpYTImEVRRHhBpfl26dEn5tQsKChg/fjxDhgxh8ODBXHPNNezevbvB6/3yl79Mev2NGzdy3nnn7VWseXl5HH744YwYMYIRI0bw2muvNer8uXPnNvqc5pAxiUAzTIi0He7Oueeey9lnn83q1at57733+Oyzz7jhhhsaPLd2Iqiy//778+STT0aOoby8POn+OXPmsGTJEpYsWcKxxx4b+XrQtERQVxyNkTG9hqrzgIoE0obd/NflrNi4vVmvOWz/bvz8rEMbfd6SJUuYMmUKJSUlDB48mJkzZ9KjRw/WrFnDlClTKCwsJCsriyeeeIL99tuP8ePHs23bNsrKyvjP//xPxo8fX+e1//nPf5KTk8Mll1wCQFZWFr/73e8YNGgQN998M48//jgLFy7kjjvuAODMM8/k2muv5fnnn2fnzp2MGDGCQw89lIcffrj6muvWrePMM89k2bJlVFRUMHXqVObOncuuXbu48sorueKKK5g7dy4/+9nP6NGjB++++y7vvfdeg9+Hs88+m/Xr11NaWso111zD5MmTAXj++ef5yU9+QkVFBb179+aee+7h7rvvJisri4ceeojp06czYMAALr30UjZv3kxubi733nsvAwcOZNKkSeTk5LB48WLGjBnD7bff3uifT6KMSQRVRQI1Foukxre+9S2mT5/OCSecwI033sjNN9/M73//eyZMmMDUqVM555xzKC0tpbKykuzsbGbNmkW3bt3YvHkzo0ePZty4cXU2fC5fvpyjjjqqxr5u3boxcOBA1qxZU2dMv/rVr7jjjjtYsmRJvbHfc889dO/enQULFrBr1y7GjBnDqaeeCsBbb73FsmXL6uyeedJJJ5GVlUXHjh154403mDlzJj179mTnzp0cffTRfO1rX6OyspLLL7+cefPmMWjQILZu3UrPnj2ZMmUKXbp04dprrwXgrLPOYuLEiUycOJGZM2dy9dVX8/TTTwNB1dhrr71GVlZWvc8SReYkgpAai6Uta8pf7nEoKiri008/5YQTTgBg4sSJnH/++RQXF7NhwwbOOeccIBj8BMGguJ/85CfMmzePdu3asWHDBj7++GP69u2blvhffPFFli5dWl1VVFRUxOrVq8nOzmbUqFH19tGfM2cOvXv3rn4/bdo0Zs2aBcD69etZvXo1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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"time: 197 ms (started: 2021-01-09 20:21:28 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MbxrM2aJ9Pwj"
},
"source": [
"# **One Class SVM**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "p4WQNU_bSkEH",
"outputId": "85a33ef6-1a35-4262-8503-3776ac3a7749"
},
"source": [
"\r\n",
"clf3 = OneClassSVM(nu=.2,kernel='linear',gamma=.001)\r\n",
"clf3"
],
"execution_count": 184,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"OneClassSVM(cache_size=200, coef0=0.0, degree=3, gamma=0.001, kernel='linear',\n",
" max_iter=-1, nu=0.2, shrinking=True, tol=0.001, verbose=False)"
]
},
"metadata": {
"tags": []
},
"execution_count": 184
},
{
"output_type": "stream",
"text": [
"time: 4.58 ms (started: 2021-01-09 20:21:29 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "WK-kKEAzC1Sx",
"outputId": "55cbb935-c39c-4562-e9aa-5f6a063e76f7"
},
"source": [
"#Fit Model on train data\r\n",
"OneClassSVM = clf3.fit(X_train)"
],
"execution_count": 185,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 6min 57s (started: 2021-01-09 20:21:29 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "p883rhptC4et",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "6b0c03cd-cc7e-429f-c240-c49ac9ef1664"
},
"source": [
"#Predict on train data\r\n",
"OneClassSVM_train = OneClassSVM.predict(X_train)\r\n",
"OneClassSVM_train"
],
"execution_count": 186,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([1, 1, 1, ..., 1, 1, 1])"
]
},
"metadata": {
"tags": []
},
"execution_count": 186
},
{
"output_type": "stream",
"text": [
"time: 1min 55s (started: 2021-01-09 20:28:26 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "90vgzVhOC68z",
"outputId": "5b32daf7-babe-4f47-d26a-1ccbf919bb2d"
},
"source": [
"#Predict on test data\r\n",
"OneClassSVM_test = OneClassSVM.predict(X_test)\r\n",
"OneClassSVM_test"
],
"execution_count": 187,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([-1, 1, 1, ..., 1, 1, 1])"
]
},
"metadata": {
"tags": []
},
"execution_count": 187
},
{
"output_type": "stream",
"text": [
"time: 49.1 s (started: 2021-01-09 20:30:21 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "EEOT6r98C9NV",
"outputId": "56a9eaf1-957c-4d7a-f11b-111ae1dee7b4"
},
"source": [
"#Calcuate the decision function on the test data\r\n",
"OneClassSVM_y_score = - OneClassSVM.decision_function(X_test)"
],
"execution_count": 188,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 49.1 s (started: 2021-01-09 20:31:10 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "XWFTBPDlDArg",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e6e078c3-25e5-4d7d-a826-9e673cafcd1a"
},
"source": [
"#Predict on outlier data\r\n",
"OneClassSVM_pred = OneClassSVM.predict(X_outliers)"
],
"execution_count": 189,
"outputs": [
{
"output_type": "stream",
"text": [
"time: 332 ms (started: 2021-01-09 20:31:59 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_WyvSfoRDEGJ"
},
"source": [
"# **One Class SVM Evaluation**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "BteiAY6bBiNU",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "af93a183-921c-409d-8a2b-77d72d684e2b"
},
"source": [
"print(\"ROC AUC: %0.1f%%\" % (roc_auc_score(y_test, OneClassSVM_y_score) * 100.))"
],
"execution_count": 190,
"outputs": [
{
"output_type": "stream",
"text": [
"ROC AUC: 49.9%\n",
"time: 24.9 ms (started: 2021-01-09 20:32:00 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "bXjuTnf6cEqs",
"outputId": "41641167-05ee-4f33-f950-6cf614b2dc5e"
},
"source": [
"print(\"Accuracy test :\", list(OneClassSVM_test).count(1)/OneClassSVM_test.shape[0])\r\n",
"print(\"Accuracy outliners:\", list(OneClassSVM_pred).count(-1)/OneClassSVM_pred.shape[0])"
],
"execution_count": 191,
"outputs": [
{
"output_type": "stream",
"text": [
"Accuracy test : 0.8005429894400213\n",
"Accuracy outliners: 0.3116883116883117\n",
"time: 21.2 ms (started: 2021-01-09 20:32:00 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 313
},
"id": "qaT7VJVxgI3V",
"outputId": "6f5cdf9a-6a8a-4266-f5e6-38384222e85b"
},
"source": [
"fp3, tp3, thres3 = roc_curve(y_test, OneClassSVM_y_score)\r\n",
"plt.plot(fp, tp, label=\"One Class SVM\")\r\n",
"plt.xlabel(\"false positive rate\")\r\n",
"plt.ylabel(\"true positive rate (recall)\")\r\n",
"plt.legend()"
],
"execution_count": 192,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f9a1c8a3860>"
]
},
"metadata": {
"tags": []
},
"execution_count": 192
},
{
"output_type": "display_data",
"data": {
"image/png": "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l+IyJxFUVQ3pP2qRqJQE0k9TfmaZkwiqpqFOcSAiIi1MxiSCSsoDIumjqKiI8ePHk5eXx4ABA7j22mvZs2dPs93/nnvuYeDAgQwdOpTjjz+exx57DIARI0Ywe/bsZntOpYqKCq655hoGDx7M0UcfzfHHH8+KFSu49NJLeeihh6qd+/TTTzN69Ggg+Cv/oosuqjpWVlZGbm4uY8eObZa4MiYRaIYJkfTi7px33nmcc845fPrpp3zyySds376dm2++uVnu/+CDD/Lyyy/zwQcfMG/ePF599dXYp6KZNm0aa9eupbCwkI8++oinnnqKbt26MXHiRKZOnVrt3KlTpzJx4kQAOnbsyIIFC9i1axcAL7/8Mr169Wq2uDKm11DVj1dFApFGu/2ZhSxau61Z7znokC7cevZRdR5/7bXXyMnJ4dJLLwUgKyuL++67j379+nH77bczffp0CgoK2LlzJ8uWLePcc8/lrrvuAuCll17i1ltvZffu3QwYMIA//vGPdOrUqdr977jjDt544w26dOkCQJcuXbjkkkv2iuPKK69k1qxZ7Nq1iwkTJnD77bcDcOONN1JQUEB2djZnnnkm99xzDzNmzOD2228nKyuLrl278tZbb1W717p16zj44INp0yb4G7x3794AjBw5kksuuaTq+I4dO3jllVeYMmVK1bVjxozhueeeY8KECTzxxBNMnDiRf/zjH436ntclY0oElUUCNRaLpIeFCxdy3HHHVdvXpUsX+vTpw9KlSwGYN28e06ZN46OPPmLatGmsXr2aL774gl/96le88sorfPjhh+Tn53PvvfdWu8+2bdsoLi6mf//+Dcbx61//mtmzZ1NYWMibb75JYWEhmzZt4qmnnmLhwoUUFhbyi1/8AoDJkyczc+ZM5s+fT0FBwV73Ov/883nmmWcYOnQo1113HXPnzgWCJPed73yH6dOnA/DMM88wYsSIqiQFcMEFFzB16lRKSkooLCzkxBNPbMR3s34ZUyKopMZikcar7y/3VBo5ciRdu3YFYNCgQaxatYovv/ySRYsWMXz4cAD27NnDySef3ORnTJ8+nSlTplBWVsa6detYtGgRgwYNIicnh8svv5yxY8dW1dUPHz6cSZMmcf7553Peeeftda/evXuzZMkSXnvtNV577TVGjhzJjBkzGDlyJBMnTuT666/n2muvZerUqVx88cXVrh0yZAgrV67kiSeeYMyYMU1+n9rEWiIws1FmtsTMlprZjbUcb29m08Lj75tZ37hiUROBSHoZNGgQc+bMqbZv27ZtfPbZZxx++OEAtG/fvupYVlYWZWVluDvf+ta3mDdvHvPmzWPRokU8/PDD1e7TpUsXOnXqxPLly+uNYcWKFdxzzz28+uqrFBYWctZZZ1FSUkJ2djYffPABEyZM4Nlnn2XUqFFA0O7wq1/9itWrV3PcccexadOmve7Zvn17Ro8ezd13382///u/8/TTTwNwyimnsG7dOubPn88777zDWWedtde148aN4/rrr69qO2gusSUCM8sCHgBGA4OAiWY2qMZplwNb3P1w4D7gN3HFoykmRNLLyJEj2blzZ1VPnvLycq677jomTZpEhw4d6rzupJNO4u23366qPtqxYweffPLJXufddNNNXHXVVWzbFrR9bN++vepZlbZt20bHjh3p2rUrn3/+OS+88ELVuVu3bmXMmDHcd999zJ8/H4Bly5Zx4oknMnnyZHJzc1m9enW1+3344YesXbsWCHoQFRYWcthhhwFBz6Dvfe97XHLJJYwePZqcnJy9Yr7sssu49dZbOfrooxv+BjZCnCWCE4Cl7r7c3fcAU4HxNc4ZD/wp3P4bMNJiGsHyzrIvAA2QEUkXZsZTTz3FjBkzyMvL44gjjiAnJ4c77rij3utyc3N59NFHmThxIkOGDOHkk0/m448/3uu8K6+8ktNPP53jjz+ewYMHc9ppp1U14lY65phjGDZsGAMHDuTCCy+sqm4qLi5m7NixDBkyhFNPPbWqDeKGG27g6KOPZvDgwZxyyikcc8wx1e63YcMGzj77bAYPHsyQIUPIzs7m6quvrjo+ceJE5s+fX+df/L179+aaa65p+JvXSBZXdykzmwCMcvcfhJ8vBk5096sTzlkQnlMUfl4WnvNFjXtdAVwB0KdPn+NWrVrV6HheWrie91ds5hdnHalkIBLB4sWLOfLII1MdhjRBbT87M5vj7vm1nZ8WjcXuPgWYApCfn9+kzHXmUQdx5lEHNWtcIiKtQZxVQ2uAQxM+9w731XqOmWUDXYG9W1dERCQ2cSaCWUCemfUzs3bABUDNjrUFQOUIjgnAa65V5kVaDP3vmH6a8jOLLRG4exlwNTATWAxMd/eFZjbZzMaFpz0MdDezpcDPgb26mIpIauTk5LBp0yYlgzRSuR5BbT2O6hNbY3Fc8vPzPY7JoESkOq1Qlp7qWqEs7RuLRST52rZt26hVriR9Zc5cQyIiUislAhGRDKdEICKS4dKusdjMNgKNH1oc6AF80eBZrYveOTPonTPDvrzzYe6eW9uBtEsE+8LMZtfVat5a6Z0zg945M8T1zqoaEhHJcEoEIiIZLtMSwZSGT2l19M6ZQe+cGWJ554xqIxARkb1lWolARERqUCIQEclwrTIRmNkoM1tiZkvNbK8ZTc2svZlNC4+/b2Z9kx9l84rwzj83s0VmVmhmr5rZYamIszk19M4J533HzNzM0r6rYZR3NiPO5xMAAAb9SURBVLPzw5/1QjN7PNkxNrcI/233MbPXzWxu+N/3mFTE2VzM7BEz2xCu4FjbcTOz+8PvR6GZHbvPD3X3VvUFZAHLgP5AO2A+MKjGOT8GHgy3LwCmpTruJLzz6UCHcPvKTHjn8LzOwFvAe0B+quNOws85D5gL7B9+7pnquJPwzlOAK8PtQcDKVMe9j+/8deBYYEEdx8cALwAGnAS8v6/PbI0lghOApe6+3N33AFOB8TXOGQ/8Kdz+GzDS0nsh4wbf2d1fd/ed4cf3CFaMS2dRfs4AvwR+A7SGuZSjvPMPgQfcfQuAu29IcozNLco7O9Al3O4KrE1ifM3O3d8CNtdzynjgMQ+8B3Qzs4P35ZmtMRH0AlYnfC4K99V6jgcL6GwFuiclunhEeedElxP8RZHOGnznsMh8qLs/l8zAYhTl53wEcISZvW1m75nZqKRFF48o73wbcJGZFQHPAz9JTmgp09j/3xuk9QgyjJldBOQD30h1LHEyszbAvcCkFIeSbNkE1UMjCEp9b5nZ0e7+ZUqjitdE4FF3/62ZnQz82cwGu3tFqgNLF62xRLAGODThc+9wX63nmFk2QXFyU1Kii0eUd8bMzgBuBsa5++4kxRaXht65MzAYeMPMVhLUpRakeYNxlJ9zEVDg7qXuvgL4hCAxpKso73w5MB3A3d8FcggmZ2utIv3/3hitMRHMAvLMrJ+ZtSNoDC6ocU4BcEm4PQF4zcNWmDTV4Dub2TDgIYIkkO71xtDAO7v7Vnfv4e593b0vQbvIOHdP53VOo/y3/TRBaQAz60FQVbQ8mUE2syjv/BkwEsDMjiRIBBuTGmVyFQD/EvYeOgnY6u7r9uWGra5qyN3LzOxqYCZBj4NH3H2hmU0GZrt7AfAwQfFxKUGjzAWpi3jfRXznu4FOwIywXfwzdx+XsqD3UcR3blUivvNM4EwzWwSUAze4e9qWdiO+83XAH8zsZwQNx5PS+Q87M3uCIJn3CNs9bgXaArj7gwTtIGOApcBO4NJ9fmYaf79ERKQZtMaqIRERaQQlAhGRDKdEICKS4ZQIREQynBKBiEiGUyKQFs3MrjGzxWb213rOGWFmzyYzrrqY2bjKGTLN7BwzG5RwbHI4qC9ZsYwws1OS9TxJX61uHIG0Oj8GznD3olQHEkXYr71yDMM5wLPAovDYLc39PDPLDufLqs0IYDvwTnM/V1oXlQikxTKzBwmmH37BzH5mZieY2bvhvPPvmNnXarnmG2Y2L/yaa2adw/03mNmscP722+t43nYzuy+cx/9VM8sN9w8NJ3ArNLOnzGz/cP819tUaD1PDfZPM7HfhX+LjgLvDWAaY2aNmNiGcX39GwnOrSjRmdmb4jh+a2Qwz61RLnG+Y2X+a2WzgWjM724J1Neaa2StmdqAFa2z8CPhZ+PzTzCzXzP43/D7MMrPh+/DjkdYk1XNv60tf9X0BK4Ee4XYXIDvcPgP433B7BPBsuP0MMDzc7kRQ6j2TYM56I/jj51ng67U8y4Hvh9u3AL8LtwuBb4Tbk4H/DLfXAu3D7W7hv5MSrnsUmJBw/0cJpjTJJpgWoWO4//fARQTz47yVsP/fgFtqifMN4L8TPu/PV4NDfwD8Nty+Dbg+4bzHgVPD7T7A4lT/fPXVMr5UNSTppCvwJzPLI/il3baWc94G7g3bFJ509yIzO5MgGcwNz+lEMBHbWzWurQCmhdt/AZ40s64Ev+TfDPf/Caj8a74Q+KuZPU0wx08kHkyb8CJwtpn9DTgL+FeCGWEHAW+H04C0A96t4zbTErZ7A9MsmJO+HbCijmvOAAbZV0tvdDGzTu6+PWrs0jopEUg6+SXwurufG1Z9vFHzBHf/v2b2HMFcLG+b2bcJSgJ3uvtDjXxeQ/OvnEWwmtTZwM1mdnQj7j0VuJpgrqvZ7l5swW/ol919YoTrdyRs/xdwr7sXmNkIgpJAbdoAJ7l7a1ikR5qR2ggknXTlq+l2J9V2gpkNcPeP3P03BDNXDiSYsOyyyvp2M+tlZj1rubwNQdUNwIXAP919K7DFzE4L918MvGnBegeHuvvrBFU4XQlKGomKCabDrs2bBMsR/pAgKUAwQ+pwMzs8jLOjmR1Rx/WJEr8vlyTsr/n8l0hYtMXMhka4t2QAJQJJJ3cBd5rZXOouzf7UzBaYWSFQCrzg7i8R1I+/a2YfESxPWtsv6B3ACRYsGv5NgvYACH653h3ec2i4Pwv4S3i/ucD9vvfiL1OBG8JG3AGJB9y9nKCtYnT4L+6+kSDBPRE+612CRNaQ2whmlZ0DfJGw/xng3MrGYuAaID9s3F5E0JgsotlHRSqZ2XZ336uXjkhrpxKBiEiGU4lARCTDqUQgIpLhlAhERDKcEoGISIZTIhARyXBKBCIiGe7/A0zr1k3PxvT8AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"time: 188 ms (started: 2021-01-09 20:32:00 +00:00)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3PgKgSY5r3FE"
},
"source": [
"# **Plot 3 ROC Curves together**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 312
},
"id": "6RmXDg7Or2R1",
"outputId": "90598b0d-74bf-4e3e-8613-f4a5372d3db8"
},
"source": [
"plt.plot([0,1],[0,1], 'k--')\r\n",
"plt.plot(fp1, tp1, label= \"Isolation Forest\")\r\n",
"plt.plot(fp2, tp2, label= \"Local Outlier Factor\")\r\n",
"plt.plot(fp3, tp3, label= \"One-Class SVM\")\r\n",
"plt.legend()\r\n",
"plt.xlabel(\"FPR\")\r\n",
"plt.ylabel(\"TPR\")\r\n",
"plt.title('ROC Curve')\r\n",
"plt.show()"
],
"execution_count": 193,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"time: 179 ms (started: 2021-01-09 20:32:00 +00:00)\n"
],
"name": "stdout"
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment