diff --git a/exercises/exercise 1 - loan prediction problem/solutions/answers_frank_van_bakel.ipynb b/exercises/exercise 1 - loan prediction problem/solutions/answers_frank_van_bakel.ipynb
new file mode 100644
index 0000000..f451571
--- /dev/null
+++ b/exercises/exercise 1 - loan prediction problem/solutions/answers_frank_van_bakel.ipynb
@@ -0,0 +1,3572 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "train_df = pd.read_csv('../data/train.csv')\n",
+ "test_df = pd.read_csv('../data/test.csv')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Explore the data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Loan_ID \n",
+ " Gender \n",
+ " Married \n",
+ " Dependents \n",
+ " Education \n",
+ " Self_Employed \n",
+ " ApplicantIncome \n",
+ " CoapplicantIncome \n",
+ " LoanAmount \n",
+ " Loan_Amount_Term \n",
+ " Credit_History \n",
+ " Property_Area \n",
+ " Loan_Status \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " LP001002 \n",
+ " Male \n",
+ " No \n",
+ " 0 \n",
+ " Graduate \n",
+ " No \n",
+ " 5849 \n",
+ " 0.0 \n",
+ " NaN \n",
+ " 360.0 \n",
+ " 1.0 \n",
+ " Urban \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " LP001003 \n",
+ " Male \n",
+ " Yes \n",
+ " 1 \n",
+ " Graduate \n",
+ " No \n",
+ " 4583 \n",
+ " 1508.0 \n",
+ " 128.0 \n",
+ " 360.0 \n",
+ " 1.0 \n",
+ " Rural \n",
+ " N \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " LP001005 \n",
+ " Male \n",
+ " Yes \n",
+ " 0 \n",
+ " Graduate \n",
+ " Yes \n",
+ " 3000 \n",
+ " 0.0 \n",
+ " 66.0 \n",
+ " 360.0 \n",
+ " 1.0 \n",
+ " Urban \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " LP001006 \n",
+ " Male \n",
+ " Yes \n",
+ " 0 \n",
+ " Not Graduate \n",
+ " No \n",
+ " 2583 \n",
+ " 2358.0 \n",
+ " 120.0 \n",
+ " 360.0 \n",
+ " 1.0 \n",
+ " Urban \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " LP001008 \n",
+ " Male \n",
+ " No \n",
+ " 0 \n",
+ " Graduate \n",
+ " No \n",
+ " 6000 \n",
+ " 0.0 \n",
+ " 141.0 \n",
+ " 360.0 \n",
+ " 1.0 \n",
+ " Urban \n",
+ " Y \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Loan_ID Gender Married Dependents Education Self_Employed \\\n",
+ "0 LP001002 Male No 0 Graduate No \n",
+ "1 LP001003 Male Yes 1 Graduate No \n",
+ "2 LP001005 Male Yes 0 Graduate Yes \n",
+ "3 LP001006 Male Yes 0 Not Graduate No \n",
+ "4 LP001008 Male No 0 Graduate No \n",
+ "\n",
+ " ApplicantIncome CoapplicantIncome LoanAmount Loan_Amount_Term \\\n",
+ "0 5849 0.0 NaN 360.0 \n",
+ "1 4583 1508.0 128.0 360.0 \n",
+ "2 3000 0.0 66.0 360.0 \n",
+ "3 2583 2358.0 120.0 360.0 \n",
+ "4 6000 0.0 141.0 360.0 \n",
+ "\n",
+ " Credit_History Property_Area Loan_Status \n",
+ "0 1.0 Urban Y \n",
+ "1 1.0 Rural N \n",
+ "2 1.0 Urban Y \n",
+ "3 1.0 Urban Y \n",
+ "4 1.0 Urban Y "
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " mean \n",
+ " std \n",
+ " min \n",
+ " 25% \n",
+ " 50% \n",
+ " 75% \n",
+ " max \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " ApplicantIncome \n",
+ " 614.0 \n",
+ " 5403.459283 \n",
+ " 6109.041673 \n",
+ " 150.0 \n",
+ " 2877.5 \n",
+ " 3812.5 \n",
+ " 5795.00 \n",
+ " 81000.0 \n",
+ " \n",
+ " \n",
+ " CoapplicantIncome \n",
+ " 614.0 \n",
+ " 1621.245798 \n",
+ " 2926.248369 \n",
+ " 0.0 \n",
+ " 0.0 \n",
+ " 1188.5 \n",
+ " 2297.25 \n",
+ " 41667.0 \n",
+ " \n",
+ " \n",
+ " LoanAmount \n",
+ " 592.0 \n",
+ " 146.412162 \n",
+ " 85.587325 \n",
+ " 9.0 \n",
+ " 100.0 \n",
+ " 128.0 \n",
+ " 168.00 \n",
+ " 700.0 \n",
+ " \n",
+ " \n",
+ " Loan_Amount_Term \n",
+ " 600.0 \n",
+ " 342.000000 \n",
+ " 65.120410 \n",
+ " 12.0 \n",
+ " 360.0 \n",
+ " 360.0 \n",
+ " 360.00 \n",
+ " 480.0 \n",
+ " \n",
+ " \n",
+ " Credit_History \n",
+ " 564.0 \n",
+ " 0.842199 \n",
+ " 0.364878 \n",
+ " 0.0 \n",
+ " 1.0 \n",
+ " 1.0 \n",
+ " 1.00 \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " count mean std min 25% 50% \\\n",
+ "ApplicantIncome 614.0 5403.459283 6109.041673 150.0 2877.5 3812.5 \n",
+ "CoapplicantIncome 614.0 1621.245798 2926.248369 0.0 0.0 1188.5 \n",
+ "LoanAmount 592.0 146.412162 85.587325 9.0 100.0 128.0 \n",
+ "Loan_Amount_Term 600.0 342.000000 65.120410 12.0 360.0 360.0 \n",
+ "Credit_History 564.0 0.842199 0.364878 0.0 1.0 1.0 \n",
+ "\n",
+ " 75% max \n",
+ "ApplicantIncome 5795.00 81000.0 \n",
+ "CoapplicantIncome 2297.25 41667.0 \n",
+ "LoanAmount 168.00 700.0 \n",
+ "Loan_Amount_Term 360.00 480.0 \n",
+ "Credit_History 1.00 1.0 "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_df.describe().transpose()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "*** Findings: ***\n",
+ "- Credit_History is categorical data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[,\n",
+ " ],\n",
+ " [,\n",
+ " ],\n",
+ " [,\n",
+ " ]],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "train_df.hist(figsize=(10,10))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "*** Findings ***\n",
+ "- Credit_History is categorial data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "train_df.boxplot(figsize=(10,6))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "ApplicantIncome and CoapplicantIncome have huge outliers. At this scale we can not see what is going on for LoanAmount and Loan_Amount_Term. se lets make a seperate boxplot for these two."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "train_df.boxplot(column=['LoanAmount','Loan_Amount_Term'],figsize=(10,6))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "*** Findings: ***\n",
+ "- Loan_Amount_Term has one most common value\n",
+ "- Both features have outliers"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 614 entries, 0 to 613\n",
+ "Data columns (total 13 columns):\n",
+ "Loan_ID 614 non-null object\n",
+ "Gender 601 non-null object\n",
+ "Married 611 non-null object\n",
+ "Dependents 599 non-null object\n",
+ "Education 614 non-null object\n",
+ "Self_Employed 582 non-null object\n",
+ "ApplicantIncome 614 non-null int64\n",
+ "CoapplicantIncome 614 non-null float64\n",
+ "LoanAmount 592 non-null float64\n",
+ "Loan_Amount_Term 600 non-null float64\n",
+ "Credit_History 564 non-null float64\n",
+ "Property_Area 614 non-null object\n",
+ "Loan_Status 614 non-null object\n",
+ "dtypes: float64(4), int64(1), object(8)\n",
+ "memory usage: 62.4+ KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "train_df.info()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Loan_ID \n",
+ " Gender \n",
+ " Married \n",
+ " Dependents \n",
+ " Education \n",
+ " Self_Employed \n",
+ " ApplicantIncome \n",
+ " CoapplicantIncome \n",
+ " LoanAmount \n",
+ " Loan_Amount_Term \n",
+ " Credit_History \n",
+ " Property_Area \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " LP001015 \n",
+ " Male \n",
+ " Yes \n",
+ " 0 \n",
+ " Graduate \n",
+ " No \n",
+ " 5720 \n",
+ " 0 \n",
+ " 110.0 \n",
+ " 360.0 \n",
+ " 1.0 \n",
+ " Urban \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " LP001022 \n",
+ " Male \n",
+ " Yes \n",
+ " 1 \n",
+ " Graduate \n",
+ " No \n",
+ " 3076 \n",
+ " 1500 \n",
+ " 126.0 \n",
+ " 360.0 \n",
+ " 1.0 \n",
+ " Urban \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " LP001031 \n",
+ " Male \n",
+ " Yes \n",
+ " 2 \n",
+ " Graduate \n",
+ " No \n",
+ " 5000 \n",
+ " 1800 \n",
+ " 208.0 \n",
+ " 360.0 \n",
+ " 1.0 \n",
+ " Urban \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " LP001035 \n",
+ " Male \n",
+ " Yes \n",
+ " 2 \n",
+ " Graduate \n",
+ " No \n",
+ " 2340 \n",
+ " 2546 \n",
+ " 100.0 \n",
+ " 360.0 \n",
+ " NaN \n",
+ " Urban \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " LP001051 \n",
+ " Male \n",
+ " No \n",
+ " 0 \n",
+ " Not Graduate \n",
+ " No \n",
+ " 3276 \n",
+ " 0 \n",
+ " 78.0 \n",
+ " 360.0 \n",
+ " 1.0 \n",
+ " Urban \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Loan_ID Gender Married Dependents Education Self_Employed \\\n",
+ "0 LP001015 Male Yes 0 Graduate No \n",
+ "1 LP001022 Male Yes 1 Graduate No \n",
+ "2 LP001031 Male Yes 2 Graduate No \n",
+ "3 LP001035 Male Yes 2 Graduate No \n",
+ "4 LP001051 Male No 0 Not Graduate No \n",
+ "\n",
+ " ApplicantIncome CoapplicantIncome LoanAmount Loan_Amount_Term \\\n",
+ "0 5720 0 110.0 360.0 \n",
+ "1 3076 1500 126.0 360.0 \n",
+ "2 5000 1800 208.0 360.0 \n",
+ "3 2340 2546 100.0 360.0 \n",
+ "4 3276 0 78.0 360.0 \n",
+ "\n",
+ " Credit_History Property_Area \n",
+ "0 1.0 Urban \n",
+ "1 1.0 Urban \n",
+ "2 1.0 Urban \n",
+ "3 NaN Urban \n",
+ "4 1.0 Urban "
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "test_df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The test data does not have the target value included and there is no seperate file with the Loan_Status of the test data. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# What features are categorical?\n",
+ "Get the features with a low number of unique values, these are probably catecorical data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Column \n",
+ " Nr of unique values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " Gender \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Married \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Dependents \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " Education \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " Self_Employed \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " Loan_Amount_Term \n",
+ " 11 \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " Credit_History \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 11 \n",
+ " Property_Area \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 12 \n",
+ " Loan_Status \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Column Nr of unique values\n",
+ "1 Gender 3\n",
+ "2 Married 3\n",
+ "3 Dependents 5\n",
+ "4 Education 2\n",
+ "5 Self_Employed 3\n",
+ "9 Loan_Amount_Term 11\n",
+ "10 Credit_History 3\n",
+ "11 Property_Area 3\n",
+ "12 Loan_Status 2"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "unique_values_df = pd.DataFrame()\n",
+ "for col in train_df.columns:\n",
+ " unique_values_df[col] = [len(train_df[col].unique())]\n",
+ " \n",
+ "unique_values_df = unique_values_df.transpose().reset_index()\n",
+ "unique_values_df.columns=['Column','Nr of unique values']\n",
+ "unique_values_df[unique_values_df['Nr of unique values']<100]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Unique values for feature: Gender\n",
+ "Male 489\n",
+ "Female 112\n",
+ "NaN 13\n",
+ "Name: Gender, dtype: int64\n",
+ "\n",
+ "\n",
+ "Unique values for feature: Married\n",
+ "Yes 398\n",
+ "No 213\n",
+ "NaN 3\n",
+ "Name: Married, dtype: int64\n",
+ "\n",
+ "\n",
+ "Unique values for feature: Dependents\n",
+ "0 345\n",
+ "1 102\n",
+ "2 101\n",
+ "3+ 51\n",
+ "NaN 15\n",
+ "Name: Dependents, dtype: int64\n",
+ "\n",
+ "\n",
+ "Unique values for feature: Education\n",
+ "Graduate 480\n",
+ "Not Graduate 134\n",
+ "Name: Education, dtype: int64\n",
+ "\n",
+ "\n",
+ "Unique values for feature: Self_Employed\n",
+ "No 500\n",
+ "Yes 82\n",
+ "NaN 32\n",
+ "Name: Self_Employed, dtype: int64\n",
+ "\n",
+ "\n",
+ "Unique values for feature: Loan_Amount_Term\n",
+ " 360.0 512\n",
+ " 180.0 44\n",
+ " 480.0 15\n",
+ "NaN 14\n",
+ " 300.0 13\n",
+ " 84.0 4\n",
+ " 240.0 4\n",
+ " 120.0 3\n",
+ " 36.0 2\n",
+ " 60.0 2\n",
+ " 12.0 1\n",
+ "Name: Loan_Amount_Term, dtype: int64\n",
+ "\n",
+ "\n",
+ "Unique values for feature: Credit_History\n",
+ " 1.0 475\n",
+ " 0.0 89\n",
+ "NaN 50\n",
+ "Name: Credit_History, dtype: int64\n",
+ "\n",
+ "\n",
+ "Unique values for feature: Property_Area\n",
+ "Semiurban 233\n",
+ "Urban 202\n",
+ "Rural 179\n",
+ "Name: Property_Area, dtype: int64\n",
+ "\n",
+ "\n",
+ "Unique values for feature: Loan_Status\n",
+ "Y 422\n",
+ "N 192\n",
+ "Name: Loan_Status, dtype: int64\n",
+ "\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "for col in unique_values_df[unique_values_df['Nr of unique values']<100]['Column']:\n",
+ " print ('Unique values for feature: ', col)\n",
+ " print (train_df[col].value_counts(dropna=False))\n",
+ " print ('\\n')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## What if we drop all Na values?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.2182410423452769"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data = train_df.dropna()\n",
+ "(train_df.shape[0] - data.shape[0])/train_df.shape[0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "21.8 procent of all data would be dropped, that is alot, so dropping all the rows with NaN values will have significant impact."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.2125340599455041"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data = test_df.dropna()\n",
+ "(test_df.shape[0] - data.shape[0])/test_df.shape[0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Simular NaN values on the test data."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Missing values\n",
+ "Above already indicates that there are missing values. Which features have missing values and what fraction is missing?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " feature \n",
+ " missing_fraction_train \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " Loan_ID \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " Gender \n",
+ " 0.021173 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Married \n",
+ " 0.004886 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Dependents \n",
+ " 0.024430 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " Education \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " Self_Employed \n",
+ " 0.052117 \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " ApplicantIncome \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " CoapplicantIncome \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 8 \n",
+ " LoanAmount \n",
+ " 0.035831 \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " Loan_Amount_Term \n",
+ " 0.022801 \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " Credit_History \n",
+ " 0.081433 \n",
+ " \n",
+ " \n",
+ " 11 \n",
+ " Property_Area \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 12 \n",
+ " Loan_Status \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " feature missing_fraction_train\n",
+ "0 Loan_ID 0.000000\n",
+ "1 Gender 0.021173\n",
+ "2 Married 0.004886\n",
+ "3 Dependents 0.024430\n",
+ "4 Education 0.000000\n",
+ "5 Self_Employed 0.052117\n",
+ "6 ApplicantIncome 0.000000\n",
+ "7 CoapplicantIncome 0.000000\n",
+ "8 LoanAmount 0.035831\n",
+ "9 Loan_Amount_Term 0.022801\n",
+ "10 Credit_History 0.081433\n",
+ "11 Property_Area 0.000000\n",
+ "12 Loan_Status 0.000000"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "missing_series = train_df.isnull().sum() / train_df.shape[0]\n",
+ "#missing_stats = pd.DataFrame(missing_series).rename(columns = {'index': 'feature', 0: 'missing_fraction'})\n",
+ "missing_stats = pd.DataFrame(missing_series).reset_index()\n",
+ "missing_stats.columns = ['feature','missing_fraction_train']\n",
+ "missing_stats"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Is the test data simular? Does the test data have the same missing values?\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " feature \n",
+ " missing_fraction_train \n",
+ " missing_fraction_test \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " Loan_ID \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " Gender \n",
+ " 0.021173 \n",
+ " 0.029973 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Married \n",
+ " 0.004886 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Dependents \n",
+ " 0.024430 \n",
+ " 0.027248 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " Education \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " Self_Employed \n",
+ " 0.052117 \n",
+ " 0.062670 \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " ApplicantIncome \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " CoapplicantIncome \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 8 \n",
+ " LoanAmount \n",
+ " 0.035831 \n",
+ " 0.013624 \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " Loan_Amount_Term \n",
+ " 0.022801 \n",
+ " 0.016349 \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " Credit_History \n",
+ " 0.081433 \n",
+ " 0.079019 \n",
+ " \n",
+ " \n",
+ " 11 \n",
+ " Property_Area \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " feature missing_fraction_train missing_fraction_test\n",
+ "0 Loan_ID 0.000000 0.000000\n",
+ "1 Gender 0.021173 0.029973\n",
+ "2 Married 0.004886 0.000000\n",
+ "3 Dependents 0.024430 0.027248\n",
+ "4 Education 0.000000 0.000000\n",
+ "5 Self_Employed 0.052117 0.062670\n",
+ "6 ApplicantIncome 0.000000 0.000000\n",
+ "7 CoapplicantIncome 0.000000 0.000000\n",
+ "8 LoanAmount 0.035831 0.013624\n",
+ "9 Loan_Amount_Term 0.022801 0.016349\n",
+ "10 Credit_History 0.081433 0.079019\n",
+ "11 Property_Area 0.000000 0.000000"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "missing_series = test_df.isnull().sum() / test_df.shape[0]\n",
+ "#missing_stats = pd.DataFrame(missing_series).rename(columns = {'index': 'feature', 0: 'missing_fraction'})\n",
+ "missing_stats_test = pd.DataFrame(missing_series).reset_index()\n",
+ "missing_stats_test.columns = ['feature','missing_fraction_test']\n",
+ "missing_stats_combined = missing_stats.merge(missing_stats_test, left_on='feature',right_on='feature')\n",
+ "missing_stats_combined"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "*** Findings: ***\n",
+ "- None of the columns has more that 60% missing values.\n",
+ "- Married has no missing values in the test data, but is missing values in the train_data\n",
+ "- Credit History has the largest number of missing values."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## What to do with the missing values?\n",
+ "\n",
+ "Missing values per column, what to do?\n",
+ "Categorical data with missing values:\n",
+ "- Gender: string data\n",
+ "- Married: This is not missing in the test data\n",
+ "- Dependents: int data\n",
+ "- Self_Employed: string data\n",
+ "- Credit_History: large amount of data is missing\n",
+ "\n",
+ "Options for categorical data:\n",
+ "1. Drop the NaN rows\n",
+ "2. Ignore the NaN category\n",
+ "3. Make a seperate category for the NaN data\n",
+ "4. Fill with a learning or other mechanism\n",
+ "\n",
+ "Number data with NaN values:\n",
+ "- LoanAmount: float data\n",
+ "- Loan_Amount_Term: float data\n",
+ "\n",
+ "Options:\n",
+ "1. Drop NaN\n",
+ "2. Replace with average\n",
+ "3. Replace with median value\n",
+ "4. Fill with a learning or other mechanism\n",
+ "\n",
+ "**Choose** option 3 because there are outliers for these fields.\n",
+ "\n",
+ "With the code below experiments can be done on the different options and the difference in outcome."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "No replacements are done for category NaN values, NaN will not get a dummy column\n"
+ ]
+ }
+ ],
+ "source": [
+ "def replace_cat_nan_values(df):\n",
+ " df.Gender.fillna('missing',inplace=True)\n",
+ " #df.Married.fillna('missing',inplace=True)\n",
+ " df.Dependents.fillna(-1,inplace=True)\n",
+ " df.Self_Employed.fillna('missing',inplace=True)\n",
+ " df.Credit_History.fillna(-1,inplace=True)\n",
+ " df.dropna(inplace=True) \n",
+ " \n",
+ "def replace_nan_values_floats_median(df):\n",
+ " df['Loan_Amount_Term'].fillna(df['Loan_Amount_Term'].median(), inplace=True)\n",
+ " df['LoanAmount'].fillna(df['LoanAmount'].median(), inplace=True)\n",
+ " \n",
+ "def replace_nan_values_floats_mean(df):\n",
+ " df['Loan_Amount_Term'].fillna(df['Loan_Amount_Term'].mean(), inplace=True)\n",
+ " df['LoanAmount'].fillna(df['LoanAmount'].mean(), inplace=True) \n",
+ "\n",
+ "category_nan_option = 2 \n",
+ "if category_nan_option == 1: \n",
+ " train_df.dropna(subset=['Gender','Married','Dependents','Self_Employed','Credit_History'],inplace=True)\n",
+ " test_df.dropna(subset=['Gender','Married','Dependents','Self_Employed','Credit_History'],inplace=True)\n",
+ "elif category_nan_option == 2:\n",
+ " print ('No replacements are done for category NaN values, NaN will not get a dummy column')\n",
+ "elif category_nan_option == 3:\n",
+ " replace_cat_nan_values(train_df)\n",
+ " replace_cat_nan_values(test_df)\n",
+ "else:\n",
+ " print ('Not implemented, defaults to option 2')\n",
+ "\n",
+ "float_nan_option = 3 \n",
+ "if category_nan_option == 1: \n",
+ " train_df.dropna(subset=['LoanAmount','Loan_Amount_Term'],inplace=True)\n",
+ " test_df.dropna(subset=['LoanAmount','Loan_Amount_Term'],inplace=True)\n",
+ "elif category_nan_option == 2:\n",
+ " replace_nan_values_floats_mean(train_df)\n",
+ " replace_nan_values_floats_mean(test_df)\n",
+ "elif category_nan_option == 3:\n",
+ " replace_nan_values_floats_median(train_df)\n",
+ " replace_nan_values_floats_median(test_df)\n",
+ "else:\n",
+ " print ('Not implemented, defaults to option 2') \n",
+ " replace_nan_values_floats_median(train_df)\n",
+ " replace_nan_values_floats_median(test_df)\n",
+ " \n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " ApplicantIncome \n",
+ " CoapplicantIncome \n",
+ " LoanAmount \n",
+ " Loan_Amount_Term \n",
+ " Credit_History \n",
+ " \n",
+ " \n",
+ " Loan_Status \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " N \n",
+ " 5446.078125 \n",
+ " 1877.807292 \n",
+ " 150.945488 \n",
+ " 344.000000 \n",
+ " 0.541899 \n",
+ " \n",
+ " \n",
+ " Y \n",
+ " 5384.068720 \n",
+ " 1504.516398 \n",
+ " 144.349606 \n",
+ " 341.090047 \n",
+ " 0.981818 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " ApplicantIncome CoapplicantIncome LoanAmount Loan_Amount_Term \\\n",
+ "Loan_Status \n",
+ "N 5446.078125 1877.807292 150.945488 344.000000 \n",
+ "Y 5384.068720 1504.516398 144.349606 341.090047 \n",
+ "\n",
+ " Credit_History \n",
+ "Loan_Status \n",
+ "N 0.541899 \n",
+ "Y 0.981818 "
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_df.groupby('Loan_Status').mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " mean \n",
+ " std \n",
+ " min \n",
+ " 25% \n",
+ " 50% \n",
+ " 75% \n",
+ " max \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [count, mean, std, min, 25%, 50%, 75%, max]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def find_features_with_no_variation(df):\n",
+ " stats = df.describe().transpose()\n",
+ " return stats[stats['min'] == stats['max']]\n",
+ "\n",
+ "find_features_with_no_variation(train_df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Below only works for numeric features. For these numeric features, no features with a high correlation are found."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def find_features_with_high_correlation(df,treshhold=0.95):\n",
+ " corr_matrix = df.corr().abs()\n",
+ " # Select upper triangle of correlation matrix\n",
+ " upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool))\n",
+ " \n",
+ " # Find index of feature columns with correlation greater than treshhold\n",
+ " return [column for column in upper.columns if any(upper[column] >treshhold)]\n",
+ "\n",
+ "find_features_with_high_correlation(train_df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Does having an education affect yearly income? \n",
+ "Yes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " ApplicantIncome \n",
+ " \n",
+ " \n",
+ " Education \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Graduate \n",
+ " 5857.433333 \n",
+ " \n",
+ " \n",
+ " Not Graduate \n",
+ " 3777.283582 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " ApplicantIncome\n",
+ "Education \n",
+ "Graduate 5857.433333\n",
+ "Not Graduate 3777.283582"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_df.groupby('Education')['Education','ApplicantIncome'].mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Does yearly income affect the requested loan amount?\n",
+ "No, there is not a strong relation"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.scatter(train_df[train_df['ApplicantIncome']<10000]['ApplicantIncome'],train_df[train_df['ApplicantIncome']<10000]['LoanAmount'])\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " ApplicantIncome \n",
+ " LoanAmount \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " ApplicantIncome \n",
+ " 1.000000 \n",
+ " 0.565620 \n",
+ " \n",
+ " \n",
+ " CoapplicantIncome \n",
+ " 0.116605 \n",
+ " 0.187828 \n",
+ " \n",
+ " \n",
+ " LoanAmount \n",
+ " 0.565620 \n",
+ " 1.000000 \n",
+ " \n",
+ " \n",
+ " Loan_Amount_Term \n",
+ " 0.045242 \n",
+ " 0.038801 \n",
+ " \n",
+ " \n",
+ " Credit_History \n",
+ " 0.014715 \n",
+ " 0.008301 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " ApplicantIncome LoanAmount\n",
+ "ApplicantIncome 1.000000 0.565620\n",
+ "CoapplicantIncome 0.116605 0.187828\n",
+ "LoanAmount 0.565620 1.000000\n",
+ "Loan_Amount_Term 0.045242 0.038801\n",
+ "Credit_History 0.014715 0.008301"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "corr_matrix = train_df.corr().abs()\n",
+ "corr_matrix[['ApplicantIncome','LoanAmount']]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Does an education in combination with the requested loan amount affect the approval of a loan?\n",
+ "No, see below."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " LoanAmount \n",
+ " \n",
+ " \n",
+ " Education \n",
+ " Loan_Status \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Graduate \n",
+ " N \n",
+ " 160.746236 \n",
+ " \n",
+ " \n",
+ " Y \n",
+ " 150.969734 \n",
+ " \n",
+ " \n",
+ " Not Graduate \n",
+ " N \n",
+ " 124.558862 \n",
+ " \n",
+ " \n",
+ " Y \n",
+ " 116.900297 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " LoanAmount\n",
+ "Education Loan_Status \n",
+ "Graduate N 160.746236\n",
+ " Y 150.969734\n",
+ "Not Graduate N 124.558862\n",
+ " Y 116.900297"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_df.groupby(['Education','Loan_Status'])[['Education','Loan_Status','LoanAmount']].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " LoanAmount \n",
+ " \n",
+ " \n",
+ " Education \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Graduate \n",
+ " 153.821213 \n",
+ " \n",
+ " \n",
+ " Not Graduate \n",
+ " 119.872277 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " LoanAmount\n",
+ "Education \n",
+ "Graduate 153.821213\n",
+ "Not Graduate 119.872277"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_df.groupby(['Education'])[['Education','LoanAmount']].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " LoanAmount \n",
+ " \n",
+ " \n",
+ " Loan_Status \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " N \n",
+ " 150.945488 \n",
+ " \n",
+ " \n",
+ " Y \n",
+ " 144.349606 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " LoanAmount\n",
+ "Loan_Status \n",
+ "N 150.945488\n",
+ "Y 144.349606"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_df.groupby(['Loan_Status'])[['Loan_Status','LoanAmount']].mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "*** Findings ***\n",
+ "- Graduates tend to request for higher loans in general\n",
+ "- In general, a higher LoanAmount is more likely to be denied, but the difference is small\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Categorical data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Column \n",
+ " Nr of unique values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " Gender \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Married \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Dependents \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " Education \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " Self_Employed \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " Loan_Amount_Term \n",
+ " 11 \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " Credit_History \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 11 \n",
+ " Property_Area \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 12 \n",
+ " Loan_Status \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Column Nr of unique values\n",
+ "1 Gender 3\n",
+ "2 Married 3\n",
+ "3 Dependents 5\n",
+ "4 Education 2\n",
+ "5 Self_Employed 3\n",
+ "9 Loan_Amount_Term 11\n",
+ "10 Credit_History 3\n",
+ "11 Property_Area 3\n",
+ "12 Loan_Status 2"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "unique_values_df = pd.DataFrame()\n",
+ "for col in train_df.columns:\n",
+ " unique_values_df[col] = [len(train_df[col].unique())]\n",
+ " \n",
+ "unique_values_df = unique_values_df.transpose().reset_index()\n",
+ "unique_values_df.columns=['Column','Nr of unique values']\n",
+ "unique_values_df[unique_values_df['Nr of unique values']<100]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For category data it is the best to convert these to dummy values. \n",
+ "\n",
+ "*** Notes: ***\n",
+ "- Notice that this makes a huge difference for the Credit_History in particular. If this attribute is not converted, the results are very different."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cat_vars=['Gender','Married','Dependents','Education','Self_Employed','Property_Area']\n",
+ "\n",
+ "cat_df = pd.get_dummies(train_df[cat_vars])\n",
+ "one_hot_features = cat_df.columns\n",
+ "\n",
+ "# Add one hot encoded data to original data\n",
+ "train_data_with_cat = pd.concat([cat_df, train_df], axis = 1)\n",
+ "# For Credit_History it does not work in one go because the values are float\n",
+ "train_data_with_cat = pd.concat([train_data_with_cat, pd.get_dummies(train_data_with_cat[\"Credit_History\"], prefix=\"Credit_History\", prefix_sep=\"_\")], axis=1)\n",
+ "\n",
+ "# apply the same on test\n",
+ "cat_df = pd.get_dummies(test_df[cat_vars])\n",
+ "\n",
+ "# Add one hot encoded data to original data\n",
+ "test_data_with_cat = pd.concat([cat_df, test_df], axis = 1)\n",
+ "test_data_with_cat = pd.concat([test_data_with_cat, pd.get_dummies(test_data_with_cat[\"Credit_History\"], prefix=\"Credit_History\", prefix_sep=\"_\")], axis=1)\n",
+ "\n",
+ "cat_vars.append('Credit_History')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Index(['ApplicantIncome', 'CoapplicantIncome', 'Credit_History_0.0',\n",
+ " 'Credit_History_1.0', 'Dependents_0', 'Dependents_1', 'Dependents_2',\n",
+ " 'Dependents_3+', 'Education_Graduate', 'Education_Not Graduate',\n",
+ " 'Gender_Female', 'Gender_Male', 'LoanAmount', 'Loan_Amount_Term',\n",
+ " 'Married_No', 'Married_Yes', 'Property_Area_Rural',\n",
+ " 'Property_Area_Semiurban', 'Property_Area_Urban', 'Self_Employed_No',\n",
+ " 'Self_Employed_Yes'],\n",
+ " dtype='object')"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y_cols = ['Loan_Status']\n",
+ "\n",
+ "# 'Loan_ID' has no prediction value\n",
+ "do_not_use = ['Loan_ID']\n",
+ "feature_cols = train_data_with_cat.columns.difference(set(y_cols + cat_vars + do_not_use))\n",
+ "feature_cols"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Feature selection"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Number of features before selection: 21\n",
+ "[False False True True False True True False True False True True\n",
+ " False False True False True True False False False]\n",
+ "[12 11 1 1 5 1 1 7 1 8 1 1 9 10 1 2 1 1 6 3 4]\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.feature_selection import RFE\n",
+ "from sklearn.linear_model import LogisticRegression\n",
+ "\n",
+ "logreg = LogisticRegression()\n",
+ "\n",
+ "print ('Number of features before selection:', len(feature_cols))\n",
+ "n_features_to_select = None\n",
+ "rfe = RFE(logreg, n_features_to_select)\n",
+ "rfe = rfe.fit(train_data_with_cat[feature_cols], train_data_with_cat['Loan_Status'] )\n",
+ "print(rfe.support_)\n",
+ "print(rfe.ranking_)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['Credit_History_0.0',\n",
+ " 'Credit_History_1.0',\n",
+ " 'Dependents_1',\n",
+ " 'Dependents_2',\n",
+ " 'Education_Graduate',\n",
+ " 'Gender_Female',\n",
+ " 'Gender_Male',\n",
+ " 'Married_No',\n",
+ " 'Property_Area_Rural',\n",
+ " 'Property_Area_Semiurban']"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "selected_cols = feature_cols[rfe.support_].tolist()\n",
+ "selected_cols\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# try with manual selected columns\n",
+ "#selected_cols = ['Credit_History_0.0','Credit_History_1.0','Dependents_1','Education_Graduate','Married_No','Property_Area_Semiurban']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The test data does not have the Y column\n",
+ "Since the y values are not known, the test file is not suitable for validation. So a part of the train data is used for testing."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn import model_selection\n",
+ "X=train_data_with_cat[selected_cols]\n",
+ "Y=train_data_with_cat['Loan_Status']\n",
+ "X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=0.3, random_state=0)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Try different models. For each model the average accuracy for 10 fold cross validation is calculated. Then "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "LR: 0.797121 (0.058265)\n",
+ "LDA: 0.801772 (0.052655)\n",
+ "KNN: 0.776190 (0.061810)\n",
+ "CART: 0.725028 (0.071601)\n",
+ "NB: 0.766888 (0.081246)\n",
+ "SVM: 0.801772 (0.052655)\n",
+ "RFC: 0.750554 (0.057116)\n",
+ "Fitting:LR\n",
+ "Accuracy of LR on test set: 0.83\n",
+ "Fitting:LDA\n",
+ "Accuracy of LDA on test set: 0.83\n",
+ "Fitting:KNN\n",
+ "Accuracy of KNN on test set: 0.82\n",
+ "Fitting:CART\n",
+ "Accuracy of CART on test set: 0.79\n",
+ "Fitting:NB\n",
+ "Accuracy of NB on test set: 0.80\n",
+ "Fitting:SVM\n",
+ "Accuracy of SVM on test set: 0.83\n",
+ "Fitting:RFC\n",
+ "Accuracy of RFC on test set: 0.80\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import classification_report\n",
+ "from sklearn.metrics import confusion_matrix\n",
+ "from sklearn.metrics import accuracy_score\n",
+ "from sklearn.linear_model import LogisticRegression\n",
+ "from sklearn.tree import DecisionTreeClassifier\n",
+ "from sklearn.neighbors import KNeighborsClassifier\n",
+ "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
+ "from sklearn.naive_bayes import GaussianNB\n",
+ "from sklearn.ensemble import RandomForestClassifier\n",
+ "from sklearn.svm import SVC\n",
+ "\n",
+ "def apply_classification_models(X_train,Y_train,X_test,result):\n",
+ " models = []\n",
+ " \n",
+ " models.append(('LR', LogisticRegression()))\n",
+ " models.append(('LDA', LinearDiscriminantAnalysis()))\n",
+ " models.append(('KNN', KNeighborsClassifier()))\n",
+ " models.append(('CART', DecisionTreeClassifier()))\n",
+ " models.append(('NB', GaussianNB()))\n",
+ " models.append(('SVM', SVC()))\n",
+ " models.append(('RFC', RandomForestClassifier()))\n",
+ "\n",
+ " # evaluate each model in turn\n",
+ " results = []\n",
+ " names = []\n",
+ " for name, model in models:\n",
+ " kfold = model_selection.KFold(n_splits=10)\n",
+ " cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')\n",
+ " results.append(cv_results)\n",
+ " names.append(name)\n",
+ " msg = \"%s: %f (%f)\" % (name, cv_results.mean(), cv_results.std())\n",
+ " print(msg)\n",
+ " \n",
+ " #\n",
+ " # now fit each model on the train data and predict on the test data\n",
+ " for name, model in models:\n",
+ " print ('Fitting:' + name)\n",
+ " model.fit(X_train,Y_train)\n",
+ " y_pred = model.predict(X_test)\n",
+ "\n",
+ " print('Accuracy of {} on test set: {:.2f}'.format(name,model.score(X_test, Y_test)))\n",
+ " result['Predicted_by_'+name] = y_pred\n",
+ " \n",
+ " return models\n",
+ "\n",
+ "result = pd.DataFrame()\n",
+ "models = apply_classification_models(X_train,Y_train,X_test,result)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Result of each predictor on the test data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Predicted_by_LR \n",
+ " Predicted_by_LDA \n",
+ " Predicted_by_KNN \n",
+ " Predicted_by_CART \n",
+ " Predicted_by_NB \n",
+ " Predicted_by_SVM \n",
+ " Predicted_by_RFC \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Predicted_by_LR Predicted_by_LDA Predicted_by_KNN Predicted_by_CART \\\n",
+ "0 Y Y Y Y \n",
+ "1 Y Y Y Y \n",
+ "2 Y Y Y Y \n",
+ "3 Y Y Y Y \n",
+ "4 Y Y Y Y \n",
+ "\n",
+ " Predicted_by_NB Predicted_by_SVM Predicted_by_RFC \n",
+ "0 Y Y Y \n",
+ "1 Y Y Y \n",
+ "2 Y Y Y \n",
+ "3 Y Y Y \n",
+ "4 Y Y Y "
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "result.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# But what if we had choosen different ways to clean the missing values?\n",
+ "\n",
+ "So lets repeat the code from above an experiment with different clean methods. Experimenting with the code below it turns out that ignoring the nan values (option 2) and replacing the floats with median or mean values gives the best results. \n",
+ "\n",
+ "In fact, the best result are achived by selecting only the 'Credit_History_0.0'. This means that not having a credit history is the best indicator if a loan will be granted. In practice that would not be realy helpfull.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "No replacements are done for category NaN values, NaN will not get a dummy column\n"
+ ]
+ }
+ ],
+ "source": [
+ "train_df = pd.read_csv('../data/train.csv')\n",
+ "test_df = pd.read_csv('../data/test.csv')\n",
+ "\n",
+ "category_nan_option = 2 \n",
+ "if category_nan_option == 1: \n",
+ " train_df.dropna(subset=['Gender','Married','Dependents','Self_Employed','Credit_History'],inplace=True)\n",
+ " test_df.dropna(subset=['Gender','Married','Dependents','Self_Employed','Credit_History'],inplace=True)\n",
+ "elif category_nan_option == 2:\n",
+ " print ('No replacements are done for category NaN values, NaN will not get a dummy column')\n",
+ "elif category_nan_option == 3:\n",
+ " replace_cat_nan_values(train_df)\n",
+ " replace_cat_nan_values(test_df)\n",
+ "else:\n",
+ " print ('Not implemented, defaults to option 2')\n",
+ "\n",
+ "float_nan_option = 3 \n",
+ "if category_nan_option == 1: \n",
+ " train_df.dropna(subset=['LoanAmount','Loan_Amount_Term'],inplace=True)\n",
+ " test_df.dropna(subset=['LoanAmount','Loan_Amount_Term'],inplace=True)\n",
+ "elif category_nan_option == 2:\n",
+ " replace_nan_values_floats_mean(train_df)\n",
+ " replace_nan_values_floats_mean(test_df)\n",
+ "elif category_nan_option == 3:\n",
+ " replace_nan_values_floats_median(train_df)\n",
+ " replace_nan_values_floats_median(test_df)\n",
+ "else:\n",
+ " print ('Not implemented, defaults to option 2') \n",
+ " replace_nan_values_floats_median(train_df)\n",
+ " replace_nan_values_floats_median(test_df)\n",
+ "\n",
+ "cat_vars=['Gender','Married','Dependents','Education','Self_Employed','Property_Area']\n",
+ "\n",
+ "cat_df = pd.get_dummies(train_df[cat_vars])\n",
+ "one_hot_features = cat_df.columns\n",
+ "\n",
+ "# Add one hot encoded data to original data\n",
+ "train_data_with_cat = pd.concat([cat_df, train_df], axis = 1)\n",
+ "# For Credit_History it does not work in one go because the values are float\n",
+ "train_data_with_cat = pd.concat([train_data_with_cat, pd.get_dummies(train_data_with_cat[\"Credit_History\"], prefix=\"Credit_History\", prefix_sep=\"_\")], axis=1)\n",
+ "\n",
+ "# apply the same on test\n",
+ "cat_df = pd.get_dummies(test_df[cat_vars])\n",
+ "\n",
+ "# Add one hot encoded data to original data\n",
+ "test_data_with_cat = pd.concat([cat_df, test_df], axis = 1)\n",
+ "test_data_with_cat = pd.concat([test_data_with_cat, pd.get_dummies(test_data_with_cat[\"Credit_History\"], prefix=\"Credit_History\", prefix_sep=\"_\")], axis=1)\n",
+ "\n",
+ "cat_vars.append('Credit_History')\n",
+ "y_cols = ['Loan_Status']\n",
+ "\n",
+ "# 'Loan_ID' has no prediction value\n",
+ "do_not_use = ['Loan_ID']\n",
+ "feature_cols = train_data_with_cat.columns.difference(set(y_cols + cat_vars + do_not_use))\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Feature selection\n",
+ "\n",
+ "*** Notes ***\n",
+ "- Experimenting with the code below it turns out that the 'Credit_History_0.0' is the most defining feature. \n",
+ "- Setting ```n_features_to_select``` to 1 causes 'Credit_History_0.0' to be the selected feature and with this one feature selected the results are the same!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Number of features before selection: 21\n",
+ "[False False True True False True True False True False True True\n",
+ " False False True False True True False False False]\n",
+ "[12 11 1 1 5 1 1 7 1 8 1 1 9 10 1 2 1 1 6 3 4]\n"
+ ]
+ }
+ ],
+ "source": [
+ "logreg = LogisticRegression()\n",
+ "\n",
+ "print ('Number of features before selection:', len(feature_cols))\n",
+ "n_features_to_select = None\n",
+ "rfe = RFE(logreg, n_features_to_select)\n",
+ "rfe = rfe.fit(train_data_with_cat[feature_cols], train_data_with_cat['Loan_Status'] )\n",
+ "print(rfe.support_)\n",
+ "print(rfe.ranking_)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['Credit_History_0.0',\n",
+ " 'Credit_History_1.0',\n",
+ " 'Dependents_1',\n",
+ " 'Dependents_2',\n",
+ " 'Education_Graduate',\n",
+ " 'Gender_Female',\n",
+ " 'Gender_Male',\n",
+ " 'Married_No',\n",
+ " 'Property_Area_Rural',\n",
+ " 'Property_Area_Semiurban']"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "selected_cols = feature_cols[rfe.support_].tolist()\n",
+ "selected_cols"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# try with manual selected columns\n",
+ "manual_select_columns = False\n",
+ "if manual_select_columns:\n",
+ " sellected_cols = ['Property_Area_Semiurban']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "LR: 0.797121 (0.058265)\n",
+ "LDA: 0.801772 (0.052655)\n",
+ "KNN: 0.776190 (0.061810)\n",
+ "CART: 0.727353 (0.071051)\n",
+ "NB: 0.766888 (0.081246)\n",
+ "SVM: 0.801772 (0.052655)\n",
+ "RFC: 0.755260 (0.058977)\n",
+ "Fitting:LR\n",
+ "Accuracy of LR on test set: 0.83\n",
+ "Fitting:LDA\n",
+ "Accuracy of LDA on test set: 0.83\n",
+ "Fitting:KNN\n",
+ "Accuracy of KNN on test set: 0.82\n",
+ "Fitting:CART\n",
+ "Accuracy of CART on test set: 0.79\n",
+ "Fitting:NB\n",
+ "Accuracy of NB on test set: 0.80\n",
+ "Fitting:SVM\n",
+ "Accuracy of SVM on test set: 0.83\n",
+ "Fitting:RFC\n",
+ "Accuracy of RFC on test set: 0.80\n"
+ ]
+ }
+ ],
+ "source": [
+ "X=train_data_with_cat[selected_cols]\n",
+ "Y=train_data_with_cat['Loan_Status']\n",
+ "X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=0.3, random_state=0)\n",
+ "result = pd.DataFrame()\n",
+ "models = apply_classification_models(X_train,Y_train,X_test,result)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# What is the relation between 'Loan_Status' and 'Credit_History'?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " Credit_History \n",
+ " 0.0 \n",
+ " 1.0 \n",
+ " nan \n",
+ " \n",
+ " \n",
+ " Loan_Status \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " N \n",
+ " 0.921348 \n",
+ " 0.204211 \n",
+ " 0.26 \n",
+ " \n",
+ " \n",
+ " Y \n",
+ " 0.078652 \n",
+ " 0.795789 \n",
+ " 0.74 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Credit_History 0.0 1.0 nan\n",
+ "Loan_Status \n",
+ "N 0.921348 0.204211 0.26\n",
+ "Y 0.078652 0.795789 0.74"
+ ]
+ },
+ "execution_count": 40,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.crosstab(train_df['Loan_Status'],train_df['Credit_History'].astype(str),normalize='columns' )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Y 0.687296\n",
+ "N 0.312704\n",
+ "Name: Loan_Status, dtype: float64"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_df['Loan_Status'].value_counts(normalize=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# So how usefull is the Logistic regression model?\n",
+ "The Logistic regression model above gets a 0.83 accuracy. That seems the best, but how usefull and good is this really?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "13"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# merge the original fields back to the test\n",
+ "cols = train_data_with_cat.columns.difference(X_test.columns)\n",
+ "X_test_all = pd.merge(X_test,train_data_with_cat[cols],left_index=True,right_index=True)\n",
+ "X_test_all['Credit_History'].isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Predicted_by_LR \n",
+ " Predicted_by_LDA \n",
+ " Predicted_by_KNN \n",
+ " Predicted_by_CART \n",
+ " Predicted_by_NB \n",
+ " Predicted_by_SVM \n",
+ " Predicted_by_RFC \n",
+ " index \n",
+ " Credit_History_0.0 \n",
+ " Credit_History_1.0 \n",
+ " ... \n",
+ " Loan_Amount_Term \n",
+ " Loan_ID \n",
+ " Loan_Status \n",
+ " Married \n",
+ " Married_Yes \n",
+ " Property_Area \n",
+ " Property_Area_Urban \n",
+ " Self_Employed \n",
+ " Self_Employed_No \n",
+ " Self_Employed_Yes \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " 454 \n",
+ " 0 \n",
+ " 1 \n",
+ " ... \n",
+ " 360.0 \n",
+ " LP002453 \n",
+ " Y \n",
+ " No \n",
+ " 0 \n",
+ " Semiurban \n",
+ " 0 \n",
+ " Yes \n",
+ " 0 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " 52 \n",
+ " 0 \n",
+ " 1 \n",
+ " ... \n",
+ " 360.0 \n",
+ " LP001164 \n",
+ " N \n",
+ " No \n",
+ " 0 \n",
+ " Semiurban \n",
+ " 0 \n",
+ " No \n",
+ " 1 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " 536 \n",
+ " 0 \n",
+ " 1 \n",
+ " ... \n",
+ " 360.0 \n",
+ " LP002734 \n",
+ " Y \n",
+ " Yes \n",
+ " 1 \n",
+ " Urban \n",
+ " 1 \n",
+ " No \n",
+ " 1 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " 469 \n",
+ " 0 \n",
+ " 1 \n",
+ " ... \n",
+ " 360.0 \n",
+ " LP002505 \n",
+ " N \n",
+ " Yes \n",
+ " 1 \n",
+ " Urban \n",
+ " 1 \n",
+ " No \n",
+ " 1 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " 55 \n",
+ " 0 \n",
+ " 1 \n",
+ " ... \n",
+ " 360.0 \n",
+ " LP001194 \n",
+ " Y \n",
+ " Yes \n",
+ " 1 \n",
+ " Semiurban \n",
+ " 0 \n",
+ " No \n",
+ " 1 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
5 rows × 38 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Predicted_by_LR Predicted_by_LDA Predicted_by_KNN Predicted_by_CART \\\n",
+ "0 Y Y Y Y \n",
+ "1 Y Y Y Y \n",
+ "2 Y Y Y Y \n",
+ "3 Y Y Y Y \n",
+ "4 Y Y Y Y \n",
+ "\n",
+ " Predicted_by_NB Predicted_by_SVM Predicted_by_RFC index \\\n",
+ "0 Y Y Y 454 \n",
+ "1 Y Y Y 52 \n",
+ "2 Y Y Y 536 \n",
+ "3 Y Y Y 469 \n",
+ "4 Y Y Y 55 \n",
+ "\n",
+ " Credit_History_0.0 Credit_History_1.0 ... \\\n",
+ "0 0 1 ... \n",
+ "1 0 1 ... \n",
+ "2 0 1 ... \n",
+ "3 0 1 ... \n",
+ "4 0 1 ... \n",
+ "\n",
+ " Loan_Amount_Term Loan_ID Loan_Status Married Married_Yes \\\n",
+ "0 360.0 LP002453 Y No 0 \n",
+ "1 360.0 LP001164 N No 0 \n",
+ "2 360.0 LP002734 Y Yes 1 \n",
+ "3 360.0 LP002505 N Yes 1 \n",
+ "4 360.0 LP001194 Y Yes 1 \n",
+ "\n",
+ " Property_Area Property_Area_Urban Self_Employed Self_Employed_No \\\n",
+ "0 Semiurban 0 Yes 0 \n",
+ "1 Semiurban 0 No 1 \n",
+ "2 Urban 1 No 1 \n",
+ "3 Urban 1 No 1 \n",
+ "4 Semiurban 0 No 1 \n",
+ "\n",
+ " Self_Employed_Yes \n",
+ "0 1 \n",
+ "1 0 \n",
+ "2 0 \n",
+ "3 0 \n",
+ "4 0 \n",
+ "\n",
+ "[5 rows x 38 columns]"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# merge back to the result\n",
+ "result = pd.merge(result,X_test_all.reset_index(),left_index=True,right_index=True)\n",
+ "result.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Credit_History \n",
+ " Credit_History_0.0 \n",
+ " Predicted_by_LR \n",
+ " Predicted_by_RFC \n",
+ " Loan_Status \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 16 \n",
+ " NaN \n",
+ " 0 \n",
+ " Y \n",
+ " Y \n",
+ " N \n",
+ " \n",
+ " \n",
+ " 18 \n",
+ " NaN \n",
+ " 0 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 24 \n",
+ " NaN \n",
+ " 0 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 55 \n",
+ " NaN \n",
+ " 0 \n",
+ " Y \n",
+ " N \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " 66 \n",
+ " NaN \n",
+ " 0 \n",
+ " Y \n",
+ " Y \n",
+ " Y \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Credit_History Credit_History_0.0 Predicted_by_LR Predicted_by_RFC \\\n",
+ "16 NaN 0 Y Y \n",
+ "18 NaN 0 Y Y \n",
+ "24 NaN 0 Y Y \n",
+ "55 NaN 0 Y N \n",
+ "66 NaN 0 Y Y \n",
+ "\n",
+ " Loan_Status \n",
+ "16 N \n",
+ "18 Y \n",
+ "24 Y \n",
+ "55 Y \n",
+ "66 Y "
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "result[result['Credit_History'].isnull()].head()[['Credit_History','Credit_History_0.0','Predicted_by_LR','Predicted_by_RFC','Loan_Status']]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEUCAYAAAAlXv26AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAGbVJREFUeJzt3XuUVeWd5vHvA4gIKAiUxFho0UgrEQRJaYOAl1ajRoM6iooyEMUQI47jtcVhZqDXkhVcEm/jLUyDoEHRMdiirTaKGo0GsLgYlYvgvdRIqQEBJQH5zR9nQ8rKoS7nnOJUbZ7PWrXq7He/e78/Ti2e2vWefVFEYGZm6dWi2AWYmVnjctCbmaWcg97MLOUc9GZmKeegNzNLOQe9mVnKOejNzFLOQW9mlnIOejOzlHPQm5mlXKtiFwDQpUuXKCsrK3YZZmbNyuLFiz+PiJK6+jWJoC8rK6OioqLYZZiZNSuSPqhPP0/dmJmlnIPezCzlHPRmZinXJObozaz52rJlC5WVlWzevLnYpaRWmzZtKC0tZY899shpewe9meWlsrKSvffem7KyMiQVu5zUiQi++OILKisr6d69e0778NSNmeVl8+bNdO7c2SHfSCTRuXPnvP5ictCbWd4c8o0r3/fXQW9mlnKeozery8QOu3i89bt2vEbQsmVL+vTpw9atW+nVqxczZ86kbdu2Oe3rxRdfZMqUKTz55JPMnTuX5cuXM27cuKx9161bx4MPPshll13WoDEmTpxI+/btufbaa7OuP+6445gyZQrl5eUNrr+uMaq/V927d+eBBx6gY8eOOY+TjY/ozazg9tprL5YtW8abb75J69atuffee7+zPiLYtm1bg/c7dOjQnYY8ZIL+7rvvbvB+i6n6e9WpUyfuuuuugo/hoDezRjVkyBDWrFnD+++/T69evbjsssvo378/H330EfPmzWPgwIH079+fYcOGsXHjRgCeeeYZDj30UAYPHsycOXN27GvGjBlcfvnlAHz22WecddZZ9O3bl759+/Lqq68ybtw43nnnHfr168d1110HwM0338yRRx7J4YcfzoQJE3bsa9KkSRxyyCGceOKJrFq1qs5/x29+8xuOPvpoevfuzaJFi9i2bRs9e/akqqoKgG3btnHwwQfz+eef5/xeDRw4kI8//jjn7XfGQW9mjWbr1q08/fTT9OnTB4BVq1YxcuRIli5dSrt27bjxxht57rnnWLJkCeXl5dxyyy1s3ryZn/3sZzzxxBO8/PLL/OlPf8q67yuuuIJjjz2W119/nSVLlnDYYYcxefJkevTowbJly7j55puZN28eq1evZtGiRSxbtozFixfz0ksvsXjxYmbPns3SpUuZM2cOr732Wp3/lk2bNvHqq69y9913c/HFF9OiRQtGjBjBrFmzAHjuuefo27cvXbp0yem9+vbbb5k/fz5Dhw7NafvaOOjNrOC++eYb+vXrR3l5OQceeCCjR48G4KCDDmLAgAEALFiwgOXLlzNo0CD69evHzJkz+eCDD1i5ciXdu3enZ8+eSGLEiBFZx3j++ef5xS9+AWTmuTt0+PvPUubNm8e8efM44ogj6N+/PytXrmT16tW8/PLLnHXWWbRt25Z99tmnXuE6fPhwAI455hi++uor1q1bx8UXX8z9998PwPTp07noootyfq86d+7Ml19+yUknndTgfdTFH8aaWcFtn3euqV27djteRwQnnXQSDz300Hf6LFu2rGCna0YEN9xwAz//+c+/037bbbc1eIya/SXRrVs3unbtyvPPP8/ChQt3HN03xPb3av369Zx++uncddddXHHFFQ3eT218RG9mRTFgwABeeeUV1qxZA8DXX3/N22+/zaGHHsp7773HO++8A/B3vwi2O+GEE7jnnnuAzLTHV199xd57782GDRt29Dn55JOZPn36jrn/jz/+mLVr13LMMcfw2GOP8c0337BhwwaeeOKJOut9+OGHAfj9739Phw4ddvwFcckllzBixAjOPfdcWrZsmeO7AR06dOCOO+5gypQpbNmyJef9ZOOgN7OiKCkpYcaMGQwfPpzDDz+cAQMGsHLlStq0acPUqVM57bTTGDx4MAcddFDW7W+//XZeeOEF+vTpww9/+EPeeustOnfuzKBBg+jduzfXXXcdP/rRj7jgggsYOHAgffr04ZxzzmHDhg3079+f8847j379+nH22WczZMiQOuvdd999Ofroo7n00kuZNm3ajvahQ4eycePGek3b3HjjjZSWlu74qumII46gb9++zJ49u859NYQioqA7zEV5eXn4wSPWZPk8+lqtWLGCXr16FbuMoqmoqOCqq67i5ZdfbtRxsr3PkhZHRJ0n99d5RC9puqS1kt7Msu5aSSGpS7IsSXdIWiPpj5L6N+DfYWbWrEyePJmzzz6bX/7yl8UupVb1mbqZAZxSs1FSN+Ak4MNqzacCPZOvMcA9+ZdoZrZrjB07ln79+n3n67777ttp/3HjxvHBBx8wePDgHW2TJk36u31MmjRpV5S/U3WedRMRL0kqy7LqVuBfgMertZ0B3B+Z+aAFkjpK2j8iPi1EsWZmjakQV6WOHz+e8ePHF6Cawsnpw1hJQ4GPI+L1GqsOAD6qtlyZtGXbxxhJFZIqtl9ZZmZmhdfgoJfUFhgP/O9sq7O0Zf20NyKmRkR5RJSXlJQ0tAwzM6unXC6Y6gF0B15PLiAoBZZIOorMEXy3an1LgU/yLdLMzHLX4KCPiDeA/bYvS3ofKI+IzyXNBS6XNBv4J2C95+fNrFDKxv1HQff3/uTT6uwjiauvvppf/epXAEyZMoWNGzcyceLEgtbSmOpzeuVDwB+AQyRVShpdS/engHeBNcD/BRp2U2gzsyZmzz33ZM6cOXndlbLY6gz6iBgeEftHxB4RURoR02qsL4uIz5PXERFjI6JHRPSJCF8FZWbNWqtWrRgzZgy33nprsUvJmW+BYGZWh7FjxzJr1izWr29eVy1v56A3M6vDPvvsw8iRI7njjjuKXUpOHPRmZvVw5ZVXMm3aNDZt2lTsUhrMQW9mVg+dOnXi3HPP/c6dK5sLP3jEzJqN+pwO2ZiuueYa7rzzzqLWkAsHvZlZLbY/tASga9eufP3110WsJjeeujEzSzkHvZlZyjnozcxSzkFvZpZyDnozs5Rz0JuZpZxPrzSz5mNihwLvr/Z710QEQ4YMYfz48Zx66qkAPPLII0yfPp1nnnmmsLU0Ige9mdlOSOLee+9l2LBhHH/88Xz77beMHz++WYU8OOjNzGrVu3dvfvKTn3DTTTexadMmRo4cSY8ePYpdVoM46M3M6jBhwgT69+9P69atqahofo/ZcNCbmdWhXbt2nHfeebRv354999yz2OU0mM+6MTOrhxYtWtCiRfOMzPo8M3a6pLWS3qzWdrOklZL+KOkxSR2rrbtB0hpJqySd3FiFm5lZ/dRn6mYGcCdwf7W2Z4EbImKrpJuAG4DrJf0AOB84DPg+8Jykf4yIbwtbtpntluo4HdKyqzPoI+IlSWU12uZVW1wAnJO8PgOYHRF/Ad6TtAY4CvhDQao1MyuSiRMnFruEnBViwuli4Onk9QHAR9XWVSZtZmZWJHkFvaTxwFZg1vamLN1iJ9uOkVQhqaKqqiqfMszMrBY5B72kUcDpwIURsT3MK4Fu1bqVAp9k2z4ipkZEeUSUl5SU5FqGmTUBf4sAawz5vr85Bb2kU4DrgaERUf25WnOB8yXtKak70BNYlFeFZtaktWnThi+++MJh30gigi+++II2bdrkvI86P4yV9BBwHNBFUiUwgcxZNnsCz0oCWBARl0bEW5IeAZaTmdIZ6zNuzNKttLSUyspKPAXbeNq0aUNpaWnO29fnrJvhWZqn1dJ/EjAp54rMrFnZY4896N69e7HLsFo0z8u8zMys3hz0ZmYp56A3M0s5B72ZWco56M3MUs5Bb2aWcg56M7OUc9CbmaWcg97MLOUc9GZmKeegNzNLOQe9mVnKOejNzFLOQW9mlnIOejOzlHPQm5mlnIPezCzlHPRmZinnoDczS7k6g17SdElrJb1Zra2TpGclrU6+75u0S9IdktZI+qOk/o1ZvJmZ1a0+R/QzgFNqtI0D5kdET2B+sgxwKtAz+RoD3FOYMs3MLFd1Bn1EvAR8WaP5DGBm8nomcGa19vsjYwHQUdL+hSrWzMwaLtc5+q4R8SlA8n2/pP0A4KNq/SqTNjMzK5JCfxirLG2RtaM0RlKFpIqqqqoCl2FmZtvlGvSfbZ+SSb6vTdorgW7V+pUCn2TbQURMjYjyiCgvKSnJsQwzM6tLrkE/FxiVvB4FPF6tfWRy9s0AYP32KR4zMyuOVnV1kPQQcBzQRVIlMAGYDDwiaTTwITAs6f4U8GNgDfA1cFEj1GxmZg1QZ9BHxPCdrDohS98AxuZblJmZFY6vjDUzSzkHvZlZyjnozcxSzkFvZpZyDnozs5Rz0JuZpZyD3sws5Rz0ZmYp56A3M0s5B72ZWco56M3MUs5Bb2aWcg56M7OUc9CbmaWcg97MLOUc9GZmKeegNzNLOQe9mVnKOejNzFIur6CXdJWktyS9KekhSW0kdZe0UNJqSQ9Lal2oYs3MrOFyDnpJBwBXAOUR0RtoCZwP3ATcGhE9gT8DowtRqJmZ5SbfqZtWwF6SWgFtgU+BfwYeTdbPBM7McwwzM8tDzkEfER8DU4APyQT8emAxsC4itibdKoED8i3SzMxyl8/Uzb7AGUB34PtAO+DULF1jJ9uPkVQhqaKqqirXMszMrA75TN2cCLwXEVURsQWYAxwNdEymcgBKgU+ybRwRUyOiPCLKS0pK8ijDzMxqk0/QfwgMkNRWkoATgOXAC8A5SZ9RwOP5lWhmZvnIZ45+IZkPXZcAbyT7mgpcD1wtaQ3QGZhWgDrNzCxHrerusnMRMQGYUKP5XeCofPZrZmaF4ytjzcxSzkFvZpZyDnozs5Rz0JuZpZyD3sws5Rz0ZmYp56A3M0s5B72ZWco56M3MUs5Bb2aWcg56M7OUc9CbmaWcg97MLOUc9GZmKeegNzNLOQe9mVnKOejNzFLOQW9mlnIOejOzlMsr6CV1lPSopJWSVkgaKKmTpGclrU6+71uoYs3MrOHyPaK/HXgmIg4F+gIrgHHA/IjoCcxPls3MrEhyDnpJ+wDHANMAIuKvEbEOOAOYmXSbCZyZb5FmZpa7fI7o/wGoAu6TtFTSv0lqB3SNiE8Bku/7FaBOMzPLUT5B3wroD9wTEUcAm2jANI2kMZIqJFVUVVXlUYaZmdUmn6CvBCojYmGy/CiZ4P9M0v4Ayfe12TaOiKkRUR4R5SUlJXmUYWZmtck56CPiT8BHkg5Jmk4AlgNzgVFJ2yjg8bwqNDOzvLTKc/v/BsyS1Bp4F7iIzC+PRySNBj4EhuU5hpmZ5SGvoI+IZUB5llUn5LNfMzMrHF8Za2aWcg56M7OUc9CbmaWcg97MLOUc9GZmKeegNzNLOQe9mVnKOejNzFLOQW9mlnIOejOzlHPQm5mlnIPezCzlHPRmZinnoDczSzkHvZlZyjnozcxSzkFvZpZyDnozs5Rz0JuZpVzeQS+ppaSlkp5MlrtLWihptaSHkweHm5lZkRTiiP6/AyuqLd8E3BoRPYE/A6MLMIaZmeUor6CXVAqcBvxbsizgn4FHky4zgTPzGcPMzPKT7xH9bcC/ANuS5c7AuojYmixXAgdk21DSGEkVkiqqqqryLMPMzHYm56CXdDqwNiIWV2/O0jWybR8RUyOiPCLKS0pKci3DzMzq0CqPbQcBQyX9GGgD7EPmCL+jpFbJUX0p8En+ZZqZWa5yPqKPiBsiojQiyoDzgecj4kLgBeCcpNso4PG8qzQzs5w1xnn01wNXS1pDZs5+WiOMYWZm9ZTP1M0OEfEi8GLy+l3gqELs18zM8ucrY83MUs5Bb2aWcg56M7OUc9CbmaWcg97MLOUc9GZmKeegNzNLOQe9mVnKOejNzFLOQW9mlnIOejOzlHPQm5mlnIPezCzlHPRmZinnoDczSzkHvZlZyjnozcxSzkFvZpZyOT9KUFI34H7ge8A2YGpE3C6pE/AwUAa8D5wbEX/Ov9TCKRv3H7t0vPcnn7ZLxzMzqy6fI/qtwDUR0QsYAIyV9ANgHDA/InoC85NlMzMrkpyDPiI+jYglyesNwArgAOAMYGbSbSZwZr5FmplZ7goyRy+pDDgCWAh0jYhPIfPLANivEGOYmVlu8g56Se2B3wJXRsRXDdhujKQKSRVVVVX5lmFmZjuRV9BL2oNMyM+KiDlJ82eS9k/W7w+szbZtREyNiPKIKC8pKcmnDDMzq0XOQS9JwDRgRUTcUm3VXGBU8noU8Hju5ZmZWb5yPr0SGAT8V+ANScuStv8BTAYekTQa+BAYll+JZmaWj5yDPiJ+D2gnq0/Idb9mZlZYvjLWzCzlHPRmZinnoDczSzkHvZlZyjnozcxSLp/TK83MmraJHXbxeOt37Xj15CN6M7OUc9CbmaWcg97MLOUc9GZmKeegNzNLOQe9mVnKOejNzFLOQW9mlnIOejOzlHPQm5mlnIPezCzlHPRmZinnoDczS7lGC3pJp0haJWmNpHGNNY6ZmdWuUYJeUkvgLuBU4AfAcEk/aIyxzMysdo11RH8UsCYi3o2IvwKzgTMaaSwzM6tFYwX9AcBH1ZYrkzYzM9vFGusJU8rSFt/pII0BxiSLGyWtaqRaik430QX4vNh1WM527c/vX7P997Ecpf1nd1B9OjVW0FcC3aotlwKfVO8QEVOBqY00fpMiqSIiyotdh+XGP7/myz+7jMaaunkN6Cmpu6TWwPnA3EYay8zMatEoR/QRsVXS5cB/Ai2B6RHxVmOMZWZmtWusqRsi4ingqcbafzOzW0xRpZh/fs2Xf3aAIqLuXmZm1mz5FghmZinnoDczSzkHvZlZyjnoG5GkTpL2LXYdZrZ7c9AXmKQDJc2WVAUsBF6TtDZpKytudVZfkrpK6i/pCEldi12P1Z+k/yJptaT1kr6StEHSV8Wuq5h81k2BSfoDcBvwaER8m7S1BIYBV0bEgGLWZ7WT1A+4F+gAfJw0lwLrgMsiYkmxarP6kbQG+ElErCh2LU2Fg77AJK2OiJ4NXWdNg6RlwM8jYmGN9gHAryOib3Eqs/qS9EpEDCp2HU1Jo10wtRtbLOluYCZ/u4NnN2AUsLRoVVl9tasZ8gARsUBSu2IUZA1WIelh4N+Bv2xvjIg5xSupuHxEX2DJvX1Gk7n//gFk7uT5EfAEMC0i/lLL5lZkku4AegD3891f1COB9yLi8mLVZvUj6b4szRERF+/yYpoIB71ZDZJO5bu/qCuBucltPcyaHQf9LiTp9Ih4sth1mKWZpDZk/qo+DGizvX13PqL36ZW71pHFLsBylzwsx5q+B4DvAScDvyNz1tSGolZUZP4wthFIOpS//ekfZB66MjciJhS1MMuXH/3UPBwcEcMknRERMyU9SOaW6bstH9EXmKTryTwMXcAiMg9hEfCQpHHFrM3y9tdiF2D1siX5vk5SbzLXRJQVr5zi8xx9gUl6GzgsIrbUaG8NvOXz6JsvSR9GxIHFrsNqJ+kS4LdAH2AG0B74XxHx62LWVUyeuim8bcD3gQ9qtO+frLMmTNIfd7YK8K0QmocHgLPJHMXPTNp265+dg77wrgTmS1rN387DPhA4GPA52E1fVzIf4v25RruAV3d9OZaDx4H1wGKqXTC1O3PQF1hEPCPpH4Gj+O552K9tv/eNNWlPAu0jYlnNFZJe3PXlWA5KI+KUYhfRlHiO3sxSRdJU4P9ExBvFrqWpcNCbWapIWk5mqvQ9MlM3InMLhMOLWlgROejNLFUkHZStPSJqniCx23DQm5mlnC+YMjNLOQe9mVnKOejNzFLOQW9NlqTvJQ9Vf0fScklPJdco5LKvn0q6M3l9qaSR1dq/X8e2L0oqr7ZcJunN5HV58rCSnW1bJumCXGo2KxRfMGVNkiQBjwEzI+L8pK0fmStX306WW+ZyEVpE3Ftt8afAm2TuMNpgEVEBVNTSpQy4AHiwvvuU1CoituZSj1k2PqK3pup4YEv1UE6uVm0p6YXk1rNvAEgaIWmRpGWSfi2pZdJ+kaS3Jf0O2PGwaEkTJV0r6RygHJiVbLtXQ4uUdJykJ5PXxyb7WSZpqaS9gcnAkKTtKkltJN0n6Y2kz/HJtj+V9P8kPQHMk/SApDOqjTNL0tAGv4tm+Ijemq7eZO5Vks1RQO+IeE9SL+A8YFBEbEkezH6hpGeBfwV+SOa+Jy9Q4+HsEfGopMuBa5Mj89rMkvRN8ro12W9Qdy0wNiJekdQe2AyMS/Z/OoCka5Kx+yTPLZhXbTpqIHB4RHwp6VjgKuBxSR2Ao8k8YN6swXxEb83Rooh4L3l9Apkwf03SsmT5H4B/Al6MiKqI+CvwcJ5jXhgR/SKiH/DjnfR5BbhF0hVAx51Mvwwmc3dFImIlmbucbg/6ZyPiy2Td74CDJe0HDAd+6+kcy5WD3pqqt8gEeDabqr0WmXn8fsnXIRExMVm3S68GjIjJwCXAXsCC5Ii9ptqeUrWpxvIDwIXARcB9BSnSdksOemuqngf2lPSz7Q2SjgSOrdFvPnBOcuSLpE7JJfALgeMkdZa0BzBsJ+NsAPYuRMGSekTEGxFxE5kPaA/Nsv+XyIQ3yZTNgcCqnexyBpnbXhMRbxWiRts9eY7emqSICElnAbclj2DcDLwP/HuNfssl/U8yc90tyDxGbmxELJA0EfgD8CmwBGiZZagZwL3J/PvAiPgmS5/6ujL5cPVbYDnwNJm5/K2SXk/GujsZ7w1gK/DTiPhL5iSjv3sPPpO0oua/2ayhfK8bsyZKUlsyZxb1j4j1xa7Hmi9P3Zg1QZJOBFaSua+6Q97y4iN6s4Skx4DuNZqvj4j/LEY9ZoXioDczSzlP3ZiZpZyD3sws5Rz0ZmYp56A3M0s5B72ZWcr9f9mVPYSY/alAAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "pd.crosstab(result['Credit_History'].astype(str),result['Predicted_by_LR']).plot(kind='bar')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " Predicted_by_LR \n",
+ " N \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " Credit_History \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.0 \n",
+ " 23 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 1.0 \n",
+ " 0 \n",
+ " 149 \n",
+ " \n",
+ " \n",
+ " nan \n",
+ " 0 \n",
+ " 13 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Predicted_by_LR N Y\n",
+ "Credit_History \n",
+ "0.0 23 0\n",
+ "1.0 0 149\n",
+ "nan 0 13"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.crosstab(result['Credit_History'].astype(str),result['Predicted_by_LR'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " Predicted_by_RFC \n",
+ " N \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " Credit_History \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.0 \n",
+ " 23 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 1.0 \n",
+ " 6 \n",
+ " 143 \n",
+ " \n",
+ " \n",
+ " nan \n",
+ " 1 \n",
+ " 12 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Predicted_by_RFC N Y\n",
+ "Credit_History \n",
+ "0.0 23 0\n",
+ "1.0 6 143\n",
+ "nan 1 12"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.crosstab(result['Credit_History'].astype(str),result['Predicted_by_RFC'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " Credit_History_0.0 \n",
+ " 0 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " Credit_History \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.0 \n",
+ " 0 \n",
+ " 23 \n",
+ " \n",
+ " \n",
+ " 1.0 \n",
+ " 149 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " nan \n",
+ " 13 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Credit_History_0.0 0 1\n",
+ "Credit_History \n",
+ "0.0 0 23\n",
+ "1.0 149 0\n",
+ "nan 13 0"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.crosstab(result['Credit_History'].astype(str),result['Credit_History_0.0'].astype(str))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It seems that the Logistic Regression model has learned to always grant the request if there was credit history, and always deny if there was no history. That is not helpfull because using this method no new people would ever get a loan! The method that was used to deal with the NaN values causes all cases where the Credit_History did not have a value to grant the loan."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Evaluations per model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Model ACC\n",
+ "0 LR 0.827027\n",
+ "1 LDA 0.827027\n",
+ "2 SVM 0.827027\n",
+ "3 KNN 0.821622\n",
+ "4 NB 0.800000\n",
+ "5 RFC 0.800000\n",
+ "6 CART 0.794595\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Model Precision\n",
+ "0 LR 0.913043\n",
+ "1 LDA 0.913043\n",
+ "2 SVM 0.913043\n",
+ "3 KNN 0.821429\n",
+ "4 RFC 0.733333\n",
+ "5 NB 0.705882\n",
+ "6 CART 0.675676\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Model Recall\n",
+ "0 CART 0.490196\n",
+ "1 NB 0.470588\n",
+ "2 KNN 0.450980\n",
+ "3 RFC 0.431373\n",
+ "4 LR 0.411765\n",
+ "5 LDA 0.411765\n",
+ "6 SVM 0.411765\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Model F1\n",
+ "0 KNN 0.582278\n",
+ "1 CART 0.568182\n",
+ "2 LR 0.567568\n",
+ "3 LDA 0.567568\n",
+ "4 SVM 0.567568\n",
+ "5 NB 0.564706\n",
+ "6 RFC 0.543210\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import confusion_matrix\n",
+ "from sklearn.metrics import classification_report\n",
+ "from sklearn.metrics import roc_auc_score\n",
+ "from sklearn.metrics import roc_curve\n",
+ "from sklearn.metrics import accuracy_score\n",
+ "from sklearn.metrics import precision_score\n",
+ "from sklearn.metrics import recall_score\n",
+ "\n",
+ "def get_classification_statistics(y_true,y_pred,labels,pos_label=None):\n",
+ " if pos_label == None:\n",
+ " pos_label = labels[0]\n",
+ " precision = precision_score(y_true, y_pred,pos_label=labels[0],labels=labels)\n",
+ " recall = recall_score(y_true, y_pred,pos_label=labels[0],labels=labels)\n",
+ " f1 = 2 * (precision * recall) / (precision + recall)\n",
+ " acc = accuracy_score (y_true, y_pred)\n",
+ " return acc, precision,recall,f1\n",
+ "\n",
+ "def plot_dict(info_dict,columns,title):\n",
+ " model_overview_list = sorted([[name, val] for name, val in info_dict.items()], key = lambda x: x[1],reverse=True)\n",
+ "\n",
+ " names = [x[0] for x in model_overview_list]\n",
+ " values = [x[1] for x in model_overview_list]\n",
+ "\n",
+ " print( pd.DataFrame(model_overview_list,columns=columns))\n",
+ "\n",
+ " fig = plt.figure(figsize = (16, 6))\n",
+ " fig.suptitle(title)\n",
+ " ax = fig.add_subplot(111)\n",
+ " plt.bar(range(len(values)), values, align='center')\n",
+ " plt.xticks(range(len(names)), names)\n",
+ " plt.show()\n",
+ "\n",
+ "def plot_model_compare_classification(model_names,y_col,results,labels):\n",
+ " model_overview_acc = {}\n",
+ " model_overview_precision = {}\n",
+ " model_overview_recall = {}\n",
+ " model_overview_f1 = {}\n",
+ " for name in model_names:\n",
+ " acc, precision,recall,f1 = get_classification_statistics(results[y_col],results['Predicted_by_'+name],labels)\n",
+ " \n",
+ " model_overview_acc[name] = acc\n",
+ " model_overview_precision[name] = precision\n",
+ " model_overview_recall[name] = recall\n",
+ " model_overview_f1[name] = f1\n",
+ " \n",
+ " plot_dict(model_overview_acc,['Model','ACC'],'Accuracy on the test data compared')\n",
+ " plot_dict(model_overview_precision,['Model','Precision'],'Precision on the test data compared')\n",
+ " plot_dict(model_overview_recall,['Model','Recall'],'Recall on the test data compared')\n",
+ " plot_dict(model_overview_f1,['Model','F1'],'F1 on the test data compared')\n",
+ " \n",
+ "labels = ['N','Y']\n",
+ "model_names = [name for name,model in models]\n",
+ "plot_model_compare_classification(model_names,'Loan_Status',result,labels)\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Confusion matrix "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " Predicted_by_LR \n",
+ " N \n",
+ " Y \n",
+ " \n",
+ " \n",
+ " Loan_Status \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " N \n",
+ " 21 \n",
+ " 30 \n",
+ " \n",
+ " \n",
+ " Y \n",
+ " 2 \n",
+ " 132 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Predicted_by_LR N Y\n",
+ "Loan_Status \n",
+ "N 21 30\n",
+ "Y 2 132"
+ ]
+ },
+ "execution_count": 50,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.crosstab(result['Loan_Status'],result['Predicted_by_LR'])\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Precision, recall, F-measure and support"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " precision recall f1-score support\n",
+ "\n",
+ " N 0.91 0.41 0.57 51\n",
+ " Y 0.81 0.99 0.89 134\n",
+ "\n",
+ "avg / total 0.84 0.83 0.80 185\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(classification_report(result['Loan_Status'],result['Predicted_by_LR']))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}