diff --git a/your-code/lab_imbalance.ipynb b/your-code/lab_imbalance.ipynb index a3a5359..c60bfad 100644 --- a/your-code/lab_imbalance.ipynb +++ b/your-code/lab_imbalance.ipynb @@ -32,14 +32,874 @@ "metadata": {}, "outputs": [], "source": [ - "# Your code here" + "# Your code here\n", + "import pandas as pd\n", + "import numpy as np" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 3, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(6362620, 11)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
steptypeamountnameOrigoldbalanceOrgnewbalanceOrignameDestoldbalanceDestnewbalanceDestisFraudisFlaggedFraud
01PAYMENT9839.64C1231006815170136.0160296.36M19797871550.00.000
11PAYMENT1864.28C166654429521249.019384.72M20442822250.00.000
21TRANSFER181.00C1305486145181.00.00C5532640650.00.010
31CASH_OUT181.00C840083671181.00.00C3899701021182.00.010
41PAYMENT11668.14C204853772041554.029885.86M12307017030.00.000
\n", + "
" + ], + "text/plain": [ + " step type amount nameOrig oldbalanceOrg newbalanceOrig \\\n", + "0 1 PAYMENT 9839.64 C1231006815 170136.0 160296.36 \n", + "1 1 PAYMENT 1864.28 C1666544295 21249.0 19384.72 \n", + "2 1 TRANSFER 181.00 C1305486145 181.0 0.00 \n", + "3 1 CASH_OUT 181.00 C840083671 181.0 0.00 \n", + "4 1 PAYMENT 11668.14 C2048537720 41554.0 29885.86 \n", + "\n", + " nameDest oldbalanceDest newbalanceDest isFraud isFlaggedFraud \n", + "0 M1979787155 0.0 0.0 0 0 \n", + "1 M2044282225 0.0 0.0 0 0 \n", + "2 C553264065 0.0 0.0 1 0 \n", + "3 C38997010 21182.0 0.0 1 0 \n", + "4 M1230701703 0.0 0.0 0 0 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "### What is the distribution of the outcome? " + "finance = pd.read_csv(\"../data/PS_20174392719_1491204439457_log.csv\")\n", + "print(finance.shape)\n", + "finance.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 6362604\n", + "1 16\n", + "Name: isFlaggedFraud, dtype: int64" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "finance[\"isFlaggedFraud\"].value_counts() #empty in the sample, but not in total -> so keep it!\n" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(100000, 11)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
steptypeamountnameOrigoldbalanceOrgnewbalanceOrignameDestoldbalanceDestnewbalanceDestisFraudisFlaggedFraud
87392942CASH_OUT245938.58C1148806370.00.00C1262669158496232.90742171.4800
1253644134CASH_OUT127900.73C38030976810503.00.00C24596908256223.62184124.3500
5087416355CASH_OUT62436.31C208249400791775.029338.69C829682895476132.72538569.0400
5782972400TRANSFER1002824.91C3754899760.00.00C126593503416265948.1017268773.0100
5560569384PAYMENT5880.12C202170136616.00.00M18364664980.000.0000
\n", + "
" + ], + "text/plain": [ + " step type amount nameOrig oldbalanceOrg \\\n", + "873929 42 CASH_OUT 245938.58 C114880637 0.0 \n", + "1253644 134 CASH_OUT 127900.73 C380309768 10503.0 \n", + "5087416 355 CASH_OUT 62436.31 C2082494007 91775.0 \n", + "5782972 400 TRANSFER 1002824.91 C375489976 0.0 \n", + "5560569 384 PAYMENT 5880.12 C202170136 616.0 \n", + "\n", + " newbalanceOrig nameDest oldbalanceDest newbalanceDest isFraud \\\n", + "873929 0.00 C1262669158 496232.90 742171.48 0 \n", + "1253644 0.00 C245969082 56223.62 184124.35 0 \n", + "5087416 29338.69 C829682895 476132.72 538569.04 0 \n", + "5782972 0.00 C1265935034 16265948.10 17268773.01 0 \n", + "5560569 0.00 M1836466498 0.00 0.00 0 \n", + "\n", + " isFlaggedFraud \n", + "873929 0 \n", + "1253644 0 \n", + "5087416 0 \n", + "5782972 0 \n", + "5560569 0 " + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#samle it\n", + "n = 100000\n", + "finance_sample = finance.sample(n=n, axis=0)\n", + "print(finance_sample.shape)\n", + "finance_sample.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "step int64\n", + "type object\n", + "amount float64\n", + "nameOrig object\n", + "oldbalanceOrg float64\n", + "newbalanceOrig float64\n", + "nameDest object\n", + "oldbalanceDest float64\n", + "newbalanceDest float64\n", + "isFraud int64\n", + "isFlaggedFraud int64\n", + "dtype: object" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "finance_sample.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stepamountoldbalanceOrgnewbalanceOrigoldbalanceDestnewbalanceDestisFraudisFlaggedFraud
count100000.0100000.0100000.0100000.0100000.0100000.0100000.0100000.0
mean242.19945177947.331917835535.949712856089.6903381092547.2318551213872.5548690.001290.0
std141.738846522483.7030442889941.2636542923452.4915953374748.624423575851.7694140.0358940.0
min1.00.180.00.00.00.00.00.0
25%155.013213.60.00.00.00.00.00.0
50%237.075234.79514636.00.0132812.895216390.290.00.0
75%333.0208154.6925107703.25143700.545937284.621105541.5050.00.0
max743.038929156.657316255.0547316255.05302275361.94302322993.61.00.0
IQR178.0194941.0925107703.25143700.545937284.621105541.5050.00.0
outliers_lowFalseFalseFalseFalseFalseFalseFalseFalse
outliers_upTrueTrueTrueTrueTrueTrueTrueFalse
\n", + "
" + ], + "text/plain": [ + " step amount oldbalanceOrg newbalanceOrig \\\n", + "count 100000.0 100000.0 100000.0 100000.0 \n", + "mean 242.19945 177947.331917 835535.949712 856089.690338 \n", + "std 141.738846 522483.703044 2889941.263654 2923452.491595 \n", + "min 1.0 0.18 0.0 0.0 \n", + "25% 155.0 13213.6 0.0 0.0 \n", + "50% 237.0 75234.795 14636.0 0.0 \n", + "75% 333.0 208154.6925 107703.25 143700.545 \n", + "max 743.0 38929156.6 57316255.05 47316255.05 \n", + "IQR 178.0 194941.0925 107703.25 143700.545 \n", + "outliers_low False False False False \n", + "outliers_up True True True True \n", + "\n", + " oldbalanceDest newbalanceDest isFraud isFlaggedFraud \n", + "count 100000.0 100000.0 100000.0 100000.0 \n", + "mean 1092547.231855 1213872.554869 0.00129 0.0 \n", + "std 3374748.62442 3575851.769414 0.035894 0.0 \n", + "min 0.0 0.0 0.0 0.0 \n", + "25% 0.0 0.0 0.0 0.0 \n", + "50% 132812.895 216390.29 0.0 0.0 \n", + "75% 937284.62 1105541.505 0.0 0.0 \n", + "max 302275361.94 302322993.6 1.0 0.0 \n", + "IQR 937284.62 1105541.505 0.0 0.0 \n", + "outliers_low False False False False \n", + "outliers_up True True True False " + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#finance_sample.describe()\n", + "\n", + "stats = finance_sample.describe().transpose()\n", + "stats['IQR'] = stats['75%'] - stats['25%']\n", + "stats['outliers_low'] = (stats['25%'] - 1.5*stats['IQR'])>stats['min']\n", + "stats['outliers_up'] = (stats['75%'] + 1.5*stats['IQR']) column can be dropped, all unique values" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "92808" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "finance_sample[\"nameDest\"].nunique() #93029 -> column can mabe dropped, too many unique values to be turned into number code\n", + "## 93029/len(finance_sample) #--> 93% of data is unique names" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stepamountoldbalanceOrgnewbalanceOrigoldbalanceDestnewbalanceDestisFraudisFlaggedFraud
step1.0000000.025246-0.004706-0.0053380.0329430.0307070.035545NaN
amount0.0252461.0000000.001800-0.0067590.2417130.3946590.115305NaN
oldbalanceOrg-0.0047060.0018001.0000000.9985490.0626470.0396450.018461NaN
newbalanceOrig-0.005338-0.0067590.9985491.0000000.0643330.039500-0.004798NaN
oldbalanceDest0.0329430.2417130.0626470.0643331.0000000.9795540.011949NaN
newbalanceDest0.0307070.3946590.0396450.0395000.9795541.0000000.017534NaN
isFraud0.0355450.1153050.018461-0.0047980.0119490.0175341.000000NaN
isFlaggedFraudNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " step amount oldbalanceOrg newbalanceOrig \\\n", + "step 1.000000 0.025246 -0.004706 -0.005338 \n", + "amount 0.025246 1.000000 0.001800 -0.006759 \n", + "oldbalanceOrg -0.004706 0.001800 1.000000 0.998549 \n", + "newbalanceOrig -0.005338 -0.006759 0.998549 1.000000 \n", + "oldbalanceDest 0.032943 0.241713 0.062647 0.064333 \n", + "newbalanceDest 0.030707 0.394659 0.039645 0.039500 \n", + "isFraud 0.035545 0.115305 0.018461 -0.004798 \n", + "isFlaggedFraud NaN NaN NaN NaN \n", + "\n", + " oldbalanceDest newbalanceDest isFraud isFlaggedFraud \n", + "step 0.032943 0.030707 0.035545 NaN \n", + "amount 0.241713 0.394659 0.115305 NaN \n", + "oldbalanceOrg 0.062647 0.039645 0.018461 NaN \n", + "newbalanceOrig 0.064333 0.039500 -0.004798 NaN \n", + "oldbalanceDest 1.000000 0.979554 0.011949 NaN \n", + "newbalanceDest 0.979554 1.000000 0.017534 NaN \n", + "isFraud 0.011949 0.017534 1.000000 NaN \n", + "isFlaggedFraud NaN NaN NaN NaN " + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "finance_sample.corr()" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\mycro\\AppData\\Local\\Temp\\ipykernel_21048\\3999707444.py:5: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.\n", + "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n", + " mask = np.zeros_like(corr, dtype=np.bool)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sn\n", + "corr=np.abs(finance_sample.corr())\n", + "#Set up mask for triangle representation\n", + "mask = np.zeros_like(corr, dtype=np.bool)\n", + "mask[np.triu_indices_from(mask)] = True\n", + "# Set up the matplotlib figure\n", + "f, ax = plt.subplots(figsize=(6, 6))\n", + "# Generate a custom diverging colormap\n", + "cmap = sn.diverging_palette(220, 10, as_cmap=True)\n", + "# Draw the heatmap with the mask and correct aspect ratio (squared -> only positive values)\n", + "sn.heatmap(corr, mask=mask, vmax=1,square=True, linewidths=.5, cbar_kws={\"shrink\": .5},annot = corr)\n", + "plt.show()" ] }, { @@ -48,7 +908,42 @@ "metadata": {}, "outputs": [], "source": [ - "# Your response here" + "#there is a perfect correlation between columns newbalanceOrig and oldbalanceOrg -> drop newbalanceOrig because smaller corr with fraud\n", + "#there is a high correlation between columns newbalanceDest and oldbalanceDest -> drop newbalanceDest because higher cross corr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What is the distribution of the outcome? " + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 99871\n", + "1 129\n", + "Name: isFraud, dtype: int64" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your response here\n", + "#target: isFraud\n", + "finance_sample[\"isFraud\"].value_counts() #. plot(kind=\"bar\", figsize=(3,2)) -> sample for fraud too small to visualise\n", + "\n", + "#129/len(finance_sample) #--> 0.00129 --> 0.129% of the sample are fraud\n", + "# will have to use re-sampling techniques to get a better result, that also contains this data." ] }, { @@ -60,18 +955,397 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# Your code here\n" + "##from here, start using the real data instead of the sample" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stepamountoldbalanceOrgoldbalanceDestisFraudisFlaggedFraudtype_CASH_INtype_CASH_OUTtype_PAYMENTtype_TRANSFER
019839.64170136.00.0000010
111864.2821249.00.0000010
21181.00181.00.0100001
31181.00181.021182.0100100
4111668.1441554.00.0000010
\n", + "
" + ], + "text/plain": [ + " step amount oldbalanceOrg oldbalanceDest isFraud isFlaggedFraud \\\n", + "0 1 9839.64 170136.0 0.0 0 0 \n", + "1 1 1864.28 21249.0 0.0 0 0 \n", + "2 1 181.00 181.0 0.0 1 0 \n", + "3 1 181.00 181.0 21182.0 1 0 \n", + "4 1 11668.14 41554.0 0.0 0 0 \n", + "\n", + " type_CASH_IN type_CASH_OUT type_PAYMENT type_TRANSFER \n", + "0 0 0 1 0 \n", + "1 0 0 1 0 \n", + "2 0 0 0 1 \n", + "3 0 1 0 0 \n", + "4 0 0 1 0 " + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here\n", + "# - 1 - first the cleaning\n", + "### doing it all with a sample only ###\n", + "finance_sample_clean = pd.merge(left = finance_sample, \n", + " right = pd.get_dummies(finance_sample[\"type\"], prefix=\"type\"),\n", + " left_index = True,\n", + " right_index = True) \n", + "### using all the data ### #this stays commented out if not in use#\n", + "# finance_sample_clean = pd.merge(left = finance, \n", + "# right = pd.get_dummies(finance[\"type\"], prefix=\"type\"),\n", + "# left_index = True,\n", + "# right_index = True) \n", + "\n", + "finance_sample_clean = finance_sample_clean.drop(columns=[\"newbalanceOrig\", \"newbalanceDest\", #because of correlation\n", + " \"type\",\"type_DEBIT\", #because of dummies\n", + " \"nameOrig\",\"nameDest\" #because of too many unique values\n", + " ])\n", + "finance_sample_clean.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# - 2 - then split it into test and train" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "X = finance_sample_clean.drop(columns=[\"isFraud\"])\n", + "Y = finance_sample_clean[\"isFraud\"]\n", + "X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.15) #smaller test size because big data anyway" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(954393,)" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train.shape #(85000, 9)\n", + "X_test.shape #(15000, 9)\n", + "y_train.shape #(85000,)\n", + "y_test.shape #(15000,)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [], + "source": [ + "# - 3 - rescale the data, based on the train dataset\n", + "from sklearn.preprocessing import MinMaxScaler\n", + "\n", + "normalizer = MinMaxScaler() #value before min will be 0, max will be 1, everything else somewher in btw.\n", + "\n", + "#do not use the test data for this!! Testdata is not known to the model.\n", + "#do the normalizing fitting on all the input train data. \n", + "normalizer.fit(X_train)\n", + "\n", + "#Then use that normalization function on the train data and anything coming later on into the model.\n", + "X_train_normalized = normalizer.transform(X_train)\n", + "X_test_normalized = normalizer.transform(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(954393,)" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train_normalized.shape #(85000, 9)\n", + "X_test_normalized.shape #(15000, 9)\n", + "y_train.shape #(85000,)\n", + "y_test.shape #(15000,)" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [], + "source": [ + "# - 4 - re-sample, oversample some data\n", + "from imblearn.over_sampling import SMOTE\n", + "\n", + "sm = SMOTE(sampling_strategy = 0.5, random_state = 0) ## 0.5 Means my minority class will be half has big as my majority class\n", + "\n", + "X_train_SMOTE,y_train_SMOTE = sm.fit_resample(X_train_normalized,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(954393,)" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train_SMOTE.shape #127344, 9)\n", + "X_test_normalized.shape #(15000, 9)\n", + "y_train_SMOTE.shape #(127344,)\n", + "y_test.shape #(15000,)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Run a logisitc regression classifier and evaluate its accuracy." + "### Run a logistic regression classifier and evaluate its accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "import time" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\mycro\\anaconda3\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "test data accuracy is 0.9593144543180849\n", + "train data accuracy is 0.9233926231588261\n", + "Wall time: 1min 31s\n" + ] + } + ], + "source": [ + "%%time\n", + "from sklearn.linear_model import LogisticRegression\n", + "\n", + "log_reg = LogisticRegression() \n", + "log_reg.fit(X_train_SMOTE, y_train_SMOTE)\n", + "\n", + "print(\"test data accuracy is\", log_reg.score(X_test_normalized,y_test))\n", + "print(\"train data accuracy is\", log_reg.score(X_train_SMOTE,y_train_SMOTE)) #no overfitting" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.96 0.98 953143\n", + " 1 0.03 0.85 0.05 1250\n", + "\n", + " accuracy 0.96 954393\n", + " macro avg 0.51 0.90 0.52 954393\n", + "weighted avg 1.00 0.96 0.98 954393\n", + "\n" + ] + } + ], + "source": [ + "from sklearn.metrics import classification_report\n", + "\n", + "pred = log_reg.predict(X_test_normalized)\n", + "print(classification_report(y_test,pred))" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[914502, 38641],\n", + " [ 189, 1061]], dtype=int64)" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "confusion_matrix(y_test, pred)\n", + "#this gives the sample counts in these 4 groups:\n", + "## True Negative | False Positive\n", + "##False Negative | True Positive" ] }, { @@ -80,7 +1354,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Your code here" + "## LogisticRegression\n", + "## Result 1 (only using sample = 100000): misses 5 out of 25, recall of 80%. Overall score: 0.92\n", + "## Result 2 (using all of the dataset) : misses 189 out of 1250, recall of 85%. Overall score: 0.96" ] }, { @@ -90,13 +1366,206 @@ "### Now pick a model of your choice and evaluate its accuracy." ] }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "test data accuracy is 0.9937845311103497\n", + "train data accuracy is 0.9021104442713163\n", + "Wall time: 17 s\n" + ] + } + ], + "source": [ + "%%time\n", + "#DecisionTrees\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "tree = DecisionTreeClassifier(max_depth = 3) #max 3 nodes splitting, chosen after tuning \n", + "tree.fit(X_train_SMOTE, y_train_SMOTE)\n", + "print(\"test data accuracy is\", tree.score(X_test_normalized,y_test))\n", + "print(\"train data accuracy is\", tree.score(X_train_SMOTE,y_train_SMOTE)) #1 = overfitting completely. too high max_depth with 10." + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.99 1.00 953143\n", + " 1 0.14 0.72 0.23 1250\n", + "\n", + " accuracy 0.99 954393\n", + " macro avg 0.57 0.86 0.62 954393\n", + "weighted avg 1.00 0.99 1.00 954393\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[947556, 5587],\n", + " [ 345, 905]], dtype=int64)" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pred = tree.predict(X_test_normalized)\n", + "print(classification_report(y_test,pred))\n", + "confusion_matrix(y_test, pred)" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# Your code here" + "## DecisionTreeClassifier\n", + "## Result 1 (only using sample = 100000): misses 2 out of 25, recall of 92%. Overall score: 0.965\n", + "## Result 2 (using all of the dataset) : misses 345 out of 1250, recall of 72%. Overall score: 0.994" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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gso8/0yfW61WrxgcDodXuVPrdM+ePQwYMICHH36YF198kcjISH799VeGDRvmOf9M392xY0c6dOjAzJkz6devHxs2bODrr78u85xzpTFAZioZAF2/FdjsZZcVEalmFouFYH+/Cj2C/G0VPufUR0X/1+/v71/uHcUXLlzI0KFDuemmm0hMTCQmJobdu3efRe2cvfDwcKKjo1m+fLnnmNPpZM2aNWWet3DhQgYOHMhdd91Fhw4daNasGdu2bfN83rJlS4KCgvjxxx99nn/xxRezdu3a045dql+/fqmB2uBuNTqTlStXUlRUxOuvv063bt246KKLOHDggNd3ny6uEvfffz/Tp0/ngw8+4Oqrry41lqsqKAEy06GN7mcNgBYROWtNmzZl2bJl7N69m/T09DJbZlq0aMF//vMf1q5dy7p167jzzjsrPAi4Mjz66KOMGzeOL7/8ki1btvDYY49x9OjRMpO/Fi1akJyczOLFi9m8eTMPPfQQBw8e9HweGBjIM888w9NPP83MmTPZsWMHS5cu5f333wdg8ODBxMTEcOONN7Jo0SJ27tzJZ599xpIlSwC48sorWblyJTNnzmTbtm08//zzbNy48Yz30rx5c4qKipg8eTI7d+7ko48+4p133ilVZvTo0axYsYLhw4ezfv16fv/9d95//33S09M9Zf74xz+yf/9+3n33Xe67774K1efZUAJkppI1gDT+R0TkrD355JPYbDbatm1L/fr1yxzP88Ybb1C3bl169OjB9ddfT79+/ejUqVM1Ruv2zDPPMHjwYO6++266d+9OnTp16NevH4GBgac9Z8yYMXTq1Il+/frRu3dvTzJzapknnniCv/71r7Rp04ZBgwZ5xh75+/szf/58GjRowIABA0hMTOTVV1/1bCjar18/xowZw9NPP02XLl3Izs4u1zT0Sy65hAkTJjB+/Hjat2/PrFmzGDduXKkyF110EfPnz2fdunVceuml9OzZk2+//bbUukxhYWHccsst1KlTp8zlACqLxajIfMNaIisri/DwcI4dO0ZYWFjVfdFbXeHw7/DHT6FlnzOXr2QOh4N58+YxYMAAr/7q2kp14k114tuFVi/5+fns2rWLhISEMn8Jl8XlcpGVleWZ2SPlrxOXy0WbNm24/fbbS80Wu1Cdrl769OlDmzZtePPNN097blk/qxX5/a1B0GYpKoD04r5b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g65iZdXJrl27Tvtv788//2x26FXmTD8np6ruafDaDV5ERERqHQ2CFhERkVpHCZCIiIjUOkqAREREpNZRAiQiIiK1jhIgERERqXWUAImIiEitowRIREREah0lQCIiIlLrKAESkVpvxowZREREVMt3DR06lBtvvLFavktETk8JkIhIFdi9ezcWi4W1a9eaHYqI+KAESERERGodJUAiUqV69+7No48+ysiRI6lbty7R0dFMmzaNnJwc7r33XkJDQ2nevDnffvstAE6nk2HDhpGQkEBQUBCtWrVi0qRJnuvl5+fTrl07HnzwQc+xXbt2ER4ezrvvvluumGbMmEGTJk0IDg7mpptuIiMjw6vM119/TefOnQkMDKRZs2aMHTuWoqIiz+cWi4WpU6fSv39/goKCSEhI4JNPPvF8npCQAEDHjh2xWCz07t271PX/8Y9/0LBhQ6KionjkkUdwOBzlil1EKkm1bbsqIrXSFVdcYYSGhhovvviisXXrVuPFF180rFar0b9/f2PatGnG1q1bjT/96U9GVFSUkZOTYxQWFhp//etfjeXLlxs7d+40/vWvfxnBwcHG3LlzPddcs2aN4e/vb3z++edGUVGR0bNnT2PgwIHlimfp0qWGxWIxxo0bZ2zZssWYNGmSERERYYSHh3vKfPfdd0ZYWJgxY8YMY8eOHcb8+fONpk2bGn/72988ZQAjKirKePfdd40tW7YYzz33nGGz2YxNmzYZhmEYy5cvNwDjhx9+MFJTU42MjAzDMAzjnnvuMcLCwoyHH37Y2Lx5s/H1118bwcHBxrRp0869skWk3JQAiUiVuuKKK4xevXp53hcVFRkhISHGkCFDPMdSU1MNwFiyZInPawwfPty45ZZbSh177bXXjHr16hmPPvqoERMTYxw+fLhc8QwePNi45pprSh0bNGhQqQTosssuM1555ZVSZT766COjYcOGnveA8fDDD5cq07VrV+NPf/qTYRiGsWvXLgMw1qxZU6rMPffcY8THxxtFRUWeY7fddpsxaNCgcsUvIpVDXWAiUuUuvvhiz2ubzUZUVBSJiYmeY9HR0QCkpaUB8M4775CUlET9+vWpU6cO7777LikpKaWu+cQTT9CqVSsmT57M9OnTqVevXrli2bx5M927dy917NT3q1at4oUXXqBOnTqexwMPPEBqaiq5ubmnPa979+5s3rz5jDG0a9cOm83med+wYUPPvYtI9fAzOwARufDZ7fZS7y0WS6ljFosFAJfLxb///W8ef/xxXn/9dbp3705oaCh///vfWbZsWalrpKWlsWXLFmw2G9u2beOaa64pVyyGYZyxjMvlYuzYsdx8881enwUGBpZ5bsm9lMVXfbhcrjOeJyKVRwmQiNQoCxcupEePHgwfPtxzbMeOHV7l7rvvPtq3b88DDzzAsGHDuOqqq2jbtu0Zr9+2bVuWLl1a6tip7zt16sSWLVto0aJFmddaunQpd999d6n3HTt2BMDf3x9wD+oWkZpHCZCI1CgtWrRg5syZfP/99yQkJPDRRx+xYsUKz6wqgLfeeoslS5awfv164uLi+Pbbb/njH//IsmXLPInH6YwYMYIePXrw2muvceONNzJ//ny+++67UmX++te/ct111xEXF8dtt92G1Wpl/fr1bNiwgZdeeslT7pNPPiEpKYlevXoxa9Ysli9fzvvvvw9AgwYNCAoK4rvvvqNx48YEBgYSHh5eiTUlIudCY4BEpEZ5+OGHufnmmxk0aBBdu3YlIyOjVGvQ77//zlNPPcXbb79NXFwc4E6IMjMzGTNmzBmv361bN9577z0mT57MJZdcwvz583nuuedKlenXrx/ffPMNycnJdOnShW7dujFhwgTi4+NLlRs7dixz5szh4osv5sMPP2TWrFmeVig/Pz/efPNN/vnPfxIbG8vAgQPPtWpEpBJZjPJ0iIuISCkWi4XPP/9c21qInKfUAiQiIiK1jhIgEbmg9O/fv9T09ZMfr7zyitnhiUgNoS4wEbmg7N+/n7y8PJ+fRUZGEhkZWc0RiUhNpARIREREah11gYmIiEitowRIREREah0lQCIiIlLrKAESERGRWkcJkIiIiNQ6SoBERESk1lECJCIiIrWOEiARERGpdf4fWSpnMx2b2hYAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# hyerparameter tuning - find the right max_depth\n", + "\n", + "import matplotlib.pyplot as plt\n", + "training_accuracy = []\n", + "test_accuracy = []\n", + "# try from 1 to 15\n", + "max_depth_settings = range(1, 15)\n", + "for max_depth in max_depth_settings:\n", + " # build the model\n", + " tree = DecisionTreeClassifier(max_depth=max_depth)\n", + " #training the model\n", + " tree.fit(X_train_SMOTE, y_train_SMOTE)\n", + " # record training set accuracy\n", + " training_accuracy.append(tree.score(X_train_SMOTE, y_train_SMOTE))\n", + " # record generalization accuracy\n", + " test_accuracy.append(tree.score(X_test_normalized, y_test))\n", + "plt.plot(max_depth_settings, training_accuracy, label=\"training accuracy\")\n", + "plt.plot(max_depth_settings, test_accuracy, label=\"test accuracy\")\n", + "\n", + "plt.ylabel(\"Accuracy\")\n", + "plt.xlabel(\"max_depth\")\n", + "plt.legend()\n", + "plt.grid()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 7min 44s\n" + ] + }, + { + "data": { + "text/plain": [ + "0.9821446720585755" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "# B Gradient Boosting - always using DecTrees, no method choosing\n", + "#correcting the mistakes done in the previous trees\n", + "from sklearn.ensemble import GradientBoostingClassifier\n", + "\n", + "gb_clas = GradientBoostingClassifier(max_depth=3,\n", + " n_estimators = 25, #used 100 for the sample, only 25 for the whole data\n", + " random_state = 1)\n", + "gb_clas.fit(X_train_SMOTE, y_train_SMOTE)\n", + "gb_clas.score(X_test_normalized, y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.98 0.99 953143\n", + " 1 0.06 0.85 0.11 1250\n", + "\n", + " accuracy 0.98 954393\n", + " macro avg 0.53 0.91 0.55 954393\n", + "weighted avg 1.00 0.98 0.99 954393\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[936295, 16848],\n", + " [ 193, 1057]], dtype=int64)" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pred = gb_clas.predict(X_test_normalized)\n", + "print(classification_report(y_test,pred))\n", + "confusion_matrix(y_test, pred)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "## GradientBoostingClassifier\n", + "## Result 1 (only using sample = 100000): misses 1 out of 25, recall of 96%. Overall score: 0.99\n", + "## Result 2 (using all of the dataset) : misses 193 out of 1250, recall of 85%. Overall score: 0.98" ] }, { @@ -112,7 +1581,23 @@ "metadata": {}, "outputs": [], "source": [ - "# Your response here" + "# Your response here\n", + "\n", + "# Looking at the sample data, the LogisticRegression was worse than DecisionTreeClassifier was worse than GradientBoostingClassifier.\n", + "# That makes sense as I tried hyperparameter tuning only for the decision tree model, not the logistic regression.\n", + "# The GradientBoostingClassifier uses the tuned hyperparameter but runs the Decision tree 100 times, so the result is even better.\n", + "\n", + "# How do I recognise a better result? Looking at the overall score on the test data (going up from LogisticRegression to \n", + "# DecisionTreeClassifier), and more importantly, at the recall value (going up from LogisticRegression to DecisionTreeClassifier).\n", + "# A higher recall value means there was less False negatives in the prediction, the prediction did not miss so many fraud transfers.\n", + "\n", + "# Looking at the complete data, the DecisionTreeClassifier is worse than the other two (very similar).\n", + "# DecisionTreeClassifier has a high overall score, but the recall value goes down to 72%.\n", + "# Both of the other models, LogisticRegression and GradientBoostingClassifier, have a better recall rate with 85%.\n", + "# The model GradientBoostingClassifier has a higher overall score, meaning that it does less false positive alerts.\n", + "\n", + "# In the end, I would choose GradientBoostingClassifier as my model, as it had the best results with the sampled down data\n", + "# and is still in the better group of results with the complete dataset. " ] }, { @@ -125,7 +1610,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -139,7 +1624,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.9.13" } }, "nbformat": 4,