Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
{
"cells": [
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import seaborn as sns\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv(r'D:Fiverr/Firasal_Task/data.csv')"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"(149757, 21)"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['cc_num', 'merchant', 'category', 'amt', 'first', 'last', 'gender',\n",
" 'street', 'city', 'state', 'zip', 'lat', 'long', 'city_pop', 'job',\n",
" 'dob', 'trans_num', 'unix_time', 'merch_lat', 'merch_long', 'is_fraud'],\n",
" dtype='object')"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"cc_num float64\n",
"merchant category\n",
"category category\n",
"amt float64\n",
"first object\n",
"last object\n",
"gender category\n",
"street object\n",
"city object\n",
"state category\n",
"zip int64\n",
"lat float64\n",
"long float64\n",
"city_pop int64\n",
"job category\n",
"dob object\n",
"trans_num object\n",
"unix_time int64\n",
"merch_lat float64\n",
"merch_long float64\n",
"is_fraud int64\n",
"dtype: object"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['state'] = df['state'].astype('category')\n",
"df['merchant'] = df['merchant'].astype('category')\n",
"df['category'] = df['category'].astype('category')\n",
"df['gender'] = df['gender'].astype('category')\n",
"df['job'] = df['job'].astype('category')\n",
"df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"df['state'] = df['state'].cat.codes\n",
"df['merchant'] = df['merchant'].cat.codes\n",
"df['category'] = df['category'].cat.codes\n",
"df['gender'] = df['gender'].cat.codes\n",
"df['job'] = df['job'].cat.codes"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().values.any()"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [],
"source": [
"columns = ['merchant', 'category', 'amt', 'gender', 'state', 'city_pop', 'job', 'is_fraud']"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [],
"source": [
"train_df = pd.DataFrame(df, columns= columns)"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [],
"source": [
"#train_df.to_csv(r'D:Fiverr/Firasal_Task/train_df.csv')"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [],
"source": [
"correlation = train_df.corr()"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>merchant</th>\n",
" <th>category</th>\n",
" <th>amt</th>\n",
" <th>gender</th>\n",
" <th>state</th>\n",
" <th>city_pop</th>\n",
" <th>job</th>\n",
" <th>is_fraud</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>510</td>\n",
" <td>11</td>\n",
" <td>1160.47</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>386</td>\n",
" <td>11</td>\n",
" <td>985.49</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>575</td>\n",
" <td>12</td>\n",
" <td>713.24</td>\n",
" <td>1</td>\n",
" <td>17</td>\n",
" <td>1565</td>\n",
" <td>124</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>379</td>\n",
" <td>8</td>\n",
" <td>978.91</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>648</td>\n",
" <td>1</td>\n",
" <td>103.90</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>560</td>\n",
" <td>8</td>\n",
" <td>799.11</td>\n",
" <td>1</td>\n",
" <td>17</td>\n",
" <td>1565</td>\n",
" <td>124</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>510</td>\n",
" <td>11</td>\n",
" <td>890.87</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>539</td>\n",
" <td>3</td>\n",
" <td>11.28</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>272</td>\n",
" <td>2</td>\n",
" <td>9.07</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>545</td>\n",
" <td>12</td>\n",
" <td>829.05</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>10</td>\n",
" <td>52</td>\n",
" <td>8</td>\n",
" <td>733.51</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>11</td>\n",
" <td>487</td>\n",
" <td>11</td>\n",
" <td>860.53</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>12</td>\n",
" <td>6</td>\n",
" <td>11</td>\n",
" <td>927.78</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>13</td>\n",
" <td>36</td>\n",
" <td>8</td>\n",
" <td>859.70</td>\n",
" <td>1</td>\n",
" <td>43</td>\n",
" <td>47119</td>\n",
" <td>141</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>14</td>\n",
" <td>563</td>\n",
" <td>4</td>\n",
" <td>264.87</td>\n",
" <td>1</td>\n",
" <td>9</td>\n",
" <td>79008</td>\n",
" <td>381</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" merchant category amt gender state city_pop job is_fraud\n",
"0 510 11 1160.47 1 43 47119 141 1\n",
"1 386 11 985.49 1 43 47119 141 1\n",
"2 575 12 713.24 1 17 1565 124 1\n",
"3 379 8 978.91 1 43 47119 141 1\n",
"4 648 1 103.90 1 43 47119 141 1\n",
"5 560 8 799.11 1 17 1565 124 1\n",
"6 510 11 890.87 1 43 47119 141 1\n",
"7 539 3 11.28 1 43 47119 141 1\n",
"8 272 2 9.07 1 43 47119 141 1\n",
"9 545 12 829.05 1 43 47119 141 1\n",
"10 52 8 733.51 1 43 47119 141 1\n",
"11 487 11 860.53 1 43 47119 141 1\n",
"12 6 11 927.78 1 43 47119 141 1\n",
"13 36 8 859.70 1 43 47119 141 1\n",
"14 563 4 264.87 1 9 79008 381 1"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.head(15)"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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e2lx83qraCtrymXS+GbjVhYEomgLBt4q2qRs0Hat/Anmoi117x6ffCQrX3BhUObsycBtLWvtJ8BJAGvtCSDTJ1GJiIiISC6eXHs01RhTE/cPLWPM1UCyT6ISERERKUYwn57DFzwp2h4E5gNRxph1QG3gJp9EJSIiIlKcID5owBdKXLRZa7cYY1oBMYABHNbaDJ9FJiIiIiLZii3ajDE3FvJQtDEGa+1sL8ckIiIiUiwTxOdU84WS9LRlnSznbFwn2F3uvt8GWAmoaBMRERHxsWKLNmvtvQDGmIXAJdba3933zwXG+DY8ERERkYIF84lwfcGTAxEuyirY3PYD0V6OR0RERKRkNDxaqJXGmM+Bj3Cd9uM2YIVPohIRERGRXDw5enSQ+6CEa92Txltr5/gmLBEREZGiaXi0CO4jRXXggYiIiIiflbhoc/eyjcZ1FKlx36y1tpqPU09uZgAAIABJREFUYhMREREplE75UbiXgM7W2p98FYyIiIiIFMyTom2/CjYREREJGkb7tBVmszHmY2AucDxroq6IICIiIoFgVLQVqhrgBK7LMc2iAxNEREREfM6TU37c68tARERERDwSUr4ORChxtsaYaGPMl8aY7933LzPGPOW70EREREQkiycl6vvAf4AMAGvtt7iuiiAiIiLif8b45hakPNmnLcJauzHPTn8nvByPiIiISAkFb4HlC570tP1pjInCdfABxpibgN+LnkVEREREvMGTnraBwHjgYmPMb8BO4E6fRCUiIiJSnPLV0eZRT1tXYDHwPDAO16k+Yo0xV/giMBEREZFgZYzpYIxxGGO2G2MeL+DxSsaYj92Pf2WMuai0r+lJ0dYY6AecCdQA+gKtgfeNMY+WNhARERERjwToQARjTCgwBugIXALcboy5JE+zXsBha2094HVc128vFU+KtprAldbah621D+Eq4moDLYF7ShuIiIiISBnRFNhurd1hrU0HZgA35GlzAzDF/fenQDtTyks4eLJP2z+A9Bz3M4A61to0Y8zxQuYp14zrmI3yJ4gPl/albsu/CHQIATGn7XXFN/obKq/vt8kspycNCA0NdAQSXM4H9uS4vxe4qrA21toTxphkXB1gf57ui3pStH0IbDDGzHPf7wx8ZIypDPx4ugGIiIiInB7fdBIYY/ri2g0sy3hr7fhiXjhvT01J2njEk8tYjTDGLAau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CLgNuNEatVFE2htjtpU2nzbalFJKKeWX3PXID6uBNq+U6RElTRORH0TkequX7XrglJNifYFdxpjz1jzrgbuAUhttek2bUkoppZTrrAOGWK+HAGudlDkGdBCRqiJSDcdNCGWeHtVGm1JKKaX8Uq4xbhmu0ItApIgcAiKt94hICxGJscqsANKA/cDnwOfGmLiyFqynR5VSSinll3zxFxGMMT8BXZyM3wsMt17nAA9WdNna06aUUkop5Qe0p00ppZRSfskXe9rcSXvalFJKKaX8gPa0KaWUUsovaU+bUkoppZTyOdrTppRSSim/5KM/Y+U2Hmq0iWc+xtfkXPR2BF5xbNMGb4fgFTd3vdvbIXhHlSrejsArqnk7AC/pu+UDKusxfXXnrt4OwSsG7Nrh7RBKpKdHlVJKqRJpg00pb9HTo0oppZTyS9rTppRSSimlfI72tCmllFLKL1W2njZttCmllFLKL+XmejsCz9LTo0oppZRSfkB72pRSSinllyrb6VHtaVNKKaWU8gPa06aUUkopv1TZetq00aaUUkopv1TZGm16elQppZRSyg9oT5tSSiml/FKO9rQppZRSSilfoz1tSimllPJLek2bUkoppZTyOdrTppRSSim/VNl62rTRppRSSim/VNkabXp6VCmllFLKD2hPm1JKKaX8kj7yQymllFJK+RztaVNKKaWUX6ps17Rpo00ppZRSfklPjyqllFJKKZ+jPW1KKaWU8kuV7fSo9rQppZRSSvkB7WlTSimllF/Sa9p82DuLFtEhIoK72rVj4uTJZGdnl1h21+7d9OzblxatW/PXESM4ceJE/rTs7GwmTp5Mq/BwOkREELtwYf60z7/4guGjRtGmQwfaderEY088wenTp92aV3mlp6czbvwTtAxvR2R0TxLef99pOWMMr77+H9p2iaBtlwhemfE6xhTfstfGx9OsRUtWrFnj7tBd6he7nanvLKLv05MZ8uK/+HDf56WWv3DxIiNf+TeDp033UISukZ6ezrjHH6dlm7ZERvUgYf16p+WMMbw643XadupM206deeW1Gfn1/e3Ro4x99DHade5Cm46dGDl6DEe+/daDWZQtPT2dcY89TsvWbYjsHlVGnjNo27ETbTt24pXXXiu0XX+dksKAgQNp0boNAwYO5OuUlPxp82Nj6dP/Xu5sG063HtHMj411e17l4YncFy5e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\n",
"text/plain": [
"<Figure size 1008x576 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize= (14, 8))\n",
"sns.heatmap(correlation, annot = True, cmap = 'vlag', annot_kws={'size':12}, square= True, fmt = '.1g', vmin= -1, vmax=1)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Random Forest"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn import ensemble, metrics\n",
"from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [],
"source": [
"X = train_df.iloc[:, 0:7]\n",
"y = train_df.iloc[:, 7:8]"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 144056\n",
"1 5701\n",
"Name: is_fraud, dtype: int64"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y['is_fraud'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [],
"source": [
"params = {'n_estimators': 1000, 'max_depth': 4, \"min_samples_split\": 5, 'learning_rate': 0.01}"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [],
"source": [
"gb = ensemble.GradientBoostingClassifier(**params)"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" return f(*args, **kwargs)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 4min 51s\n"
]
},
{
"data": {
"text/plain": [
"GradientBoostingClassifier(learning_rate=0.01, max_depth=4, min_samples_split=5,\n",
" n_estimators=1000)"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"gb.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 555 ms\n"
]
}
],
"source": [
"%%time\n",
"y_pred = gb.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy : 0.979\n",
"F1-Score : 0.699\n",
"Precision : 0.777\n",
"Recall : 0.636\n"
]
}
],
"source": [
"print('Accuracy : ', round(metrics.accuracy_score(y_test, y_pred), 3))\n",
"print('F1-Score : ', round(metrics.f1_score(y_test, y_pred), 3))\n",
"print('Precision : ', round(metrics.precision_score(y_test, y_pred), 3))\n",
"print('Recall : ', round(metrics.recall_score(y_test, y_pred), 3))"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Confusion matrix : \n",
" [[ 719 412]\n",
" [ 206 28615]]\n"
]
}
],
"source": [
"matrix = confusion_matrix(y_test,y_pred, labels=[1,0])\n",
"print('Confusion matrix : \\n',matrix)"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" TP: 719 \n",
" FN: 412 \n",
" FP: 206 \n",
" TN: 28615\n"
]
}
],
"source": [
"tp, fn, fp, tn = confusion_matrix(y_test, y_pred, labels=[1,0]).reshape(-1)\n",
"print(' TP:', tp, '\\n', 'FN:', fn, '\\n', 'FP:', fp, '\\n', 'TN:', tn)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"SMOTE"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [],
"source": [
"smote = SMOTE(sampling_strategy='not majority')\n",
"X_sm, y_sm = smote.fit_resample(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 144056\n",
"0 144056\n",
"Name: is_fraud, dtype: int64"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_sm['is_fraud'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X_sm, y_sm, test_size = 0.2)"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [],
"source": [
"params = {'n_estimators': 1000, 'max_depth': 4, \"min_samples_split\": 5, 'learning_rate': 0.01}"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 0 ns\n"
]
}
],
"source": [
"%%time\n",
"gb = ensemble.GradientBoostingClassifier(**params)"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" return f(*args, **kwargs)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 16min 45s\n"
]
},
{
"data": {
"text/plain": [
"GradientBoostingClassifier(learning_rate=0.01, max_depth=4, min_samples_split=5,\n",
" n_estimators=1000)"
]
},
"execution_count": 123,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"gb.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 2.42 s\n"
]
}
],
"source": [
"%%time\n",
"y_pred = gb.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy : 0.856\n",
"F1-Score : 0.842\n",
"Precision : 0.924\n",
"Recall : 0.774\n"
]
}
],
"source": [
"print('Accuracy : ', round(metrics.accuracy_score(y_test, y_pred), 3))\n",
"print('F1-Score : ', round(metrics.f1_score(y_test, y_pred), 3))\n",
"print('Precision : ', round(metrics.precision_score(y_test, y_pred), 3))\n",
"print('Recall : ', round(metrics.recall_score(y_test, y_pred), 3))"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Confusion matrix : \n",
" [[22252 6492]\n",
" [ 1831 27048]]\n"
]
}
],
"source": [
"matrix = confusion_matrix(y_test,y_pred, labels=[1,0])\n",
"print('Confusion matrix : \\n',matrix)"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" TP: 22252 \n",
" FN: 6492 \n",
" FP: 1831 \n",
" TN: 27048\n"
]
}
],
"source": [
"tp, fn, fp, tn = confusion_matrix(y_test, y_pred, labels=[1,0]).reshape(-1)\n",
"print(' TP:', tp, '\\n', 'FN:', fn, '\\n', 'FP:', fp, '\\n', 'TN:', tn)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}