{ "cells": [ { "cell_type": "markdown", "id": "minute-lender", "metadata": {}, "source": [ "
\n", " MSDS 7333 Spring 2021: Case Study 07 \n", "
\n", "
\n", "
\n", " Dollar Cost Minimization \n", "
\n", "\n", "
\n", "
\n", " Sachin Chavan,Tazeb Abera, Gautam Kapila, Sandesh Ojha \n", "
" ] }, { "cell_type": "markdown", "id": "reflected-outdoors", "metadata": { "toc": true }, "source": [ "

Table of Contents

\n", "
" ] }, { "cell_type": "markdown", "id": "actual-desktop", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "basic-abuse", "metadata": {}, "source": [ "[click here](https://nbviewer.jupyter.org/github/sachinac/MSDS7333/blob/main/case_study07/msds_qtw_case_study07.ipynb) to view notebook on nbviewer." ] }, { "cell_type": "markdown", "id": "underlying-logging", "metadata": {}, "source": [ "# Import modules\n", "\n", "Import all modules required for this notebook. This is the only place where all modules are imported.\n", "\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "lovely-england", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import missingno as msno \n", "import plotly.express as px\n", "import pickle\n", "from os import path\n", "from matplotlib import pyplot\n", "\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.linear_model import LogisticRegression\n", "from matplotlib.patches import Rectangle\n", "\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.model_selection import RepeatedStratifiedKFold\n", "from sklearn.model_selection import GridSearchCV\n", "from sklearn.feature_selection import RFE\n", "from sklearn.metrics import precision_recall_curve\n", "from sklearn.metrics import f1_score\n", "from sklearn.metrics import auc\n", "from sklearn.metrics import det_curve\n", "\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.decomposition import PCA\n", "\n", "from sklearn.inspection import permutation_importance\n", "\n", "from sklearn.metrics import make_scorer\n", "from sklearn.metrics import accuracy_score\n", "from sklearn.metrics import precision_score\n", "from sklearn.metrics import recall_score\n", "from sklearn.metrics import f1_score\n", "from sklearn.metrics import plot_confusion_matrix\n", "from mlxtend.evaluate import confusion_matrix" ] }, { "cell_type": "markdown", "id": "handed-mobile", "metadata": {}, "source": [ "# Function definitions" ] }, { "cell_type": "markdown", "id": "stock-smart", "metadata": {}, "source": [ "This code segment aligns all plots at the center." ] }, { "cell_type": "code", "execution_count": 2, "id": "annoying-slave", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "HTML(\"\"\"\n", "\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "coordinated-supply", "metadata": {}, "outputs": [], "source": [ "# Function to visualize accuracy, f1, precision, recall obtained from grid search.\n", "\n", "def viz_hyperparameter(res,X_axis,xlabel,scoring,xlim,ylim,plot_title):\n", " plt.figure(figsize=(10, 8))\n", " plt.title(\"GridSearchCV evaluating using multiple scorers simultaneously\"+plot_title, fontsize=12)\n", " \n", " plt.xlabel(xlabel) \n", " plt.ylabel(\"Score\")\n", "\n", " ax = plt.gca()\n", " ax.set_xlim(xlim[0], xlim[1])\n", " ax.set_ylim(ylim[0], ylim[1])\n", "\n", "\n", " for scorer, color in zip(sorted(scoring), ['g', 'k','b','r','c']):\n", " \n", " sample = 'test'\n", " style = '-'\n", " \n", " sample_score_mean = res['mean_%s_%s' % (sample, scorer)]\n", " sample_score_std = res['std_%s_%s' % (sample, scorer)]\n", "\n", " \n", " ax.fill_between(X_axis, sample_score_mean - sample_score_std,\n", " sample_score_mean + sample_score_std,\n", " alpha=0.1, color=color)\n", "\n", " ax.plot(X_axis, sample_score_mean, style, color=color,\n", " alpha=0.5,label=\"%s (%s)\" % (scorer, sample))\n", "\n", " best_index = np.nonzero(res['rank_test_%s' % scorer] == min(res['rank_test_%s' % scorer]))[0][0]\n", " best_score = res['mean_test_%s' % scorer][best_index]\n", "\n", " #Plot a dotted vertical line at the best score for that scorer marked by x\n", " \n", " ax.plot([X_axis[best_index], ] * 2, [0, best_score],\n", " linestyle='-.', color=color, marker='x', markeredgewidth=3, ms=8)\n", "\n", " # Annotate the best score for that scorer\n", " ax.annotate(\"%0.2f\" % best_score, (X_axis[best_index], best_score + 0.005))\n", "\n", " plt.legend(loc=\"best\")\n", " plt.grid(False)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 4, "id": "digital-publicity", "metadata": {}, "outputs": [], "source": [ "# Function definition to convert probability of high occurance to binary class labels '0' or '1', based on an input thrshold\n", "\n", "def to_labels(pos_probs, threshold):\n", " return (pos_probs >= threshold).astype('int')" ] }, { "cell_type": "code", "execution_count": 5, "id": "framed-favor", "metadata": {}, "outputs": [], "source": [ "# Plots Classification Metrics (Accuracy, False Negative Rate, False Positive Rate) and Classification $ Cost impact \n", "# vs classification threshold\n", "# Inputs are y_test, y_probability_score_for_high,threshold_interest\n", "# Threshold_interest is probability threshold of interest for most optimal model performance, given trade-offs between \n", "# model $cost and classification erros. It is manual entry for visual display in the plot.\n", "\n", "def plot_metrics_cost_vs_threshold(y_test_ref,y_prob_high_score,threshold_interest,cost_matrix):\n", " knn_fpr, knn_fnr, knn_thresholds = det_curve(y_test_ref, y_prob_high_score)\n", " score = [confusion_matrix(y_target=y_test, y_predicted=to_labels(y_prob_high_score, t)) for t in knn_thresholds]\n", " cost_list =[]\n", " acc_list = []\n", "\n", " for nscore in score:\n", " fp = nscore[0][1]\n", " fn = nscore[1][0]\n", " tp = nscore[1][1]\n", " tn = nscore[0][0]\n", " total = nscore.sum()\n", " acc = (tp+tn)/total\n", "\n", " cost_score = np.sum(np.multiply(nscore, cost_matrix))\n", "\n", " cost_list.append(cost_score)\n", " acc_list.append(acc)\n", " \n", " xloc, yloc = threshold_interest, -0.1\n", " fig, ax1 = plt.subplots()\n", "\n", " color = 'k'\n", " ax1.set_xlabel('Threshold')\n", " ax1.set_ylabel('Metrics', color=color)\n", " ax1.plot(knn_thresholds, knn_fpr, '-.',color= color, label='fpr',linewidth=3)\n", " ax1.plot(knn_thresholds, knn_fnr, '--o',color= color, label='fnr',linewidth=3)\n", " ax1.plot(knn_thresholds, acc_list,'--o',color= 'g', label='acc',linewidth=3)\n", " ax1.add_patch(Rectangle((xloc, yloc),0.1, 1.1, facecolor=\"yellow\", alpha = 0.1))\n", " ax1.tick_params(axis='y', labelcolor=color)\n", " ax1.legend(loc=0)\n", "\n", " ax2 = ax1.twinx() # instantiate a second axes that shares the same x-axis\n", "\n", " color = 'tab:red'\n", " ax2.set_ylabel('$ cost', color=color) # we already handled the x-label with ax1\n", " ax2.plot(knn_thresholds, cost_list, 's:',color= color, label='cost')\n", " ax2.tick_params(axis='y', labelcolor=color)\n", "\n", " ax2.legend(loc=0)\n", " fig.tight_layout() # otherwise the right y-label is slightly clipped\n", " plt.show()\n", " \n", " print('$ Cost and Classification Error Rates for different classification thresholds:')\n", " dfs = pd.DataFrame(list(zip(knn_thresholds, cost_list,knn_fnr,knn_fpr,acc_list)),columns =['Threshold', '$Cost', 'FNr','FPr','Acc'])\n", " print(dfs)" ] }, { "cell_type": "markdown", "id": "structured-portsmouth", "metadata": {}, "source": [ "# Inroduction\n", "\n", "This case study is about demonstrating data science skills to build and evaluate mathematical models for a real-world dataset while minimizing dollar amount cost. Models shall be developed for the given dataset and compared with respect to dollar amount based on appropriate evaluation metric. Evaluation metric shall be determined after exploring features provided in the data and distribution of class labels shall be studied to decide on metric to be used for model evaluation.\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "stretch-privilege", "metadata": {}, "source": [ "# Business Understanding\n", "\n", "\n", "A Business client has reached out to us with an unknown dataset with many features and would like us to build a model that balances minimizing cost to the business, with respect to the model being accurate enough to apply to their day-to-day business.\n", "\n", "Here is how the decision cost breaks down:\n", "\n", " \n", " - True Positive - $0 \n", " \n", " - True Negative - $0\n", " \n", " - False Positive - $10\n", " \n", " - False Negative - $500\n", "\n", "Incorrectly classifying the data can get costly as you can see above. Correctly classified data does not cost the client any money. False Positive or classifying the data as true when its false costs the client \\\\$10. False Negative or classifying the data as false when it is true costs the client $500. We will need to factor in the cost of each of the features and their associated values during the model building to minimize the cost.\n", "For this analysis, we will compare recall or the true positive rate for each model analyzed. Recall or the true positive rate is the number of positive samples that are correctly classified as ‘positive’. If all of them are identified correctly, then recall will be 1. If all of them were classified incorrectly, then recall will be 0. With some positive samples classified as negative, recall with be in between 0 and 1.\n", "The client requires us to provide a detailed cost benefit analysis of the models we are proposing and provide comparative analysis of models if more than one models are proposed.\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "binary-seafood", "metadata": {}, "source": [ "# Data Evaluation / Engineering\n", "\n", "This section provides insights about datasets as follows\n", "\n", "- Indentifies categorical and numerical features\n", "- Data type conversion as required\n", "- Missing value analysis\n", "- Makes assumptions and limitations if any\n" ] }, { "cell_type": "markdown", "id": "electrical-horse", "metadata": {}, "source": [ "## Load Data\n", "\n", "Dataset was downloaded from the [SMU cloud](https://smu.box.com/s/k9x192jxm39enjw2wx8ouw2kopx33l32). The dataset contains 160K observations, 50 independent variables and 1 target variable. Target variable contains value 0s and 1s only this is going to be binary classification problem.\n", "\n", "Summary is as follows:\n", "\n", "- 50 indepedent variables\n", "- 1 target variables\n", "- 160K observations\n", "- 3 categorical variables 47 continuous variables\n", "- It contains few missing values that needs to be investigated for elimination or imputation\n", "\n", "Further analysis is conducted in next sections." ] }, { "cell_type": "code", "execution_count": 6, "id": "precise-growth", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x0x1x2x3x4x5x6x7x8x9...x41x42x43x44x45x46x47x48x49y
0-0.166563-3.9615884.6211132.481908-1.8001350.8046846.718751-14.789997-1.040673-4.204950...-1.4971175.414063-2.3256551.674827-0.26433260.781427-7.6896960.151589-8.0401660
1-0.149894-0.58567627.8398564.1523336.426802-2.42694340.477058-6.7257090.8964210.330165...36.2927904.4909150.7625616.5266621.00792715.805696-4.896678-0.32028316.7199740
2-0.321707-1.42981912.2515616.586874-5.304647-11.31109017.81285011.0605725.325880-2.632984...-0.3684919.088864-0.689886-2.7311180.75420030.856417-7.428573-2.090804-7.8694210
3-0.2455945.076677-24.1496323.6373076.5058112.290224-35.111751-18.913592-0.337041-5.568076...15.691546-7.4677752.940789-6.4241120.419776-72.4245695.3613751.806070-7.6708470
4-0.2733660.306326-11.3525931.6767582.928441-0.616824-16.50581727.5322811.199715-4.309105...-13.911297-5.2299371.7839283.957801-0.096988-14.085435-0.208351-0.89494215.7247421
..................................................................
159995-0.487024-4.2702690.417395-1.9924231.757552-1.1678190.60686041.084463-1.923188-2.374213...-9.3904518.096802-0.875131-1.413787-0.36396815.3393924.364205-3.83148928.3898581
1599960.8254774.80436822.16153511.3713031.7159016.99075932.221207-12.278038-3.8610866.715126...12.8031890.841446-0.682177-5.047677-0.0178980.7801306.387266-1.374742-1.6239520
159997-0.8024895.3626967.243419-7.4960742.295250-2.75606710.53138842.5158211.4209846.788916...-0.346570-0.1440980.7382987.2410410.215347-12.1552493.2652631.2309633.3354711
1599980.3392377.6098955.368414-2.8254814.04610215.3226037.805271-10.2330542.6099864.251127...-0.307656-0.601145-3.4431120.5499310.2067285.0819801.701462-0.279619-1.9864240
159999-0.296748-0.412773-10.911407-5.633629-4.02815415.939428-15.864365-46.38819218.339472-4.575499...27.8374731.3923950.893555-1.848590-0.423982-17.3793805.916490-2.76744415.5475571
\n", "

160000 rows × 51 columns

\n", "
" ], "text/plain": [ " x0 x1 x2 x3 x4 x5 \\\n", "0 -0.166563 -3.961588 4.621113 2.481908 -1.800135 0.804684 \n", "1 -0.149894 -0.585676 27.839856 4.152333 6.426802 -2.426943 \n", "2 -0.321707 -1.429819 12.251561 6.586874 -5.304647 -11.311090 \n", "3 -0.245594 5.076677 -24.149632 3.637307 6.505811 2.290224 \n", "4 -0.273366 0.306326 -11.352593 1.676758 2.928441 -0.616824 \n", "... ... ... ... ... ... ... \n", "159995 -0.487024 -4.270269 0.417395 -1.992423 1.757552 -1.167819 \n", "159996 0.825477 4.804368 22.161535 11.371303 1.715901 6.990759 \n", "159997 -0.802489 5.362696 7.243419 -7.496074 2.295250 -2.756067 \n", "159998 0.339237 7.609895 5.368414 -2.825481 4.046102 15.322603 \n", "159999 -0.296748 -0.412773 -10.911407 -5.633629 -4.028154 15.939428 \n", "\n", " x6 x7 x8 x9 ... x41 x42 \\\n", "0 6.718751 -14.789997 -1.040673 -4.204950 ... -1.497117 5.414063 \n", "1 40.477058 -6.725709 0.896421 0.330165 ... 36.292790 4.490915 \n", "2 17.812850 11.060572 5.325880 -2.632984 ... -0.368491 9.088864 \n", "3 -35.111751 -18.913592 -0.337041 -5.568076 ... 15.691546 -7.467775 \n", "4 -16.505817 27.532281 1.199715 -4.309105 ... -13.911297 -5.229937 \n", "... ... ... ... ... ... ... ... \n", "159995 0.606860 41.084463 -1.923188 -2.374213 ... -9.390451 8.096802 \n", "159996 32.221207 -12.278038 -3.861086 6.715126 ... 12.803189 0.841446 \n", "159997 10.531388 42.515821 1.420984 6.788916 ... -0.346570 -0.144098 \n", "159998 7.805271 -10.233054 2.609986 4.251127 ... -0.307656 -0.601145 \n", "159999 -15.864365 -46.388192 18.339472 -4.575499 ... 27.837473 1.392395 \n", "\n", " x43 x44 x45 x46 x47 x48 \\\n", "0 -2.325655 1.674827 -0.264332 60.781427 -7.689696 0.151589 \n", "1 0.762561 6.526662 1.007927 15.805696 -4.896678 -0.320283 \n", "2 -0.689886 -2.731118 0.754200 30.856417 -7.428573 -2.090804 \n", "3 2.940789 -6.424112 0.419776 -72.424569 5.361375 1.806070 \n", "4 1.783928 3.957801 -0.096988 -14.085435 -0.208351 -0.894942 \n", "... ... ... ... ... ... ... \n", "159995 -0.875131 -1.413787 -0.363968 15.339392 4.364205 -3.831489 \n", "159996 -0.682177 -5.047677 -0.017898 0.780130 6.387266 -1.374742 \n", "159997 0.738298 7.241041 0.215347 -12.155249 3.265263 1.230963 \n", "159998 -3.443112 0.549931 0.206728 5.081980 1.701462 -0.279619 \n", "159999 0.893555 -1.848590 -0.423982 -17.379380 5.916490 -2.767444 \n", "\n", " x49 y \n", "0 -8.040166 0 \n", "1 16.719974 0 \n", "2 -7.869421 0 \n", "3 -7.670847 0 \n", "4 15.724742 1 \n", "... ... .. \n", "159995 28.389858 1 \n", "159996 -1.623952 0 \n", "159997 3.335471 1 \n", "159998 -1.986424 0 \n", "159999 15.547557 1 \n", "\n", "[160000 rows x 51 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv('data/final_project.csv')\n", "df" ] }, { "cell_type": "markdown", "id": "cloudy-clerk", "metadata": {}, "source": [ "## Dataframe structure\n", "\n", "Information about fields is not available. df.info() provides us following information.\n", "\n", "- x0 to x23, x25 to x28, x31, x33 to x36 and x38 to x49 are numeric features.\n", "- x24, x29-x30, x32 and x37 are categorical or non-numeric features\n", "- y is target variable which is binary." ] }, { "cell_type": "code", "execution_count": 7, "id": "passive-clause", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 160000 entries, 0 to 159999\n", "Data columns (total 51 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 x0 159974 non-null float64\n", " 1 x1 159975 non-null float64\n", " 2 x2 159962 non-null float64\n", " 3 x3 159963 non-null float64\n", " 4 x4 159974 non-null float64\n", " 5 x5 159963 non-null float64\n", " 6 x6 159974 non-null float64\n", " 7 x7 159973 non-null float64\n", " 8 x8 159979 non-null float64\n", " 9 x9 159970 non-null float64\n", " 10 x10 159957 non-null float64\n", " 11 x11 159970 non-null float64\n", " 12 x12 159964 non-null float64\n", " 13 x13 159969 non-null float64\n", " 14 x14 159966 non-null float64\n", " 15 x15 159965 non-null float64\n", " 16 x16 159974 non-null float64\n", " 17 x17 159973 non-null float64\n", " 18 x18 159960 non-null float64\n", " 19 x19 159965 non-null float64\n", " 20 x20 159962 non-null float64\n", " 21 x21 159971 non-null float64\n", " 22 x22 159973 non-null float64\n", " 23 x23 159953 non-null float64\n", " 24 x24 159972 non-null object \n", " 25 x25 159978 non-null float64\n", " 26 x26 159964 non-null float64\n", " 27 x27 159970 non-null float64\n", " 28 x28 159965 non-null float64\n", " 29 x29 159970 non-null object \n", " 30 x30 159970 non-null object \n", " 31 x31 159961 non-null float64\n", " 32 x32 159969 non-null object \n", " 33 x33 159959 non-null float64\n", " 34 x34 159959 non-null float64\n", " 35 x35 159970 non-null float64\n", " 36 x36 159973 non-null float64\n", " 37 x37 159977 non-null object \n", " 38 x38 159969 non-null float64\n", " 39 x39 159977 non-null float64\n", " 40 x40 159964 non-null float64\n", " 41 x41 159960 non-null float64\n", " 42 x42 159974 non-null float64\n", " 43 x43 159963 non-null float64\n", " 44 x44 159960 non-null float64\n", " 45 x45 159971 non-null float64\n", " 46 x46 159969 non-null float64\n", " 47 x47 159963 non-null float64\n", " 48 x48 159968 non-null float64\n", " 49 x49 159968 non-null float64\n", " 50 y 160000 non-null int64 \n", "dtypes: float64(45), int64(1), object(5)\n", "memory usage: 62.3+ MB\n" ] } ], "source": [ "df.info()" ] }, { "cell_type": "markdown", "id": "opened-warrior", "metadata": {}, "source": [ "## Data Summary\n", "\n", "Below is descriptive statisics of all features. It indicates that features most features are on different scale and required normalization before they can be used for the modeling." ] }, { "cell_type": "code", "execution_count": 8, "id": "embedded-increase", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x0x1x2x3x4x5x6x7x8x9...x41x42x43x44x45x46x47x48x49y
count159974.000000159975.000000159962.000000159963.000000159974.000000159963.000000159974.000000159973.000000159979.000000159970.000000...159960.000000159974.000000159963.000000159960.000000159971.000000159969.000000159963.000000159968.000000159968.000000160000.000000
mean-0.0010280.001358-1.150145-0.024637-0.0005490.013582-1.670670-7.692795-0.0305400.005462...6.701076-1.833820-0.002091-0.0062500.000885-12.7553950.028622-0.000224-0.6742240.401231
std0.3711376.34063213.2734808.0650326.3822937.67007619.29866530.5422648.9011856.355040...18.6801965.1107051.5349524.1645950.39662136.6086414.7881571.93550115.0367380.490149
min-1.592635-26.278302-59.394048-35.476594-28.467536-33.822988-86.354483-181.506976-37.691045-27.980659...-82.167224-27.933750-6.876234-17.983487-1.753221-201.826828-21.086333-8.490155-65.7911910.000000
25%-0.251641-4.260973-10.166536-5.454438-4.313118-5.148130-14.780146-27.324771-6.031058-4.260619...-5.804080-5.162869-1.039677-2.812055-0.266518-36.428329-3.216016-1.320800-10.9317530.000000
50%-0.0020470.004813-1.340932-0.0314080.0008570.014118-1.948594-6.956789-0.0168400.006045...6.840110-1.923754-0.004385-0.0104840.001645-12.9824970.035865-0.011993-0.5744100.000000
75%0.2485324.2842207.8716765.4451794.3066605.19074911.44693112.2170715.9723494.305734...19.2663671.4535071.0332752.7832740.26904911.4454433.2680281.3177039.6510721.000000
max1.60084927.98817863.54565338.90602526.24781235.55011092.390605149.15063439.04983127.377842...100.05043222.6680416.68092219.0697591.669205150.85941520.8368548.22655266.8776041.000000
\n", "

8 rows × 46 columns

\n", "
" ], "text/plain": [ " x0 x1 x2 x3 \\\n", "count 159974.000000 159975.000000 159962.000000 159963.000000 \n", "mean -0.001028 0.001358 -1.150145 -0.024637 \n", "std 0.371137 6.340632 13.273480 8.065032 \n", "min -1.592635 -26.278302 -59.394048 -35.476594 \n", "25% -0.251641 -4.260973 -10.166536 -5.454438 \n", "50% -0.002047 0.004813 -1.340932 -0.031408 \n", "75% 0.248532 4.284220 7.871676 5.445179 \n", "max 1.600849 27.988178 63.545653 38.906025 \n", "\n", " x4 x5 x6 x7 \\\n", "count 159974.000000 159963.000000 159974.000000 159973.000000 \n", "mean -0.000549 0.013582 -1.670670 -7.692795 \n", "std 6.382293 7.670076 19.298665 30.542264 \n", "min -28.467536 -33.822988 -86.354483 -181.506976 \n", "25% -4.313118 -5.148130 -14.780146 -27.324771 \n", "50% 0.000857 0.014118 -1.948594 -6.956789 \n", "75% 4.306660 5.190749 11.446931 12.217071 \n", "max 26.247812 35.550110 92.390605 149.150634 \n", "\n", " x8 x9 ... x41 x42 \\\n", "count 159979.000000 159970.000000 ... 159960.000000 159974.000000 \n", "mean -0.030540 0.005462 ... 6.701076 -1.833820 \n", "std 8.901185 6.355040 ... 18.680196 5.110705 \n", "min -37.691045 -27.980659 ... -82.167224 -27.933750 \n", "25% -6.031058 -4.260619 ... -5.804080 -5.162869 \n", "50% -0.016840 0.006045 ... 6.840110 -1.923754 \n", "75% 5.972349 4.305734 ... 19.266367 1.453507 \n", "max 39.049831 27.377842 ... 100.050432 22.668041 \n", "\n", " x43 x44 x45 x46 \\\n", "count 159963.000000 159960.000000 159971.000000 159969.000000 \n", "mean -0.002091 -0.006250 0.000885 -12.755395 \n", "std 1.534952 4.164595 0.396621 36.608641 \n", "min -6.876234 -17.983487 -1.753221 -201.826828 \n", "25% -1.039677 -2.812055 -0.266518 -36.428329 \n", "50% -0.004385 -0.010484 0.001645 -12.982497 \n", "75% 1.033275 2.783274 0.269049 11.445443 \n", "max 6.680922 19.069759 1.669205 150.859415 \n", "\n", " x47 x48 x49 y \n", "count 159963.000000 159968.000000 159968.000000 160000.000000 \n", "mean 0.028622 -0.000224 -0.674224 0.401231 \n", "std 4.788157 1.935501 15.036738 0.490149 \n", "min -21.086333 -8.490155 -65.791191 0.000000 \n", "25% -3.216016 -1.320800 -10.931753 0.000000 \n", "50% 0.035865 -0.011993 -0.574410 0.000000 \n", "75% 3.268028 1.317703 9.651072 1.000000 \n", "max 20.836854 8.226552 66.877604 1.000000 \n", "\n", "[8 rows x 46 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "markdown", "id": "combined-opera", "metadata": {}, "source": [ "## Non numeric features\n", "\n", "Here are non-numeric features which has content other than numbers. following are the fields.\n", "\n", "- x24 - Region names\n", "- x29 - Month\n", "- x30 - Day of the week\n", "- x32 - Looks like rate of something.so can be converted to float.\n", "- x37 - has $ sign assigned to numbers. Should be numeric field. can be converted to float.\n", "\n", "Basically x24, x29 and x30 are categorical variables in the dataset.All other fields are numeric fields.\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "occupational-paraguay", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x24x29x30x32x37
0euorpeJulytuesday0.0%$1313.96
1asiaAugwednesday-0.02%$1962.78
2asiaJulywednesday-0.01%$430.47
3asiaJulywednesday0.01%$-2366.29
4asiaJulytuesday0.01%$-620.66
..................
159995asiaAugwednesday0.0%$-891.96
159996asiaMaywednesday-0.01%$1588.65
159997asiaJunwednesday-0.0%$687.46
159998asiaMaywednesday-0.02%$439.21
159999asiaAugtuesday0.02%$-1229.34
\n", "

160000 rows × 5 columns

\n", "
" ], "text/plain": [ " x24 x29 x30 x32 x37\n", "0 euorpe July tuesday 0.0% $1313.96\n", "1 asia Aug wednesday -0.02% $1962.78\n", "2 asia July wednesday -0.01% $430.47\n", "3 asia July wednesday 0.01% $-2366.29\n", "4 asia July tuesday 0.01% $-620.66\n", "... ... ... ... ... ...\n", "159995 asia Aug wednesday 0.0% $-891.96\n", "159996 asia May wednesday -0.01% $1588.65\n", "159997 asia Jun wednesday -0.0% $687.46\n", "159998 asia May wednesday -0.02% $439.21\n", "159999 asia Aug tuesday 0.02% $-1229.34\n", "\n", "[160000 rows x 5 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc[:,['x24','x29','x30','x32','x37']]" ] }, { "cell_type": "markdown", "id": "forty-habitat", "metadata": {}, "source": [ "## Change Data Types\n", "\n", "- x32 remove % sign and convert to float\n", "- x37 remove $ sign and convert to float \n", "- Indices of non-numeric features are stored in indices_obj_features\n", "- Indices of numeric features are stored in indices_num_features" ] }, { "cell_type": "code", "execution_count": 10, "id": "comfortable-death", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x24x29x30x32x37
0euorpeJulytuesday0.001313.96
1asiaAugwednesday-0.021962.78
2asiaJulywednesday-0.01430.47
3asiaJulywednesday0.01-2366.29
4asiaJulytuesday0.01-620.66
..................
159995asiaAugwednesday0.00-891.96
159996asiaMaywednesday-0.011588.65
159997asiaJunwednesday-0.00687.46
159998asiaMaywednesday-0.02439.21
159999asiaAugtuesday0.02-1229.34
\n", "

160000 rows × 5 columns

\n", "
" ], "text/plain": [ " x24 x29 x30 x32 x37\n", "0 euorpe July tuesday 0.00 1313.96\n", "1 asia Aug wednesday -0.02 1962.78\n", "2 asia July wednesday -0.01 430.47\n", "3 asia July wednesday 0.01 -2366.29\n", "4 asia July tuesday 0.01 -620.66\n", "... ... ... ... ... ...\n", "159995 asia Aug wednesday 0.00 -891.96\n", "159996 asia May wednesday -0.01 1588.65\n", "159997 asia Jun wednesday -0.00 687.46\n", "159998 asia May wednesday -0.02 439.21\n", "159999 asia Aug tuesday 0.02 -1229.34\n", "\n", "[160000 rows x 5 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Indices of non-numeric features\n", "indices_obj_features = [24,29,30]\n", "# random state 1999\n", "# Indices of numeric features\n", "listoflist = [list(range(24)),list(range(25,29,1)),[31,32],list(range(33,38,1)),list(range(38,50,1))]\n", "\n", "indices_num_features = [item for list_id in listoflist for item in list_id]\n", "\n", "df['x32'] = df['x32'].astype(str)\n", "df['x32'] = df['x32'].str.replace('%', '')\n", "df['x32'] = df['x32'].astype(float)\n", "\n", "df['x37'] = df['x37'].astype(str)\n", "df['x37'] = df['x37'].str.replace('$', '')\n", "\n", "df['x37'] = df['x37'].astype(float)\n", "\n", "df['y'] = df['y'].astype(object)\n", "\n", "df.loc[:,['x24','x29','x30','x32','x37']]" ] }, { "cell_type": "markdown", "id": "miniature-therapist", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "frozen-summit", "metadata": {}, "source": [ "## Missing Values\n", "\n", "Inspection of missing values begins with plotting missing data. missingno is the python module that enables us to visually inspect missing values as shown below. This is quick check to see if there are any missing values or NAs int the dataset. If dataset contains missing values they need to be analyzed further. \n", "\n", "The dataset that we have got has less than 1% of missing values and they don't cause any major change in distribution of data. So we have removed missing values in later section of this notebook shown here step by step.\n", "\n", "### Missingno Plot" ] }, { "cell_type": "code", "execution_count": 11, "id": "fabulous-exclusive", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "msno.matrix(df.iloc[:,:-1],figsize=(20, 5)) " ] }, { "cell_type": "markdown", "id": "domestic-interface", "metadata": {}, "source": [ "### Featurewise missing percentage" ] }, { "cell_type": "code", "execution_count": 12, "id": "japanese-fourth", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
%Missing
x00.016250
x10.015625
x20.023750
x30.023125
x40.016250
x50.023125
x60.016250
x70.016875
x80.013125
x90.018750
x100.026875
x110.018750
x120.022500
x130.019375
x140.021250
x150.021875
x160.016250
x170.016875
x180.025000
x190.021875
x200.023750
x210.018125
x220.016875
x230.029375
x240.017500
x250.013750
x260.022500
x270.018750
x280.021875
x290.018750
x300.018750
x310.024375
x320.019375
x330.025625
x340.025625
x350.018750
x360.016875
x370.014375
x380.019375
x390.014375
x400.022500
x410.025000
x420.016250
x430.023125
x440.025000
x450.018125
x460.019375
x470.023125
x480.020000
x490.020000
\n", "
" ], "text/plain": [ " %Missing\n", "x0 0.016250\n", "x1 0.015625\n", "x2 0.023750\n", "x3 0.023125\n", "x4 0.016250\n", "x5 0.023125\n", "x6 0.016250\n", "x7 0.016875\n", "x8 0.013125\n", "x9 0.018750\n", "x10 0.026875\n", "x11 0.018750\n", "x12 0.022500\n", "x13 0.019375\n", "x14 0.021250\n", "x15 0.021875\n", "x16 0.016250\n", "x17 0.016875\n", "x18 0.025000\n", "x19 0.021875\n", "x20 0.023750\n", "x21 0.018125\n", "x22 0.016875\n", "x23 0.029375\n", "x24 0.017500\n", "x25 0.013750\n", "x26 0.022500\n", "x27 0.018750\n", "x28 0.021875\n", "x29 0.018750\n", "x30 0.018750\n", "x31 0.024375\n", "x32 0.019375\n", "x33 0.025625\n", "x34 0.025625\n", "x35 0.018750\n", "x36 0.016875\n", "x37 0.014375\n", "x38 0.019375\n", "x39 0.014375\n", "x40 0.022500\n", "x41 0.025000\n", "x42 0.016250\n", "x43 0.023125\n", "x44 0.025000\n", "x45 0.018125\n", "x46 0.019375\n", "x47 0.023125\n", "x48 0.020000\n", "x49 0.020000" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame((df.iloc[:,:-1].isna().sum()/len(df))*100,columns=['%Missing'])" ] }, { "cell_type": "markdown", "id": "respected-volunteer", "metadata": {}, "source": [ "### Missing value treatment\n", "\n", "Since missing values are very nominal in size (less than 0.5%) compared to size of the dataset rows with missing values are removed and final dataset was obtained as below.\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "endless-adams", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", "===========================================================\n", "Delete records with missing values\n", "===========================================================\n", "Original shape of dataframe : (160000, 51)\n", "After dropping missing values : (158392, 51)\n", "Total number of records dropped : 1608\n", "Total percentage of records dropped : 0.01%\n", " \n" ] } ], "source": [ "print(' ')\n", "print('===========================================================')\n", "print('Delete records with missing values')\n", "print('===========================================================')\n", "print('Original shape of dataframe : ',df.shape)\n", "df_final = df.dropna().copy()\n", "print('After dropping missing values : ',df_final.shape)\n", "print('Total number of records dropped : ',df.shape[0]-df_final.shape[0])\n", "print('Total percentage of records dropped : ',str(round( (df.shape[0]-df_final.shape[0])/df.shape[0],2))+'%')\n", "print(' ')" ] }, { "cell_type": "markdown", "id": "sunrise-action", "metadata": {}, "source": [ "Below plot shows there are no missing values left in the df_final Dataframe." ] }, { "cell_type": "code", "execution_count": 14, "id": "racial-saying", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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GQAAAAAMkDwDAAAAgAGSZwAAAAAwQPIMAAAAAAZIngEAAADAAMkzAAAAABggeQYAAAAAAyTPAAAAAGCA5BkAAAAADJA8AwAAAIABkmcAAAAAMEDyDAAAAAAGSJ4BAAAAwADJMwAAAAAYIHkGAAAAAAMkzwAAAABggOQZAAAAAAyQPAMAAACAAZJnAAAAADBA8gwAAAAABkieAQAAAMAAyTMAAAAAGCB5BgAAAAADJM8AAAAAYIDkGQAAAAAMkDwDAAAAgAGSZwAAAAAwQPIMAAAAAAZIngEAAADAAMkzAAAAABggeQYAAAAAAyTPAAAAAGCA5BkAAAAADJA8AwAAAIABkmcAAAAAMEDyDAAAAAAGSJ4BAAAAwADJMwAAAAAYIHkGAAAAAAMkzwAAAABggOQZAAAAAAyQPAMAAACAAZJnAAAAADBA8gwAAAAABkieAQAAAMAAyTMAAAAAGCB5BgAAAAADJM8AAAAAYIDkGQAAAAAMkDwDAAAAgAGSZwAAAAAwQPIMAAAAAAZIngEAAADAAMkzAAAAABggeQYAAAAAAyTPAAAAAGCA5BkAAAAADJA8AwAAAIABkmcAAAAAMEDyDAAAAAAGSJ4BAAAAwADJMwAAAAAYIHkGAAAAAAMkzwAAAABggOQZAAAAAAyQPAMAAACAAZJnAAAAADBA8gwAAAAABkieAQAAAMAAyTMAAAAAGCB5BgAAAAADJM8AAAAAYIDkGQAAAAAMkDwDAAAAgAGSZwAAAAAwQPIMAAAAAAZIngEAAADAAMkzAAAAABggeQYAAAAAAyTPAAAAAGCA5BkAAAAADJA8AwAAAIABkmcAAAAAMEDyDAAAAAAGSJ4BAAAAwADJMwAAAAAYIHkGAAAAAAMkzwAAAABggOQZAAAAAAyQPAMAAACAAZJnAAAAADBA8gwAAAAABkieAQAAAMAAyTMAAAAAGCB5BgAAAAADJM8AAAAAYIDkGQAAAAAMkDwDAAAAgAGSZwAAAAAwQPIMAAAAAAZIngEAAADAAMkzAAAAABggeQYAAAAAAyTPAAAAAGCA5BkAAAAADJA8AwAAAIABkmcAAAAAMEDyDAAAAAAGSJ4BAAAAwADJMwAAAAAYIHkGAAAAAAMkzwAAAABggOQZAAAAAAyQPAMAAACAAZJnAAAAADBA8gwAAAAABkieAQAAAMAAyTMAAAAAGCB5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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "msno.matrix(df_final.iloc[:,:-1],figsize=(20, 5)) " ] }, { "cell_type": "markdown", "id": "occasional-trade", "metadata": {}, "source": [ "## Target distribution\n", "\n", "### Overall target distribution\n", "\n", "Below plot indicates that this is going to be imbalanced classification problem. \n", "\n", "Distribution of the target\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", "
Class Distribution
1 59%
0 41%
\n", " \n", "\n" ] }, { "cell_type": "code", "execution_count": 15, "id": "polyphonic-performance", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "target = df_final['y'].value_counts(normalize=True).rename('percentage').reset_index()\n", "plt.figure(figsize=(8,5))\n", "sns.barplot(x=\"index\", y=\"percentage\", hue=\"index\", data=target)" ] }, { "cell_type": "markdown", "id": "polish-election", "metadata": {}, "source": [ "### Target - Region, Month and Daywise \n", "\n", "Here are observations from the plots\n", "\n", "- Asia is main contributor to postive class\n", "- Summer period is the main period for positive class\n", "- Middle of the week i.e. Wednesday class is seen most occurrences of postive class." ] }, { "cell_type": "code", "execution_count": 16, "id": "collect-armstrong", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 3, figsize=(15, 5), sharey=True)\n", "fig.suptitle('Region,Month,Daywise Plots')\n", "\n", "sns.countplot(ax=axes[0],x=\"x24\", data=df_final,hue=\"y\")\n", "axes[0].set_title(\"x24\")\n", "axes[0].tick_params(labelrotation=30)\n", "\n", "sns.countplot(ax=axes[1],x=\"x29\", data=df_final,hue=\"y\")\n", "axes[1].set_title(\"x29\")\n", "axes[1].tick_params(labelrotation=30)\n", "\n", "\n", "sns.countplot(ax=axes[2],x=\"x30\", data=df_final,hue=\"y\")\n", "axes[2].set_title(\"x30\")\n", "axes[2].tick_params(labelrotation=30)" ] }, { "cell_type": "markdown", "id": "least-employee", "metadata": {}, "source": [ "## Correlogram" ] }, { "cell_type": "markdown", "id": "objective-metabolism", "metadata": {}, "source": [ "Below correleogram shows there are not many correlated features and we will rely on automatic recursive feature elimination technique to reduce number of feature. This approach will keep optimal number of features.\n", "\n", "- x2 and x6 are highly correlated\n", "- x38 and x41 are highly correlated" ] }, { "cell_type": "code", "execution_count": 17, "id": "improved-payday", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(20,8))\n", "sns.heatmap(df_final.iloc[:,:-1].corr())" ] }, { "cell_type": "code", "execution_count": 18, "id": "confidential-contents", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 158392 entries, 0 to 159999\n", "Data columns (total 51 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 x0 158392 non-null float64\n", " 1 x1 158392 non-null float64\n", " 2 x2 158392 non-null float64\n", " 3 x3 158392 non-null float64\n", " 4 x4 158392 non-null float64\n", " 5 x5 158392 non-null float64\n", " 6 x6 158392 non-null float64\n", " 7 x7 158392 non-null float64\n", " 8 x8 158392 non-null float64\n", " 9 x9 158392 non-null float64\n", " 10 x10 158392 non-null float64\n", " 11 x11 158392 non-null float64\n", " 12 x12 158392 non-null float64\n", " 13 x13 158392 non-null float64\n", " 14 x14 158392 non-null float64\n", " 15 x15 158392 non-null float64\n", " 16 x16 158392 non-null float64\n", " 17 x17 158392 non-null float64\n", " 18 x18 158392 non-null float64\n", " 19 x19 158392 non-null float64\n", " 20 x20 158392 non-null float64\n", " 21 x21 158392 non-null float64\n", " 22 x22 158392 non-null float64\n", " 23 x23 158392 non-null float64\n", " 24 x24 158392 non-null object \n", " 25 x25 158392 non-null float64\n", " 26 x26 158392 non-null float64\n", " 27 x27 158392 non-null float64\n", " 28 x28 158392 non-null float64\n", " 29 x29 158392 non-null object \n", " 30 x30 158392 non-null object \n", " 31 x31 158392 non-null float64\n", " 32 x32 158392 non-null float64\n", " 33 x33 158392 non-null float64\n", " 34 x34 158392 non-null float64\n", " 35 x35 158392 non-null float64\n", " 36 x36 158392 non-null float64\n", " 37 x37 158392 non-null float64\n", " 38 x38 158392 non-null float64\n", " 39 x39 158392 non-null float64\n", " 40 x40 158392 non-null float64\n", " 41 x41 158392 non-null float64\n", " 42 x42 158392 non-null float64\n", " 43 x43 158392 non-null float64\n", " 44 x44 158392 non-null float64\n", " 45 x45 158392 non-null float64\n", " 46 x46 158392 non-null float64\n", " 47 x47 158392 non-null float64\n", " 48 x48 158392 non-null float64\n", " 49 x49 158392 non-null float64\n", " 50 y 158392 non-null object \n", "dtypes: float64(47), object(4)\n", "memory usage: 67.8+ MB\n" ] } ], "source": [ "df_final.info()" ] }, { "cell_type": "markdown", "id": "united-aging", "metadata": {}, "source": [ "## Assumptions\n", "\n", "- Details of the featurs are not available so analysis shall be done without taking specific domain into consideration.\n", "- Since false negative is costing higher focus shall be on minimizing false negative as much as possible.\n", "- Not knowing domain may not provide best model but it shall be competitve enough.\n", "\n", "\n", "## Limitations\n", "\n", "- The major limitation is we don't know what the dataset is about\n", "- cannot apply domain knowledge to the data\n", "\n", "\n", "\n", "\n", "## Sampling Techniques\n", "\n", "- From the plots that have examined above it is clear that class labels are not evenly distributed.\n", "- This is not highly imbalanced but moderately imbalanced data\n", "- Default stratified sampling shall be used for train/test split.\n", "- **Stratified sampling** will maintain the class distribution in train/test split as in original data\n", "- Data will be split into Train(80%) and Test(20%)\n" ] }, { "cell_type": "markdown", "id": "ultimate-ambassador", "metadata": {}, "source": [ "# Modeling Preparations" ] }, { "cell_type": "markdown", "id": "headed-lawrence", "metadata": {}, "source": [ "## Train/Test Split" ] }, { "cell_type": "code", "execution_count": 19, "id": "latest-lancaster", "metadata": {}, "outputs": [], "source": [ "target_df = df_final.iloc[:,50].astype(int)\n", "\n", "X_train, X_test, y_train, y_test = train_test_split( df_final.iloc[:,:-1], \n", " target_df, test_size=0.2, random_state=1999)" ] }, { "cell_type": "markdown", "id": "greenhouse-trance", "metadata": {}, "source": [ "### One Hot Encoding" ] }, { "cell_type": "code", "execution_count": 20, "id": "funny-malpractice", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 126713 entries, 42161 to 82580\n", "Data columns (total 67 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 x0 126713 non-null float64\n", " 1 x1 126713 non-null float64\n", " 2 x2 126713 non-null float64\n", " 3 x3 126713 non-null float64\n", " 4 x4 126713 non-null float64\n", " 5 x5 126713 non-null float64\n", " 6 x6 126713 non-null float64\n", " 7 x7 126713 non-null float64\n", " 8 x8 126713 non-null float64\n", " 9 x9 126713 non-null float64\n", " 10 x10 126713 non-null float64\n", " 11 x11 126713 non-null float64\n", " 12 x12 126713 non-null float64\n", " 13 x13 126713 non-null float64\n", " 14 x14 126713 non-null float64\n", " 15 x15 126713 non-null float64\n", " 16 x16 126713 non-null float64\n", " 17 x17 126713 non-null float64\n", " 18 x18 126713 non-null float64\n", " 19 x19 126713 non-null float64\n", " 20 x20 126713 non-null float64\n", " 21 x21 126713 non-null float64\n", " 22 x22 126713 non-null float64\n", " 23 x23 126713 non-null float64\n", " 24 x25 126713 non-null float64\n", " 25 x26 126713 non-null float64\n", " 26 x27 126713 non-null float64\n", " 27 x28 126713 non-null float64\n", " 28 x31 126713 non-null float64\n", " 29 x32 126713 non-null float64\n", " 30 x33 126713 non-null float64\n", " 31 x34 126713 non-null float64\n", " 32 x35 126713 non-null float64\n", " 33 x36 126713 non-null float64\n", " 34 x37 126713 non-null float64\n", " 35 x38 126713 non-null float64\n", " 36 x39 126713 non-null float64\n", " 37 x40 126713 non-null float64\n", " 38 x41 126713 non-null float64\n", " 39 x42 126713 non-null float64\n", " 40 x43 126713 non-null float64\n", " 41 x44 126713 non-null float64\n", " 42 x45 126713 non-null float64\n", " 43 x46 126713 non-null float64\n", " 44 x47 126713 non-null float64\n", " 45 x48 126713 non-null float64\n", " 46 x49 126713 non-null float64\n", " 47 x24_america 126713 non-null uint8 \n", " 48 x24_asia 126713 non-null uint8 \n", " 49 x24_euorpe 126713 non-null uint8 \n", " 50 x29_Apr 126713 non-null uint8 \n", " 51 x29_Aug 126713 non-null uint8 \n", " 52 x29_Dev 126713 non-null uint8 \n", " 53 x29_Feb 126713 non-null uint8 \n", " 54 x29_January 126713 non-null uint8 \n", " 55 x29_July 126713 non-null uint8 \n", " 56 x29_Jun 126713 non-null uint8 \n", " 57 x29_Mar 126713 non-null uint8 \n", " 58 x29_May 126713 non-null uint8 \n", " 59 x29_Nov 126713 non-null uint8 \n", " 60 x29_Oct 126713 non-null uint8 \n", " 61 x29_sept. 126713 non-null uint8 \n", " 62 x30_friday 126713 non-null uint8 \n", " 63 x30_monday 126713 non-null uint8 \n", " 64 x30_thurday 126713 non-null uint8 \n", " 65 x30_tuesday 126713 non-null uint8 \n", " 66 x30_wednesday 126713 non-null uint8 \n", "dtypes: float64(47), uint8(20)\n", "memory usage: 48.8 MB\n" ] } ], "source": [ "X_train_ohe = pd.get_dummies(X_train, prefix=['x24','x29','x30'])\n", "X_test_ohe = pd.get_dummies(X_test, prefix=['x24','x29','x30'])\n", "X_train_ohe.info()" ] }, { "cell_type": "markdown", "id": "divine-arrangement", "metadata": {}, "source": [ "### Normalize data" ] }, { "cell_type": "code", "execution_count": 21, "id": "endless-poultry", "metadata": {}, "outputs": [], "source": [ "sc = StandardScaler()\n", "XS_train_ohe = sc.fit_transform(X_train_ohe)\n", "XS_test_ohe = sc.transform(X_test_ohe)" ] }, { "cell_type": "markdown", "id": "eastern-combination", "metadata": {}, "source": [ "Store dataframes into csv. These spreadsheets shall be used to run different models on different machines." ] }, { "cell_type": "code", "execution_count": 22, "id": "nutritional-wheel", "metadata": {}, "outputs": [], "source": [ "#pd.DataFrame(XS_train_ohe,columns=list(X_train_ohe.columns)).to_csv(r'data/train_set.csv',index=False)\n", "#pd.DataFrame(XS_test_ohe ,columns=list(X_test_ohe.columns )).to_csv(r'data/test_set.csv',index=False)\n", "#pd.DataFrame(y_train,columns=['y']).to_csv(r'data/train_target.csv',index=False)\n", "#pd.DataFrame(y_test,columns=['y']).to_csv(r'data/test_target.csv',index=False)" ] }, { "cell_type": "markdown", "id": "banner-hamburg", "metadata": {}, "source": [ "## Principal Component Analysis\n", "\n", "Since we have 67 features in total after one hot encoding here we are checking if Principal component analysis is helpful in reducing features are not. Running PCA we found that at least 47 components which contributes to 90% variance in the data are required which is not significant reduction in the features. So we won't be using feature reduction using PCA. we will rather use recursive feature elimination techqniue for logistic regression. \n", "\n", "- 47 components which contributes 90% variance are required.\n", "- PCA is not much helpful in reducing features dramatically\n", "- We only explored option and found to be not useful for our modeling.\n" ] }, { "cell_type": "code", "execution_count": 23, "id": "involved-classroom", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "# Components=%{x}
Explained Variance=%{y}", "legendgroup": "", "line": { "color": "#636efa" }, "mode": "lines", "name": "", "orientation": "v", "showlegend": false, "stackgroup": "1", "type": "scatter", "x": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67 ], "xaxis": "x", "y": [ 0.05937922135040791, 0.11076819741229241, 0.14849950507857584, 0.17673522604596298, 0.20318741784704636, 0.22888493988640335, 0.25188487286805217, 0.27241471095955555, 0.29142132979693003, 0.30963348477532665, 0.3273119212642539, 0.34426402532582207, 0.3605790260829346, 0.37637993670112885, 0.39180878604724506, 0.40715394407881994, 0.4224865667331311, 0.4377957970539887, 0.45309718595934095, 0.4683839858833212, 0.4836305338906555, 0.49884236844869223, 0.514036692597111, 0.529209925984737, 0.5443552153724495, 0.5594841811872586, 0.5745585831742074, 0.5896239349421917, 0.6046632702845375, 0.6196776663465754, 0.6346857136889241, 0.6496491600342689, 0.6646031246339077, 0.6795357022860018, 0.6944502607018019, 0.7093376628269965, 0.7242179999455528, 0.73906385387729, 0.753902779600599, 0.7687059364928298, 0.783470195187496, 0.798222220275049, 0.8129619206674362, 0.8276838988378822, 0.842392967384669, 0.8570609889040666, 0.8717164419184523, 0.8863523998932815, 0.9009730914555079, 0.9155634600049207, 0.930104889559395, 0.9446288326670036, 0.959067836242417, 0.9716199086412872, 0.9830010305615372, 0.9932760382967772, 0.9998176794884575, 0.9999999999999237, 0.9999999999999997, 0.9999999999999997, 0.9999999999999997, 0.9999999999999997, 0.9999999999999997, 0.9999999999999997, 0.9999999999999997, 0.9999999999999997, 0.9999999999999997 ], "yaxis": "y" } ], "layout": { "height": 400, "legend": { "tracegroupgap": 0 }, "margin": { "t": 60 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "width": 800, "xaxis": { "anchor": "y", "domain": [ 0, 1 ], "title": { "text": "# Components" } }, "yaxis": { "anchor": "x", "domain": [ 0, 1 ], "title": { "text": "Explained Variance" } } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pca = PCA()\n", "\n", "PCA_train = pca.fit_transform(XS_train_ohe)\n", "PCA_test = pca.transform(XS_test_ohe)\n", "exp_var_cumul = np.cumsum(pca.explained_variance_ratio_)\n", "exp_var_cumul\n", "\n", "px.area(\n", " x=range(1, exp_var_cumul.shape[0] + 1),\n", " y=exp_var_cumul,\n", " width=800,\n", " height=400,\n", " labels={\"x\": \"# Components\", \"y\": \"Explained Variance\"})\n" ] }, { "cell_type": "markdown", "id": "prerequisite-utility", "metadata": {}, "source": [ "## Choice of Metric\n", "\n", "Choice of metric for model development\n", "\n", "The requirement is to minimize the cost function, which penalizes false negatives (FN) 50x more than false positives (FP).\n", "\n", "\t$ cost penalty for FN = $500\n", " \n", "\t$ cost penalty for FP = $10\n", " \n", "\t$ cost penalty for TP, TN = 0\n", " \n", "\n", "Effectively, above implies that for the same total cost, count of FN = 1/50th of FP. Or one needs to prioritize minimizing FN.\n", "\n", "Given above, Recall is the metric of choice to search for best model. Recall definition is given below:\n", "\n", "Recall = TP / TP +FN\n", "\n", "Ideal model should have very low or zero FN, hence requires high recall score.\n", "\n" ] }, { "cell_type": "markdown", "id": "assured-wesley", "metadata": {}, "source": [ "# Model Building & Evaluation\n", "\n", "\n", "**Logistic Regression**\n", "\n", "Sklearn comes with get_param function which returns list of hyperparameters for the given estimators. All it requires is to create object of the estimator.\n", "\n", "Following hyperparameter can be tuned for Logistic Regression with different solver (lbfgs,sag,saga,newton-cg,liblinear) and regularization (l1 an l2) :\n", "\n", "- C - also known as inverse regularization parameter. It controls penalty strength.\n", "\n", "**KNN - K Nearest Neighbors**\n", "\n", "For KNN n_neighbors is the hyperparameter that can be tuned. Different values of n_neighbor are tried and value that gives best model can be used for predictions. \n", "\n", "\n", "**Random Forest** \n", "\n", "Random forest is non-parametric classifier. There are many hyperparamters tha can be tuned to build random forest listed as below \n", "\n", "- n_estimators - The number of trees in the forest.\n", "- max_depth - maximum depth of the tree\n", "- min_samples_split - Minimum number of samples required to split internal nodes\n", "- min_samples_leafint - Minimum number of samples required to be at leaf nodes.\n", "- max_features - The number of features to be considered when looking at best split\n", "- min_weight_fraction_leaf - Minimum weighted fraction of the sum total weights required to be at leaf node.\n", "\n", "These are important hyperparamerters which can be tuned to build models. For our dataset are using only two hyperparameters:\n", "\n", "- n_estimators\n", "- max_features\n", "\n", "max features is number of features to consider when looking for the best split:\n", "\n", "If int, then consider max_features features at each split.\n", "\n", "If float, then max_features is a fraction and int(max_features * n_features) features are considered at each split.\n", "\n", "If “auto”, then max_features=sqrt(n_features).\n", "\n", "If “sqrt”, then max_features=sqrt(n_features) (same as “auto”).\n", "\n", "If “log2”, then max_features=log2(n_features).\n", "\n", "If None, then max_features=n_features. [scikitlearn-doc]\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "bridal-skiing", "metadata": {}, "source": [ "## Logistic Regression" ] }, { "cell_type": "markdown", "id": "bound-solution", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "broke-desire", "metadata": {}, "source": [ "### Logistic Regression Hyperparameters\n", "\n", "Following are the hyperparameters returned by get_params function of sklearn library." ] }, { "cell_type": "code", "execution_count": 24, "id": "unavailable-concept", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'C': 1.0,\n", " 'class_weight': None,\n", " 'dual': False,\n", " 'fit_intercept': True,\n", " 'intercept_scaling': 1,\n", " 'l1_ratio': None,\n", " 'max_iter': 100,\n", " 'multi_class': 'auto',\n", " 'n_jobs': None,\n", " 'penalty': 'l2',\n", " 'random_state': 1999,\n", " 'solver': 'lbfgs',\n", " 'tol': 0.0001,\n", " 'verbose': 0,\n", " 'warm_start': False}" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "log_model = LogisticRegression(random_state=1999,solver='lbfgs')\n", "log_model.get_params()" ] }, { "cell_type": "markdown", "id": "competitive-wilderness", "metadata": {}, "source": [ "### Recursive Feature Elimination\n", "\n", "Our dataset has 67 features after one hot encoding and not all features might be important. Recursive feature elimination finds optimal number of features and identifies features that should be kept in the model. Below code runs Recursive feature elimination with cross validation and finds optimal number of features and same shall be used for building model. \n", "\n", "Plot below is self-explanatory. It shows how recall/accuracy score varies with number of features increases. After running full cross validation number of optimal features are found to be - 60 \n" ] }, { "cell_type": "code", "execution_count": 25, "id": "literary-kennedy", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimal number of features : 60\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.feature_selection import RFECV\n", "from sklearn.model_selection import StratifiedKFold\n", "\n", "min_features_to_select= 60\n", "\n", "rfecv = RFECV(estimator=log_model, step=1, cv=StratifiedKFold(2),\n", " scoring='recall',\n", " min_features_to_select=min_features_to_select)\n", "rfecv.fit(XS_train_ohe, y_train)\n", "\n", "print(\"Optimal number of features : %d\" % rfecv.n_features_)\n", "\n", "# Plot number of features VS. cross-validation scores\n", "plt.figure()\n", "plt.xlabel(\"Number of features selected\")\n", "plt.ylabel(\"Cross validation score (nb of correct classifications)\")\n", "plt.plot(range(min_features_to_select,\n", " len(rfecv.grid_scores_) + min_features_to_select),\n", " rfecv.grid_scores_)\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "id": "private-legend", "metadata": {}, "source": [ "### Hyperparameter Tuning\n", "\n", "Grid search has been executed for logistic regression with following:\n", "\n", "- C with different values - [0.1,0.01,0.001,0.0001,0.5,0.6,10]\n", "- Two solvers ['lbfgs','sag']\n", "- Both optimizers supports L2 regularization. So only L2 has been used in Grid Search.\n", "- Random seed - 1999 for reproducibility\n", "- max_iter set to 500 for sag solver. sag is stochastic gradient descent.\n", "\n", "With these variables set Grid search runs for all possible combinations of the grid parameters. Result of grid search is stored in the file as shown in below code.\n" ] }, { "cell_type": "code", "execution_count": 26, "id": "choice-insulin", "metadata": {}, "outputs": [], "source": [ "# Load Grid Search Result here\n", "\n", "if(path.exists(\"data/logistic_final_grid_result.dat\")):\n", " grid_result = pickle.load(open(\"data/logistic_final_grid_result.dat\", \"rb\")) \n", "else: \n", " log_model = LogisticRegression(random_state=1999)\n", " cs07_random_state_ = 1999\n", "\n", " #\n", " # Run Grid Search\n", " #\n", "\n", " log_param_grid = [\n", " {'penalty' : ['l2'],\n", " 'C' : [0.1,0.01,0.001,0.0001,0.5,0.6,10],\n", " 'solver' : ['sag','lbfgs'],\n", " 'max_iter' : [500],\n", " 'random_state' : [cs07_random_state_]} ]\n", "\n", " cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1999)\n", "\n", " print('Running RFE : ')\n", "\n", " rfe = RFE(log_model,n_features_to_select=61, step=1)\n", " rfe = rfe.fit(XS_train_ohe, y_train.flatten())\n", "\n", " print(rfe.support_)\n", " print(rfe.ranking_)\n", "\n", " print('Running grid search : ')\n", " grid_search = GridSearchCV(estimator=log_model, param_grid=log_param_grid, n_jobs=-1, cv=cv, scoring=['roc_auc','accuracy','f1','recall','precision'],refit='f1')\n", "\n", " print('Fit grid search : ')\n", " grid_result = grid_search.fit(XS_train_ohe[:,rfe.support_], y_train.flatten())\n", "\n", " print('store logistic grid results')\n", " pickle.dump( grid_result, open( \"data/logistic_final_grid_result.dat\", \"wb\" )) \n" ] }, { "cell_type": "markdown", "id": "discrete-sleep", "metadata": {}, "source": [ "### Best Parameters\n", "\n", "Grid search runs for all grid parameters and finds best from all combinations in runs in best_score_ and best_params_." ] }, { "cell_type": "code", "execution_count": 27, "id": "later-title", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best: 0.581015 using {'C': 0.6, 'max_iter': 500, 'penalty': 'l2', 'random_state': 1999, 'solver': 'lbfgs'}\n" ] } ], "source": [ "# summarize results\n", "print(\"Best: %f using %s\" % (grid_result.best_score_, grid_result.best_params_))" ] }, { "cell_type": "markdown", "id": "assigned-tactics", "metadata": {}, "source": [ "**Grid Search Result**" ] }, { "cell_type": "code", "execution_count": 28, "id": "sixth-catalyst", "metadata": {}, "outputs": [], "source": [ "log_score = pd.DataFrame.from_dict(grid_result.cv_results_)" ] }, { "cell_type": "code", "execution_count": 29, "id": "reliable-shanghai", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_Cparam_max_iterparam_penaltyparam_random_stateparam_solverparams...split23_test_precisionsplit24_test_precisionsplit25_test_precisionsplit26_test_precisionsplit27_test_precisionsplit28_test_precisionsplit29_test_precisionmean_test_precisionstd_test_precisionrank_test_precision
013.4328511.4741840.0405970.0056340.1500l21999sag{'C': 0.1, 'max_iter': 500, 'penalty': 'l2', '......0.6686730.6709410.6579280.6707380.6593650.6562820.6657280.6655840.0047268
10.7442600.0518030.0420620.0060930.1500l21999lbfgs{'C': 0.1, 'max_iter': 500, 'penalty': 'l2', '......0.6686730.6708570.6581000.6707380.6593650.6562820.6658990.6655990.0047167
210.5018191.2272080.0435120.0092690.01500l21999sag{'C': 0.01, 'max_iter': 500, 'penalty': 'l2', ......0.6690110.6710360.6577420.6704840.6600100.6563530.6656420.6657910.0048065
30.7895550.1144260.0449560.0099500.01500l21999lbfgs{'C': 0.01, 'max_iter': 500, 'penalty': 'l2', ......0.6690110.6709510.6577420.6703980.6599260.6563530.6658120.6657770.0048016
44.7740411.1203330.0413100.0102120.001500l21999sag{'C': 0.001, 'max_iter': 500, 'penalty': 'l2',......0.6714250.6722340.6597060.6732860.6631550.6590150.6683170.6675500.0050754
\n", "

5 rows × 175 columns

\n", "
" ], "text/plain": [ " mean_fit_time std_fit_time mean_score_time std_score_time param_C \\\n", "0 13.432851 1.474184 0.040597 0.005634 0.1 \n", "1 0.744260 0.051803 0.042062 0.006093 0.1 \n", "2 10.501819 1.227208 0.043512 0.009269 0.01 \n", "3 0.789555 0.114426 0.044956 0.009950 0.01 \n", "4 4.774041 1.120333 0.041310 0.010212 0.001 \n", "\n", " param_max_iter param_penalty param_random_state param_solver \\\n", "0 500 l2 1999 sag \n", "1 500 l2 1999 lbfgs \n", "2 500 l2 1999 sag \n", "3 500 l2 1999 lbfgs \n", "4 500 l2 1999 sag \n", "\n", " params ... \\\n", "0 {'C': 0.1, 'max_iter': 500, 'penalty': 'l2', '... ... \n", "1 {'C': 0.1, 'max_iter': 500, 'penalty': 'l2', '... ... \n", "2 {'C': 0.01, 'max_iter': 500, 'penalty': 'l2', ... ... \n", "3 {'C': 0.01, 'max_iter': 500, 'penalty': 'l2', ... ... \n", "4 {'C': 0.001, 'max_iter': 500, 'penalty': 'l2',... ... \n", "\n", " split23_test_precision split24_test_precision split25_test_precision \\\n", "0 0.668673 0.670941 0.657928 \n", "1 0.668673 0.670857 0.658100 \n", "2 0.669011 0.671036 0.657742 \n", "3 0.669011 0.670951 0.657742 \n", "4 0.671425 0.672234 0.659706 \n", "\n", " split26_test_precision split27_test_precision split28_test_precision \\\n", "0 0.670738 0.659365 0.656282 \n", "1 0.670738 0.659365 0.656282 \n", "2 0.670484 0.660010 0.656353 \n", "3 0.670398 0.659926 0.656353 \n", "4 0.673286 0.663155 0.659015 \n", "\n", " split29_test_precision mean_test_precision std_test_precision \\\n", "0 0.665728 0.665584 0.004726 \n", "1 0.665899 0.665599 0.004716 \n", "2 0.665642 0.665791 0.004806 \n", "3 0.665812 0.665777 0.004801 \n", "4 0.668317 0.667550 0.005075 \n", "\n", " rank_test_precision \n", "0 8 \n", "1 7 \n", "2 5 \n", "3 6 \n", "4 4 \n", "\n", "[5 rows x 175 columns]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "log_score.head()" ] }, { "cell_type": "code", "execution_count": 30, "id": "rocky-ordinary", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GridSearchCV(cv=RepeatedStratifiedKFold(n_repeats=3, n_splits=10, random_state=1999),\n", " estimator=LogisticRegression(random_state=1999), n_jobs=-1,\n", " param_grid=[{'C': [0.1, 0.01, 0.001, 0.0001, 0.5, 0.6, 10],\n", " 'max_iter': [500], 'penalty': ['l2'],\n", " 'random_state': [1999], 'solver': ['sag', 'lbfgs']}],\n", " refit='f1',\n", " scoring=['roc_auc', 'accuracy', 'f1', 'recall', 'precision'])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid_result" ] }, { "cell_type": "code", "execution_count": 31, "id": "prompt-agent", "metadata": {}, "outputs": [ { "data": { "image/png": "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d+8uMYbNmzfz6aefEh8fz969e/n4449JSEhgzpw5/OpXv+LNN9/kxRdfZMOGDSxatIiEhAR27drFKaecwm233cb27dtp1KgRL730EjfddNMR5c+bN49hw4YBMG7cOCZOnMiiRYsAWLFiBdOnT2fevHkkJiZy2223MXXqVDp27EhaWhpLly4FYM+ePdSrV4+JEycyfvx4UlNTC8tv06YNixcvpnv37qVY47EpCRMREZHDPPPMM7z11lsAbNq0iTVr1rB9+3Z+8IMfFD6CoX79+gDMmTOHadOmFU57yimnlFj+1VdfTXx8PADp6enceOONrFmzBjMjJyensNzRo0eTkJBw2Pyuv/56pkyZwqhRo5g/fz6vvPLKEeVv3bqVRo2ivjOb999/n4ULF9KjRw8AsrKyaNy4MZdeeinr1q1jzJgxXHzxxQwYMCBm/I0bN2bLli1KwkRERE5UJdVYVYS5c+cyZ84c5s+fT40aNTjvvPOO6sGxkb8WLDp9zZo1C//+9a9/zfnnn89bb73Fhg0bOO+884otd9SoUVx66aUkJSVx9dVXFyZpkZKTk2PG7Jzjxhtv5LHHHjti2OLFi/nXv/7F888/zxtvvMGkSZOilpGdnU1ycnKxcZaG+oSJiIhIofT0dE455RRq1KjBypUr+eyzzwDo1asXH330EevXrwcobI7s378/zz77bOH0Bc2Rp556KitWrCA/P7+wVi3W/Jo3bw74TvAF+vfvzwsvvFDY96pgfs2aNaNZs2aMHTuWUaNGRS2zffv2rF27tvBzYmJiYQ1bv379mDFjBt99911huRs3bmTHjh3k5+dz1VVXMXbsWL788ksAateuTUZGxmHlr169mk6dOsVcptJSEiYiIiKFBg0aRG5uLu3bt+e+++6jV69eADRq1IgXX3yRK6+8kq5du3LttdcC8OCDD7J79246depE165d+fDDDwHfF+uSSy7h3HPPpWnTpjHnd88993D//ffTrVu3wzq7/8///A+nnXYaXbp0oWvXrrz22muFw4YPH07Lli1p37591DIvvvhi5s6dW/j5lltuoUuXLgwfPpwOHTowduxYBgwYQJcuXejfvz9bt24lLS2N8847j5SUFEaMGFFYU1bwQ4KCjvnffvstycnJNGnS5OhWcARzzh1zIZUpNTXVLViwIOwwREREKsSKFStiJhfi3XHHHXTr1o0f//jHUYdnZWVx/vnnM2/evMK+Z+Xlqaeeok6dOlHnHW3bmdlC51zqESOjmjARERGpQrp3785///tfRowYEXOc5ORkHn74YdLS0sp9/vXq1ePGG28sl7LUMV9ERESqjIULF5ZqvIEDB1bI/GP1QzsaqgkTERERCYGSMBEREZEQKAkTERERCYGSMBEREZEQKAkTERERCYGSMBERETnMM888Q/v27Rk+fDgrV66kd+/eVK9enfHjx8ecxjnHBRdcwN69e9mzZw/PPffcUc//6aefZv/+/YWfL7zwwlK9GLyqURImIiIih3nuued47733mDp1KvXr1+eZZ57h7rvvLnaamTNn0rVrV+rUqVPuSdj1119/TOUdr/ScMBERkePUrFmz2LZtW7mW2aRJEwYNiv1i8NGjR7Nu3TouuugibrrpJn7+85/TuHFj3n333WLLnTp1KrfccgsA9913H19//TUpKSn079+f3//+9/z+97/njTfe4MCBA1xxxRU8/PDD7Nu3j2uuuYbNmzeTl5fHr3/9a7799lu2bNnC+eefT8OGDfnwww+57LLL6Nu3Lw888EC5rouwKQkTERGRQs8//zyzZs3iww8/pGHDhqWebt68ebzwwguAf2/k0qVLWbRoEQCzZ89mzZo1fP755zjnuOyyy/joo4/Yvn07zZo1K0zw0tPTqVu3Lk8++eRh8z/llFM4cOAAO3fupEGDBuW8xOFREiYiInKcKq7G6niza9cuateuHXXY7NmzmT17Nt26dQMgMzOTNWvW0LdvX37xi19w7733cskll9C3b9+Y5Tdu3JgtW7YoCRMRERGJlJCQQH5+PnFxR3Y3d85x//3385Of/OSIYV9++SUzZ87kwQcfpF+/fvzmN7+JWn52djbJycnlHneY1DFfREREjlm7du1Yt24dALVr1yYjI6Nw2MCBA5k0aRKZmZkApKWl8d1337FlyxZq1KjBiBEj+OUvf8mXX34ZdXrnHNu2baN169aVt0CVQDVhIiIiEtO2bdtITU1l7969xMXF8fTTT7N8+XLq1Klz2HgXX3wxc+fOpU2bNjRo0IA+ffrQqVMnLrroIn7/+9+zYsUKevfuDUCtWrWYMmUKa9eu5Ze//CVxcXEkJibypz/9CYBbbrmFQYMG0axZMz788EMWLlxIr169SEg4sdIWc86FHUOZpKamugULFoQdhoiISIVYsWIF7du3DzuMMtu6dSs33HAD7733XrmX/dOf/pTLLruMfv36lXvZ5SnatjOzhc651GjjqzlSREREjlnTpk25+eab2bt3b7mX3alTp+M+ATsaJ1a9noiIiITmmmuuqZByb7755gopN2yqCRMREREJgZIwERERkRAoCRMREREJgZIwERERqXALFizgzjvvjDl8y5YtDBkypNzmN2TIkMLnlj366KNHXc7kyZPZsmVL4eehQ4eyZs2aY44PKjgJM7NBZrbKzNaa2X1Rhp9mZh+a2Vdm9l8z+1FFxiMiIiLlIy8vr0zjp6am8swzz8Qc3qxZM2bMmHGsYQGwbNky8vLyOOOMM4DyTcJuvfVWnnjiiWOOESowCTOzeOBZ4CKgAzDMzDoUGe1B4A3nXDdgKPBcRcUjIiIiJduwYQNnnXUWw4cPp3379gwZMoT9+/cD0Lp1a+69917OPvts/va3vzF79mx69+7N2WefzdVXX134RPwvvviCc889l65du9KzZ08yMjKYO3cul1xyCQD//ve/SUlJISUlhW7dupGRkcGGDRvo1KkT4F9RNGrUKDp37ky3bt348MMPAZ8QXXnllQwaNIi2bdtyzz33RF2GqVOncvnllwNw3333kZWVRUpKCsOHDwdgypQp9OzZk5SUFH7yk5+Ql5dHXl4eI0eOpFOnTnTu3JmnnnqKGTNmsGDBAoYPH05KSgpZWVn07duXOXPmkJube8zruiIfUdETWOucWwdgZtOAy4HlEeM4oOCRu3WBLYiIiAgAs2bBtm3lW2aTJlDSe8FXrVrFX//6V/r06cNNN93Ec889x9133w1AgwYN+PLLL9mxYwdXXnklc+bMoWbNmjz++OM8+eST3HfffVx77bVMnz6dHj16sHfv3iPe+Th+/HieffZZ+vTpQ2ZmJklJSYcNf/bZZzEzlixZwsqVKxkwYACrV68GYNGiRXz11VdUr16ddu3aMWbMGFq2bHnY9PPmzWPYsGEAjBs3jokTJ7Jo0SLAP1B1+vTpzJs3j8TERG677TamTp1Kx44dSUtLY+nSpQDs2bOHevXqMXHiRMaPH09q6qHnrbZp04bFixfTvXv3Mq79w1Vkc2RzYFPE583Bd5EeAkaY2WZgJjAmWkFmdouZLTCzBdu3b6+IWEVERCTQsmVL+vTpA8CIESP45JNPCodde+21AHz22WcsX76cPn36kJKSwssvv8zGjRtZtWoVTZs2pUePHgDUqVPniNcN9enTh7vuuotnnnmGPXv2HDH8k08+YcSIEQCcddZZtGrVqjAJ69evH3Xr1iUpKYkOHTqwcePGI+LfunUrjRo1irps77//PgsXLqRHjx6kpKTw/vvvs27dOs444wzWrVvHmDFjmDVr1hGvZYrUuHHjw5ooj1bYD2sdBkx2zv3BzHoDr5pZJ+dcfuRIzrkXgRfBv7YohDhFREQqXUk1VhXFzGJ+rlmzJuBfqt2/f39ef/31w8ZdsmRJieXfd999XHzxxcycOZM+fWT0/QoAACAASURBVPrwr3/964jasFiqV69e+Hd8fHzUZsHk5GSys7OjTu+c48Ybb+Sxxx47YtjixYv517/+xfPPP88bb7zBpEmTopaRnZ19RO3e0ajImrA0ILJ+sEXwXaQfA28AOOfmA0lAwwqMSURERErwzTffMH/+fABee+01vv/97x8xTq9evZg3bx5r164FYN++faxevZp27dqxdetWvvjiCwAyMjKOSJS+/vprOnfuzL333kuPHj1YuXLlYcP79u3L1KlTAVi9ejXffPMN7dq1K3X87du3L4wLIDExkZycHMDXpM2YMYPvvvsOgF27drFx40Z27NhBfn4+V111FWPHjuXLL78EoHbt2mRkZBxW/urVqwv7rx2LikzCvgDamtnpZlYN3/H+nSLjfAP0AzCz9vgkTO2NIiIiIWrXrh3PPvss7du3Z/fu3dx6661HjNOoUSMmT57MsGHD6NKlC71792blypVUq1aN6dOnM2bMGLp27Ur//v2PqJV6+umn6dSpE126dCExMZGLLrrosOG33XYb+fn5dO7cmWuvvZbJkycfVgNWkosvvpi5c+cWfr7lllvo0qULw4cPp0OHDowdO5YBAwbQpUsX+vfvz9atW0lLS+O8884jJSWFESNGFNaUjRw5ktGjRxd2zP/2229JTk6mSZMmZVij0ZlzFde6Fzxy4mkgHpjknPtfM/sdsMA5907wa8k/A7XwnfTvcc7NLq7M1NRUt2DBggqLWUREJEwrVqygffv2oc1/w4YNXHLJJYUd1KuirKwszj//fObNm0d8fHy5lv3UU09Rp04dfvzjHx8xLNq2M7OFzrnUI0amgvuEOedm4jvcR373m4i/lwN9KjIGERERObkkJyfz8MMP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3WrX5tIGDbhg0SIA4oJETDVghyQmJnL66aeHHYZUgiqXhFUzo01yshItEZEqKFqiFWemBExOSlWyU5QSMBEREanqqmQSJiIiIlLVKQkTERERCYGSMBEREZEQKAkTERERCUGV+3WkiIhUfb9o2TLsEERCpyRMREQq3aV6JIWImiNFRKTyrdq/n1X794cdhkioVBMmIiKV7ierVgEwt1u3kCMRCY+SMBERqXSPnnFG2CGIhE5JmIiIVLpz69YNOwSR0KlPmIiIVLpP09P5ND097DBEQqWaMBERqXS/WrcOUJ8wObmpJkxEREQkBErCREREREKgJExEREQkBErCREREREKgJExEREQkBErCREREREKgJExEREQkBErCREREREKgh7WKiEil07sjRZSEiYhICPTuSBE1R4qISAj07kgR1YSJiEgI9O5IESVhIiISghfatQs7BJHQKQkTEZFK165GjbBDEAmd+oSJiEil+8eOHfxjx46wwxAJlWrCRESk0v1h0yYALm3YMORIRMKjmjARERGRECgJExEREQmBkjARERGRECgJExEREQmBkjARERGRECgJExEREQmBkjARERGRECgJExEREQmBHtYqIiKVTu+OFFESJiIiIdC7I0WqYBLmcOw7uK/wc0JcAtUTqpe5nIN5BzmYd7A8QxMRkVKauWsPhnF1k+ZhhyISmgpNwsxsEPBHIB74i3NuXJHhTwHnBx9rAI2dc/WKKzMnL4fNezdjZuS7fGol1qJF3Raliiff5ZOVk8XurN3sy9mHmYEr82KJiMgx+sM3O8DgqlObEmfqniwnpwpLwswsHngW6A9sBr4ws3ecc8sLxnHO/Txi/DFAt5LK3Z21mzdXvAn4hKxT404lJmEH8w6ScSCD3Vm7yTyYyde7v2bd7nUcyDtwVMsmIiLH5gKXQHJCEtAr7FBEQlORNWE9gbXOuXUAZjYNuBxYHmP8YcBvSyr0YN5B6lSrQ0J8As45alerHXW8glqvnVk72X9wP2kZaazdtZa1u9eSn59P09pNObXmqUe3ZCLHEafqXKmiEqzK9YgRKVcVeQQ0BzZFfN4MnBNtRDNrBZwOfBBj+C3ALQB1m9fl8rMuJz4unpy8nCOqsQ/mHWRv9l72ZO8h/UA6X+/+mpU7VpKenU5SQhIpp6bQ+dTONKzRsBwWUUREjsb0HekcyFVrhJzc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CYGSMBERqXS3rFrFLatWhR2GSKjUHCkiIpVu9f79YYcgEjrVhImIiIiEQEmYiIiISAiUhImIiIiEQEmYiIiISAiUhImIiIiEQEmYiIiISAiUhImIiIiEQM8JExGRSndmjRphhyASOiVhIiJS6fTuSBE1R4qIiIiEQkmYiIhUOr07UkTNkSIiEoIGiYlhhyASOiVhIiJS6R4744ywQxAJnZojRUREREKgJExERCrdVUuXctXSpWGHIRIqNUeKiEil25mTE3YIIqFTTZiIiIhICJSEiYiIiIRASZiIiIhICJSEiYiIiIRASZiIiIhICJSEiYiIiIRASZiIiIhICPScMBERqXS969YNOwSR0CkJExGRSqd3R4qoOVJEREQkFKVOwsws2czaVWQwIiJyctC7I0VKmYSZ2aXAImBW8DnFzN6pyMBEROTE1btOHXrXqRN2GCKhKm2fsIeAnsBcAOfcIjM7vYJiEhGRE9zdp50WdggioSttc2SOcy69yHeuvIMREREROVmUtiZsmZldB8SbWVvgTuDTigtLREROZOd99RUAc7t1CzkSkfCUtiZsDNAROAC8BqQDP6uooEREREROdCXWhJlZPPCuc+584IGKD0lERETkxFdiTZhzLg/INzM93lhERESknJS2T1gmsMTM3gP2FXzpnLuzuInMbBDwRyAe+ItzblyUca7B//rSAYudc9eVMiYRERGRKqu0Sdjfg3+lFjRjPgv0BzYDX5jZO8655RHjtAXuB/o453abWeOyzENERESkqipVEuace9nMqgFnBl+tcs7llDBZT2Ctc24dgJlNAy4HlkeMczPwrHNudzCf78oSvIiIiEhVVdon5p8HrMHXbD0HrDazH5QwWXNgU8TnzcF3kc4EzjSzeWb2WdB8GW3+t5jZAjNbsH379tKELCIiInJcK21z5B+AAc65VQBmdibwOtC9HObfFjgPaAF8ZGadnXN7Ikdyzr0IvAiQmpqqh8SKiIhIlVfaJCyxIAEDcM6tNrPEEqZJA1pGfG4RfBdpM/CfoGlzvZmtxidlX5QyLhERqYIuadAg7BBEQlfaJGyBmf0FmBJ8Hg4sKGGaL4C2wTsm04ChQNFfPv4fMAx4ycwa4psn15UyJhERqaL07kiR0idhtwK3419XBPAxvm9YTM65XDO7A/gX/hEVk5xzy8zsd8AC59w7wbABZrYc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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "log_sag_df = log_score[log_score['param_solver']=='lbfgs']\n", "log_sag = {}\n", "\n", "for column in log_sag_df.columns:\n", " log_sag[column] = log_sag_df[column].to_numpy()\n", "\n", "\n", "scoring = {'accuracy': make_scorer(accuracy_score),'recall': make_scorer(recall_score),\n", " 'precision': make_scorer(precision_score),'f1': make_scorer(f1_score), \n", " 'roc_auc' : 'roc_auc'\n", " }\n", "X_sag = np.array(log_sag['param_C'], dtype=float)\n", "\n", "viz_hyperparameter(log_sag,X_sag,xlabel=\"Parameter C\",scoring=scoring,\n", " xlim=[0,15],ylim=[0.35,.85],plot_title=\" : Logistic lbfgs solver\")" ] }, { "cell_type": "markdown", "id": "stainless-dubai", "metadata": {}, "source": [ "Grid search result obained above was built with all evaluation metric against hyperparameter C:\n", "\n", "- recall\n", "- precision\n", "- f1\n", "- roc_auc\n", "\n", "\n", "C=0.6 is the optimal value found for the logistic regression. It is quite evident from the plot that precision,recall, f1 score and accuracy remains constant if we increase value of C. It cannot be tuned beyond 0.6\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "abstract-gospel", "metadata": {}, "source": [ "### Build Logistic Regression " ] }, { "cell_type": "code", "execution_count": 32, "id": "engaged-document", "metadata": {}, "outputs": [], "source": [ "logit_model = LogisticRegression(C=0.6, max_iter = 500, \n", " penalty = 'l2', random_state=1999, \n", " solver='lbfgs')\n", "\n", "rfe = RFE(logit_model,n_features_to_select=60, step=1)\n", "rfe = rfe.fit(XS_train_ohe, y_train)\n", "\n", "logit_model = logit_model.fit(XS_train_ohe[:,rfe.support_],y_train)" ] }, { "cell_type": "markdown", "id": "straight-chorus", "metadata": {}, "source": [ "### Feature Importance" ] }, { "cell_type": "code", "execution_count": 33, "id": "enabling-geology", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model_coef = np.argsort(logit_model.coef_[0])[::-1]\n", "importance = logit_model.coef_[0][model_coef]\n", "\n", "plt.figure(figsize=(10,10))\n", "x1=sns.barplot(x=importance, y=list(X_test_ohe.columns[model_coef]))" ] }, { "cell_type": "code", "execution_count": 34, "id": "invalid-running", "metadata": {}, "outputs": [], "source": [ "y_hat = np.zeros(y_train.shape)\n", "y_hat = logit_model.predict(XS_test_ohe[:,rfe.support_])\n", "cm = confusion_matrix(y_target=y_test, y_predicted=y_hat)\n", "acc = accuracy_score(y_test, y_hat)\n", "recall= recall_score(y_test, y_hat)\n", "precision= precision_score(y_test, y_hat)\n", "f1= f1_score(y_test, y_hat)" ] }, { "cell_type": "markdown", "id": "expanded-northwest", "metadata": {}, "source": [ "### Model Performance" ] }, { "cell_type": "code", "execution_count": 35, "id": "ahead-jesus", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Accuracy : 0.7055778275829414\n", "Precision : 0.6728313068355982\n", "Recall : 0.518095987411487\n", "F1-Score : 0.5854113881850913\n" ] } ], "source": [ "from mlxtend.plotting import plot_confusion_matrix\n", "fig, ax = plot_confusion_matrix(conf_mat=cm)\n", "plt.title('Confusion Matrix')\n", "plt.show()\n", "print(\"Accuracy : \", acc)\n", "print(\"Precision : \", precision)\n", "print(\"Recall : \", recall)\n", "print(\"F1-Score : \", f1)\n" ] }, { "cell_type": "code", "execution_count": 36, "id": "cheap-citation", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cost_matrix = np.array([[0, 10],[500, 0]])\n", "fig, ax = plot_confusion_matrix(conf_mat=cost_matrix,cmap=\"YlOrRd\")\n", "plt.title('Cost Matrix')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "representative-bryan", "metadata": {}, "source": [ "### Build Cost Matrix" ] }, { "cell_type": "code", "execution_count": 37, "id": "institutional-volunteer", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cost_calc = np.multiply(cm, cost_matrix)\n", "fig, ax = plot_confusion_matrix(conf_mat=cost_calc,cmap=\"OrRd\")\n", "plt.title('Cost Calculation')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "pretty-probability", "metadata": {}, "source": [ "### Precision Recall Curve" ] }, { "cell_type": "code", "execution_count": 38, "id": "graphic-convergence", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Logistic Regression : f1=0.585 auc=0.676\n" ] }, { "data": { "image/png": "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N28eS5YsYfny5Tz++OPMmjWr4SwmGQcddFDD95GP0dTlRGdxkI7rcwhtorfZtm1jHNfnkMwWJJIBg3p1Y/6lx3HNqUcx/9LjQgmBLl260K1bN55//nkAfvWrXzFixAi6du1K586deemllwBYsGBB3Ne/+eabDBgwgO9973sMHjyY1157jc6dO7Nz58647UePHs3cuXMblhNdGjIzbrnlFl588UVee+01vvGNb3DPPfc0fLCuXr0aiJyVLFy4EID169c3+YE9atQoHn30Ud5//30APvroI7Zu3coHH3xAXV0dZ511FjNnzuRvf/sbdXV1vPPOO5x00knceuut7Nixg127dn1uf8OHD2/4ucyfP5+vf/3rTR5LEAqup3Rj9LoowP4655bH17Fo2gmZLUokAwb16hZoAOzevZuePXs2LF9zzTU89NBDXHHFFezevZs+ffrwy1/+EoAHHniAyy67jDZt2jBixAi6dOlywP7uuusunnnmGdq0acMxxxzDaaedRps2bSgqKuLYY49l8uTJDBw4sKH99ddfz1VXXUX//v0pKirixhtv5Mwzz2yy3o4dO3Lttddy2223ce+993L11VdTWlpKXV0dvXv35oknnmDq1KlMmjSJkpISjj76aI455pi4tZaUlDBz5kxOPfVU6urqaNeuHXPnzqVjx45MmTKFuro6AGbPnk1tbS0XXnghO3bswN2ZMWMGXbt2/dz+7rnnHqZMmcJtt91Gjx49Gn5uYbGgTi3Spby83FOZmOaiB17i+Tc+iLtNTxlLrtqwYQP9+vXLdBlJ27VrV8NzB5WVlbz33nvcfffdGa7qQLW1tezbt48OHTrw5ptvcsopp7Bx40bat8/uW9Lj/Xsws1XuXh6vfcGdEbxSfWAPfb3iiiUKA5E0WLJkCbNnz2b//v306tWLBx98MNMlxbV7925OOukk9u3bh7vz05/+NOtDoDUKLgh26HZRkYw799xzOffcczNdRrM6d+5cEFPjFlxn8aFdO2S6BJFQ5NplXglHa/4dFFwQrKgYlekSRALXoUMHPvzwQ4VBgaufj6BDh5b9wVtwncX1mhp1tA2wWf0EkmM0Q5nUa2qGMnUWx7GlclzcMKjLQC0iqWrXrl2LZqQSiVVwl4ZiHVSkiTxERAo6CKYcH/8vqNF3PJveQkREMqigg6BibD96ffELB6x/o+YTrl6w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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "y_score = logit_model.predict_proba(XS_test_ohe[:,rfe.support_])\n", "logit_probs = y_score[:, 1]\n", "# predict class values\n", "logit_precision, logit_recall, logit_thresholds = precision_recall_curve(y_test, logit_probs)\n", "logit_f1, logit_auc = f1_score(y_test, y_hat), auc(logit_recall, logit_precision)\n", "# summarize scores\n", "print('Logistic Regression : f1=%.3f auc=%.3f' % (logit_f1, logit_auc))\n", "pyplot.plot(logit_recall, logit_precision, marker='.', label='Logistic Regression')\n", "# axis labels\n", "pyplot.xlabel('Recall')\n", "pyplot.ylabel('Precision')\n", "# show the legend\n", "pyplot.legend()\n", "# show the plot\n", "pyplot.show()" ] }, { "cell_type": "markdown", "id": "moral-electric", "metadata": {}, "source": [ "### Cost Curve" ] }, { "cell_type": "code", "execution_count": 39, "id": "latter-trustee", "metadata": {}, "outputs": [ { "data": { "image/png": "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6v9Vo0aN2LJlS5HlQVRqcktA6SAJhYhUKpwyMjJCbjVpOMVHw4YNufHGG3nvvffYsmULTz75JN26dSuyz1133VUinObPn8/ixYt1miUVF9qCClnytaBi1WIC7dJzK9u2mTFjBl999RVz586lVq1aRbZ37tyZVatWcdJJJ/H+++9z1llnxalSFUtuaUFpQIUseQIqVueZCmg4JaYff/yR008/HfCfq9q5cye1a9cu3J6Xl8fhw4dLhJpKfG4JKO3iSxEF3XiJFE6Wz9ZwiiOPx8Ntt91WOL1ScDgBfP755zRs2JBBgwYxffp0tm1zyx9xKlloCypkbvnwhdeCciKQCmirKTXl5eWxZ88eGjVqVOTx22+/nRdeeKHIY506dWLo0KFcdtllnHnmmaSl6d/AicgtLSgNqJAlTkA5GUoQXjCBhlOqKD7FUnGNGzfmoosuYtCgQQwZMkS7AhOIBlSENKDKDiingwli22oCDadEs2nTJubOncucOXNYvHhxiSXsC1StWpWBAwcyZMgQfvOb39C2bduo/LwqZ1QUULbXegW4BNhh+exOUatDAypU7gyoaH3ItdWkwnXw4EHmz5/Pu+++y0cffcSuXbvK3LdFixZ0796dAQMG0K9fP516yWVCCKjeQA7wugZUEA2oplH9yzOSnwcNJ1Vcfn4+3333HXPmzGHevHl8//335e6/detWmjZ112KcqSyULj7ba7UC3tOACpKqASXSLKrHj0cwgYZTqvjxxx+ZO3cun376Kf/+97/Jyckp3NakSRN+/vnnIn94ffPNN4wYMYJzzjmHSy+9lMsuuyweZacstwSULljoYm4MpQIaTioc7dq14/777+f+++/n6NGjrFmzhsWLF/PJJ59QtWrVEr0CK1asYPXq1axevZqcnJwSAbV9+3YaN25MlSr6KyxKqojIsqD7WcaYrJgXEesXVKWLdhgF02BS8VStWjW6detGt27duPvuu0vdJ7hLsEePHiW2//73v2fhwoV4vV6aNWtGq1at6NixI16vF8uyOOmkk3QQRuXkGmO6x7sIDagYi2UQBatsV64TwQQaTio0f/7zn7n66qv5/PPPGTBgQIntP/zwA0eOHGHlypWsXLmyxPa6devi9XoLb+3bt8fr9dK2bVuqVq0ai29BOUDPQYUstHNQHTtewJo1a6NcS+g0mFSyycvL47TTTmPj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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "$ Cost and Classification Error Rates for different classification thresholds:\n", " Threshold $Cost FNr FPr Acc\n", "0 0.006807 189690 0.000000 1.000000 0.401212\n", "1 0.008014 190190 0.000079 1.000000 0.401181\n", "2 0.012172 190690 0.000157 1.000000 0.401149\n", "3 0.014811 190680 0.000157 0.999947 0.401181\n", "4 0.016882 190670 0.000157 0.999895 0.401212\n", "... ... ... ... ... ...\n", "31559 0.949043 6295510 0.990637 0.000053 0.602513\n", "31560 0.949097 6296010 0.990716 0.000053 0.602481\n", "31561 0.949692 6296510 0.990795 0.000053 0.602450\n", "31562 0.950181 6297010 0.990873 0.000053 0.602418\n", "31563 0.950191 6297000 0.990873 0.000000 0.602450\n", "\n", "[31564 rows x 5 columns]\n" ] } ], "source": [ "plot_metrics_cost_vs_threshold(y_test, logit_probs,0.05,cost_matrix)" ] }, { "cell_type": "markdown", "id": "lesser-click", "metadata": {}, "source": [ "## K-Nearest Neighbor" ] }, { "cell_type": "markdown", "id": "electrical-uzbekistan", "metadata": {}, "source": [ "### KNN Classifier Hyperparameters" ] }, { "cell_type": "code", "execution_count": 40, "id": "minus-earthquake", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'algorithm': 'auto',\n", " 'leaf_size': 30,\n", " 'metric': 'minkowski',\n", " 'metric_params': None,\n", " 'n_jobs': None,\n", " 'n_neighbors': 5,\n", " 'p': 2,\n", " 'weights': 'uniform'}" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "knn_model = KNeighborsClassifier()\n", "knn_model.get_params()" ] }, { "cell_type": "markdown", "id": "going-beginning", "metadata": {}, "source": [ "### Hyperparameter Tuning" ] }, { "cell_type": "code", "execution_count": 41, "id": "steady-ceiling", "metadata": {}, "outputs": [], "source": [ "if(path.exists(\"data/knn_final_grid_result.dat\")):\n", " knn_grid_result = pickle.load(open(\"data/knn_final_grid_result.dat\", \"rb\")) \n", "else: \n", " knn_model = KNeighborsClassifier()\n", " cs07_random_state_ = 1999\n", " \n", " knn_param_grid = [\n", " {'n_neighbors' : np.arange(10,14,2)} ]\n", " \n", " cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1999)\n", " grid_search = GridSearchCV(estimator=knn_model, \n", " param_grid=knn_param_grid, n_jobs=-1, cv=cv, \n", " scoring='f1',error_score=0)\n", " \n", " knn_grid_result = grid_search.fit(XS_train_ohe, y_train.flatten()) \n", " pickle.dump( grid_result, open( \"data/knn_final_grid_result.dat\", \"wb\" )) \n" ] }, { "cell_type": "markdown", "id": "historic-buying", "metadata": {}, "source": [ "### Best Parameters" ] }, { "cell_type": "code", "execution_count": 42, "id": "measured-desktop", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best: 0.694441 using {'n_neighbors': 12}\n" ] } ], "source": [ "# summarize results\n", "print(\"Best: %f using %s\" % (knn_grid_result.best_score_, knn_grid_result.best_params_))" ] }, { "cell_type": "markdown", "id": "combined-footwear", "metadata": {}, "source": [ "**Grid Search Result**" ] }, { "cell_type": "code", "execution_count": 43, "id": "soviet-grass", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_n_neighborsparamssplit0_test_roc_aucsplit1_test_roc_aucsplit2_test_roc_aucsplit3_test_roc_auc...split23_test_precisionsplit24_test_precisionsplit25_test_precisionsplit26_test_precisionsplit27_test_precisionsplit28_test_precisionsplit29_test_precisionmean_test_precisionstd_test_precisionrank_test_precision
00.3051390.084233296.61283313.08461710{'n_neighbors': 10}0.8725730.8731580.8704470.865345...0.8342680.8287690.8219030.8521970.8344300.8341350.8446180.8355370.0059222
10.3102540.188162286.18508055.57597412{'n_neighbors': 12}0.8792900.8791200.8783070.870748...0.8497880.8371000.8233040.8546980.8373680.8426900.8518200.8419200.0066691
\n", "

2 rows × 171 columns

\n", "
" ], "text/plain": [ " mean_fit_time std_fit_time mean_score_time std_score_time \\\n", "0 0.305139 0.084233 296.612833 13.084617 \n", "1 0.310254 0.188162 286.185080 55.575974 \n", "\n", " param_n_neighbors params split0_test_roc_auc \\\n", "0 10 {'n_neighbors': 10} 0.872573 \n", "1 12 {'n_neighbors': 12} 0.879290 \n", "\n", " split1_test_roc_auc split2_test_roc_auc split3_test_roc_auc ... \\\n", "0 0.873158 0.870447 0.865345 ... \n", "1 0.879120 0.878307 0.870748 ... \n", "\n", " split23_test_precision split24_test_precision split25_test_precision \\\n", "0 0.834268 0.828769 0.821903 \n", "1 0.849788 0.837100 0.823304 \n", "\n", " split26_test_precision split27_test_precision split28_test_precision \\\n", "0 0.852197 0.834430 0.834135 \n", "1 0.854698 0.837368 0.842690 \n", "\n", " split29_test_precision mean_test_precision std_test_precision \\\n", "0 0.844618 0.835537 0.005922 \n", "1 0.851820 0.841920 0.006669 \n", "\n", " rank_test_precision \n", "0 2 \n", "1 1 \n", "\n", "[2 rows x 171 columns]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "knn_grid = pd.DataFrame.from_dict(knn_grid_result.cv_results_)\n", "knn_grid" ] }, { "cell_type": "code", "execution_count": 44, "id": "increasing-valuation", "metadata": {}, "outputs": [ { "data": { "image/png": "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mTNnDjVr1uTss88+qtNcBI+yjF6/Vq1akdv33nsv55xzDm+88Qbr1q3j7LPPLrLeYcOGcdFFF1GjRg2uvPLKSLALysrKittm5xzXX389Dz/8cKFlixYt4p133mH8+PFMmTKFCRMmxKzj4MGDZGVlFdnO0tI+biIiIlKs3bt3c9xxx1GzZk2++OILPv30UwB69uzJhx9+yNq1awEiQ6V9+/bl6aefjqwfHio94YQTWL58OaFQKNJ7F+/+TjzxRMA7ECCsb9++PPvss5F9ycL316xZM5o1a8bo0aMZNmxYzDrbt2/P6tWrI9OZmZmRnrxzzz2XqVOn8s0330TqXb9+Pdu3bycUCnHFFVcwevRoFixYAECdOnXYu3dvgfpXrlxJp06d4j6msqDgJiIiIsUaMGAAhw8fpn379owaNYqePXsC0KhRI5577jkuv/xyunbtytVXXw3APffcw7fffkunTp3o2rUrH3zwAeDtW3bhhRdy5pln0rRp07j395vf/Ia77rqLbt26Fdjh/6c//SktWrSgS5cudO3alZdffjmybPDgwZx00km0b98+Zp0XXHABs2bNikzfdNNNdOnShcGDB9OhQwdGjx5Nv3796NKlC3379mXLli1s2rSJs88+m+zsbIYMGRLpkQsfTBE+OOHrr78mKyuLJk2aHN0GTpAuMi8iIpICli9fHjeQiOe2226jW7du/OQnP4m5/MCBA5xzzjnMnj07si9dWXn88cepW7duzPuO9dwd7UXm1eMmIiIiKa979+7897//ZciQIXHLZGVlcf/997Np06Yyv//69etz/fXXl3m90XRwgoiIiKS8+fPnJ1Suf//+Sbn/ePvVlTX1uImIiIikCAU3ERERkRSh4CYiIiKSIhTcRERERFKEgpuIiIhIilBwExERkYQ8+eSTtG/fnsGDB/PFF1/Qq1cvqlevztixY+Ou45zjhz/8IXv27GHXrl0888wzR33/TzzxBPv3749M/+hHP0ro4vWViYKbiIiIJOSZZ57h3XffZfLkyRx//PE8+eSTjBw5ssh1pk2bRteuXalbt26ZB7frrruuVPWlIp3HTUREJMVMnz6drVu3lmmdTZo0YcCA+BevHz58OGvWrOG8887jhhtu4Je//CWNGzfm7bffLrLeyZMnc9NNNwEwatQovvzyS7Kzs+nbty+PPvoojz76KFOmTOG7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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "knn_neighbhor = {}\n", "\n", "for column in knn_grid.columns:\n", " knn_neighbhor[column] = knn_grid[column].to_numpy()\n", "\n", "\n", "scoring = {'accuracy': make_scorer(accuracy_score),'recall': make_scorer(recall_score),\n", " 'precision': make_scorer(precision_score),'f1': make_scorer(f1_score), \n", " 'roc_auc' : 'roc_auc'\n", " }\n", "n_neighbhor = np.array(knn_neighbhor['param_n_neighbors'], dtype=float)\n", "\n", "viz_hyperparameter(knn_neighbhor,n_neighbhor,xlabel=\"No. of Neighbhors\",scoring=scoring,\n", " xlim=[10,15],ylim=[0.5,.95],plot_title=\" : KNN \")" ] }, { "cell_type": "markdown", "id": "compatible-defeat", "metadata": {}, "source": [ "Grid search found n_neighbor=12 with better recall and selected for the predictions." ] }, { "cell_type": "markdown", "id": "precise-consequence", "metadata": {}, "source": [ "### Build KNN classifier\n" ] }, { "cell_type": "code", "execution_count": 45, "id": "deadly-space", "metadata": {}, "outputs": [], "source": [ "knn = KNeighborsClassifier(n_neighbors=12)\n", "model_knn = knn.fit(XS_train_ohe, y_train)\n", "y_hat = np.zeros(y_train.shape)\n", "y_hat = model_knn.predict(XS_test_ohe)\n", "cm = confusion_matrix(y_target=y_test, y_predicted=y_hat)\n", "acc= accuracy_score(y_test, y_hat)\n", "recall= recall_score(y_test, y_hat)\n", "precision= precision_score(y_test, y_hat)\n", "f1= f1_score(y_test, y_hat)" ] }, { "cell_type": "markdown", "id": "possible-major", "metadata": {}, "source": [ "### Model Performance" ] }, { "cell_type": "code", "execution_count": 46, "id": "eligible-halloween", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 0.7985100539789766\n", "Precision : 0.8527149069015498\n", "Recall : 0.6017309205350118\n", "F1-Score : 0.7055675999815488\n" ] } ], "source": [ "from mlxtend.plotting import plot_confusion_matrix\n", "fig, ax = plot_confusion_matrix(conf_mat=cm)\n", "plt.title('Confusion Matrix')\n", "plt.show()\n", "print(\"Accuracy: \", acc)\n", "print(\"Precision : \", precision)\n", "print(\"Recall : \", recall)\n", "print(\"F1-Score : \", f1)\n", "\n" ] }, { "cell_type": "markdown", "id": "rough-depression", "metadata": {}, "source": [ "### Build Cost Matrix" ] }, { "cell_type": "code", "execution_count": 47, "id": "sudden-warren", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cost_matrix = np.array([[0, 10],[500, 0]])\n", "fig, ax = plot_confusion_matrix(conf_mat=cost_matrix,cmap=\"YlOrRd\")\n", "plt.title('Cost Matrix')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 48, "id": "serious-smile", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cost_calc = np.multiply(cm, cost_matrix)\n", "fig, ax = plot_confusion_matrix(conf_mat=cost_calc,cmap=\"OrRd\")\n", "plt.title('Cost Calculation')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "complex-andrews", "metadata": {}, "source": [ "### Precision-Recall Curve" ] }, { "cell_type": "code", "execution_count": 49, "id": "refined-concord", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "KNN: f1=0.706 auc=0.849\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "y_score = model_knn.predict_proba(XS_test_ohe)\n", "knn_probs = y_score[:, 1]\n", "# predict class values\n", "knn_precision, knn_recall, knn_thresholds = precision_recall_curve(y_test, knn_probs)\n", "knn_f1, knn_auc = f1_score(y_test, y_hat), auc(knn_recall, knn_precision)\n", "# summarize scores\n", "print('KNN: f1=%.3f auc=%.3f' % (knn_f1, knn_auc))\n", "pyplot.plot(knn_recall, knn_precision, marker='.', label='KNN')\n", "# axis labels\n", "pyplot.xlabel('Recall')\n", "pyplot.ylabel('Precision')\n", "# show the legend\n", "pyplot.legend()\n", "# show the plot\n", "pyplot.show()" ] }, { "cell_type": "markdown", "id": "tamil-viking", "metadata": {}, "source": [ "### Cost Curve" ] }, { "cell_type": "code", "execution_count": 50, "id": "fatty-cotton", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "$ Cost and Classification Error Rates for different classification thresholds:\n", " Threshold $Cost FNr FPr Acc\n", "0 0.000000 189690 0.000000 1.000000 0.401212\n", "1 0.083333 182010 0.001967 0.893616 0.464124\n", "2 0.166667 193070 0.008261 0.741051 0.552953\n", "3 0.250000 283680 0.027695 0.567663 0.648979\n", "4 0.333333 538740 0.072777 0.401919 0.730137\n", "5 0.416667 1006540 0.150747 0.255891 0.786294\n", "6 0.500000 1671050 0.258694 0.142601 0.810821\n", "7 0.583333 2544210 0.398269 0.069640 0.798510\n", "8 0.666667 3470750 0.545240 0.030313 0.763092\n", "9 0.750000 4360730 0.685838 0.011756 0.717794\n", "10 0.833333 5144660 0.809441 0.003479 0.673159\n", "11 0.916667 5725190 0.900865 0.001002 0.637962\n", "12 1.000000 6123010 0.963493 0.000053 0.613403\n" ] } ], "source": [ "plot_metrics_cost_vs_threshold(y_test, knn_probs,0.05,cost_matrix)" ] }, { "cell_type": "markdown", "id": "quantitative-poker", "metadata": {}, "source": [ "### Feature Importance" ] }, { "cell_type": "code", "execution_count": 51, "id": "found-instrument", "metadata": {}, "outputs": [], "source": [ "#results = permutation_importance(model_knn, XS_train_ohe, y_train, scoring='recall')\n", "# get importance\n", "#importance = results.importances_mean\n", "# summarize feature importance\n", "#for i,v in enumerate(importance):\n", "# print('Feature: %0d, Score: %.5f' % (i,v))\n", "# plot feature importance\n", "#pyplot.bar([x for x in range(len(importance))], importance)\n", "#pyplot.show()" ] }, { "cell_type": "markdown", "id": "lasting-galaxy", "metadata": {}, "source": [ "## Random Forest" ] }, { "cell_type": "markdown", "id": "typical-connection", "metadata": {}, "source": [ "### Random Forest Hyperparameters" ] }, { "cell_type": "code", "execution_count": 52, "id": "threaded-solution", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'bootstrap': True,\n", " 'ccp_alpha': 0.0,\n", " 'class_weight': None,\n", " 'criterion': 'gini',\n", " 'max_depth': None,\n", " 'max_features': 'auto',\n", " 'max_leaf_nodes': None,\n", " 'max_samples': None,\n", " 'min_impurity_decrease': 0.0,\n", " 'min_impurity_split': None,\n", " 'min_samples_leaf': 1,\n", " 'min_samples_split': 2,\n", " 'min_weight_fraction_leaf': 0.0,\n", " 'n_estimators': 100,\n", " 'n_jobs': None,\n", " 'oob_score': False,\n", " 'random_state': 1999,\n", " 'verbose': 0,\n", " 'warm_start': False}" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", "rf_model = RandomForestClassifier(random_state=1999)\n", "rf_model.get_params()\n" ] }, { "cell_type": "markdown", "id": "excessive-butler", "metadata": {}, "source": [ "### Hyperparameter tuning" ] }, { "cell_type": "code", "execution_count": 53, "id": "elder-moment", "metadata": {}, "outputs": [], "source": [ "if(path.exists(\"data/rf_grid_result.dat\")):\n", " rf_grid_result = pickle.load(open(\"data/rf_grid_result.dat\", \"rb\")) \n", "else: \n", " \n", " cs07_random_state_ = 1999 \n", " rf_model = RandomForestClassifier(random_state=cs07_random_state_)\n", "\n", " #\n", " # Run Grid Search\n", " #\n", "\n", " rf_param_grid = [\n", " {'max_features' : np.arange(1,6,1),\n", " 'n_estimators' : np.arange(10,50,10),\n", " 'random_state' : [cs07_random_state_],\n", " 'n_jobs' : [-1]\n", " } ]\n", "\n", " rf_scoring = { 'ROC' : 'roc_auc', \n", " 'Accuracy' : make_scorer(accuracy_score),\n", " 'Recall' : make_scorer(recall_score),\n", " 'Precision' : make_scorer(precision_score),\n", " 'F1' : make_scorer(f1_score)\n", " }\n", "\n", " cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1999)\n", "\n", " print('Running grid search : ')\n", "\n", " grid_search = GridSearchCV(estimator=rf_model, \n", " param_grid=rf_param_grid, n_jobs=-1, cv=cv, \n", " scoring=['roc_auc','accuracy','f1','recall','precision'],refit='f1')\n", " print('Fit grid search : ')\n", " grid_result = grid_search.fit(XS_train_ohe, y_train.flatten())\n", "\n", " pickle.dump( grid_result, open( \"data/rf_grid_result.dat\", \"wb\" )) \n", "\n" ] }, { "cell_type": "markdown", "id": "military-catering", "metadata": {}, "source": [ "### Best Parameters \n", "\n", "This is the best model returned by Grid Search hyperparameter tuning." ] }, { "cell_type": "code", "execution_count": 54, "id": "standard-faith", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best: 0.870298 using {'max_features': 5, 'n_estimators': 40, 'n_jobs': -1, 'random_state': 1999}\n" ] } ], "source": [ "# summarize results\n", "print(\"Best: %f using %s\" % (rf_grid_result.best_score_, rf_grid_result.best_params_))" ] }, { "cell_type": "code", "execution_count": 55, "id": "representative-officer", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_max_featuresparam_n_estimatorsparam_n_jobsparam_random_stateparamssplit0_test_roc_auc...split23_test_precisionsplit24_test_precisionsplit25_test_precisionsplit26_test_precisionsplit27_test_precisionsplit28_test_precisionsplit29_test_precisionmean_test_precisionstd_test_precisionrank_test_precision
04.6784970.2692830.2470490.010967110-11999{'max_features': 1, 'n_estimators': 10, 'n_job...0.809679...0.7586320.7593480.7492560.7695340.7609960.7549950.7766300.7642070.01212920
19.5285330.4692640.2591230.021618120-11999{'max_features': 1, 'n_estimators': 20, 'n_job...0.850978...0.8182660.8075160.8011440.8304250.8092050.8089780.8333850.8173800.00959319
214.9780170.6586470.2826510.034041130-11999{'max_features': 1, 'n_estimators': 30, 'n_job...0.876086...0.8388970.8342490.8402440.8529680.8436930.8431200.8543780.8472700.00856517
319.5089080.7376290.3671020.081046140-11999{'max_features': 1, 'n_estimators': 40, 'n_job...0.886774...0.8579150.8574030.8573150.8667070.8536220.8485030.8751880.8623060.00794816
47.0735990.8400570.2527760.011082210-11999{'max_features': 2, 'n_estimators': 10, 'n_job...0.866640...0.8257720.8277790.8341150.8423500.8291140.8433280.8414700.8354550.00691718
\n", "

5 rows × 174 columns

\n", "
" ], "text/plain": [ " mean_fit_time std_fit_time mean_score_time std_score_time \\\n", "0 4.678497 0.269283 0.247049 0.010967 \n", "1 9.528533 0.469264 0.259123 0.021618 \n", "2 14.978017 0.658647 0.282651 0.034041 \n", "3 19.508908 0.737629 0.367102 0.081046 \n", "4 7.073599 0.840057 0.252776 0.011082 \n", "\n", " param_max_features param_n_estimators param_n_jobs param_random_state \\\n", "0 1 10 -1 1999 \n", "1 1 20 -1 1999 \n", "2 1 30 -1 1999 \n", "3 1 40 -1 1999 \n", "4 2 10 -1 1999 \n", "\n", " params split0_test_roc_auc \\\n", "0 {'max_features': 1, 'n_estimators': 10, 'n_job... 0.809679 \n", "1 {'max_features': 1, 'n_estimators': 20, 'n_job... 0.850978 \n", "2 {'max_features': 1, 'n_estimators': 30, 'n_job... 0.876086 \n", "3 {'max_features': 1, 'n_estimators': 40, 'n_job... 0.886774 \n", "4 {'max_features': 2, 'n_estimators': 10, 'n_job... 0.866640 \n", "\n", " ... split23_test_precision split24_test_precision \\\n", "0 ... 0.758632 0.759348 \n", "1 ... 0.818266 0.807516 \n", "2 ... 0.838897 0.834249 \n", "3 ... 0.857915 0.857403 \n", "4 ... 0.825772 0.827779 \n", "\n", " split25_test_precision split26_test_precision split27_test_precision \\\n", "0 0.749256 0.769534 0.760996 \n", "1 0.801144 0.830425 0.809205 \n", "2 0.840244 0.852968 0.843693 \n", "3 0.857315 0.866707 0.853622 \n", "4 0.834115 0.842350 0.829114 \n", "\n", " split28_test_precision split29_test_precision mean_test_precision \\\n", "0 0.754995 0.776630 0.764207 \n", "1 0.808978 0.833385 0.817380 \n", "2 0.843120 0.854378 0.847270 \n", "3 0.848503 0.875188 0.862306 \n", "4 0.843328 0.841470 0.835455 \n", "\n", " std_test_precision rank_test_precision \n", "0 0.012129 20 \n", "1 0.009593 19 \n", "2 0.008565 17 \n", "3 0.007948 16 \n", "4 0.006917 18 \n", "\n", "[5 rows x 174 columns]" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rf_grid = pd.DataFrame.from_dict(rf_grid_result.cv_results_)\n", "rf_grid.head()" ] }, { "cell_type": "code", "execution_count": 56, "id": "adaptive-abuse", "metadata": {}, "outputs": [], "source": [ "grid_results = rf_grid.loc[:,['param_max_features','param_n_estimators','mean_test_recall']]\n", "grid_contour = grid_results.groupby(['param_max_features','param_n_estimators']).mean()\n", "grid_contour\n", "\n", "grid_reset = grid_contour.reset_index()\n", "grid_reset.columns = ['param_max_features', 'param_n_estimators', 'mean_test_recall']\n", "grid_pivot = grid_reset.pivot('param_max_features', 'param_n_estimators')\n", "grid_pivot\n", "x = grid_pivot.columns.levels[1].values\n", "y = grid_pivot.index.values\n", "z = grid_pivot.values" ] }, { "cell_type": "markdown", "id": "compliant-modeling", "metadata": {}, "source": [ "### 3D Plot (estimators X max_features X Recall Score)\n", "\n", "This is 3D plot after tunining following hyperparameters\n", "\n", "- Number of estimators\n", "- Max features\n", "- Mean Recall score\n" ] }, { "cell_type": "code", "execution_count": 57, "id": "sporting-aviation", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "type": "surface", "x": [ 10, 20, 30, 40 ], "y": [ 1, 2, 3, 4, 5 ], "z": [ [ 0.4664740859043833, 0.5225565203254097, 0.5507255044880733, 0.5693342597848184 ], [ 0.5951626163307765, 0.6625099005602203, 0.6926394845821621, 0.708041892726556 ], [ 0.6738008177807276, 0.7339419027309525, 0.7600127510908739, 0.771349741936619 ], [ 0.7208276468477975, 0.7755723737595052, 0.7944172320388966, 0.8045085710435206 ], [ 0.751547532827603, 0.7986400341274265, 0.8166456762665016, 0.8256878486930744 ] ] } ], "layout": { "autosize": false, "height": 500, "margin": { "b": 65, "l": 65, "r": 50, "t": 90 }, "scene": { "xaxis": { "title": { "text": "param_n_estimators" } }, "yaxis": { "title": { "text": "param_max_features" } }, "zaxis": { "title": { "text": "mean_test_recall" } } }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Hyperparameter tuning" }, "width": 600, "xaxis": { "title": { "text": "n_estimators" } }, "yaxis": { "title": { "text": "max_features" } } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.graph_objects as go\n", "# X and Y axes labels\n", "layout = go.Layout(\n", " xaxis=go.layout.XAxis(\n", " title=go.layout.xaxis.Title(\n", " text='n_estimators')\n", " ),\n", " yaxis=go.layout.YAxis(\n", " title=go.layout.yaxis.Title(\n", " text='max_features') \n", " ) )\n", "\n", "fig = go.Figure(data= [go.Surface(z=z, y=y, x=x)], layout=layout )\n", "fig.update_layout(title='Hyperparameter tuning',\n", " scene = dict(\n", " xaxis_title='param_n_estimators',\n", " yaxis_title='param_max_features',\n", " zaxis_title='mean_test_recall'),\n", " autosize=False,\n", " width=600, height=500,\n", " margin=dict(l=65, r=50, b=65, t=90))\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "practical-mercy", "metadata": {}, "source": [ "### Build Random Forest Model" ] }, { "cell_type": "code", "execution_count": 58, "id": "through-surrey", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RandomForestClassifier(max_features=5, n_estimators=40, n_jobs=-1,\n", " random_state=1999)" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rf_model = RandomForestClassifier(max_features=5, \n", " n_estimators=40,\n", " n_jobs=-1,\n", " random_state=1999)\n", "rf_model.fit(XS_train_ohe, y_train)" ] }, { "cell_type": "markdown", "id": "understood-stretch", "metadata": {}, "source": [ "### Feature Importance" ] }, { "cell_type": "code", "execution_count": 59, "id": "lonely-survivor", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "importances = rf_model.feature_importances_\n", "\n", "std = np.std([tree.feature_importances_ for tree in rf_model.estimators_], axis=0)\n", "indices = np.argsort(importances)[::-1]\n", "\n", "plt.figure(figsize=(20,6))\n", "\n", "plt.title(\"Random Forest feature importances (top 40 features) \")\n", "plt.bar(range(XS_train_ohe.shape[1]),importances[indices],\n", " color=\"#FF5733\", yerr=std[indices], align=\"center\")\n", "plt.xticks(range(XS_train_ohe.shape[1]), X_test_ohe.columns[indices])\n", "plt.xlim([-1, 40])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 60, "id": "arabic-spokesman", "metadata": {}, "outputs": [], "source": [ "y_hat = np.zeros(y_train.shape)\n", "y_hat = rf_model.predict(XS_test_ohe)\n", "cm = confusion_matrix(y_target=y_test, y_predicted=y_hat)\n", "acc = accuracy_score(y_test, y_hat)\n", "recall= recall_score(y_test, y_hat)\n", "precision= precision_score(y_test, y_hat)\n", "f1= f1_score(y_test, y_hat)" ] }, { "cell_type": "markdown", "id": "electric-behalf", "metadata": {}, "source": [ "### Model Performance" ] }, { "cell_type": "code", "execution_count": 61, "id": "three-referral", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Accuracy : 0.904984374506771\n", "Precision : 0.9209338656483249\n", "Recall : 0.8348544453186467\n", "F1-Score : 0.8757840871574777\n" ] } ], "source": [ "from mlxtend.plotting import plot_confusion_matrix\n", "fig, ax = plot_confusion_matrix(conf_mat=cm)\n", "plt.title('Confusion Matrix')\n", "plt.show()\n", "print(\"Accuracy : \", acc)\n", "print(\"Precision : \", precision)\n", "print(\"Recall : \", recall)\n", "print(\"F1-Score : \", f1)" ] }, { "cell_type": "markdown", "id": "divine-burning", "metadata": {}, "source": [ "### Build Cost Matrix" ] }, { "cell_type": "code", "execution_count": 62, "id": "quick-clearance", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cost_matrix = np.array([[0, 10],[500, 0]])\n", "fig, ax = plot_confusion_matrix(conf_mat=cost_matrix,cmap=\"YlOrRd\")\n", "plt.title('Cost Matrix')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 63, "id": "dramatic-innocent", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cost_calc = np.multiply(cm, cost_matrix)\n", "fig, ax = plot_confusion_matrix(conf_mat=cost_calc,cmap=\"OrRd\")\n", "plt.title('Cost Calculation')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "universal-attachment", "metadata": {}, "source": [ "### Precision Recall Curve" ] }, { "cell_type": "code", "execution_count": 64, "id": "suitable-vermont", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Random Forest : f1=0.876 auc=0.952\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "y_score = rf_model.predict_proba(XS_test_ohe)\n", "rf_probs = y_score[:, 1]\n", "# predict class values\n", "rf_precision, rf_recall, rf_thresholds = precision_recall_curve(y_test, rf_probs)\n", "rf_f1, rf_auc = f1_score(y_test, y_hat), auc(rf_recall, rf_precision)\n", "# summarize scores\n", "print('Random Forest : f1=%.3f auc=%.3f' % (rf_f1, rf_auc))\n", "pyplot.plot(rf_recall, rf_precision, marker='.', label='Random Forest')\n", "# axis labels\n", "pyplot.xlabel('Recall')\n", "pyplot.ylabel('Precision')\n", "# show the legend\n", "pyplot.legend()\n", "# show the plot\n", "pyplot.show()" ] }, { "cell_type": "markdown", "id": "lyric-phrase", "metadata": {}, "source": [ "### Cost Curve" ] }, { "cell_type": "code", "execution_count": 65, "id": "mature-viewer", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "$ Cost and Classification Error Rates for different classification thresholds:\n", " Threshold $Cost FNr FPr Acc\n", "0 0.000 189690 0.000000 1.000000 0.401212\n", "1 0.025 184740 0.000079 0.971269 0.418384\n", "2 0.050 175670 0.000472 0.910275 0.454749\n", "3 0.075 169030 0.001652 0.835732 0.498911\n", "4 0.100 160690 0.002754 0.754863 0.546892\n", "5 0.125 155350 0.004327 0.673994 0.594684\n", "6 0.150 149060 0.005744 0.593389 0.642381\n", "7 0.175 146450 0.007553 0.519005 0.686196\n", "8 0.200 150310 0.010307 0.447098 0.728148\n", "9 0.225 161550 0.013926 0.385102 0.763818\n", "10 0.250 187280 0.019670 0.328325 0.795511\n", "11 0.275 219960 0.026200 0.281828 0.820733\n", "12 0.300 250800 0.032337 0.238811 0.844029\n", "13 0.325 286300 0.039024 0.201908 0.863443\n", "14 0.350 344930 0.049174 0.170963 0.877900\n", "15 0.375 407540 0.059795 0.145184 0.889075\n", "16 0.400 485790 0.072777 0.122779 0.897282\n", "17 0.425 567590 0.086310 0.100638 0.905111\n", "18 0.450 679880 0.104485 0.083716 0.907952\n", "19 0.475 798350 0.123525 0.070378 0.908299\n", "20 0.500 925390 0.143902 0.057409 0.907889\n", "21 0.525 1058610 0.165146 0.048026 0.904984\n", "22 0.550 1205000 0.188434 0.039538 0.900723\n", "23 0.575 1388590 0.217545 0.032105 0.893494\n", "24 0.600 1590880 0.249567 0.025726 0.884466\n", "25 0.625 1795290 0.281904 0.019980 0.874933\n", "26 0.650 2015440 0.316680 0.015499 0.863664\n", "27 0.675 2267340 0.356412 0.012336 0.849616\n", "28 0.700 2523820 0.396853 0.009595 0.835033\n", "29 0.725 2832920 0.445555 0.007486 0.816756\n", "30 0.750 3156030 0.496459 0.005430 0.797563\n", "31 0.775 3490280 0.549095 0.004112 0.777234\n", "32 0.800 3835030 0.603383 0.002794 0.756242\n", "33 0.825 4221900 0.664280 0.002109 0.732220\n", "34 0.850 4610780 0.725492 0.001476 0.708040\n", "35 0.875 4940720 0.777419 0.001160 0.687395\n", "36 0.900 5310120 0.835563 0.000633 0.664383\n", "37 0.925 5660580 0.890716 0.000422 0.642381\n", "38 0.950 5941550 0.934933 0.000264 0.624736\n", "39 0.975 6166020 0.970260 0.000105 0.610657\n", "40 1.000 6298510 0.991109 0.000053 0.602323\n" ] } ], "source": [ "plot_metrics_cost_vs_threshold(y_test, rf_probs,0.05,cost_matrix)" ] }, { "cell_type": "markdown", "id": "arranged-stability", "metadata": {}, "source": [ "## Analysis of model performance\n", "

\n", " Table 7.4.1 - Performance Vs Dollar Cost \n", "\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Model Accuracy Precision Recall F1 Score Dollar Cost
Logistic Regression 0.70 0.67 0.51 0.58 3,062,500
KNN 0.79 0.85 0.60 0.70 2,531,000
Random Forest 0.90 0.92 0.83 0.87 1,049,500
\n", "

" ] }, { "cell_type": "markdown", "id": "needed-bubble", "metadata": {}, "source": [ "Random forest model provides the best performance by minimizing the false negatives, and provides best (highest) recall. That also is evident from lost $cost for Random Forest.\n", "\n", "**Discussion on model performance**\n", "\n", "**Random Forest** is an ensemble learning method that consists of multiple decision trees. An ensemble learning method ends up providing better metric, as it’s possible to train trees addressing a specific feature space in data set that other trees don’t.\n", "\n", "**Logistic regression** performs the poorest here. Logistic regression has assumption of linear dependence between dependent variable and independent features. It is possible the available data set is not linearly separable, providing poorest model metric.\n", "\n", "**KNN** performs between Random forest and logistic regression. Given the number of feature set and final 'y' variable, it is possible the data set lends itself well into determining output based on how close the features are.\n", "\n", "It is possible that this data could be for financial fraud detection, where y=1 implies fraud detected. If this is true, then it is likely that majority of frauds have a signature in feature set that is common. This common feature set would likely drive better performance for KNN as commonality in feature ties to nearest neighbor approach for determining a fraud. Hence it is better than logistic regression for this problem.\n", "\n", "**Discussion on Dollar cost vs. model metric**\n", " \n", "Dollar cost and model metric tradeoffs are further analyzed by varying the binary classification threshold. \n", "Table 7.4.2 below captures binary classification threshold that minimizes Dollar cost, for a model originally obtained through grid search and hyper parameter tuning, as summarized in Table 7.4.1.\n" ] }, { "cell_type": "markdown", "id": "dependent-legend", "metadata": {}, "source": [ "

\n", " Table 7.4.2 - Threshold selection \n", "\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "
Model Classification threshold FNR Accuracy Dollar Cost
Logistic Regression 0.006807 0.0 0.4012 189,690
KNN 0.083333 0.0020 0.4641 182,010
Random Forest 0.175 0.0076 0.6862 146,450
\n", "

\n", "





\n", "

\n", "\n" ] }, { "cell_type": "markdown", "id": "conservative-aberdeen", "metadata": {}, "source": [ "**Observations**\n", "\n", "For each of the models, the \\\\$ cost is significantly reduced by using a much lower classification threshold. Compare with default results in Table 7.4.1.\n", "\n", "Using a very low threshold is converting TN and FN to FP (false positives). Since the cost of FP is smaller by 50x than of FN, it is helping lower the actual \\\\$ cost to company.\n", "Above also implies, one need not build any sophisticated model, and classify all new records as TRUE, yet not be too worse off the minimum \\\\$ cost. This is happening as the $ cost of FN = 50x \\\\$ cost of FP, i.e. there is a very high skew.\n", "\n", "Experiments with setting \\\\$ cost of FN = 500, and $ cost of FP = 100, (i.e. much less skew),gave a much higher Accuracy, and higher threshold. In such a scenario, spending time and effort to build a model will likely provide higher return on investment of building a model\n", "\n", "

" ] }, { "cell_type": "markdown", "id": "choice-kinase", "metadata": {}, "source": [ "# Model Interpretability & Explainability" ] }, { "cell_type": "markdown", "id": "acquired-wrestling", "metadata": {}, "source": [ "## Logistic Regression" ] }, { "cell_type": "code", "execution_count": 66, "id": "agricultural-looking", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model_coef = np.argsort(logit_model.coef_[0])[::-1]\n", "importance = logit_model.coef_[0][model_coef]\n", "\n", "plt.figure(figsize=(10,10))\n", "x1=sns.barplot(x=importance, y=list(X_test_ohe.columns[model_coef]))" ] }, { "cell_type": "markdown", "id": "compressed-presence", "metadata": {}, "source": [ "## Random Forest" ] }, { "cell_type": "code", "execution_count": 67, "id": "representative-makeup", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "importances = rf_model.feature_importances_\n", "\n", "std = np.std([tree.feature_importances_ for tree in rf_model.estimators_], axis=0)\n", "indices = np.argsort(importances)[::-1]\n", "\n", "plt.figure(figsize=(20,6))\n", "\n", "plt.title(\"Random Forest feature importances (top 40 features) \")\n", "plt.bar(range(XS_train_ohe.shape[1]),importances[indices],\n", " color=\"#FF5733\", yerr=std[indices], align=\"center\")\n", "plt.xticks(range(XS_train_ohe.shape[1]), X_test_ohe.columns[indices])\n", "plt.xlim([-1, 40])\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "adjustable-humor", "metadata": {}, "source": [ "\n", "Feature importance refers to a class of techniques that measure how useful input features are for predicting a target variable using a given model. The score assigned alludes to the relative importance of a feature in a particular model. It can also used to better understanding a model’s logic or reduce the number of input variables. Feature importance is not defined for KNN algorithms, but it is available for tree models.\n", "\n", "The feature importance result for logistic regression model prioritizes x46, x38, x35, x37 variables whereas in the random forest listed the best/importance variables are x23, x20, x49, x48, x42, x28, x12, x40, x37, x27, x7, x41, x38, x46, x6, x2, x32. Even though there is difference list hierarchy and magnitude both models list x46, x38, x37 as the top important variables. That is both tree models identified similar features as most important for predicting product formulation. This indicates that model performance is consistent and that the appropriate variables are being included in our model for prediction.\n", "\n", "\n", "As depicted in table 7.4.1 random forest is the best model with cost of \\\\$1,049,500\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "lesbian-occupation", "metadata": {}, "source": [ "# Case Conclusions\n", "\n", "The analysis involved building a binary classification model, of unknown dataset, with primary ask to minimize the \\\\$ cost.\n", "\n", "The \\\\$ cost penalized False Negatives (FN) much higher than False Positives (FP), with numbers being \\\\$500 and $10 respectively.\n", "\n", "Logistic Regression, KNN and Random Forest models were tuned for best recall score, and compared for \\\\$ cost performance. It is clear that Random Forest does the best, by providing lowest $ cost, while providing a high Recall value. \n", "\n", "However, a careful analysis of choice of binary classification threshold, indicated that one can minimize the \\\\$ cost further, and achieve False Negative Rate to be ‘0’ for Logistic regression, and just 0.8% for Random Forest. \n", "Interestingly, Logistic regression result indicates that one doesn’t need a sophisticated model to minimize \\\\$ cost. The cost impact of FN vs FP is so skewed, that a very low threshold or effectively assuming all records are TRUE still gives minimal cost. Further, Random Forest model does better than logistic regression by minimizes cost further by ~ \\\\$40,000. \n", "\n", "Above brings to fore a tradeoff between optimizing for minimal \\\\$ cost, vs a good model with high accuracy. One can have a good model, but may not have lowest \\\\$ cost. On the other hand, if \\\\$ cost reduction is the ONLY criterion, we may not need a complicated model, or detailed modeling activity.\n", "The \\\\$ cost penalty for FN and FP have a significant bearing on development, and deployment of the right model. It is very important that we have right estimate of cost of FN and FP. It will be also important to ask if cost of FN and FP can vary, depending on some of the features in the data set. E.g. the cost may be different based on geographical location (note that data set does appear to have a variable encoding geographical area). All of these needs to be considered before considering to productize and use this methodology. \n" ] }, { "cell_type": "markdown", "id": "distinguished-chile", "metadata": {}, "source": [ "# Reference\n", "\n", "- Scikit learn documentation \n", "- StackOverflow\n" ] }, { "cell_type": "markdown", "id": "mobile-parks", "metadata": {}, "source": [ "# Appendix-I - Source code" ] }, { "cell_type": "markdown", "id": "lovely-playback", "metadata": {}, "source": [ "## Logistic Regression Grid Search\n", "\n", "This code was used to run grid search for logisitc regression after applying recursive feature elimination. Grid search takes time to run therefore it was executed separately as background process and results were stored in csv file. " ] }, { "cell_type": "markdown", "id": "interesting-reporter", "metadata": {}, "source": [ "\n", "print('Process Begins')\n", "\n", "X_train = pd.read_csv('data/train_set.csv',sep=',')\n", "X_test = pd.read_csv('data/test_set.csv',sep=',')\n", "y_train_target = pd.read_csv('data/train_target.csv',sep=',')\n", "y_test_target = pd.read_csv('data/test_target.csv',sep=',')\n", "\n", "XS_train_ohe = X_train.values\n", "XS_test_ohe = X_test.values \n", "y_train = y_train_target.values\n", "y_test = y_test_target.values\n", "\n", "\n", "log_model = LogisticRegression(random_state=1999)\n", "\n", "cs07_random_state_ = 1999\n", "\n", "\n", "log_param_grid = [\n", " {'penalty' : ['l2'],\n", " 'C' : [0.1,0.01,0.001,0.0001,0.5,0.6,10],\n", " 'solver' : ['sag','lbfgs'],\n", " 'max_iter' : [500],\n", " 'random_state' : [cs07_random_state_]} \n", " ]\n", "\n", "cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1999)\n", "\n", "print('Running RFE : ')\n", "\n", "rfe = RFE(log_model,n_features_to_select=61, step=1)\n", "rfe = rfe.fit(XS_train_ohe, y_train.flatten())\n", "\n", "print(rfe.support_)\n", "print(rfe.ranking_)\n", "\n", "print('Running grid search : ')\n", "grid_search = GridSearchCV(estimator=log_model, param_grid=log_param_grid, n_jobs=-1, cv=cv, scoring='recall')\n", "\n", "print('Fit grid search : ')\n", "grid_result = grid_search.fit(XS_train_ohe[:,rfe.support_], y_train.flatten())\n", "\n", "print('store logistic grid results')\n", "pickle.dump( grid_result, open( \"data/logistic_final_grid_result.dat\", \"wb\" )) \n", "\n", "print('End of Process')\n", "\n" ] }, { "cell_type": "markdown", "id": "distant-motorcycle", "metadata": {}, "source": [ "## Logistic regression cost matrix" ] }, { "cell_type": "markdown", "id": "organized-reminder", "metadata": {}, "source": [ "\n", "$ Cost and Classification Error Rates for different classification thresholds:\n", " Threshold $Cost FNr FPr Acc\n", "0 0.006807 189690 0.000000 1.000000 0.401212\n", "1 0.008014 190190 0.000079 1.000000 0.401181\n", "2 0.012172 190690 0.000157 1.000000 0.401149\n", "3 0.014811 190680 0.000157 0.999947 0.401181\n", "4 0.016882 190670 0.000157 0.999895 0.401212\n", "... ... ... ... ... ...\n", "31559 0.949043 6295510 0.990637 0.000053 0.602513\n", "31560 0.949097 6296010 0.990716 0.000053 0.602481\n", "31561 0.949692 6296510 0.990795 0.000053 0.602450\n", "31562 0.950181 6297010 0.990873 0.000053 0.602418\n", "31563 0.950191 6297000 0.990873 0.000000 0.602450\n", "\n", "[31564 rows x 5 columns]\n", "\n", "" ] }, { "cell_type": "markdown", "id": "joined-garlic", "metadata": {}, "source": [ "## KNN - Grid Search" ] }, { "cell_type": "markdown", "id": "stuck-biotechnology", "metadata": {}, "source": [ "\n", "print('Process Begins')\n", "\n", "X_train = pd.read_csv('data/train_set.csv',sep=',')\n", "X_test = pd.read_csv('data/test_set.csv',sep=',')\n", "y_train_target = pd.read_csv('data/train_target.csv',sep=',')\n", "y_test_target = pd.read_csv('data/test_target.csv',sep=',')\n", "\n", "XS_train_ohe = X_train.values\n", "XS_test_ohe = X_test.values \n", "y_train = y_train_target.values\n", "y_test = y_test_target.values\n", "\n", "knn_model = KNeighborsClassifier()\n", "\n", "cs07_random_state_ = 1999\n", "\n", "knn_param_grid = [\n", " {'n_neighbors' : np.arange(5,40,2)} ]\n", "\n", "cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=cs07_random_state_)\n", "\n", "print('Running grid search : ')\n", "grid_search = GridSearchCV(estimator=knn_model, param_grid=knn_param_grid, n_jobs=-1, cv=cv, scoring=['roc_auc','accuracy','f1','recall','precision'],refit='f1')\n", "\n", "print('Fit grid search : ')\n", "grid_result = grid_search.fit(XS_train_ohe, y_train.flatten())\n", "\n", "print('store knn grid results')\n", "pickle.dump( grid_result, open( \"data/knn_final_grid_result.dat\", \"wb\" )) \n", "\n", "print('End of Process')\n", "" ] }, { "cell_type": "markdown", "id": "realistic-conversion", "metadata": {}, "source": [ "## KNN cost matrix" ] }, { "cell_type": "markdown", "id": "swiss-thanksgiving", "metadata": {}, "source": [ "\n", "\n", "$ Cost and Classification Error Rates for different classification thresholds:\n", " Threshold $Cost FNr FPr Acc\n", "0 0.000000 1896900 0.000000 1.000000 0.401212\n", "1 0.083333 1707600 0.001967 0.893616 0.464124\n", "2 0.166667 1458200 0.008261 0.741051 0.552953\n", "3 0.250000 1252800 0.027695 0.567663 0.648979\n", "4 0.333333 1224900 0.072777 0.401919 0.730137\n", "5 0.416667 1443400 0.150747 0.255891 0.786294\n", "6 0.500000 1914500 0.258694 0.142601 0.810821\n", "7 0.583333 2663100 0.398269 0.069640 0.798510\n", "8 0.666667 3522500 0.545240 0.030313 0.763092\n", "9 0.750000 4380800 0.685838 0.011756 0.717794\n", "10 0.833333 5150600 0.809441 0.003479 0.673159\n", "11 0.916667 5726900 0.900865 0.001002 0.637962\n", "12 1.000000 6123100 0.963493 0.000053 0.613403\n", "\n", "" ] }, { "cell_type": "markdown", "id": "collected-heart", "metadata": {}, "source": [ "## Random Forest Cost matrix\n", "\n", "\n", "\n", "$ Cost and Classification Error Rates for different classification thresholds:\n", " Threshold $Cost FNr FPr Acc\n", "0 0.000 189690 0.000000 1.000000 0.401212\n", "1 0.025 184740 0.000079 0.971269 0.418384\n", "2 0.050 175670 0.000472 0.910275 0.454749\n", "3 0.075 169030 0.001652 0.835732 0.498911\n", "4 0.100 160690 0.002754 0.754863 0.546892\n", "5 0.125 155350 0.004327 0.673994 0.594684\n", "6 0.150 149060 0.005744 0.593389 0.642381\n", "7 0.175 146450 0.007553 0.519005 0.686196\n", "8 0.200 150310 0.010307 0.447098 0.728148\n", "9 0.225 161550 0.013926 0.385102 0.763818\n", "10 0.250 187280 0.019670 0.328325 0.795511\n", "11 0.275 219960 0.026200 0.281828 0.820733\n", "12 0.300 250800 0.032337 0.238811 0.844029\n", "13 0.325 286300 0.039024 0.201908 0.863443\n", "14 0.350 344930 0.049174 0.170963 0.877900\n", "15 0.375 407540 0.059795 0.145184 0.889075\n", "16 0.400 485790 0.072777 0.122779 0.897282\n", "17 0.425 567590 0.086310 0.100638 0.905111\n", "18 0.450 679880 0.104485 0.083716 0.907952\n", "19 0.475 798350 0.123525 0.070378 0.908299\n", "20 0.500 925390 0.143902 0.057409 0.907889\n", "21 0.525 1058610 0.165146 0.048026 0.904984\n", "22 0.550 1205000 0.188434 0.039538 0.900723\n", "23 0.575 1388590 0.217545 0.032105 0.893494\n", "24 0.600 1590880 0.249567 0.025726 0.884466\n", "25 0.625 1795290 0.281904 0.019980 0.874933\n", "26 0.650 2015440 0.316680 0.015499 0.863664\n", "27 0.675 2267340 0.356412 0.012336 0.849616\n", "28 0.700 2523820 0.396853 0.009595 0.835033\n", "29 0.725 2832920 0.445555 0.007486 0.816756\n", "30 0.750 3156030 0.496459 0.005430 0.797563\n", "31 0.775 3490280 0.549095 0.004112 0.777234\n", "32 0.800 3835030 0.603383 0.002794 0.756242\n", "33 0.825 4221900 0.664280 0.002109 0.732220\n", "34 0.850 4610780 0.725492 0.001476 0.708040\n", "35 0.875 4940720 0.777419 0.001160 0.687395\n", "36 0.900 5310120 0.835563 0.000633 0.664383\n", "37 0.925 5660580 0.890716 0.000422 0.642381\n", "38 0.950 5941550 0.934933 0.000264 0.624736\n", "39 0.975 6166020 0.970260 0.000105 0.610657\n", "40 1.000 6298510 0.991109 0.000053 0.602323\n", "\n", "\n", "" ] } ], "metadata": { "finalized": { "timestamp": 1618357973455, "trusted": true }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.12" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "288px" }, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }