diff --git "a/Week 4/Week_4_Evaluation.ipynb" "b/Week 4/Week_4_Evaluation.ipynb"
deleted file mode 100644--- "a/Week 4/Week_4_Evaluation.ipynb"
+++ /dev/null
@@ -1,1519 +0,0 @@
-{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "provenance": []
- },
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3"
- },
- "language_info": {
- "name": "python"
- }
- },
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "id": "PBNTEr4y54zv"
- },
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "import seaborn as sns\n",
- "import numpy as np\n",
- "import matplotlib.pyplot as plt"
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "!wget https://raw.githubusercontent.com/alexeygrigorev/datasets/master/course_lead_scoring.csv"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "MmueewSm7AsI",
- "outputId": "fbb8d802-f6f4-4345-f7b0-7c43da7cc50d"
- },
- "execution_count": 2,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "--2025-10-17 17:37:22-- https://raw.githubusercontent.com/alexeygrigorev/datasets/master/course_lead_scoring.csv\n",
- "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.108.133, ...\n",
- "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.\n",
- "HTTP request sent, awaiting response... 200 OK\n",
- "Length: 80876 (79K) [text/plain]\n",
- "Saving to: ‘course_lead_scoring.csv’\n",
- "\n",
- "\rcourse_lead_scoring 0%[ ] 0 --.-KB/s \rcourse_lead_scoring 100%[===================>] 78.98K --.-KB/s in 0.01s \n",
- "\n",
- "2025-10-17 17:37:23 (5.35 MB/s) - ‘course_lead_scoring.csv’ saved [80876/80876]\n",
- "\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "## 1. Load the Dataset"
- ],
- "metadata": {
- "id": "lZhPOKu37drd"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "df = pd.read_csv(\"course_lead_scoring.csv\")\n",
- "df.head()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 206
- },
- "id": "3meanh0n7K-T",
- "outputId": "db9e252b-8ee3-41eb-93f0-36bcce966d2a"
- },
- "execution_count": 3,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- " lead_source industry number_of_courses_viewed annual_income \\\n",
- "0 paid_ads NaN 1 79450.0 \n",
- "1 social_media retail 1 46992.0 \n",
- "2 events healthcare 5 78796.0 \n",
- "3 paid_ads retail 2 83843.0 \n",
- "4 referral education 3 85012.0 \n",
- "\n",
- " employment_status location interaction_count lead_score converted \n",
- "0 unemployed south_america 4 0.94 1 \n",
- "1 employed south_america 1 0.80 0 \n",
- "2 unemployed australia 3 0.69 1 \n",
- "3 NaN australia 1 0.87 0 \n",
- "4 self_employed europe 3 0.62 1 "
- ],
- "text/html": [
- "\n",
- "
\n",
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " lead_source | \n",
- " industry | \n",
- " number_of_courses_viewed | \n",
- " annual_income | \n",
- " employment_status | \n",
- " location | \n",
- " interaction_count | \n",
- " lead_score | \n",
- " converted | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " paid_ads | \n",
- " NaN | \n",
- " 1 | \n",
- " 79450.0 | \n",
- " unemployed | \n",
- " south_america | \n",
- " 4 | \n",
- " 0.94 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " social_media | \n",
- " retail | \n",
- " 1 | \n",
- " 46992.0 | \n",
- " employed | \n",
- " south_america | \n",
- " 1 | \n",
- " 0.80 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " events | \n",
- " healthcare | \n",
- " 5 | \n",
- " 78796.0 | \n",
- " unemployed | \n",
- " australia | \n",
- " 3 | \n",
- " 0.69 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " paid_ads | \n",
- " retail | \n",
- " 2 | \n",
- " 83843.0 | \n",
- " NaN | \n",
- " australia | \n",
- " 1 | \n",
- " 0.87 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " referral | \n",
- " education | \n",
- " 3 | \n",
- " 85012.0 | \n",
- " self_employed | \n",
- " europe | \n",
- " 3 | \n",
- " 0.62 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- "
\n",
- "
\n"
- ],
- "application/vnd.google.colaboratory.intrinsic+json": {
- "type": "dataframe",
- "variable_name": "df",
- "summary": "{\n \"name\": \"df\",\n \"rows\": 1462,\n \"fields\": [\n {\n \"column\": \"lead_source\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"social_media\",\n \"organic_search\",\n \"events\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"industry\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 7,\n \"samples\": [\n \"retail\",\n \"healthcare\",\n \"other\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"number_of_courses_viewed\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 0,\n \"max\": 9,\n \"num_unique_values\": 10,\n \"samples\": [\n 7,\n 5,\n 4\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"annual_income\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 15070.140389099402,\n \"min\": 13929.0,\n \"max\": 109899.0,\n \"num_unique_values\": 1267,\n \"samples\": [\n 35832.0,\n 99435.0,\n 53502.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"employment_status\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"employed\",\n \"student\",\n \"unemployed\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"location\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 7,\n \"samples\": [\n \"south_america\",\n \"australia\",\n \"north_america\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"interaction_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 0,\n \"max\": 11,\n \"num_unique_values\": 12,\n \"samples\": [\n 10,\n 8,\n 4\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lead_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.28846540429698403,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 101,\n \"samples\": [\n 0.09,\n 0.72,\n 0.58\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"converted\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 0,\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
- }
- },
- "metadata": {},
- "execution_count": 3
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "df.info()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "yno4dLOY7WH5",
- "outputId": "3694b2e7-3f83-4330-a152-d6f55d9d4974"
- },
- "execution_count": 4,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "\n",
- "RangeIndex: 1462 entries, 0 to 1461\n",
- "Data columns (total 9 columns):\n",
- " # Column Non-Null Count Dtype \n",
- "--- ------ -------------- ----- \n",
- " 0 lead_source 1334 non-null object \n",
- " 1 industry 1328 non-null object \n",
- " 2 number_of_courses_viewed 1462 non-null int64 \n",
- " 3 annual_income 1281 non-null float64\n",
- " 4 employment_status 1362 non-null object \n",
- " 5 location 1399 non-null object \n",
- " 6 interaction_count 1462 non-null int64 \n",
- " 7 lead_score 1462 non-null float64\n",
- " 8 converted 1462 non-null int64 \n",
- "dtypes: float64(2), int64(3), object(4)\n",
- "memory usage: 102.9+ KB\n"
- ]
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "# fetch the categorical and numerical cols\n",
- "cat_cols = df.select_dtypes(include='object').columns\n",
- "num_cols = df.select_dtypes(include='number').columns"
- ],
- "metadata": {
- "id": "DZTXHbBKQDb8"
- },
- "execution_count": 13,
- "outputs": []
- },
- {
- "cell_type": "code",
- "source": [
- "print(cat_cols)\n",
- "print(num_cols)"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "bd97ddLwQV8T",
- "outputId": "aa577271-a6c5-404d-f652-288a631f2d15"
- },
- "execution_count": 14,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "Index(['lead_source', 'industry', 'employment_status', 'location'], dtype='object')\n",
- "Index(['number_of_courses_viewed', 'annual_income', 'interaction_count',\n",
- " 'lead_score', 'converted'],\n",
- " dtype='object')\n"
- ]
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "# For caterogiral features, replace them with 'NA'\n",
- "# For numerical features, replace with with 0.0\n",
- "df[cat_cols] = df[cat_cols].fillna('NA')\n",
- "df[num_cols] = df[num_cols].fillna(0.0)"
- ],
- "metadata": {
- "id": "PTnDq2UVQd64"
- },
- "execution_count": 18,
- "outputs": []
- },
- {
- "cell_type": "code",
- "source": [
- "df.isnull().sum()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 366
- },
- "id": "stcezUf0Rb1E",
- "outputId": "17049c74-5a41-4f77-86e4-7129fbc117e0"
- },
- "execution_count": 19,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "lead_source 0\n",
- "industry 0\n",
- "number_of_courses_viewed 0\n",
- "annual_income 0\n",
- "employment_status 0\n",
- "location 0\n",
- "interaction_count 0\n",
- "lead_score 0\n",
- "converted 0\n",
- "dtype: int64"
- ],
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | lead_source | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | industry | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | number_of_courses_viewed | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | annual_income | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | employment_status | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | location | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | interaction_count | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | lead_score | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | converted | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ]
- },
- "metadata": {},
- "execution_count": 19
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "## 2. Splitting the data into train, valid, test"
- ],
- "metadata": {
- "id": "xxmVrqV9R3lS"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# the converted column is our target\n",
- "X = df.drop(columns='converted')\n",
- "y = df['converted']\n",
- "X.head()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 206
- },
- "id": "dpr1vzhgSJQq",
- "outputId": "5e3e1c9c-a7e8-4e36-9389-8c4878a192a4"
- },
- "execution_count": 63,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- " lead_source industry number_of_courses_viewed annual_income \\\n",
- "0 paid_ads NA 1 79450.0 \n",
- "1 social_media retail 1 46992.0 \n",
- "2 events healthcare 5 78796.0 \n",
- "3 paid_ads retail 2 83843.0 \n",
- "4 referral education 3 85012.0 \n",
- "\n",
- " employment_status location interaction_count lead_score \n",
- "0 unemployed south_america 4 0.94 \n",
- "1 employed south_america 1 0.80 \n",
- "2 unemployed australia 3 0.69 \n",
- "3 NA australia 1 0.87 \n",
- "4 self_employed europe 3 0.62 "
- ],
- "text/html": [
- "\n",
- " \n",
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " lead_source | \n",
- " industry | \n",
- " number_of_courses_viewed | \n",
- " annual_income | \n",
- " employment_status | \n",
- " location | \n",
- " interaction_count | \n",
- " lead_score | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " paid_ads | \n",
- " NA | \n",
- " 1 | \n",
- " 79450.0 | \n",
- " unemployed | \n",
- " south_america | \n",
- " 4 | \n",
- " 0.94 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " social_media | \n",
- " retail | \n",
- " 1 | \n",
- " 46992.0 | \n",
- " employed | \n",
- " south_america | \n",
- " 1 | \n",
- " 0.80 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " events | \n",
- " healthcare | \n",
- " 5 | \n",
- " 78796.0 | \n",
- " unemployed | \n",
- " australia | \n",
- " 3 | \n",
- " 0.69 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " paid_ads | \n",
- " retail | \n",
- " 2 | \n",
- " 83843.0 | \n",
- " NA | \n",
- " australia | \n",
- " 1 | \n",
- " 0.87 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " referral | \n",
- " education | \n",
- " 3 | \n",
- " 85012.0 | \n",
- " self_employed | \n",
- " europe | \n",
- " 3 | \n",
- " 0.62 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- "
\n",
- "
\n"
- ],
- "application/vnd.google.colaboratory.intrinsic+json": {
- "type": "dataframe",
- "variable_name": "X",
- "summary": "{\n \"name\": \"X\",\n \"rows\": 1462,\n \"fields\": [\n {\n \"column\": \"lead_source\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 6,\n \"samples\": [\n \"paid_ads\",\n \"social_media\",\n \"NA\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"industry\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"retail\",\n \"technology\",\n \"NA\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"number_of_courses_viewed\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 0,\n \"max\": 9,\n \"num_unique_values\": 10,\n \"samples\": [\n 7,\n 5,\n 4\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"annual_income\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 24254.34703032844,\n \"min\": 0.0,\n \"max\": 109899.0,\n \"num_unique_values\": 1268,\n \"samples\": [\n 35832.0,\n 53644.0,\n 59357.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"employment_status\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"employed\",\n \"student\",\n \"NA\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"location\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"australia\",\n \"NA\",\n \"south_america\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"interaction_count\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 0,\n \"max\": 11,\n \"num_unique_values\": 12,\n \"samples\": [\n 10,\n 8,\n 4\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lead_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.28846540429698403,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 101,\n \"samples\": [\n 0.09,\n 0.72,\n 0.58\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
- }
- },
- "metadata": {},
- "execution_count": 63
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "# Split the data into 3 parts: train/validation/test with 60%/20%/20% distribution.\n",
- "from sklearn.model_selection import train_test_split\n",
- "\n",
- "X_train, X_tmp, y_train, y_tmp = train_test_split(X, y, test_size=0.4, random_state=1)\n",
- "X_val, X_test, y_val, y_test = train_test_split(X_tmp, y_tmp, test_size=0.5, random_state=1)\n",
- "\n",
- "len(X_train) + len(X_val) + len(X_test) == len(X)"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "QpeKmfb4Rdxe",
- "outputId": "34d3e9e6-bf3e-4b77-a61e-0749062ed5e0"
- },
- "execution_count": 59,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "metadata": {},
- "execution_count": 59
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "## 3. Analysis\n"
- ],
- "metadata": {
- "id": "z-E3R1-GU11q"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### 1. ROC AUC feature importance"
- ],
- "metadata": {
- "id": "gyGiVb26Vk8R"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# For each numerical variable, use it as score (aka prediction) and compute the AUC with the y variable as ground truth.\n",
- "# Use the training dataset for that\n",
- "\n",
- "from sklearn.metrics import roc_auc_score\n",
- "mpp = {}\n",
- "for col in ['lead_score', 'number_of_courses_viewed','interaction_count','annual_income']:\n",
- " score = roc_auc_score(y_true=y_train, y_score=X_train[col])\n",
- " if score < 0.5:\n",
- " score = roc_auc_score(y_true=y_train, y_score=-X_train[col])\n",
- "\n",
- " mpp[col] = score\n",
- "\n",
- "mpp"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "XOD-qUQ5Snic",
- "outputId": "fdd20e9c-4716-48b2-8216-b0bd1d120863"
- },
- "execution_count": 60,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "{'lead_score': np.float64(0.6111168681007025),\n",
- " 'number_of_courses_viewed': np.float64(0.7652439024390244),\n",
- " 'interaction_count': np.float64(0.7271914132379249),\n",
- " 'annual_income': np.float64(0.5446354552990968)}"
- ]
- },
- "metadata": {},
- "execution_count": 60
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "So, `number of courses viewed` has been able to classify 0/1 i.e `converted` the highest among others."
- ],
- "metadata": {
- "id": "QSV6bK2TeJLT"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "###2. Training the model"
- ],
- "metadata": {
- "id": "0k_AkZdNenRw"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# Apply one-hot-encoding using DictVectorizer and train the logistic regression\n",
- "\n",
- "from sklearn.feature_extraction import DictVectorizer\n",
- "\n",
- "# Convert your dataframes to list-of-dicts format\n",
- "train_dicts = X_train.to_dict(orient='records')\n",
- "val_dicts = X_val.to_dict(orient='records')\n",
- "test_dicts = X_test.to_dict(orient='records')\n",
- "\n",
- "# fit dict vectorizer on training data only\n",
- "dv = DictVectorizer(sparse=False)\n",
- "X_train_enc = dv.fit_transform(train_dicts)\n",
- "\n",
- "# Transform validation and test data (don’t fit again)\n",
- "X_val_enc = dv.transform(val_dicts)\n",
- "X_test_enc = dv.transform(test_dicts)"
- ],
- "metadata": {
- "id": "bR0tM94oXNUu"
- },
- "execution_count": 61,
- "outputs": []
- },
- {
- "cell_type": "code",
- "source": [
- "# Train the logistic regression\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "\n",
- "model = LogisticRegression(solver='liblinear', C=1.0, max_iter=1000)\n",
- "model.fit(X_train_enc, y_train)\n",
- "\n",
- "# we will get the raw probs [P(0), P(1)] for each training example but only P(1) here\n",
- "# predict_proba gives the model’s estimated probability of each class.\n",
- "y_score = model.predict_proba(X_val_enc)[:, 1]\n",
- "score = roc_auc_score(y_true=y_val, y_score=y_score)\n",
- "print(f\"AUC Score of the model: {score:.3f}\")"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "WFi6qpItjtfS",
- "outputId": "e25930d1-200c-40b2-cd67-c0a39e6ed9b7"
- },
- "execution_count": 64,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "AUC Score of the model: 0.794\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "The AUC score of the model comes out to be `0.79`."
- ],
- "metadata": {
- "id": "CeJbnBD17Y3n"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### 3. Precision and Recall"
- ],
- "metadata": {
- "id": "nLSdG2oArMmd"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Here, we'll try different thresholds because we only get raw probs from the model and it just converts any `prob > 0.5` to be 1, but we may tryy different threshold vaues which will only give o/p `1` if P(1) > threshold otherwise `0`.... We will check for which threshold value model is feasible from the precision and recall perspective."
- ],
- "metadata": {
- "id": "NeIzXWHptSF6"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "from sklearn.metrics import precision_score, recall_score\n",
- "# Precision is out of all the model predicted True is actually True.\n",
- "# Recall is out of all the actual Trues, how many the model actually classified True\n",
- "threshold = np.arange(0.0, 1.0, 0.01)\n",
- "precisions = []\n",
- "recalls = []\n",
- "\n",
- "for t in threshold:\n",
- " y_preds = (y_score >= t).astype(int)\n",
- " precisions.append(precision_score(y_true=y_val, y_pred=y_preds))\n",
- " recalls.append(recall_score(y_true=y_val, y_pred=y_preds))\n",
- "\n",
- "\n",
- "# Plot the precisions and recalls\n",
- "fig, ax = plt.subplots(figsize=(8, 5))\n",
- "ax.plot(threshold, precisions, label='Precision', color='blue')\n",
- "ax.plot(threshold, recalls, label='Recall', color='green')\n",
- "ax.set_xlabel(\"Threshold\")\n",
- "ax.set_ylabel(\"Scores\")\n",
- "ax.set_title('Precision and Recall vs Threshold')\n",
- "ax.legend()\n",
- "ax.grid(True)\n",
- "\n",
- "plt.show();"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 544
- },
- "id": "GTpnEW2Rj0oE",
- "outputId": "e695cfec-ad66-42a9-857e-dd770006b51f"
- },
- "execution_count": 68,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stderr",
- "text": [
- "/usr/local/lib/python3.12/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n",
- " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n"
- ]
- },
- {
- "output_type": "display_data",
- "data": {
- "text/plain": [
- ""
- ],
- "image/png": "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qlUrLl68yNKlS9m+fTvlypXjueee4+rVqwC0bduWXLlysW3bNrZv307fvn1xdXWNPWdoaCgjR47kxx9/ZP369Zw6dYr33nsvdvtXX33FqFGjGDlyJP/88w8NGjSgadOmHD58OMHXcPr0aZo3b06TJk3YtWsXXbp0oW/fvsn8nRIRSQJDRESSxffff29kzJgxXvvatWsNwFi1alVs2+LFiw3AuHPnjmEYhjFgwADD1dXVuHjxYuw+f/75p+Hr62uEhYXFOV/BggWNb7/91jAMw/Dx8TGmTZt233gA48iRI7Ft48ePN/z9/WOf58iRw/j888/jHFexYkXjrbfeMgzDMI4fP24Axs6dOw3DMIx+/foZJUqUiLP/hx9+aADGtWvXEoxDRCQlaWRWRCSVlC5dOvbrwMBAAC5evBjbljdvXrJnzx77fPfu3dy6dYusWbPi7e0d+zh+/DhHjx4FICgoiC5dulC3bl2GDRsW2x7Dy8uLggULxrluzDVDQkI4d+4c1atXj3NM9erV2b9/f4KvYf/+/VSuXDlOW9WqVRP9PRARSW66AUxEJJXc/fG/zWYDzDmrMTJkyBBn/1u3bhEYGMi6devinSum5NbAgQN59dVXWbx4MUuXLmXAgAHMmDGDl156Kd41Y65rGEZyvBwRkTRBI7MiImlUuXLluHDhAi4uLhQqVCjOI1u2bLH7FSlShD59+rBixQqaN2/O999/n6jz+/r6kiNHDjZs2BCnfcOGDZQoUSLBY4oXL87WrVvjtG3evDmJr0xEJPkomRURSaPq1q1L1apVadasGStWrODEiRNs3LiR/v378/fff3Pnzh169uzJunXrOHnyJBs2bGDbtm0UL1480dd4//33GT58ODNnzuTgwYP07duXXbt20bt37wT37969O4cPH+b999/n4MGD/PLLL0ybNi2ZXrGISNJpmoGISBpls9lYsmQJ/fv3p1OnTly6dImAgABq1aqFv78/zs7OXLlyhfbt2xMcHEy2bNlo3rw5gwYNSvQ1evXqxY0bN3j33Xe5ePEiJUqUYOHChRQuXDjB/fPkycPcuXPp06cPY8eOpVKlSnzxxRfxKjOIiKQWm6HJUyIiIiLioDTNQEREREQclpJZEREREXFYSmZFRERExGEpmRURERERh6VkVkREREQclpJZEREREXFYSmZFRERExGEpmRURERERh6VkVkREREQclpJZEREREXFYSmZFRERExGH9Hx2HW65MhDYHAAAAAElFTkSuQmCC\n"
- },
- "metadata": {}
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "Clearly, there are intersecting around the 0.6 threshold"
- ],
- "metadata": {
- "id": "-t5vXWnvw-24"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "###4. F1 Score"
- ],
- "metadata": {
- "id": "OirwF0lnxJJM"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "from sklearn.metrics import f1_score\n",
- "# f1 score combines both precision and recall, formula: (2*precision*recall) / (precision + recall)\n",
- "\n",
- "threshold = np.arange(0.0, 1.0, 0.01)\n",
- "f1 = []\n",
- "\n",
- "for t in threshold:\n",
- " y_preds = (y_score >= t).astype(int)\n",
- " score = f1_score(y_true=y_val, y_pred=y_preds)\n",
- " f1.append(score)\n",
- "\n",
- "# Plot the precisions and recalls\n",
- "fig, ax = plt.subplots(figsize=(8, 5))\n",
- "ax.plot(threshold, f1, label='F1 Score', color='blue')\n",
- "ax.set_xlabel(\"Threshold\")\n",
- "ax.set_ylabel(\"F1 Scores\")\n",
- "ax.set_title('F1 Score vs Threshold')\n",
- "ax.set_xticks(np.arange(0, 1, 0.1))\n",
- "ax.legend()\n",
- "ax.grid(True)\n",
- "\n",
- "plt.show();"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 487
- },
- "id": "3Da13mgcw-l3",
- "outputId": "b59ac442-f0ae-4eed-f0f8-3bd3c88565f6"
- },
- "execution_count": 84,
- "outputs": [
- {
- "output_type": "display_data",
- "data": {
- "text/plain": [
- ""
- ],
- "image/png": "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PNaZMwF07docLy+DL774kaAghVZnSUhIoF27dpw/f57g4OBb7mvpmdnsGjVqFHPmzCEmJibDIAswcOBAIiMj0x5fuHAhbZzt7T4cZ0hOTmb58uU0a9YMX1/fHD+eFdSje1CP7kE9ugf16DrGjTP4/XcbXl4P89hj6c8PukuPVkj9TXpmWBpmixYtire3N/Hx8em2x8fHExoaesvXjh07llGjRvHTTz9x//3333Q/f39//P39b9ju6+ubq3+wcvt4VlCP7kE9ugf16B7UY9736KPw++8QHe1Du3YZ7+PqPVrBkc/L0gvA/Pz8qF69erqLt1Iv5vr7sIN/GjNmDO+88w5LliyhRo0auVGqiIiIyA1Sp+hasgSsG7jp2SyfzSAyMpIpU6bwxRdfsHv3bl599VUuX75Mly5dAOjYsWO6C8RGjx7N4MGDmTZtGmXKlCEuLo64uDguXbpkVQsiIiLioerXh3z54MQJyOS16+JklofZ1q1bM3bsWIYMGULVqlXZvn07S5YsISQkBIAjR45w8uTJtP0nTZpEUlISzz33HGFhYWnL2LFjrWpBREREPFRAALRta64PGKCzs1bIExeA9erVi169emX4XExMTLrHsbGxOV+QiIiISCYNGwZffw2rV8PChfDkk1ZX5FksPzMrIiIi4spKlYI+fcz1/v11e9vcpjArIiIikk39+kHRorB3L3z+udXVeBaFWREREZFsKlgQoqLM9agouHjR2no8icKsiIiIiBO8/DKUKwenTsH771tdjedQmBURERFxAl9fGDnSXP/gA3O6Lsl5CrMiIiIiTvLMM1CnDiQkwPDh3laX4xEUZkVEREScxGa7PsRgxgwbR44EWVuQB1CYFREREXGiOnXg2WfBbrfx5ZeVrC7H7SnMioiIiDjZyJHg7W2weXMo69fbrC7HrSnMioiIiDhZuXLQubN5b9uhQxW3cpI+XREREZEcMHBgCj4+KaxY4cXPP1tdjftSmBURERHJAXfeCc2bHwbg7bfBMCwuyE0pzIqIiIjkkGef/YN8+QzWr4cff7S6GvekMCsiIiKSQ+64I5FXX7UDOjubUxRmRURERHJQ3752ChSAbdvgP/+xuhr3ozArIiIikoOKFoU+fcz1IUMgJcXaetyNwqyIiIhIDouMhEKFYNcumDvX6mrci8KsiIiISA4rVAjefNNcj4qCa9cs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YmouR3pMTEw0tm3bZmzbts0ICwsz+vbta2zbts3Yt2+fVS3clqM9jho1yvDz8zO+/fbbdNPlXLx40aoWbsvRHkeMGGEsW7bMOHDggPH7778bY8eONXx8fIwpU6ZY1cJtOdrjP7nCbAaO9jhs2DBj6dKlxoEDB4wtW7YYbdq0MQICAoxdu3ZZ1cJtOdrjkSNHjKCgIKNXr17G3r17jR9++MEoXry48e6771rVwm1l9c9qvXr1jNatW+d2uVniaI9RUVFGUFCQ8fXXXxsHDx40li1bZpQtW9Zo1aqVVS3clqM9btiwwfjuu++MAwcOGKtWrTIeeugh46677jL++usvizpwDwqzTvDxxx8bd955p+Hn52fUrFnT2LBhQ9pzDRs2NDp16pRu/2+++ca49957DT8/P+O+++4zFi1alMsVO86RHg8dOmQANywNGzbM/cId4EiPpUuXzrDHqKio3C/cAY70OGjQIOOee+4xAgICjMKFCxu1a9c25syZY0HVjnH07+PfuUKYNQzHenz99dfT9g0JCTEee+wxl5jT0tHvcd26dUatWrUMf39/4+677zbee+8949q1a7lctWMc7XHPnj0GYCxbtiyXK806R3pMTk42hg4dapQtW9YICAgwwsPDjR49euT5oOdIjzExMUbFihUNf39/o0iRIkaHDh2M48ePW1C1e7EZRh48dy8iIiIikgkaMysiIiIiLkthVkRERERclsKsiIiIiLgshVkRERERcVkKsyIiIiLishRmRURERMRlKcyKiIiIiMtSmBURERERl6UwKyKSw2JiYrDZbJw7dy5XjztjxgwKFSqUrfeIjY3FZrOxffv2m+5jVX8iIqAwKyKSLTab7ZbL0KFDrS5RRMSt+VhdgIiIKzt58mTa+ty5cxkyZAh79+5N21agQAE2b97s8PsmJSXh5+fnlBpFRNyZzsyKiGRDaGho2lKwYEFsNlu6bQUKFEjbd8uWLdSoUYPAwEDq1KmTLvQOHTqUqlWr8vnnn3PXXXcREBAAwLlz5+jatSvFihUjODiYhx56iB07dqS9bseOHTRu3JigoCCCg4OpXr36DeF56dKlVKxYkQIFCvDII4+kC+B2u53hw4dTqlQp/P39qVq1KkuWLLllz4sXL+bee+8lX758NG7cmNjY2Ox8hCIi2aIwKyKSSwYNGsQHH3zA5s2b8fHx4cUXX0z3/P79+/nuu++YP39+2hjV559/nlOnTvHjjz+yZcsWqlWrRpMmTTh79iwA7du3p1SpUvzyyy9s2bKFAQMG4Ovrm/aeCQkJjB07lq+++opVq1Zx5MgR+vbtm/b8Rx99xAcffMDYsWP59ddfad68OU888QT79u3LsIejR4/yzDPP0LJlS7Zv307Xrl0ZMGCAkz8pEREHGCIi4hTTp083ChYseMP2FStWGIDx008/pW1btGiRARhXrlwxDMMwoqKiDF9fX+PUqVNp+6xevdoIDg42rl69mu79ypYta3z66aeGYRhGUFCQMWPGjJvWAxj79+9P2zZx4kQjJCQk7XGJEiWM9957L93rHnzwQaNHjx6GYRjGoUOHDMDYtm2bYRiGMXDgQKNSpUrp9u/fv78BGH/99VeGdYiI5CSdmRURySX3339/2npYWBgAp06dSttWunRpihUrlvZ4x44dXLp0iSJFilCgQIG05dChQxw4cACAyMhIunbtStOmTRk1alTa9lSBgYGULVs23XFTj3nhwgVOnDhB3bp1072mbt267N69O8Medu/eTa1atdJtq127dqY/AxERZ9MFYCIiueTvv/632WyAOWY1Vf78+dPtf+nSJcLCwoiJibnhvVKn3Bo6dCjt2rVj0aJF/Pjjj0RFRTFnzhyefvrpG46ZelzDMJzRjohInqAzsyIieVS1atWIi4vDx8eHe+65J91StGjRtP3uvfde+vTpw7Jly3jmmWeYPn16pt4/ODiYEiVKsHbt2nTb165dS6VKlTJ8TcWKFdm0aVO6bRs2bHCwMxER51GYFRHJo5o2bUrt2rV56qmnWLZsGbGxsaxbt45BgwaxefNmrly5Qq9evYiJieHw4cOsXbuWX375hYoVK2b6GG+++SajR49m7ty57N27lwEDBrB9+3Z69+6d4f6vvPIK+/bt480332Tv3r3Mnj2bGTNmOKljERHHaZiBiEgeZbPZWLx4MYMGDaJLly6cPn2a0NBQGjRoQEhICN7e3vz555907NiR+Ph4ihYtyjPPPMOwYcMyfYzXXnuN8+fP88Ybb3Dq1CkqVarEwoULKVeuXIb733nnnXz33Xf06dOHjz/+mJo1azJixIgbZmYQEcktNkODp0RERETERWmYgYiIiIi4LIVZEREREXFZCrMiIiIi4rIUZkVERETEZSnMioiIiIjLUpgVEREREZelMCsiIiIiLkthVkRERERclsKsiIiIiLgshVkRERERcVkKsyIiIiLisv4fOsCFWR0lIzAAAAAASUVORK5CYII=\n"
- },
- "metadata": {}
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "best_thres = threshold[np.argmax(f1)]\n",
- "print(round(best_thres, 3))"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "tTRc-Ur3maHM",
- "outputId": "2a6619de-56ff-4814-e0ea-7dd8dbe30876"
- },
- "execution_count": 88,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "0.47\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "The max F1 score is around **0.85** which lies between threshold values `0.4` and `0.5`."
- ],
- "metadata": {
- "id": "J9HxEiphyK5u"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "###5. K-Fold CV"
- ],
- "metadata": {
- "id": "wJWsAlDx1puX"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# Use the KFold class from Scikit-Learn to evaluate our model on 5 different folds\n",
- "\n",
- "from sklearn.model_selection import KFold\n",
- "\n",
- "X_full = X_train_enc\n",
- "y_full = y_train.to_numpy() # for easy indexing\n",
- "\n",
- "kf = KFold(n_splits=5, shuffle=True, random_state=1)\n",
- "auc_scores = []\n",
- "\n",
- "for train_idxs, valid_idxs in kf.split(X_full):\n",
- " # get the train and validation data\n",
- " X_train_fold, X_val_fold = X_full[train_idxs], X_full[valid_idxs]\n",
- " y_train_fold, y_val_fold = y_full[train_idxs], y_full[valid_idxs]\n",
- "\n",
- " model = LogisticRegression(solver='liblinear', C=1.0, max_iter=1000)\n",
- " model.fit(X_train_fold, y_train_fold)\n",
- "\n",
- " y_val_preds = model.predict_proba(X_val_fold)[:, 1]\n",
- " score = roc_auc_score(y_val_fold, y_val_preds)\n",
- "\n",
- " auc_scores.append(score)\n",
- "\n",
- "\n",
- "print(f\"AUC Scores: {auc_scores}\")\n",
- "print(f\"Mean AUC Score: {np.mean(auc_scores):.3f}\")\n",
- "print(f\"Std Dev of AUC across different folds: {np.std(auc_scores):.3f}\")\n",
- "\n"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "sYctxlvFyAMV",
- "outputId": "9dd4f7e0-75c7-4ec0-dd89-9b6ef68afccf"
- },
- "execution_count": 98,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "AUC Scores: [np.float64(0.8117296491940945), np.float64(0.8232421875), np.float64(0.8364), np.float64(0.8392292205924646), np.float64(0.8282666666666666)]\n",
- "Mean AUC Score: 0.828\n",
- "Std Dev of AUC across different folds: 0.010\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "The standard deviation across scores is `0.010`."
- ],
- "metadata": {
- "id": "q750wsyK7P9I"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "###6. Hyperparameter Tuning"
- ],
- "metadata": {
- "id": "UVV9tZeh5IJN"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# Now let's use 5-Fold cross-validation to find the best parameter C\n",
- "\n",
- "from sklearn.model_selection import KFold\n",
- "\n",
- "X_full = X_train_enc\n",
- "y_full = y_train.to_numpy() # for easy indexing\n",
- "\n",
- "kf = KFold(n_splits=5, shuffle=True, random_state=1)\n",
- "res = []\n",
- "\n",
- "for c in [0.000001, 0.001, 1]:\n",
- " aucs = []\n",
- " for train_idxs, valid_idxs in kf.split(X_full):\n",
- " # get the train and validation data\n",
- " X_train_fold, X_val_fold = X_full[train_idxs], X_full[valid_idxs]\n",
- " y_train_fold, y_val_fold = y_full[train_idxs], y_full[valid_idxs]\n",
- "\n",
- " model = LogisticRegression(solver='liblinear', C=c, max_iter=1000)\n",
- " model.fit(X_train_fold, y_train_fold)\n",
- "\n",
- " y_val_preds = model.predict_proba(X_val_fold)[:, 1]\n",
- " score = roc_auc_score(y_val_fold, y_val_preds)\n",
- "\n",
- " aucs.append(score)\n",
- "\n",
- " mean_auc = np.mean(aucs)\n",
- " std_auc = np.std(aucs)\n",
- " res.append((c, mean_auc, std_auc))\n",
- "\n",
- "print(f\"AUC Scores:\")\n",
- "res"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "jiWN6sdj2-Tm",
- "outputId": "a9604546-ea0d-410f-e7f8-5bf1b01bd498"
- },
- "execution_count": 101,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "AUC Scores:\n"
- ]
- },
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "[(1e-06, np.float64(0.5483516495066526), np.float64(0.04195015614794382)),\n",
- " (0.001, np.float64(0.8723218063593279), np.float64(0.015775289071289396)),\n",
- " (1, np.float64(0.8277735447906454), np.float64(0.00983698319149229))]"
- ]
- },
- "metadata": {},
- "execution_count": 101
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "Clearly, at `C=0.001`, the max mean AUC score of `0.872` is obtained."
- ],
- "metadata": {
- "id": "09t1G8H-7gNI"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "# Homework 4 - Lead Scoring (Bank Marketing) Summary\n",
- "\n",
- "**Q1 - Best numerical feature:** `number_of_courses_viewed` \n",
- "\n",
- "**Q2 - Validation AUC:** `0.794` \n",
- "\n",
- "**Q3 - Threshold where precision ≈ recall:** `0.59` \n",
- "\n",
- "**Q4 - Threshold with max F1:** `0.47` \n",
- "\n",
- "**Q5 - Standard deviation of AUC across 5 folds:** `0.010` \n",
- "\n",
- "**Q6 - Best regularization parameter C:** `0.001` \n",
- "\n",
- "---\n",
- "\n",
- "## Conclusion & Lessons Learned\n",
- "\n",
- "- Feature importance analysis using ROC AUC can reveal which numerical features contribute most to predictions. \n",
- "- Logistic regression with proper one-hot encoding gives a strong baseline for lead scoring, achieving a solid validation AUC. \n",
- "- Precision, recall, and F1 curves help in selecting an optimal decision threshold depending on business goals. \n",
- "- Cross-validation ensures the model's performance is stable and not dependent on a single train/validation split. \n",
- "- Hyperparameter tuning (C in logistic regression) can improve model performance and reduce overfitting. \n",
- "\n",
- "Overall, combining feature analysis, threshold tuning, and cross-validation provides a robust approach to building reliable classification models.\n"
- ],
- "metadata": {
- "id": "uBkvzNMA9O4q"
- }
- },
- {
- "cell_type": "code",
- "source": [],
- "metadata": {
- "id": "_7P8aByq5vhX"
- },
- "execution_count": null,
- "outputs": []
- }
- ]
-}
\ No newline at end of file