diff --git "a/Week 3/Week_3.ipynb" "b/Week 3/Week_3.ipynb"
deleted file mode 100644--- "a/Week 3/Week_3.ipynb"
+++ /dev/null
@@ -1,3261 +0,0 @@
-{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "provenance": [],
- "authorship_tag": "ABX9TyMxyb64/GCLXjpy1GxhSJ6Z",
- "include_colab_link": true
- },
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3"
- },
- "language_info": {
- "name": "python"
- }
- },
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "view-in-github",
- "colab_type": "text"
- },
- "source": [
- " "
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "## Week 3: ML Zoomcamp\n",
- "### Classification"
- ],
- "metadata": {
- "id": "vWzwNTAGRmng"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# fetch the data\n",
- "\"\"\"\n",
- "In this dataset our desired target for classification task will be converted variable - has the client signed up to the platform or not.\n",
- "\"\"\"\n",
- "\n",
- "\n",
- "!wget https://raw.githubusercontent.com/alexeygrigorev/datasets/master/course_lead_scoring.csv"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "XUk8lPY6RvH5",
- "outputId": "9ec03bdb-9c88-461d-c454-126b0c368742"
- },
- "execution_count": 1,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "--2025-10-12 16:37:19-- https://raw.githubusercontent.com/alexeygrigorev/datasets/master/course_lead_scoring.csv\n",
- "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n",
- "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.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.001s \n",
- "\n",
- "2025-10-12 16:37:19 (63.5 MB/s) - ‘course_lead_scoring.csv’ saved [80876/80876]\n",
- "\n"
- ]
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "import pandas as pd\n",
- "import matplotlib.pyplot as plt\n",
- "import seaborn as sns\n",
- "import numpy as np"
- ],
- "metadata": {
- "id": "T490EjunTGh-"
- },
- "execution_count": 2,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "source": [
- "## 1. Data Preprocessing"
- ],
- "metadata": {
- "id": "GDBpiidiV9ND"
- }
- },
- {
- "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": "OeFOKrTiSH9C",
- "outputId": "68689239-d52e-464d-dd43-9d411d373b8c"
- },
- "execution_count": 3,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- " lead_source industry ... lead_score converted\n",
- "0 paid_ads NaN ... 0.94 1\n",
- "1 social_media retail ... 0.80 0\n",
- "2 events healthcare ... 0.69 1\n",
- "3 paid_ads retail ... 0.87 0\n",
- "4 referral education ... 0.62 1\n",
- "\n",
- "[5 rows x 9 columns]"
- ],
- "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": "vXk94iuTTcUI",
- "outputId": "8be5b57b-0c3e-4a18-b0eb-b88451e37e82"
- },
- "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": [
- "# check for null values\n",
- "df.isnull().sum()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 366
- },
- "id": "qTxDWSXIToI5",
- "outputId": "7c579a71-bec5-41d7-d8e7-0feef29029c2"
- },
- "execution_count": 6,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "lead_source 128\n",
- "industry 134\n",
- "number_of_courses_viewed 0\n",
- "annual_income 181\n",
- "employment_status 100\n",
- "location 63\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",
- " 128 \n",
- " \n",
- " \n",
- " industry \n",
- " 134 \n",
- " \n",
- " \n",
- " number_of_courses_viewed \n",
- " 0 \n",
- " \n",
- " \n",
- " annual_income \n",
- " 181 \n",
- " \n",
- " \n",
- " employment_status \n",
- " 100 \n",
- " \n",
- " \n",
- " location \n",
- " 63 \n",
- " \n",
- " \n",
- " interaction_count \n",
- " 0 \n",
- " \n",
- " \n",
- " lead_score \n",
- " 0 \n",
- " \n",
- " \n",
- " converted \n",
- " 0 \n",
- " \n",
- " \n",
- "
\n",
- "
dtype: int64 "
- ]
- },
- "metadata": {},
- "execution_count": 6
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "k = df.select_dtypes(include=\"object\").columns\n",
- "list(k)"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "uacmf0GkVr8P",
- "outputId": "b2302f45-2c28-48c1-d034-56e09f8ecfda"
- },
- "execution_count": 24,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "['lead_source', 'industry', 'employment_status', 'location']"
- ]
- },
- "metadata": {},
- "execution_count": 24
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "# For categorical features, replace them with 'NA'\n",
- "cat_cols = df.select_dtypes(include=\"object\").columns\n",
- "df[cat_cols] = df[cat_cols].fillna(\"NA\")\n",
- "df.isnull().sum()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 366
- },
- "id": "mgSHgnlhTu2K",
- "outputId": "8ee0a287-85b4-4c05-b340-b0cc903ced19"
- },
- "execution_count": 18,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "lead_source 0\n",
- "industry 0\n",
- "number_of_courses_viewed 0\n",
- "annual_income 181\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",
- " 181 \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",
- "
dtype: int64 "
- ]
- },
- "metadata": {},
- "execution_count": 18
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "# For numerical features, replace with with 0.0\n",
- "num_cols = df.select_dtypes(include=\"number\").columns\n",
- "df[num_cols] = df[num_cols].fillna(0.0)"
- ],
- "metadata": {
- "id": "_edKmKRyUBk4"
- },
- "execution_count": 26,
- "outputs": []
- },
- {
- "cell_type": "code",
- "source": [
- "df.isnull().sum()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 366
- },
- "id": "7T_pNik4Wa-C",
- "outputId": "7324d378-5ec1-434d-df20-b927dd176b60"
- },
- "execution_count": 27,
- "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",
- "
dtype: int64 "
- ]
- },
- "metadata": {},
- "execution_count": 27
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "## 2. Data Analysis"
- ],
- "metadata": {
- "id": "L5cSlvjqWoWj"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# What is the most frequent observation (mode) for the column industry?\n",
- "\n",
- "df[\"industry\"].info()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "WtHxvyG9Wk-T",
- "outputId": "865957f3-1bde-4e17-ac8f-361a31832022"
- },
- "execution_count": 28,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "\n",
- "RangeIndex: 1462 entries, 0 to 1461\n",
- "Series name: industry\n",
- "Non-Null Count Dtype \n",
- "-------------- ----- \n",
- "1462 non-null object\n",
- "dtypes: object(1)\n",
- "memory usage: 11.6+ KB\n"
- ]
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "df[\"industry\"].value_counts()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 366
- },
- "id": "N5A21mFMWypi",
- "outputId": "17f0be30-98ae-4534-e652-43d55d308ad9"
- },
- "execution_count": 35,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "industry\n",
- "retail 203\n",
- "finance 200\n",
- "other 198\n",
- "healthcare 187\n",
- "education 187\n",
- "technology 179\n",
- "manufacturing 174\n",
- "NA 134\n",
- "Name: count, dtype: int64"
- ],
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " count \n",
- " \n",
- " \n",
- " industry \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " retail \n",
- " 203 \n",
- " \n",
- " \n",
- " finance \n",
- " 200 \n",
- " \n",
- " \n",
- " other \n",
- " 198 \n",
- " \n",
- " \n",
- " healthcare \n",
- " 187 \n",
- " \n",
- " \n",
- " education \n",
- " 187 \n",
- " \n",
- " \n",
- " technology \n",
- " 179 \n",
- " \n",
- " \n",
- " manufacturing \n",
- " 174 \n",
- " \n",
- " \n",
- " NA \n",
- " 134 \n",
- " \n",
- " \n",
- "
\n",
- "
dtype: int64 "
- ]
- },
- "metadata": {},
- "execution_count": 35
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Q1. What is the most frequent observation (mode) for the column industry?"
- ],
- "metadata": {
- "id": "KzlSc9Ss8kVI"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "df[\"industry\"].mode()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 115
- },
- "id": "yiY3S-N3W5NB",
- "outputId": "2cfeccd7-edc1-4eec-ea2f-00b05e5546f4"
- },
- "execution_count": 37,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "0 retail\n",
- "Name: industry, dtype: object"
- ],
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " industry \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " retail \n",
- " \n",
- " \n",
- "
\n",
- "
dtype: object "
- ]
- },
- "metadata": {},
- "execution_count": 37
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "# Create the correlation matrix for the numerical features of your dataset.\n",
- "\n",
- "num_data = df[num_cols]\n",
- "num_data.head()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 206
- },
- "id": "7ovf78xsXILv",
- "outputId": "37cc8475-d481-4cc4-db14-83ad2f812998"
- },
- "execution_count": 38,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- " number_of_courses_viewed annual_income ... lead_score converted\n",
- "0 1 79450.0 ... 0.94 1\n",
- "1 1 46992.0 ... 0.80 0\n",
- "2 5 78796.0 ... 0.69 1\n",
- "3 2 83843.0 ... 0.87 0\n",
- "4 3 85012.0 ... 0.62 1\n",
- "\n",
- "[5 rows x 5 columns]"
- ],
- "text/html": [
- "\n",
- " \n",
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " number_of_courses_viewed \n",
- " annual_income \n",
- " interaction_count \n",
- " lead_score \n",
- " converted \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " 1 \n",
- " 79450.0 \n",
- " 4 \n",
- " 0.94 \n",
- " 1 \n",
- " \n",
- " \n",
- " 1 \n",
- " 1 \n",
- " 46992.0 \n",
- " 1 \n",
- " 0.80 \n",
- " 0 \n",
- " \n",
- " \n",
- " 2 \n",
- " 5 \n",
- " 78796.0 \n",
- " 3 \n",
- " 0.69 \n",
- " 1 \n",
- " \n",
- " \n",
- " 3 \n",
- " 2 \n",
- " 83843.0 \n",
- " 1 \n",
- " 0.87 \n",
- " 0 \n",
- " \n",
- " \n",
- " 4 \n",
- " 3 \n",
- " 85012.0 \n",
- " 3 \n",
- " 0.62 \n",
- " 1 \n",
- " \n",
- " \n",
- "
\n",
- "
\n",
- "
\n",
- "
\n"
- ],
- "application/vnd.google.colaboratory.intrinsic+json": {
- "type": "dataframe",
- "variable_name": "num_data",
- "summary": "{\n \"name\": \"num_data\",\n \"rows\": 1462,\n \"fields\": [\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\": \"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": 38
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Q2. Create the correlation matrix for the numerical features of your dataset. In a correlation matrix, you compute the correlation coefficient between every pair of features."
- ],
- "metadata": {
- "id": "3PzyjTOm8t82"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "corr_c = num_data.corr()\n",
- "sns.heatmap(corr_c, annot=True, cmap=\"coolwarm\");"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 613
- },
- "id": "i_vXirHzXgr_",
- "outputId": "6d5291db-1b83-4e4c-b021-75535f7b6bde"
- },
- "execution_count": 41,
- "outputs": [
- {
- "output_type": "display_data",
- "data": {
- "text/plain": [
- ""
- ],
- "image/png": "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\n"
- },
- "metadata": {}
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "Clearly `interaction_count` and `annual_income` has the highest corr."
- ],
- "metadata": {
- "id": "em8dBHhl8zM5"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "## 3. Model Building"
- ],
- "metadata": {
- "id": "j0cM8PxSZdcF"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "df.head()\n",
- "X = df.drop(columns=\"converted\")\n",
- "y = df[\"converted\"]\n",
- "len(y) == len(X)"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "uRO0tMs7XvY8",
- "outputId": "8b366fb6-4c9c-4ef9-998d-c9313db8c078"
- },
- "execution_count": 47,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "metadata": {},
- "execution_count": 47
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "# Split your data in train/val/test sets with 60%/20%/20% distribution.\n",
- "\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=42)\n",
- "X_val, X_test, y_val, y_test = train_test_split(X_tmp, y_tmp, test_size=0.5, random_state=42)\n",
- "\n",
- "len(X_train) + len(X_val) + len(X_test) == len(X)"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "M474Oa70Zo0J",
- "outputId": "1d47112d-6a81-4e8b-be21-33e9adff9a83"
- },
- "execution_count": 81,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "metadata": {},
- "execution_count": 81
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Q4. Calculate the mutual information score between y and other categorical variables in the dataset. Use the training set only.\n",
- "Round the scores to 2 decimals using round(score, 2)."
- ],
- "metadata": {
- "id": "uK--fk7L9C98"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# Calculate the mutual information score between y and other categorical variables in the dataset. Use the training set only.\n",
- "\n",
- "from sklearn.metrics import mutual_info_score\n",
- "\n",
- "# We'll store scores in a dictionary\n",
- "mi_scores = {}\n",
- "\n",
- "# Iterate over all cols\n",
- "for col in X_train.columns:\n",
- " mi = mutual_info_score(y_train, X_train[col])\n",
- " mi_scores[col] = round(mi, 2)\n",
- "\n",
- "# Convert to series for easy sorting\n",
- "mi_df = pd.Series(mi_scores, name='MI_score').sort_values(ascending=False)\n",
- "print(mi_df)\n"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "LtuNI_GSa_y5",
- "outputId": "ff4e211d-01f0-400b-85eb-432d2f98ddba"
- },
- "execution_count": 82,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "annual_income 0.58\n",
- "number_of_courses_viewed 0.12\n",
- "lead_score 0.09\n",
- "interaction_count 0.08\n",
- "lead_source 0.03\n",
- "industry 0.02\n",
- "employment_status 0.02\n",
- "location 0.00\n",
- "Name: MI_score, dtype: float64\n"
- ]
- },
- {
- "output_type": "stream",
- "name": "stderr",
- "text": [
- "/usr/local/lib/python3.12/dist-packages/sklearn/metrics/cluster/_supervised.py:59: UserWarning: Clustering metrics expects discrete values but received binary values for label, and continuous values for target\n",
- " warnings.warn(msg, UserWarning)\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "So, knowing `annual_income` would help us most know or get info about the target `converted`.\n",
- "But since we want the categorical variable with max MI, it would be `lead_source`."
- ],
- "metadata": {
- "id": "VuWAh1Gtqw1Z"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# Let's one hot encode the categorical cols\n",
- "X_train_enc = pd.get_dummies(X_train, drop_first=False).astype(int)\n",
- "X_train_enc.head().T"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 1000
- },
- "id": "jZy-DYnlmrjK",
- "outputId": "140be9fc-3bb1-4e12-851d-ab03d9f8f658"
- },
- "execution_count": 83,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- " 442 319 767 756 424\n",
- "number_of_courses_viewed 1 1 1 1 0\n",
- "annual_income 61705 55199 40841 28242 64775\n",
- "interaction_count 4 4 4 3 3\n",
- "lead_score 0 0 0 0 0\n",
- "lead_source_NA 0 0 0 0 0\n",
- "lead_source_events 0 0 0 0 1\n",
- "lead_source_organic_search 0 0 0 0 0\n",
- "lead_source_paid_ads 0 0 0 0 0\n",
- "lead_source_referral 1 1 1 1 0\n",
- "lead_source_social_media 0 0 0 0 0\n",
- "industry_NA 0 0 0 0 0\n",
- "industry_education 0 1 0 0 0\n",
- "industry_finance 1 0 0 0 0\n",
- "industry_healthcare 0 0 0 0 0\n",
- "industry_manufacturing 0 0 0 0 0\n",
- "industry_other 0 0 0 1 0\n",
- "industry_retail 0 0 1 0 1\n",
- "industry_technology 0 0 0 0 0\n",
- "employment_status_NA 0 0 0 0 0\n",
- "employment_status_employed 0 1 0 1 0\n",
- "employment_status_self_employed 0 0 1 0 1\n",
- "employment_status_student 0 0 0 0 0\n",
- "employment_status_unemployed 1 0 0 0 0\n",
- "location_NA 0 0 0 0 0\n",
- "location_africa 0 0 1 0 0\n",
- "location_asia 0 0 0 0 0\n",
- "location_australia 0 0 0 0 0\n",
- "location_europe 0 0 0 0 0\n",
- "location_middle_east 0 0 0 1 0\n",
- "location_north_america 0 0 0 0 0\n",
- "location_south_america 1 1 0 0 1"
- ],
- "text/html": [
- "\n",
- " \n",
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 442 \n",
- " 319 \n",
- " 767 \n",
- " 756 \n",
- " 424 \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " number_of_courses_viewed \n",
- " 1 \n",
- " 1 \n",
- " 1 \n",
- " 1 \n",
- " 0 \n",
- " \n",
- " \n",
- " annual_income \n",
- " 61705 \n",
- " 55199 \n",
- " 40841 \n",
- " 28242 \n",
- " 64775 \n",
- " \n",
- " \n",
- " interaction_count \n",
- " 4 \n",
- " 4 \n",
- " 4 \n",
- " 3 \n",
- " 3 \n",
- " \n",
- " \n",
- " lead_score \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " lead_source_NA \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " lead_source_events \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " \n",
- " \n",
- " lead_source_organic_search \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " lead_source_paid_ads \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " lead_source_referral \n",
- " 1 \n",
- " 1 \n",
- " 1 \n",
- " 1 \n",
- " 0 \n",
- " \n",
- " \n",
- " lead_source_social_media \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " industry_NA \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " industry_education \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " industry_finance \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " industry_healthcare \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " industry_manufacturing \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " industry_other \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " \n",
- " \n",
- " industry_retail \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 1 \n",
- " \n",
- " \n",
- " industry_technology \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " employment_status_NA \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " employment_status_employed \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " \n",
- " \n",
- " employment_status_self_employed \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 1 \n",
- " \n",
- " \n",
- " employment_status_student \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " employment_status_unemployed \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " location_NA \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " location_africa \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " location_asia \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " location_australia \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " location_europe \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " location_middle_east \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " \n",
- " \n",
- " location_north_america \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " location_south_america \n",
- " 1 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " \n",
- " \n",
- "
\n",
- "
\n",
- "
\n",
- "
\n"
- ],
- "application/vnd.google.colaboratory.intrinsic+json": {
- "type": "dataframe",
- "variable_name": "X_train_enc"
- }
- },
- "metadata": {},
- "execution_count": 83
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "X_val_enc = pd.get_dummies(X_val, drop_first=False).astype(int)\n",
- "X_val_enc.head()"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 226
- },
- "id": "OdzBxf8pmgKg",
- "outputId": "f4c856c4-0f07-4456-da2b-43034df36cf7"
- },
- "execution_count": 85,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- " number_of_courses_viewed ... location_south_america\n",
- "886 1 ... 0\n",
- "619 6 ... 0\n",
- "548 2 ... 0\n",
- "1046 3 ... 0\n",
- "618 0 ... 0\n",
- "\n",
- "[5 rows x 31 columns]"
- ],
- "text/html": [
- "\n",
- " \n",
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " number_of_courses_viewed \n",
- " annual_income \n",
- " interaction_count \n",
- " lead_score \n",
- " lead_source_NA \n",
- " lead_source_events \n",
- " lead_source_organic_search \n",
- " lead_source_paid_ads \n",
- " lead_source_referral \n",
- " lead_source_social_media \n",
- " industry_NA \n",
- " industry_education \n",
- " industry_finance \n",
- " industry_healthcare \n",
- " industry_manufacturing \n",
- " industry_other \n",
- " industry_retail \n",
- " industry_technology \n",
- " employment_status_NA \n",
- " employment_status_employed \n",
- " employment_status_self_employed \n",
- " employment_status_student \n",
- " employment_status_unemployed \n",
- " location_NA \n",
- " location_africa \n",
- " location_asia \n",
- " location_australia \n",
- " location_europe \n",
- " location_middle_east \n",
- " location_north_america \n",
- " location_south_america \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 886 \n",
- " 1 \n",
- " 63127 \n",
- " 6 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " 619 \n",
- " 6 \n",
- " 75389 \n",
- " 2 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " 548 \n",
- " 2 \n",
- " 66519 \n",
- " 4 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- " 1046 \n",
- " 3 \n",
- " 60910 \n",
- " 3 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " \n",
- " \n",
- " 618 \n",
- " 0 \n",
- " 63425 \n",
- " 2 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 1 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " 0 \n",
- " \n",
- " \n",
- "
\n",
- "
\n",
- "
\n",
- "
\n"
- ],
- "application/vnd.google.colaboratory.intrinsic+json": {
- "type": "dataframe",
- "variable_name": "X_val_enc"
- }
- },
- "metadata": {},
- "execution_count": 85
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "# Fit the model on the training dataset\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "\n",
- "model = LogisticRegression(solver='liblinear', C=1.0, max_iter=1000, random_state=42)\n",
- "model.fit(X_train_enc, y_train)"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 80
- },
- "id": "crvFx5fpy4JF",
- "outputId": "da9e9040-d9ce-4e91-96e4-7273df4b83f4"
- },
- "execution_count": 86,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "LogisticRegression(max_iter=1000, random_state=42, solver='liblinear')"
- ],
- "text/html": [
- "LogisticRegression(max_iter=1000, random_state=42, solver='liblinear') In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org. "
- ]
- },
- "metadata": {},
- "execution_count": 86
- }
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "baseline_acc = model.score(X_val_enc, y_val)\n",
- "print(f\"Baseline accuracy : {baseline_acc:.2f}\")"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "IO6RLForzdNF",
- "outputId": "0bf51992-0b34-4869-8d69-372f407c58e6"
- },
- "execution_count": 93,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "Baseline accuracy : 0.74\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Q5. Let's find the least useful feature using the feature elimination technique."
- ],
- "metadata": {
- "id": "ushqhtd6_e8i"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# Let's find the least useful feature using the feature elimination technique.\n",
- "\n",
- "feature_diff = {}\n",
- "\n",
- "for col in X_train_enc.columns:\n",
- " X_train_tmp = X_train_enc.drop(columns=col)\n",
- " X_val_tmp = X_val_enc.drop(columns=col)\n",
- "\n",
- " tmp_model = LogisticRegression(solver='liblinear', C=1.0, max_iter=1000, random_state=42)\n",
- " tmp_model.fit(X_train_tmp, y_train)\n",
- " acc = tmp_model.score(X_val_tmp, y_val)\n",
- "\n",
- " feature_diff[col] = round(baseline_acc-acc, 4)\n"
- ],
- "metadata": {
- "id": "VtDOLJ2DziuP"
- },
- "execution_count": 94,
- "outputs": []
- },
- {
- "cell_type": "code",
- "source": [
- "# convert the dict to a series for sorting with most useful to least useful\n",
- "\n",
- "diffs = pd.Series(feature_diff, name=\"Feature usefulness\").sort_values(ascending=False)\n",
- "print(diffs)"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "HEFJqm503dC5",
- "outputId": "bff7229d-f652-4c2b-ae69-f237ca18fe91"
- },
- "execution_count": 101,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "interaction_count 0.0890\n",
- "number_of_courses_viewed 0.0616\n",
- "lead_source_referral 0.0103\n",
- "employment_status_employed 0.0068\n",
- "employment_status_unemployed 0.0068\n",
- "lead_source_social_media 0.0034\n",
- "location_australia 0.0034\n",
- "industry_education 0.0000\n",
- "lead_source_organic_search 0.0000\n",
- "lead_source_paid_ads 0.0000\n",
- "industry_NA 0.0000\n",
- "industry_healthcare 0.0000\n",
- "lead_source_NA 0.0000\n",
- "lead_source_events 0.0000\n",
- "lead_score 0.0000\n",
- "employment_status_student 0.0000\n",
- "industry_manufacturing 0.0000\n",
- "industry_finance 0.0000\n",
- "industry_other 0.0000\n",
- "employment_status_NA 0.0000\n",
- "industry_technology 0.0000\n",
- "employment_status_self_employed 0.0000\n",
- "industry_retail 0.0000\n",
- "location_europe 0.0000\n",
- "location_NA 0.0000\n",
- "location_africa 0.0000\n",
- "location_asia 0.0000\n",
- "location_south_america 0.0000\n",
- "location_middle_east 0.0000\n",
- "location_north_america -0.0034\n",
- "annual_income -0.1062\n",
- "Name: Feature usefulness, dtype: float64\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- ">The least useful feature is `lead_score`, because removing it results in the smallest change in validation accuracy (0.000), indicating it contributes the least to the model.\n"
- ],
- "metadata": {
- "id": "1RGwl99q8Lg-"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Q6. Train a logistic regression with different params value."
- ],
- "metadata": {
- "id": "nQvJgw_79Oi3"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "\"\"\"\n",
- "Now let's train a regularized logistic regression.\n",
- "Let's try the following values of the parameter C: [0.01, 0.1, 1, 10, 100]\n",
- "\"\"\"\n",
- "scores = {}\n",
- "for c in [0.01, 0.1, 1, 10, 100]:\n",
- " model_c = LogisticRegression(solver='liblinear', C=c, max_iter=1000, random_state=42)\n",
- " model_c.fit(X_train_enc, y_train)\n",
- "\n",
- " score = model_c.score(X_val_enc, y_val)\n",
- " scores[c] = round(score, 3)\n"
- ],
- "metadata": {
- "id": "yIKzYzIL5aAE"
- },
- "execution_count": 105,
- "outputs": []
- },
- {
- "cell_type": "code",
- "source": [
- "# Convert the dict to series for sorting it and better maninpulation\n",
- "\n",
- "score_in_series = pd.Series(scores, name=\"Scores from different C values\").sort_values(ascending=False)\n",
- "print(score_in_series)"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "Gs4-HYIA8Kyw",
- "outputId": "0dd0f6a9-2144-4acb-bfe0-c6022d5647ac"
- },
- "execution_count": 106,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "1.00 0.743\n",
- "100.00 0.743\n",
- "10.00 0.743\n",
- "0.01 0.740\n",
- "0.10 0.740\n",
- "Name: Scores from different C values, dtype: float64\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "## So here are the results:\n",
- "\n",
- "We trained a regularized logistic regression with C values [0.01, 0.1, 1, 10, 100] and evaluated validation accuracy:\n",
- "\n",
- "| C | Accuracy |\n",
- "|------|----------|\n",
- "| 0.01 | 0.740 |\n",
- "| 0.1 | 0.740 |\n",
- "| 1 | 0.743 |\n",
- "| 10 | 0.743 |\n",
- "| 100 | 0.743 |\n",
- "\n",
- "The best accuracy is **0.743**. Since multiple C values give the same accuracy, we select the **smallest C**, which is **C = 1**.\n"
- ],
- "metadata": {
- "id": "-8cLCv4m-6ZA"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "## Ending Notes\n",
- "\n",
- "- **Data Preparation:** Filled missing values: categorical → 'NA', numerical → 0.0. \n",
- "- **Question 1:** Most frequent industry: *retail*. \n",
- "- **Question 2:** Highest correlation among given pairs: `annual_income` and `interaction_count`. \n",
- "- **Question 3:** Calculated mutual information between categorical features and target using `mutual_info_score`. Highest MI: *lead_source*. \n",
- "- **Question 4:** Trained logistic regression with one-hot encoded categorical variables. Validation accuracy ≈ 0.74. \n",
- "- **Question 5:** Feature elimination shows `lead_score` is the least useful feature (smallest change in accuracy). \n",
- "- **Question 6:** Regularized logistic regression with C ∈ [0.01, 0.1, 1, 10, 100]. Best accuracy 0.743, smallest C giving this accuracy: **1**. \n",
- "\n",
- "> Notes: One-hot encoding was used for logistic regression (Q4–Q6). For mutual information (Q3), original categorical variables or label encoding can be used; one-hot encoding is not required.\n"
- ],
- "metadata": {
- "id": "EclAIqp1_91N"
- }
- },
- {
- "cell_type": "code",
- "source": [],
- "metadata": {
- "id": "awA1Dsaw_aO6"
- },
- "execution_count": null,
- "outputs": []
- }
- ]
-}
\ No newline at end of file