Skip to content

Instantly share code, notes, and snippets.

@dienhoa
Created January 1, 2022 23:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dienhoa/582d8ee5a21d7697b57eaad140aeeb37 to your computer and use it in GitHub Desktop.
Save dienhoa/582d8ee5a21d7697b57eaad140aeeb37 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "18275f4e",
"metadata": {},
"outputs": [],
"source": [
"from fastai.tabular.all import *\n",
"from collections import Counter\n",
"import pandas as pd\n",
"from itertools import count\n",
"import xgboost\n",
"from sklearn import model_selection\n",
"from sklearn.metrics import accuracy_score, roc_auc_score\n",
"from sklearn.preprocessing import LabelEncoder\n",
"from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from imblearn.ensemble import BalancedRandomForestClassifier, EasyEnsembleClassifier\n",
"\n",
"from sklearn.metrics import roc_auc_score, roc_curve"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "160cf4f2",
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('/home/hoa/Datasets/fraud_data.csv')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "baa09ad8",
"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>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>...</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.176563</td>\n",
" <td>0.323798</td>\n",
" <td>0.536927</td>\n",
" <td>1.047002</td>\n",
" <td>-0.368652</td>\n",
" <td>-0.728586</td>\n",
" <td>0.084678</td>\n",
" <td>-0.069246</td>\n",
" <td>-0.266389</td>\n",
" <td>0.155315</td>\n",
" <td>...</td>\n",
" <td>-0.109627</td>\n",
" <td>-0.341365</td>\n",
" <td>0.057845</td>\n",
" <td>0.499180</td>\n",
" <td>0.415211</td>\n",
" <td>-0.581949</td>\n",
" <td>0.015472</td>\n",
" <td>0.018065</td>\n",
" <td>4.67</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.681109</td>\n",
" <td>-3.934776</td>\n",
" <td>-3.801827</td>\n",
" <td>-1.147468</td>\n",
" <td>-0.735540</td>\n",
" <td>-0.501097</td>\n",
" <td>1.038865</td>\n",
" <td>-0.626979</td>\n",
" <td>-2.274423</td>\n",
" <td>1.527782</td>\n",
" <td>...</td>\n",
" <td>0.652202</td>\n",
" <td>0.272684</td>\n",
" <td>-0.982151</td>\n",
" <td>0.165900</td>\n",
" <td>0.360251</td>\n",
" <td>0.195321</td>\n",
" <td>-0.256273</td>\n",
" <td>0.056501</td>\n",
" <td>912.00</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.140729</td>\n",
" <td>0.453484</td>\n",
" <td>0.247010</td>\n",
" <td>2.383132</td>\n",
" <td>0.343287</td>\n",
" <td>0.432804</td>\n",
" <td>0.093380</td>\n",
" <td>0.173310</td>\n",
" <td>-0.808999</td>\n",
" <td>0.775436</td>\n",
" <td>...</td>\n",
" <td>-0.003802</td>\n",
" <td>0.058556</td>\n",
" <td>-0.121177</td>\n",
" <td>-0.304215</td>\n",
" <td>0.645893</td>\n",
" <td>0.122600</td>\n",
" <td>-0.012115</td>\n",
" <td>-0.005945</td>\n",
" <td>1.00</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>-1.107073</td>\n",
" <td>-3.298902</td>\n",
" <td>-0.184092</td>\n",
" <td>-1.795744</td>\n",
" <td>2.137564</td>\n",
" <td>-1.684992</td>\n",
" <td>-2.015606</td>\n",
" <td>-0.007181</td>\n",
" <td>-0.165760</td>\n",
" <td>0.869659</td>\n",
" <td>...</td>\n",
" <td>0.130648</td>\n",
" <td>0.329445</td>\n",
" <td>0.927656</td>\n",
" <td>-0.049560</td>\n",
" <td>-1.892866</td>\n",
" <td>-0.575431</td>\n",
" <td>0.266573</td>\n",
" <td>0.414184</td>\n",
" <td>62.10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>-0.314818</td>\n",
" <td>0.866839</td>\n",
" <td>-0.124577</td>\n",
" <td>-0.627638</td>\n",
" <td>2.651762</td>\n",
" <td>3.428128</td>\n",
" <td>0.194637</td>\n",
" <td>0.670674</td>\n",
" <td>-0.442658</td>\n",
" <td>0.133499</td>\n",
" <td>...</td>\n",
" <td>-0.312774</td>\n",
" <td>-0.799494</td>\n",
" <td>-0.064488</td>\n",
" <td>0.953062</td>\n",
" <td>-0.429550</td>\n",
" <td>0.158225</td>\n",
" <td>0.076943</td>\n",
" <td>-0.015051</td>\n",
" <td>2.67</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21688</th>\n",
" <td>-3.959670</td>\n",
" <td>3.297819</td>\n",
" <td>-1.079436</td>\n",
" <td>-2.290106</td>\n",
" <td>-1.405133</td>\n",
" <td>2.452586</td>\n",
" <td>-4.649235</td>\n",
" <td>-12.365464</td>\n",
" <td>0.409493</td>\n",
" <td>1.251992</td>\n",
" <td>...</td>\n",
" <td>12.617463</td>\n",
" <td>-2.969195</td>\n",
" <td>1.755050</td>\n",
" <td>0.433324</td>\n",
" <td>-0.010827</td>\n",
" <td>-0.126613</td>\n",
" <td>0.200111</td>\n",
" <td>-0.160542</td>\n",
" <td>29.95</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21689</th>\n",
" <td>-1.066503</td>\n",
" <td>0.539240</td>\n",
" <td>0.735343</td>\n",
" <td>-0.506800</td>\n",
" <td>0.843980</td>\n",
" <td>-1.047877</td>\n",
" <td>1.141302</td>\n",
" <td>-0.127448</td>\n",
" <td>-0.119221</td>\n",
" <td>-1.870265</td>\n",
" <td>...</td>\n",
" <td>-0.162535</td>\n",
" <td>-0.576352</td>\n",
" <td>-0.184969</td>\n",
" <td>-0.136154</td>\n",
" <td>0.760012</td>\n",
" <td>0.048105</td>\n",
" <td>-0.017475</td>\n",
" <td>0.092365</td>\n",
" <td>85.66</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21690</th>\n",
" <td>-2.175162</td>\n",
" <td>-0.441681</td>\n",
" <td>1.883137</td>\n",
" <td>-0.267440</td>\n",
" <td>1.056972</td>\n",
" <td>0.136404</td>\n",
" <td>0.113595</td>\n",
" <td>-0.055983</td>\n",
" <td>0.765616</td>\n",
" <td>-0.087568</td>\n",
" <td>...</td>\n",
" <td>-0.201561</td>\n",
" <td>0.397761</td>\n",
" <td>-0.855500</td>\n",
" <td>-0.627900</td>\n",
" <td>0.590977</td>\n",
" <td>0.515065</td>\n",
" <td>0.433089</td>\n",
" <td>-0.150291</td>\n",
" <td>131.10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21691</th>\n",
" <td>0.031406</td>\n",
" <td>0.694817</td>\n",
" <td>0.083233</td>\n",
" <td>-0.797912</td>\n",
" <td>0.564318</td>\n",
" <td>-0.560787</td>\n",
" <td>0.805901</td>\n",
" <td>0.051453</td>\n",
" <td>-0.053817</td>\n",
" <td>-0.200190</td>\n",
" <td>...</td>\n",
" <td>-0.255891</td>\n",
" <td>-0.664635</td>\n",
" <td>0.018844</td>\n",
" <td>-0.539177</td>\n",
" <td>-0.504019</td>\n",
" <td>0.155133</td>\n",
" <td>0.232846</td>\n",
" <td>0.079420</td>\n",
" <td>4.49</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21692</th>\n",
" <td>-0.312369</td>\n",
" <td>0.944738</td>\n",
" <td>1.430605</td>\n",
" <td>0.627951</td>\n",
" <td>0.317725</td>\n",
" <td>-0.180406</td>\n",
" <td>0.793108</td>\n",
" <td>-0.104993</td>\n",
" <td>-0.493956</td>\n",
" <td>0.344477</td>\n",
" <td>...</td>\n",
" <td>0.118417</td>\n",
" <td>0.609081</td>\n",
" <td>-0.270644</td>\n",
" <td>0.004333</td>\n",
" <td>-0.114185</td>\n",
" <td>-0.287989</td>\n",
" <td>0.232375</td>\n",
" <td>-0.023563</td>\n",
" <td>14.90</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>21693 rows × 30 columns</p>\n",
"</div>"
],
"text/plain": [
" V1 V2 V3 V4 V5 V6 V7 \\\n",
"0 1.176563 0.323798 0.536927 1.047002 -0.368652 -0.728586 0.084678 \n",
"1 0.681109 -3.934776 -3.801827 -1.147468 -0.735540 -0.501097 1.038865 \n",
"2 1.140729 0.453484 0.247010 2.383132 0.343287 0.432804 0.093380 \n",
"3 -1.107073 -3.298902 -0.184092 -1.795744 2.137564 -1.684992 -2.015606 \n",
"4 -0.314818 0.866839 -0.124577 -0.627638 2.651762 3.428128 0.194637 \n",
"... ... ... ... ... ... ... ... \n",
"21688 -3.959670 3.297819 -1.079436 -2.290106 -1.405133 2.452586 -4.649235 \n",
"21689 -1.066503 0.539240 0.735343 -0.506800 0.843980 -1.047877 1.141302 \n",
"21690 -2.175162 -0.441681 1.883137 -0.267440 1.056972 0.136404 0.113595 \n",
"21691 0.031406 0.694817 0.083233 -0.797912 0.564318 -0.560787 0.805901 \n",
"21692 -0.312369 0.944738 1.430605 0.627951 0.317725 -0.180406 0.793108 \n",
"\n",
" V8 V9 V10 ... V21 V22 V23 \\\n",
"0 -0.069246 -0.266389 0.155315 ... -0.109627 -0.341365 0.057845 \n",
"1 -0.626979 -2.274423 1.527782 ... 0.652202 0.272684 -0.982151 \n",
"2 0.173310 -0.808999 0.775436 ... -0.003802 0.058556 -0.121177 \n",
"3 -0.007181 -0.165760 0.869659 ... 0.130648 0.329445 0.927656 \n",
"4 0.670674 -0.442658 0.133499 ... -0.312774 -0.799494 -0.064488 \n",
"... ... ... ... ... ... ... ... \n",
"21688 -12.365464 0.409493 1.251992 ... 12.617463 -2.969195 1.755050 \n",
"21689 -0.127448 -0.119221 -1.870265 ... -0.162535 -0.576352 -0.184969 \n",
"21690 -0.055983 0.765616 -0.087568 ... -0.201561 0.397761 -0.855500 \n",
"21691 0.051453 -0.053817 -0.200190 ... -0.255891 -0.664635 0.018844 \n",
"21692 -0.104993 -0.493956 0.344477 ... 0.118417 0.609081 -0.270644 \n",
"\n",
" V24 V25 V26 V27 V28 Amount Class \n",
"0 0.499180 0.415211 -0.581949 0.015472 0.018065 4.67 0 \n",
"1 0.165900 0.360251 0.195321 -0.256273 0.056501 912.00 0 \n",
"2 -0.304215 0.645893 0.122600 -0.012115 -0.005945 1.00 0 \n",
"3 -0.049560 -1.892866 -0.575431 0.266573 0.414184 62.10 0 \n",
"4 0.953062 -0.429550 0.158225 0.076943 -0.015051 2.67 0 \n",
"... ... ... ... ... ... ... ... \n",
"21688 0.433324 -0.010827 -0.126613 0.200111 -0.160542 29.95 0 \n",
"21689 -0.136154 0.760012 0.048105 -0.017475 0.092365 85.66 0 \n",
"21690 -0.627900 0.590977 0.515065 0.433089 -0.150291 131.10 0 \n",
"21691 -0.539177 -0.504019 0.155133 0.232846 0.079420 4.49 0 \n",
"21692 0.004333 -0.114185 -0.287989 0.232375 -0.023563 14.90 0 \n",
"\n",
"[21693 rows x 30 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "48e35bbc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Counter({0: 21337, 1: 356})"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Counter(df.Class)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "93955669",
"metadata": {},
"outputs": [],
"source": [
"dataset = df.values"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "0867a385",
"metadata": {},
"outputs": [],
"source": [
"X = dataset[:,:-1]\n",
"Y = dataset[:, -1]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ef99ebf7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"RandomForestClassifier(class_weight='balanced')\n",
"Raw ROC AUC: 0.8920993943607495\n",
"Best Threshold=0.030000, G-Mean=0.956\n",
"0.9558218725366835\n",
"RandomForestClassifier(class_weight='balanced')\n",
"Raw ROC AUC: 0.8964097391883358\n",
"Best Threshold=0.030000, G-Mean=0.944\n",
"0.9440977101254854\n",
"RandomForestClassifier(class_weight='balanced')\n",
"Raw ROC AUC: 0.8964097391883358\n",
"Best Threshold=0.030000, G-Mean=0.962\n",
"0.9619070292342116\n",
"RandomForestClassifier(class_weight='balanced')\n",
"Raw ROC AUC: 0.9093407736710944\n",
"Best Threshold=0.050000, G-Mean=0.958\n",
"0.9587729562735314\n",
"RandomForestClassifier(class_weight='balanced')\n",
"Raw ROC AUC: 0.8964097391883358\n",
"Best Threshold=0.040000, G-Mean=0.955\n",
"0.9555073024328385\n",
"RandomForestClassifier(class_weight='balanced')\n",
"Raw ROC AUC: 0.8920993943607495\n",
"Best Threshold=0.030000, G-Mean=0.952\n",
"0.9523634374066694\n",
"RandomForestClassifier(class_weight='balanced')\n",
"Raw ROC AUC: 0.8920993943607495\n",
"Best Threshold=0.040000, G-Mean=0.945\n",
"0.9459637106052965\n"
]
}
],
"source": [
"test_size = 0.33\n",
"preds_stack = np.array([], dtype=np.int64).reshape(0,math.ceil(len(X)*test_size))\n",
"scores_stack = []\n",
"seed = 2303\n",
"for i in range(7):\n",
" X_train, X_valid, y_train, y_valid = model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed)\n",
" # fit model no training data\n",
" # model = xgboost.XGBClassifier()\n",
" # model = RandomForestClassifier(n_estimators=100, class_weight='balanced_subsample') \n",
" # model = BalancedRandomForestClassifier(n_estimators=50) \n",
" model = RandomForestClassifier(n_estimators=100, class_weight='balanced') \n",
" model.fit(X_train, y_train)\n",
" print(model)\n",
" # make predictions for test data\n",
" y_pred = model.predict(X_valid)\n",
" predictions = [round(value) for value in y_pred]\n",
" # evaluate predictions\n",
" score = roc_auc_score(y_valid, predictions)\n",
" print(f\"Raw ROC AUC: {score}\")\n",
"\n",
" predictions_proba = model.predict_proba(X_valid)[:,1]\n",
" fpr, tpr, thresholds = roc_curve(y_valid, predictions_proba)\n",
"\n",
" gmeans = np.sqrt(tpr * (1-fpr))\n",
" ix = np.argmax(gmeans)\n",
" print('Best Threshold=%f, G-Mean=%.3f' % (thresholds[ix], gmeans[ix]))\n",
" threshold = thresholds[ix]\n",
" final_preds = predictions_proba >= threshold\n",
" rf_auc = roc_auc_score(y_valid, final_preds)\n",
" preds_stack = np.vstack((final_preds.reshape(1, -1), preds_stack))\n",
" scores_stack.append(rf_auc)\n",
" print(rf_auc)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d739699e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9534905740878166\n"
]
}
],
"source": [
"print(np.array(scores_stack).mean())"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "9fa36cc3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"cm = confusion_matrix(y_valid, np.median(preds_stack, axis=0))\n",
"disp = ConfusionMatrixDisplay(confusion_matrix=cm)\n",
"disp.plot();"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.8.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment