{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Fraud Detection Notebook using Machine Learning"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting pandas_profiling\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/2c/2f/aae19e2173c10a9bb7fee5f5cad35dbe53a393960fc91abc477dcc4661e8/pandas-profiling-2.3.0.tar.gz (127kB)\n",
"\u001b[K |████████████████████████████████| 133kB 15.5MB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: pandas>=0.19 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas_profiling) (0.24.1)\n",
"Requirement already satisfied: matplotlib>=1.4 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas_profiling) (3.0.2)\n",
"Requirement already satisfied: jinja2>=2.8 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas_profiling) (2.10)\n",
"Collecting missingno>=0.4.2 (from pandas_profiling)\n",
" Downloading https://files.pythonhosted.org/packages/2b/de/6e4dd6d720c49939544352155dc06a08c9f7e4271aa631a559dfbeaaf9d4/missingno-0.4.2-py3-none-any.whl\n",
"Collecting htmlmin>=0.1.12 (from pandas_profiling)\n",
" Downloading https://files.pythonhosted.org/packages/b3/e7/fcd59e12169de19f0131ff2812077f964c6b960e7c09804d30a7bf2ab461/htmlmin-0.1.12.tar.gz\n",
"Collecting phik>=0.9.8 (from pandas_profiling)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/45/ad/24a16fa4ba612fb96a3c4bb115a5b9741483f53b66d3d3afd987f20fa227/phik-0.9.8-py3-none-any.whl (606kB)\n",
"\u001b[K |████████████████████████████████| 614kB 22.4MB/s eta 0:00:01\n",
"\u001b[?25hCollecting confuse>=1.0.0 (from pandas_profiling)\n",
" Downloading https://files.pythonhosted.org/packages/4c/6f/90e860cba937c174d8b3775729ccc6377eb91f52ad4eeb008e7252a3646d/confuse-1.0.0.tar.gz\n",
"Requirement already satisfied: astropy in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas_profiling) (3.1.1)\n",
"Requirement already satisfied: pytz>=2011k in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas>=0.19->pandas_profiling) (2018.9)\n",
"Requirement already satisfied: python-dateutil>=2.5.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas>=0.19->pandas_profiling) (2.7.5)\n",
"Requirement already satisfied: numpy>=1.12.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas>=0.19->pandas_profiling) (1.15.4)\n",
"Requirement already satisfied: cycler>=0.10 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from matplotlib>=1.4->pandas_profiling) (0.10.0)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from matplotlib>=1.4->pandas_profiling) (1.0.1)\n",
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from matplotlib>=1.4->pandas_profiling) (2.3.1)\n",
"Requirement already satisfied: MarkupSafe>=0.23 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from jinja2>=2.8->pandas_profiling) (1.1.0)\n",
"Requirement already satisfied: seaborn in /opt/conda/envs/Python36/lib/python3.6/site-packages (from missingno>=0.4.2->pandas_profiling) (0.9.0)\n",
"Requirement already satisfied: scipy in /opt/conda/envs/Python36/lib/python3.6/site-packages (from missingno>=0.4.2->pandas_profiling) (1.2.0)\n",
"Requirement already satisfied: pytest>=4.0.2 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from phik>=0.9.8->pandas_profiling) (4.2.1)\n",
"Requirement already satisfied: numba>=0.38.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from phik>=0.9.8->pandas_profiling) (0.42.0)\n",
"Requirement already satisfied: nbconvert>=5.3.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from phik>=0.9.8->pandas_profiling) (5.4.0)\n",
"Requirement already satisfied: jupyter-client>=5.2.3 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from phik>=0.9.8->pandas_profiling) (5.2.4)\n",
"Collecting pytest-pylint>=0.13.0 (from phik>=0.9.8->pandas_profiling)\n",
" Downloading https://files.pythonhosted.org/packages/64/dc/6f35f114844fb12e38d60c4f3d2441a55baff7043ad4e013777dff55746c/pytest_pylint-0.14.1-py3-none-any.whl\n",
"Requirement already satisfied: pyyaml in /opt/conda/envs/Python36/lib/python3.6/site-packages (from confuse>=1.0.0->pandas_profiling) (3.13)\n",
"Requirement already satisfied: six>=1.5 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from python-dateutil>=2.5.0->pandas>=0.19->pandas_profiling) (1.12.0)\n",
"Requirement already satisfied: setuptools in /opt/conda/envs/Python36/lib/python3.6/site-packages (from kiwisolver>=1.0.1->matplotlib>=1.4->pandas_profiling) (40.8.0)\n",
"Requirement already satisfied: py>=1.5.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pytest>=4.0.2->phik>=0.9.8->pandas_profiling) (1.7.0)\n",
"Requirement already satisfied: attrs>=17.4.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pytest>=4.0.2->phik>=0.9.8->pandas_profiling) (18.2.0)\n",
"Requirement already satisfied: atomicwrites>=1.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pytest>=4.0.2->phik>=0.9.8->pandas_profiling) (1.3.0)\n",
"Requirement already satisfied: pluggy>=0.7 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pytest>=4.0.2->phik>=0.9.8->pandas_profiling) (0.8.1)\n",
"Requirement already satisfied: more-itertools>=4.0.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pytest>=4.0.2->phik>=0.9.8->pandas_profiling) (5.0.0)\n",
"Requirement already satisfied: llvmlite>=0.27.0dev0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from numba>=0.38.1->phik>=0.9.8->pandas_profiling) (0.27.0)\n",
"Requirement already satisfied: mistune>=0.8.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (0.8.4)\n",
"Requirement already satisfied: pygments in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (2.3.1)\n",
"Requirement already satisfied: traitlets>=4.2 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (4.3.2)\n",
"Requirement already satisfied: jupyter_core in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (4.4.0)\n",
"Requirement already satisfied: nbformat>=4.4 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (4.4.0)\n",
"Requirement already satisfied: entrypoints>=0.2.2 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (0.3)\n",
"Requirement already satisfied: bleach in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (3.1.0)\n",
"Requirement already satisfied: pandocfilters>=1.4.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (1.4.2)\n",
"Requirement already satisfied: testpath in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (0.4.2)\n",
"Requirement already satisfied: defusedxml in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (0.5.0)\n",
"Requirement already satisfied: pyzmq>=13 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from jupyter-client>=5.2.3->phik>=0.9.8->pandas_profiling) (17.1.2)\n",
"Requirement already satisfied: tornado>=4.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from jupyter-client>=5.2.3->phik>=0.9.8->pandas_profiling) (5.1.1)\n",
"Requirement already satisfied: pylint>=1.4.5 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pytest-pylint>=0.13.0->phik>=0.9.8->pandas_profiling) (2.2.2)\n",
"Requirement already satisfied: ipython-genutils in /opt/conda/envs/Python36/lib/python3.6/site-packages (from traitlets>=4.2->nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (0.2.0)\n",
"Requirement already satisfied: decorator in /opt/conda/envs/Python36/lib/python3.6/site-packages (from traitlets>=4.2->nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (4.3.2)\n",
"Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from nbformat>=4.4->nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (2.6.0)\n",
"Requirement already satisfied: webencodings in /opt/conda/envs/Python36/lib/python3.6/site-packages (from bleach->nbconvert>=5.3.1->phik>=0.9.8->pandas_profiling) (0.5.1)\n",
"Requirement already satisfied: astroid>=2.0.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pylint>=1.4.5->pytest-pylint>=0.13.0->phik>=0.9.8->pandas_profiling) (2.1.0)\n",
"Requirement already satisfied: isort>=4.2.5 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pylint>=1.4.5->pytest-pylint>=0.13.0->phik>=0.9.8->pandas_profiling) (4.3.4)\n",
"Requirement already satisfied: mccabe in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pylint>=1.4.5->pytest-pylint>=0.13.0->phik>=0.9.8->pandas_profiling) (0.6.1)\n",
"Requirement already satisfied: lazy-object-proxy in /opt/conda/envs/Python36/lib/python3.6/site-packages (from astroid>=2.0.0->pylint>=1.4.5->pytest-pylint>=0.13.0->phik>=0.9.8->pandas_profiling) (1.3.1)\n",
"Requirement already satisfied: typed-ast; python_version < \"3.7\" and implementation_name == \"cpython\" in /opt/conda/envs/Python36/lib/python3.6/site-packages (from astroid>=2.0.0->pylint>=1.4.5->pytest-pylint>=0.13.0->phik>=0.9.8->pandas_profiling) (1.3.1)\n",
"Requirement already satisfied: wrapt in /opt/conda/envs/Python36/lib/python3.6/site-packages (from astroid>=2.0.0->pylint>=1.4.5->pytest-pylint>=0.13.0->phik>=0.9.8->pandas_profiling) (1.11.1)\n",
"Building wheels for collected packages: pandas-profiling, htmlmin, confuse\n",
" Building wheel for pandas-profiling (setup.py) ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /home/dsxuser/.cache/pip/wheels/ce/c7/f1/dbfef4848ebb048cb1d4a22d1ed0c62d8ff2523747235e19fe\n",
" Building wheel for htmlmin (setup.py) ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /home/dsxuser/.cache/pip/wheels/43/07/ac/7c5a9d708d65247ac1f94066cf1db075540b85716c30255459\n",
" Building wheel for confuse (setup.py) ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /home/dsxuser/.cache/pip/wheels/b0/b2/96/2074eee7dbf7b7df69d004c9b6ac4e32dad04fb7666cf943bd\n",
"Successfully built pandas-profiling htmlmin confuse\n",
"Installing collected packages: missingno, htmlmin, pytest-pylint, phik, confuse, pandas-profiling\n",
"Successfully installed confuse-1.0.0 htmlmin-0.1.12 missingno-0.4.2 pandas-profiling-2.3.0 phik-0.9.8 pytest-pylint-0.14.1\n"
]
}
],
"source": [
"!pip install pandas_profiling"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting lightgbm\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/77/0f/5157e6b153b3d4a70dc5fbe2ab6f209604197590f387f03177b7a249ac60/lightgbm-2.2.3-py2.py3-none-manylinux1_x86_64.whl (1.2MB)\n",
"\u001b[K |████████████████████████████████| 1.2MB 14.5MB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: scipy in /opt/conda/envs/Python36/lib/python3.6/site-packages (from lightgbm) (1.2.0)\n",
"Requirement already satisfied: scikit-learn in /opt/conda/envs/Python36/lib/python3.6/site-packages (from lightgbm) (0.20.3)\n",
"Requirement already satisfied: numpy in /opt/conda/envs/Python36/lib/python3.6/site-packages (from lightgbm) (1.15.4)\n",
"Installing collected packages: lightgbm\n",
"Successfully installed lightgbm-2.2.3\n"
]
}
],
"source": [
"!pip install lightgbm"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np \n",
"import pandas as pd \n",
"import matplotlib.pyplot as plt\n",
"import ipaddress\n",
"import pandas_profiling as pp\n",
"%matplotlib inline\n",
"from sklearn import preprocessing\n",
"plt.rc(\"font\", size=14)\n",
"import warnings\n",
"warnings.simplefilter(action='ignore', category=FutureWarning)\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
"import time\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.model_selection import train_test_split\n",
"import lightgbm as lgb\n",
"from lightgbm import LGBMClassifier\n",
"import seaborn as sns\n",
"sns.set(style=\"white\")\n",
"sns.set(style=\"whitegrid\", color_codes=True)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Gender Married Dependents Education Self_Employed ApplicantIncome \\\n",
"0 1 0 0 1 0 5849 \n",
"1 1 1 1 1 1 4583 \n",
"2 1 1 0 1 1 3000 \n",
"3 1 1 0 0 1 2583 \n",
"4 1 0 0 1 0 6000 \n",
"\n",
" CoapplicantIncome LoanAmount Loan_Term Credit_History_Available \\\n",
"0 0 146 360 1 \n",
"1 1508 128 360 1 \n",
"2 0 66 360 1 \n",
"3 2358 120 360 1 \n",
"4 0 141 360 1 \n",
"\n",
" Housing Locality Fraud_Risk \n",
"0 1 1 0 \n",
"1 1 3 1 \n",
"2 1 1 1 \n",
"3 1 1 1 \n",
"4 1 1 0 \n",
"(821, 13)\n"
]
}
],
"source": [
"\n",
"import types\n",
"import pandas as pd\n",
"from botocore.client import Config\n",
"import ibm_boto3\n",
"\n",
"def __iter__(self): return 0\n",
"\n",
"# @hidden_cell\n",
"# The following code accesses a file in your IBM Cloud Object Storage. It includes your credentials.\n",
"# You might want to remove those credentials before you share the notebook.\n",
"client_554c07c959184a5fb85f7723b7045646 = ibm_boto3.client(service_name='s3',\n",
" ibm_api_key_id='LcFOxAeI1SgkmxN5c5YiOXLFytY-nF4IX4qVUCVKHjiG',\n",
" ibm_auth_endpoint=\"https://iam.ng.bluemix.net/oidc/token\",\n",
" config=Config(signature_version='oauth'),\n",
" endpoint_url='https://s3-api.us-geo.objectstorage.service.networklayer.com')\n",
"\n",
"body = client_554c07c959184a5fb85f7723b7045646.get_object(Bucket='fraudpredictionseries-donotdelete-pr-goroseftzd9ob6',Key='fraud_data.csv')['Body']\n",
"# add missing __iter__ method, so pandas accepts body as file-like object\n",
"if not hasattr(body, \"__iter__\"): body.__iter__ = types.MethodType( __iter__, body )\n",
"\n",
"df = pd.read_csv(body)\n",
"print(df.head())\n",
"print(df.shape)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": []
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pp.ProfileReport(df)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can observe that there are no missing values and no duplicates. We can do detailed analysis of each attribute to understand the data better. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"percentage of non Fraud Risk is 58.1\n",
"percentage of Fraud Risk 41.9\n"
]
}
],
"source": [
"count_fraud = len(df[df['Fraud_Risk']==0])\n",
"count_non_fraud = len(df[df['Fraud_Risk']==1])\n",
"pct_of_non_fraud = count_non_fraud/(count_non_fraud +count_fraud)\n",
"print(\"percentage of non Fraud Risk is\", round(pct_of_non_fraud*100,2))\n",
"pct_of_fraud = count_fraud/(count_non_fraud +count_fraud)\n",
"print(\"percentage of Fraud Risk\", round(pct_of_fraud*100,2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the target attribute"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.countplot(x='Fraud_Risk',data=df, palette='hls')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Gender | \n",
" Married | \n",
" Dependents | \n",
" Education | \n",
" Self_Employed | \n",
" ApplicantIncome | \n",
" CoapplicantIncome | \n",
" LoanAmount | \n",
" Loan_Term | \n",
" Credit_History_Available | \n",
" Housing | \n",
" Locality | \n",
"
\n",
" \n",
" | Fraud_Risk | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.572674 | \n",
" 0.000000 | \n",
" 0.313953 | \n",
" 0.805233 | \n",
" 0.174419 | \n",
" 4785.148256 | \n",
" 1111.700581 | \n",
" 125.720930 | \n",
" 346.453488 | \n",
" 0.973837 | \n",
" 0.700581 | \n",
" 2.011628 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.851153 | \n",
" 0.834382 | \n",
" 0.905660 | \n",
" 0.777778 | \n",
" 0.865828 | \n",
" 5530.683438 | \n",
" 1774.714885 | \n",
" 152.104822 | \n",
" 331.849057 | \n",
" 0.819706 | \n",
" 0.620545 | \n",
" 1.958071 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Gender Married Dependents Education Self_Employed \\\n",
"Fraud_Risk \n",
"0 0.572674 0.000000 0.313953 0.805233 0.174419 \n",
"1 0.851153 0.834382 0.905660 0.777778 0.865828 \n",
"\n",
" ApplicantIncome CoapplicantIncome LoanAmount Loan_Term \\\n",
"Fraud_Risk \n",
"0 4785.148256 1111.700581 125.720930 346.453488 \n",
"1 5530.683438 1774.714885 152.104822 331.849057 \n",
"\n",
" Credit_History_Available Housing Locality \n",
"Fraud_Risk \n",
"0 0.973837 0.700581 2.011628 \n",
"1 0.819706 0.620545 1.958071 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby('Fraud_Risk').mean()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Gender | \n",
" Married | \n",
" Dependents | \n",
" Education | \n",
" Self_Employed | \n",
" ApplicantIncome | \n",
" CoapplicantIncome | \n",
" LoanAmount | \n",
" Loan_Term | \n",
" Credit_History_Available | \n",
" Housing | \n",
" Locality | \n",
" Fraud_Risk | \n",
"
\n",
" \n",
" \n",
" \n",
" | Gender | \n",
" 1.000000 | \n",
" 0.356961 | \n",
" 0.121822 | \n",
" -0.080729 | \n",
" 0.265646 | \n",
" 0.008332 | \n",
" 0.116489 | \n",
" 0.087919 | \n",
" -0.074207 | \n",
" -0.019188 | \n",
" -0.013977 | \n",
" -0.008063 | \n",
" 0.311131 | \n",
"
\n",
" \n",
" | Married | \n",
" 0.356961 | \n",
" 1.000000 | \n",
" 0.372524 | \n",
" -0.030681 | \n",
" 0.832014 | \n",
" 0.071055 | \n",
" 0.102828 | \n",
" 0.174027 | \n",
" -0.106939 | \n",
" -0.083401 | \n",
" -0.093887 | \n",
" -0.022953 | \n",
" 0.823742 | \n",
"
\n",
" \n",
" | Dependents | \n",
" 0.121822 | \n",
" 0.372524 | \n",
" 1.000000 | \n",
" -0.022988 | \n",
" 0.349570 | \n",
" 0.129937 | \n",
" 0.024323 | \n",
" 0.181592 | \n",
" -0.048651 | \n",
" -0.083369 | \n",
" -0.022418 | \n",
" -0.014326 | \n",
" 0.311572 | \n",
"
\n",
" \n",
" | Education | \n",
" -0.080729 | \n",
" -0.030681 | \n",
" -0.022988 | \n",
" 1.000000 | \n",
" -0.026170 | \n",
" 0.128624 | \n",
" 0.052806 | \n",
" 0.155956 | \n",
" 0.108287 | \n",
" 0.055851 | \n",
" 0.000979 | \n",
" -0.102404 | \n",
" -0.033216 | \n",
"
\n",
" \n",
" | Self_Employed | \n",
" 0.265646 | \n",
" 0.832014 | \n",
" 0.349570 | \n",
" -0.026170 | \n",
" 1.000000 | \n",
" 0.140173 | \n",
" 0.076750 | \n",
" 0.231262 | \n",
" -0.103865 | \n",
" -0.048297 | \n",
" -0.100422 | \n",
" -0.047370 | \n",
" 0.690325 | \n",
"
\n",
" \n",
" | ApplicantIncome | \n",
" 0.008332 | \n",
" 0.071055 | \n",
" 0.129937 | \n",
" 0.128624 | \n",
" 0.140173 | \n",
" 1.000000 | \n",
" -0.121032 | \n",
" 0.564648 | \n",
" -0.003925 | \n",
" -0.021712 | \n",
" -0.051459 | \n",
" -0.020718 | \n",
" 0.065581 | \n",
"
\n",
" \n",
" | CoapplicantIncome | \n",
" 0.116489 | \n",
" 0.102828 | \n",
" 0.024323 | \n",
" 0.052806 | \n",
" 0.076750 | \n",
" -0.121032 | \n",
" 1.000000 | \n",
" 0.165143 | \n",
" -0.053702 | \n",
" -0.034498 | \n",
" -0.018697 | \n",
" 0.001634 | \n",
" 0.116479 | \n",
"
\n",
" \n",
" | LoanAmount | \n",
" 0.087919 | \n",
" 0.174027 | \n",
" 0.181592 | \n",
" 0.155956 | \n",
" 0.231262 | \n",
" 0.564648 | \n",
" 0.165143 | \n",
" 1.000000 | \n",
" 0.074216 | \n",
" -0.024232 | \n",
" -0.086455 | \n",
" 0.019726 | \n",
" 0.162672 | \n",
"
\n",
" \n",
" | Loan_Term | \n",
" -0.074207 | \n",
" -0.106939 | \n",
" -0.048651 | \n",
" 0.108287 | \n",
" -0.103865 | \n",
" -0.003925 | \n",
" -0.053702 | \n",
" 0.074216 | \n",
" 1.000000 | \n",
" 0.075339 | \n",
" 0.026265 | \n",
" 0.086213 | \n",
" -0.095366 | \n",
"
\n",
" \n",
" | Credit_History_Available | \n",
" -0.019188 | \n",
" -0.083401 | \n",
" -0.083369 | \n",
" 0.055851 | \n",
" -0.048297 | \n",
" -0.021712 | \n",
" -0.034498 | \n",
" -0.024232 | \n",
" 0.075339 | \n",
" 1.000000 | \n",
" 0.017112 | \n",
" -0.004215 | \n",
" -0.237737 | \n",
"
\n",
" \n",
" | Housing | \n",
" -0.013977 | \n",
" -0.093887 | \n",
" -0.022418 | \n",
" 0.000979 | \n",
" -0.100422 | \n",
" -0.051459 | \n",
" -0.018697 | \n",
" -0.086455 | \n",
" 0.026265 | \n",
" 0.017112 | \n",
" 1.000000 | \n",
" 0.068134 | \n",
" -0.083019 | \n",
"
\n",
" \n",
" | Locality | \n",
" -0.008063 | \n",
" -0.022953 | \n",
" -0.014326 | \n",
" -0.102404 | \n",
" -0.047370 | \n",
" -0.020718 | \n",
" 0.001634 | \n",
" 0.019726 | \n",
" 0.086213 | \n",
" -0.004215 | \n",
" 0.068134 | \n",
" 1.000000 | \n",
" -0.034356 | \n",
"
\n",
" \n",
" | Fraud_Risk | \n",
" 0.311131 | \n",
" 0.823742 | \n",
" 0.311572 | \n",
" -0.033216 | \n",
" 0.690325 | \n",
" 0.065581 | \n",
" 0.116479 | \n",
" 0.162672 | \n",
" -0.095366 | \n",
" -0.237737 | \n",
" -0.083019 | \n",
" -0.034356 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Gender Married Dependents Education \\\n",
"Gender 1.000000 0.356961 0.121822 -0.080729 \n",
"Married 0.356961 1.000000 0.372524 -0.030681 \n",
"Dependents 0.121822 0.372524 1.000000 -0.022988 \n",
"Education -0.080729 -0.030681 -0.022988 1.000000 \n",
"Self_Employed 0.265646 0.832014 0.349570 -0.026170 \n",
"ApplicantIncome 0.008332 0.071055 0.129937 0.128624 \n",
"CoapplicantIncome 0.116489 0.102828 0.024323 0.052806 \n",
"LoanAmount 0.087919 0.174027 0.181592 0.155956 \n",
"Loan_Term -0.074207 -0.106939 -0.048651 0.108287 \n",
"Credit_History_Available -0.019188 -0.083401 -0.083369 0.055851 \n",
"Housing -0.013977 -0.093887 -0.022418 0.000979 \n",
"Locality -0.008063 -0.022953 -0.014326 -0.102404 \n",
"Fraud_Risk 0.311131 0.823742 0.311572 -0.033216 \n",
"\n",
" Self_Employed ApplicantIncome CoapplicantIncome \\\n",
"Gender 0.265646 0.008332 0.116489 \n",
"Married 0.832014 0.071055 0.102828 \n",
"Dependents 0.349570 0.129937 0.024323 \n",
"Education -0.026170 0.128624 0.052806 \n",
"Self_Employed 1.000000 0.140173 0.076750 \n",
"ApplicantIncome 0.140173 1.000000 -0.121032 \n",
"CoapplicantIncome 0.076750 -0.121032 1.000000 \n",
"LoanAmount 0.231262 0.564648 0.165143 \n",
"Loan_Term -0.103865 -0.003925 -0.053702 \n",
"Credit_History_Available -0.048297 -0.021712 -0.034498 \n",
"Housing -0.100422 -0.051459 -0.018697 \n",
"Locality -0.047370 -0.020718 0.001634 \n",
"Fraud_Risk 0.690325 0.065581 0.116479 \n",
"\n",
" LoanAmount Loan_Term Credit_History_Available \\\n",
"Gender 0.087919 -0.074207 -0.019188 \n",
"Married 0.174027 -0.106939 -0.083401 \n",
"Dependents 0.181592 -0.048651 -0.083369 \n",
"Education 0.155956 0.108287 0.055851 \n",
"Self_Employed 0.231262 -0.103865 -0.048297 \n",
"ApplicantIncome 0.564648 -0.003925 -0.021712 \n",
"CoapplicantIncome 0.165143 -0.053702 -0.034498 \n",
"LoanAmount 1.000000 0.074216 -0.024232 \n",
"Loan_Term 0.074216 1.000000 0.075339 \n",
"Credit_History_Available -0.024232 0.075339 1.000000 \n",
"Housing -0.086455 0.026265 0.017112 \n",
"Locality 0.019726 0.086213 -0.004215 \n",
"Fraud_Risk 0.162672 -0.095366 -0.237737 \n",
"\n",
" Housing Locality Fraud_Risk \n",
"Gender -0.013977 -0.008063 0.311131 \n",
"Married -0.093887 -0.022953 0.823742 \n",
"Dependents -0.022418 -0.014326 0.311572 \n",
"Education 0.000979 -0.102404 -0.033216 \n",
"Self_Employed -0.100422 -0.047370 0.690325 \n",
"ApplicantIncome -0.051459 -0.020718 0.065581 \n",
"CoapplicantIncome -0.018697 0.001634 0.116479 \n",
"LoanAmount -0.086455 0.019726 0.162672 \n",
"Loan_Term 0.026265 0.086213 -0.095366 \n",
"Credit_History_Available 0.017112 -0.004215 -0.237737 \n",
"Housing 1.000000 0.068134 -0.083019 \n",
"Locality 0.068134 1.000000 -0.034356 \n",
"Fraud_Risk -0.083019 -0.034356 1.000000 "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.corr(method ='pearson') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can observe strong positive co-relation between the attributes Married & Self Employed to the target variable which is Fraud Risk."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Select input and target variables"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"X = df[df.columns[0:12]]\n",
"y = df[df.columns[12:]]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Gender int64\n",
"Married int64\n",
"Dependents int64\n",
"Education int64\n",
"Self_Employed int64\n",
"ApplicantIncome int64\n",
"CoapplicantIncome int64\n",
"LoanAmount int64\n",
"Loan_Term int64\n",
"Credit_History_Available int64\n",
"Housing int64\n",
"Locality int64\n",
"Fraud_Risk int64\n",
"dtype: object"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can observe that all the attributes are in Int data type."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Check for null values"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Gender | \n",
" Married | \n",
" Dependents | \n",
" Education | \n",
" Self_Employed | \n",
" ApplicantIncome | \n",
" CoapplicantIncome | \n",
" LoanAmount | \n",
" Loan_Term | \n",
" Credit_History_Available | \n",
" Housing | \n",
" Locality | \n",
" Fraud_Risk | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 1 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 2 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 3 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 4 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 5 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 6 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 7 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 8 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 9 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 10 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 11 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 12 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 13 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 14 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 15 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 16 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 17 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 18 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 19 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 20 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 21 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 22 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 23 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 24 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 25 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 26 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 27 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 28 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 29 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" | 791 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 792 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 793 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 794 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 795 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 796 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 797 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 798 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 799 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 800 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 801 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 802 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 803 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 804 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 805 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 806 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 807 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 808 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 809 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 810 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 811 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 812 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 813 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 814 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 815 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 816 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 817 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 818 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 819 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 820 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
"
\n",
"
821 rows × 13 columns
\n",
"
"
],
"text/plain": [
" Gender Married Dependents Education Self_Employed ApplicantIncome \\\n",
"0 False False False False False False \n",
"1 False False False False False False \n",
"2 False False False False False False \n",
"3 False False False False False False \n",
"4 False False False False False False \n",
"5 False False False False False False \n",
"6 False False False False False False \n",
"7 False False False False False False \n",
"8 False False False False False False \n",
"9 False False False False False False \n",
"10 False False False False False False \n",
"11 False False False False False False \n",
"12 False False False False False False \n",
"13 False False False False False False \n",
"14 False False False False False False \n",
"15 False False False False False False \n",
"16 False False False False False False \n",
"17 False False False False False False \n",
"18 False False False False False False \n",
"19 False False False False False False \n",
"20 False False False False False False \n",
"21 False False False False False False \n",
"22 False False False False False False \n",
"23 False False False False False False \n",
"24 False False False False False False \n",
"25 False False False False False False \n",
"26 False False False False False False \n",
"27 False False False False False False \n",
"28 False False False False False False \n",
"29 False False False False False False \n",
".. ... ... ... ... ... ... \n",
"791 False False False False False False \n",
"792 False False False False False False \n",
"793 False False False False False False \n",
"794 False False False False False False \n",
"795 False False False False False False \n",
"796 False False False False False False \n",
"797 False False False False False False \n",
"798 False False False False False False \n",
"799 False False False False False False \n",
"800 False False False False False False \n",
"801 False False False False False False \n",
"802 False False False False False False \n",
"803 False False False False False False \n",
"804 False False False False False False \n",
"805 False False False False False False \n",
"806 False False False False False False \n",
"807 False False False False False False \n",
"808 False False False False False False \n",
"809 False False False False False False \n",
"810 False False False False False False \n",
"811 False False False False False False \n",
"812 False False False False False False \n",
"813 False False False False False False \n",
"814 False False False False False False \n",
"815 False False False False False False \n",
"816 False False False False False False \n",
"817 False False False False False False \n",
"818 False False False False False False \n",
"819 False False False False False False \n",
"820 False False False False False False \n",
"\n",
" CoapplicantIncome LoanAmount Loan_Term Credit_History_Available \\\n",
"0 False False False False \n",
"1 False False False False \n",
"2 False False False False \n",
"3 False False False False \n",
"4 False False False False \n",
"5 False False False False \n",
"6 False False False False \n",
"7 False False False False \n",
"8 False False False False \n",
"9 False False False False \n",
"10 False False False False \n",
"11 False False False False \n",
"12 False False False False \n",
"13 False False False False \n",
"14 False False False False \n",
"15 False False False False \n",
"16 False False False False \n",
"17 False False False False \n",
"18 False False False False \n",
"19 False False False False \n",
"20 False False False False \n",
"21 False False False False \n",
"22 False False False False \n",
"23 False False False False \n",
"24 False False False False \n",
"25 False False False False \n",
"26 False False False False \n",
"27 False False False False \n",
"28 False False False False \n",
"29 False False False False \n",
".. ... ... ... ... \n",
"791 False False False False \n",
"792 False False False False \n",
"793 False False False False \n",
"794 False False False False \n",
"795 False False False False \n",
"796 False False False False \n",
"797 False False False False \n",
"798 False False False False \n",
"799 False False False False \n",
"800 False False False False \n",
"801 False False False False \n",
"802 False False False False \n",
"803 False False False False \n",
"804 False False False False \n",
"805 False False False False \n",
"806 False False False False \n",
"807 False False False False \n",
"808 False False False False \n",
"809 False False False False \n",
"810 False False False False \n",
"811 False False False False \n",
"812 False False False False \n",
"813 False False False False \n",
"814 False False False False \n",
"815 False False False False \n",
"816 False False False False \n",
"817 False False False False \n",
"818 False False False False \n",
"819 False False False False \n",
"820 False False False False \n",
"\n",
" Housing Locality Fraud_Risk \n",
"0 False False False \n",
"1 False False False \n",
"2 False False False \n",
"3 False False False \n",
"4 False False False \n",
"5 False False False \n",
"6 False False False \n",
"7 False False False \n",
"8 False False False \n",
"9 False False False \n",
"10 False False False \n",
"11 False False False \n",
"12 False False False \n",
"13 False False False \n",
"14 False False False \n",
"15 False False False \n",
"16 False False False \n",
"17 False False False \n",
"18 False False False \n",
"19 False False False \n",
"20 False False False \n",
"21 False False False \n",
"22 False False False \n",
"23 False False False \n",
"24 False False False \n",
"25 False False False \n",
"26 False False False \n",
"27 False False False \n",
"28 False False False \n",
"29 False False False \n",
".. ... ... ... \n",
"791 False False False \n",
"792 False False False \n",
"793 False False False \n",
"794 False False False \n",
"795 False False False \n",
"796 False False False \n",
"797 False False False \n",
"798 False False False \n",
"799 False False False \n",
"800 False False False \n",
"801 False False False \n",
"802 False False False \n",
"803 False False False \n",
"804 False False False \n",
"805 False False False \n",
"806 False False False \n",
"807 False False False \n",
"808 False False False \n",
"809 False False False \n",
"810 False False False \n",
"811 False False False \n",
"812 False False False \n",
"813 False False False \n",
"814 False False False \n",
"815 False False False \n",
"816 False False False \n",
"817 False False False \n",
"818 False False False \n",
"819 False False False \n",
"820 False False False \n",
"\n",
"[821 rows x 13 columns]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isna()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.metrics import accuracy_score\n",
"from sklearn.metrics import confusion_matrix"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Splitting the data with 70:30 mix"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train_x Shape :: (574, 12)\n",
"Train_y Shape :: (574, 1)\n",
"Test_x Shape :: (247, 12)\n",
"Test_y Shape :: (247, 1)\n"
]
}
],
"source": [
"print(\"Train_x Shape :: \", X_train.shape)\n",
"print(\"Train_y Shape :: \", y_train.shape)\n",
"print(\"Test_x Shape :: \", X_test.shape)\n",
"print(\"Test_y Shape :: \", y_test.shape)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"d_train = lgb.Dataset(X_train, label=y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Building the model with default parameters"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> Completion Time : 193.7288317680359\n",
"Trained LGBM model :: LGBMClassifier(boosting_type='gbdt', class_weight=None, colsample_bytree=1.0,\n",
" importance_type='split', learning_rate=0.1, max_depth=-1,\n",
" metric='binary_logloss', min_child_samples=20,\n",
" min_child_weight=0.001, min_split_gain=0.0, n_estimators=100,\n",
" n_jobs=-1, num_leaves=31, objective='binary', random_state=None,\n",
" reg_alpha=0.0, reg_lambda=0.0, silent=True, subsample=1.0,\n",
" subsample_for_bin=200000, subsample_freq=0)\n"
]
}
],
"source": [
"def LGBM_classifier(features, target):\n",
" \"\"\"\n",
" To train the LGBM classifier with features and target data\n",
" :param features:\n",
" :param target:\n",
" :return: trained LGBM classifier\n",
" \"\"\"\n",
" model = LGBMClassifier(metric='binary_logloss', objective='binary')\n",
" model.fit(features, target)\n",
" return model\n",
"\n",
"start = time.time()\n",
"trained_model = LGBM_classifier(X_train, y_train.values.ravel())\n",
"print(\"> Completion Time : \", time.time() - start)\n",
"print(\"Trained LGBM model :: \", trained_model)\n",
"predictions = trained_model.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train Accuracy :: 1.0\n",
"LGBM Model Test Accuracy is :: 0.9230769230769231\n"
]
}
],
"source": [
"print(\"Train Accuracy :: \", accuracy_score(y_train, trained_model.predict(X_train)))\n",
"print(\"LGBM Model Test Accuracy is :: \", accuracy_score(y_test, predictions))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can observe that the model has achieved 92% accuracy on test data and 100% accuracy on train data."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Confusion matrix [[102 5]\n",
" [ 14 126]]\n"
]
}
],
"source": [
"print(\" Confusion matrix \", confusion_matrix(y_test, predictions))"
]
},
{
"attachments": {
"Confusion_Matrix.png": {
"image/png": "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67Rp07z3N954I4Cbb765p+nVc4y2pibAdjAtXrwYwM4771y6KLY29ANb9OnTZ/z48d774cOHn3766WFox48f37t373Dc3t4+fvz4MOuXA9/W1jZ+/PilS5duwQ3t7e0nnXRSqVJecMEFANauXVveE0oLVwcNGrSFeRPk6uWXX05Ed9555xa4Kl0FixcvDnpa+eykSZNKF2J7e3uYKcLPK664ouedoaJFixbNnj07gCGUH6akCy+8MPy86qqrACxevJiZp02b1qdPn7L2iRMnDh48uJyego80vN7LLruMiJ599llmvuGGG4QQPd/bwIEDBwwYEBq2yy67lBPEsmXLAFx++eWl4+cvjm9TRdzBNGTIkLa2tvXr12/YsCFwVbAKtgjLlPohM8+fP//666+/6qqrRo0addddd5X29/jx44Mmc+GFF65fvz4omePHj7/rrrs++tGPnn/++Z2dnT09HKWpQ38mKWXp7w6qnfd+5cqVy5cvnzt3brCywkRw9913l0bg3nvvXbatJ5zKEq688sqSd4MQKGscOHBgGTx48cUXgxgJcA1YHTJkyCOPPLLTTjt96EMfCnpmiGQE1ZGIgr8n1Pvcc8+F6SY0YObMmQF4QQkstc3SLRTuDNKvvb29dOUPHjx41apVixYtCppwOSJ9+vQRQqxZsyaUU/pLmjbYe5eY+cADD/Tez5o1q3RhlWZMGVMKYx/O3HHHHR/4wAeeeuqpM88886STTip9bjNmzLjsssv233//K664Yp999gma3owZM6ZOnTpkyJBrrrlm9913X7FiRQCGUqona5ZuA611YMQoigJgAqPPmzdPSlmyYHikWq2WvvKeLrjS9AruhxBHKj03wSQrnyoBQESLFi0KampZmhBi48aNoamB0csqSp9KT0tn5cqVv/zlL0vHY1mjtbZSqZQhr3Ap+Io2bNggpezs7AwuHwB77bWX937XXXctvUql29Z7X6lUSjOsGWj+H0DnnXcegBkzZgRXXuk911ovWbIk+ACYOYoiIUS9Xv/CF75w/PHHz549e9y4cWGkywDolClT5s2bt3jx4vb29iuuuCKA88ILL3zkkUcWL1688847T5s2LUiqJEniOA6gcs6VcAqQC1GsEMzda6+92trarr766smTJwfODmoSEaVpqpQqpVbJ0yUvxnHcU04Gfu0Zcijj48aYgQMHdnR0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"
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"feat_imp = pd.Series(trained_model.feature_importances_, index=X.columns)\n",
"feat_imp.nlargest(12).plot(kind='barh', figsize=(8,10))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Feature importance as per the model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### SHAP (SHapley Additive exPlanations) is a unified approach to explain the output of any machine learning model. "
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting shap\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/c9/b3/76dc7e0a039543ff8646e453b3a28bfd55a1954f91a6bc7b6ed8be80bf16/shap-0.30.1.tar.gz (244kB)\n",
"\u001b[K |████████████████████████████████| 245kB 14.8MB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: numpy in /opt/conda/envs/Python36/lib/python3.6/site-packages (from shap) (1.15.4)\n",
"Requirement already satisfied: scipy in /opt/conda/envs/Python36/lib/python3.6/site-packages (from shap) (1.2.0)\n",
"Requirement already satisfied: scikit-learn in /opt/conda/envs/Python36/lib/python3.6/site-packages (from shap) (0.20.3)\n",
"Requirement already satisfied: matplotlib in /opt/conda/envs/Python36/lib/python3.6/site-packages (from shap) (3.0.2)\n",
"Requirement already satisfied: pandas in /opt/conda/envs/Python36/lib/python3.6/site-packages (from shap) (0.24.1)\n",
"Requirement already satisfied: tqdm>4.25.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from shap) (4.31.1)\n",
"Requirement already satisfied: ipython in /opt/conda/envs/Python36/lib/python3.6/site-packages (from shap) (7.2.0)\n",
"Requirement already satisfied: scikit-image in /opt/conda/envs/Python36/lib/python3.6/site-packages (from shap) (0.14.1)\n",
"Requirement already satisfied: cycler>=0.10 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from matplotlib->shap) (0.10.0)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from matplotlib->shap) (1.0.1)\n",
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from matplotlib->shap) (2.3.1)\n",
"Requirement already satisfied: python-dateutil>=2.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from matplotlib->shap) (2.7.5)\n",
"Requirement already satisfied: pytz>=2011k in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas->shap) (2018.9)\n",
"Requirement already satisfied: traitlets>=4.2 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ipython->shap) (4.3.2)\n",
"Requirement already satisfied: pygments in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ipython->shap) (2.3.1)\n",
"Requirement already satisfied: setuptools>=18.5 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ipython->shap) (40.8.0)\n",
"Requirement already satisfied: pexpect; sys_platform != \"win32\" in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ipython->shap) (4.6.0)\n",
"Requirement already satisfied: decorator in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ipython->shap) (4.3.2)\n",
"Requirement already satisfied: backcall in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ipython->shap) (0.1.0)\n",
"Requirement already satisfied: pickleshare in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ipython->shap) (0.7.5)\n",
"Requirement already satisfied: prompt-toolkit<2.1.0,>=2.0.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ipython->shap) (2.0.8)\n",
"Requirement already satisfied: jedi>=0.10 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ipython->shap) (0.13.2)\n",
"Requirement already satisfied: networkx>=1.8 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from scikit-image->shap) (2.2)\n",
"Requirement already satisfied: six>=1.10.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from scikit-image->shap) (1.12.0)\n",
"Requirement already satisfied: pillow>=4.3.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from scikit-image->shap) (5.4.1)\n",
"Requirement already satisfied: PyWavelets>=0.4.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from scikit-image->shap) (1.0.1)\n",
"Requirement already satisfied: dask[array]>=0.9.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from scikit-image->shap) (1.1.1)\n",
"Requirement already satisfied: cloudpickle>=0.2.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from scikit-image->shap) (0.7.0)\n",
"Requirement already satisfied: ipython-genutils in /opt/conda/envs/Python36/lib/python3.6/site-packages (from traitlets>=4.2->ipython->shap) (0.2.0)\n",
"Requirement already satisfied: ptyprocess>=0.5 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pexpect; sys_platform != \"win32\"->ipython->shap) (0.6.0)\n",
"Requirement already satisfied: wcwidth in /opt/conda/envs/Python36/lib/python3.6/site-packages (from prompt-toolkit<2.1.0,>=2.0.0->ipython->shap) (0.1.7)\n",
"Requirement already satisfied: parso>=0.3.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from jedi>=0.10->ipython->shap) (0.3.2)\n",
"Requirement already satisfied: toolz>=0.7.3; extra == \"array\" in /opt/conda/envs/Python36/lib/python3.6/site-packages (from dask[array]>=0.9.0->scikit-image->shap) (0.9.0)\n",
"Building wheels for collected packages: shap\n",
" Building wheel for shap (setup.py) ... \u001b[?25ldone\n",
"\u001b[?25h Stored in directory: /home/dsxuser/.cache/pip/wheels/62/94/5e/feb9af12d63a719a32266a29ca564b4dc37b4755052aca6859\n",
"Successfully built shap\n",
"Installing collected packages: shap\n",
"Successfully installed shap-0.30.1\n"
]
}
],
"source": [
"!pip install shap"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import shap\n",
"shap.initjs()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"shap_values = shap.TreeExplainer(trained_model.booster_).shap_values(X_train)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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T9gA0gtYGIPfYOCkTmrrA8AFZlYH/JowWrcJsL27P9hJbRAREZE20kOeu4bzCDtkC38uABx4AZgDbEhYA7jK3ZcCJwKXm9lS4Hrgrs5oqLsvAXYHDJhBCKZPAF/ujPuLiIhI+2RyuVy52yCSpFxm9EpydT0hMzQeGV/eFnVT3W33WlemvkyO+jI56svklLkvM6VeoJE/ERERkRTRmr8UMrNpwGZNFM129606uz1JWlK/glxdFbn6BjL5Eb/lDdCrurwNExER6SIU/lKouwe8lsx45SVqa2vJ9C4Iewp+IiIiH9G0r0gX96tf/Yq6us54io+IiKSBwp+k1vKVHbvZqZT6H374YQ444AC22247dt55Z4455hjcvQNb17y33nqLww47jOHDh/PNb36TZ59t99dBi4hIF6JpX0mtXj0zZEav7LD6c3XF/XmNGTOGm266iQsuuICdd96ZqqoqnnnmGZ5++mni1+J1qp/97Gdsu+22/PjHP+aDDz5gxIgRPPnkk3zmM5/p9LaIiEjyNPInUkZLlizh2muv5dxzz2XvvfdmrbXWoqqqij322IMzzjijyWtGjBjB17/+dWprazn00EP517/+9VHZpEmT+Pa3v812223HLrvswi233ALA+++/z/HHH4+ZscMOO3DIIYewevWnv4TlzTffZNq0aZx88slUV1ezzz77MGjQIJ544omO6QAREel0GvkTKaMXX3yR//73vwwZMqToa77xjW9w8cUXU11dzRVXXEFdXR0PPhi+XOXss8/m6quvxsxYvHgxb731FhBGFz/3uc/x3HPPATB16lQymU8/GmrmzJn069ePvn37fnRsyy23ZObMme35mCIi0oVo5E+kjBYtWsR6661Hz57F//+wAw88kL59+1JdXc3JJ5/M9OnTWbJkCQA9e/Zk5syZLF26lHXWWYetttrqo+MLFizgnXfeoaqqCjNrMvwtW7aMmpqaTxyrqalh2bJl7fiUIiLSlSj8SUUZNHgbAHL1DeHA8oYytqZ16667LgsXLmTlyuLWHq5atYrRo0ez1157sf3227PHHnsAsHDhQgCuvfZaJk2axO67786PfvQjXnzxRQCOPvpoNttsM4466ij23HNPbrrppibr79OnD0uXLv3EsaVLl9KnT5+2fkQREeliFP6kotT0riIzemV4zl9maJd/xt92223HmmuuyYQJ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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"shap.summary_plot(shap_values, X_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can observe that attributes like Married, ApplicantIncome, Credit_History_Available, LoanAMount & CoapplicantIncome have high impact on the target variable. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### In this notebook, we have done exploratory data analysis, feature importance, model building & interpreting the model attributes for improving the accuracy. This is to demonstrate some of the mandatory steps which are involved in building predictive models which are done manually. These steps can take days to complete. All these steps are automated in AutoAI feature in Watson Studio where we can create and deploy machine learning models in minutes. "
]
},
{
"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.7.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}