From 413512e2216cecd7ad8d4d6b347b30c7573c6ecb Mon Sep 17 00:00:00 2001 From: Mariana Sousa Date: Mon, 28 Aug 2023 10:18:41 +0100 Subject: [PATCH] marianaslab --- your-code/lab_imbalance.ipynb | 663 +++++++++++++++++++++++++++++++++- 1 file changed, 648 insertions(+), 15 deletions(-) diff --git a/your-code/lab_imbalance.ipynb b/your-code/lab_imbalance.ipynb index a3a5359..a016d65 100644 --- a/your-code/lab_imbalance.ipynb +++ b/your-code/lab_imbalance.ipynb @@ -28,11 +28,472 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ - "# Your code here" + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import LinearRegression\n", + "\n", + "\n", + "from sklearn.utils import resample\n", + "from sklearn.linear_model import LogisticRegression\n", + "\n", + "from sklearn.metrics import confusion_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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
95023944PAYMENT1559.39C1737204915116107.00114547.61M15488854700.000.0000
2240105186CASH_IN21871.49C12151755722024382.992046254.48C882374491131508.96109637.4700
4738923332PAYMENT11002.45C7323011276685.000.00M9471808840.000.0000
6320054687PAYMENT14814.27C18906047863392.000.00M1633613880.000.0000
90402543CASH_IN23425.12C162195459116789677.6816813102.79C501173125625787.27602362.1500
....................................
4760184334PAYMENT24708.39C7020141930.000.00M13820146030.000.0000
1795150162CASH_IN130243.71C156959738850311.00180554.71C2036782938184535.1454291.4300
4024354299CASH_IN77891.34C84125664445634.00123525.34C2725136861565308.071487416.7300
1241644134CASH_OUT100795.34C685529739177373.7676578.41C1831512617335859.04436654.3800
27140815CASH_IN323285.34C48573179858546.00381831.34C15374718802353613.112199231.1800
\n", + "

