diff --git "a/notebook/2_Feature_Engineering_and_Model_Selection.ipynb" "b/notebook/2_Feature_Engineering_and_Model_Selection.ipynb" new file mode 100644--- /dev/null +++ "b/notebook/2_Feature_Engineering_and_Model_Selection.ipynb" @@ -0,0 +1,1307 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4437a980", + "metadata": { + "id": "4437a980" + }, + "source": [ + "# Data Pre-Processing" + ] + }, + { + "cell_type": "markdown", + "id": "74b4d7e0", + "metadata": { + "id": "74b4d7e0" + }, + "source": [ + "#### Import Packages and CSV" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "5530cc59", + "metadata": { + "id": "5530cc59", + "outputId": "5fa0529c-5adf-480a-b56f-116e14b8514e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(25480, 12)\n" + ] + } + ], + "source": [ + "import os\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\")\n", + "pd.set_option(\"display.max_columns\", None)\n", + "\n", + "os.makedirs(\"../figures\", exist_ok=True)\n", + "\n", + "df = pd.read_csv(r\"../EasyVisa.csv\")\n", + "print(df.shape)" + ] + }, + { + "cell_type": "markdown", + "id": "c27265bd", + "metadata": { + "id": "c27265bd" + }, + "source": [ + "## Data Cleaning" + ] + }, + { + "cell_type": "markdown", + "id": "dbad805a", + "metadata": { + "id": "dbad805a" + }, + "source": [ + "### Handling Missing values" + ] + }, + { + "cell_type": "markdown", + "id": "0a0c1c0d", + "metadata": { + "id": "0a0c1c0d" + }, + "source": [ + "* Handling Missing values \n", + "* Handling Duplicates\n", + "* Check data type\n", + "* Understand the dataset" + ] + }, + { + "cell_type": "markdown", + "id": "40b4a428", + "metadata": { + "id": "40b4a428" + }, + "source": [ + "#### Check Null Values" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "2b94aa8f", + "metadata": { + "id": "2b94aa8f" + }, + "outputs": [], + "source": [ + "##these are the features with nan value\n", + "features_with_na=[features for features in df.columns if df[features].isnull().sum()>=1]\n", + "for feature in features_with_na:\n", + " print(feature,np.round(df[feature].isnull().mean()*100,5), '% missing values')" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "f08d8e60", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "features_with_na" + ] + }, + { + "cell_type": "markdown", + "id": "31bb11b3", + "metadata": { + "id": "31bb11b3" + }, + "source": [ + "* **There are no null values in the dataset**" + ] + }, + { + "cell_type": "markdown", + "id": "471fd48f", + "metadata": { + "id": "471fd48f" + }, + "source": [ + "**Handling Duplicates**" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "d8fa17e0", + "metadata": { + "id": "d8fa17e0", + "outputId": "7f1d6a37-65e2-4b4f-f201-69b9c3a80150" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "np.int64(0)" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.duplicated().sum()" + ] + }, + { + "cell_type": "markdown", + "id": "3f574d4c", + "metadata": { + "id": "3f574d4c" + }, + "source": [ + "* **No Duplicates in the dataset**" + ] + }, + { + "cell_type": "markdown", + "id": "5cf6d275", + "metadata": { + "id": "5cf6d275" + }, + "source": [ + "**Remove case_id from the dataset as it cannot used in Model Training**" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "828c0a89", + "metadata": { + "id": "828c0a89" + }, + "outputs": [], + "source": [ + "df.drop('case_id', inplace=True, axis=1)" + ] + }, + { + "cell_type": "markdown", + "id": "6d48a184", + "metadata": { + "id": "6d48a184" + }, + "source": [ + "# Feature Engineering" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "40ec4ef6", + "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", + "
continenteducation_of_employeehas_job_experiencerequires_job_trainingno_of_employeesyr_of_estabregion_of_employmentprevailing_wageunit_of_wagefull_time_positioncase_status
0AsiaHigh SchoolNN145132007West592.2029HourYDenied
1AsiaMaster'sYN24122002Northeast83425.6500YearYCertified
2AsiaBachelor'sNY444442008West122996.8600YearYDenied
3AsiaBachelor'sNN981897West83434.0300YearYDenied
4AfricaMaster'sYN10822005South149907.3900YearYCertified
\n", + "
" + ], + "text/plain": [ + " continent education_of_employee has_job_experience requires_job_training \\\n", + "0 Asia High School N N \n", + "1 Asia Master's Y N \n", + "2 Asia Bachelor's N Y \n", + "3 Asia Bachelor's N N \n", + "4 Africa Master's Y N \n", + "\n", + " no_of_employees yr_of_estab region_of_employment prevailing_wage \\\n", + "0 14513 2007 West 592.2029 \n", + "1 2412 2002 Northeast 83425.6500 \n", + "2 44444 2008 West 122996.8600 \n", + "3 98 1897 West 83434.0300 \n", + "4 1082 2005 South 149907.3900 \n", + "\n", + " unit_of_wage full_time_position case_status \n", + "0 Hour Y Denied \n", + "1 Year Y Certified \n", + "2 Year Y Denied \n", + "3 Year Y Denied \n", + "4 Year Y Certified " + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "8eac04de", + "metadata": { + "id": "8eac04de" + }, + "outputs": [], + "source": [ + "# importing date class from datetime module\n", + "from datetime import date\n", + " \n", + "# creating the date object of today's date\n", + "todays_date = date.today()\n", + "current_year= todays_date.year" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "b9cc4d34", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2026" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "current_year" + ] + }, + { + "cell_type": "markdown", + "id": "79bd9cbf", + "metadata": { + "id": "79bd9cbf" + }, + "source": [ + "**Subtract current year with year of estab to get company's age**" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "3c193e26", + "metadata": { + "id": "3c193e26" + }, + "outputs": [], + "source": [ + "df['company_age'] = current_year-df['yr_of_estab']" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "fd661e95", + "metadata": { + "id": "fd661e95", + "outputId": "5221c83c-9303-43b7-e12a-8e6f46d14f15" + }, + "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", + "
continenteducation_of_employeehas_job_experiencerequires_job_trainingno_of_employeesyr_of_estabregion_of_employmentprevailing_wageunit_of_wagefull_time_positioncase_statuscompany_age
0AsiaHigh SchoolNN145132007West592.2029HourYDenied19
1AsiaMaster'sYN24122002Northeast83425.6500YearYCertified24
2AsiaBachelor'sNY444442008West122996.8600YearYDenied18
3AsiaBachelor'sNN981897West83434.0300YearYDenied129
4AfricaMaster'sYN10822005South149907.3900YearYCertified21
\n", + "
" + ], + "text/plain": [ + " continent education_of_employee has_job_experience requires_job_training \\\n", + "0 Asia High School N N \n", + "1 Asia Master's Y N \n", + "2 Asia Bachelor's N Y \n", + "3 Asia Bachelor's N N \n", + "4 Africa Master's Y N \n", + "\n", + " no_of_employees yr_of_estab region_of_employment prevailing_wage \\\n", + "0 14513 2007 West 592.2029 \n", + "1 2412 2002 Northeast 83425.6500 \n", + "2 44444 2008 West 122996.8600 \n", + "3 98 1897 West 83434.0300 \n", + "4 1082 2005 South 149907.3900 \n", + "\n", + " unit_of_wage full_time_position case_status company_age \n", + "0 Hour Y Denied 19 \n", + "1 Year Y Certified 24 \n", + "2 Year Y Denied 18 \n", + "3 Year Y Denied 129 \n", + "4 Year Y Certified 21 " + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "2cc2b5c1", + "metadata": { + "id": "2cc2b5c1" + }, + "outputs": [], + "source": [ + "df.drop('yr_of_estab', inplace=True, axis=1)" + ] + }, + { + "cell_type": "markdown", + "id": "66542de1", + "metadata": { + "id": "66542de1" + }, + "source": [ + "### Type of Features" + ] + }, + { + "cell_type": "markdown", + "id": "85df52e5", + "metadata": { + "id": "85df52e5" + }, + "source": [ + "**Numeric Features**" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "d48aeaa4", + "metadata": { + "id": "d48aeaa4", + "outputId": "3472d509-3613-408a-b2e0-7e04e3ba694a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of Numerical Features : 3\n" + ] + } + ], + "source": [ + "num_features = [feature for feature in df.columns if df[feature].dtype != 'O']\n", + "print('Num of Numerical Features :', len(num_features))" + ] + }, + { + "cell_type": "markdown", + "id": "e1107060", + "metadata": { + "id": "e1107060" + }, + "source": [ + "**Categorical Features**" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "ff997805", + "metadata": { + "id": "ff997805", + "outputId": "3dd63e00-7af0-48de-d7bb-5d1f51c557de" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of Categorical Features : 8\n" + ] + } + ], + "source": [ + "cat_features = [feature for feature in df.columns if df[feature].dtype == 'O']\n", + "print('Num of Categorical Features :', len(cat_features))" + ] + }, + { + "cell_type": "markdown", + "id": "9bc032f9", + "metadata": { + "id": "9bc032f9" + }, + "source": [ + "**Discrete features**" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "812ee6e0", + "metadata": { + "id": "812ee6e0", + "outputId": "0181bd9a-5f2b-4292-8a57-d9c683d2e128" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of Discrete Features : 0\n" + ] + } + ], + "source": [ + "discrete_features=[feature for feature in num_features if len(df[feature].unique())<=25]\n", + "print('Num of Discrete Features :',len(discrete_features))" + ] + }, + { + "cell_type": "markdown", + "id": "3e6740bf", + "metadata": { + "id": "3e6740bf" + }, + "source": [ + "**Continues Features**" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "e501c72b", + "metadata": { + "id": "e501c72b", + "outputId": "c10010b4-eb51-406e-afc4-464894031222" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of Continuous Features : 3\n" + ] + } + ], + "source": [ + "continuous_features=[feature for feature in num_features if feature not in discrete_features]\n", + "print('Num of Continuous Features :',len(continuous_features))" + ] + }, + { + "cell_type": "markdown", + "id": "5a2cf140", + "metadata": { + "id": "5a2cf140" + }, + "source": [ + "### Split X and Y" + ] + }, + { + "cell_type": "markdown", + "id": "9455c01a", + "metadata": { + "id": "9455c01a" + }, + "source": [ + "* **Split Dataframe to X and y**\n", + "* **Here we set a variable X i.e, independent columns, and a variable y i.e, dependent column as the “Case_Status” column.**\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "4434aa31", + "metadata": { + "id": "4434aa31" + }, + "outputs": [], + "source": [ + "X = df.drop('case_status', axis=1)\n", + "y = df['case_status']" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "67a428d4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 Denied\n", + "1 Certified\n", + "2 Denied\n", + "3 Denied\n", + "4 Certified\n", + "Name: case_status, dtype: object" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.head()" + ] + }, + { + "cell_type": "markdown", + "id": "f2260600", + "metadata": { + "id": "f2260600" + }, + "source": [ + "**Manual encoding target column**" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "7a9d7c95", + "metadata": { + "id": "7a9d7c95" + }, + "outputs": [], + "source": [ + "# If the target column has Denied it is encoded as 1 others as 0\n", + "y= np.where(y=='Denied', 1,0)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "398fad76", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 0, 1, ..., 0, 0, 0], shape=(25480,))" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + }, + { + "cell_type": "markdown", + "id": "ca2d817d", + "metadata": { + "id": "ca2d817d" + }, + "source": [ + "## Feature Transformation" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "a921c3a0", + "metadata": { + "id": "a921c3a0", + "outputId": "84d46867-1130-41fc-9dca-e5087fccb83d", + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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x3B+j4z2cd6eWVus1LdvX1myZIm5K3HnnXc6nte2aBrnhQsXMmzn7VwPnVlCO75Z+Z3MSlusoncHdLaKunXrmuyf2rVry+TJk7le6dAUX/1/Smf50Duiuugf1ylTppif9a4K1yxzejfqrrvukiNHjvB7lg7ttOqdRGfVq1d3DEXi+x85FUh9Jm/9nvEGfIdknw4J1c9Xf58C6frQp875NUqPBsuV8++RP18j/o3hXgSlvJj+susvuqbXOt9l1nUds+qvKlasaP5HcT5vTVXUcez289ZH/R9M/yFtt3btWnN97F+Kuo9Oi6tjae00C0Qj28WLF3fs4/w+9n3s75OVtlhBa1XqHwZNDdXz1HY509+T/Pnzu7RTx/XrP/Scr5mmmjp3NPRc9cvN/o/EzK5HVn4ns9IWT9G2JiUlcb3SoXe39Hz1ro990YwWrV1i/5lrljmdMlvvEmrwhd+zm2n6f9pppX/++WeT9aH4/kdOBVKfyVu/Z7wB3yHZ99tvv5maUvr7FAjXhz717V+j9GhfUTn/HvnzNUqLf2PcptsslI5cplM96iwUs2fPNrNh9OzZ00z16Fyt3xfpDF86BaYu+ms4ceJE8/N///tfxxSxep5ff/21bc+ePWaWkPSm87333nvNtOLfffedmTHMebpanXFAp6vt3LmzmaJTr6VOrZl2utp8+fLZ3nvvPTMbgc5wk950tZm1Jbf17t3bTJm7fv16l6lX//zzT5cpP3W61rVr15opPxs2bGiWtNOPxsbGmulddUrRUqVKpTv96MCBA831mDZtWrrTj2b2O5lZW6zwj3/8w8wScvToUfO56brOHLNy5costTHQrld60s6swjW72d///nfz/6X+nun3iU7vq9P66kw1WWlnoF2z7du3m+/ct99+23b48GHb3Llzzbl99tlnjn34/kdO+WufyZe+Z6xAHzLn10e3vfbaa2bmLf19Wr16te2+++4z53/t2rWAuD70qW//Gh05csQ2evRo0x79PdLPr1KlSrbGjRsHxDXi3xjuR1DKB0ydOtX8MgUHB5upH7du3WrzdevWrTN/KNMuOk2tfZrYYcOGmT94+j9bs2bNbIcOHXI5xtmzZ80fyCJFipgpNLt162b+2Dr76aefzPTjeow77rjD/PFL68svv7Tddddd5vrq1JtLly512Z6VtuS29K6VLrNmzXLso3/A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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# distribution of data before scaling\n", + "plt.figure(figsize=(12, 6))\n", + "for i, col in enumerate(['no_of_employees','prevailing_wage','company_age']):\n", + " plt.subplot(2, 2, i+1)\n", + " sns.histplot(x=X[col], color='indianred')\n", + " plt.xlabel(col)\n", + " plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "id": "993fca30", + "metadata": { + "id": "993fca30" + }, + "source": [ + "* No of employees and Copmany age column is skewed\n", + "* Apply a power transform featurewise to make data more Gaussian-like.\n", + "\n", + "Power transforms are a family of parametric, monotonic transformations that are applied to make data more Gaussian-like. This is useful for modeling issues related to heteroscedasticity (non-constant variance), or other situations where normality is desired.\n", + "\n", + "Currently, PowerTransformer supports the Box-Cox transform and the Yeo-Johnson transform." + ] + }, + { + "cell_type": "markdown", + "id": "a890a255", + "metadata": { + "id": "a890a255" + }, + "source": [ + "**Checking Skewness**" + ] + }, + { + "cell_type": "markdown", + "id": "ca6ac67f", + "metadata": { + "id": "ca6ac67f" + }, + "source": [ + "**What is Skewness ?**\n", + "\n", + "* Skewness refers to a distortion or asymmetry that deviates from the symmetrical bell curve, or normal distribution, in a set of data. If the curve is shifted to the left or to the right, it is said to be skewed. Skewness can be quantified as a representation of the extent to which a given distribution varies from a normal distribution. A normal distribution has a skew of zero" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "4038a207", + "metadata": { + "id": "4038a207", + "outputId": "51497045-4d93-46f8-ea18-47d742680845" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "no_of_employees 12.265260\n", + "prevailing_wage 0.755776\n", + "company_age 2.037301\n", + "dtype: float64" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check Skewness\n", + "X[continuous_features].skew(axis=0, skipna=True)" + ] + }, + { + "cell_type": "markdown", + "id": "1786c0ad", + "metadata": { + "id": "1786c0ad" + }, + "source": [ + "- Positiviely Skewed : company_age, no_of_employees.\n", + "- We can handle outliers and then check the skewness." + ] + }, + { + "cell_type": "markdown", + "id": "96c39509", + "metadata": { + "id": "96c39509" + }, + "source": [ + "## Apply Power Transformer to Check if it can reduces the outliers" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "56ad9567", + "metadata": { + "id": "56ad9567" + }, + "outputs": [], + "source": [ + "from sklearn.preprocessing import PowerTransformer\n", + "pt = PowerTransformer(method='yeo-johnson')\n", + "transform_features = ['company_age', 'no_of_employees']\n", + "X_copy = pt.fit_transform(X[transform_features])" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "255b1c5e", + "metadata": { + "id": "255b1c5e" + }, + "outputs": [], + "source": [ + "X_copy = pd.DataFrame(X_copy, columns=transform_features)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "b49bad36", + "metadata": { + "id": "b49bad36", + "outputId": "d732f372-b0f2-4bed-9f4d-394d46891abb" + }, + "outputs": [ + { + "data": { + "image/png": "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n//8Z9MeVHpP2k67ePGiy2u0HffUU0859//2t7/JXXfdZdpVes0pU6Y436M096vPu3btKjVq1DDnNeRLSkoq8ecIoBgOAHCTcePGOWrWrOlYsWKF45tvvnFs27bN8dZbbzmysrIc9evXdzz66KOOAwcOODZt2uRo0qSJIzo62vlafV6jRg3HiBEjHF999ZXj7bffduj/wnr27OmYPn264+uvv3a8/PLLjsqVKztOnDhhXnPs2DFT5qabbnL893//t+PQoUOO3//+9+Z9zpw5Y8pcunTJERcX59izZ4/ju+++c/zXf/2Xo2rVqo41a9a4XDskJMTxzDPPOA4fPuz48MMPTZmlS5ea83o9f39/x+7du52v2bt3r8PPz8/x7bfflvhz0fv9z//8T/PeWseYmBhHRESE4/z58+Z8Xl6eo2nTpo6HHnrIsW/fPvNzu/vuu829ffDBB877aN68uePpp5927N+/37zPE088YV538eLFMvsMAQDAjevcubNpW0yePNm0Yd555x3Tbti4caPj8uXLjsjISEenTp0cSUlJjp07dzratm1rXlMa77//vmkPLVq0yHHkyBHHa6+95qhUqZJj8+bN5vzp06cdvXr1cgwaNMhx6tQpR0ZGRonv2b17d0e/fv1Me0nr+8ILLzjCw8Md6enp5vxLL73kqF69uuOxxx5zpKSkONavX++oUqWKaaeNGjXKtN2WLVtm2i56Pxbd1/fR9qDWdeLEiaau2o4p2Jb7xz/+Yfb/9a9/mTbYs88+a9pN2g6qXbu2ub765ZdfHKGhoY61a9c6r5GWluYICAhw3v/WrVvNz17bo9pO05/5zTffbD6L0t5vy5YtHU8++aSpg57X62kbDcD1IZgC4BYasgQGBpqGR2Ea8GhgpQGV5aOPPjJhT2pqqjMcaty4sWmsWTR0uf/++537GuBUq1bN8de//tWlMfPKK684y+Tm5pqg6tVXXy22rhp+DRw40LlvXVvf3/Kb3/zG8fjjjzv3e/fu7Rg+fLhzXxthXbp0cVwPvUcNzzQAU5988olpUGnj0ZKYmOgSTGmwpT+P/Px8ZxkNpIKDgx2ffvrpddUDAACUDw2ZNHgqqH379o7x48eboETDmePHjzvPadijv/cLfglWnHvvvdcxbNgwl2PabunTp49zv3///i5fAF6NfiGmQU5OTo7L8VtvvdXx5ptv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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(12, 5))\n", + "for i, col in enumerate(transform_features):\n", + " plt.subplot(1, 2, i+1)\n", + " sns.histplot(x=X_copy[col], color='indianred')\n", + " plt.xlabel(col)\n", + " plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "id": "bb26baf6", + "metadata": { + "id": "bb26baf6" + }, + "source": [ + "**Checking Skewness**" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "4c9a232a", + "metadata": { + "id": "4c9a232a", + "outputId": "1ef33497-82c9-42b1-d17d-c62b5c5049ad" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "company_age 0.120823\n", + "no_of_employees 0.399339\n", + "dtype: float64" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_copy.skew(axis=0, skipna=True)" + ] + }, + { + "cell_type": "markdown", + "id": "69c717fc", + "metadata": { + "id": "69c717fc" + }, + "source": [ + "- Here Yeo-Johnson is used and it supports both positive or negative data for transformation.\n", + "- So Power Transformer with yeo-johnson can be used." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "7740ff27", + "metadata": { + "id": "7740ff27", + "outputId": "76d06e1f-cc70-41fa-91e2-6b99a2683eb4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "continent : 6\n", + "education_of_employee : 4\n", + "has_job_experience : 2\n", + "requires_job_training : 2\n", + "region_of_employment : 5\n", + "unit_of_wage : 4\n", + "full_time_position : 2\n", + "case_status : 2\n" + ] + } + ], + "source": [ + "for feature in cat_features:\n", + " print(feature,':', df[feature].nunique())" + ] + }, + { + "cell_type": "markdown", + "id": "51a3853d", + "metadata": { + "id": "51a3853d" + }, + "source": [ + "## Feature Encoding and Scaling" + ] + }, + { + "cell_type": "markdown", + "id": "29dbaf2d", + "metadata": { + "id": "29dbaf2d" + }, + "source": [ + " **One Hot Encoding for Columns which had lesser unique values and not ordinal**\n", + "* One hot encoding is a process by which categorical variables are converted into a form that could be provided to ML algorithms to do a better job in prediction.\n", + "\n", + "**Ordinal Encoding for Columns which has many unique categories** \n", + "* Ordinal encoding is used here as label encoder is supported for column transformer.\n", + "* Ordinal encoding is used for Ordinal Variable. Variable comprises a finite set of discrete values with a ranked ordering between values.\n", + "\n", + "**Standard Scaler** \n", + "* Standardize features by removing the mean and scaling to unit variance.\n", + "\n", + "**Power Transformer**\n", + "* Power transforms are a technique for transforming numerical input or output variables to have a Gaussian or more-Gaussian-like probability distribution." + ] + }, + { + "cell_type": "markdown", + "id": "e245a3af", + "metadata": { + "id": "e245a3af" + }, + "source": [ + "**Selecting number features for preprocessing**" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "ef40892b", + "metadata": { + "id": "ef40892b" + }, + "outputs": [], + "source": [ + "num_features = list(X.select_dtypes(exclude=\"object\").columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "5321209d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['no_of_employees', 'prevailing_wage', 'company_age']" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "num_features" + ] + }, + { + "cell_type": "markdown", + "id": "2bccb0bc", + "metadata": { + "id": "2bccb0bc" + }, + "source": [ + "### **Preprocessing using Column Transformer**" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "e9a2c9b5", + "metadata": { + "id": "e9a2c9b5" + }, + "outputs": [], + "source": [ + "# Create Column Transformer with 3 types of transformers\n", + "or_columns = ['has_job_experience','requires_job_training','full_time_position','education_of_employee']\n", + "oh_columns = ['continent','unit_of_wage','region_of_employment']\n", + "transform_columns= ['no_of_employees','company_age']\n", + "\n", + "from sklearn.preprocessing import OneHotEncoder, StandardScaler,OrdinalEncoder, PowerTransformer\n", + "from sklearn.compose import ColumnTransformer \n", + "from sklearn.pipeline import Pipeline\n", + "\n", + "numeric_transformer = StandardScaler()\n", + "oh_transformer = OneHotEncoder()\n", + "ordinal_encoder = OrdinalEncoder()\n", + "\n", + "transform_pipe = Pipeline(steps=[\n", + " ('transformer', PowerTransformer(method='yeo-johnson'))\n", + "])\n", + "\n", + "preprocessor = ColumnTransformer(\n", + " [\n", + " (\"OneHotEncoder\", oh_transformer, oh_columns),\n", + " (\"Ordinal_Encoder\", ordinal_encoder, or_columns),\n", + " (\"Transformer\", transform_pipe, transform_columns),\n", + " (\"StandardScaler\", numeric_transformer, num_features)\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "328d041f", + "metadata": { + "id": "328d041f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train: (20384, 24), Test: (5096, 24)\n", + "Class distribution — Certified: 13614, Denied: 6770\n" + ] + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "# Split BEFORE preprocessing to prevent data leakage\n", + "X_train, X_test, y_train, y_test = train_test_split(\n", + " X, y, test_size=0.2, random_state=42, stratify=y\n", + ")\n", + "\n", + "# Fit preprocessor on training data only\n", + "X_train_transformed = preprocessor.fit_transform(X_train)\n", + "X_test_transformed = preprocessor.transform(X_test)\n", + "\n", + "print(f\"Train: {X_train_transformed.shape}, Test: {X_test_transformed.shape}\")\n", + "print(f\"Class distribution — Certified: {(y_train == 0).sum()}, Denied: {(y_train == 1).sum()}\")" + ] + }, + { + "cell_type": "markdown", + "id": "d791f12e", + "metadata": {}, + "source": [ + "**Training on natural distribution** (no SMOTEENN resampling). The 2:1 class imbalance is handled via:\n", + "- LightGBM's `is_unbalance` and CatBoost's `auto_class_weights` during training\n", + "- Threshold tuning after training to recover denied recall" + ] + }, + { + "cell_type": "markdown", + "id": "as68s6qcx5b", + "metadata": {}, + "source": [ + "## Next Step: Model Training\n", + "\n", + "Model training is executed on an H100 GPU via Modal:\n", + "\n", + "```bash\n", + "modal run train_model.py\n", + "```\n", + "\n", + "The training pipeline:\n", + "1. GridSearchCV across 5 models (RF, GBM, XGBoost, LightGBM, CatBoost)\n", + "2. Stacking ensemble from the top 3 models\n", + "3. Threshold tuning (maximize accuracy with denied recall >= 60%)\n", + "4. Final model wrapped in `ThresholdClassifier` and saved to `artifact/model.pkl`\n", + "\n", + "See `train_model.py` for the full training script and `notebook/3_Model_Evaluation.ipynb` for evaluation results." + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "base", + "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.13.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}