{ "cells": [ { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "DjeRcOvm_U3T" }, "source": [ "

\n", " \n", " \"Skills\n", " \n", "

\n", "\n", "

Classification with Python

\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "rBeBXlrP_U3X" }, "source": [ "In this notebook we try to practice all the classification algorithms that we have learned in this course.\n", "\n", "We load a dataset using Pandas library, and apply the following algorithms, and find the best one for this specific dataset by accuracy evaluation methods.\n", "\n", "Let's first load required libraries:\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "dKUKEMJO_U3X" }, "outputs": [], "source": [ "import itertools\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib.ticker import NullFormatter\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.ticker as ticker\n", "from sklearn import preprocessing\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "9QQydlTu_U3Z" }, "source": [ "### About dataset\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "yXI5bsM-_U3Z" }, "source": [ "This dataset is about past loans. The **Loan_train.csv** data set includes details of 346 customers whose loan are already paid off or defaulted. It includes following fields:\n", "\n", "| Field | Description |\n", "| -------------- | ------------------------------------------------------------------------------------- |\n", "| Loan_status | Whether a loan is paid off on in collection |\n", "| Principal | Basic principal loan amount at the |\n", "| Terms | Origination terms which can be weekly (7 days), biweekly, and monthly payoff schedule |\n", "| Effective_date | When the loan got originated and took effects |\n", "| Due_date | Since it’s one-time payoff schedule, each loan has one single due date |\n", "| Age | Age of applicant |\n", "| Education | Education of applicant |\n", "| Gender | The gender of applicant |\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "iR_s4qyQ_U3a" }, "source": [ "Let's download the dataset\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/" }, "id": "n2wA8ZCe_U3a", "outputId": "77a32a70-bf4f-46ef-a1a7-ae5921471f57" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "--2022-08-21 15:21:12-- https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/FinalModule_Coursera/data/loan_train.csv\n", "Resolving cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud (cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud)... 169.63.118.104\n", "Connecting to cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud (cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud)|169.63.118.104|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 23101 (23K) [text/csv]\n", "Saving to: ‘loan_train.csv’\n", "\n", "loan_train.csv 100%[===================>] 22.56K --.-KB/s in 0s \n", "\n", "2022-08-21 15:21:12 (249 MB/s) - ‘loan_train.csv’ saved [23101/23101]\n", "\n" ] } ], "source": [ "!wget -O loan_train.csv https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/FinalModule_Coursera/data/loan_train.csv" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "wmj3KXds_U3b" }, "source": [ "### Load Data From CSV File\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "CiM5OEd8_U3c", "outputId": "2f2d2ebd-7387-4246-cc88-57d80172bd6f" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n", "0 0 0 PAIDOFF 1000 30 9/8/2016 \n", "1 2 2 PAIDOFF 1000 30 9/8/2016 \n", "2 3 3 PAIDOFF 1000 15 9/8/2016 \n", "3 4 4 PAIDOFF 1000 30 9/9/2016 \n", "4 6 6 PAIDOFF 1000 30 9/9/2016 \n", "\n", " due_date age education Gender \n", "0 10/7/2016 45 High School or Below male \n", "1 10/7/2016 33 Bechalor female \n", "2 9/22/2016 27 college male \n", "3 10/8/2016 28 college female \n", "4 10/8/2016 29 college male " ], "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", "
Unnamed: 0Unnamed: 0.1loan_statusPrincipaltermseffective_datedue_dateageeducationGender
000PAIDOFF1000309/8/201610/7/201645High School or Belowmale
122PAIDOFF1000309/8/201610/7/201633Bechalorfemale
233PAIDOFF1000159/8/20169/22/201627collegemale
344PAIDOFF1000309/9/201610/8/201628collegefemale
466PAIDOFF1000309/9/201610/8/201629collegemale
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 3 } ], "source": [ "df = pd.read_csv('loan_train.csv')\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "rfkBjCMG_U3c", "outputId": "e4b4f10e-dfd0-4256-dcdf-301fe2577a49" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(346, 10)" ] }, "metadata": {}, "execution_count": 4 } ], "source": [ "df.shape" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "J1cZrYuM_U3d" }, "source": [ "### Convert to date time object\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "c4ZXji2V_U3d", "outputId": "722dee7d-9ce1-4693-c6a5-a24a79a2c199" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n", "0 0 0 PAIDOFF 1000 30 2016-09-08 \n", "1 2 2 PAIDOFF 1000 30 2016-09-08 \n", "2 3 3 PAIDOFF 1000 15 2016-09-08 \n", "3 4 4 PAIDOFF 1000 30 2016-09-09 \n", "4 6 6 PAIDOFF 1000 30 2016-09-09 \n", "\n", " due_date age education Gender \n", "0 2016-10-07 45 High School or Below male \n", "1 2016-10-07 33 Bechalor female \n", "2 2016-09-22 27 college male \n", "3 2016-10-08 28 college female \n", "4 2016-10-08 29 college male " ], "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", "
Unnamed: 0Unnamed: 0.1loan_statusPrincipaltermseffective_datedue_dateageeducationGender
000PAIDOFF1000302016-09-082016-10-0745High School or Belowmale
122PAIDOFF1000302016-09-082016-10-0733Bechalorfemale
233PAIDOFF1000152016-09-082016-09-2227collegemale
344PAIDOFF1000302016-09-092016-10-0828collegefemale
466PAIDOFF1000302016-09-092016-10-0829collegemale
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 5 } ], "source": [ "df['due_date'] = pd.to_datetime(df['due_date'])\n", "df['effective_date'] = pd.to_datetime(df['effective_date'])\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "lEZSf8Vr_U3e" }, "source": [ "# Data visualization and pre-processing\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "f-Ebzf3Z_U3e" }, "source": [ "Let’s see how many of each class is in our data set\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/" }, "id": "WYaB2AV1_U3e", "outputId": "9646cd83-114e-4ed5-894d-6dde8df1885a" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "PAIDOFF 260\n", "COLLECTION 86\n", "Name: loan_status, dtype: int64" ] }, "metadata": {}, "execution_count": 6 } ], "source": [ "df['loan_status'].value_counts()" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "m4rGKjko_U3f" }, "source": [ "260 people have paid off the loan on time while 86 have gone into collection\n" ] }, { "cell_type": "markdown", "metadata": { "id": "KseI7tBv_U3f" }, "source": [ "Let's plot some columns to underestand data better:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "kG7QCmrB_U3f" }, "outputs": [], "source": [ "# notice: installing seaborn might takes a few minutes\n", "#!conda install -c anaconda seaborn -y" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 225 }, "id": "5ZNGGvIA_U3f", "outputId": "67724c27-5985-4b19-bc1f-f35b80f9a955" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "import seaborn as sns\n", "\n", "bins = np.linspace(df.Principal.min(), df.Principal.max(), 10)\n", "g = sns.FacetGrid(df, col=\"Gender\", hue=\"loan_status\", palette=\"Set1\", col_wrap=2)\n", "g.map(plt.hist, 'Principal', bins=bins, ec=\"k\")\n", "\n", "g.axes[-1].legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 225 }, "id": "wB78ZuaF_U3g", "outputId": "18006cf6-4364-4bd2-eb3a-d977cb6627ff" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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vva1r3HvvffuVuftt9/OBRdc0IGWdy4fQZmZdbFTTz2VNWvWADBjxgyuuuoqBg0axLPPPtvqa/v06cODDz7I7Nmzee+993jkkUc4+eSTGT16NAD77bcf9957L7feemuntqErOEGZmXWh7du385vf/Ibhw4ezdetWnnrqKc4++2wuuugiZsyYkVcdffv2paamhtdff51Vq1Zx/PHH77T9iCOOYPPmzXz44YcAzJw5s2ko72c/+1nTft/97nebylesWJFeI1PiIT4zsy6wZcsWamtrgdwR1MSJE5kzZw6nnXYavXv35vzzz+emm27i7rvvpmfPnq3W13iOKR/FOsSXV4KSVA98BHwKbI+IOkkHAzOBaqAeGBcR73dOmGZmxa35OahGM2bMYPHixVRXVwOwadMmnn76aU4//fS91vXRRx9RX1/PkUceybBhw1i0aNFO29944w369OlD3759U21DV2vLEN9pEVEbEXXJ+vXA/IgYAsxP1s3MLA8ffvghzzzzDG+//Tb19fXU19dz3333tTrMt3nzZr797W9z7rnnctBBB3HxxRezePFinnrqKSB3pHbllVdy7bXXdkUzOlVHhvjGAiOT59OBhcB1HYzHzKzTDRowINXfEQ4aMKDNr5k1axajRo1i3333bSobO3Ys1157Ldu2bdtt/9NOO42IYMeOHZx33nn84Ac/AHJHZk888QRXXHEFkydP5tNPP+WSSy7h8ssvb3+DMkL5jGNKehN4n9zMh/8eEVMlfRARBybbBbzfuL7LaycBkwAGDRp0/FtvvZVm/EVHUqo/1G3LOLR1ubx/Nu9+0rlWr17NUUcdVegwjD3+LVrsK/kO8Z0SEccB/wxMlvSl5hsj979ki/9TRsTUiKiLiLqKioo8386se3E/MdtdXgkqIt5JHtcDs4AvAO9KqgRIHtd3VpBmZtb9tJqgJO0v6YDG58BoYCUwBxif7DYeeKKzgjQzs+4nn4sk+gOzkttv9AIeiYjfSnoReEzSROAtYFznhWlmZt1NqwkqIt4AjmmhfBPw5c4IyszMzLc6MjOzTHKCMrNu59CqQalOt3Fo1aBW33PdunVceOGFHHHEERx//PGcccYZvPbaa61OldHS75mqq6vZuHHjTmW7TqtRW1vLq6++CsBrr73GGWecwZAhQzjuuOMYN27cTvfn69OnD0OHDm2ajmPhwoWc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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "bins = np.linspace(df.age.min(), df.age.max(), 10)\n", "g = sns.FacetGrid(df, col=\"Gender\", hue=\"loan_status\", palette=\"Set1\", col_wrap=2)\n", "g.map(plt.hist, 'age', bins=bins, ec=\"k\")\n", "\n", "g.axes[-1].legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "BQsCUcKY_U3g" }, "source": [ "# Pre-processing: Feature selection/extraction\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "1mr9kNlf_U3g" }, "source": [ "### Let's look at the day of the week people get the loan\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 225 }, "id": "ruDlAT0p_U3h", "outputId": "1566d64c-efa1-4955-bceb-019a5e7bbb5b" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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YPny5Rx33HH07duXwYMHM3r06E3m5+vevTv9+vVruhzHnDlzOOGEE5r6njFjBoMGDeKggw5i4MCBzJgxo+m5cePG0atXr6bvbq1Zs6ZpZoyO8gULzazsrHrrTQ7/6e9T6+/Zn2979reI4KSTTmLs2LHcc889ADz//PO8/fbbjBs3bpuXymiLli6rsX79eo4//niuvfZaRowYAcCcOXPYe++9m6ZeGjp0KJMnT6aurq7p+UbPP/88EydOZNasWdTU1PD6669zzDHHsP/++zNo0CAgd62rO+64g3POOafNMW+Lj6DMzAps9uzZVFRU8L3vfa+p7ZBDDmH58uUFv1TG3XffzRFHHNFUnCBXkA4++OC81p88eTKXXXYZNTU1ANTU1HDppZcyadKkpmUmTJjAddddx8aNG7fWTbu4QJmZFdiLL764xSUxgLwuldEWzYftamtr+eijj7a67Xy1FGNdXR1Lly5tety7d2++9rWv8etf/7rd22mJh/jMzErE1q6c2xkuvfRSRo4cyfHHH59anz6CMjMrsAEDBrBw4cIt2vv3779Fe9qXytjatvPVUowLFy5kwIABm7T17duX2tpa7rvvvnZva3MuUGZmBTZs2DA+/vhjpkyZ0tT2wgsv0K9fv4JfKuPb3/42f/jDH/jd737X1DZ37lxefPHFvNafOHEiV155JStWrABgxYoVXHHFFfzgBz/YYtkf//jHTJ48OZW4wUN8ZlaGKnt9vtUz79ra37ZI4qGHHmLChAlcffXVdOvWjerqaq6//vpWL5UxderUTU7rfuaZZwAYNGgQO+yQO8YYPXo0gwYN4t5772X+/PlNy95888189atfZebMmUyYMIEJEyZQUVHBoEGDuOGGG/Lat9raWq6++mpGjBjBhg0bqKio4JprrqG2tnaLZQcMGMDgwYNZtGhRXn23Jq/LbaTFlxGwYvLlNsqXL7eRHW253IaH+MzMLJMyVaD6VFam9s3uPpWVxd4dMzPrgEx9BrWyoSG1IZg0L+dsZtu/iEBq16irpaStHyll6gjKzKwQunXrxtq1a9v8D9LSExGsXbuWbt265b1Opo6gzMwKoaqqivr6elavXl3sUMpat27dqKrKf5TMBcrMSl5FRUXTXHK2/fAQn5mZZZILlJmZZZILlJmZZZILlJmZZZILlJmZZVJeBUrS7pIekPSypGWSjpC0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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "df['dayofweek'] = df['effective_date'].dt.dayofweek\n", "bins = np.linspace(df.dayofweek.min(), df.dayofweek.max(), 10)\n", "g = sns.FacetGrid(df, col=\"Gender\", hue=\"loan_status\", palette=\"Set1\", col_wrap=2)\n", "g.map(plt.hist, 'dayofweek', bins=bins, ec=\"k\")\n", "g.axes[-1].legend()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "I9nZxei5_U3h" }, "source": [ "We see that people who get the loan at the end of the week don't pay it off, so let's use Feature binarization to set a threshold value less than day 4\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 354 }, "id": "YWFKHuZc_U3h", "outputId": "d05254fe-b075-4f35-b363-a66909acc936" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n", "0 0 0 PAIDOFF 1000 30 2016-09-08 \n", "1 2 2 PAIDOFF 1000 30 2016-09-08 \n", "2 3 3 PAIDOFF 1000 15 2016-09-08 \n", "3 4 4 PAIDOFF 1000 30 2016-09-09 \n", "4 6 6 PAIDOFF 1000 30 2016-09-09 \n", "\n", " due_date age education Gender dayofweek weekend \n", "0 2016-10-07 45 High School or Below male 3 0 \n", "1 2016-10-07 33 Bechalor female 3 0 \n", "2 2016-09-22 27 college male 3 0 \n", "3 2016-10-08 28 college female 4 1 \n", "4 2016-10-08 29 college male 4 1 " ], "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", "
Unnamed: 0Unnamed: 0.1loan_statusPrincipaltermseffective_datedue_dateageeducationGenderdayofweekweekend
000PAIDOFF1000302016-09-082016-10-0745High School or Belowmale30
122PAIDOFF1000302016-09-082016-10-0733Bechalorfemale30
233PAIDOFF1000152016-09-082016-09-2227collegemale30
344PAIDOFF1000302016-09-092016-10-0828collegefemale41
466PAIDOFF1000302016-09-092016-10-0829collegemale41
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 10 } ], "source": [ "df['weekend'] = df['dayofweek'].apply(lambda x: 1 if (x>3) else 0)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "sESaI6l-_U3i" }, "source": [ "## Convert Categorical features to numerical values\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "G4Fu72el_U3i" }, "source": [ "Let's look at gender:\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/" }, "id": "y9x3UBnh_U3i", "outputId": "90b4f274-de6e-4e50-ba03-6bb17db9ed23" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Gender loan_status\n", "female PAIDOFF 0.865385\n", " COLLECTION 0.134615\n", "male PAIDOFF 0.731293\n", " COLLECTION 0.268707\n", "Name: loan_status, dtype: float64" ] }, "metadata": {}, "execution_count": 11 } ], "source": [ "df.groupby(['Gender'])['loan_status'].value_counts(normalize=True)" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "vGPUhVhK_U3i" }, "source": [ "86 % of female pay there loans while only 73 % of males pay there loan\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "sS_5u3zA_U3i" }, "source": [ "Let's convert male to 0 and female to 1:\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 354 }, "id": "ED8O7qLU_U3i", "outputId": "980711b2-4fdc-4211-f1d3-a7d699e2c6ec" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n", "0 0 0 PAIDOFF 1000 30 2016-09-08 \n", "1 2 2 PAIDOFF 1000 30 2016-09-08 \n", "2 3 3 PAIDOFF 1000 15 2016-09-08 \n", "3 4 4 PAIDOFF 1000 30 2016-09-09 \n", "4 6 6 PAIDOFF 1000 30 2016-09-09 \n", "\n", " due_date age education Gender dayofweek weekend \n", "0 2016-10-07 45 High School or Below 0 3 0 \n", "1 2016-10-07 33 Bechalor 1 3 0 \n", "2 2016-09-22 27 college 0 3 0 \n", "3 2016-10-08 28 college 1 4 1 \n", "4 2016-10-08 29 college 0 4 1 " ], "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", "
Unnamed: 0Unnamed: 0.1loan_statusPrincipaltermseffective_datedue_dateageeducationGenderdayofweekweekend
000PAIDOFF1000302016-09-082016-10-0745High School or Below030
122PAIDOFF1000302016-09-082016-10-0733Bechalor130
233PAIDOFF1000152016-09-082016-09-2227college030
344PAIDOFF1000302016-09-092016-10-0828college141
466PAIDOFF1000302016-09-092016-10-0829college041
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 12 } ], "source": [ "df['Gender'].replace(to_replace=['male','female'], value=[0,1],inplace=True)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "t0KK8d0q_U3j" }, "source": [ "## One Hot Encoding\n", "\n", "#### How about education?\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/" }, "id": "mGHmOy0f_U3j", "outputId": "97bc8c48-177b-4979-bd45-ccc2f37548e2" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "education loan_status\n", "Bechalor PAIDOFF 0.750000\n", " COLLECTION 0.250000\n", "High School or Below PAIDOFF 0.741722\n", " COLLECTION 0.258278\n", "Master or Above COLLECTION 0.500000\n", " PAIDOFF 0.500000\n", "college PAIDOFF 0.765101\n", " COLLECTION 0.234899\n", "Name: loan_status, dtype: float64" ] }, "metadata": {}, "execution_count": 13 } ], "source": [ "df.groupby(['education'])['loan_status'].value_counts(normalize=True)" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "vkOpuhEO_U3j" }, "source": [ "#### Features before One Hot Encoding\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "7CK4Ff90_U3j", "outputId": "d5a32db5-c8a5-4b54-9cf7-dde28b408d3b" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Principal terms age Gender education\n", "0 1000 30 45 0 High School or Below\n", "1 1000 30 33 1 Bechalor\n", "2 1000 15 27 0 college\n", "3 1000 30 28 1 college\n", "4 1000 30 29 0 college" ], "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", "
PrincipaltermsageGendereducation
0100030450High School or Below
1100030331Bechalor
2100015270college
3100030281college
4100030290college
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 14 } ], "source": [ "df[['Principal','terms','age','Gender','education']].head()" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "8cPmjR4U_U3j" }, "source": [ "#### Use one hot encoding technique to conver categorical varables to binary variables and append them to the feature Data Frame\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "Q7UWci_g_U3k", "outputId": "a4b6276d-13bd-4e07-8c60-b34987420ec7" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Principal terms age Gender weekend Bechalor High School or Below \\\n", "0 1000 30 45 0 0 0 1 \n", "1 1000 30 33 1 0 1 0 \n", "2 1000 15 27 0 0 0 0 \n", "3 1000 30 28 1 1 0 0 \n", "4 1000 30 29 0 1 0 0 \n", "\n", " college \n", "0 0 \n", "1 0 \n", "2 1 \n", "3 1 \n", "4 1 " ], "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", "
PrincipaltermsageGenderweekendBechalorHigh School or Belowcollege
01000304500010
11000303310100
21000152700001
31000302811001
41000302901001
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 15 } ], "source": [ "Feature = df[['Principal','terms','age','Gender','weekend']]\n", "Feature = pd.concat([Feature,pd.get_dummies(df['education'])], axis=1)\n", "Feature.drop(['Master or Above'], axis = 1,inplace=True)\n", "Feature.head()\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "qcEa09ku_U3k" }, "source": [ "### Feature Selection\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "NzpBTT7y_U3k" }, "source": [ "Let's define feature sets, X:\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "XJcnWMSW_U3k", "outputId": "d716e35e-8db9-4f3f-e5bf-e32992ee58b8" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Principal terms age Gender weekend Bechalor High School or Below \\\n", "0 1000 30 45 0 0 0 1 \n", "1 1000 30 33 1 0 1 0 \n", "2 1000 15 27 0 0 0 0 \n", "3 1000 30 28 1 1 0 0 \n", "4 1000 30 29 0 1 0 0 \n", "\n", " college \n", "0 0 \n", "1 0 \n", "2 1 \n", "3 1 \n", "4 1 " ], "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", "
PrincipaltermsageGenderweekendBechalorHigh School or Belowcollege
01000304500010
11000303310100
21000152700001
31000302811001
41000302901001
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 16 } ], "source": [ "X = Feature\n", "X[0:5]" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "rn8-NEN7_U3l" }, "source": [ "What are our lables?\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/" }, "id": "uTfC_nFI_U3l", "outputId": "46ab1c20-0aa0-499f-bcef-e90a574f144f" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF'],\n", " dtype=object)" ] }, "metadata": {}, "execution_count": 17 } ], "source": [ "y = df['loan_status'].values\n", "y[0:5]" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "Rp0Ab6WY_U3l" }, "source": [ "## Normalize Data\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "LHjrumE8_U3l" }, "source": [ "Data Standardization give data zero mean and unit variance (technically should be done after train test split)\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/" }, "id": "NBYJupYt_U3l", "outputId": "0954b2a2-c082-42d5-e999-1421903a025f" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([[ 0.51578458, 0.92071769, 2.33152555, -0.42056004, -1.20577805,\n", " -0.38170062, 1.13639374, -0.86968108],\n", " [ 0.51578458, 0.92071769, 0.34170148, 2.37778177, -1.20577805,\n", " 2.61985426, -0.87997669, -0.86968108],\n", " [ 0.51578458, -0.95911111, -0.65321055, -0.42056004, -1.20577805,\n", " -0.38170062, -0.87997669, 1.14984679],\n", " [ 0.51578458, 0.92071769, -0.48739188, 2.37778177, 0.82934003,\n", " -0.38170062, -0.87997669, 1.14984679],\n", " [ 0.51578458, 0.92071769, -0.3215732 , -0.42056004, 0.82934003,\n", " -0.38170062, -0.87997669, 1.14984679]])" ] }, "metadata": {}, "execution_count": 18 } ], "source": [ "X= preprocessing.StandardScaler().fit(X).transform(X)\n", "X[0:5]" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "mgQISt2P_U3l" }, "source": [ "# Classification\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "7PmU2wHB_U3m" }, "source": [ "Now, it is your turn, use the training set to build an accurate model. Then use the test set to report the accuracy of the model\n", "You should use the following algorithm:\n", "\n", "* K Nearest Neighbor(KNN)\n", "* Decision Tree\n", "* Support Vector Machine\n", "* Logistic Regression\n", "\n", "\\__ Notice:\\__\n", "\n", "* You can go above and change the pre-processing, feature selection, feature-extraction, and so on, to make a better model.\n", "* You should use either scikit-learn, Scipy or Numpy libraries for developing the classification algorithms.\n", "* You should include the code of the algorithm in the following cells.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "4g1sWmUG_U3m" }, "source": [ "# K Nearest Neighbor(KNN)\n", "\n", "Notice: You should find the best k to build the model with the best accuracy.\\\n", "**warning:** You should not use the **loan_test.csv** for finding the best k, however, you can split your train_loan.csv into train and test to find the best **k**.\n" ] }, { "cell_type": "markdown", "source": [ "## split data" ], "metadata": { "id": "gy7GYKsoBkTl" } }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "3Ik5_BMS_U3m", "outputId": "a057f671-11a9-4ca5-e8f4-9ce845c0b3b2" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Train set: (276, 8) (276,)\n", "Test set: (70, 8) (70,)\n" ] } ], "source": [ "# split data\n", "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)\n", "print ('Train set:', X_train.shape, y_train.shape)\n", "print ('Test set:', X_test.shape, y_test.shape)" ] }, { "cell_type": "markdown", "source": [ "## build KNN model (test)" ], "metadata": { "id": "KvTM7bdCBaa8" } }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "E5Fs4IC9_U3m", "outputId": "b8c1bea7-c598-4000-cb71-6442650921f9" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "KNeighborsClassifier(n_neighbors=4)" ] }, "metadata": {}, "execution_count": 20 } ], "source": [ "from sklearn.neighbors import KNeighborsClassifier\n", "\n", "# test model \n", "k = 4\n", "#Train Model and Predict \n", "neigh = KNeighborsClassifier(n_neighbors = k).fit(X_train,y_train)\n", "neigh" ] }, { "cell_type": "code", "source": [ "yhat = neigh.predict(X_test)\n", "yhat[0:5]" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "USBOwPpLATmw", "outputId": "2d8c80da-c474-4b14-86c9-1e262ef1bb37" }, "execution_count": 21, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['PAIDOFF', 'COLLECTION', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF'],\n", " dtype=object)" ] }, "metadata": {}, "execution_count": 21 } ] }, { "cell_type": "code", "source": [ "from sklearn import metrics\n", "print(\"Train set Accuracy: \", metrics.accuracy_score(y_train, neigh.predict(X_train)))\n", "print(\"Test set Accuracy: \", metrics.accuracy_score(y_test, yhat))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4R6DlfXRAV0P", "outputId": "a361c629-b1c5-4a99-9ef1-dc86985bf42e" }, "execution_count": 22, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Train set Accuracy: 0.8152173913043478\n", "Test set Accuracy: 0.7\n" ] } ] }, { "cell_type": "markdown", "source": [ "## iterate to find best K" ], "metadata": { "id": "KJnNdHQbAh5i" } }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "M9Wz6HVb_U3m", "outputId": "4b1f932b-8e51-4039-be64-66c997d729f8" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([0.64285714, 0.58571429, 0.74285714, 0.7 , 0.74285714,\n", " 0.71428571, 0.8 , 0.75714286, 0.74285714])" ] }, "metadata": {}, "execution_count": 23 } ], "source": [ "Ks = 10\n", "mean_acc = np.zeros((Ks-1))\n", "std_acc = np.zeros((Ks-1))\n", "\n", "for n in range(1,Ks):\n", " \n", " #Train Model and Predict \n", " neigh = KNeighborsClassifier(n_neighbors = n).fit(X_train,y_train)\n", " yhat=neigh.predict(X_test)\n", " mean_acc[n-1] = metrics.accuracy_score(y_test, yhat)\n", " std_acc[n-1]=np.std(yhat==y_test)/np.sqrt(yhat.shape[0])\n", "\n", "mean_acc" ] }, { "cell_type": "code", "source": [ "print( \"The best accuracy was with\", mean_acc.max(), \"with k=\", mean_acc.argmax()+1) " ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Pjqe9xqBAvd0", "outputId": "4e45c7d7-d266-493c-f2eb-8012183cc857" }, "execution_count": 24, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "The best accuracy was with 0.8 with k= 7\n" ] } ] }, { "cell_type": "code", "source": [ "# plot different k\n", "plt.plot(range(1,Ks),mean_acc,'g')\n", "plt.fill_between(range(1,Ks),mean_acc - 1 * std_acc,mean_acc + 1 * std_acc, alpha=0.10)\n", "plt.fill_between(range(1,Ks),mean_acc - 3 * std_acc,mean_acc + 3 * std_acc, alpha=0.10,color=\"green\")\n", "plt.legend(('Accuracy ', '+/- 1xstd','+/- 3xstd'))\n", "plt.ylabel('Accuracy ')\n", "plt.xlabel('Number of Neighbors (K)')\n", "plt.tight_layout()\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 297 }, "id": "zc5OfKBCAvKv", "outputId": "1206afdf-16fc-4f15-fa5c-ae2edc93ca06" }, "execution_count": 25, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "markdown", "source": [ "**conclusion**: the best k for k Nearest Neighbor is **7**." ], "metadata": { "id": "qqfv_QksA-a_" } }, { "cell_type": "markdown", "metadata": { "id": "htyMCf_i_U3m" }, "source": [ "# Decision Tree\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "id": "NTPoI4dv_U3n" }, "outputs": [], "source": [ "import numpy as np \n", "import pandas as pd\n", "from sklearn.tree import DecisionTreeClassifier\n", "import sklearn.tree as tree\n", "from sklearn import preprocessing" ] }, { "cell_type": "markdown", "source": [ "## split data" ], "metadata": { "id": "0ftTKVyeDYkB" } }, { "cell_type": "code", "execution_count": 27, "metadata": { "id": "Lkp_M1ti_U3n" }, "outputs": [], "source": [ "# split dataset\n", "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=3)" ] }, { "cell_type": "markdown", "source": [ "## build Decision Tree model" ], "metadata": { "id": "sKKsBFEUDbet" } }, { "cell_type": "code", "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "5T1lqHAB_U3n", "outputId": "a11ab492-2564-4e0c-9869-aeac3092de4c" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "DecisionTreeClassifier(criterion='entropy', max_depth=2)" ] }, "metadata": {}, "execution_count": 38 } ], "source": [ "# build model\n", "loanTree = DecisionTreeClassifier(criterion=\"entropy\", max_depth = 2)\n", "loanTree.fit(X_train,y_train)" ] }, { "cell_type": "markdown", "source": [ "## predict and evaluate" ], "metadata": { "id": "AN6NIkBQDfwm" } }, { "cell_type": "code", "source": [ "# predict\n", "predTree = loanTree.predict(X_test)\n", "\n", "# evaluate\n", "from sklearn import metrics\n", "import matplotlib.pyplot as plt\n", "plt.rcParams[\"figure.figsize\"] = (10,8)\n", "\n", "print(\"DecisionTrees's Accuracy: \", metrics.accuracy_score(y_test, predTree))\n", "\n", "# plot\n", "tree.plot_tree(loanTree)\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 484 }, "id": "Rj9U4FhXCg4F", "outputId": "61f6b7d1-ef4b-417b-f606-660a25c68cf6" }, "execution_count": 41, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "DecisionTrees's Accuracy: 0.7403846153846154\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "4yw1aAgU_U3n" }, "source": [ "# Support Vector Machine\n" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "id": "nsFzh8xL_U3n" }, "outputs": [], "source": [ "import pandas as pd\n", "import pylab as pl\n", "import numpy as np\n", "import scipy.optimize as opt\n", "from sklearn import preprocessing\n", "from sklearn.model_selection import train_test_split\n", "%matplotlib inline \n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "source": [ "## split data" ], "metadata": { "id": "oYgpGvgjD5ZZ" } }, { "cell_type": "code", "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "V-MWEKXn_U3n", "outputId": "a89fb43b-907b-43ee-859a-d57e134c15a1" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Train set: (276, 8) (276,)\n", "Test set: (70, 8) (70,)\n" ] } ], "source": [ "# split dataset\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)\n", "print ('Train set:', X_train.shape, y_train.shape)\n", "print ('Test set:', X_test.shape, y_test.shape)" ] }, { "cell_type": "markdown", "source": [ "## build SVM model" ], "metadata": { "id": "0GMe87MxD_p6" } }, { "cell_type": "code", "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "5vEnLLiH_U3n", "outputId": "33bef8d9-5b90-4c25-8c59-3d564fb8ad28" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "SVC()" ] }, "metadata": {}, "execution_count": 44 } ], "source": [ "# build model\n", "from sklearn import svm\n", "clf = svm.SVC(kernel='rbf')\n", "clf.fit(X_train, y_train) " ] }, { "cell_type": "markdown", "source": [ "## predict and evaluate" ], "metadata": { "id": "lpjCP6v4ER2a" } }, { "cell_type": "code", "source": [ "# predict\n", "yhat = clf.predict(X_test)\n", "\n", "# evaluate\n", "from sklearn.metrics import classification_report, confusion_matrix\n", "import itertools\n", "\n", "def plot_confusion_matrix(cm, classes,\n", " normalize=False,\n", " title='Confusion matrix',\n", " cmap=plt.cm.Blues):\n", " \"\"\"\n", " This function prints and plots the confusion matrix.\n", " Normalization can be applied by setting `normalize=True`.\n", " \"\"\"\n", " if normalize:\n", " cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", " print(\"Normalized confusion matrix\")\n", " else:\n", " print('Confusion matrix, without normalization')\n", "\n", " print(cm)\n", "\n", " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n", " plt.title(title)\n", " plt.colorbar()\n", " tick_marks = np.arange(len(classes))\n", " plt.xticks(tick_marks, classes, rotation=45)\n", " plt.yticks(tick_marks, classes)\n", "\n", " fmt = '.2f' if normalize else 'd'\n", " thresh = cm.max() / 2.\n", " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", " plt.text(j, i, format(cm[i, j], fmt),\n", " horizontalalignment=\"center\",\n", " color=\"white\" if cm[i, j] > thresh else \"black\")\n", "\n", " plt.tight_layout()\n", " plt.ylabel('True label')\n", " plt.xlabel('Predicted label')\n", "\n", "# Compute confusion matrix\n", "cnf_matrix = confusion_matrix(y_test, yhat, labels=['COLLECTION', 'PAIDOFF'])\n", "np.set_printoptions(precision=2)\n", "\n", "\n", "print (classification_report(y_test, yhat))\n", "\n", "# Plot non-normalized confusion matrix\n", "plt.figure()\n", "plot_confusion_matrix(cnf_matrix, classes=['COLLECTION', 'PAIDOFF'], normalize= False, title='Confusion matrix')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 525 }, "id": "VFo3RhVaD2kL", "outputId": "e1702529-1765-4318-d8dc-fac0c4bf1b9d" }, "execution_count": 52, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " precision recall f1-score support\n", "\n", " COLLECTION 0.36 0.27 0.31 15\n", " PAIDOFF 0.81 0.87 0.84 55\n", "\n", " accuracy 0.74 70\n", " macro avg 0.59 0.57 0.57 70\n", "weighted avg 0.72 0.74 0.73 70\n", "\n", "Confusion matrix, without normalization\n", "[[ 4 11]\n", " [ 7 48]]\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVMAAAEmCAYAAADfpHMGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3debxd0/3/8df7xpCQxBRCFaGmoqWomoVOMTW0htZQU6so/ZZq0VK+Wp3VVNpGlai5SI0lfsjP0FYlGjFXNVFDkJgiGmT4fP9Y63By3XvPuffue8/Z976fHvuRc/bZe+3PPXI/WWvttddSRGBmZt3T0ugAzMz6AidTM7MCOJmamRXAydTMrABOpmZmBXAyNTMrgJOpNYykQZJukPS6pD92o5x9JY0vMrZGkbSNpCcaHYd1njzO1GqRtA9wDLAu8AYwGTgtIu7pZrn7A0cBW0bEvG4H2uQkBbBWRPyr0bFY8VwztQ5JOgY4E/gRMBxYFTgPGF1A8asB/+wPibQekhZpdAzWDRHhzVubG7AUMBvYs4NjFicl2+fzdiaweP5sJPAs8C3gJWA6cFD+7H+Bd4C5+RqHAKcAl1SVPQIIYJH8/kDg36Ta8VRg36r991SdtyVwP/B6/nPLqs8mAD8A7s3ljAeGtfOzVeL/TlX8uwE7Af8EXgG+W3X8ZsBfgdfysb8CFsuf3ZV/ljfzz7t3VfnHAS8Af6jsy+d8KF9j4/z+A8AMYGSj/254e//mmql1ZAtgIDCug2O+B2wObARsSEooJ1Z9viIpKa9MSpjnSlomIk4m1XavjIjBEXFBR4FIWhI4G9gxIoaQEubkNo5bFrgpH7sc8EvgJknLVR22D3AQsAKwGHBsB5dekfQdrAx8Hzgf2A/YBNgGOEnS6vnY+cDRwDDSd/dJ4AiAiNg2H7Nh/nmvrCp/WVIt/dDqC0fEU6REe4mkJYALgbERMaGDeK1BnEytI8sBM6PjZvi+wKkR8VJEzCDVOPev+nxu/nxuRNxMqpWt08V4FgAbSBoUEdMj4pE2jtkZeDIi/hAR8yLicuBxYNeqYy6MiH9GxBzgKtI/BO2ZS+ofngtcQUqUZ0XEG/n6j5L+ESEiJkXE3/J1pwG/Bbar42c6OSLezvEsJCLOB/4F3AesRPrHy5qQk6l15GVgWI2+vA8AT1e9fzrve7eMVsn4v8DgzgYSEW+SmsaHAdMl3SRp3TriqcS0ctX7FzoRz8sRMT+/riS7F6s+n1M5X9Lakm6U9IKkWaSa97AOygaYERFv1TjmfGAD4JyIeLvGsdYgTqbWkb8Cb5P6CdvzPKmJWrFq3tcVbwJLVL1fsfrDiLg1Ij5NqqE9TkoyteKpxPRcF2PqjF+T4lorIoYC3wVU45wOh9NIGkzqh74AOCV3Y1gTcjK1dkXE66R+wnMl7SZpCUmLStpR0s/yYZcDJ0paXtKwfPwlXbzkZGBbSatKWgo4ofKBpOGSRue+07dJ3QUL2ijjZmBtSftIWkTS3sB6wI1djKkzhgCzgNm51nx4q89fBNboZJlnARMj4iukvuDfdDtK6xFOptahiDidNMb0RNKd5GeAI4E/5UN+CEwEpgAPAQ/kfV251m3AlbmsSSycAFtyHM+T7nBvx/uTFRHxMrALaQTBy6Q78btExMyuxNRJx5Jubr1BqjVf2erzU4Cxkl6TtFetwiSNBkbx3s95DLCxpH0Li9gK40H7ZmYFcM3UzKwATqZmZgVwMjUzK4CTqZlZATyxQi8aNmxYrLbaiEaH0W+9Pa+tkVTWWx6Z8o+ZEbF8EWUNGLpaxLz3PTD2PjFnxq0RMaqIa9biZNqLVlttBPfeN7HRYfRb02a82egQ+rUPf2Bw6yfTuizmzWHxdWqOLuOtyefWegKtME6mZlY+ErQMaHQUC3EyNbNyUnPd8nEyNbNyUq1pD3qXk6mZlZCb+WZm3SfczDcz6z65mW9mVgg3883MuktN18xvrmjMzOohUjO/1lZvcdIASf+QdGN+f5GkqZIm562jdcIA10zNrJQELYWmr/8BHgOGVu37dkRcXW8BrpmaWTm1qPZWB0kfJK1q+7tuhdOdk83MGqIyNKrWllbXnVi1HdpGaWeSlrdpPRPOaZKmSDpD0uK1QnIz38xKqO5B+zMjYtN2S5F2AV6KiEmSRlZ9dAJpSfDFgDHAccCpHV3INVMzK6dibkBtBXxO0jTgCmAHSZdExPRI3gYuBDarVZCTqZmVU33N/A5FxAkR8cGIGAF8EbgjIvaTtBKAJAG7AQ/XKsvNfDMrn56fgu9SScuTemcnA4fVOsHJ1MzKqeDHSSNiAjAhv96hs+c7mZpZCTXfE1BOpmZWPsLP5puZdZ9rpmZmxfAUfGZmBXAz38ysm+RmvplZMdzMNzPrHgEtLa6Zmpl1j/LWRJxMzayEhNzMNzPrPjfzzcwK4JqpmVl3NWGfaXPVk83M6iBES0tLza3u8t6/Ounqku6T9C9JV0parFYZTqZmVkqSam6dUFmdtOKnwBkRsSbwKnBIrQKcTM2slIpKpq1XJ82z6+8AVJZ5Hkuabb9D7jM1s/IRqL6lnIdJmlj1fkxEjGl1TGV10iH5/XLAaxExL79/Fli51oWcTM2sdFT/ONOurk7aaU6mZlZKBQ2NqqxOuhMwEBgKnAUsLWmRXDv9IPBcrYLcZ2pm5ZOb+bW2WtpZnXRf4E5gj3zYAcB1tcpyMjWzUir4bn5rxwHHSPoXqQ/1glonuJlvZqVU9BNQrVYn/TewWWfOd83U6jJ//nw23/RjfH70Lo0OpV/43tGHs9VHRrDr9h9/d98tN1zLLiM3Zb2Vh/Dwgw80MLrGE7Wb+HXe7S+Mk6nV5Vdnn8U6H/5wo8PoN3bbe1/GXPqnhfatte56nPO7y9h0860aFFUTUY838zvNydRqevbZZ7nlzzdx0MFfaXQo/cbHN9+apZdZZqF9H1prXVZfc+0GRdR8mi2Zus/Uavr2t77JaT/+GbNnv9HoUMze1dvN+Fp6tGYqaUVJV0h6StIkSTdLWlvS+pLukPSEpCclnZQf4ULSgZJ+1UZZ0yQNa7XvQEkzJE2u2tbLn62dr/ekpAckXSVp76rjZufrT5Z0saSRlUkO8vm7SZoi6TFJD0nareqziyQ9J2nx/H6YpGk99DU21M033cgKy6/Axpts0uhQzBbSb2qmOTmOA8ZGxBfzvg2B4cBFwOERMV7SEsA1wBHAuV241JURcWSraw8EbgKOiYgb8r6RpKchNsrvJwDHRsTEqs8r528I/AL4dERMlbQ6cJukf0fElHzYfOBg4NddiLk0/vqXe7nxxuu55Zabefutt5g1axYHfXk/Lrz4kkaHZv1YI5JlLT1ZM90emBsRv6nsiIgHgbWBeyNifN73X+BI4PgCr70P8NdKIs3XmRARD9d5/rHAjyJiaj53KvBj4NtVx5wJHC2pT3eV/OC0H/PUtGd54l/TuPjSKxi5/Q5OpNYUipyCr5B4erDsDYBJbexfv/X+iHgKGCxpaBeuU910nyxpUAfXrtf7YgQm5v0V/wHuAfbvqCBJh0qaKGnijJkzuhGS9SffOvxAvrjrDkx76klGbrI2V182ltv+fD0jN1mbyZP+zmH7f4GvfGl0o8NsLNWx9aK+UKtqq5nfW9f+Mekxs5vaOyDPUDMGYJNNNo1eiqtHbLvdSLbdbmSjw+gXTv/1RW3u//SOn+vdQJpYf2rmPwK0ddfi0db7Ja0BzI6IWT187Xq9L8b8/pHqHRHxJDAZ2Ksb1zKzTpKgpUU1t97Uk8n0DmBxSYdWdkj6KPAEsLWkT+V9g4CzgZ8VeO3LgC0l7Vx17W0lbVDn+b8ATpA0Ip87AvgucHobx55G6mM1s15T+05+nxm0HxEB7A58Kg+NeoTULH4BGA2cKOkJ4CHgfqB6ONSBkp6t2j6Y90+p2vfLvK91n+mWETEH2AU4Kg+NepQ0WqCuTsuImEya6OAGSY8DNwDfyftbH/sI0L+f7TNrAKn21pt6tM80Ip6n/SbwyHbOuYg0dKq1Ee2U09axRMTjwKgOYhvZ6v0E8iQH+f21wLXtnHtgq/efb+86ZtYDcjO/mfhxUjMrHVFMn6mkgZL+LulBSY9I+t+8/yJJU6tavBvVKqsv3M03s36ooGb828AOETFb0qLAPZL+nD/7dkRc3cG5C3EyNbPyKaiZn+/tzM5vF81bl4YwuplvZqUj6n42f1jloZm8Hfq+sqQBkiYDLwG3RcR9+aPT8vwcZ1Tm4eiIa6ZmVkLFrE4KEBHzgY0kLQ2My0MoTyCNPFqM9NDNccCpHZXjmqmZlVLRg/Yj4jXSQnqjImJ6JG8DF1LHEiZOpmZWPnWMMa2n4ipp+VwjrTxA9GngcUkr5X0CdgNqTpLkZr6ZlU6lz7QAKwFjJQ0gVS6viogbleZbXj5fajJwWK2CnEzNrJQKups/BfhYG/t36GxZTqZmVkpNNmmUk6mZlZCabwo+J1MzKx3R+1Ps1eJkamal1GQVUydTMysnN/PNzLpJBT2bXyQnUzMrJddMzcwK0GS51MnUzErIzXwzs+5T/bNG9RonUzMrpSbLpe0nU0nn0MGM0xHxjR6JyMysDgNK1Myf2GtRmJl1gsr0OGlEjK1+L2mJiPhvz4dkZlZbERVTSQOBu4DFSfnw6og4WdLqwBXAcsAkYP+IeKfDeOq42BaSHgUez+83lHReN38GM7NuKWim/crqpBsCGwGjJG0O/BQ4IyLWBF4FDqkZTx0XOxP4LPAyQEQ8CGxbT5RmZj1B5Dv6Nf6rJS9N0tbqpDsAlWWex5Jm2+9QXcuWRMQzrXbNr+c8M7Oe0qLaG11YnRR4CngtIublQ54FVq4VTz1Do56RtCUQkhYF/gd4rK6f1sysJ6juZnynVycF1u1KSPXUTA8Dvk7KzM+T+hW+3pWLmZkVQUCLVHPrjKrVSbcAlpZUqWx+EHiu1vk1a6YRMRPYt1NRmZn1sCJGRuVF8+ZGxGtVq5P+lJRU9yDd0T8AuK5WWfXczV9D0g2SZkh6SdJ1ktbo3o9gZtZ1lSn4CribvxJwp6QpwP3AbRFxI3AccIykf5GGR11Qq6B6+kwvA84Fds/vvwhcDnyinkjNzHpCZ5vxbelgddJ/A5t1Kp46jlkiIv4QEfPydgkwsDMXMTMrmurYelNHz+Yvm1/+WdLxpL6DAPYGbu6F2MzM2iTK9Wz+JFLyrET8tarPAjihp4IyM+uQSjQFX0Ss3puBmJl1RpPl0vrmM5W0AbAeVX2lEXFxTwVlZtaRsjXzAZB0MjCSlExvBnYE7gGcTM2sYZqtmV/P3fw9gE8CL0TEQcCGwFI9GpWZWQ2luZtfZU5ELJA0T9JQ0mQAq/RwXGZm7ZJK2MwHJuYJAM4n3eGfDfy1R6MyM6uh2Zr59Tybf0R++RtJtwBD81MDZmYN02S5tMNB+xt39FlEPNAzIZmZdUxSqZr5p3fwWWUmauuE+RHMmjO30WH0Wx/b6bhGh2AFKk0zPyK2781AzMw6o65lQmqQtAppmOdwUiVxTEScJekU4KvAjHzodyOiw8fo6xq0b2bWTAoctD8P+FZEPCBpCDBJ0m35szMi4hf1FuRkamalVEQujYjpwPT8+g1Jj1HHek9txtP9cMzMepeU+kxrbZ0rUyNIc5vel3cdKWmKpN9LWqbW+fXMtC9J+0n6fn6/qqROTZpqZla0AS21N+pYnRRA0mDgGuCbETEL+DXwIdKad9Pp+IY8UF8z/zxgAenu/anAG/miH6/jXDOzwlUW1KtDzdVJ86rL1wCXRsS1ABHxYtXn5wM31rpQPc38T0TE14G38kVeBRar4zwzsx7TUsdWi1JfwAXAYxHxy6r9K1UdtjvwcK2y6qmZzpU0gDRsoLKa34I6zjMz6xEFDtrfCtgfeEjS5Lzvu8CXJG1EynvTWHhy/DbVk0zPBsYBK0g6jTSL1IldCNrMrDBFjNmPiHtoe4KpTi/NVM+z+ZdKmkSahk/AbhHxWGcvZGZWpCZ7mrSuyaFXBf4L3FC9LyL+05OBmZm1p5Qz7QM38d7CegOB1YEngPV7MC4zs/aphDXTiPhI9fs8m9QR7RxuZtYr1Otz6Xes04+T5mdYP9ETwZiZ1UPAIk32/GY9fabHVL1tATYGnu+xiMzM6lCaKfiqDKl6PY/Uh3pNz4RjZlZbegKq0VEsrMNkmgfrD4mIY3spHjOz2sq0oJ6kRSJinqStejMgM7NaylYz/Tupf3SypOuBPwJvVj6sTAhgZtYITdZlWlef6UDgZdKsUZXxpgE4mZpZQwgxoMmyaUfJdIV8J/9h3kuiFdGjUZmZdaRkg/YHAINpexIAJ1Mza6g65zPtNR0l0+kRcWqvRWJmVqeins3vYHXSZYErgRGkKfj2ynM5t6ujZwiaK+2bmVVJ60B1vNWhsjrpesDmwNclrQccD9weEWsBt+f3HeoomX6yrlDMzHqZKGam/YiYHhEP5NdvAJXVSUcDY/NhY4HdapXVbjM/Il6pIxYzs96nuvtMh0maWPV+TESMabPIhVcnHZ6XgQZ4gdQN0KFOT3RiZtZoRS6oB+9fnbT6uf+ICEk1b7o32bwrZmb1UR1bXeW0sTop8GJlUb3850u1ynEyNbMSEi0ttbeapbSzOilwPXBAfn0AcF2tstzMN7PSqdyAKkB7q5P+BLhK0iHA08BetQpyMjWzUipiPtMOVieFTo5ocjI1s/Kp/25+r3EyNbPSKbCZXxgnUzMrpTIuW2Jm1nTKNGuUmVlTSs385sqmTqZmVkpN1sp3MjWzMpLv5puZdZeb+WZmRah/vtJe02xDtawJ/evJJ9hhq03f3T608nL89tyzGx1Wn9fSIv56+XFcc9ZhAIzcbG3+ctlx/O2K47n990ezxirDGhxhY7VINbfe5Jqp1bTmWutwx71pSsj58+ez4Toj2GnX0Q2Oqu87cp/teWLqiwxZciAAZ3/3i+x59G95YuqLHLrnNhz/lVEcevIlDY6yMdIUfI2OYmGumVqn3D3hDkasvgarrLpao0Pp01ZeYWlGbb0+F477y7v7IoKhObEOHTKI6TNeb1R4TUF1/NebXDO1Thl3zVXsvsfejQ6jz/v5t7/A9876E4OXGPjuviNOvYxx5xzBW2+/w6w332K7L5/ewAgbr9nu5peqZippvqTJkh6W9EdJS+T9i0iaIeknrY6fIGnT/HqapIfy9qikH0oaWHXs+pLukPSEpCclnZTnOkTSgbn8yXm7OO+/SNLUqv3f6L1vo/e98847jL/5Rnbd/QuNDqVP23GbDXjplTf4x2PPLLT/qH23Z/ejzmPNUSfxh+v+xk+/9fkGRdh4lWZ+ra1mOdLvJb0k6eGqfadIeq7q93qnemIqW810TkRsBCDpUuAw4JfAp4F/AntKOiEi2ltiYPuImJmXKBgD/BY4QNIg0mSwh0fE+JykrwGOAM7N514ZEUe2Uea3I+Lqon7AZnb7bbfwkQ0/xgor1FwOx7phi43WYJftPsKorddn8cUWZeiSA7n27MNYZ8Rw7n/4aQCuHv8A1517RIMjbaTCmvEXAb8iLfdc7YyI+EVnCipVzbSVu4E18+svAWcB/wG2qHViRMwmJeLd8vrY+wD3RsT4/Pl/gSOpY3nX/mTcH69k9z3dxO9p3z/netYcdRLr7nwyXz7+Qibc/0/2PHoMQwcPYs1VVwBgh83X5YmpLzY40gaqo1ZaT800Iu4CClk8tJTJVNIiwI6k2bEHAp8CbgAuJyXWmiJiFjAVWAtYH5jU6vOngMGShuZde1dV+w+qOvTnVfs/0kash0qaKGniyzNndvInbR5vvvkmd915OzvvWnPFW+sB8+cv4Os/uIzLf/EV7rvyePbZeTNOOGNco8NqmMqCenUMjRpW+f3L26F1XuJISVNyN8Ay9ZxQtmb+oKqlBe4mrd3yOeDOiJgj6RrgJEnfjIj5dZTXmXZCl5r5eVnZMQAbbbxJzRUOm9WSSy7J40+/0Ogw+p27Jz3J3ZOeBOD6O6dw/Z1TGhxR86jzl7eu1Ulb+TXwAyDyn6cDB9c6qWzJ9N0+0wpJXwK2ljQt71oO2AG4raOCJA0BRpD6Wh8Ftm31+RrA7NbLvppZc+ip38uIeLf/RNL5wI31nFfKZn5FboJvA6waESMiYgTwdWo09fMNqPOAP0XEq8ClpIT8qfz5IOBs4Gc9GL6ZdYNUe+tauWmJ52x34OH2jq1Wtpppa7sDd0TE21X7rgN+JmnxNo6/Mw93agHGkarw5C6C0cA5ks4FBgB/IN3lM7MmVES9VNLlwEhS3+qzwMnASEkbkZr504Cv1VNWqZJpRAxu9X4sMLbVvleA5fPbkVX7R9Qo+6Hq41t9dhFpCEXr/QfWCNnMeoAobHXStlqxF3SlrFIlUzMzoClnjXIyNbNSarJc6mRqZmUkr05qZlaEJsulTqZmVj7CzXwzs0K4mW9mVoAmy6VOpmZWTk2WS51MzayE5Ga+mVm3pSegGh3FwpxMzayUmiyXOpmaWTm5mW9mVoAmy6Xlns/UzPov1bHVLKPt1UmXlXRbXqX4tnqXLXEyNbPSqUzBV2urw0XAqFb7jgduj4i1gNupc2FNJ1MzK586ZtmvJ5e2szrpaN6bJ3ksUNcqku4zNbNSqrPLdJikiVXvx+RFLjsyPCKm59cvAMPruZCTqZmVUN3N+K6sTvquiAhJda0q7Ga+mZVSTy2oB7xYWVQv//lSPSc5mZpZ6dRzJ78bI6euBw7Irw8gLdJZk5v5ZlZKRQzab2d10p8AV0k6BHga2KuespxMzayUihi0387qpACf7GxZTqZmVkpN9gCUk6mZlZCn4DMz6z5PwWdmVpAmy6VOpmZWTi1NVjV1MjWzcmquXOpkambl1GS51MnUzMpHcjPfzKwYzZVLnUzNrJyaLJc6mZpZGcnNfDOz7mrGQfuegs/MrACumZpZKRXVzJc0DXgDmA/M6+rM/E6mZlY+3ZtJvy3bR8TM7hTgZGpmpdPNmfR7hPtMzayUJNXcyKuTVm2HtlFUAOMlTWrn87q4ZmpmpVRnM7+e1Um3jojnJK0A3Cbp8Yi4q7PxuGZqZqVU1IJ6EfFc/vMlYBywWVficTI1s1Kqs5lfq4wlJQ2pvAY+AzzcpXgioivnWRdImkFa7bCshgHduuNp3VL273+1iFi+iIIk3UL6PmqZGRGjOihnDVJtFFK352URcVqXYnIytXpJmtjVMXjWff7+m5ub+WZmBXAyNTMrgJOpdcaYRgfQz/n7b2LuMzUzK4BrpmZmBXAyNTMrgJOp9TpJ/ntnfY7/UluvkbQxQEQscELtOZKGNjqG/sh/oa03nSjpdnBC7SmSPg0cJ2lwo2Ppb/yX2XrTXsCrkm4AJ9SiSRoFnA7cFhGzGx1Pf+O/yNajJG0laWNJy0TEPGBP4E1JfwYn1KJI2hw4DzgxIiZIWkXSZ/zd9h5/0dZjJK0MXARMAC6RdBrwUeCrwPOSrgYn1O7K393SwGPAc5I2AK4HVo+IBQ0Nrh/xoH3rUXnm8l2BW4CPA7OBjwFjgZ8Dt0TE3o2LsNwkfQbYLiK+J+mrwPbAxsAFEfHzxkbXv3imfSucpOWAQRHxbESMyfNKrg9cDfwZGA0sR5qO8BOSPhARzzcs4JKS9FngR8BxABFxvqQXgSWByZKGRsSsRsbYnziZWqEk7QKcmF9PBaYB3wMOJN2AmgdcFxHzJY0DWvIM59YJkrYArgBGR8RdklYF1omI6yUtD+wHLC3ptoh4raHB9hNOplaYPCzndOAQ4CFS/+ghwJXA3sAAYA9gUP4lL/NExw2hVM0X8AFSX/SSuW/6GuAsgIi4QNI84EvAO5KuD/fn9Tj3mVphJH0PmBoRl1XtWxb4JfDviDhV0onACsAJEfFmg0ItPUmLAzsCu5OW2vhBRJwnaUBEzM/H7Avc6S6U3uGaqRVpOLA88G4yjYhXJF0BfDm//6GkZZ1IO0/S1sAngDeA5yLiT5IWAEsBrwPk7pNFI2JuRFzawHD7HQ9HsW6R9FFJR+e3t6RdWqrVYZOAlSQNg5RgezPGvkDSTsAfgEHAh4AzJZ0J3EAaGbGdpCMAImJuwwLtx5xMrcskrU1a1Owzkg4E7gTWA74jaZmqQ0eR/q7N6fUg+4B8c+k04KCI+GFEHEcaZvYZ4PSIGAfcDGwp6ZAGhtqvuZlvXZIfXTwWOIrUJ3oUaQzpXqS7zD+UNJA0kPxgYG837btsAfDPiJgAqb80Il6TtCXwN0k3AuOBAO5rXJj9m5OpdVoe3/gL4IiIeEzS06Q7zEfmP0fzXs3pHeALEfFYo+ItI0mqugM/B1hP0vYRcWdEvC1pYE6odwLDI+K/vmvfWE6m1ik5kV4J/H/gbkkt+Rf57nzIkcCQiPg9cHd75VhNS0maAywbEdMlXQWMlPRCRDwWEW/l4+YAQxoXplW4z9TqlgeKnw3sA7xCat6vCBARc0jJ8xxg3/xoo3VBvtk0lvTE2HhJnyd9tyuQvttR+bgDSK2AOwBcK20sjzO1ukhaD9gAmB4Rd+fxo2OA/wA/j4jp+bglSMN3noyIZxsWcEnlZ+0rfdDTgXWBH5IehngC2Ib0NNmDwBrAwRHxcEOCtYU4mVpNuSZ0AnAxMA6YFRHz8hCo3wHPUJVQrWskjSTNsvX5iHhA0iL5e94e+C3wnTy2dCipVdniYWbNw81861DuIz2LNJnG7yPilfwLPiAiXge+Qnq08RRJKzYy1j5gcVL/Z+X3MvKNqDuBk4Dj81jdNyLiNSfS5uJkarXsCpwUEX8j/33Jv+Dz882n14HDSYnAzZwukLSJpO0i4lbga8BVknbKj4UOyPOV/ht4OiJmum+0OTmZWpvyhBqQnrapCFjoRseqkgZFxKukAeUv9maMfch2wGmStomIq4HvAL/KCXVenuB5A2CBpEFV/2+siXholL2PpG2Bt4C/k+Yf3VrSHRExszKRhqRFSBNt/BGY49pS10XELyXNJy04eFpEXJ3z5a8k7QWsAnwT2DePmrAm5GRqC8l3k39Dmg8TYCJpKr3P5UHhlWnz9iJN8XZN70dZfpJGAHMj4jmAiDgr/wP1PUlUJdQ7gedIN6UebVS8Vpvv5tu7JO0MnA6Cv78AAAdxSURBVAL8T0T8JU8y/BawMzCSNB/pPcCypHWc9vKwnM7JTfR1gPuBqaQbS/+IiP/kz48FPgucmoegbU+aIeqfjYrZ6uNkagDkO/E3APdFxJGShgP3AsfnWtJmpLWFtiaNf7zQNaWuk3QBabrCFtJY3TfyBCbkyUoOB74REX9pXJTWGU6mBoCkwcAXSDc6ZgK7AH+IiDENDawPqYwbza/3Iw0p+y2pxl+pqV4DXEVaGO/+iHi6QeFaJ7nP1CpDnWZLug6YS3r65tnqRJofaZwF3OHlgzsvL+lysKQppBt715H6o/9BWlgQUktgbdJyJBt7XtJycc20H5M0vDKcqTJLUa6h7gpsBUyKiAsl7UF6pHHXiHiygSGXUn6C7FTS5M4rAKsB3wfWIg2DWh84PCKuy8cvFxEvNyhc6yLXTPuhfBNkOeDvkk6IiMtyIq3UUG8hTaX3CUlXkn75d3ci7bw8h8HNpFVEb5C0Cmn6wg1Jc48OID0UcV1luRHSJDJWMh603w9FMpM0Xd4pkvas7M/jSF8lTfD8IDAY+KrnI+2a/MjnrsBPlNaxf4a03PXwiHiBdNPvKEnLVJr1HrNbTq6Z9kOSBpB+Z2+QNBf4da6VXkWa1R3ScKihwJciYlajYu0LIuImpYXvJkm6lbSOU2Wxu4tJg/L9u1hy7jPtRyStQ3pa6T/5eW8iYkHu0/s1cFxEXCXpUFKf3g4e31gcSZ8iLS+yYkS8lJcfeVvSkIh4o9HxWfc4mfYTebq844ClgR9HxDNVNdRKQj0b+BuwBbBHRDzYuIj7Jkk7kvpMt4+IlxodjxXHybQfyQPvdwMGAmfmGuqiwIL8vP0o4KfA/hExpZGx9mWSRgMnA5uSu7AbHJIVwMm0j1Najnkp4DXgKWAEcCiwGHB2REzLxx0JvADcGO+tL2Q9RNLgiJjd6DisOE6mfZikzwE/Ig0KD2A4sBPp2fqDgUWBb5OefDoL2Cki/tGYaM3Kzcm0j5K0FWlJkf0iYlLedx5pDaGRpNrqQcCnSONIPxsRDzUmWrPy8zjTvmtF0jIjkyQtDhARR5BmfbqO9Bz49aRHG51IzbrJNdM+RtKmpKeXRgMfj4jP5v2LRsTcfMNpHHBYRDxbGZ7TwJDN+gTXTPuQfDf+N8DqwI3AM5JG57Wa5uZZi+aS/r8vBeBEalYMP3XRR0jaDjgH2Cci7pc0kLQI2/ak57+vjbSq6J6kqd9mNC5as77Hzfw+QtIxwPy8/MViEfFOXhb4YGA9Um31L6R5Svf1OFKzYrlmWnKVqfNIyfL1vHtubtrPlHQ28BHSXfyHgd9FxFMNCtesz3KfaclVPT0zDthc0iaVfbmP9C3SciN3RMR4J1KznuFk2nfcRxr2tHdOqAtyH+kXSYvfeY5Msx7kPtM+RNLKwCHAJ0lLYswB9iBNWuJVRM16kJNpHyNpELAJ6cmm6cCdnkbPrOc5mZqZFcB9pmZmBXAyNTMrgJOpmVkBnEzNzArgZGpmVgAnUzOzAjiZWo+RNF/SZEkPS/qjpCW6UdZFkvbIr38nab0Ojh0pacsuXGNanhymrv2tjunUek6STpF0bGdjtOblZGo9aU5EbBQRGwDvAIdVfyipSxPtRMRXIuLRDg4ZCXQ6mZp1h5Op9Za7gTVzrfFuSdcDj0oaIOnnku6XNEXS1yDNhiXpV5KekPT/gBUqBUmakFcUQNIoSQ9IelDS7ZJGkJL20blWvI2k5SVdk69xf14fC0nLSRov6RFJvyOtUNAhSX+SNCmfc2irz87I+2+XtHze9yFJt+Rz7pa0bhFfpjUfT8FnPS7XQHcEbsm7NgY2iIipOSG9HhEfz2tV3StpPPAxYB3SXKzDgUeB37cqd3ngfGDbXNayEfGKpN8AsyPiF/m4y4AzIuIeSasCtwIfJq1df09EnCppZ9K8BrUcnK8xCLhf0jUR8TKwJDAxIo6W9P1c9pHAGNISMU9K+gRwHrBDF75Ga3JOptaTBkmanF/fDVxAan7/PSKm5v2fAT5a6Q8lLaeyFrAtcHlEzAeel3RHG+VvDtxVKSsi2psZ61PAetK7Fc+hkgbna3w+n3uTpFfr+Jm+IWn3/HqVHOvLwALgyrz/EuDafI0tgT9WXXvxOq5hJeRkaj1pTkRsVL0jJ5U3q3cBR0XEra2O26nAOFqAzfPcrq1jqZukkaTEvEVE/FfSBGBgO4dHvu5rrb8D65vcZ2qNditweF41FUlrS1oSuIs0N+sASSuR1rJq7W/AtpJWz+cum/e/AQypOm48cFTljaRKcrsL2Cfv2xFYpkasSwGv5kS6LqlmXNFCmu6QXOY9ETELmJrX3ar0A29Y4xpWUk6m1mi/I/WHPiDpYeC3pBbTOODJ/NnFwF9bnxgRM4BDSU3qB3mvmX0DsHvlBhTwDWDTfIPrUd4bVfC/pGT8CKm5/58asd4CLCLpMeAnpGRe8SawWf4ZdgBOzfv3BQ7J8T1CWoLb+iBPwWdmVgDXTM3MCuBkamZWACdTM7MCOJmamRXAydTMrABOpmZmBXAyNTMrwP8B9Kqt0XfuOBcAAAAASUVORK5CYII=\n" }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "code", "source": [ "# f1_score\n", "from sklearn.metrics import f1_score\n", "print(f1_score(y_test, yhat, average='weighted'))\n", "\n", "from sklearn.metrics import jaccard_score\n", "print(jaccard_score(y_test, yhat,pos_label='PAIDOFF'))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "rIpjvR7PRANf", "outputId": "476c9c80-e50e-4f60-a468-c636bd8c2baa" }, "execution_count": 53, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.7275882012724117\n", "0.7272727272727273\n" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "Cv2QZK3R_U3n" }, "source": [ "# Logistic Regression\n" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "id": "Tcc5Dq3d_U3n" }, "outputs": [], "source": [ "import pandas as pd\n", "import pylab as pl\n", "import numpy as np\n", "import scipy.optimize as opt\n", "from sklearn import preprocessing\n", "%matplotlib inline \n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "source": [ "## split data" ], "metadata": { "id": "gX4smnuUSMx9" } }, { "cell_type": "code", "execution_count": 54, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "J0YPNgET_U3n", "outputId": "d327b930-8658-4ad8-a6b6-9c104fe57223" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Train set: (276, 8) (276,)\n", "Test set: (70, 8) (70,)\n" ] } ], "source": [ "# split dataset\n", "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=4)\n", "print ('Train set:', X_train.shape, y_train.shape)\n", "print ('Test set:', X_test.shape, y_test.shape)" ] }, { "cell_type": "markdown", "source": [ "## build LR model" ], "metadata": { "id": "txSM37vMSd5e" } }, { "cell_type": "code", "execution_count": 56, "metadata": { "id": "0MfN_pWD_U3o" }, "outputs": [], "source": [ "# build model\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import confusion_matrix\n", "LR = LogisticRegression(C=0.01, solver='liblinear').fit(X_train,y_train)\n" ] }, { "cell_type": "markdown", "source": [ "## predict and evaluate" ], "metadata": { "id": "BMjcN-LzSddX" } }, { "cell_type": "code", "source": [ "# predict\n", "yhat = LR.predict(X_test)\n", "yhat_prob = LR.predict_proba(X_test)\n", "\n", "# evaluate\n", "# jaccard index\n", "from sklearn.metrics import jaccard_score\n", "jaccard_score(y_test, yhat,pos_label='PAIDOFF')\n", "\n", "# confusion matrix\n", "from sklearn.metrics import classification_report, confusion_matrix\n", "import itertools\n", "def plot_confusion_matrix(cm, classes,\n", " normalize=False,\n", " title='Confusion matrix',\n", " cmap=plt.cm.Blues):\n", " \"\"\"\n", " This function prints and plots the confusion matrix.\n", " Normalization can be applied by setting `normalize=True`.\n", " \"\"\"\n", " if normalize:\n", " cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", " print(\"Normalized confusion matrix\")\n", " else:\n", " print('Confusion matrix, without normalization')\n", "\n", " print(cm)\n", "\n", " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n", " plt.title(title)\n", " plt.colorbar()\n", " tick_marks = np.arange(len(classes))\n", " plt.xticks(tick_marks, classes, rotation=45)\n", " plt.yticks(tick_marks, classes)\n", "\n", " fmt = '.2f' if normalize else 'd'\n", " thresh = cm.max() / 2.\n", " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", " plt.text(j, i, format(cm[i, j], fmt),\n", " horizontalalignment=\"center\",\n", " color=\"white\" if cm[i, j] > thresh else \"black\")\n", "\n", " plt.tight_layout()\n", " plt.ylabel('True label')\n", " plt.xlabel('Predicted label')\n", "\n", "print(confusion_matrix(y_test, yhat, labels=['COLLECTION', 'PAIDOFF']))\n", "\n", "# Compute confusion matrix\n", "cnf_matrix = confusion_matrix(y_test, yhat, labels=['COLLECTION', 'PAIDOFF'])\n", "np.set_printoptions(precision=2)\n", "\n", "\n", "# Plot non-normalized confusion matrix\n", "plt.figure()\n", "plot_confusion_matrix(cnf_matrix, classes=['COLLECTION', 'PAIDOFF'],normalize= False, title='Confusion matrix')\n", "\n", "print (classification_report(y_test, yhat))\n", "\n", "# log loss\n", "from sklearn.metrics import log_loss\n", "log_loss(y_test, yhat_prob)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 579 }, "id": "BKlEnd9QSc6M", "outputId": "5a97b390-5daa-4aab-e44b-7e478aabc8dd" }, "execution_count": 58, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[[ 2 13]\n", " [ 9 46]]\n", "Confusion matrix, without normalization\n", "[[ 2 13]\n", " [ 9 46]]\n", " precision recall f1-score support\n", "\n", " COLLECTION 0.18 0.13 0.15 15\n", " PAIDOFF 0.78 0.84 0.81 55\n", "\n", " accuracy 0.69 70\n", " macro avg 0.48 0.48 0.48 70\n", "weighted avg 0.65 0.69 0.67 70\n", "\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "0.5772287609479654" ] }, "metadata": {}, "execution_count": 58 }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "vAmd6TsM_U3o" }, "source": [ "# Model Evaluation using Test set\n" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "id": "xqfW4-FH_U3o" }, "outputs": [], "source": [ "from sklearn.metrics import jaccard_score\n", "from sklearn.metrics import f1_score\n", "from sklearn.metrics import log_loss\n" ] }, { "cell_type": "markdown", "metadata": { "id": "dZ1iEibp_U3o" }, "source": [ "First, download and load the test set:\n" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_xH0BoP8_U3o", "outputId": "21e99cb2-2d10-49ee-e2cf-a744c7f9eac3" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "--2022-08-21 16:46:17-- https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/loan_test.csv\n", "Resolving s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)... 67.228.254.196\n", "Connecting to s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)|67.228.254.196|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 3642 (3.6K) [text/csv]\n", "Saving to: ‘loan_test.csv’\n", "\n", "loan_test.csv 100%[===================>] 3.56K --.-KB/s in 0s \n", "\n", "2022-08-21 16:46:18 (645 MB/s) - ‘loan_test.csv’ saved [3642/3642]\n", "\n" ] } ], "source": [ "!wget -O loan_test.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/loan_test.csv" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "YHRsUnXk_U3o" }, "source": [ "### Load Test set for evaluation\n" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "ylfA1W95_U3o", "outputId": "85b89669-ea74-46ea-a601-b08bb658fa5b" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n", "0 1 1 PAIDOFF 1000 30 9/8/2016 \n", "1 5 5 PAIDOFF 300 7 9/9/2016 \n", "2 21 21 PAIDOFF 1000 30 9/10/2016 \n", "3 24 24 PAIDOFF 1000 30 9/10/2016 \n", "4 35 35 PAIDOFF 800 15 9/11/2016 \n", "\n", " due_date age education Gender \n", "0 10/7/2016 50 Bechalor female \n", "1 9/15/2016 35 Master or Above male \n", "2 10/9/2016 43 High School or Below female \n", "3 10/9/2016 26 college male \n", "4 9/25/2016 29 Bechalor male " ], "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", "
Unnamed: 0Unnamed: 0.1loan_statusPrincipaltermseffective_datedue_dateageeducationGender
011PAIDOFF1000309/8/201610/7/201650Bechalorfemale
155PAIDOFF30079/9/20169/15/201635Master or Abovemale
22121PAIDOFF1000309/10/201610/9/201643High School or Belowfemale
32424PAIDOFF1000309/10/201610/9/201626collegemale
43535PAIDOFF800159/11/20169/25/201629Bechalormale
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 61 } ], "source": [ "test_df = pd.read_csv('loan_test.csv')\n", "test_df.head()" ] }, { "cell_type": "markdown", "source": [ "## preprocess data" ], "metadata": { "id": "TFOZgoQ5Ukjg" } }, { "cell_type": "code", "source": [ "test_df['due_date'] = pd.to_datetime(test_df['due_date'])\n", "test_df['effective_date'] = pd.to_datetime(test_df['effective_date'])\n", "test_df['dayofweek'] = test_df['effective_date'].dt.dayofweek\n", "test_df['weekend'] = test_df['dayofweek'].apply(lambda x: 1 if (x>3) else 0)\n", "test_df['Gender'].replace(to_replace=['male','female'], value=[0,1],inplace=True)\n", "Feature = test_df[['Principal','terms','age','Gender','weekend']]\n", "Feature = pd.concat([Feature,pd.get_dummies(test_df['education'])], axis=1)\n", "Feature.drop(['Master or Above'], axis = 1,inplace=True)\n", "X = Feature\n", "y_test = test_df['loan_status'].values\n", "# normalize date\n", "X_test= preprocessing.StandardScaler().fit(X).transform(X)" ], "metadata": { "id": "j27bTB5rTkNu" }, "execution_count": 62, "outputs": [] }, { "cell_type": "markdown", "source": [ "## predict and evaluate with test data" ], "metadata": { "id": "JRlvNZ1_U9Ii" } }, { "cell_type": "code", "execution_count": 63, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6zXrtRUP_U3p", "outputId": "1ef267ba-deae-407a-cc39-2eb6084ce8cc" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "KNN f1: 0.6736355806123249\n", "KNN Jaccard: 0.6862745098039216\n", "\n", "DT f1: 0.6304176516942475\n", "DT Jaccard: 0.7407407407407407\n", "\n", "SVM f1: 0.7583503077293734\n", "SVM Jaccard: 0.78\n", "\n", "LR f1: 0.6604267310789049\n", "LR Jaccard: 0.7358490566037735\n", "LR log loss: 0.5672153379912981\n", "\n" ] } ], "source": [ "# KNN\n", "yhat_knn = neigh.predict(X_test)\n", "print(\"KNN f1:\", f1_score(y_test, yhat_knn, average='weighted'))\n", "print(\"KNN Jaccard:\", jaccard_score(y_test, yhat_knn, pos_label='PAIDOFF'))\n", "print()\n", "# Decision Tree\n", "yhat_dt = loanTree.predict(X_test)\n", "print(\"DT f1:\", f1_score(y_test, yhat_dt, average='weighted'))\n", "print(\"DT Jaccard:\", jaccard_score(y_test, yhat_dt, pos_label='PAIDOFF'))\n", "print()\n", "# SVM\n", "yhat_svm = clf.predict(X_test)\n", "print(\"SVM f1:\", f1_score(y_test, yhat_svm, average='weighted'))\n", "print(\"SVM Jaccard:\", jaccard_score(y_test, yhat_svm, pos_label='PAIDOFF'))\n", "print()\n", "# LR\n", "yhat_lr = LR.predict(X_test)\n", "yhat_prob = LR.predict_proba(X_test)\n", "print(\"LR f1:\", f1_score(y_test, yhat_lr, average='weighted'))\n", "print(\"LR Jaccard:\", jaccard_score(y_test, yhat_lr, pos_label='PAIDOFF'))\n", "print(\"LR log loss:\", log_loss(y_test, yhat_prob))\n", "print()" ] }, { "cell_type": "markdown", "metadata": { "id": "v1C_0my0_U3p" }, "source": [ "# Report\n", "\n", "You should be able to report the accuracy of the built model using different evaluation metrics:\n" ] }, { "cell_type": "markdown", "metadata": { "id": "w-TO5vJJ_U3p" }, "source": [ "| Algorithm | Jaccard | F1-score | LogLoss |\n", "| ------------------ | ------- | -------- | ------- |\n", "| KNN | 0.69 | 0.67 | NA |\n", "| Decision Tree | 0.74 | 0.63 | NA |\n", "| SVM | 0.78 | 0.76 | NA |\n", "| LogisticRegression | 0.74 | 0.66 | 0.57 |\n" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "id": "wYo-zN_C_U3p" }, "source": [ "

Want to learn more?

\n", "\n", "IBM SPSS Modeler is a comprehensive analytics platform that has many machine learning algorithms. It has been designed to bring predictive intelligence to decisions made by individuals, by groups, by systems – by your enterprise as a whole. A free trial is available through this course, available here: SPSS Modeler\n", "\n", "Also, you can use Watson Studio to run these notebooks faster with bigger datasets. Watson Studio is IBM's leading cloud solution for data scientists, built by data scientists. With Jupyter notebooks, RStudio, Apache Spark and popular libraries pre-packaged in the cloud, Watson Studio enables data scientists to collaborate on their projects without having to install anything. Join the fast-growing community of Watson Studio users today with a free account at Watson Studio\n", "\n", "

Thanks for completing this lesson!

\n", "\n", "

Author: Saeed Aghabozorgi

\n", "

Saeed Aghabozorgi, PhD is a Data Scientist in IBM with a track record of developing enterprise level applications that substantially increases clients’ ability to turn data into actionable knowledge. He is a researcher in data mining field and expert in developing advanced analytic methods like machine learning and statistical modelling on large datasets.

\n", "\n", "
\n", "\n", "## Change Log\n", "\n", "| Date (YYYY-MM-DD) | Version | Changed By | Change Description |\n", "| ----------------- | ------- | ------------- | ------------------------------------------------------------------------------ |\n", "| 2020-10-27 | 2.1 | Lakshmi Holla | Made changes in import statement due to updates in version of sklearn library |\n", "| 2020-08-27 | 2.0 | Malika Singla | Added lab to GitLab |\n", "\n", "
\n", "\n", "##

© IBM Corporation 2020. All rights reserved.

\n", "\n", "

\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python", "language": "python", "name": "conda-env-python-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.12" }, "colab": { "name": "MachineLearningwithPython-Project.ipynb", "provenance": [], "collapsed_sections": [], "toc_visible": true } }, "nbformat": 4, "nbformat_minor": 0 }