100000 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " step type amount nameOrig oldbalanceOrg \\\n", + "950239 44 PAYMENT 1559.39 C1737204915 116107.00 \n", + "2240105 186 CASH_IN 21871.49 C1215175572 2024382.99 \n", + "4738923 332 PAYMENT 11002.45 C732301127 6685.00 \n", + "6320054 687 PAYMENT 14814.27 C1890604786 3392.00 \n", + "904025 43 CASH_IN 23425.12 C1621954591 16789677.68 \n", + "... ... ... ... ... ... \n", + "4760184 334 PAYMENT 24708.39 C702014193 0.00 \n", + "1795150 162 CASH_IN 130243.71 C1569597388 50311.00 \n", + "4024354 299 CASH_IN 77891.34 C841256644 45634.00 \n", + "1241644 134 CASH_OUT 100795.34 C685529739 177373.76 \n", + "271408 15 CASH_IN 323285.34 C485731798 58546.00 \n", + "\n", + " newbalanceOrig nameDest oldbalanceDest newbalanceDest isFraud \\\n", + "950239 114547.61 M1548885470 0.00 0.00 0 \n", + "2240105 2046254.48 C882374491 131508.96 109637.47 0 \n", + "4738923 0.00 M947180884 0.00 0.00 0 \n", + "6320054 0.00 M163361388 0.00 0.00 0 \n", + "904025 16813102.79 C501173125 625787.27 602362.15 0 \n", + "... ... ... ... ... ... \n", + "4760184 0.00 M1382014603 0.00 0.00 0 \n", + "1795150 180554.71 C2036782938 184535.14 54291.43 0 \n", + "4024354 123525.34 C272513686 1565308.07 1487416.73 0 \n", + "1241644 76578.41 C1831512617 335859.04 436654.38 0 \n", + "271408 381831.34 C1537471880 2353613.11 2199231.18 0 \n", + "\n", + " isFlaggedFraud \n", + "950239 0 \n", + "2240105 0 \n", + "4738923 0 \n", + "6320054 0 \n", + "904025 0 \n", + "... ... \n", + "4760184 0 \n", + "1795150 0 \n", + "4024354 0 \n", + "1241644 0 \n", + "271408 0 \n", + "\n", + "[100000 rows x 11 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_csv(\"PS_20174392719_1491204439457_log.csv\").sample(n = 100000)\n", + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "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
count100000.0000001.000000e+051.000000e+051.000000e+051.000000e+051.000000e+05100000.00000100000.0
mean243.6002101.788609e+058.358504e+058.567292e+051.096933e+061.218947e+060.001310.0
std142.5615395.964622e+052.873248e+062.909633e+063.332727e+063.579175e+060.036170.0
min1.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000.0
25%156.0000001.338920e+040.000000e+000.000000e+000.000000e+000.000000e+000.000000.0
50%238.0000007.443640e+041.405767e+040.000000e+001.317947e+052.118752e+050.000000.0
75%335.0000002.084491e+051.074788e+051.435545e+059.394442e+051.106856e+060.000000.0
max742.0000005.625500e+073.893942e+073.894623e+072.580347e+082.582821e+081.000000.0
\n", + "
" + ], + "text/plain": [ + " step amount oldbalanceOrg newbalanceOrig \\\n", + "count 100000.000000 1.000000e+05 1.000000e+05 1.000000e+05 \n", + "mean 243.600210 1.788609e+05 8.358504e+05 8.567292e+05 \n", + "std 142.561539 5.964622e+05 2.873248e+06 2.909633e+06 \n", + "min 1.000000 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "25% 156.000000 1.338920e+04 0.000000e+00 0.000000e+00 \n", + "50% 238.000000 7.443640e+04 1.405767e+04 0.000000e+00 \n", + "75% 335.000000 2.084491e+05 1.074788e+05 1.435545e+05 \n", + "max 742.000000 5.625500e+07 3.893942e+07 3.894623e+07 \n", + "\n", + " oldbalanceDest newbalanceDest isFraud isFlaggedFraud \n", + "count 1.000000e+05 1.000000e+05 100000.00000 100000.0 \n", + "mean 1.096933e+06 1.218947e+06 0.00131 0.0 \n", + "std 3.332727e+06 3.579175e+06 0.03617 0.0 \n", + "min 0.000000e+00 0.000000e+00 0.00000 0.0 \n", + "25% 0.000000e+00 0.000000e+00 0.00000 0.0 \n", + "50% 1.317947e+05 2.118752e+05 0.00000 0.0 \n", + "75% 9.394442e+05 1.106856e+06 0.00000 0.0 \n", + "max 2.580347e+08 2.582821e+08 1.00000 0.0 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[,\n", + " ,\n", + " ],\n", + " [,\n", + " ,\n", + " ],\n", + " [,\n", + " , ]],\n", + " dtype=object)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "data.hist()\n" ] }, { @@ -44,11 +505,35 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(array([99869., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 131.]),\n", + " array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),\n", + " )" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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AFiLEAIAANYihAAAgLUIIQAAYC1CCAAAWIsQAgAA1iKEAACAtQghAABgLUIIAABYixACAADWIoQAAIC1CCEAAGAtQggAAFiLEAIAANYihAAAgLUIIQAAYC0rQujJJ59UUlKSxo4dq7S0NO3bt2+4lwQAAL4CRn0IvfzyyyosLNSDDz6oI0eO6Hvf+57+9E//VCdPnhzupQEAgGE26kOorKxMy5cv149+9CNNnTpVjz32mBITE7V169bhXhoAABhmYcO9gMHU3d2thoYGrVmzJmh7VlaW9u/ff9X7dHV1qaury/k5EAhIktrb2wdljZe6PhmUxx1Mg3UuAAAYKJdfq4wx15wb1SH00Ucfqbe3VwkJCUHbExIS1NraetX7lJaWav369X22JyYmDsoaRyL3Y8O9AgAArk9HR4fcbvcX7h/VIXRZSEhI0M/GmD7bLlu7dq1WrVrl/Hzp0iWdO3dOEyZM+ML73Kj29nYlJiaqublZMTExA/rY+F+c56HBeR4anOehwXkeGoN5no0x6ujokNfrvebcqA6huLg4hYaG9rn609bW1ucq0WUul0sulyto29e+9rXBWqIkKSYmhv/QhgDneWhwnocG53locJ6HxmCd52tdCbpsVL9ZOiIiQmlpaaqpqQnaXlNTo8zMzGFaFQAA+KoY1VeEJGnVqlXy+XyaMWOGMjIy9Mwzz+jkyZO65557hntpAABgmI36EFq6dKk+/vhjPfzww2ppaVFqaqr27NmjW265ZbiXJpfLpYceeqjPr+IwsDjPQ4PzPDQ4z0OD8zw0vgrnOcR82efKAAAARqlR/R4hAACAayGEAACAtQghAABgLUIIAABYixAaRE8++aSSkpI0duxYpaWlad++fdecr62tVVpamsaOHavJkyfrqaeeGqKVjnz9Ode/+tWvNH/+fN10002KiYlRRkaGfvOb3wzhakeu/v6Zvuz1119XWFiYvvWtbw3uAkeJ/p7nrq4uPfjgg7rlllvkcrn0h3/4h/qnf/qnIVrtyNXf87xjxw7dfvvtGjdunCZOnKi/+Zu/0ccffzxEqx2ZXnvtNS1evFher1chISH69a9//aX3GfLXQoNBUVFRYcLDw822bdvMsWPHzP3332+ioqLMBx98cNX59957z4wbN87cf//95tixY2bbtm0mPDzc/PKXvxzilY88/T3X999/v9mwYYM5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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Your response here" + "plt.hist(data[\"isFraud\"])" ] }, { @@ -60,11 +545,33 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 22, "metadata": {}, - "outputs": [], + "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": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here\n" + "data.dtypes\n" ] }, { @@ -76,11 +583,41 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0.22291581487489165" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here" + "\n", + "features = data[[\"amount\", \"oldbalanceOrg\", \"newbalanceOrig\", \"oldbalanceDest\",\"newbalanceDest\"]]\n", + "\n", + "#features = data.drop(\"type\", \"isFruad\", axis =1)\n", + "\n", + "target = data[\"isFraud\"]\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(features, target, test_size = 0.20)\n", + "\n", + "\n", + "#X = data[[\"amount\", \"oldbalanceOrg\", \"newbalanceOrig\", \"oldbalanceDest\",\"newbalanceDest\"]]\n", + "#X = data.drop(\"type\", axis =1)\n", + "\n", + "#y = data[\"isFraud\"]\n", + "\n", + "# sometimes its easier to use linear regression so people(CEO) can better understand it\n", + "\n", + "reg = LinearRegression()\n", + "reg.fit(X_train, y_train)\n", + "reg.score(X_test, y_test)" ] }, { @@ -90,15 +627,110 @@ "### Now pick a model of your choice and evaluate its accuracy." ] }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test data accuracy was 0.9994\n", + "Training data accuracy was 0.99895\n" + ] + } + ], + "source": [ + "\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "\n", + "model = DecisionTreeClassifier(max_depth = 3) \n", + "\n", + "model.fit(X_train, y_train)\n", + "\n", + "print(f\"Test data accuracy was {model.score(X_test, y_test)}\")\n", + "print(f\"Training data accuracy was {model.score(X_train, y_train)}\")" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(79888, 6)\n", + "(112, 6)\n" + ] + } + ], "source": [ - "# Your code here" + "\n", + "train = pd.concat([X_train, y_train], axis = 1)\n", + "\n", + "no_fraud = train[train[\"isFraud\"] == 0]\n", + "yes_fraud = train[train[\"isFraud\"] == 1]\n", + "\n", + "print(no_fraud.shape)\n", + "print(yes_fraud.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9599" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "yes_fraud_oversampled = resample(yes_fraud, # oversample from here\n", + " replace = True, # need replacement, since we do not have enough data from the minority class\n", + " n_samples = len(no_fraud), #equals the lenght of the other group\n", + " random_state = 0)\n", + "\n", + "train_oversampled = pd.concat([no_fraud, yes_fraud_oversampled], axis = 0)\n", + "\n", + "X_train_over = train_oversampled.drop(\"isFraud\", axis = 1)\n", + "y_train_over = train_oversampled[\"isFraud\"]\n", + "\n", + "model = LogisticRegression(max_iter=1000)\n", + "model.fit(X_train_over, y_train_over)\n", + "model.score(X_test, y_test)\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -112,7 +744,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Your response here" + "# tree classifeir works better, but too good.\n", + "# tried to oversampling and it seems more accurate" ] }, { @@ -125,7 +758,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -139,7 +772,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.10.9" } }, "nbformat": 4,