Skip to content

Instantly share code, notes, and snippets.

@mirgilani
Last active December 21, 2020 12:33
Show Gist options
  • Save mirgilani/fc6ed4860cf14d65682264fc1ecdd2ba to your computer and use it in GitHub Desktop.
Save mirgilani/fc6ed4860cf14d65682264fc1ecdd2ba to your computer and use it in GitHub Desktop.
hhh
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "Shayan\n"
}
],
"source": "print('Shayan')"
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {},
"outputs": [],
"source": "import itertools\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom matplotlib.ticker import NullFormatter\nimport pandas as pd\nimport numpy as np\nimport matplotlib.ticker as ticker\nfrom sklearn import preprocessing\n%matplotlib inline"
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "--2020-12-21 12:22:25-- https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/loan_train.csv\nResolving s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)... 67.228.254.196\nConnecting to s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)|67.228.254.196|:443... connected.\nHTTP request sent, awaiting response... 200 OK\nLength: 23101 (23K) [text/csv]\nSaving to: \u2018loan_train.csv\u2019\n\nloan_train.csv 100%[===================>] 22.56K --.-KB/s in 0.07s \n\n2020-12-21 12:22:26 (305 KB/s) - \u2018loan_train.csv\u2019 saved [23101/23101]\n\n"
}
],
"source": "!wget -O loan_train.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/loan_train.csv"
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Unnamed: 0</th>\n <th>Unnamed: 0.1</th>\n <th>loan_status</th>\n <th>Principal</th>\n <th>terms</th>\n <th>effective_date</th>\n <th>due_date</th>\n <th>age</th>\n <th>education</th>\n <th>Gender</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0</td>\n <td>0</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>9/8/2016</td>\n <td>10/7/2016</td>\n <td>45</td>\n <td>High School or Below</td>\n <td>male</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2</td>\n <td>2</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>9/8/2016</td>\n <td>10/7/2016</td>\n <td>33</td>\n <td>Bechalor</td>\n <td>female</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>3</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>15</td>\n <td>9/8/2016</td>\n <td>9/22/2016</td>\n <td>27</td>\n <td>college</td>\n <td>male</td>\n </tr>\n <tr>\n <th>3</th>\n <td>4</td>\n <td>4</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>9/9/2016</td>\n <td>10/8/2016</td>\n <td>28</td>\n <td>college</td>\n <td>female</td>\n </tr>\n <tr>\n <th>4</th>\n <td>6</td>\n <td>6</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>9/9/2016</td>\n <td>10/8/2016</td>\n <td>29</td>\n <td>college</td>\n <td>male</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n0 0 0 PAIDOFF 1000 30 9/8/2016 \n1 2 2 PAIDOFF 1000 30 9/8/2016 \n2 3 3 PAIDOFF 1000 15 9/8/2016 \n3 4 4 PAIDOFF 1000 30 9/9/2016 \n4 6 6 PAIDOFF 1000 30 9/9/2016 \n\n due_date age education Gender \n0 10/7/2016 45 High School or Below male \n1 10/7/2016 33 Bechalor female \n2 9/22/2016 27 college male \n3 10/8/2016 28 college female \n4 10/8/2016 29 college male "
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "df = pd.read_csv('loan_train.csv')\ndf.head()"
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Unnamed: 0</th>\n <th>Unnamed: 0.1</th>\n <th>loan_status</th>\n <th>Principal</th>\n <th>terms</th>\n <th>effective_date</th>\n <th>due_date</th>\n <th>age</th>\n <th>education</th>\n <th>Gender</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0</td>\n <td>0</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-08</td>\n <td>2016-10-07</td>\n <td>45</td>\n <td>High School or Below</td>\n <td>male</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2</td>\n <td>2</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-08</td>\n <td>2016-10-07</td>\n <td>33</td>\n <td>Bechalor</td>\n <td>female</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>3</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>15</td>\n <td>2016-09-08</td>\n <td>2016-09-22</td>\n <td>27</td>\n <td>college</td>\n <td>male</td>\n </tr>\n <tr>\n <th>3</th>\n <td>4</td>\n <td>4</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-09</td>\n <td>2016-10-08</td>\n <td>28</td>\n <td>college</td>\n <td>female</td>\n </tr>\n <tr>\n <th>4</th>\n <td>6</td>\n <td>6</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-09</td>\n <td>2016-10-08</td>\n <td>29</td>\n <td>college</td>\n <td>male</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n0 0 0 PAIDOFF 1000 30 2016-09-08 \n1 2 2 PAIDOFF 1000 30 2016-09-08 \n2 3 3 PAIDOFF 1000 15 2016-09-08 \n3 4 4 PAIDOFF 1000 30 2016-09-09 \n4 6 6 PAIDOFF 1000 30 2016-09-09 \n\n due_date age education Gender \n0 2016-10-07 45 High School or Below male \n1 2016-10-07 33 Bechalor female \n2 2016-09-22 27 college male \n3 2016-10-08 28 college female \n4 2016-10-08 29 college male "
},
"execution_count": 131,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "df['due_date'] = pd.to_datetime(df['due_date'])\ndf['effective_date'] = pd.to_datetime(df['effective_date'])\ndf.head()"
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "PAIDOFF 260\nCOLLECTION 86\nName: loan_status, dtype: int64"
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "df['loan_status'].value_counts()"
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADQCAYAAABStPXYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAbDUlEQVR4nO3de5xVdb3/8ddbnBwRzQuTIogzKpog/HY6aWZ6EJXwih5vmKl0PIc0rThpJlrWyUdmQloeb+mJ8OERlErRMK8Ex9C8II4KXvA26SggYI+UBAL8/P7Ya8Yt7mEue++ZNXu/n4/Heuy1vntdPovZXz77+11rr68iAjMzs7TZpLsDMDMzy8cJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJqkQkbS9pqqTXJD0l6S+SjivSvodLmlmMfXUFSXMk1Xd3HNY9yqkuSKqR9LikpyUdWMLjrCzVvnsSJ6gSkCRgBvBwROwSEfsAY4AB3RTPpt1xXLMyrAuHAC9GxOci4s/FiMla5wRVGiOAf0bEDc0FEfHXiPhvAEm9JE2U9KSkZyV9PSkfnrQ2fifpRUm3JhUcSaOSsrnAvzbvV9IWkiYn+3pa0uikfKyk30r6A/BAIScjaYqk6yXNTr4F/0tyzBckTclZ73pJ8yQtlPRfrexrZPINen4SX59CYrPUK5u6ICkDXAEcIalB0uatfZ4lNUq6LHlvnqS9Jd0v6VVJZyXr9JE0K9n2ueZ48xz3uzn/PnnrVdmKCE9FnoBvAVdt5P1xwPeT+c2AeUAdMBz4O9lvl5sAfwG+BFQDbwKDAAHTgZnJ9pcBX03mtwYWAVsAY4EmYNtWYvgz0JBnOjTPulOA25JjjwbeA4YmMT4FZJL1tk1eewFzgGHJ8hygHugLPAxskZR/D7iku/9enko3lWFdGAtck8y3+nkGGoGzk/mrgGeBLYEa4J2kfFNgq5x9vQIoWV6ZvI4EbkzOdRNgJnBQd/9du2py108XkHQt2cr1z4j4PNkP3TBJJySrfJpshfsn8ERENCXbNQC1wErg9Yh4OSn/X7IVm2Rfx0g6P1muBgYm8w9GxLv5YoqIjvaf/yEiQtJzwNKIeC6JZWESYwNwkqRxZCteP2Aw2YrZ7AtJ2SPJl+FPkf2PxypEmdSFZm19nu9OXp8D+kTE+8D7klZL2hr4B3CZpIOAD4H+wPbAkpx9jEymp5PlPmT/fR7uZMw9ihNUaSwEjm9eiIhzJPUl++0Qst+GvhkR9+duJGk4sCanaD0f/Y1ae2iigOMj4qUN9rUf2QqQfyPpz2S/0W3o/Ih4KE95c1wfbhDjh8CmkuqA84HPR8Tfkq6/6jyxPhgRp7QWl5WdcqwLucfb2Od5o3UGOJVsi2qfiFgrqZH8deanEfGrjcRRtnwNqjT+BFRLOjunrHfO/P3A2ZKqACTtLmmLjezvRaBO0q7Jcm6FuB/4Zk7//OfaE2BEHBgRmTzTxirkxmxF9j+Bv0vaHjg8zzqPAQdI2i2Jtbek3Tt5POsZyrkuFPp5/jTZ7r61kg4Gds6zzv3Av+Vc2+ov6TMdOEaP5gRVApHtPD4W+BdJr0t6AriZbB81wP8AzwPzJS0AfsVGWrMRsZpsN8Y9yYXhv+a8fSlQBTyb7OvSYp9Pe0TEM2S7IRYCk4FH8qyzjGwf/jRJz5Kt4J/twjCti5VzXSjC5/lWoF7SPLKtqRfzHOMBYCrwl6R7/Xfkb+2VpeYLcmZmZqniFpSZmaWSE5SZmaWSE5SZmaWSE5SZmaVSKhLUqFGjguxvGzx5KpepaFw/PJXZ1G6pSFDLly/v7hDMUsv1wypVKhKUmZnZhpygzMwslZygzMwslfywWDMrK2vXrqWpqYnVq1d3dygVrbq6mgEDBlBVVdXpfThBmVlZaWpqYsstt6S2tpbkubHWxSKCFStW0NTURF1dXaf34y4+Mysrq1evZrvttnNy6kaS2G677QpuxTpBWcXYuV8/JBU87dyvX3efirXByan7FeNv4C4+qxhvLFlC044DCt7PgLebihCNmbXFLSgzK2vFajl3pAXdq1cvMpkMe+21FyeeeCIffPABAOvWraNv375MmDDhY+sPHz6cefOygwzX1tYydOhQhg4dyuDBg/n+97/PmjUfDci7cOFCRowYwe67786gQYO49NJLaR42acqUKdTU1JDJZMhkMpx++ukAjB07lrq6upbyq6++uij/tqXmFpSZlbVitZybtacFvfnmm9PQ0ADAqaeeyg033MB3vvMdHnjgAfbYYw+mT5/OZZdd1mo32OzZs+nbty8rV65k3LhxjBs3jptvvplVq1ZxzDHHcP311zNy5Eg++OADjj/+eK677jrOOeccAE4++WSuueaaT+xz4sSJnHDCCQWceddrswUlabKkd5IRKpvLfiTpLUkNyXREznsTJL0i6SVJXy5V4GZmPcGBBx7IK6+8AsC0adP49re/zcCBA3nsscfa3LZPnz7ccMMNzJgxg3fffZepU6dywAEHMHLkSAB69+7NNddcw+WXX17Sc+gu7enimwKMylN+VURkkumPAJIGA2OAIck210nqVaxgzcx6knXr1nHvvfcydOhQVq1axaxZszjqqKM45ZRTmDZtWrv2sdVWW1FXV8fLL7/MwoUL2WeffT72/q677srKlSt57733ALj99ttbuvJ+85vftKz33e9+t6X8ueeeK95JllCbCSoiHgbebef+RgO3RcSaiHgdeAXYt4D4zMx6nFWrVpHJZKivr2fgwIGceeaZzJw5k4MPPpjevXtz/PHHc+edd7J+/fp27a/5GlNEtNot2Fx+8skn09DQQENDA1/72tda3p84cWJL+dChQws8w65RyDWocyWdDswDzouIvwH9gdx2a1NS9gmSxgHjAAYOHFhAGGblx/WjZ8u9BtVs2rRpPPLII9TW1gKwYsUKZs+ezaGHHrrRfb3//vs0Njay++67M2TIEB5++OGPvf/aa6/Rp08fttxyy6KeQxp09i6+64FdgQywGPh5Up4vtecd/yMiboyI+oior6mp6WQYZuXJ9aO8vPfee8ydO5c33niDxsZGGhsbufbaa9vs5lu5ciXf+MY3OPbYY9lmm2049dRTmTt3Lg899BCQbal961vf4oILLuiK0+hynWpBRcTS5nlJNwEzk8UmYKecVQcAb3c6OjOzAg3cYYei/nZt4A47dHibO+64gxEjRrDZZpu1lI0ePZoLLrjgY7eQNzv44IOJCD788EOOO+44fvCDHwDZltldd93FN7/5Tc455xzWr1/Paaedxrnnntv5E0oxNfdtbnQlqRaYGRF7Jcv9ImJxMv+fwH4RMUbSEGAq2etOOwKzgEERsdGO1vr6+mj+DYBZqUgq2g9121FvivYoA9ePjnnhhRfYc889uzsMo9W/RbvrRpstKEnTgOFAX0lNwA+B4ZIyZLvvGoGvA0TEQknTgeeBdcA5bSUnMzOzfNpMUBFxSp7iX29k/Z8APykkKDMzMz/qyMzMUskJyszMUskJyszMUskJyszMUskJyszK2o4DBhZ1uI0dB7T9ZI8lS5YwZswYdt11VwYPHswRRxzBokWL2hwqI9/vmWpra1m+fPnHyjYcViOTyfD8888DsGjRIo444gh222039txzT0466aSPPZ+vT58+7LHHHi3DccyZM4ejjjqqZd8zZsxg2LBhfPazn2Xo0KHMmDGj5b2xY8fSv3//lt9uLV++vOXJGKXg4TbMrKwtfutN9rvkvqLt7/Ef53t29kciguOOO44zzjiD2267DYCGhgaWLl3K2LFjNzpURkfkG1Zj9erVHHnkkVx55ZUcffTRQHbojpqampZHLw0fPpxJkyZRX18PwJw5c1q2f+aZZzj//PN58MEHqaur4/XXX+ewww5jl112YdiwYUB2rKvJkydz9tlndzjmjnILysysiGbPnk1VVRVnnXVWS1kmk2HRokUlHypj6tSp7L///i3JCbJPpdhrr73atf2kSZO46KKLqKurA6Curo4JEyYwceLElnXGjx/PVVddxbp164oWd2ucoMzMimjBggWfGBIDaNdQGR2R222XyWRYtWpVq8dur3wx1tfXs3DhwpblgQMH8qUvfYlbbrml08dpL3fxmZl1gfYMldERrY2cW4h8MeYru+iiizjmmGM48sgji3r8DbkFZWZWREOGDOGpp57KW77hMxWLPVRGa8fuyPYbxjh//nwGDx78sbLddtuNTCbD9OnTO32s9nCCMjMrohEjRrBmzRpuuummlrInn3ySQYMGlXyojK985Ss8+uij3HPPPS1l9913X7tH0D3//PP56U9/SmNjIwCNjY1cdtllnHfeeZ9Y9+KLL2bSpElFibs17uIzs7LWr/9Obd5519H9bYwk7rzzTsaPH8/ll19OdXU1tbW1/OIXv2hzqIwpU6Z87Lbuxx7Ljv86bNgwNtkk25446aSTGDZsGLfffjtz585tWfe6667ji1/8IjNnzmT8+PGMHz+eqqoqhg0bxi9/+ct2nVsmk+FnP/sZRx99NGvXrqWqqoorrriCTCbziXWHDBnC3nvvzfz589u1785o13AbpebhBKwreLiNyuDhNtKj0OE22uzikzRZ0juSFuSUTZT0oqRnJd0paeukvFbSKkkNyXRDewMxMzPL1Z5rUFOADdvHDwJ7RcQwYBEwIee9VyMik0xnYWZm1gltJqiIeBh4d4OyByKi+Vdaj5Ed2t3MLBXScOmi0hXjb1CMu/j+Dbg3Z7lO0tOS/k/Sga1tJGmcpHmS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\n",
"text/plain": "<Figure size 432x216 with 2 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": "import seaborn as sns\n\nbins = np.linspace(df.Principal.min(), df.Principal.max(), 10)\ng = sns.FacetGrid(df, col=\"Gender\", hue=\"loan_status\", palette=\"Set1\", col_wrap=2)\ng.map(plt.hist, 'Principal', bins=bins, ec=\"k\")\n\ng.axes[-1].legend()\nplt.show()"
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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u6XuWbNmMWzYMI4++miGDh3KrFmzWl4bN24chxxySMtvt9atW9dyZ4w95Xvx5WlQdTUrVq0qdhhmloKV//WfnPT9x1Or7/l/Gb3b1yOC888/n7Fjx/LQQw8BsGTJElavXs24ceN2O1VGR7R1z71NmzZx1llncccdd3DOOecAuak7qqqqWm69NGLECG6//XYaGnI3ClqwYEHL+19++WVuuOEG5s6dS11dHe+88w5nnHEGhx12GMOGDQNyc109+OCDXHXVVR2OeXecoPLkWXDNrLPmz59PRUUFV155ZUtZfX09DzzwQJtTZYwYMaJTCaot06dP53Of+1xLcoLcXSnydfvtt3PLLbdQV1cHQF1dHTfffDO33XYbv/rVrwCYOHEid955J1//+tdTibmZh/jMzArstdde22lKDCCvqTI6ovWwXX19PRs3btzlvvPVVowNDQ0sXbq0ZX3gwIGccsopLQkrLT6CMjMrknymyuiIXU2rsSfairGtsltuuYVzzz2Xs846K7V9+wjKzKzAjj32WF588cU2yxctWrRdWdpTZexq3x15/44xLl68mCFDhmxXdsQRR1BfX8/MmTM7va8dOUGZmRXYyJEj2bx5Mz//+c9byl544QUGDx5c8KkyvvKVr/CnP/2J3/3udy1ljz/+eN4z6N5www388Ic/pLGxEYDGxkYmTZrE9ddfv9O23/nOd7j99ttTiRs8xGdm3VD1IYe2e+VdR+vbHUk8+uijTJw4kcmTJ1NZWUltbS133XVXu1NlTJ06dbvLup977jkAhg0bxl575Y4xLr74YoYNG8bDDz/MwoULW7a99957+fznP8+cOXOYOHEiEydOpKKigmHDhvGTn/wkr7bV19fzox/9iHPOOYctW7ZQUVHBj3/845bZgVs79thjOeGEE1i8eHFedbcnr+k20tLQ0BA7HiqWirSnyPB0G91Cx08iUNr9JKs83UZ2FGK6DTMzsy7lBGVmZpnkBGVm3YKHwouvo38DJygzK3uVlZWsX7/eSaqIIoL169dTWVmZ93t8FZ+Zlb2amhqamppYu3ZtsUPp1iorK6mpyf8CMSeoErc3nfvFeVsGDhjAuytXplKXWZZUVFS03EvOSocTVInbDL6JrZmVpbzPQUnqIeklSXOS9X6S5kpanjz2LVyYZmbW3XTkIonrgGWt1m8C5kXEYGBesm5mZpaK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\n",
"text/plain": "<Figure size 432x216 with 2 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": "bins = np.linspace(df.age.min(), df.age.max(), 10)\ng = sns.FacetGrid(df, col=\"Gender\", hue=\"loan_status\", palette=\"Set1\", col_wrap=2)\ng.map(plt.hist, 'age', bins=bins, ec=\"k\")\n\ng.axes[-1].legend()\nplt.show()"
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x216 with 2 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": "df['dayofweek'] = df['effective_date'].dt.dayofweek\nbins = np.linspace(df.dayofweek.min(), df.dayofweek.max(), 10)\ng = sns.FacetGrid(df, col=\"Gender\", hue=\"loan_status\", palette=\"Set1\", col_wrap=2)\ng.map(plt.hist, 'dayofweek', bins=bins, ec=\"k\")\ng.axes[-1].legend()\nplt.show()"
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Unnamed: 0</th>\n <th>Unnamed: 0.1</th>\n <th>loan_status</th>\n <th>Principal</th>\n <th>terms</th>\n <th>effective_date</th>\n <th>due_date</th>\n <th>age</th>\n <th>education</th>\n <th>Gender</th>\n <th>dayofweek</th>\n <th>weekend</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0</td>\n <td>0</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-08</td>\n <td>2016-10-07</td>\n <td>45</td>\n <td>High School or Below</td>\n <td>male</td>\n <td>3</td>\n <td>0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2</td>\n <td>2</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-08</td>\n <td>2016-10-07</td>\n <td>33</td>\n <td>Bechalor</td>\n <td>female</td>\n <td>3</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>3</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>15</td>\n <td>2016-09-08</td>\n <td>2016-09-22</td>\n <td>27</td>\n <td>college</td>\n <td>male</td>\n <td>3</td>\n <td>0</td>\n </tr>\n <tr>\n <th>3</th>\n <td>4</td>\n <td>4</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-09</td>\n <td>2016-10-08</td>\n <td>28</td>\n <td>college</td>\n <td>female</td>\n <td>4</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>6</td>\n <td>6</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-09</td>\n <td>2016-10-08</td>\n <td>29</td>\n <td>college</td>\n <td>male</td>\n <td>4</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n0 0 0 PAIDOFF 1000 30 2016-09-08 \n1 2 2 PAIDOFF 1000 30 2016-09-08 \n2 3 3 PAIDOFF 1000 15 2016-09-08 \n3 4 4 PAIDOFF 1000 30 2016-09-09 \n4 6 6 PAIDOFF 1000 30 2016-09-09 \n\n due_date age education Gender dayofweek weekend \n0 2016-10-07 45 High School or Below male 3 0 \n1 2016-10-07 33 Bechalor female 3 0 \n2 2016-09-22 27 college male 3 0 \n3 2016-10-08 28 college female 4 1 \n4 2016-10-08 29 college male 4 1 "
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "df['weekend'] = df['dayofweek'].apply(lambda x: 1 if (x>3) else 0)\ndf.head()"
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "Gender loan_status\nfemale PAIDOFF 0.865385\n COLLECTION 0.134615\nmale PAIDOFF 0.731293\n COLLECTION 0.268707\nName: loan_status, dtype: float64"
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "df.groupby(['Gender'])['loan_status'].value_counts(normalize=True)"
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {},
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Unnamed: 0</th>\n <th>Unnamed: 0.1</th>\n <th>loan_status</th>\n <th>Principal</th>\n <th>terms</th>\n <th>effective_date</th>\n <th>due_date</th>\n <th>age</th>\n <th>education</th>\n <th>Gender</th>\n <th>dayofweek</th>\n <th>weekend</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0</td>\n <td>0</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-08</td>\n <td>2016-10-07</td>\n <td>45</td>\n <td>High School or Below</td>\n <td>0</td>\n <td>3</td>\n <td>0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2</td>\n <td>2</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-08</td>\n <td>2016-10-07</td>\n <td>33</td>\n <td>Bechalor</td>\n <td>1</td>\n <td>3</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>3</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>15</td>\n <td>2016-09-08</td>\n <td>2016-09-22</td>\n <td>27</td>\n <td>college</td>\n <td>0</td>\n <td>3</td>\n <td>0</td>\n </tr>\n <tr>\n <th>3</th>\n <td>4</td>\n <td>4</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-09</td>\n <td>2016-10-08</td>\n <td>28</td>\n <td>college</td>\n <td>1</td>\n <td>4</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>6</td>\n <td>6</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>2016-09-09</td>\n <td>2016-10-08</td>\n <td>29</td>\n <td>college</td>\n <td>0</td>\n <td>4</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n0 0 0 PAIDOFF 1000 30 2016-09-08 \n1 2 2 PAIDOFF 1000 30 2016-09-08 \n2 3 3 PAIDOFF 1000 15 2016-09-08 \n3 4 4 PAIDOFF 1000 30 2016-09-09 \n4 6 6 PAIDOFF 1000 30 2016-09-09 \n\n due_date age education Gender dayofweek weekend \n0 2016-10-07 45 High School or Below 0 3 0 \n1 2016-10-07 33 Bechalor 1 3 0 \n2 2016-09-22 27 college 0 3 0 \n3 2016-10-08 28 college 1 4 1 \n4 2016-10-08 29 college 0 4 1 "
},
"execution_count": 138,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "df['Gender'].replace(to_replace=['male','female'], value=[0,1],inplace=True)\ndf.head()"
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "education loan_status\nBechalor PAIDOFF 0.750000\n COLLECTION 0.250000\nHigh School or Below PAIDOFF 0.741722\n COLLECTION 0.258278\nMaster or Above COLLECTION 0.500000\n PAIDOFF 0.500000\ncollege PAIDOFF 0.765101\n COLLECTION 0.234899\nName: loan_status, dtype: float64"
},
"execution_count": 139,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "df.groupby(['education'])['loan_status'].value_counts(normalize=True)"
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Principal</th>\n <th>terms</th>\n <th>age</th>\n <th>Gender</th>\n <th>education</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1000</td>\n <td>30</td>\n <td>45</td>\n <td>0</td>\n <td>High School or Below</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1000</td>\n <td>30</td>\n <td>33</td>\n <td>1</td>\n <td>Bechalor</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1000</td>\n <td>15</td>\n <td>27</td>\n <td>0</td>\n <td>college</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1000</td>\n <td>30</td>\n <td>28</td>\n <td>1</td>\n <td>college</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1000</td>\n <td>30</td>\n <td>29</td>\n <td>0</td>\n <td>college</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Principal terms age Gender education\n0 1000 30 45 0 High School or Below\n1 1000 30 33 1 Bechalor\n2 1000 15 27 0 college\n3 1000 30 28 1 college\n4 1000 30 29 0 college"
},
"execution_count": 140,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "df[['Principal','terms','age','Gender','education']].head()"
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Principal</th>\n <th>terms</th>\n <th>age</th>\n <th>Gender</th>\n <th>weekend</th>\n <th>Bechalor</th>\n <th>High School or Below</th>\n <th>college</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1000</td>\n <td>30</td>\n <td>45</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1000</td>\n <td>30</td>\n <td>33</td>\n <td>1</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1000</td>\n <td>15</td>\n <td>27</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1000</td>\n <td>30</td>\n <td>28</td>\n <td>1</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1000</td>\n <td>30</td>\n <td>29</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Principal terms age Gender weekend Bechalor High School or Below \\\n0 1000 30 45 0 0 0 1 \n1 1000 30 33 1 0 1 0 \n2 1000 15 27 0 0 0 0 \n3 1000 30 28 1 1 0 0 \n4 1000 30 29 0 1 0 0 \n\n college \n0 0 \n1 0 \n2 1 \n3 1 \n4 1 "
},
"execution_count": 141,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "Feature = df[['Principal','terms','age','Gender','weekend']]\nFeature = pd.concat([Feature,pd.get_dummies(df['education'])], axis=1)\nFeature.drop(['Master or Above'],\naxis = 1,inplace=True)\nFeature.head()\n"
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {},
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Principal</th>\n <th>terms</th>\n <th>age</th>\n <th>Gender</th>\n <th>weekend</th>\n <th>Bechalor</th>\n <th>High School or Below</th>\n <th>college</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1000</td>\n <td>30</td>\n <td>45</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1000</td>\n <td>30</td>\n <td>33</td>\n <td>1</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1000</td>\n <td>15</td>\n <td>27</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1000</td>\n <td>30</td>\n <td>28</td>\n <td>1</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1000</td>\n <td>30</td>\n <td>29</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Principal terms age Gender weekend Bechalor High School or Below \\\n0 1000 30 45 0 0 0 1 \n1 1000 30 33 1 0 1 0 \n2 1000 15 27 0 0 0 0 \n3 1000 30 28 1 1 0 0 \n4 1000 30 29 0 1 0 0 \n\n college \n0 0 \n1 0 \n2 1 \n3 1 \n4 1 "
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "X = Feature\nX[0:5]"
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "array(['PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF'],\n dtype=object)"
},
"execution_count": 143,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "y = df['loan_status'].values\ny[0:5]"
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {},
"outputs": [],
"source": "def foo():\n X= preprocessing.StandardScaler().fit(X).transform(X)\n X[0:5]\n return self.partial_fit(X,y)"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# K Nearest Neighbor(KNN)"
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {},
"outputs": [],
"source": "from sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.model_selection import train_test_split\nfrom sklearn import metrics\nfrom sklearn.metrics import classification_report,confusion_matrix\nX_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=4)"
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [],
"source": "error_rate = []\n\n# Will take some time\nfor i in range(1,40):\n \n knn = KNeighborsClassifier(n_neighbors=i)\n knn.fit(X_train,y_train)\n pred_i = knn.predict(X_test)\n error_rate.append(np.mean(pred_i!=y_test))"
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "Text(0, 0.5, 'Error Rate')"
},
"execution_count": 147,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 720x432 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": "plt.figure(figsize=(10,6))\nplt.plot(range(1,40),error_rate,color='blue', linestyle='dashed', marker='o',\n markerfacecolor='red', markersize=10)\nplt.title('Error Rate vs. K Value')\nplt.xlabel('K')\nplt.ylabel('Error Rate')"
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "CONFUSION_MATRIX :\n\n[[ 1 4]\n [14 51]]\n\n\nREPORT :\n\n precision recall f1-score support\n\n COLLECTION 0.07 0.20 0.10 5\n PAIDOFF 0.93 0.78 0.85 65\n\n accuracy 0.74 70\n macro avg 0.50 0.49 0.48 70\nweighted avg 0.87 0.74 0.80 70\n\n"
}
],
"source": "##for k=9....acc to the above graph\n \nknn = KNeighborsClassifier(n_neighbors=9)\nknn.fit(X_train,y_train)\npred_i = knn.predict(X_test)\nprint('CONFUSION_MATRIX :\\n')\nprint(confusion_matrix(pred_i,y_test))\nprint('\\n')\nprint('REPORT :\\n')\nprint(classification_report(pred_i,y_test))"
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "ACCURACY :\n"
},
{
"data": {
"text/plain": "0.7428571428571429"
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "print('ACCURACY :')\n\nmetrics.accuracy_score(pred_i,y_test)"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# Decision Tree"
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "array(['PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'COLLECTION', 'COLLECTION', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'COLLECTION', 'PAIDOFF', 'PAIDOFF', 'COLLECTION', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'COLLECTION', 'COLLECTION', 'COLLECTION', 'PAIDOFF', 'COLLECTION',\n 'COLLECTION', 'PAIDOFF', 'COLLECTION', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'COLLECTION',\n 'PAIDOFF', 'PAIDOFF', 'COLLECTION', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'COLLECTION', 'PAIDOFF', 'COLLECTION',\n 'COLLECTION', 'COLLECTION', 'COLLECTION', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'COLLECTION', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'COLLECTION',\n 'PAIDOFF', 'COLLECTION', 'COLLECTION', 'PAIDOFF', 'COLLECTION',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF'], dtype=object)"
},
"execution_count": 150,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "from sklearn.tree import DecisionTreeClassifier\ndc = DecisionTreeClassifier()\nclassification = dc.fit(X_train,y_train)\nprediction = dc.predict(X_test)\nprediction"
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "CONFUSION_MATRIX :\n\n[[ 8 14]\n [ 7 41]]\n"
}
],
"source": "print('CONFUSION_MATRIX :\\n')\n\nprint(confusion_matrix(prediction,y_test))"
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "REPORT :\n\n precision recall f1-score support\n\n COLLECTION 0.53 0.36 0.43 22\n PAIDOFF 0.75 0.85 0.80 48\n\n accuracy 0.70 70\n macro avg 0.64 0.61 0.61 70\nweighted avg 0.68 0.70 0.68 70\n\n"
}
],
"source": "print('REPORT :\\n')\nprint(classification_report(prediction,y_test))"
},
{
"cell_type": "code",
"execution_count": 153,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "ACCURACY :\n\n"
},
{
"data": {
"text/plain": "0.7"
},
"execution_count": 153,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "print('ACCURACY :\\n')\nmetrics.accuracy_score(prediction,y_test)"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# Support Vector Machine"
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "array(['PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF'], dtype=object)"
},
"execution_count": 154,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "from sklearn import svm\nsvc = svm.SVC(kernel='rbf')\nsvc.fit(X_train,y_train)\ny_pred = svc.predict(X_test)\ny_pred"
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "CLASSIFICATION_REPORT :\n\n precision recall f1-score support\n\n COLLECTION 0.00 0.00 0.00 0\n PAIDOFF 1.00 0.79 0.88 70\n\n accuracy 0.79 70\n macro avg 0.50 0.39 0.44 70\nweighted avg 1.00 0.79 0.88 70\n\n"
},
{
"name": "stderr",
"output_type": "stream",
"text": "/opt/conda/envs/Python-3.7-main/lib/python3.7/site-packages/sklearn/metrics/_classification.py:1221: UndefinedMetricWarning: Recall and F-score are ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n _warn_prf(average, modifier, msg_start, len(result))\n"
}
],
"source": "print('CLASSIFICATION_REPORT :\\n')\nprint(metrics.classification_report(y_pred,y_test))"
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "CONFUSION MATRIX :\n\n[[ 0 0]\n [15 55]]\n"
}
],
"source": "print('CONFUSION MATRIX :\\n')\nprint(metrics.confusion_matrix(y_pred,y_test))"
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "ACCURACY :\n\n0.7857142857142857\n"
}
],
"source": "print('ACCURACY :\\n')\nprint(metrics.accuracy_score(y_pred,y_test))"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "\n# Logistic Regression"
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [],
"source": "from sklearn.linear_model import LogisticRegression"
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [],
"source": "linear = LogisticRegression(fit_intercept=True)"
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "LogisticRegression()"
},
"execution_count": 160,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "linear.fit(X_train,y_train)"
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "array(['PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'COLLECTION',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'COLLECTION', 'PAIDOFF', 'PAIDOFF', 'COLLECTION', 'COLLECTION',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'COLLECTION',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'COLLECTION', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF',\n 'PAIDOFF', 'PAIDOFF', 'PAIDOFF'], dtype=object)"
},
"execution_count": 161,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "y_pred = linear.predict(X_test)\ny_pred"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# Model Evaluation using Test set"
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "CLASSIFICATION_REPORT :\n\n precision recall f1-score support\n\n COLLECTION 0.13 0.33 0.19 6\n PAIDOFF 0.93 0.80 0.86 64\n\n accuracy 0.76 70\n macro avg 0.53 0.57 0.52 70\nweighted avg 0.86 0.76 0.80 70\n\n"
}
],
"source": "print('CLASSIFICATION_REPORT :\\n');\nprint(metrics.classification_report(y_pred,y_test))"
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "CONFUSION_MATRIX :\n\n[[ 2 4]\n [13 51]]\n"
}
],
"source": "print('CONFUSION_MATRIX :\\n');\nprint(metrics.confusion_matrix(y_pred,y_test))"
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "ACCURACY_SCORE :\n\n0.7571428571428571\n"
}
],
"source": "print('ACCURACY_SCORE :\\n');\nprint(metrics.accuracy_score(y_pred,y_test))"
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [],
"source": "from sklearn.metrics import jaccard_score\n\nfrom sklearn.metrics import f1_score\nfrom sklearn.metrics import log_loss"
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [
{
"ename": "ImportError",
"evalue": "cannot import name 'jaccard_similarity_score' from 'sklearn.metrics' (/opt/conda/envs/Python-3.7-main/lib/python3.7/site-packages/sklearn/metrics/__init__.py)",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-166-1add164f06c1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mjaccard_similarity_score\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mImportError\u001b[0m: cannot import name 'jaccard_similarity_score' from 'sklearn.metrics' (/opt/conda/envs/Python-3.7-main/lib/python3.7/site-packages/sklearn/metrics/__init__.py)"
]
}
],
"source": "from sklearn.metrics import jaccard_similarity_score"
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "--2020-12-21 12:22:37-- https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/loan_test.csv\nResolving s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)... 67.228.254.196\nConnecting to s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)|67.228.254.196|:443... connected.\nHTTP request sent, awaiting response... 200 OK\nLength: 3642 (3.6K) [text/csv]\nSaving to: \u2018loan_test.csv\u2019\n\nloan_test.csv 100%[===================>] 3.56K --.-KB/s in 0s \n\n2020-12-21 12:22:37 (80.2 MB/s) - \u2018loan_test.csv\u2019 saved [3642/3642]\n\n"
}
],
"source": "!wget -O loan_test.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/loan_test.csv"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# Load Test set for evaluation "
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {},
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Unnamed: 0</th>\n <th>Unnamed: 0.1</th>\n <th>loan_status</th>\n <th>Principal</th>\n <th>terms</th>\n <th>effective_date</th>\n <th>due_date</th>\n <th>age</th>\n <th>education</th>\n <th>Gender</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>1</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>9/8/2016</td>\n <td>10/7/2016</td>\n <td>50</td>\n <td>Bechalor</td>\n <td>female</td>\n </tr>\n <tr>\n <th>1</th>\n <td>5</td>\n <td>5</td>\n <td>PAIDOFF</td>\n <td>300</td>\n <td>7</td>\n <td>9/9/2016</td>\n <td>9/15/2016</td>\n <td>35</td>\n <td>Master or Above</td>\n <td>male</td>\n </tr>\n <tr>\n <th>2</th>\n <td>21</td>\n <td>21</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>9/10/2016</td>\n <td>10/9/2016</td>\n <td>43</td>\n <td>High School or Below</td>\n <td>female</td>\n </tr>\n <tr>\n <th>3</th>\n <td>24</td>\n <td>24</td>\n <td>PAIDOFF</td>\n <td>1000</td>\n <td>30</td>\n <td>9/10/2016</td>\n <td>10/9/2016</td>\n <td>26</td>\n <td>college</td>\n <td>male</td>\n </tr>\n <tr>\n <th>4</th>\n <td>35</td>\n <td>35</td>\n <td>PAIDOFF</td>\n <td>800</td>\n <td>15</td>\n <td>9/11/2016</td>\n <td>9/25/2016</td>\n <td>29</td>\n <td>Bechalor</td>\n <td>male</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Unnamed: 0 Unnamed: 0.1 loan_status Principal terms effective_date \\\n0 1 1 PAIDOFF 1000 30 9/8/2016 \n1 5 5 PAIDOFF 300 7 9/9/2016 \n2 21 21 PAIDOFF 1000 30 9/10/2016 \n3 24 24 PAIDOFF 1000 30 9/10/2016 \n4 35 35 PAIDOFF 800 15 9/11/2016 \n\n due_date age education Gender \n0 10/7/2016 50 Bechalor female \n1 9/15/2016 35 Master or Above male \n2 10/9/2016 43 High School or Below female \n3 10/9/2016 26 college male \n4 9/25/2016 29 Bechalor male "
},
"execution_count": 168,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "test_df= pd.read_csv('loan_test.csv')\ntest_df.head()"
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "array(['PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF', 'PAIDOFF'],\n dtype=object)"
},
"execution_count": 169,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "#preprocessing :-\ntest_df = pd.read_csv('loan_test.csv')\n\n#Preprocessing\n\n# convert date time\ntest_df['due_date'] = pd.to_datetime(test_df['due_date'])\ntest_df['effective_date'] = pd.to_datetime(test_df['effective_date'])\ntest_df['dayofweek'] = test_df['effective_date'].dt.dayofweek\n# evaulate weekend field\ntest_df['weekend'] = test_df['dayofweek'].apply(lambda x: 1 if (x>3) else 0)\n# convert male to 0 and female to 1\ntest_df['Gender'].replace(to_replace=['male','female'], value=[0,1],inplace=True)\n# work out education level\ntest_feature = test_df[['Principal','terms','age','Gender','weekend']]\ntest_feature = pd.concat([test_feature,pd.get_dummies(test_df['education'])], axis=1)\ntest_feature.drop(['Master or Above'], axis = 1,inplace=True)\n\n# normalize the test data\ntest_X = preprocessing.StandardScaler().fit(test_feature).transform(test_feature)\ntest_X[0:5]\n# and target result\ntest_y = test_df['loan_status'].values\ntest_y[0:5]"
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'jaccard_similarity_score' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-170-8232aadb8289>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# evaluate KNN\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mknn_yhat\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mknn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_X\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mjc1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mjaccard_similarity_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_y\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mknn_yhat\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;31m# evaluate Decision Trees\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mdt_yhat\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_X\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'jaccard_similarity_score' is not defined"
]
}
],
"source": "# evaluate KNN\nknn_yhat = knn.predict(test_X)\njc1 = (jaccard_similarity_score(test_y, knn_yhat))\n# evaluate Decision Trees\ndt_yhat = dc.predict(test_X)\njc2 = (jaccard_similarity_score(test_y, dt_yhat))\n#evaluate SVM\nsvm_yhat = svc.predict(test_X)\njc3 = (jaccard_similarity_score(test_y, svm_yhat))\n# evaluate Logistic Regression\nlr_yhat = linear.predict(test_X)\njc4 = (jaccard_similarity_score(test_y, lr_yhat))\n\nlist_jc = [jc1, jc2, jc3, jc4]\nlist_jc"
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'dt_yhat' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-172-a0c068b4a13b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mfs1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mf1_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_y\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mknn_yhat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0maverage\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'weighted'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m# evaluate Desision Trees\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mfs2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mf1_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_y\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdt_yhat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maverage\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'weighted'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;31m# evaluate SVM\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mfs3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mf1_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_y\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msvm_yhat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maverage\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'weighted'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'dt_yhat' is not defined"
]
}
],
"source": "# evaluate KNN\nfs1 = (f1_score(test_y, knn_yhat,average='weighted'))\n# evaluate Desision Trees \nfs2 = (f1_score(test_y, dt_yhat, average='weighted'))\n# evaluate SVM\nfs3 = (f1_score(test_y, svm_yhat, average='weighted'))\n# evaluate Logistic Regression\nfs4 = (f1_score(test_y, lr_yhat, average='weighted'))\n\nlist_fs = [fs1, fs2, fs3, fs4]\nlist_fs"
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "Requirement already satisfied: scikit-learn==0.22 in /opt/conda/envs/Python-3.7-main/lib/python3.7/site-packages (0.22)\r\nRequirement already satisfied: numpy>=1.11.0 in /opt/conda/envs/Python-3.7-main/lib/python3.7/site-packages (from scikit-learn==0.22) (1.18.5)\r\nRequirement already satisfied: joblib>=0.11 in /opt/conda/envs/Python-3.7-main/lib/python3.7/site-packages (from scikit-learn==0.22) (0.16.0)\r\nRequirement already satisfied: scipy>=0.17.0 in /opt/conda/envs/Python-3.7-main/lib/python3.7/site-packages (from scikit-learn==0.22) (1.5.0)\r\n"
}
],
"source": ""
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "['NA', 'NA', 'NA', 0.8230322220343397]"
},
"execution_count": 173,
"metadata": {},
"output_type": "execute_result"
}
],
"source": "##lr_prob = linear.predict_proba(test_X)\nLR_yhat_prob = linear.predict_proba(test_X)\n\nlist_ll = ['NA', 'NA', 'NA',(log_loss(test_y, LR_yhat_prob))]\nlist_ll"
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'list_jc' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-174-2d53d8c22ca9>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# fomulate the report format\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m \u001b[0mlist_jc\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'KNN'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Decision Tree'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'SVM'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Logistic Regression'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Jaccard'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minsert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'F1-score'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlist_fs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minsert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'LogLoss'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlist_ll\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'list_jc' is not defined"
]
}
],
"source": "# fomulate the report format\ndf = pd.DataFrame( list_jc,index=['KNN','Decision Tree','SVM','Logistic Regression'])\ndf.columns = ['Jaccard']\ndf.insert(loc=1, column='F1-score', value=list_fs)\ndf.insert(loc=2, column='LogLoss', value=list_ll)\ndf.columns.name = 'Algorithm'\ndf"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": ""
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.7",
"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.9"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment