{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "twKpLeRhDeyQ"
},
"source": [
"# Data Preprocessing\n",
"\n",
"In this lab, we will set up a **data pipeline** in order to leave the data ready for analysis. Data preprocessing tends to be, by far, the most time-consuming step of the data science process. Errors in this step propagate to the model, so it is really important we do this correctly.\n",
"\n",
"The goal of this step is to leave the date ready to apply models to it. \n",
"\n",
"Every problem has its own set of data preprocessing functions to apply it to, but we will focus on the ones most common in classification models. In general we want to:\n",
"\n",
"1. Eliminate redundant variables.\n",
"2. Treat null values.\n",
"3. Treat outliers.\n",
"4. Remove correlated features.\n",
"\n",
"For this goal we will use the excellent [```scikit-learn```](https://scikit-learn.org/stable/) package, which comes with most data-intensive operations. We will also use today (and during the rest of the module) the [```pandas```](https://pandas.pydata.org/) package, which allows for data handling in general."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tTKdVYZLGm-b"
},
"source": [
"## Reading the data\n",
"\n",
"Let's download the Bankloan data. I have slightly modified it removing the PD and LGD information (as we will now estimate our own). As a reminder, it has the following variables:\n",
"\n",
"- Customer: ID, or unique label, of the borrower (NOT predictive).\n",
"- Age: Age of the borrower in years.\n",
"- Education: Maximum education level the borrower reached.\n",
"1: Complete primary. 2: Completed Secondary. 3: Incomplete Higher Ed. 4: Complete Higher Ed. 5: With postgraduate studies (complete MSc or PhD).\n",
"- Employ: Years at current job.\n",
"- Address: Years at current address.\n",
"- Income: Income in ‘000s USD.\n",
"- Leverage: Debt/Income Ratio.\n",
"- CredDebt: Credit card standing debt.\n",
"- OthDebt: Other debt in ‘000s USD.\n",
"- MonthlyLoad: Monthly percentage from salary used to repay debts.\n",
"- Default: 1 If default has occurred, 0 if not (Target variable).\n",
"\n",
"We will download it now directly from a link, using the more ubiquitous [```wget```](http://www.gnu.org/software/wget/) command. The command is\n",
"\n",
"```\n",
"wget [-options] path\n",
"```\n",
"\n",
"We need to add the options ```--no-check-certificate``` and ```--output-document=FILENAME``` so it downloads ok."
]
},
{
"cell_type": "code",
"metadata": {
"id": "g3v98YWoGla0",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "7c5f8bcc-f550-4341-da4e-4104c11947fe"
},
"source": [
"!wget --no-check-certificate --output-document=Bankloan.csv 'https://docs.google.com/spreadsheets/d/1nUJ1fA5f1VeMvulknpsvxpy0GW3CekNnhgeLRK0WlDI/export?gid=1016776666&format=csv'"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"--2023-03-27 15:41:14-- https://docs.google.com/spreadsheets/d/1nUJ1fA5f1VeMvulknpsvxpy0GW3CekNnhgeLRK0WlDI/export?gid=1016776666&format=csv\n",
"Resolving docs.google.com (docs.google.com)... 142.251.2.113, 142.251.2.102, 142.251.2.138, ...\n",
"Connecting to docs.google.com (docs.google.com)|142.251.2.113|:443... connected.\n",
"HTTP request sent, awaiting response... 307 Temporary Redirect\n",
"Location: https://doc-0o-8s-sheets.googleusercontent.com/export/mq6he3r7ig44qobar1fsg51390/ej6psm76todsrtmbav85t6tgu8/1679931675000/102123285539774178265/*/1nUJ1fA5f1VeMvulknpsvxpy0GW3CekNnhgeLRK0WlDI?gid=1016776666&format=csv [following]\n",
"Warning: wildcards not supported in HTTP.\n",
"--2023-03-27 15:41:15-- https://doc-0o-8s-sheets.googleusercontent.com/export/mq6he3r7ig44qobar1fsg51390/ej6psm76todsrtmbav85t6tgu8/1679931675000/102123285539774178265/*/1nUJ1fA5f1VeMvulknpsvxpy0GW3CekNnhgeLRK0WlDI?gid=1016776666&format=csv\n",
"Resolving doc-0o-8s-sheets.googleusercontent.com (doc-0o-8s-sheets.googleusercontent.com)... 142.250.141.132, 2607:f8b0:4023:c0b::84\n",
"Connecting to doc-0o-8s-sheets.googleusercontent.com (doc-0o-8s-sheets.googleusercontent.com)|142.250.141.132|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: unspecified [text/csv]\n",
"Saving to: ‘Bankloan.csv’\n",
"\n",
"Bankloan.csv [ <=> ] 65.50K --.-KB/s in 0.006s \n",
"\n",
"2023-03-27 15:41:16 (9.88 MB/s) - ‘Bankloan.csv’ saved [67077]\n",
"\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_ExNpn4rMwfT"
},
"source": [
"To check what we downloaded we can use the ```head``` OS command."
]
},
{
"cell_type": "code",
"metadata": {
"id": "oz4xRtSDM20o",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "b6384df6-9104-47a6-9e1f-355346ef8d4d"
},
"source": [
"!head Bankloan.csv"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"customer,Age,Education,Employ,Address,Income,Leverage,Creddebt,OthDebt,MonthlyLoad,Default\r\n",
"10012,28,Med,7,2,44,17.7,2.99,4.8,0.58,0\r\n",
"10017,64,Posg,34,17,116,14.7,5.05,12,0.27,0\r\n",
"10030,40,Bas,20,12,61,4.8,1.04,1.89,0.13,0\r\n",
"10039,30,Bas,11,3,27,34.5,1.75,7.56,1.62,0\r\n",
"10069,25,Bas,2,2,30,22.4,0.76,5.96,0.97,1\r\n",
"10071,35,Bas,2,9,38,10.9,1.46,2.68,0.4,1\r\n",
"10096,26,SupInc,2,4,38,11.9,0.95,3.57,0.43,1\r\n",
"10128,25,Bas,4,2,30,14.4,1.05,3.27,0.62,0\r\n",
"10129,65,SupCom,29,14,189,5,3.36,6.09,0.08,0\r\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "k5sgZk3lMtIK"
},
"source": [
"Now we will use Pandas to read the CSV file. The function to do so is [```read_csv```](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html). We will store the results in a variable named ```bankloan_data```."
]
},
{
"cell_type": "code",
"metadata": {
"id": "Wj-Yl2t5JW0Y"
},
"source": [
"import pandas as pd\n",
"\n",
"bankloan_data = pd.read_csv('Bankloan.csv')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "i2A_hACkDcxY"
},
"source": [
"As a reminder, here are the summary statistics of the variables."
]
},
{
"cell_type": "code",
"metadata": {
"id": "XpypXLF6Nm9B",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 300
},
"outputId": "3969480d-98f8-4cb4-8131-f7adfbf277ac"
},
"source": [
"bankloan_data.describe()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" customer Age Employ Address Income \\\n",
"count 1500.000000 1500.000000 1500.000000 1499.000000 1499.000000 \n",
"mean 257714.548000 34.174000 6.952000 6.309540 59.615077 \n",
"std 139555.147719 13.142306 8.977644 6.047563 67.144768 \n",
"min 10012.000000 18.000000 0.000000 0.000000 12.000000 \n",
"25% 98638.750000 24.000000 0.000000 2.000000 27.000000 \n",
"50% 315991.500000 31.000000 4.000000 5.000000 40.000000 \n",
"75% 370701.500000 42.000000 10.000000 9.000000 64.000000 \n",
"max 453777.000000 79.000000 63.000000 34.000000 1079.000000 \n",
"\n",
" Leverage Creddebt OthDebt MonthlyLoad Default \n",
"count 1499.000000 1499.000000 1489.000000 1500.000000 1500.000000 \n",
"mean 677.046631 1.936197 3.872257 0.365447 0.365333 \n",
"std 25828.218141 2.974485 5.343150 0.293937 0.481684 \n",
"min 0.100000 0.000000 0.100000 0.000000 0.000000 \n",
"25% 4.800000 0.420000 1.120000 0.150000 0.000000 \n",
"50% 8.500000 0.990000 2.240000 0.290000 0.000000 \n",
"75% 13.600000 2.200000 4.610000 0.500000 1.000000 \n",
"max 999999.000000 35.970000 63.470000 2.150000 1.000000 "
],
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
customer
\n",
"
Age
\n",
"
Employ
\n",
"
Address
\n",
"
Income
\n",
"
Leverage
\n",
"
Creddebt
\n",
"
OthDebt
\n",
"
MonthlyLoad
\n",
"
Default
\n",
"
\n",
" \n",
" \n",
"
\n",
"
count
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1499.000000
\n",
"
1499.000000
\n",
"
1499.000000
\n",
"
1499.000000
\n",
"
1489.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
\n",
"
\n",
"
mean
\n",
"
257714.548000
\n",
"
34.174000
\n",
"
6.952000
\n",
"
6.309540
\n",
"
59.615077
\n",
"
677.046631
\n",
"
1.936197
\n",
"
3.872257
\n",
"
0.365447
\n",
"
0.365333
\n",
"
\n",
"
\n",
"
std
\n",
"
139555.147719
\n",
"
13.142306
\n",
"
8.977644
\n",
"
6.047563
\n",
"
67.144768
\n",
"
25828.218141
\n",
"
2.974485
\n",
"
5.343150
\n",
"
0.293937
\n",
"
0.481684
\n",
"
\n",
"
\n",
"
min
\n",
"
10012.000000
\n",
"
18.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
12.000000
\n",
"
0.100000
\n",
"
0.000000
\n",
"
0.100000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
25%
\n",
"
98638.750000
\n",
"
24.000000
\n",
"
0.000000
\n",
"
2.000000
\n",
"
27.000000
\n",
"
4.800000
\n",
"
0.420000
\n",
"
1.120000
\n",
"
0.150000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
50%
\n",
"
315991.500000
\n",
"
31.000000
\n",
"
4.000000
\n",
"
5.000000
\n",
"
40.000000
\n",
"
8.500000
\n",
"
0.990000
\n",
"
2.240000
\n",
"
0.290000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
75%
\n",
"
370701.500000
\n",
"
42.000000
\n",
"
10.000000
\n",
"
9.000000
\n",
"
64.000000
\n",
"
13.600000
\n",
"
2.200000
\n",
"
4.610000
\n",
"
0.500000
\n",
"
1.000000
\n",
"
\n",
"
\n",
"
max
\n",
"
453777.000000
\n",
"
79.000000
\n",
"
63.000000
\n",
"
34.000000
\n",
"
1079.000000
\n",
"
999999.000000
\n",
"
35.970000
\n",
"
63.470000
\n",
"
2.150000
\n",
"
1.000000
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
]
},
"metadata": {},
"execution_count": 4
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "wcp4xeZwpuqi",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "b6ce5285-2b39-4d4e-e5e7-9012ab82e858"
},
"source": [
"bankloan_data.columns"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Index(['customer', 'Age', 'Education', 'Employ', 'Address', 'Income',\n",
" 'Leverage', 'Creddebt', 'OthDebt', 'MonthlyLoad', 'Default'],\n",
" dtype='object')"
]
},
"metadata": {},
"execution_count": 5
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-m5-Xr8lP5Gm"
},
"source": [
"We can see there are a few null values in different variables and apparently an invalid outlier in Leverage. Let's visualize the dataset using seaborn to get an idea of the distribution."
]
},
{
"cell_type": "code",
"metadata": {
"id": "dnkTHoUiP4fj"
},
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import numpy as np\n",
"%matplotlib inline"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Oc-0gLkpPTgu",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "e0d3701a-b3b1-4923-cee2-6d322e97b6f2"
},
"source": [
"sns.set(color_codes=True)\n",
"\n",
"for col_id in bankloan_data.columns[np.r_[1,3:9]]:\n",
" sns.displot(data = bankloan_data, x = col_id, hue = \"Default\", kind = 'kde')"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAFcCAYAAAD1Qqj3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAAsTAAALEwEAmpwYAABAF0lEQVR4nO3de3xU9YH//9c5Z2Zyh1xIQkJAFC2mKsqKtXUVLSDBCsTSQrq0bltbdFsvW23d+nVdEG9dWndbRaxdW28/3NbStSIpRZa1ValWRVFAFKsGuYUk5AK5z8w55/fHkIGYQC7MnDDD+/l48Ggy5zKfnJp553M3XNd1ERERiTFzqAsgIiLJSQEjIiJxoYAREZG4UMCIiEhcKGBERCQuFDAiIhIXvqEugJfq61twHO9HZefkpNPY2Ob5+x6v9Dx60jPpLpGeR35+1lAX4bilGowHfD5rqItwXNHz6EnPpDs9j+SggBERkbhQwIiISFwoYEREJC4UMCIiEhcKGBERiQvPAqaqqoqKigrKysqoqKhg+/btPc5Zv349c+bM4cwzz2TJkiXdji1btozLL7+cWbNmMWfOHF566SWPSi4iIoPh2TyYRYsWMX/+fMrLy1m5ciULFy7kiSee6HbO6NGjufvuu1mzZg3BYLDbsQkTJnDVVVeRlpbGe++9x9e+9jXWr19PamqqVz+CiIgMgCc1mPr6erZu3crMmTMBmDlzJlu3bqWhoaHbeSeddBKlpaX4fD1z76KLLiItLQ2A8ePH47ouTU1NcS+7iIgMjicBU11dTWFhIZYVmTxlWRYFBQVUV1cP6n7PPPMMY8aMYeTIkbEspoiIxFDCLRXz2muvcd999/HII48M+Nq8vMw4lKh/tJxEd3oePemZdKfnkfg8CZiioiJqamqwbRvLsrBtm9raWoqKigZ0n40bN3LzzTfz4IMPcsoppwy4HEO1Fll+fhZ1dc2ev+/xSs+jJz2T7hLpeSgIj8yTJrK8vDxKS0uprKwEoLKyktLSUnJzc/t9j02bNnHjjTdy//33c8YZZ8SrqHHnui4PPrOFtz/YN9RFERGJK8+GKd9+++0sX76csrIyli9fzuLFiwFYsGABmzdvBmDDhg1MnjyZRx99lN/85jdMnjw5Ohx58eLFdHR0sHDhQsrLyykvL2fbtm1eFT9mGg50suG9WtZvHlz/k4hIojBc1/W+zWiIHA9NZBv/VsfS/9nMsIwAP73u7zEMw/PyDLVEav7wip5Jd4n0PNREdmSaye+xnTUtABxoDVLb1D7EpRERiR8FjMd21rYQ8Ece+we79g9xaURE4kcB47Edtc1MOCWPgN9kZ23LUBdHRCRuFDAeCtsOdU0djMrPZFh6gOa20FAXSUQkbhQwHmrrCAOQmeYnK91Pc3uwjytERBKXAsZDrR2RGktGqo/MNNVgRCS5KWA81FWDSU/1kZXup6VNNRgRSV4KGA+1dXYFzMEmMtVgRCSJKWA81NVElp7iIys9QDDs0Bmyh7hUIiLxoYDxUPvBJrJIH4wfgGY1k4lIklLAeKj1E30wgJrJRCRpKWA81NYZxu8z8fssstIDgAJGRJKXAsZDbR0h0lMiW/B01WBaNBdGRJKUAsZDrR1h0lMPBkyamshEJLkpYDzUdljApKX4sExDASMiSUsB46G2jjAZqZGai2EYpKf6onNjRESSjQLGQ22doWgNBiK1mA4FjIgkKQWMh9o6wtFOfoC0gGowIpK8FDAecVyXts4w6QebyADSUizVYEQkaSlgPNIZtHHdSKh0SQ34aA9qqRgRSU4KGI8Eww4AKf5DAZOW4qNdNRgRSVIKGI8EDy5qGfAdHjAWHarBiEiSUsB4pGvV5JRAzxqM67pDVSwRkbhRwHgkGIo0kQV8hx55asDCdlxCB5vPRESSiQLGI101mMAn+mAAdfSLSFJSwHikqw/mk538gIYqi0hSUsB4pGsUWcB/6JGnBbpqMAoYEUk+ChiPdAZ7q8FEvu7a6VJEJJkoYDwSDPfsg0kNqA9GRJKXAsYj0U7+w0aRpR1c+FKTLUUkGSlgPNI1TLlbE9nBOTGabCkiyUgB45FgyMZnmZimEX0t2kSmGoyIJCEFjEc6QzYp/u6P2+8z8VmmAkZEkpICxiPBkNOtg79LWoqlTn4RSUoKGI90huxeAybFb0WHMIuIJBMFjEeCvTSRQWQ9sg5NtBSRJKSA8Ugw3HsTWWrAFx3CLCKSTBQwHol08vfSRBZQE5mIJCcFjEeCIbvbJMsuqX6LDtVgRCQJeRYwVVVVVFRUUFZWRkVFBdu3b+9xzvr165kzZw5nnnkmS5Ys6XbMtm0WL17MtGnTuPTSS1mxYoVHJY+NYMhRDUZETiieBcyiRYuYP38+zz33HPPnz2fhwoU9zhk9ejR333033/rWt3ocW7VqFTt27GDt2rU89dRTLF26lF27dnlR9Jg44iiygLZNFpHk5EnA1NfXs3XrVmbOnAnAzJkz2bp1Kw0NDd3OO+mkkygtLcXn8/W4x+rVq5k7dy6maZKbm8u0adNYs2aNF8WPiWDY7rZUf5dUv6VOfhFJSp4ETHV1NYWFhVhW5C94y7IoKCigurp6QPcoLi6Ofl9UVMTevXtjXtZ4cF2XzuCRm8hCYQfb0bbJIpJcelYVklheXuaQvG8o7OC4LjnZaeTnZ3UvU04GAFnD0slI8w9F8YbEJ5+D6Jl8kp5H4vMkYIqKiqipqcG2bSzLwrZtamtrKSoqGtA99uzZw4QJE4CeNZr+qK9vwXHcAV0TC2mZqQCEOsPU1TV3OxYOhgDYXb2fnKwUz8s2FPLzs3o8hxOdnkl3ifQ8FIRH5kkTWV5eHqWlpVRWVgJQWVlJaWkpubm5/b7HjBkzWLFiBY7j0NDQwLp16ygrK4tXkWMq1MteMF26VlTWbH4RSTaejSK7/fbbWb58OWVlZSxfvpzFixcDsGDBAjZv3gzAhg0bmDx5Mo8++ii/+c1vmDx5Mi+99BIA5eXllJSUMH36dObNm8e1117L6NGjvSr+MQmFI/0rvl4CJkV7wohIkvKsD2bcuHG9zl15+OGHo19PmjSJF198sdfrLcuKhlKi6dou2W/1PooM0FwYEUk6msnvga4ajP9oNRgNVRaRJKOA8cDRAiY1oBqMiCQnBYwHggdrJ75emsi65sZosqWIJBsFjAf6U4NRJ7+IJBsFjAeOFjCBaCe/himLSHJRwHigaxRZb01kPsvEZ5nq5BeRpKOA8cDRajAQaSZTJ7+IJBsFjAeCoYMB00sNBiIBoz4YEUk2ChgPhLqayI5Qg9GmYyKSjBQwHog2kR2pBqNtk0UkCSlgPBBdKkY1GBE5gShgPBAKORiAZRq9Hk/xqw9GRJKPAsYDobCD32diGL0HTGrAojOkeTAiklwUMB4Ihu1e58B0SQn41EQmIklHAeOBrhrMkaiTX0SSkQLGA30FTErAIhhyhmQ7ZxGReFHAeCAY6qOJTCsqi0gSUsB4oM8mshStqCwiyUcB44H+9MGAajAiklwUMB7oexSZdrUUkeSjgPFAf2swHdoTRkSSiALGA6GQc8R1yCAyDwbURCYiyUUB44Fg2D7iSspwqIlMnfwikkwUMB4IhY9eg4l28itgRCSJKGA8EArbfU60BDSbX0SSigLGA8E++mBSNYpMRJKQAsYDIfvoo8h8lollGurkF5GkooCJM9d1CYWO3skPkVpMR6cCRkSShwImzmzHxXHBb/W+F0yX1IBFh/aEEZEkooCJs7DtAOD3WUc9T3vCiEiyUcDEWSjcFTBHf9Qp2hNGRJKMAibOugLG148mMtVgRCSZKGDi7FATWd81GAWMiCQTBUycHWoiO3ofTKSTXwEjIslDARNnYTuyDXJfTWQpaiITkSSjgIkzdfKLyIlKARNnoXAkNI62VAwc6uR3XNeLYomIxJ0CJs5CXU1kfc7kj+wJE1QtRkSShAImzqJNZH3UYLRtsogkG88CpqqqioqKCsrKyqioqGD79u09zrFtm8WLFzNt2jQuvfRSVqxYET1WX1/P1VdfzaxZs7jsssu4/fbbCYeP/6VVQvbBJrK+ajB+LdkvIsnFs4BZtGgR8+fP57nnnmP+/PksXLiwxzmrVq1ix44drF27lqeeeoqlS5eya9cuAB566CHGjRvHqlWrePbZZ3nnnXdYu3atV8UftHA40kSmGoyInGg8CZj6+nq2bt3KzJkzAZg5cyZbt26loaGh23mrV69m7ty5mKZJbm4u06ZNY82aNQAYhkFrayuO4xAMBgmFQhQWFnpR/GMS6u9ES22bLCJJxufFm1RXV1NYWIhlRT5ELcuioKCA6upqcnNzu51XXFwc/b6oqIi9e/cC8N3vfpfrr7+eCy+8kPb2dr761a9y7rnnDqgceXmZMfhpBiYl1Q/AyJHDyUzzH/G8kW0hAFLTA+TnZ3lStqF0IvyMA6Vn0p2eR+LzJGBiYc2aNYwfP57HH3+c1tZWFixYwJo1a5gxY0a/71Ff34LjeDsMuGl/OwD7G1tpbznybP721k4AautaqMtL96RsQyU/P4u6uuahLsZxRc+ku0R6HgrCI/OkiayoqIiamhrsgx3etm1TW1tLUVFRj/P27NkT/b66upqRI0cCsHz5cmbPno1pmmRlZTFlyhReffVVL4p/TKKLXfa3k19NZCKSJDwJmLy8PEpLS6msrASgsrKS0tLSbs1jADNmzGDFihU4jkNDQwPr1q2jrKwMgJKSEl588UUAgsEgr7zyCqeddpoXxT8mobCDzzIxjb6XigG0bbKIJA3PRpHdfvvtLF++nLKyMpYvX87ixYsBWLBgAZs3bwagvLyckpISpk+fzrx587j22msZPXo0ALfeeitvvPEGs2bN4oorrmDs2LHMmzfPq+IPWth2+uzgh8hMfoCO4PE/9FpEpD8864MZN25ct3ktXR5++OHo15ZlRYPnk8aMGcOjjz4at/LFSyjsEPD3HTA+y8QyDTWRiUjS0Ez+OAvZTp9L9UNkGLb2hBGRZKKAibNwuH9NZBDph9FMfhFJFgqYOAuFHQL9DBhtmywiyUQBE2ch28Hv77uJDA5um6wajIgkCQVMnIXCTp/rkHVJDVjq5BeRpKGAibOQ3b9RZIA6+UUkqShg4izSyd/PJjJ18otIElHAxFmonxMtoauTXxMtRSQ5KGDiLDKKrL+d/D71wYhI0lDAxFl/l4qBQ8OUXdfbFZ9FROJBARNnobCDv5+d/KkBCxcIHlyBWUQkkSlg4mxATWTaNllEkogCJs4G0kSW0rUnjEaSiUgSUMDEkeO6hG13QEvFgGowIpIcFDBxZNuRvpR+LxWjgBGRJKKAiaOu7ZL7PYrMH9mepyOkuTAikvgUMHE00IBRDUZEkkm/A2bdunWEw/rLeiBCB5vI+tsHkxLdNlkBIyKJr98Bc//993PhhRdyxx138Pbbb8ezTEnjUA2mf30wqX4FjIgkj34HzLPPPstjjz1GSkoK119/PWVlZTz44IPs2rUrnuVLaGE7MiN/IDP5Ae0JIyJJYUB9MKeffjo//OEPeeGFF1i0aBFr1qzh0ksv5atf/SrPPvssjqMZ6IfrqsEE+jmKzO8zMQzVYEQkOfgGesGOHTt49tlnefbZZzEMgxtuuIGioiKefPJJ1q5dywMPPBCPciakcNcw5X5uOGYYhrZNFpGk0e+AefLJJ1m5ciUff/wxl112GT/+8Y8555xzosfLysq44IIL4lHGhBXtg+nnWmTQtW2yBlOISOLrd8C8+OKLfPOb32Tq1KkEAoEex9PS0li6dGlMC5foukaR9bcPBiAloCX7RSQ59PuT7zOf+QyXXXZZj3B59NFHo19feOGFsStZEggPcBQZRDr6FTAikgz6HTDLli3r9fWf//znMStMshnoPBiA9BQfbZ1qIhORxNdnE9krr7wCgG3b/PWvf+22GdauXbvIyMiIX+kSXFcNxuczIdy/WklqwKK5KRjPYomIeKLPgPnXf/1XAILBILfeemv0dcMwyM/P57bbbotf6RLcoRqMRaifAZOe4qNdNRgRSQJ9Bszzzz8PwL/8y7/w4x//OO4FSibhw9YiC/XzmtQUH+2d6oMRkcTX784BhcvARWswAximnJbioz0Y7tYUKSKSiI5ag7nsssv44x//CMDFF1+MYRi9nvfnP/855gVLBl3zYHz9nGgJkJZi4bqR5WJSAwOeBysictw46ifYnXfeGf36Jz/5SdwLk2xCtoPPMo4YzL1JS4n8X9LeqYARkcR21E+wSZMmRb/+zGc+E/fCJJtw2B3QJEuAtEBXwITJyUqJR7FERDzR70+/Rx99lHfffReAt956i0suuYQpU6awcePGuBUu0YVtZ0DNY3B4DUYjyURkYP77v/+bCy64gIkTJ9LY2HhM95oyZQovv/zyMd2j320wjz32GF/+8pcB+I//+A++8Y1vkJGRwT333MOKFSuOqRDJKhR2Bl6DSYnM+lfAiJx4pkyZwr59+7AsC8uyOPXUUykvL6eiogLTPPpnSSgU4t///d/57W9/y+mnnx7Tci1dupSPP/6Ye++9d0DX9TtgmpubycrKoqWlhW3btvHYY49hWRZLliwZcGFPFMdUg9FyMSInpIceeogLLriA5uZmXnvtNe6++242bdrEj370o6NeV19fT2dnJ6eeeqpHJe1bvz/9ioqKePPNN1m9ejWTJk3CsixaWlqwrP6vs3WiGVQNJqAmMhGBrKwspk6dys9+9jN+//vf8/777xMMBlmyZAmXXHIJF1xwAQsXLqSjo4OqqipmzJgBwHnnncc//uM/AnDXXXdx8cUX83d/93fMmTOHDRs2RO9/yy238NOf/jT6/auvvsrkyZN7lOPFF1/kF7/4BX/84x+ZOHEis2fP7vfP0O8azL/8y79www03EAgEuP/++wH405/+xFlnndXvNzvRhNQHIyLHaMKECYwcOZINGzbwu9/9jh07dvDMM8/g8/n4wQ9+wLJly/j+979PZWUlU6dO5fXXX8fni3yOnHXWWVx77bVkZWXxxBNP8M///M88//zzpKT0fwDR5MmTueaaawbVRNbvT7+LL76Y9evX8/zzz3PmmWcCMGPGDC12eRShsNPvzca6dG2brIARkS4FBQXs37+f3/72t9x6661kZ2eTmZnJNddcwx/+8IcjXldeXk5OTg4+n4+rrrqKYDBIVVWVZ+Ue0ESL5uZmqqqqaG1t7fb65z73uT6vraqq4pZbbqGpqYns7GyWLFnC2LFju51j2zZ33XUXL730EoZhcPXVVzN37tzo8dWrV/Pzn/8c13UxDINHH32UESNGDORH8FTYHngTmWlGdrXUcjEi0qWmpgbbtmlvb2fOnDnR113XPepW9b/61a/43e9+R21tLYZh0NLScsyjywai3wHz9NNPc8cdd5Cenk5qamr0dcMw+L//+78+r1+0aBHz58+nvLyclStXsnDhQp544olu56xatYodO3awdu1ampqauOKKK/jc5z5HSUkJmzdv5oEHHuDxxx8nPz+f5ubmXjc+O56Ews6gJkumacFLETlo06ZN1NTUMG3aNB5++GH+8Ic/UFhY2Od1GzZs4Je//CWPPfYYp512GqZpct5550WXoUpLS6OjoyN6/r59+454r4FMFj9cv/+8/ulPf8p9993Hyy+/zPPPPx/9159wqa+vZ+vWrcycOROAmTNnsnXrVhoaGrqdt3r1aubOnYtpmuTm5jJt2jTWrFkDRIZJX3XVVeTn5wORDrCBtCMOhcHUYEABIyLQ0tLCn/70J2666SZmz57N6aefzty5c7nnnnuor68HIjWbl156qdfrW1tbsSyL3NxcwuEwDzzwAC0tLdHjpaWlvPDCCzQ1NVFXV8fjjz9+xLLk5eWxe/fuo9aWetPvP69t2x70jpXV1dUUFhZGR5xZlkVBQQHV1dXk5uZ2O6+4uDj6fVFREXv37gXgww8/pKSkhK9+9au0tbVx6aWX8p3vfGdAyZqXlzmo8g+WC2SmR2pZ+flZ/b5uWEaAsOsO6JpEk8w/22DpmXR3oj6Pf/qnf8KyLEzT5NRTT+Wb3/wmX/nKVwC4+eabWbZsGfPmzaOxsZHCwkL+4R/+gYsuuqjHfS688EIuuugiysrKSE9P5+tf/zpFRUXR4+Xl5bz88stMmTKFUaNG8aUvfYlHHnmk1zLNmDGDZ599lvPPP5+SkhJ+//vf9+tn6XfALFiwgJ///Od897vf7XPCTzzYts22bdt49NFHCQaDfPvb36a4uJgrrrii3/eor2/BcbxbpbijM4xtR/pS6uqa+31dwGfSdKBzQNckkvz8rKT92QZLz6S7RHoesQzCru1RjiQlJYWbbrqJm266qcexkpIStm3bFv3esix+9KMfdZs/s2DBgm73+tnPftbtHt/4xjd6LUtOTg6//vWv+/tjRA1oJv++ffv45S9/SXZ2drdjfa2mXFRUFO2ksiwL27apra3tlqZd5+3Zs4cJEyYA3Ws0xcXFzJgxg0AgQCAQYOrUqWzatGlAAeO1kO0OeBQZRDYdq65v7ftEEZHjWL8D5lhWU87Ly6O0tJTKykrKy8uprKyktLS0W/MYRKphK1asYPr06TQ1NbFu3TqefPJJINJv88ILL1BeXk44HOavf/0rZWVlgy6TF0Lhgc+DAUhP9dHWoT4YEUls/Q6YY11N+fbbb+eWW27hwQcfZNiwYdElZhYsWMANN9zAWWedRXl5OW+//TbTp08H4Nprr2X06NEAXH755WzZsoUvfOELmKbJhRdeGF0b7Xg12E7+9FQfbZ1hHNfFHOToDRGRoWa4/dw6MRgMsmzZMiorK2lqauKNN95g/fr1bN++na997WvxLmdMeNkH47ou31ryJ2ZdMJarv3T2gNqT17y6g9/+6QMe+N5k0lOTb0+YRGpf94qeSXeJ9DxO1MEI/dHvP6/vuece3n//fe69997oyK3TTjttUB0/JwL7YJANpgaTcTBU2jpDMS2TiIiX+v3n8bp161i7di3p6enRUWSFhYXU1NTErXCJbDDbJXfpqrW0dYRheEyLJSLimX5/+vn9/uiQ2y4NDQ09RpRJRMiOBMzg+mD8AOroF5GE1u9PvxkzZvDDH/6QnTt3AlBbW8sdd9zB5ZdfHrfCJbJw+BgC5uCKyq0KGBFJYP3+9LvxxhsZPXo0s2fP5sCBA5SVlZGfn8+1114bz/IlrK4ajM8a+Cgw9cGIyFCrqqqioqKCsrIyKioq2L59+4Dv0e8+mB07dnDyySdzzTXXYNs206ZNY/z48QN+wxPFoRrMwDdk69YHIyIyBPqzQHFf+gwY13W59dZbeeaZZxg5ciQFBQXU1NSwbNkyysvLueeeewa90mYyO5YaTGqKDwMFjMiJ6PkNO/jf13bE5d6XfmYMUyaN6fO8rgWKH330USAy0f3OO++koaGhxwT5o+kzYJ566ilee+01nnrqqegSLhBZQvr73/8+v/nNb/iHf/iHfr/hiSIcHvwwZdMwSEvRbH4RGRr9XaC4L30GzMqVK7ntttu6hQtEtvG89dZb+cUvfqGA6UUoHBlxN5i1yKBrNr/6YERONFMm9a+WkQj6/PT78MMPOe+883o9dt555/Hhhx/GvFDJIGRHajC+QdRgIBIwGkUmIkPh8AWKgSMuUNyXPj/9bNsmM7P3fVQyMzMHvAHNiaJrouVgazCZaX5aO1SDERHvHb5AMXDEBYr70mcTWdfKxUdasuyTky8lImwPfiY/QEaqn/oDnbEskohIvx1pgeKB6DNg8vLyuPXWW494fKCJdqIIH8NMfjhYg2lXDUZEhsa4ceNYsWLFMd2jz4Dpa4c16d2xrEUGkHGwiUxL9otIovJ+7+MTxLGsRQaRGozrai6MiCQuBUychI+5k//gemRqJhORBKWAiZPoTH7f4Jq3MtMiKyq3KGBEJEEpYOIkFHYwDQPLHHwfDChgRCRxKWDiJGw7fdZewjs30b52KXbtRz2OqQYjIolOARMnobBz1P4Xp6OZjj89THj7G7Q9cwfhPe92O94VMOqDERGvLVmyhClTpjB+/Hjef//9Qd9HARMnkRrMkR9v8NUVuJ1tpM3+V4zULEKb13Y7npbiwzCgRbP5RcRjU6dO5cknn2TUqFHHdB8FTJyEwu4RazCuYxP66HV8p12Ab+Rp+E+fTHjHWzgt9dFzTMMgI9VPa7uGKYuItyZNmjTgdcd60+8Nx2RgQrZzxDkwTl0VhNrxjT4LAH/pJQTfWk1o23pSzi2PnpeR5lcfjMgJpnnTn2l+Oz4T3LPOnkLWhEvicu/eqAYTJ+Gj9MGEd70DGPhGfRoAMysfs+Bk7F1bup2XpYARkQSmGkychI7SB2PvfgczfyxG6qFVqn1FpxPc/BxuqBPDnwJAVrqfuqZ2T8orIseHrAmXeFrLiCfVYOIkHHZ6XYfMDXdi13wYrb10sYpLwbGxa/4WfS0r3U9zm2owIpKYFDBxcqQ+GKdhN7g2Zv7J3V63Rp4GhoW9573oa1npAZrbIgteioh45a677mLy5Mns3buXb37zm1x++eWDuo+ayOIkHHbwp/cSMI27AbByS7q9bvhTMQtOJlz9HikHX8tKD+C4Lm0d4ei8GBGReLvtttu47bbbjvk+qsHEyZH6YOyGXWAFMLIKehyzCsbh7NuO60SGJg9Lj4RKc1swvoUVEYkDBUycRGby91wqxmnYhZlTjNHLGmXWiJPADuM0VQORGgygfhgRSUgKmDgJH7EPZhdmbu+zY80RYyPn7PsYiHTyg2owIpKYFDBxEuplFJnT0Yzbvr9H/0sXc/hI8AWwowETqcEcUA1GRBKQAiZOwrbbM2AadgFg5vQeMIZpYuaNUQ1GRJKCAiZOQuGeTWTO/hoAzOwjr/FjjTgJe9/HuG6kBpSe4qO5VTUYEUk8Cpg4sB0Hx+252KV7oBZMCyMj94jXWnknQbgzci6QlRGguV01GBFJPAqYOAiHIxMje9Rgmuswskb0OoKsS9cAAKexaySZnwOtChgRSTwKmDgI2Q5Azz6YA3WYWflHvdbMLgbAbopMyByeEWC/AkZEEpACJg5C4UjA9FaDMYf1nGB5OCOQhpGRi9O4B4gEjGowIpKIPAuYqqoqKioqKCsro6Kigu3bt/c4x7ZtFi9ezLRp07j00ktZsWJFj3M++ugjzj77bJYsWeJBqQcn3EsNxu1shc5WzGFHr8EAmDnFhwImM4XWjjChsB2fwoqIxIlnAbNo0SLmz5/Pc889x/z581m4cGGPc1atWsWOHTtYu3YtTz31FEuXLmXXrl3R47Zts2jRIqZNm+ZVsQeltxqM01wH0OsSMZ9kZhfjNO3BdR2GZ0TmwqiZTEQSjScBU19fz9atW5k5cyYAM2fOZOvWrTQ0NHQ7b/Xq1cydOxfTNMnNzWXatGmsWbMmevy//uu/uOSSSxg7dqwXxR60roAJHB4wByIB098aDOEgbks92ZkHA6ZFASMiicWTgKmurqawsBDLsgCwLIuCggKqq6t7nFdcXBz9vqioiL179wLw3nvvsX79er7xjW94UeRjEjzYnOX3Hx4wkWHHfXXyA5g5XSPJ9jA8I7K2smowIpJoEmK5/lAoxL/927/xox/9KBpSg5GXl9n3STGwuzGyC2XBiCzy87MASAntJ5yWRcGovpvI7MzT+BhIC9Vz8qnnRl4zjOi9kkEy/SyxomfSnZ5H4vMkYIqKiqipqcG2bSzLwrZtamtrKSoq6nHenj17mDBhAnCoRlNXV8eOHTu4+uqrAThw4ACu69LS0sKdd97Z73LU17fgOPHfvKtuXysArS0d1NU1k5+fRVt9DaTnUlfX3K97GGnDObCzisDJQQxg994D/b72eJefn5U0P0us6Jl0l0jPQ0F4ZJ4ETF5eHqWlpVRWVlJeXk5lZSWlpaXk5naf0T5jxgxWrFjB9OnTaWpqYt26dTz55JMUFxfz6quvRs9bunQpbW1t/PCHP/Si+APW1UR2eB+M29pw1Bn8n2TmFOM07cYyTbLS/WoiE5GE49kosttvv53ly5dTVlbG8uXLWbx4MQALFixg8+bNAJSXl1NSUsL06dOZN28e1157LaNHj/aqiDETHUXmP9Sc57Y2YQ4kYLIjQ5Vd12V4Zoo6+UUk4XjWBzNu3Lhe57U8/PDD0a8ty4oGz9Fcf/31MS1brAU/MYrMCQdxO5oxMnL6fQ8zpxhCHbitjQzPCNDU0hmXsoqIxItm8sdBKNS9icxujgzHNgcaMIDTtIecrBQaFTAikmAUMHEQjE60jDSRhZvrAQZYgzk0VDknK4UDLcHoCgEiIolAARMHwbCDAfgsAzhUgxlIJ7+RmoWRkonTuJucrBRcNNlSRBKLAiYOQmEbv9/EMCIBEz4QqcEMpInMMIyDI8mqyclKBaCxWc1kIpI4FDBxEAw7BHyHRpCFm+vBn4oRSBvQfczsIpymanKzIrP51Q8jIolEARMHoVD37ZLt5oYBDVHuYmYX4XY0MzwQ2TK58UBHzMooIhJvCpg4CIbtbpMswwfqB9TB36Vr87HU9loCPpMGNZGJSAJRwMRBKOxER5ABhJsbBhkwkaV03KZqcrJSNBdGRBKKAiYOgmGHwMGVlF3HwW5pHFAHfxcjKw+swMGO/hQaDihgRCRxKGDiIBQ61ETmtu8H1xlUDcYwTMzskThN1eQNS6VefTAikkAUMHEQPKyJzG1tBAY2RPlwXSPJ8oan0tTSqcmWIpIwFDBxEDqsicw5GDADmWR5ODO7GLd5H3mZflwXdfSLSMJQwMTB4aPI3NauWfyDr8GAS64V2WOmvqk9JmUUEYk3BUwc9Ggis3wYqYPbTdPMiYwky3UjQbVvv/phRCQxKGDiIBRyDi3V39qILzMXwxjcozaHFYJhMLyzBsNQwIhI4lDAxEEw7OD3H2oi8w3LG/S9DF8AIysf40BkqLJGkolIolDAxJjjuoTtQ2uROa1NWFmD6+DvEhlJtocRw1JVgxGRhKGAibHQYbtZuq4bqcFkDb4GAwcDZv9eRgxPpU6d/CKSIBQwMRaKbjZmQmcr2KFjaiIDsLKLwQ6Tn+HS2NxJ58EdM0VEjmcKmBgLdm2X7Leic2Bi0UQGkO+LDFWua1QtRkSOfwqYGDu8BtM1ByYWTWQA+UQCq0YBIyIJQAETY13NVwHfoRqM7xhrMEZqJkbaMPJC1QDUNrYdWyFFRDyggImxroBJCZgH1yEzsDIHN4v/cGZ2ESktu8lM86sGIyIJQQETY10Bk+r34bY2YqQNw7B8x3zfrkUvC3PSVIMRkYSggImxzuDBYcp+E6e1ASPz2JrHupjZxdDZSuFwP9UNChgROf4pYGKsMxQGICVg4bY2YaZnx+S+XR39I9OC7G8J0toRisl9RUTiRQETY52hSA0m1W9FajCDXKb/k8ycYgCK/M0A7K5rjcl9RUTiRQETY53BSB+M3whDsA0jBh38cHA/GX8qI529AOypV8CIyPFNARNj0WHKnQcAMNNjFDCGgZlbwvDWj0nxW+xRDUZEjnMKmBjrDB3cbKz94E6WMerkB7ByR+M27KR4RDq79ylgROT4poCJsc6gTcBvHZwDE7saDICZNxqCbRQN97G7rgXXdWN2bxGRWFPAxFhnyCY1cGgW/2C3Su6NmTsagDEZnRxoC9HUEozZvUVEYk0BE2OdIZuUrhpMIB3DnxKze1u5owAoseoB+Hhvc8zuLSISawqYGDvURNaAGaMhyl2MQDpG1giKQzswgO17D8T0/iIisaSAibFoE1lbE0ZGdszvb+WOxr9/JyPz0tlR0xLz+4uIxIoCJsaiTWQtsa/BQKSj39lfzUmFGVRVH1BHv4gctxQwMdYZtAn4DNz2AzHt4O9i5o4G12Vctsv+1iD79nfE/D1ERGJBARNjnSGbFNMG3LgEjHVwJNm41CYA/rarKebvISISCwqYGOsM2QTcyPDheDSRGcMKwApQEN5NWoqPv+3aH/P3EBGJBc8CpqqqioqKCsrKyqioqGD79u09zrFtm8WLFzNt2jQuvfRSVqxYET22bNkyLr/8cmbNmsWcOXN46aWXvCp6v7muS2fQIUAnENs5MF0M08TMHQUNOzh11HAFjIgctzwLmEWLFjF//nyee+455s+fz8KFC3ucs2rVKnbs2MHatWt56qmnWLp0Kbt27QJgwoQJ/O53v2PVqlXcc8893HjjjXR0HF/9D2HbxXFdUuxIucw4BAxEmsmc+p2MHzOcPftaaWzujMv7iIgcC08Cpr6+nq1btzJz5kwAZs6cydatW2loaOh23urVq5k7dy6maZKbm8u0adNYs2YNABdddBFpaWkAjB8/Htd1aWpq8qL4/da10KXfaQPLDykZcXkfM28MbmcLny6M7JT5TlVDH1eIiHjPk4Cprq6msLAQy7IAsCyLgoICqqure5xXXFwc/b6oqIi9e/f2uN8zzzzDmDFjGDlyZHwLPkBdS/UHwi0YGTkYhhGX97HyxwJQxF6GZQTYUlUfl/cRETkWx75ZvMdee+017rvvPh555JEBX5uXlxmHEh3SbkfmpKTZLaSMKCA/Pyt67PCvj5WT/Wm2mxbpbdWce/p4NrxbQ25uBpaVOGM2Yvk8koWeSXd6HonPk4ApKiqipqYG27axLAvbtqmtraWoqKjHeXv27GHChAlAzxrNxo0bufnmm3nwwQc55ZRTBlyO+voWHCd+ExOrayJrg1ntDYRTRlBXF/k+Pz8r+nWsmDmjaP54G6WnnM+f3tjFXzbuovSk+PT5xFo8nkei0zPpLpGeh4LwyDz5kzcvL4/S0lIqKysBqKyspLS0lNzc7sN4Z8yYwYoVK3Ach4aGBtatW0dZWRkAmzZt4sYbb+T+++/njDPO8KLYA9bWGQIgtbMRM3NEXN/Lyh+LXVfFmSfnEvCZvLGtNq7vJyIyUJ61qdx+++0sX76csrIyli9fzuLFiwFYsGABmzdvBqC8vJySkhKmT5/OvHnzuPbaaxk9OjKxcPHixXR0dLBw4ULKy8spLy9n27ZtXhW/X9o7I30wqUYwphuN9cbMPwU6Wwl0NnDWKXm88X5dXGtnIiID5VkfzLhx47rNa+ny8MMPR7+2LCsaPJ/0P//zP3ErW6y0d4YBSDeDntRgAOzajzj/06fwxvt1bKmqZ8K4+L6viEh/JU6vcAJo64gETKoRxMzKi+t7mbmjwRfArvmAc04bQVa6nxffru77QhERjyhgYqitM4yBSwphjDgsE3M4w7SwCsZh13yAzzL5+zOLePuDfexv1S6XInJ8UMDEUHtHmDSfg5k+DMMXiPv7WYWn4tTvwA11cNHZRdiOy8tbVIsRkeODAiaG2jrDpBlhjMz4No91sQpPBdfBrquiKC+DU0uG89Lb1dojRkSOCwqYGGrvDJNqdGJ6GTCAvfdvAFxyTjF7G9p4Z7uWjhGRoaeAiaG2zhBpbodnNRgjJQMzpwS7OjJc+zOlhQzPCLD29Z2evL+IyNEoYGKovT1IKp2Yw/I9e09rVCn23r/h2iF8lsmUc0vY8lEDu/e1elYGEZHeKGBiqK09SJoRxBxW6Nl7WsWngx3Erv0IiDST+X0m/6tajIgMMQVMDLUH7YMBU+DZe/qKTgcM7D3vApCVHuCCM0fyyjt7OdCmIcsiMnQUMDHiuC7tIZdUM4wR50mWhzNSMjBHnIS9e2v0tUsnjSYUdvjzxt2elUNE5JMUMDHSGbRxMUhP9WGY3u6C4Bv1aeyaD3GDbQAUj8jgrFPyeP7N3YTCjqdlERHpooCJkeg6ZOlpnr+3NeZscG3Cu96Jvjb9vNEcaA3y6tYaz8sjIgIKmJjpWocsPTO+m5r1xio8FVIyCO94O/rap8fmMCo/g7Wv79TESxEZEgqYGGlpjmyOlDFsmOfvbZgWvpIzsXduwnUjTWKGYTB90mh21bXw3seNnpdJREQBEyMH6usBGJ4b30Uuj8Q35mzc9gM4B4crA3z2jEKGpft5TkOWRWQIKGBiZH9DZHmW4QXezYE5nO+kc8D0Efrwtehrfp/F5/+uhE0f1lNdr4mXIuItBUyM7G86gIFLVmHxkLy/EUjHN/oswlWvR5vJAD4/cRQ+y2Tdhl1DUi4ROXEpYGLkQEs7GWYIn88/ZGXwjfsMbmsjds0H0deGZQT43BmF/GVztSZeioinFDAx0twWIjMwtKO1fGPOAV8K4ffXd3t9xvljCNkOq1/5eGgKJiInJAVMDLjhTpqDBsPSrCEthxFIwz/uM4Q+eBU32B59vSgvgwvPKuL5N3dRv79jCEsoIicSBUwMOE3VNDtpDMtMHeqi4D/9Ygh3Evrw1W6vl194MmDwzPqPer9QRCTGFDAx4DTspsVNZdhw7ydZfpJZMA4zdzShLeu6TbDMHZbK1HNH8fKWvXy8t3kISygiJwoFTAx07NtFuxtgWPbwoS4KhmEQmDADp3EX9s5N3Y7NvGAswzIC/OoPW7VGmYjEnQImBg7sjQwBPh6ayAB8p56PkZFL8K0/dKvFZKT6+fqM09lV18oTz72nJWREJK4UMMfIdRz279sHwPD0wBCXJsIwfQTO+QL23vexd77d7dg5p45g9t+P5S+b97Lm1R1DVEIROREoYI6R01RNYzCyPH92VsoQl+YQ/+mXYAwvpPOvT+E64W7Hyi88mc+UFvC7P3/IK+/sHaISikiyU8AcI6fuI/bZWQDkZ3u/VP+RGJaPlPMrcJqqCb69pvsxw+CqL5Qyfkw2v6zcqiX9RSQuFDDHyK79kHojm/QUH5lpQzeLvze+kybiO3kSwTd+j93QfcHLgN/in798NqeVZPPwqq28/l7tEJVSRJKVAuYY2TUfUG/mH1e1ly6GYZBy4T9ipGTQvvYB3I6WbsdTAhbfmzuBU0YN4xcr3+GNbQoZEYkdBcwxcFobcRp2Ue9kkZ9z/AUMgJk2jLRLr8dtqad97f24oe4z+VMDPm6cezYnF2fx0Mp32Ph+3RCVVESSjQLmGNi7tuC4BvUdJvnZx8cQ5d5YI08j9fMLsGs+oG31vTht+7sdT0vxcePccxhTmMWDz2zhrQ/2DVFJRSSZKGCOQXjnZvanjMR2oOA4bCI7nH/c+aRO/Q7Ovo9pe3oRoe1vdpsHk57q4/sVZzO6IJMHf7+ZTR8qZETk2ChgBsl1bMK732Ff9pnA8TWC7Ej8p5xH+hULMVIy6Fh7P23P3k3og1dwOyObkaWn+vn+V86heEQGDzy9hS0f1Q9xiUUkkfmGugCJyt61GTpb2eEfC3Ry0sisoS5Sv1h5o0n/0mJC775AcNMaOp7/BRgmVuGpWCM/RaDgFG6afQr/sfIjlj69matnfZpzxxcMdbFFJAEpYAYp9N6LGGnDqGrNoHiEj4zU42uI8tEYpo/AGVPxl34ep+4jwjveJrxrC8G3/wiujQF8J7WQXwQms+z3W5h2RhZzL5uI36f/XESk//SJMQhOWxPhj9/Cf9YMPvrrAf7uU/lDXaRBMcyDNZfCU0k570u44SDOvo+xaz/CV/cRN/heZGXNGNa9U8qmbav58qc6OOe8s7FGnoZhqHVVRI5OATMIkb/0XRpGnk9rx4eMGzX0qyjHguELYI08DWvkaQCkAf/YfoCzN7zNUxv8PLg1k7Hb3uKi7D9w7pljyDj9c1g5o4a20CJy3FLADJCzv4bQO+vwj7+IjdWRUVinn5QzxKWKHzNtGBMvuoizLnD484aPWfe6wf9Xn8+TLzic9JeXGJURYsTIQnLGjGPY8OFkpQfITPeTk5mC36dajsiJTAEzAK4douOFX4Hpwzfpi7zwxLucPib7uB+iHAs+y2Ta+Scz5TNj2bajiS3vV7PtI4M394dp2++DbR93O98yDUryMzhtdDaTxhdw6qjhmKYxRKUXkaHgWcBUVVVxyy230NTURHZ2NkuWLGHs2LHdzrFtm7vuuouXXnoJwzC4+uqrmTt3bp/HvOCGg3T8+ZfYe98ndep3eHNHkH37O5gz+RTPynA8MA2D0pNyKD0pB/g0AG11u2l493X27/wbzY37aXFTqLWHsaOxgD/XjmDdhl0M94c4P7+Vz46y8Y3OJugEMFOHYaRlYaQNw0jNAn8qhnH0EDrQGuTD3fv5YM9+duxtpq0zTDDskJHqJzszQGFOOkUj0inOy2BkbjoBv+XBUxGR3ngWMIsWLWL+/PmUl5ezcuVKFi5cyBNPPNHtnFWrVrFjxw7Wrl1LU1MTV1xxBZ/73OcoKSk56rF4cu0w4R1vEdzwe5zG3aScX8GOtNN5/Nm3Obkoi0mnawhvev4o0vNHUQK4wTbs2o9wmqpx9tfQvv89NtcH2NCYzbo9eazdYzL2zTrOTaniNF81I639RDPFF8BIG46RPhwzbTht/myqgxnsbkvhowN+qpos9rVHTjYNl5IsyEpxGWZCa6vBR/Xw+rvgEjnHwCUvHUZmGRQNsxiRaZKT4ScvwyIn1SHdDIETBjuEGw6BEwI7jGuHARfDn4rrSyVsphDypRP2ZxD2ZeCmZJKakUlqwE9KwMQyY9MU6LpupDyhTlwnjGH6wLQi/yyfBlZIwjFcD7Y1rK+vp6ysjFdffRXLsrBtm/PPP5+1a9eSm5sbPe/qq69mzpw5zJgxA4A77riD4uJivv3tbx/1WH81NrbiOP37cYNbn8fe8y5Owy6wQxgZeaSc90XqUsbw09++xbCMFL5Tfga5w/peIiYvL5P6+pY+z0t2zW1B3nx/Hxv/VseefZHJnSl+g5xUyPLbGE4Yx7ZpDUJz2KLFPrSBW6bRQYmvntFWAyW+BoqsJvyG3eM9Qq5Jg53JPieLOieLensY+5ws9tmZhOlem/ETJs0MYWHjMxxcF8L4CLkWNmb0f/viMxzSfQ7pPpc0n0O6H9J8Lmk+F8sA07UxcDDdMIZrg+NEQsxxcJ0wrm1jYOPYNhzt19EwI2FjHAwd0wemeeh7yzp03DCxXYOOMHSEodM++LVt0B426bBNgo6Jabj4DBfLcAgYNn7DwW+E8RsuYdcg5FqEXIugaxJ0LMJu5JqAYeM3HVIMh1QrTKrpkGraka8tB78RKa5lmpyV08LwFMD0YVhd5bYiAWod/P/EdQ/+c8B1SU2xaG8PHnzNBieM6zjg2JFzHBvXiTzLyPGD/zAiz6Tr+Rgmhmkd9px8GNHj1sFjh46bacOwxp4bOaef8vIy+33uicaTGkx1dTWFhYVYB/9jsiyLgoICqquruwVMdXU1xcXF0e+LiorYu3dvn8f6Kycno/8nXzQbmN3j5QLgl/86fUDvC/qPECAvD8aOzmXO1E/F9X3GxfXu4pXkHTpz4lCdW0RE4sKTgCkqKqKmpgbbjjRp2LZNbW0tRUVFPc7bs2dP9Pvq6mpGjhzZ5zERETn+eBIweXl5lJaWUllZCUBlZSWlpaXdmscAZsyYwYoVK3Ach4aGBtatW0dZWVmfx0RE5PjjSSc/wIcffsgtt9zCgQMHGDZsGEuWLOGUU05hwYIF3HDDDZx11lnYts0dd9zBX/7yFwAWLFhARUUFwFGPiYjI8cezgBERkROLOvlFRCQuFDAiIhIXChgREYkLBYyIiMSFAiaOqqqqqKiooKysjIqKCrZv3z7URfJUY2MjCxYsoKysjFmzZnHdddfR0NAAwFtvvcXs2bMpKyvjqquuor6+fohL660HHniA8ePH8/777wMn9vPo7Oxk0aJFTJ8+nVmzZvFv//ZvgH5/koIrcXPllVe6zzzzjOu6rvvMM8+4V1555RCXyFuNjY3uX//61+j3//7v/+7+v//3/1zbtt1p06a5r7/+uuu6rrts2TL3lltuGapiem7Lli3ut771Lffzn/+8u23bthP+edx5553u3Xff7TqO47qu69bV1bmuq9+fZKCAiZN9+/a55557rhsOh13Xdd1wOOyee+65bn19/RCXbOisWbPG/frXv+6+/fbb7uWXXx59vb6+3j3nnHOGsGTe6ezsdOfNm+fu3LkzGjAn8vNoaWlxzz33XLelpaXb6/r9SQ5qIouToy3weSJyHIdf//rXTJkypcfCpbm5uTiOQ1NT09AV0CP33Xcfs2fP7rbNxIn8PHbu3El2djYPPPAAc+bM4corr2TDhg36/UkSChjxxJ133kl6ejpf+9rXhrooQ2bjxo1s2bKF+fPnD3VRjhu2bbNz504+/elP8/TTT/ODH/yA66+/nra2tqEumsSAtkyOk8MX+OzaA6e3BT5PBEuWLOHjjz/moYcewjTNHguXNjQ0YJom2dnZQ1dID7z++ut8+OGHTJ06FYC9e/fyrW99iyuvvPKEfB4Q+T3x+XzMnDkTgLPPPpucnBxSU1P1+5MEVIOJk/4u8Jns/vM//5MtW7awbNkyAoHIBmJnnnkmHR0dbNiwAYDf/OY30Y3kktnVV1/N+vXref7553n++ecZOXIkv/rVr/j2t799Qj4PiDQHnn/++dE1Bquqqqivr2fs2LH6/UkCWossjo60wOeJ4m9/+xszZ85k7NixpKZGdv4sKSlh2bJlvPnmmyxatIjOzk5GjRrFT37yE0aMGDHEJfbWlClTeOihh/jUpz51Qj+PnTt3cuutt9LU1ITP5+N73/seF1988Qn/+5MMFDAiIhIXaiITEZG4UMCIiEhcKGBERCQuFDAiIhIXChgREYkLBYycMK688kpWrFgRt/svXbqUH/zgB3G7v0iiUcBIwnr66aeZNWsWZ599Nn//93/PokWLOHDgADDwD/tdu3Yxfvx4Jk6cyMSJE7ngggu45pprohMAY2HKlCm8/PLLMbufyPFOASMJ6ZFHHuHee+/l5ptvZsOGDTz11FPs2bOHb37zmwSDwUHf9/XXX2fjxo2sXLmSCy64gOuuu46nn346hiUXOXEoYCThtLS0sHTpUm677TYmT56M3++npKSEn/3sZ+zevZsVK1bwi1/8gj/+8Y9MnDiR2bNnR6/dvXs3X/nKV5g4cSJXXXVVdAO0T8rPz+frX/861113Hffeey+O4wBQU1PD9ddfz2c/+1mmTJnCE0880e26YDDI9773PSZOnMgXv/hF3nvvPQBuvvlm9uzZwz/90z8xceJEHn744Tg9HZHjhwJGEs6bb75JZ2cn06dP7/Z6RkYGF198MW+88QbXXHMNl112GRs3buTZZ5+NnlNZWcmPfvQjXnnlFUKhEI888shR32v69OnU19dTVVWF4zh85zvfYfz48bz44os8/vjjPP7447z00kvR8//v//6PGTNm8NprrzFz5ky++93vEgqF+MlPfkJxcTEPPfQQGzduZMGCBbF9KCLHIQWMJJzGxkZycnLw+XouBp6fn09jY+MRr50zZw4nn3wyqampzJgxg3ffffeo71VQUABAU1MTmzdvpqGhgeuuu45AIMDo0aOZN28eq1evjp5/xhlnMGPGDPx+f7S57u233x7kTyqS2LRcvyScnJwcGhsbCYfDPUKmrq6OnJycI16bn58f/TotLa3PfUdqamoAyM7OZtu2bdTW1jJp0qTocdu2u30/cuTI6NemaVJYWEhtbW3/fjCRJKOAkYQzceJEAoEAa9eu5Qtf+EL09dbWVl588UVuuummaDAcq//93/8lLy+Pk08+mQMHDlBSUsLatWuPeP7evXujXzuOQ01NTbQWJHKiUROZJJysrCyuvfZa7rrrLl588UVCoRC7du3ie9/7HiNHjqS8vJy8vDx2794d7ZwfqH379rF8+XIeeOABbrrpJkzTZMKECWRkZPBf//VfdHR0YNs277//Pps2bYpe984777B27VrC4TCPP/44gUCAs88+G4ARI0awc+fOmDwDkUSggJGEtGDBAm688UZ+/OMfc+655zJv3jyKiop47LHHCAQC0Q27zj//fL74xS/2+77nnXce55xzDrNmzeKFF17gvvvu48tf/jIQ2Rf+oYce4r333mPq1Kl89rOf5bbbbqOlpSV6/dSpU1m9ejXnnXceK1euZOnSpfj9fiCy4djPf/5zJk2axK9+9asYPg2R45P2gxERkbhQDUZEROJCASMiInGhgBERkbhQwIiISFwoYEREJC4UMCIiEhcKGBERiQsFjIiIxIUCRkRE4uL/B62KkszVgGVUAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DohsQiAl0LJq"
},
"source": [
"Seaborn can do many sophisticated (and aestetically pleasing) \n",
"graphs. Go to [the Gallery](https://seaborn.pydata.org/examples/index.html) for details and example code. \n",
"\n",
"There are severe outliers in OthDebt, Leverage, Creddebt and Income, but we don't know which ones are valid and which invalid. We will treat these now."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HZLgIWHqSvts"
},
"source": [
"## Data Cleaning\n",
"\n",
"Now we can focus on cleaning the data. Let's start with the easy part: removing null values. **Remember to check when an outlier is a missing value** (invalid outliers).\n",
"\n",
"### Null values\n",
"\n",
"The core function here will be Panda's [```fillna```](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html). This allows to replace all null values (represented by None or NaN in Python) by a certain value. This also allows to set what the replacement will be with the ```value``` argument. See the help for details.\n",
"\n",
"Remember the strategies to deal :\n",
"\n",
"1. Keep: If the null values are a category by themselves. In this case, replace by something meaningful.\n",
"\n",
"2. Delete: If the null values are too many **either by row or by column** then it is better to just drop the case or the variable.\n",
"\n",
"3. Replace: If there are only a few missings for the variable or the row (<1% total), replace by the replace the null values by the **median** for continous variables, and the **mode** for categorical values.\n",
"\n",
"Let's study our dataset's null values. The [```isnull()```](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.isnull.html) function returns which elements in the dataframe are null. The [```any()```](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.any.html) function returns a list with whatever columns (default) or rows (passing ```axis = 1``` to the function) have any element with a boolean of true."
]
},
{
"cell_type": "code",
"metadata": {
"id": "z-s-kkifWlud",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "3f4f122d-64c3-4e94-e284-a8a51a9621c3"
},
"source": [
"bankloan_data.isnull().any()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"customer False\n",
"Age False\n",
"Education False\n",
"Employ False\n",
"Address True\n",
"Income True\n",
"Leverage True\n",
"Creddebt True\n",
"OthDebt True\n",
"MonthlyLoad False\n",
"Default False\n",
"dtype: bool"
]
},
"metadata": {},
"execution_count": 8
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "H2Fp-LCjXv9s"
},
"source": [
"We can see which columns have null values. Let's study them in further detail."
]
},
{
"cell_type": "code",
"metadata": {
"id": "Tgc0zy6UX04R",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "b88616ac-12eb-4a55-ed74-359d520d21ba"
},
"source": [
"null_columns = bankloan_data.columns[bankloan_data.isnull().any()]\n",
"bankloan_data[null_columns].isnull().sum()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Address 1\n",
"Income 1\n",
"Leverage 1\n",
"Creddebt 1\n",
"OthDebt 11\n",
"dtype: int64"
]
},
"metadata": {},
"execution_count": 9
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OJ7_tgqsYLhj"
},
"source": [
"Given the small number of cases for all variables except OthDebt, we can simply replace those values by the median.\n",
"\n",
"Let's study OthDebt cases more in detail."
]
},
{
"cell_type": "code",
"metadata": {
"id": "9uFhZbqGYUqp",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 394
},
"outputId": "4c9aee2c-2e04-40ed-ebf6-864318654912"
},
"source": [
"bankloan_data.loc[bankloan_data.isnull().any(axis = 1), :]"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" customer Age Education Employ Address Income Leverage Creddebt \\\n",
"17 10423 19 Bas 2 0.0 31.0 0.3 0.02 \n",
"247 71896 20 SupInc 0 0.0 21.0 1.3 0.18 \n",
"255 72327 19 Med 0 NaN NaN NaN NaN \n",
"293 74471 39 Bas 8 9.0 41.0 0.1 0.03 \n",
"587 244023 31 SupCom 1 7.0 69.0 0.4 0.19 \n",
"745 315892 22 SupInc 0 1.0 14.0 2.5 0.26 \n",
"748 315948 41 Med 21 9.0 64.0 0.3 0.12 \n",
"817 335635 18 Med 0 0.0 24.0 0.9 0.13 \n",
"1194 372485 20 SupInc 0 0.0 13.0 1.1 0.05 \n",
"1254 376801 23 SupCom 0 2.0 19.0 1.4 0.18 \n",
"1395 382157 20 SupInc 0 0.0 13.0 999999.0 0.00 \n",
"\n",
" OthDebt MonthlyLoad Default \n",
"17 NaN 0.01 1 \n",
"247 NaN 0.07 1 \n",
"255 NaN 0.01 1 \n",
"293 NaN 0.00 0 \n",
"587 NaN 0.01 0 \n",
"745 NaN 0.20 0 \n",
"748 NaN 0.01 0 \n",
"817 NaN 0.05 1 \n",
"1194 NaN 0.10 0 \n",
"1254 NaN 0.09 0 \n",
"1395 NaN 0.00 0 "
],
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
customer
\n",
"
Age
\n",
"
Education
\n",
"
Employ
\n",
"
Address
\n",
"
Income
\n",
"
Leverage
\n",
"
Creddebt
\n",
"
OthDebt
\n",
"
MonthlyLoad
\n",
"
Default
\n",
"
\n",
" \n",
" \n",
"
\n",
"
17
\n",
"
10423
\n",
"
19
\n",
"
Bas
\n",
"
2
\n",
"
0.0
\n",
"
31.0
\n",
"
0.3
\n",
"
0.02
\n",
"
NaN
\n",
"
0.01
\n",
"
1
\n",
"
\n",
"
\n",
"
247
\n",
"
71896
\n",
"
20
\n",
"
SupInc
\n",
"
0
\n",
"
0.0
\n",
"
21.0
\n",
"
1.3
\n",
"
0.18
\n",
"
NaN
\n",
"
0.07
\n",
"
1
\n",
"
\n",
"
\n",
"
255
\n",
"
72327
\n",
"
19
\n",
"
Med
\n",
"
0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.01
\n",
"
1
\n",
"
\n",
"
\n",
"
293
\n",
"
74471
\n",
"
39
\n",
"
Bas
\n",
"
8
\n",
"
9.0
\n",
"
41.0
\n",
"
0.1
\n",
"
0.03
\n",
"
NaN
\n",
"
0.00
\n",
"
0
\n",
"
\n",
"
\n",
"
587
\n",
"
244023
\n",
"
31
\n",
"
SupCom
\n",
"
1
\n",
"
7.0
\n",
"
69.0
\n",
"
0.4
\n",
"
0.19
\n",
"
NaN
\n",
"
0.01
\n",
"
0
\n",
"
\n",
"
\n",
"
745
\n",
"
315892
\n",
"
22
\n",
"
SupInc
\n",
"
0
\n",
"
1.0
\n",
"
14.0
\n",
"
2.5
\n",
"
0.26
\n",
"
NaN
\n",
"
0.20
\n",
"
0
\n",
"
\n",
"
\n",
"
748
\n",
"
315948
\n",
"
41
\n",
"
Med
\n",
"
21
\n",
"
9.0
\n",
"
64.0
\n",
"
0.3
\n",
"
0.12
\n",
"
NaN
\n",
"
0.01
\n",
"
0
\n",
"
\n",
"
\n",
"
817
\n",
"
335635
\n",
"
18
\n",
"
Med
\n",
"
0
\n",
"
0.0
\n",
"
24.0
\n",
"
0.9
\n",
"
0.13
\n",
"
NaN
\n",
"
0.05
\n",
"
1
\n",
"
\n",
"
\n",
"
1194
\n",
"
372485
\n",
"
20
\n",
"
SupInc
\n",
"
0
\n",
"
0.0
\n",
"
13.0
\n",
"
1.1
\n",
"
0.05
\n",
"
NaN
\n",
"
0.10
\n",
"
0
\n",
"
\n",
"
\n",
"
1254
\n",
"
376801
\n",
"
23
\n",
"
SupCom
\n",
"
0
\n",
"
2.0
\n",
"
19.0
\n",
"
1.4
\n",
"
0.18
\n",
"
NaN
\n",
"
0.09
\n",
"
0
\n",
"
\n",
"
\n",
"
1395
\n",
"
382157
\n",
"
20
\n",
"
SupInc
\n",
"
0
\n",
"
0.0
\n",
"
13.0
\n",
"
999999.0
\n",
"
0.00
\n",
"
NaN
\n",
"
0.00
\n",
"
0
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
]
},
"metadata": {},
"execution_count": 10
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_ZWCGoKQYfvB"
},
"source": [
"We can see all cases in which OthDebt is null. We can also see the egregious outlier that Leverage has, with a value of 9999999. These values give us some hints about what's happening with OthDebt. Let's study the minimum and maximum of the variables."
]
},
{
"cell_type": "code",
"metadata": {
"id": "nD5BqZ5hYwcY",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "d0a1812e-ce38-440d-8f80-16f25a12c33b"
},
"source": [
"bankloan_data.OthDebt.describe()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"count 1489.000000\n",
"mean 3.872257\n",
"std 5.343150\n",
"min 0.100000\n",
"25% 1.120000\n",
"50% 2.240000\n",
"75% 4.610000\n",
"max 63.470000\n",
"Name: OthDebt, dtype: float64"
]
},
"metadata": {},
"execution_count": 11
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "KpgxTyujY0YD"
},
"source": [
"Aha! Note anything? There are no values equal to 0! We can make a good guess that the null values are equal to zero. In real life we would call the sysadmins to confirm this, but in this case we can make a guess.\n",
"\n",
"Then, we now should fix these values as follow:\n",
"\n",
"1. Replace the leverage equal to 999999 by a null value.\n",
"2. Replace all OthDebt nulls by 0.\n",
"3. Replace the remaining null values by the median."
]
},
{
"cell_type": "code",
"metadata": {
"id": "Geu-R8RRa1Tf"
},
"source": [
"# Replace invalid outlier.\n",
"bankloan_data.Leverage.values[bankloan_data.Leverage.values == 999999] = np.nan"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "BFaxJbmNKGcN"
},
"source": [
"# Fills out the null values with zeros. Inplace argument changes dataframe.\n",
"bankloan_data.OthDebt.fillna(value = 0, inplace=True)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ceQ6j1xnxHDm"
},
"source": [
"# Remove null case if you want\n",
"# bankloan_data.drop(index=255, axis = 0, inplace = True)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "R06ZbW0DcN6f",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "ff9fe6e1-644b-4db8-f118-612f41d0625b"
},
"source": [
"# Fill out remaining elements.\n",
"null_columns = bankloan_data.columns[bankloan_data.isnull().any()]\n",
"\n",
"for column in null_columns:\n",
" bankloan_data[column].fillna(bankloan_data[column].median(), inplace=True)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
":2: FutureWarning: Dropping of nuisance columns in DataFrame reductions (with 'numeric_only=None') is deprecated; in a future version this will raise TypeError. Select only valid columns before calling the reduction.\n",
" bankloan_data.fillna(bankloan_data.median(), inplace=True)\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QgFDQXyBiHiU",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 300
},
"outputId": "0fc50729-d88f-4e29-e5d0-6985793f24ff"
},
"source": [
"bankloan_data.describe()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" customer Age Employ Address Income \\\n",
"count 1500.000000 1500.000000 1500.000000 1500.000000 1500.000000 \n",
"mean 257714.548000 34.174000 6.952000 6.308667 59.602000 \n",
"std 139555.147719 13.142306 8.977644 6.045640 67.124278 \n",
"min 10012.000000 18.000000 0.000000 0.000000 12.000000 \n",
"25% 98638.750000 24.000000 0.000000 2.000000 27.000000 \n",
"50% 315991.500000 31.000000 4.000000 5.000000 40.000000 \n",
"75% 370701.500000 42.000000 10.000000 9.000000 64.000000 \n",
"max 453777.000000 79.000000 63.000000 34.000000 1079.000000 \n",
"\n",
" Leverage Creddebt OthDebt MonthlyLoad Default \n",
"count 1500.000000 1500.000000 1500.000000 1500.000000 1500.000000 \n",
"mean 9.940600 1.935567 3.843860 0.365447 0.365333 \n",
"std 6.662313 2.973593 5.333758 0.293937 0.481684 \n",
"min 0.100000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 4.800000 0.420000 1.107500 0.150000 0.000000 \n",
"50% 8.500000 0.990000 2.215000 0.290000 0.000000 \n",
"75% 13.525000 2.200000 4.572500 0.500000 1.000000 \n",
"max 40.700000 35.970000 63.470000 2.150000 1.000000 "
],
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
customer
\n",
"
Age
\n",
"
Employ
\n",
"
Address
\n",
"
Income
\n",
"
Leverage
\n",
"
Creddebt
\n",
"
OthDebt
\n",
"
MonthlyLoad
\n",
"
Default
\n",
"
\n",
" \n",
" \n",
"
\n",
"
count
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
1500.000000
\n",
"
\n",
"
\n",
"
mean
\n",
"
257714.548000
\n",
"
34.174000
\n",
"
6.952000
\n",
"
6.308667
\n",
"
59.602000
\n",
"
9.940600
\n",
"
1.935567
\n",
"
3.843860
\n",
"
0.365447
\n",
"
0.365333
\n",
"
\n",
"
\n",
"
std
\n",
"
139555.147719
\n",
"
13.142306
\n",
"
8.977644
\n",
"
6.045640
\n",
"
67.124278
\n",
"
6.662313
\n",
"
2.973593
\n",
"
5.333758
\n",
"
0.293937
\n",
"
0.481684
\n",
"
\n",
"
\n",
"
min
\n",
"
10012.000000
\n",
"
18.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
12.000000
\n",
"
0.100000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
25%
\n",
"
98638.750000
\n",
"
24.000000
\n",
"
0.000000
\n",
"
2.000000
\n",
"
27.000000
\n",
"
4.800000
\n",
"
0.420000
\n",
"
1.107500
\n",
"
0.150000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
50%
\n",
"
315991.500000
\n",
"
31.000000
\n",
"
4.000000
\n",
"
5.000000
\n",
"
40.000000
\n",
"
8.500000
\n",
"
0.990000
\n",
"
2.215000
\n",
"
0.290000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
75%
\n",
"
370701.500000
\n",
"
42.000000
\n",
"
10.000000
\n",
"
9.000000
\n",
"
64.000000
\n",
"
13.525000
\n",
"
2.200000
\n",
"
4.572500
\n",
"
0.500000
\n",
"
1.000000
\n",
"
\n",
"
\n",
"
max
\n",
"
453777.000000
\n",
"
79.000000
\n",
"
63.000000
\n",
"
34.000000
\n",
"
1079.000000
\n",
"
40.700000
\n",
"
35.970000
\n",
"
63.470000
\n",
"
2.150000
\n",
"
1.000000
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
]
},
"metadata": {},
"execution_count": 16
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rwY4w7DAcwyE"
},
"source": [
"There are no more null values! We are now ready to study the distributions."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1hpzkfzwiPyB"
},
"source": [
"### Outlier cleaning\n",
"\n",
"Cleaning outlier, on the other hand, requires a much more manual intervention. We know there are three variables we need to intervene in: Income, Creddebt, and OthDebt. In general, we would like to modify all cases where there is either a discontinuous distribution or a case that is outside of 3 to 6 standard deviations.\n",
"\n",
"It is very important to use your judgement in this! Don't just cut in 3 stds, as that is too restrictive in an exponential distribution. If you want to get an idea of the values, then seaborn can help. The function ```displot``` with either the option ```hist``` or ```kde``` allows to check the distribution of values."
]
},
{
"cell_type": "code",
"metadata": {
"id": "dCOmLnVpiOVo",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 365
},
"outputId": "9a9374e4-b950-4f1b-ca50-43585d38aa3c"
},
"source": [
"fig = sns.displot(bankloan_data['Income'], kind = 'hist')\n",
"plt.savefig('Income.pdf')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
\n",
" "
]
},
"metadata": {},
"execution_count": 22
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mPDWYQFymRX1"
},
"source": [
"Much better, although income still has a large outlier. This plot might be misleading though, as the magnitud of the data is relevant. We might want to recheck this after normalizing the data. We will now save the output to a compressed format which is very efficient to start whole data structures, [pickle](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_pickle.html)."
]
},
{
"cell_type": "code",
"metadata": {
"id": "4V1InwIQIM9J"
},
"source": [
"bankloan_data.to_pickle('BankloanClean.pkl')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "IwSEaeGlmFzO"
},
"source": [
"## Normalization\n",
"\n",
"Most models require the inputs to be in the same scale, this is called **normalization**. It is very important for most models... except for credit scoring as we will use Weight of Evidence (see the lecture!). Still, this is fairly simple to do in Pandas, being smart about what columns we select and **mapping** a function to those columns.\n",
"\n",
"The most traditional mapping is the zscore. We can use scipy's version of it. \n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "9E_PSudynST3"
},
"source": [
"from scipy.stats import zscore"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "oEFMdbTMnW68"
},
"source": [
"We now select all numeric columns, except the customer one. We can do this with ```select_dtypes```."
]
},
{
"cell_type": "code",
"metadata": {
"id": "D0I8jDLlm6vM",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "299c8343-a0e7-42ba-9918-9ae469227197"
},
"source": [
"# Identify the numerical columns\n",
"numeric_cols = bankloan_data.select_dtypes(include=[np.number]).columns\n",
"numeric_cols "
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Index(['customer', 'Age', 'Employ', 'Address', 'Income', 'Leverage',\n",
" 'Creddebt', 'OthDebt', 'MonthlyLoad', 'Default'],\n",
" dtype='object')"
]
},
"metadata": {},
"execution_count": 25
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QAmoNyjxny0G"
},
"source": [
"# Remove the first and last one\n",
"numeric_cols = numeric_cols[1:-1]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "k1ETL7-Nn11u"
},
"source": [
"# Apply the zscore function to all data\n",
"bankloan_data[numeric_cols] = bankloan_data[numeric_cols].apply(zscore)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "StvuqRWApixH"
},
"source": [
"Now the data should look much better."
]
},
{
"cell_type": "code",
"metadata": {
"id": "JrahcfLIoN45",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 381
},
"outputId": "3fd7206b-10b5-4794-e55b-5cefb4cd3c97"
},
"source": [
"fig, ax = plt.subplots(figsize=(10,5))\n",
"a = sns.violinplot(x='variable', y='value', data=pd.melt(bankloan_data.iloc[:, np.r_[1,3:9]]), ax=ax)\n",
"a.set_xticklabels(a.get_xticklabels(), rotation=90);"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmcAAAFsCAYAAACJnR5PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAAsTAAALEwEAmpwYAABuIklEQVR4nO3dd3gUdf4H8PfM9s2mEyAECDV0pElRLICKIM1yiv1snKIn9/O8U8+G4olY7tRTDyyHDRURUAHpvUOooQYCSQgphPTdbLbO749lI4EQdpNNZiZ5v57Hx2zJ5uO4O/uebxUkSZJARERERIogyl0AEREREf2O4YyIiIhIQRjOiIiIiBSE4YyIiIhIQRjOiIiIiBSE4YyIiIhIQRjOiIiIiBREK3cBoVRUZIPXy2XbiIiISLlEUUB0dNglH29U4czrlRjOiIiISNXYrUlERESkIAxnRERERArCcEZERESkIAxnRERERArCcEZERESkIAxnRERERArS4OFsxowZGD58OLp06YLU1NSLHv/oo48u+RgRERFRY9fg4WzEiBGYM2cOEhISLnrs4MGD2Lt3b7WPERERETUFDR7OBgwYgPj4+IvudzqdeP311zF16tSGLomIiIhIMRQz5uyDDz7AuHHj0Lp1a7lLISIikpUkSZg9+1McOXJI7lJIBorYvmnPnj04cOAAnn322Tq9TmysJUQVERERycfr9WLdutVISdmLb775Ru5yqIEpIpzt3LkTaWlpGDFiBAAgNzcXjzzyCKZPn46hQ4cG/DoFBVburUlERKrn9XoBAAUFBcjPL5O5Ggo1URRqbFBSRDibNGkSJk2aVHl7+PDhmDlzJpKSkmSsioiISB6SxIaGpqzBx5y98cYbuPbaa5Gbm4uHHnoIt9xyS0OXQEREpGgMZ02bIDWidwC7NYmIqDFwuVx49NH7AABffTVX5moo1C7XramY2ZpERETk04jaTagWGM6IiIiIFIThjIiIiEhBGM6IiIiIFIThjIiIiEhBGM6IiIgURhT59dyU8f8+ERGRwgiCIHcJJCOGMyIiIoVhOGvaGM6IiIiIFIThjIiIiEhBGM6IiIgUht2aTRvDGRERkcIwnDVtDGdERERECsJwRkRERKQgDGdERERECsJwRkRERKQgDGdERERECsJwRkRERKQgDGdERERECsJwRkRERKQgDGdERERECsJwRkRERKQgDR7OZsyYgeHDh6NLly5ITU0FABQVFeGxxx7DyJEjMXbsWDz11FMoLCxs6NKIiIiIZNfg4WzEiBGYM2cOEhISKu8TBAGPPvooli9fjkWLFqFNmzZ49913G7o0IiIiItk1eDgbMGAA4uPjq9wXFRWFQYMGVd7u06cPsrOzG7o0IiIiItkpbsyZ1+vF999/j+HDh8tdChEREVGD08pdwIWmTZsGs9mM++67L+jfjY211ENFRERE8omLC5e7BGpgigpnM2bMQEZGBmbOnAlRDL5Rr6DACq9XqofKiIiI5JGfXyZ3CRRioijU2KCkmHD2r3/9CwcOHMCnn34KvV4vdzlEREREsmjwcPbGG29gxYoVOHv2LB566CFERUXh/fffx6xZs9CuXTtMnDgRANC6dWt8/PHHDV0eERERkawESZIaTT8guzWJiKixePDBuwAAX301V+ZKKNQu162puNmaRERERE0ZwxkRERGRgjCcERERESkIwxkRERGRgjCcERERESkIwxkRERGRgjCcERERESkIwxkRERGRgjCcERERESkIwxkRERGRgjCcERERESkIwxkRERE1Og5Hhdwl1BrDGRERETUqKSn7MGnSgzh5Mk3uUmqF4YyIiIgalX37dgMAjh1LlbmS2mE4IyIiokZKkruAWmE4IyIiokZKkLuAWmE4IyIiokaKLWdEREREVEcMZ0RERNTI+LozJYktZ0RERESKIQgcc0ZERESkGGw5IyIiIlIEXyhjy1mAZsyYgeHDh6NLly5ITf19cbiTJ0/irrvuwsiRI3HXXXchPT29oUsjIiIikl2Dh7MRI0Zgzpw5SEhIqHL/q6++invuuQfLly/HPffcg1deeaWhSyMiIqJGhS1nARkwYADi4+Or3FdQUIBDhw5hzJgxAIAxY8bg0KFDKCwsbOjyiIiIqJGQJK/cJdSKIsac5eTkoEWLFtBoNAAAjUaD5s2bIycnR+bKiIiISH3U2WLmp5W7gFCKjbXIXQIREVFIxcWFy12C6phMOgCAxWJU5fFTRDiLj49HXl4ePB4PNBoNPB4Pzpw5c1H35+UUFFjh9apz2iwREVF18vPL5C5Bdex2JwDAZnMo8viJolBjg5IiujVjY2PRrVs3LF68GACwePFidOvWDTExMTJXRkRERNSwGrzl7I033sCKFStw9uxZPPTQQ4iKisKSJUswdepUPP/88/jkk08QERGBGTNmNHRpRERE1Cioe/umBg9nL730El566aWL7u/YsSPmzZvX0OUQERFRo8NFaImIiIgoRBjOiIiIqJFiyxkRERGRgqhzzBnDGRERETUy6mwx82M4IyIiokZJrbM1Gc6IiIioUVHpJM1KDGdERETUqKi0wawSwxkRERE1SlznjIiIiEgR1N10xnBGREREpCAMZ0RERNTIqHtvTYYzIiIialQkyQuAY86IiIiIFMEfythyRkRERKQI6mwx82M4IyIiokaJ3ZpERERECsJuTSIiIiIFUGmDWSWGMyIiImpUVNpgVonhjIiISGHU2h2nNBxzRkRERCHBcBYaaj2ODGdERETUKLHljIiIiEJCrS0+SqPW46iVu4DzrV27Fh988AEkSYIkSXjqqadw0003yV0WERFRg1JrqFAO3/FTa8uZYsKZJEn4+9//jjlz5iApKQlHjhzB3XffjRtuuAGiyAY+IiJqOhjOmjZFpR5RFFFWVgYAKCsrQ/PmzRnMiIioyWE4CxW2nNWJIAh4//33MXnyZJjNZthsNnz66adyl0VERESqpc6Qq5hw5na7MWvWLHzyySfo378/du3ahb/85S9YsmQJwsLCAnqN2FhLPVdJRERU/xwOR+XPcXHhMlaiTiaTHgAQFmZQ5fFTTDg7fPgwzpw5g/79+wMA+vfvD5PJhLS0NPTu3Tug1ygosMLrVWdKJiIi8nM6nZU/5+eXyViJOtntLgCA1VqhyOMnikKNDUqKGdDVsmVL5Obm4sSJEwCAtLQ0FBQUoG3btjJXRkRERGqi0kmalRTTchYXF4epU6diypQplVNf33zzTURFRclbGBERUQNT6xIQFBqKCWcAMG7cOIwbN07uMoiIiGTFcNa0KaZbk4iIiIgYzoiIiBSHa3w2bfy/T0RERKQgDGdEREQKwzFnTRvDGREREZGCMJwRERERKQjDGRERkcJw4/OmjeGMiIiIGhW1Z1uGMyIiIoXxer1yl9AoqHViBcMZERGRwrBbs67UffwYzoiIiBSGLWeh0gRazlwuF5KTk/Hbb78BAMrLy1FeXl4vhRERETVVDGehos4WtIA3Pj969CieeOIJ6PV65OXlYfTo0di5cycWLlyI999/vx5LJCIialoYzpq2gFvOpk6diqeffhrLli2DVuvLdFdeeSV27dpV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ZxLRhRQRzs43Z84cXH/99RwwSkSkYjExMZU/JyTIt8E0kRo1yISAW2+9FdnZ2dU+tmXLlsqNqpcsWYJFixZhzpw5tfo7NTUREhFRw7r99tths9rQsmWU3KUQqYoixpwBwMqVKzFjxgx8+eWXaN26dldZHHNGRERESqeKpTTWrl2L6dOnY/bs2bUOZkRERESNgSJazgYPHgydTldljMKXX36J6OjgtphhyxkREREpHXcIICIiIlIQVSylQUREREQ+DGdERERECsJwRkRERKQgDGdERERECsJwRkRERKQgDGdERERECqKIRWhDRRQFuUsgIiIiqtHl8kqjWueMiIiISO3YrUlERESkIAxnRERERArCcEZERESkIAxnRERERArCcEZERESkIAxnRERERArCcEZERESkIAxnRERERArCcEZERESkIAxnRERERArCcEbUyFitVni9XgBAamoqlixZAqfTKXNVRET175dffgnoPqVjOKsndrsd//73v/HXv/4VAJCWloZVq1bJXBU1BQ888AAqKiqQn5+PRx55BAsWLMArr7wid1mqVFhYKHcJ1MRMmTIloPuoel9++WVA9ykdw1k9mTp1KjweD44cOQIAaNmyJT766COZq1KXV155BampqXKXoTqSJMFsNmPdunW488478cUXX+DgwYNyl6Uq+/btw7Bhw3DrrbcCAFJSUvDyyy/LXJV68OK09jIzMy+678SJEzJUoi4pKSmYM2cOioqKMGfOnMp/Zs2aBZfLJXd5QWM4qydHjx7Fs88+C51OBwAICwur7GqiwLRv3x5//vOfce+99+K3336D2+2WuyRVcDgccDqd2Lx5M4YMGQIAEEV+1IMxffp0fPbZZ4iOjgYA9OrVC7t375a5KvXgxWnwfvzxR9x+++1IT0/HHXfcUfnPyJEjkZCQIHd5ipeXl4cDBw7AbrfjwIEDlf/k5+dj+vTpcpcXNK3cBTRWer2+ym2HwwFJkmSqRp0eeughPPTQQ9iwYQO+++47vPXWW7jjjjswceJENG/eXO7yFGv06NG4+uqrkZiYiH79+iE/Px8Gg0HuslTF5XKhU6dOVe7zX2jR5R09ehQzZszApk2bAPDiNBD+z+y0adPw97//vfJ+i8WCLl26yFiZOtxwww244YYbsGnTJgwdOlTucuqM4ayeDBgwADNnzoTT6cT27dsxe/Zs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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "h9o6wiTXdlsv"
},
"source": [
"The dataset looks really clean now. We are ready to use further models! To be 100% purist **you should first split between train and test set** before doing all of these analyses (so you should use the median of the train set). Please remember that when solving your coursework."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7F6iCmc-oTb_"
},
"source": [
"## Self-study: Dummy coding\n",
"\n",
"The final step will be transform the categorical variables to dummy variables. Again, this is **not necessary for credit scoring** as the WoE transform is much more robust. The best strategy here is to follow the 5% rule:\n",
"\n",
"1. Aggregate by expert judgement (i.e. your opinion) until each group has more than 5% of data (1% if very large data) and there are all classes (by target variable) present.\n",
"\n",
"2. Use target variable percentage (or classification trees) until you get a proper number of groups.\n",
"\n",
"To check the number of cases for each default level, we can calculate a crosstab."
]
},
{
"cell_type": "code",
"metadata": {
"id": "Tnu4zQW0oSMP",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 237
},
"outputId": "41d43f5b-9338-4bfc-fabb-ddf231676ca0"
},
"source": [
"pd.crosstab(bankloan_data['Education'], bankloan_data['Default'])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Default 0 1\n",
"Education \n",
"Bas 180 64\n",
"Med 325 196\n",
"Posg 54 26\n",
"SupCom 167 137\n",
"SupInc 211 118"
],
"text/html": [
"\n",
"