{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "nh8RwuXJMg6p" }, "source": [ "Dependencies Import\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "9u2Mg5v9MxcD" }, "outputs": [], "source": [ "# this code will import all the libraries that we need for this model.\n", "import numpy as np\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import accuracy_score" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "O_fDIYrVmjcO" }, "outputs": [], "source": [ "# read the dataset that is holding the information for the credit card\n", "# transactions.\n", "credit_card_data = pd.read_csv('creditcard.csv')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 256 }, "id": "4Rytoup0m7Gd", "outputId": "a7b44d70-6afa-4048-f14f-998ad8417b1c" }, "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", "
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
00.0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.363787...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620
10.01.1918570.2661510.1664800.4481540.060018-0.082361-0.0788030.085102-0.255425...-0.225775-0.6386720.101288-0.3398460.1671700.125895-0.0089830.0147242.690
21.0-1.358354-1.3401631.7732090.379780-0.5031981.8004990.7914610.247676-1.514654...0.2479980.7716790.909412-0.689281-0.327642-0.139097-0.055353-0.059752378.660
31.0-0.966272-0.1852261.792993-0.863291-0.0103091.2472030.2376090.377436-1.387024...-0.1083000.005274-0.190321-1.1755750.647376-0.2219290.0627230.061458123.500
42.0-1.1582330.8777371.5487180.403034-0.4071930.0959210.592941-0.2705330.817739...-0.0094310.798278-0.1374580.141267-0.2060100.5022920.2194220.21515369.990
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " Time V1 V2 V3 V4 V5 V6 V7 \\\n", "0 0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599 \n", "1 0.0 1.191857 0.266151 0.166480 0.448154 0.060018 -0.082361 -0.078803 \n", "2 1.0 -1.358354 -1.340163 1.773209 0.379780 -0.503198 1.800499 0.791461 \n", "3 1.0 -0.966272 -0.185226 1.792993 -0.863291 -0.010309 1.247203 0.237609 \n", "4 2.0 -1.158233 0.877737 1.548718 0.403034 -0.407193 0.095921 0.592941 \n", "\n", " V8 V9 ... V21 V22 V23 V24 V25 \\\n", "0 0.098698 0.363787 ... -0.018307 0.277838 -0.110474 0.066928 0.128539 \n", "1 0.085102 -0.255425 ... -0.225775 -0.638672 0.101288 -0.339846 0.167170 \n", "2 0.247676 -1.514654 ... 0.247998 0.771679 0.909412 -0.689281 -0.327642 \n", "3 0.377436 -1.387024 ... -0.108300 0.005274 -0.190321 -1.175575 0.647376 \n", "4 -0.270533 0.817739 ... -0.009431 0.798278 -0.137458 0.141267 -0.206010 \n", "\n", " V26 V27 V28 Amount Class \n", "0 -0.189115 0.133558 -0.021053 149.62 0 \n", "1 0.125895 -0.008983 0.014724 2.69 0 \n", "2 -0.139097 -0.055353 -0.059752 378.66 0 \n", "3 -0.221929 0.062723 0.061458 123.50 0 \n", "4 0.502292 0.219422 0.215153 69.99 0 \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# this will display the first 5 rows of the dataset.\n", "credit_card_data.head()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 256 }, "id": "IJ_IsflInDQc", "outputId": "8990db4d-0d1f-48d3-d3ea-918951f8160d" }, "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", "
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
284802172786.0-11.88111810.071785-9.834783-2.066656-5.364473-2.606837-4.9182157.3053341.914428...0.2134540.1118641.014480-0.5093481.4368070.2500340.9436510.8237310.770
284803172787.0-0.732789-0.0550802.035030-0.7385890.8682291.0584150.0243300.2948690.584800...0.2142050.9243840.012463-1.016226-0.606624-0.3952550.068472-0.05352724.790
284804172788.01.919565-0.301254-3.249640-0.5578282.6305153.031260-0.2968270.7084170.432454...0.2320450.578229-0.0375010.6401340.265745-0.0873710.004455-0.02656167.880
284805172788.0-0.2404400.5304830.7025100.689799-0.3779610.623708-0.6861800.6791450.392087...0.2652450.800049-0.1632980.123205-0.5691590.5466680.1088210.10453310.000
284806172792.0-0.533413-0.1897330.703337-0.506271-0.012546-0.6496171.577006-0.4146500.486180...0.2610570.6430780.3767770.008797-0.473649-0.818267-0.0024150.013649217.000
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " Time V1 V2 V3 V4 V5 \\\n", "284802 172786.0 -11.881118 10.071785 -9.834783 -2.066656 -5.364473 \n", "284803 172787.0 -0.732789 -0.055080 2.035030 -0.738589 0.868229 \n", "284804 172788.0 1.919565 -0.301254 -3.249640 -0.557828 2.630515 \n", "284805 172788.0 -0.240440 0.530483 0.702510 0.689799 -0.377961 \n", "284806 172792.0 -0.533413 -0.189733 0.703337 -0.506271 -0.012546 \n", "\n", " V6 V7 V8 V9 ... V21 V22 \\\n", "284802 -2.606837 -4.918215 7.305334 1.914428 ... 0.213454 0.111864 \n", "284803 1.058415 0.024330 0.294869 0.584800 ... 0.214205 0.924384 \n", "284804 3.031260 -0.296827 0.708417 0.432454 ... 0.232045 0.578229 \n", "284805 0.623708 -0.686180 0.679145 0.392087 ... 0.265245 0.800049 \n", "284806 -0.649617 1.577006 -0.414650 0.486180 ... 0.261057 0.643078 \n", "\n", " V23 V24 V25 V26 V27 V28 Amount \\\n", "284802 1.014480 -0.509348 1.436807 0.250034 0.943651 0.823731 0.77 \n", "284803 0.012463 -1.016226 -0.606624 -0.395255 0.068472 -0.053527 24.79 \n", "284804 -0.037501 0.640134 0.265745 -0.087371 0.004455 -0.026561 67.88 \n", "284805 -0.163298 0.123205 -0.569159 0.546668 0.108821 0.104533 10.00 \n", "284806 0.376777 0.008797 -0.473649 -0.818267 -0.002415 0.013649 217.00 \n", "\n", " Class \n", "284802 0 \n", "284803 0 \n", "284804 0 \n", "284805 0 \n", "284806 0 \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# this will display the last 5 rows of the dataset.\n", "credit_card_data.tail()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "m0SvHGpcpjs1", "outputId": "064c8080-e564-4c88-8514-04fd41deb663" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 284807 entries, 0 to 284806\n", "Data columns (total 31 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Time 284807 non-null float64\n", " 1 V1 284807 non-null float64\n", " 2 V2 284807 non-null float64\n", " 3 V3 284807 non-null float64\n", " 4 V4 284807 non-null float64\n", " 5 V5 284807 non-null float64\n", " 6 V6 284807 non-null float64\n", " 7 V7 284807 non-null float64\n", " 8 V8 284807 non-null float64\n", " 9 V9 284807 non-null float64\n", " 10 V10 284807 non-null float64\n", " 11 V11 284807 non-null float64\n", " 12 V12 284807 non-null float64\n", " 13 V13 284807 non-null float64\n", " 14 V14 284807 non-null float64\n", " 15 V15 284807 non-null float64\n", " 16 V16 284807 non-null float64\n", " 17 V17 284807 non-null float64\n", " 18 V18 284807 non-null float64\n", " 19 V19 284807 non-null float64\n", " 20 V20 284807 non-null float64\n", " 21 V21 284807 non-null float64\n", " 22 V22 284807 non-null float64\n", " 23 V23 284807 non-null float64\n", " 24 V24 284807 non-null float64\n", " 25 V25 284807 non-null float64\n", " 26 V26 284807 non-null float64\n", " 27 V27 284807 non-null float64\n", " 28 V28 284807 non-null float64\n", " 29 Amount 284807 non-null float64\n", " 30 Class 284807 non-null int64 \n", "dtypes: float64(30), int64(1)\n", "memory usage: 67.4 MB\n" ] } ], "source": [ "# information about the dataset showcasing the datatypes used and whether the\n", "#dataset contains null values or not.\n", "credit_card_data.info()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "NU32ZenZqCH6", "outputId": "e22998c6-591a-427d-8026-a7e6a5fedc2e" }, "outputs": [ { "data": { "text/plain": [ "Time 0\n", "V1 0\n", "V2 0\n", "V3 0\n", "V4 0\n", "V5 0\n", "V6 0\n", "V7 0\n", "V8 0\n", "V9 0\n", "V10 0\n", "V11 0\n", "V12 0\n", "V13 0\n", "V14 0\n", "V15 0\n", "V16 0\n", "V17 0\n", "V18 0\n", "V19 0\n", "V20 0\n", "V21 0\n", "V22 0\n", "V23 0\n", "V24 0\n", "V25 0\n", "V26 0\n", "V27 0\n", "V28 0\n", "Amount 0\n", "Class 0\n", "dtype: int64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check for the number of missing values on each column.\n", "credit_card_data.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Ui6hiIkMqQNs", "outputId": "143e95a6-2065-4bc1-cb04-98c79caac2ab" }, "outputs": [ { "data": { "text/plain": [ "Class\n", "0 284315\n", "1 492\n", "Name: count, dtype: int64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check the distribution between acceptable transaction and fraudulent transaction.\n", "credit_card_data['Class'].value_counts()" ] }, { "cell_type": "markdown", "metadata": { "id": "WJo6c7ESs1JV" }, "source": [ "Looking at the above values it shows that the dataset is very unstable and inbalanced." ] }, { "cell_type": "markdown", "metadata": { "id": "-R19R7eeq202" }, "source": [ "0---> would represent acceptable transaction\n", "\n", "1---> would the represent fradulent transaction." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "id": "XqcM9-T8rs2b" }, "outputs": [], "source": [ "# data seperation for analysis.\n", "acceptable = credit_card_data[credit_card_data.Class == 0]\n", "fraudulent = credit_card_data[credit_card_data.Class == 1]" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "hbW83hntr51b", "outputId": "0b363260-b65b-449c-fc9f-bbdda054bb11" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(284315, 31)\n", "(492, 31)\n" ] } ], "source": [ "print(acceptable.shape)\n", "print(fraudulent.shape)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "0mZn4ZWstJKy", "outputId": "aa58edd1-a752-4235-8b96-9902ad98b3b3" }, "outputs": [ { "data": { "text/plain": [ "count 284315.000000\n", "mean 88.291022\n", "std 250.105092\n", "min 0.000000\n", "25% 5.650000\n", "50% 22.000000\n", "75% 77.050000\n", "max 25691.160000\n", "Name: Amount, dtype: float64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# statistical measures.\n", "acceptable.Amount.describe()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "3KsBbYA-tZ4k", "outputId": "e9f7d531-5e55-4eb0-8c17-51b2288f75f4" }, "outputs": [ { "data": { "text/plain": [ "count 492.000000\n", "mean 122.211321\n", "std 256.683288\n", "min 0.000000\n", "25% 1.000000\n", "50% 9.250000\n", "75% 105.890000\n", "max 2125.870000\n", "Name: Amount, dtype: float64" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fraudulent.Amount.describe()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 193 }, "id": "FQj8FwYXt4v5", "outputId": "8a887195-36c3-49a4-cf36-e1e65ec4190c" }, "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", "
TimeV1V2V3V4V5V6V7V8V9...V20V21V22V23V24V25V26V27V28Amount
Class
094838.2022580.008258-0.0062710.012171-0.0078600.0054530.0024190.009637-0.0009870.004467...-0.000644-0.001235-0.0000240.0000700.000182-0.000072-0.000089-0.000295-0.00013188.291022
180746.806911-4.7719483.623778-7.0332814.542029-3.151225-1.397737-5.5687310.570636-2.581123...0.3723190.7135880.014049-0.040308-0.1051300.0414490.0516480.1705750.075667122.211321
\n", "

2 rows × 30 columns

\n", "
" ], "text/plain": [ " Time V1 V2 V3 V4 V5 \\\n", "Class \n", "0 94838.202258 0.008258 -0.006271 0.012171 -0.007860 0.005453 \n", "1 80746.806911 -4.771948 3.623778 -7.033281 4.542029 -3.151225 \n", "\n", " V6 V7 V8 V9 ... V20 V21 \\\n", "Class ... \n", "0 0.002419 0.009637 -0.000987 0.004467 ... -0.000644 -0.001235 \n", "1 -1.397737 -5.568731 0.570636 -2.581123 ... 0.372319 0.713588 \n", "\n", " V22 V23 V24 V25 V26 V27 V28 \\\n", "Class \n", "0 -0.000024 0.000070 0.000182 -0.000072 -0.000089 -0.000295 -0.000131 \n", "1 0.014049 -0.040308 -0.105130 0.041449 0.051648 0.170575 0.075667 \n", "\n", " Amount \n", "Class \n", "0 88.291022 \n", "1 122.211321 \n", "\n", "[2 rows x 30 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# value comparison of both transactions.\n", "credit_card_data.groupby('Class').mean()" ] }, { "cell_type": "markdown", "metadata": { "id": "jqC4ru07uV7e" }, "source": [ "Data Sampling" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "rwFSIIBUugNW", "outputId": "7d1990bf-c955-4a08-e708-390d0ba5b394" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "99.82725143693798\n", "0.1727485630620034\n" ] } ], "source": [ "# before sampling the dataset...\n", "# calculate the percentage of both the acceptable and fraudulent transactions of\n", "# the dataset.\n", "classes=credit_card_data['Class'].value_counts()\n", "acceptable_percent=classes[0]/credit_card_data['Class'].count()*100\n", "fraudulent_percent=classes[1]/credit_card_data['Class'].count()*100\n", "print(acceptable_percent)\n", "print(fraudulent_percent)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 472 }, "id": "-LtU3QNczM0H", "outputId": "c5555535-2d60-4523-ac45-a0650f554cc7" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlUAAAHHCAYAAACWQK1nAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA3p0lEQVR4nO3de1hVZf738c8GBTwBIXJKEs0jRZKoSHbQ5Oc2qYmkGXUcU1ObDCyl8jB5nuaysTEPiVq/anCaLHUmndLCMTxVkgcMT4846mhoCpoEWy0BYT9/9Lged2AK3gro+3Vd67pc6/6ue3/XLjYf1l57bZvT6XQKAAAAV8WtuhsAAAC4ERCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgCgEg4fPiybzaa//OUvxuZcv369bDab1q9fb2xOANcfoQrATSE1NVU2m03btm2r7lYA3KAIVQAAAAYQqgAAAAwgVAGApOLiYk2aNElRUVHy8fFRgwYNdN9992ndunWX3GfWrFlq1qyZ6tWrpwceeEC7d+8uV5Odna3HH39cfn5+8vLyUseOHfXRRx9dtp/9+/crISFBQUFB8vLyUtOmTdWvXz8VFhZe1XECuHbqVHcDAFATOBwOvfXWW+rfv7+GDx+u06dP6+2335bdbteWLVsUGRnpUv+3v/1Np0+fVmJios6dO6c5c+bowQcf1K5duxQYGChJ2rNnj7p27apbb71V48aNU4MGDbR06VLFx8frn//8px577LEKeykuLpbdbldRUZFGjhypoKAgffvtt1q5cqUKCgrk4+NzrZ8OAFXhBICbwF//+lenJOfWrVsrHD9//ryzqKjIZdv333/vDAwMdD755JPWtkOHDjklOevVq+c8evSotX3z5s1OSc7Ro0db23r06OGMiIhwnjt3ztpWVlbmvOeee5ytWrWytq1bt84pyblu3Tqn0+l0fv31105JzmXLll3VMQO4vnj7DwAkubu7y8PDQ5JUVlam/Px8nT9/Xh07dtT27dvL1cfHx+vWW2+11jt37qzo6Gh98sknkqT8/HytXbtWv/nNb3T69Gl99913+u6773Tq1CnZ7Xbt379f3377bYW9XDgTtXr1av3www+mDxXANUKoAoD/Z9GiRbrrrrvk5eWlxo0bq0mTJlq1alWF1zG1atWq3LbWrVvr8OHDkqQDBw7I6XRq4sSJatKkicsyefJkSdKJEycq7KN58+ZKTk7WW2+9JX9/f9ntdqWkpHA9FVDDcU0VAEj6+9//rsGDBys+Pl4vvviiAgIC5O7urunTp+vgwYOVnq+srEyS9MILL8hut1dY07Jly0vuP3PmTA0ePFj/+te/9O9//1vPPvuspk+frq+++kpNmzatdD8Arj1CFQBI+sc//qEWLVroww8/lM1ms7ZfOKv0c/v37y+37T//+Y/CwsIkSS1atJAk1a1bV7GxsVXqKSIiQhEREZowYYI2bdqkrl27auHChXr55ZerNB+Aa4u3/wBAP11TJUlOp9PatnnzZmVkZFRYv2LFCpdrorZs2aLNmzfroYcekiQFBASoW7dueuONN3T8+PFy+588efKSvTgcDp0/f95lW0REhNzc3FRUVHTlBwXguuJMFYCbyjvvvKO0tLRy27t166YPP/xQjz32mOLi4nTo0CEtXLhQ4eHhOnPmTLn6li1b6t5779WIESNUVFSk2bNnq3HjxhozZoxVk5KSonvvvVcREREaPny4WrRooby8PGVkZOjo0aPasWNHhT2uXbtWSUlJ+vWvf63WrVvr/Pnzevfdd+Xu7q6EhARzTwYAowhVAG4qCxYsqHB7Tk6Ozpw5ozfeeEOrV69WeHi4/v73v2vZsmUVftHxE088ITc3N82ePVsnTpxQ586dNW/ePAUHB1s14eHh2rZtm6ZOnarU1FSdOnVKAQEBuvvuuzVp0qRL9ti+fXvZ7XZ9/PHH+vbbb1W/fn21b99en376qbp06XLVzwGAa8PmvPhcNwAAAKqEa6oAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAdyn6joqKyvTsWPH1KhRI5evwQAAADWX0+nU6dOnFRISIje3S5+PIlRdR8eOHVNoaGh1twEAAKrgyJEjv/iF5oSq66hRo0aSfvqP4u3tXc3dAACAK+FwOBQaGmr9Hr8UQtV1dOEtP29vb0IVAAC1zOUu3eFCdQAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAgDrV3QBuDmHjVlV3C7iODr8SV90tAMB1x5kqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCgWkPV9OnT1alTJzVq1EgBAQGKj4/Xvn37XGq6desmm83msjz99NMuNTk5OYqLi1P9+vUVEBCgF198UefPn3epWb9+vTp06CBPT0+1bNlSqamp5fpJSUlRWFiYvLy8FB0drS1btriMnzt3TomJiWrcuLEaNmyohIQE5eXlmXkyAABArVatoWrDhg1KTEzUV199pTVr1qikpEQ9e/bU2bNnXeqGDx+u48ePW8uMGTOssdLSUsXFxam4uFibNm3SokWLlJqaqkmTJlk1hw4dUlxcnLp3766srCyNGjVKw4YN0+rVq62aJUuWKDk5WZMnT9b27dvVvn172e12nThxwqoZPXq0Pv74Yy1btkwbNmzQsWPH1KdPn2v4DAEAgNrC5nQ6ndXdxAUnT55UQECANmzYoPvvv1/ST2eqIiMjNXv27Ar3+fTTT/Xwww/r2LFjCgwMlCQtXLhQY8eO1cmTJ+Xh4aGxY8dq1apV2r17t7Vfv379VFBQoLS0NElSdHS0OnXqpHnz5kmSysrKFBoaqpEjR2rcuHEqLCxUkyZNtHjxYj3++OOSpOzsbLVr104ZGRnq0qXLZY/P4XDIx8dHhYWF8vb2rvLzVBuFjVtV3S3gOjr8Slx1twAAxlzp7+8adU1VYWGhJMnPz89l+3vvvSd/f3/deeedGj9+vH744QdrLCMjQxEREVagkiS73S6Hw6E9e/ZYNbGxsS5z2u12ZWRkSJKKi4uVmZnpUuPm5qbY2FirJjMzUyUlJS41bdu21W233WbV/FxRUZEcDofLAgAAbkx1qruBC8rKyjRq1Ch17dpVd955p7X9t7/9rZo1a6aQkBDt3LlTY8eO1b59+/Thhx9KknJzc10ClSRrPTc39xdrHA6HfvzxR33//fcqLS2tsCY7O9uaw8PDQ76+vuVqLjzOz02fPl1Tp06t5DMBAABqoxoTqhITE7V792598cUXLtufeuop698REREKDg5Wjx49dPDgQd1+++3Xu81KGT9+vJKTk611h8Oh0NDQauwIAABcKzXi7b+kpCStXLlS69atU9OmTX+xNjo6WpJ04MABSVJQUFC5T+BdWA8KCvrFGm9vb9WrV0/+/v5yd3evsObiOYqLi1VQUHDJmp/z9PSUt7e3ywIAAG5M1RqqnE6nkpKStHz5cq1du1bNmze/7D5ZWVmSpODgYElSTEyMdu3a5fIpvTVr1sjb21vh4eFWTXp6uss8a9asUUxMjCTJw8NDUVFRLjVlZWVKT0+3aqKiolS3bl2Xmn379iknJ8eqAQAAN69qffsvMTFRixcv1r/+9S81atTIujbJx8dH9erV08GDB7V48WL17t1bjRs31s6dOzV69Gjdf//9uuuuuyRJPXv2VHh4uAYOHKgZM2YoNzdXEyZMUGJiojw9PSVJTz/9tObNm6cxY8boySef1Nq1a7V06VKtWvX/P5GWnJysQYMGqWPHjurcubNmz56ts2fPasiQIVZPQ4cOVXJysvz8/OTt7a2RI0cqJibmij75BwAAbmzVGqoWLFgg6afbJlzsr3/9qwYPHiwPDw999tlnVsAJDQ1VQkKCJkyYYNW6u7tr5cqVGjFihGJiYtSgQQMNGjRI06ZNs2qaN2+uVatWafTo0ZozZ46aNm2qt956S3a73arp27evTp48qUmTJik3N1eRkZFKS0tzuXh91qxZcnNzU0JCgoqKimS32zV//vxr9OwAAIDapEbdp+pGx32qcLPgPlUAbiS18j5VAAAAtRWhCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAHVGqqmT5+uTp06qVGjRgoICFB8fLz27dvnUnPu3DklJiaqcePGatiwoRISEpSXl+dSk5OTo7i4ONWvX18BAQF68cUXdf78eZea9evXq0OHDvL09FTLli2Vmpparp+UlBSFhYXJy8tL0dHR2rJlS6V7AQAAN6dqDVUbNmxQYmKivvrqK61Zs0YlJSXq2bOnzp49a9WMHj1aH3/8sZYtW6YNGzbo2LFj6tOnjzVeWlqquLg4FRcXa9OmTVq0aJFSU1M1adIkq+bQoUOKi4tT9+7dlZWVpVGjRmnYsGFavXq1VbNkyRIlJydr8uTJ2r59u9q3by+73a4TJ05ccS8AAODmZXM6nc7qbuKCkydPKiAgQBs2bND999+vwsJCNWnSRIsXL9bjjz8uScrOzla7du2UkZGhLl266NNPP9XDDz+sY8eOKTAwUJK0cOFCjR07VidPnpSHh4fGjh2rVatWaffu3dZj9evXTwUFBUpLS5MkRUdHq1OnTpo3b54kqaysTKGhoRo5cqTGjRt3Rb1cjsPhkI+PjwoLC+Xt7W30uavpwsatqu4WcB0dfiWuulsAAGOu9Pd3jbqmqrCwUJLk5+cnScrMzFRJSYliY2OtmrZt2+q2225TRkaGJCkjI0MRERFWoJIku90uh8OhPXv2WDUXz3Gh5sIcxcXFyszMdKlxc3NTbGysVXMlvfxcUVGRHA6HywIAAG5MNSZUlZWVadSoUeratavuvPNOSVJubq48PDzk6+vrUhsYGKjc3Fyr5uJAdWH8wtgv1TgcDv3444/67rvvVFpaWmHNxXNcrpefmz59unx8fKwlNDT0Cp8NAABQ29SYUJWYmKjdu3frgw8+qO5WjBk/frwKCwut5ciRI9XdEgAAuEbqVHcDkpSUlKSVK1dq48aNatq0qbU9KChIxcXFKigocDlDlJeXp6CgIKvm55/Su/CJvItrfv4pvby8PHl7e6tevXpyd3eXu7t7hTUXz3G5Xn7O09NTnp6elXgmAABAbVWtZ6qcTqeSkpK0fPlyrV27Vs2bN3cZj4qKUt26dZWenm5t27dvn3JychQTEyNJiomJ0a5du1w+pbdmzRp5e3srPDzcqrl4jgs1F+bw8PBQVFSUS01ZWZnS09OtmivpBQAA3Lyq9UxVYmKiFi9erH/9619q1KiRdW2Sj4+P6tWrJx8fHw0dOlTJycny8/OTt7e3Ro4cqZiYGOvTdj179lR4eLgGDhyoGTNmKDc3VxMmTFBiYqJ1lujpp5/WvHnzNGbMGD355JNau3atli5dqlWr/v8n0pKTkzVo0CB17NhRnTt31uzZs3X27FkNGTLE6ulyvQAAgJtXtYaqBQsWSJK6devmsv2vf/2rBg8eLEmaNWuW3NzclJCQoKKiItntds2fP9+qdXd318qVKzVixAjFxMSoQYMGGjRokKZNm2bVNG/eXKtWrdLo0aM1Z84cNW3aVG+99ZbsdrtV07dvX508eVKTJk1Sbm6uIiMjlZaW5nLx+uV6AQAAN68adZ+qGx33qcLNgvtUAbiR1Mr7VAEAANRWhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMKBKoapFixY6depUue0FBQVq0aLFVTcFAABQ21QpVB0+fFilpaXlthcVFenbb7+96qYAAABqmzqVKf7oo4+sf69evVo+Pj7WemlpqdLT0xUWFmasOQAAgNqiUqEqPj5ekmSz2TRo0CCXsbp16yosLEwzZ8401hwAAEBtUalQVVZWJklq3ry5tm7dKn9//2vSFAAAQG1TqVB1waFDh0z3AQAAUKtVKVRJUnp6utLT03XixAnrDNYF77zzzlU3BgAAUJtUKVRNnTpV06ZNU8eOHRUcHCybzWa6LwAAgFqlSqFq4cKFSk1N1cCBA033AwAAUCtV6T5VxcXFuueee0z3AgAAUGtVKVQNGzZMixcvNt0LAABArVWlt//OnTunN998U5999pnuuusu1a1b12X8tddeM9IcAABAbVGlULVz505FRkZKknbv3u0yxkXrAADgZlSlt//WrVt3yWXt2rVXPM/GjRv1yCOPKCQkRDabTStWrHAZHzx4sGw2m8vSq1cvl5r8/HwNGDBA3t7e8vX11dChQ3XmzBmXmp07d+q+++6Tl5eXQkNDNWPGjHK9LFu2TG3btpWXl5ciIiL0ySefuIw7nU5NmjRJwcHBqlevnmJjY7V///4rPlYAAHBjq1KoMuXs2bNq3769UlJSLlnTq1cvHT9+3Fref/99l/EBAwZoz549WrNmjVauXKmNGzfqqaeessYdDod69uypZs2aKTMzU6+++qqmTJmiN99806rZtGmT+vfvr6FDh+rrr79WfHy84uPjXc7CzZgxQ3PnztXChQu1efNmNWjQQHa7XefOnTP4jAAAgNrK5nQ6nZXdqXv37r/4Nl9lzlZZjdhsWr58ufX9gtJPZ6oKCgrKncG6YO/evQoPD9fWrVvVsWNHSVJaWpp69+6to0ePKiQkRAsWLNBLL72k3NxceXh4SJLGjRunFStWKDs7W5LUt29fnT17VitXrrTm7tKliyIjI7Vw4UI5nU6FhITo+eef1wsvvCBJKiwsVGBgoFJTU9WvX78rOkaHwyEfHx8VFhbK29u7sk9RrRY2blV1t4Dr6PArcdXdAgAYc6W/v6t0pioyMlLt27e3lvDwcBUXF2v79u2KiIioctMVWb9+vQICAtSmTRuNGDFCp06dssYyMjLk6+trBSpJio2NlZubmzZv3mzV3H///VagkiS73a59+/bp+++/t2piY2NdHtdutysjI0PST1/Lk5ub61Lj4+Oj6Ohoq6YiRUVFcjgcLgsAALgxVelC9VmzZlW4fcqUKeWuZ7oavXr1Up8+fdS8eXMdPHhQf/jDH/TQQw8pIyND7u7uys3NVUBAgMs+derUkZ+fn3JzcyVJubm5at68uUtNYGCgNXbLLbcoNzfX2nZxzcVzXLxfRTUVmT59uqZOnVqFIwcAALWN0Wuqfve73xn93r9+/frpV7/6lSIiIhQfH6+VK1dq69atWr9+vbHHuJbGjx+vwsJCazly5Eh1twQAAK4Ro6EqIyNDXl5eJqd00aJFC/n7++vAgQOSpKCgIJ04ccKl5vz588rPz1dQUJBVk5eX51JzYf1yNRePX7xfRTUV8fT0lLe3t8sCAABuTFV6+69Pnz4u606nU8ePH9e2bds0ceJEI41V5OjRozp16pSCg4MlSTExMSooKFBmZqaioqIk/XSRfFlZmaKjo62al156SSUlJdZNStesWaM2bdrolltusWrS09M1atQo67HWrFmjmJgYSVLz5s0VFBSk9PR06/5cDodDmzdv1ogRI67Z8QIAgNqjSqHKx8fHZd3NzU1t2rTRtGnT1LNnzyue58yZM9ZZJ+mnC8KzsrLk5+cnPz8/TZ06VQkJCQoKCtLBgwc1ZswYtWzZUna7XZLUrl079erVS8OHD9fChQtVUlKipKQk9evXTyEhIZKk3/72t5o6daqGDh2qsWPHavfu3ZozZ47LdWHPPfecHnjgAc2cOVNxcXH64IMPtG3bNuu2CzabTaNGjdLLL7+sVq1aqXnz5po4caJCQkJcPq0IAABuXlW6pYIp69evV/fu3cttHzRokBYsWKD4+Hh9/fXXKigoUEhIiHr27Kk//vGPLheM5+fnKykpSR9//LHc3NyUkJCguXPnqmHDhlbNzp07lZiYqK1bt8rf318jR47U2LFjXR5z2bJlmjBhgg4fPqxWrVppxowZ6t27tzXudDo1efJkvfnmmyooKNC9996r+fPnq3Xr1ld8vNxSATcLbqkA4EZypb+/rypUZWZmau/evZKkO+64Q3fffXdVp7opEKpwsyBUAbiRXOnv7yq9/XfixAn169dP69evl6+vrySpoKBA3bt31wcffKAmTZpUqWkAAIDaqkqf/hs5cqROnz6tPXv2KD8/X/n5+dq9e7ccDoeeffZZ0z0CAADUeFU6U5WWlqbPPvtM7dq1s7aFh4crJSWlUheqAwAA3CiqdKaqrKzMuj3BxerWrauysrKrbgoAAKC2qVKoevDBB/Xcc8/p2LFj1rZvv/1Wo0ePVo8ePYw1BwAAUFtUKVTNmzdPDodDYWFhuv3223X77berefPmcjgcev311033CAAAUONV6Zqq0NBQbd++XZ999pmys7Ml/XQjztjYWKPNAQAA1BaVOlO1du1ahYeHy+FwyGaz6X/+5380cuRIjRw5Up06ddIdd9yhzz///Fr1CgAAUGNVKlTNnj1bw4cPr/DGVz4+Pvr973+v1157zVhzAAAAtUWlQtWOHTvUq1evS4737NlTmZmZV90UAABAbVOpUJWXl1fhrRQuqFOnjk6ePHnVTQEAANQ2lQpVt956q3bv3n3J8Z07dyo4OPiqmwIAAKhtKhWqevfurYkTJ+rcuXPlxn788UdNnjxZDz/8sLHmAAAAaotK3VJhwoQJ+vDDD9W6dWslJSWpTZs2kqTs7GylpKSotLRUL7300jVpFAAAoCarVKgKDAzUpk2bNGLECI0fP15Op1OSZLPZZLfblZKSosDAwGvSKAAAQE1W6Zt/NmvWTJ988om+//57HThwQE6nU61atdItt9xyLfoDAACoFap0R3VJuuWWW9SpUyeTvQAAANRaVfruPwAAALgiVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYUK2hauPGjXrkkUcUEhIim82mFStWuIw7nU5NmjRJwcHBqlevnmJjY7V//36Xmvz8fA0YMEDe3t7y9fXV0KFDdebMGZeanTt36r777pOXl5dCQ0M1Y8aMcr0sW7ZMbdu2lZeXlyIiIvTJJ59UuhcAAHDzqtZQdfbsWbVv314pKSkVjs+YMUNz587VwoULtXnzZjVo0EB2u13nzp2zagYMGKA9e/ZozZo1WrlypTZu3KinnnrKGnc4HOrZs6eaNWumzMxMvfrqq5oyZYrefPNNq2bTpk3q37+/hg4dqq+//lrx8fGKj4/X7t27K9ULAAC4edmcTqezupuQJJvNpuXLlys+Pl7ST2eGQkJC9Pzzz+uFF16QJBUWFiowMFCpqanq16+f9u7dq/DwcG3dulUdO3aUJKWlpal37946evSoQkJCtGDBAr300kvKzc2Vh4eHJGncuHFasWKFsrOzJUl9+/bV2bNntXLlSqufLl26KDIyUgsXLryiXq6Ew+GQj4+PCgsL5e3tbeR5qy3Cxq2q7hZwHR1+Ja66WwAAY67093eNvabq0KFDys3NVWxsrLXNx8dH0dHRysjIkCRlZGTI19fXClSSFBsbKzc3N23evNmquf/++61AJUl2u1379u3T999/b9Vc/DgXai48zpX0UpGioiI5HA6XBQAA3JhqbKjKzc2VJAUGBrpsDwwMtMZyc3MVEBDgMl6nTh35+fm51FQ0x8WPcamai8cv10tFpk+fLh8fH2sJDQ29zFEDAIDaqsaGqhvB+PHjVVhYaC1Hjhyp7pYAAMA1UmNDVVBQkCQpLy/PZXteXp41FhQUpBMnTriMnz9/Xvn5+S41Fc1x8WNcqubi8cv1UhFPT095e3u7LAAA4MZUY0NV8+bNFRQUpPT0dGubw+HQ5s2bFRMTI0mKiYlRQUGBMjMzrZq1a9eqrKxM0dHRVs3GjRtVUlJi1axZs0Zt2rTRLbfcYtVc/DgXai48zpX0AgAAbm7VGqrOnDmjrKwsZWVlSfrpgvCsrCzl5OTIZrNp1KhRevnll/XRRx9p165deuKJJxQSEmJ9QrBdu3bq1auXhg8fri1btujLL79UUlKS+vXrp5CQEEnSb3/7W3l4eGjo0KHas2ePlixZojlz5ig5Odnq47nnnlNaWppmzpyp7OxsTZkyRdu2bVNSUpIkXVEvAADg5lanOh9827Zt6t69u7V+IegMGjRIqampGjNmjM6ePaunnnpKBQUFuvfee5WWliYvLy9rn/fee09JSUnq0aOH3NzclJCQoLlz51rjPj4++ve//63ExERFRUXJ399fkyZNcrmX1T333KPFixdrwoQJ+sMf/qBWrVppxYoVuvPOO62aK+kFAADcvGrMfapuBtynCjcL7lMF4EZS6+9TBQAAUJsQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhQo0PVlClTZLPZXJa2bdta4+fOnVNiYqIaN26shg0bKiEhQXl5eS5z5OTkKC4uTvXr11dAQIBefPFFnT9/3qVm/fr16tChgzw9PdWyZUulpqaW6yUlJUVhYWHy8vJSdHS0tmzZck2OGQAA1E41OlRJ0h133KHjx49byxdffGGNjR49Wh9//LGWLVumDRs26NixY+rTp481Xlpaqri4OBUXF2vTpk1atGiRUlNTNWnSJKvm0KFDiouLU/fu3ZWVlaVRo0Zp2LBhWr16tVWzZMkSJScna/Lkydq+fbvat28vu92uEydOXJ8nAQAA1Hg2p9PprO4mLmXKlClasWKFsrKyyo0VFhaqSZMmWrx4sR5//HFJUnZ2ttq1a6eMjAx16dJFn376qR5++GEdO3ZMgYGBkqSFCxdq7NixOnnypDw8PDR27FitWrVKu3fvtubu16+fCgoKlJaWJkmKjo5Wp06dNG/ePElSWVmZQkNDNXLkSI0bN+6Kj8fhcMjHx0eFhYXy9vau6tNSK4WNW1XdLeA6OvxKXHW3AADGXOnv7xp/pmr//v0KCQlRixYtNGDAAOXk5EiSMjMzVVJSotjYWKu2bdu2uu2225SRkSFJysjIUEREhBWoJMlut8vhcGjPnj1WzcVzXKi5MEdxcbEyMzNdatzc3BQbG2vVXEpRUZEcDofLAgAAbkw1OlRFR0crNTVVaWlpWrBggQ4dOqT77rtPp0+fVm5urjw8POTr6+uyT2BgoHJzcyVJubm5LoHqwviFsV+qcTgc+vHHH/Xdd9+ptLS0wpoLc1zK9OnT5ePjYy2hoaGVfg4AAEDtUKe6G/glDz30kPXvu+66S9HR0WrWrJmWLl2qevXqVWNnV2b8+PFKTk621h0OB8EKAIAbVI0+U/Vzvr6+at26tQ4cOKCgoCAVFxeroKDApSYvL09BQUGSpKCgoHKfBrywfrkab29v1atXT/7+/nJ3d6+w5sIcl+Lp6Slvb2+XBQAA3JhqVag6c+aMDh48qODgYEVFRalu3bpKT0+3xvft26ecnBzFxMRIkmJiYrRr1y6XT+mtWbNG3t7eCg8Pt2ounuNCzYU5PDw8FBUV5VJTVlam9PR0qwYAAKBGh6oXXnhBGzZs0OHDh7Vp0yY99thjcnd3V//+/eXj46OhQ4cqOTlZ69atU2ZmpoYMGaKYmBh16dJFktSzZ0+Fh4dr4MCB2rFjh1avXq0JEyYoMTFRnp6ekqSnn35a//3vfzVmzBhlZ2dr/vz5Wrp0qUaPHm31kZycrP/93//VokWLtHfvXo0YMUJnz57VkCFDquV5AQAANU+Nvqbq6NGj6t+/v06dOqUmTZro3nvv1VdffaUmTZpIkmbNmiU3NzclJCSoqKhIdrtd8+fPt/Z3d3fXypUrNWLECMXExKhBgwYaNGiQpk2bZtU0b95cq1at0ujRozVnzhw1bdpUb731lux2u1XTt29fnTx5UpMmTVJubq4iIyOVlpZW7uJ1AABw86rR96m60XCfKtwsuE8VgBvJDXOfKgAAgNqAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoQoAAMAAQhUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwABCFQAAgAGEKgAAAAMIVQAAAAYQqgAAAAwgVAEAABhAqAIAADCAUAUAAGAAoaqSUlJSFBYWJi8vL0VHR2vLli3V3RIAAKgBCFWVsGTJEiUnJ2vy5Mnavn272rdvL7vdrhMnTlR3awAAoJoRqirhtdde0/DhwzVkyBCFh4dr4cKFql+/vt55553qbg0AAFQzQtUVKi4uVmZmpmJjY61tbm5uio2NVUZGRjV2BgAAaoI61d1AbfHdd9+ptLRUgYGBLtsDAwOVnZ1d4T5FRUUqKiqy1gsLCyVJDofj2jVaQ5UV/VDdLeA6uhn/H7+Z3Tl5dXW3gOto91R7dbdw3V14TXM6nb9YR6i6hqZPn66pU6eW2x4aGloN3QDXj8/s6u4AwLVyM/98nz59Wj4+PpccJ1RdIX9/f7m7uysvL89le15enoKCgircZ/z48UpOTrbWy8rKlJ+fr8aNG8tms13TflH9HA6HQkNDdeTIEXl7e1d3OwAM4uf75uJ0OnX69GmFhIT8Yh2h6gp5eHgoKipK6enpio+Pl/RTSEpPT1dSUlKF+3h6esrT09Nlm6+v7zXuFDWNt7c3L7rADYqf75vHL52huoBQVQnJyckaNGiQOnbsqM6dO2v27Nk6e/ashgwZUt2tAQCAakaoqoS+ffvq5MmTmjRpknJzcxUZGam0tLRyF68DAICbD6GqkpKSki75dh9wMU9PT02ePLncW8AAaj9+vlERm/Nynw8EAADAZXHzTwAAAAMIVQAAAAYQqgAAAAwgVAE1XLdu3TRq1KhfrAkLC9Ps2bOvSz/AzW7w4MHW/QqvlM1m04oVK65JP6g5CFW4oWRkZMjd3V1xcXHV3Uo5BB/g6gwePFg2m63ccuDAgepurVrwmlLzEKpwQ3n77bc1cuRIbdy4UceOHavudgAY1qtXLx0/ftxlad68uUtNcXFxNXWHmx2hCjeMM2fOaMmSJRoxYoTi4uKUmprqMv7xxx+rU6dO8vLykr+/vx577DFrrKioSGPHjlVoaKg8PT3VsmVLvf3229b47t279dBDD6lhw4YKDAzUwIED9d1331nj3bp1s+5h5uPjI39/f02cONH6RvNu3brpm2++0ejRo62/riXp1KlT6t+/v2699VbVr19fERERev/998sd2/nz5y85d0UKCgo0bNgwNWnSRN7e3nrwwQe1Y8eOKj2vQE3i6empoKAgl6VHjx5KSkrSqFGj5O/vL7vdLkl67bXXFBERoQYNGig0NFTPPPOMzpw5Y801ZcoURUZGusw/e/ZshYWFWeulpaVKTk6Wr6+vGjdurDFjxpT72avojFFkZKSmTJlyyeM4cuSIfvOb38jX11d+fn569NFHdfjwYWv8wluMf/nLXxQcHKzGjRsrMTFRJSUlki79moLqRajCDWPp0qVq27at2rRpo9/97nd65513rBe/VatW6bHHHlPv3r319ddfKz09XZ07d7b2feKJJ/T+++9r7ty52rt3r9544w01bNhQ0k8B5cEHH9Tdd9+tbdu2KS0tTXl5efrNb37j8viLFi1SnTp1tGXLFs2ZM0evvfaa3nrrLUnShx9+qKZNm2ratGnWX9eSdO7cOUVFRWnVqlXavXu3nnrqKQ0cOFBbtmy54rkr8utf/1onTpzQp59+qszMTHXo0EE9evRQfn7+1T/RQA20aNEieXh46Msvv9TChQslSW5ubpo7d6727NmjRYsWae3atRozZkyl5p05c6ZSU1P1zjvv6IsvvlB+fr6WL19+Vb2WlJTIbrerUaNG+vzzz/Xll1+qYcOG6tWrl8tZtnXr1ungwYNat26dFi1apNTUVOuPxUu9pqCaOYEbxD333OOcPXu20+l0OktKSpz+/v7OdevWOZ1OpzMmJsY5YMCACvfbt2+fU5JzzZo1FY7/8Y9/dPbs2dNl25EjR5ySnPv27XM6nU7nAw884GzXrp2zrKzMqhk7dqyzXbt21nqzZs2cs2bNuuxxxMXFOZ9//nlrvbJzf/75505vb2/nuXPnXOa9/fbbnW+88cZlHx+oqQYNGuR0d3d3NmjQwFoef/xx5wMPPOC8++67L7v/smXLnI0bN7bWJ0+e7Gzfvr1LzaxZs5zNmjWz1oODg50zZsyw1ktKSpxNmzZ1Pvroo9a2in6227dv75w8ebK1Lsm5fPlyp9PpdL777rvONm3auPxMFxUVOevVq+dcvXq1dazNmjVznj9/3qr59a9/7ezbt+8vPi6qF2eqcEPYt2+ftmzZov79+0uS6tSpo759+1pv4WVlZalHjx4V7puVlSV3d3c98MADFY7v2LFD69atU8OGDa2lbdu2kqSDBw9adV26dHE5BR8TE6P9+/ertLT0kn2Xlpbqj3/8oyIiIuTn56eGDRtq9erVysnJcamrzNw7duzQmTNn1LhxY5eeDx065NIvUBt1795dWVlZ1jJ37lxJUlRUVLnazz77TD169NCtt96qRo0aaeDAgTp16pR++OGHK3qswsJCHT9+XNHR0da2OnXqqGPHjld1DDt27NCBAwfUqFEj6+fTz89P586dc/kZveOOO+Tu7m6tBwcH68SJE1f12Li2+O4/3BDefvttnT9/XiEhIdY2p9MpT09PzZs3T/Xq1bvkvr80Jv10rdYjjzyiP//5z+XGgoODq960pFdffVVz5szR7NmzrWs/Ro0adVUX2p45c0bBwcFav359uTFfX9+qNwvUAA0aNFDLli0r3H6xw4cP6+GHH9aIESP0pz/9SX5+fvriiy80dOhQFRcXq379+nJzcyt3fdSFa5Yqo7LznDlzRlFRUXrvvffKjTVp0sT6d926dV3GbDabysrKKt0frh9CFWq98+fP629/+5tmzpypnj17uozFx8fr/fff11133aX09HQNGTKk3P4REREqKyvThg0bFBsbW268Q4cO+uc//6mwsDDVqXPpH5nNmze7rH/11Vdq1aqV9Zemh4dHuTNLX375pR599FH97ne/kySVlZXpP//5j8LDwys198/7zc3NVZ06dVwuuAVuJpmZmSorK9PMmTPl5vbTmzJLly51qWnSpIlyc3PldDqtM8FZWVnWuI+Pj4KDg7V582bdf//9kn56vblwneLF81x8TZPD4dChQ4cu2VuHDh20ZMkSBQQEyNvbu8rHWNFrCqoXb/+h1lu5cqW+//57DR06VHfeeafLkpCQoLfffluTJ0/W+++/r8mTJ2vv3r3atWuXdeYpLCxMgwYN0pNPPqkVK1bo0KFDWr9+vfUCnJiYqPz8fPXv319bt27VwYMHtXr1ag0ZMsTlBS0nJ0fJycnat2+f3n//fb3++ut67rnnrPGwsDBt3LhR3377rfXJwVatWmnNmjXatGmT9u7dq9///vfKy8srd4yXm/tisbGxiomJUXx8vP7973/r8OHD2rRpk1566SVt27bN2PMO1GQtW7ZUSUmJXn/9df33v//Vu+++a13AfkG3bt108uRJzZgxQwcPHlRKSoo+/fRTl5rnnntOr7zyilasWKHs7Gw988wzKigocKl58MEH9e677+rzzz/Xrl27NGjQoAr/4LlgwIAB8vf316OPPqrPP//ces159tlndfTo0Ss+xopeU1C9CFWo9d5++23FxsbKx8en3FhCQoK2bdsmPz8/LVu2TB999JEiIyP14IMPunzCbsGCBXr88cf1zDPPqG3btho+fLjOnj0rSQoJCdGXX36p0tJS9ezZUxERERo1apR8fX2tv4Clnz5B+OOPP6pz585KTEzUc889p6eeesoanzZtmg4fPqzbb7/dOsU/YcIEdejQQXa7Xd26dVNQUFCFd2q+3NwXs9ls+uSTT3T//fdryJAhat26tfr166dvvvlGgYGBVXqOgdqmffv2eu211/TnP/9Zd955p9577z1Nnz7dpaZdu3aaP3++UlJS1L59e23ZskUvvPCCS83zzz+vgQMHatCgQYqJiVGjRo1cbsciSePHj9cDDzyghx9+WHFxcYqPj9ftt99+yd7q16+vjRs36rbbblOfPn3Url07DR06VOfOnavUmauKXlNQvWzOn78RDKDSunXrpsjISO5uDAA3Mc5UAQAAGECoAgAAMIC3/wAAAAzgTBUAAIABhCoAAAADCFUAAAAGEKoAAAAMIFQBwBWy2WxasWJFdbcBoIYiVAHA/5Obm6uRI0eqRYsW8vT0VGhoqB555BGlp6dXd2sAagG+UBkAJB0+fFhdu3aVr6+vXn31VUVERKikpESrV69WYmKisrOzq7tFADUcZ6oAQNIzzzwjm82mLVu2KCEhQa1bt9Ydd9yh5ORkffXVVxXuM3bsWLVu3Vr169dXixYtNHHiRJWUlFjjO3bsUPfu3dWoUSN5e3srKirK+lLrb775Ro888ohuueUWNWjQQHfccYc++eST63KsAK4NzlQBuOnl5+crLS1Nf/rTn9SgQYNy476+vhXu16hRI6WmpiokJES7du3S8OHD1ahRI40ZM0aSNGDAAN19991asGCB3N3dlZWVpbp160qSEhMTVVxcrI0bN6pBgwb6P//n/6hhw4bX7BgBXHuEKgA3vQMHDsjpdKpt27aV2m/ChAnWv8PCwvTCCy/ogw8+sEJVTk6OXnzxRWveVq1aWfU5OTlKSEhQRESEJKlFixZXexgAqhlv/wG46VX127qWLFmirl27KigoSA0bNtSECROUk5NjjScnJ2vYsGGKjY3VK6+8ooMHD1pjzz77rF5++WV17dpVkydP1s6dO6/6OABUL0IVgJteq1atZLPZKnUxekZGhgYMGKDevXtr5cqV+vrrr/XSSy+puLjYqpkyZYr27NmjuLg4rV27VuHh4Vq+fLkkadiwYfrvf/+rgQMHateuXerYsaNef/1148cG4PrhC5UBQNJDDz2kXbt2ad++feWuqyooKJCvr69sNpuWL1+u+Ph4zZw5U/Pnz3c5+zRs2DD94x//UEFBQYWP0b9/f509e1YfffRRubHx48dr1apVnLECajHOVAGApJSUFJWWlqpz58765z//qf3792vv3r2aO3euYmJiytW3atVKOTk5+uCDD3Tw4EHNnTvXOgslST/++KOSkpK0fv16ffPNN/ryyy+1detWtWvXTpI0atQorV69WocOHdL27du1bt06awxA7cSF6gCgny4U3759u/70pz/p+eef1/Hjx9WkSRNFRUVpwYIF5ep/9atfafTo0UpKSlJRUZHi4uI0ceJETZkyRZLk7u6uU6dO6YknnlBeXp78/f3Vp08fTZ06VZJUWlqqxMREHT16VN7e3urVq5dmzZp1PQ8ZgGG8/QcAAGAAb/8BAAAYQKgCAAAwgFAFAABgAKEKAADAAEIVAACAAYQqAAAAAwhVAAAABhCqAAAADCBUAQAAGECoAgAAMIBQBQAAYAChCgAAwID/C56MiMX76ejOAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "labels = ['Acceptable','Fraudulent']\n", "count = credit_card_data.value_counts(credit_card_data['Class'])\n", "count.plot(kind = \"bar\",rot=0)\n", "plt.title(\"Labels\")\n", "plt.ylabel(\"Count\")\n", "plt.xticks(range(2), labels)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "d-hJnOqkugu8" }, "source": [ "create a sample dataset that contains a normal distribution of both transactions." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "id": "Tqwwev53w6VK" }, "outputs": [], "source": [ "acceptable_sample=acceptable.sample(n=492)" ] }, { "cell_type": "markdown", "metadata": { "id": "kLZdgOrcxMWm" }, "source": [ "Concatinate the sample dataset into the already existing fraudulent dataframe" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "id": "w2xOTMlcw_G2" }, "outputs": [], "source": [ "# axis = 0 (rows)\n", "# axis = 1 (columns)\n", "new_dataset=pd.concat([acceptable_sample,fraudulent],axis=0)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 256 }, "id": "23TLgKczx0gQ", "outputId": "9443a2c0-db45-4f46-9811-68ebaaf8ab2b" }, "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", "
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
12738378312.0-1.0336841.3174061.2401140.697731-0.237730-0.6268970.0885130.433316-0.773460...-0.186250-0.581192-0.0595050.3797180.0256100.2925200.014281-0.0570682.690
10201568022.01.2309480.0698720.4842871.382559-0.395183-0.196777-0.1812410.0275170.737572...-0.128193-0.160311-0.147329-0.1278660.734199-0.2634370.0332760.0151723.290
8923962487.00.986023-0.5414231.5537500.737388-1.3135360.481834-1.0999140.4517020.890411...0.2912720.874943-0.0438220.2655050.0915300.5040730.0329540.02637451.200
13118579516.0-1.201172-0.5483772.6314392.8544920.5790700.961969-0.0917080.2219700.172547...-0.171671-0.3757410.168826-0.4513430.0280460.021925-0.066196-0.071260124.090
236961149039.01.7253360.0058620.4999814.083052-0.4984620.598846-0.5681350.2232760.078894...-0.206461-0.4990580.354503-0.079029-0.510911-0.3055830.024437-0.01689956.780
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " Time V1 V2 V3 V4 V5 V6 \\\n", "127383 78312.0 -1.033684 1.317406 1.240114 0.697731 -0.237730 -0.626897 \n", "102015 68022.0 1.230948 0.069872 0.484287 1.382559 -0.395183 -0.196777 \n", "89239 62487.0 0.986023 -0.541423 1.553750 0.737388 -1.313536 0.481834 \n", "131185 79516.0 -1.201172 -0.548377 2.631439 2.854492 0.579070 0.961969 \n", "236961 149039.0 1.725336 0.005862 0.499981 4.083052 -0.498462 0.598846 \n", "\n", " V7 V8 V9 ... V21 V22 V23 \\\n", "127383 0.088513 0.433316 -0.773460 ... -0.186250 -0.581192 -0.059505 \n", "102015 -0.181241 0.027517 0.737572 ... -0.128193 -0.160311 -0.147329 \n", "89239 -1.099914 0.451702 0.890411 ... 0.291272 0.874943 -0.043822 \n", "131185 -0.091708 0.221970 0.172547 ... -0.171671 -0.375741 0.168826 \n", "236961 -0.568135 0.223276 0.078894 ... -0.206461 -0.499058 0.354503 \n", "\n", " V24 V25 V26 V27 V28 Amount Class \n", "127383 0.379718 0.025610 0.292520 0.014281 -0.057068 2.69 0 \n", "102015 -0.127866 0.734199 -0.263437 0.033276 0.015172 3.29 0 \n", "89239 0.265505 0.091530 0.504073 0.032954 0.026374 51.20 0 \n", "131185 -0.451343 0.028046 0.021925 -0.066196 -0.071260 124.09 0 \n", "236961 -0.079029 -0.510911 -0.305583 0.024437 -0.016899 56.78 0 \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# view the first 5 rows of the new dataset picked at random.\n", "new_dataset.head()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 256 }, "id": "L7NHGvkay8DH", "outputId": "bf1a4a78-44d0-42d0-e790-971e37421787" }, "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", "
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
279863169142.0-1.9278831.125653-4.5183311.749293-1.566487-2.010494-0.8828500.697211-2.064945...0.778584-0.3191890.639419-0.2948850.5375030.7883950.2926800.147968390.001
280143169347.01.3785591.289381-5.0042471.4118500.442581-1.326536-1.4131700.248525-1.127396...0.3706120.028234-0.145640-0.0810490.5218750.7394670.3891520.1866370.761
280149169351.0-0.6761431.126366-2.2137000.468308-1.120541-0.003346-2.2347391.210158-0.652250...0.7518260.8341080.1909440.032070-0.7396950.4711110.3851070.19436177.891
281144169966.0-3.1138320.585864-5.3997301.817092-0.840618-2.943548-2.2080021.058733-1.632333...0.583276-0.269209-0.456108-0.183659-0.3281680.6061160.884876-0.253700245.001
281674170348.01.9919760.158476-2.5834410.4086701.151147-0.0966950.223050-0.0683840.577829...-0.164350-0.295135-0.072173-0.4502610.313267-0.2896170.002988-0.01530942.531
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " Time V1 V2 V3 V4 V5 V6 \\\n", "279863 169142.0 -1.927883 1.125653 -4.518331 1.749293 -1.566487 -2.010494 \n", "280143 169347.0 1.378559 1.289381 -5.004247 1.411850 0.442581 -1.326536 \n", "280149 169351.0 -0.676143 1.126366 -2.213700 0.468308 -1.120541 -0.003346 \n", "281144 169966.0 -3.113832 0.585864 -5.399730 1.817092 -0.840618 -2.943548 \n", "281674 170348.0 1.991976 0.158476 -2.583441 0.408670 1.151147 -0.096695 \n", "\n", " V7 V8 V9 ... V21 V22 V23 \\\n", "279863 -0.882850 0.697211 -2.064945 ... 0.778584 -0.319189 0.639419 \n", "280143 -1.413170 0.248525 -1.127396 ... 0.370612 0.028234 -0.145640 \n", "280149 -2.234739 1.210158 -0.652250 ... 0.751826 0.834108 0.190944 \n", "281144 -2.208002 1.058733 -1.632333 ... 0.583276 -0.269209 -0.456108 \n", "281674 0.223050 -0.068384 0.577829 ... -0.164350 -0.295135 -0.072173 \n", "\n", " V24 V25 V26 V27 V28 Amount Class \n", "279863 -0.294885 0.537503 0.788395 0.292680 0.147968 390.00 1 \n", "280143 -0.081049 0.521875 0.739467 0.389152 0.186637 0.76 1 \n", "280149 0.032070 -0.739695 0.471111 0.385107 0.194361 77.89 1 \n", "281144 -0.183659 -0.328168 0.606116 0.884876 -0.253700 245.00 1 \n", "281674 -0.450261 0.313267 -0.289617 0.002988 -0.015309 42.53 1 \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_dataset.tail()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sDt3k12o0pip", "outputId": "693193e5-a80c-4b3a-d7a6-26aa8545fd32" }, "outputs": [ { "data": { "text/plain": [ "Class\n", "0 492\n", "1 492\n", "Name: count, dtype: int64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_dataset['Class'].value_counts()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 193 }, "id": "yPZxI9bv3VhQ", "outputId": "7c050329-f69c-4444-908b-6989712559a0" }, "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", "
TimeV1V2V3V4V5V6V7V8V9...V20V21V22V23V24V25V26V27V28Amount
Class
094071.0873980.0527360.0287290.034768-0.0730950.033608-0.0818620.034549-0.020167-0.047859...0.0107220.000671-0.034084-0.0015080.0257860.0417840.0237640.0191370.00184480.302053
180746.806911-4.7719483.623778-7.0332814.542029-3.151225-1.397737-5.5687310.570636-2.581123...0.3723190.7135880.014049-0.040308-0.1051300.0414490.0516480.1705750.075667122.211321
\n", "

2 rows × 30 columns

\n", "
" ], "text/plain": [ " Time V1 V2 V3 V4 V5 \\\n", "Class \n", "0 94071.087398 0.052736 0.028729 0.034768 -0.073095 0.033608 \n", "1 80746.806911 -4.771948 3.623778 -7.033281 4.542029 -3.151225 \n", "\n", " V6 V7 V8 V9 ... V20 V21 \\\n", "Class ... \n", "0 -0.081862 0.034549 -0.020167 -0.047859 ... 0.010722 0.000671 \n", "1 -1.397737 -5.568731 0.570636 -2.581123 ... 0.372319 0.713588 \n", "\n", " V22 V23 V24 V25 V26 V27 V28 \\\n", "Class \n", "0 -0.034084 -0.001508 0.025786 0.041784 0.023764 0.019137 0.001844 \n", "1 0.014049 -0.040308 -0.105130 0.041449 0.051648 0.170575 0.075667 \n", "\n", " Amount \n", "Class \n", "0 80.302053 \n", "1 122.211321 \n", "\n", "[2 rows x 30 columns]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_dataset.groupby('Class').mean()" ] }, { "cell_type": "markdown", "metadata": { "id": "4IleywPs2xHB" }, "source": [ "Splitting dataset into training and testind sets. (80%, 10%)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "id": "MX647MoK1l9q" }, "outputs": [], "source": [ "# x represent the features(content of the dataset) and y represent the class.\n", "x = new_dataset.drop(columns = 'Class',axis = 1)\n", "y = new_dataset['Class']" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "3mEbVdXH1unU", "outputId": "0daa8179-bc57-41ba-dcc7-a5272de72ae4" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Time V1 V2 V3 V4 V5 V6 \\\n", "127383 78312.0 -1.033684 1.317406 1.240114 0.697731 -0.237730 -0.626897 \n", "102015 68022.0 1.230948 0.069872 0.484287 1.382559 -0.395183 -0.196777 \n", "89239 62487.0 0.986023 -0.541423 1.553750 0.737388 -1.313536 0.481834 \n", "131185 79516.0 -1.201172 -0.548377 2.631439 2.854492 0.579070 0.961969 \n", "236961 149039.0 1.725336 0.005862 0.499981 4.083052 -0.498462 0.598846 \n", "... ... ... ... ... ... ... ... \n", "279863 169142.0 -1.927883 1.125653 -4.518331 1.749293 -1.566487 -2.010494 \n", "280143 169347.0 1.378559 1.289381 -5.004247 1.411850 0.442581 -1.326536 \n", "280149 169351.0 -0.676143 1.126366 -2.213700 0.468308 -1.120541 -0.003346 \n", "281144 169966.0 -3.113832 0.585864 -5.399730 1.817092 -0.840618 -2.943548 \n", "281674 170348.0 1.991976 0.158476 -2.583441 0.408670 1.151147 -0.096695 \n", "\n", " V7 V8 V9 ... V20 V21 V22 \\\n", "127383 0.088513 0.433316 -0.773460 ... 0.114241 -0.186250 -0.581192 \n", "102015 -0.181241 0.027517 0.737572 ... -0.220772 -0.128193 -0.160311 \n", "89239 -1.099914 0.451702 0.890411 ... -0.074475 0.291272 0.874943 \n", "131185 -0.091708 0.221970 0.172547 ... 0.585115 -0.171671 -0.375741 \n", "236961 -0.568135 0.223276 0.078894 ... -0.208526 -0.206461 -0.499058 \n", "... ... ... ... ... ... ... ... \n", "279863 -0.882850 0.697211 -2.064945 ... 1.252967 0.778584 -0.319189 \n", "280143 -1.413170 0.248525 -1.127396 ... 0.226138 0.370612 0.028234 \n", "280149 -2.234739 1.210158 -0.652250 ... 0.247968 0.751826 0.834108 \n", "281144 -2.208002 1.058733 -1.632333 ... 0.306271 0.583276 -0.269209 \n", "281674 0.223050 -0.068384 0.577829 ... -0.017652 -0.164350 -0.295135 \n", "\n", " V23 V24 V25 V26 V27 V28 Amount \n", "127383 -0.059505 0.379718 0.025610 0.292520 0.014281 -0.057068 2.69 \n", "102015 -0.147329 -0.127866 0.734199 -0.263437 0.033276 0.015172 3.29 \n", "89239 -0.043822 0.265505 0.091530 0.504073 0.032954 0.026374 51.20 \n", "131185 0.168826 -0.451343 0.028046 0.021925 -0.066196 -0.071260 124.09 \n", "236961 0.354503 -0.079029 -0.510911 -0.305583 0.024437 -0.016899 56.78 \n", "... ... ... ... ... ... ... ... \n", "279863 0.639419 -0.294885 0.537503 0.788395 0.292680 0.147968 390.00 \n", "280143 -0.145640 -0.081049 0.521875 0.739467 0.389152 0.186637 0.76 \n", "280149 0.190944 0.032070 -0.739695 0.471111 0.385107 0.194361 77.89 \n", "281144 -0.456108 -0.183659 -0.328168 0.606116 0.884876 -0.253700 245.00 \n", "281674 -0.072173 -0.450261 0.313267 -0.289617 0.002988 -0.015309 42.53 \n", "\n", "[984 rows x 30 columns]\n" ] } ], "source": [ "# this prints the data except the class column.\n", "print(x)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "1EqhO2lx2hhL", "outputId": "7791c58a-b03c-470b-a970-d46f7c0cb219" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "127383 0\n", "102015 0\n", "89239 0\n", "131185 0\n", "236961 0\n", " ..\n", "279863 1\n", "280143 1\n", "280149 1\n", "281144 1\n", "281674 1\n", "Name: Class, Length: 984, dtype: int64\n" ] } ], "source": [ "# prints the classes.\n", "print(y)" ] }, { "cell_type": "markdown", "metadata": { "id": "qSqUv3E43xBc" }, "source": [ "Splitting dataset into training and testind sets. (80%, 20%)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "id": "-H0kGxDV3wlW" }, "outputs": [], "source": [ "x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,stratify=y,random_state=2)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "PZkFOLu74aMv", "outputId": "2953cca8-2139-4958-c27f-95bd792626be" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(984, 30) (787, 30) (197, 30)\n" ] } ], "source": [ "# original data, the training data, test data split.\n", "print(x.shape,x_train.shape,x_test.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "i_NpWsJq5xbV" }, "source": [ "Training the Model." ] }, { "cell_type": "markdown", "metadata": { "id": "emS5fKrq54_t" }, "source": [ "Logistics Regression Model" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "id": "MSeO0e5N53x8" }, "outputs": [], "source": [ "model = LogisticRegression()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 75 }, "id": "X7OyTmKh6EFQ", "outputId": "23e23b9b-ee32-4756-f0e9-f2ae0751ef7b" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Fraud_Detection\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:469: 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" ] }, { "data": { "text/html": [ "
LogisticRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "LogisticRegression()" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# train the logistics regression model using the training data.\n", "model.fit(x_train, y_train)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "id": "22xncDXh79gU" }, "outputs": [], "source": [ "# check the accuracy of the training data.\n", "x_train_prediction = model.predict(x_train)\n", "training_data_accuracy = accuracy_score(x_train_prediction, y_train)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_Hcjw3J48aRC", "outputId": "947658b6-562a-4c69-9715-c9c2e5dc06c7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy on the Training data : 94.40914866581956\n" ] } ], "source": [ "# if the accuracy is above 80% then it means the model is good\n", "print('Accuracy on the Training data : ', training_data_accuracy * 100)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "id": "ANEy8pA-9LJC" }, "outputs": [], "source": [ "# accuracy on the test data\n", "x_test_prediction = model.predict(x_test)\n", "test_data_accuracy = accuracy_score(x_test_prediction, y_test)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "t1LQFPd19WWn", "outputId": "f9c3a93e-c88e-4de1-ad56-659bc5853244" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy on the Test data : 91.87817258883248\n" ] } ], "source": [ "print('Accuracy on the Test data : ', test_data_accuracy * 100)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Ct-52L3RADo0" }, "outputs": [ { "ename": "", "evalue": "", "output_type": "error", "traceback": [ "\u001b[1;31mRunning cells with 'c:\\Users\\chris\\AppData\\Local\\Programs\\Python\\Python311\\python.exe' requires the ipykernel package.\n", "\u001b[1;31mRun the following command to install 'ipykernel' into the Python environment. \n", "\u001b[1;31mCommand: 'c:/Users/chris/AppData/Local/Programs/Python/Python311/python.exe -m pip install ipykernel -U --user --force-reinstall'" ] } ], "source": [ "import pickle\n", "pickle.dump(model,open('model.pkl','wb'))" ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3", "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.12.4" } }, "nbformat": 4, "nbformat_minor": 0 }