{ "cells": [ { "cell_type": "markdown", "id": "60ec689a", "metadata": {}, "source": [ "# ML Data Construction Showcase\n", "\n", "## Revenue Forecasting From Multi-Source Data (Synthetic E-commerce Example)\n", "\n", "### Learning objectives\n", "- Build a realistic ML-ready dataset from **master data + event logs**.\n", "- Construct a target label from business logic: **future 90-day revenue**.\n", "- Engineer behavioral features from historical transactions.\n", "- Encode categorical variables with **one-hot encoding**.\n", "- Prevent temporal leakage via strict **observation vs prediction windows**.\n", "\n", "### Business framing\n", "For each customer at reference date **t**, predict revenue in the next **90 days**. This mirrors production ML settings where we only have historical data at prediction time, while labels come from future outcomes." ] }, { "cell_type": "code", "execution_count": 1, "id": "b6c8abb3", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:08.138008Z", "iopub.status.busy": "2026-03-24T15:26:08.137688Z", "iopub.status.idle": "2026-03-24T15:26:35.355988Z", "shell.execute_reply": "2026-03-24T15:26:35.355125Z", "shell.execute_reply.started": "2026-03-24T15:26:08.137996Z" } }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from datetime import timedelta\n", "\n", "from sklearn.compose import ColumnTransformer\n", "from sklearn.preprocessing import OneHotEncoder" ] }, { "cell_type": "code", "execution_count": 2, "id": "3bb46a67", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.356663Z", "iopub.status.busy": "2026-03-24T15:26:35.356408Z", "iopub.status.idle": "2026-03-24T15:26:35.360072Z", "shell.execute_reply": "2026-03-24T15:26:35.359313Z", "shell.execute_reply.started": "2026-03-24T15:26:35.356635Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Random seed set to 42\n" ] } ], "source": [ "# Set the random seed for reproducibility \n", "SEED = 42\n", "# Create a random number generator with the specified seed \n", "rng = np.random.default_rng(SEED)\n", "np.random.seed(SEED)\n", "print(f\"Random seed set to {SEED}\")" ] }, { "cell_type": "markdown", "id": "5fb14f33", "metadata": {}, "source": [ "## SECTION B — Generate Synthetic Raw Data \n", "#### (only needed for this async example - you can skip this part and directly go to **SECTION C**)" ] }, { "cell_type": "markdown", "id": "35a5755f", "metadata": {}, "source": [ "### SECTION B.1 — Generate Synthetic Customer Master Table" ] }, { "cell_type": "code", "execution_count": 3, "id": "e8c578ad", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.360566Z", "iopub.status.busy": "2026-03-24T15:26:35.360490Z", "iopub.status.idle": "2026-03-24T15:26:35.388427Z", "shell.execute_reply": "2026-03-24T15:26:35.387968Z", "shell.execute_reply.started": "2026-03-24T15:26:35.360559Z" } }, "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", "
customer_idsignup_datecountrycustomer_segmentacquisition_channel
0C00012023-04-07CHStandardReferral
1C00022024-08-19ITStandardPaid Ads
2C00032024-05-24ESBudgetOrganic
3C00042023-12-18ITStandardReferral
4C00052023-12-14ESStandardOrganic
\n", "
" ], "text/plain": [ " customer_id signup_date country customer_segment acquisition_channel\n", "0 C0001 2023-04-07 CH Standard Referral\n", "1 C0002 2024-08-19 IT Standard Paid Ads\n", "2 C0003 2024-05-24 ES Budget Organic\n", "3 C0004 2023-12-18 IT Standard Referral\n", "4 C0005 2023-12-14 ES Standard Organic" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Synthetic customer master table\n", "n_customers = 1200\n", "\n", "# Define the range of customer IDs \n", "customer_ids = [f\"C{i:04d}\" for i in range(1, n_customers + 1)]\n", "\n", "# Define the values for the categorical features \n", "countries = [\"DE\", \"FR\", \"CH\", \"IT\", \"ES\"]\n", "segments = [\"Budget\", \"Standard\", \"Premium\"]\n", "channels = [\"Organic\", \"Paid Ads\", \"Referral\", \"Affiliate\"]\n", "\n", "# Use a fixed synthetic timeline so notebook behavior is deterministic\n", "synthetic_today = pd.Timestamp(\"2025-01-31\")\n", "signup_start = synthetic_today - pd.Timedelta(days=730) # last 24 months\n", "# Generate random signup dates for each customer \n", "signup_offsets = rng.integers(0, 731, size=n_customers)\n", "signup_dates = signup_start + pd.to_timedelta(signup_offsets, unit=\"D\")\n", "\n", "# Create a DataFrame with the generated data \n", "customers = pd.DataFrame(\n", " {\n", " \"customer_id\": customer_ids,\n", " \"signup_date\": pd.to_datetime(signup_dates),\n", " \"country\": rng.choice(countries, size=n_customers, p=[0.25, 0.2, 0.15, 0.2, 0.2]),\n", " \"customer_segment\": rng.choice(segments, size=n_customers, p=[0.4, 0.45, 0.15]),\n", " \"acquisition_channel\": rng.choice(channels, size=n_customers, p=[0.35, 0.3, 0.2, 0.15]),\n", " }\n", ")\n", "\n", "customers.head()" ] }, { "cell_type": "markdown", "id": "b9b4bf6c", "metadata": {}, "source": [ "### Section B.2. Generate synthetic transaction event table" ] }, { "cell_type": "code", "execution_count": 4, "id": "175b1bba", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.388955Z", "iopub.status.busy": "2026-03-24T15:26:35.388867Z", "iopub.status.idle": "2026-03-24T15:26:35.520156Z", "shell.execute_reply": "2026-03-24T15:26:35.519467Z", "shell.execute_reply.started": "2026-03-24T15:26:35.388947Z" } }, "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", "
customer_idtransaction_dateamount
0C00012024-02-1830.96
1C00012024-04-1424.45
2C00012024-07-1544.53
3C00012024-09-0534.86
4C00012024-11-0723.09
\n", "
" ], "text/plain": [ " customer_id transaction_date amount\n", "0 C0001 2024-02-18 30.96\n", "1 C0001 2024-04-14 24.45\n", "2 C0001 2024-07-15 44.53\n", "3 C0001 2024-09-05 34.86\n", "4 C0001 2024-11-07 23.09" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Synthetic transaction event table\n", "# Design choices as underlying assumptions & distributional choices:\n", "# - Premium customers spend more\n", "# - Paid Ads customers tend to churn more / have fewer repeat purchases\n", "# - Some customers have no transactions\n", "# - Mild recency + seasonality effects\n", "\n", "transaction_rows = []\n", "\n", "# Define the range of transaction dates \n", "tx_global_start = synthetic_today - pd.Timedelta(days=420) # >12 months history\n", "tx_global_end = synthetic_today + pd.Timedelta(days=120) # includes future wrt reference date\n", "\n", "# Define the multipliers for the segment frequency and amount \n", "segment_freq_mult = {\"Budget\": 0.8, \"Standard\": 1.0, \"Premium\": 1.35}\n", "segment_amount_mult = {\"Budget\": 0.75, \"Standard\": 1.0, \"Premium\": 1.8}\n", "channel_freq_mult = {\"Organic\": 1.1, \"Paid Ads\": 0.75, \"Referral\": 1.05, \"Affiliate\": 0.9}\n", "channel_no_tx_bonus = {\"Organic\": 0.00, \"Paid Ads\": 0.12, \"Referral\": 0.00, \"Affiliate\": 0.03}\n", "\n", "# Iterate over each customer in the customers DataFrame \n", "for row in customers.itertuples(index=False):\n", " cid = row.customer_id\n", " signup = row.signup_date\n", " seg = row.customer_segment\n", " ch = row.acquisition_channel\n", "\n", " # Customers with short tenure have fewer possible transactions\n", " tenure_days = max((synthetic_today - signup).days, 1)\n", " tenure_factor = min(tenure_days / 365.0, 1.4)\n", "\n", " # Calculate the base lambda for the Poisson distribution \n", " base_lambda = 4.5 * segment_freq_mult[seg] * channel_freq_mult[ch] * tenure_factor\n", "\n", " # Probability of no transactions at all\n", " p_no_tx = 0.08 + channel_no_tx_bonus[ch]\n", " if rng.random() < p_no_tx:\n", " continue\n", "\n", " # Generate the number of transactions for the customer following a Poisson distribution with the base lambda \n", " n_tx = rng.poisson(base_lambda)\n", " if n_tx <= 0:\n", " n_tx = 1\n", "\n", " # Mild recency effect: some users get extra recent transactions\n", " if rng.random() < 0.25:\n", " n_tx += rng.integers(1, 4)\n", "\n", " # Define the range of transaction dates \n", " tx_start = max(tx_global_start, signup)\n", " tx_end = tx_global_end\n", " n_days = max((tx_end - tx_start).days, 1)\n", "\n", " # Build date weights: slightly more recent + mild seasonal bump in Nov/Dec\n", " date_index = pd.date_range(tx_start, tx_end, freq=\"D\")\n", " recency_weight = np.linspace(0.8, 1.2, len(date_index))\n", " seasonal_weight = np.where(date_index.month.isin([11, 12]), 1.15, 1.0)\n", " day_weights = recency_weight * seasonal_weight\n", " day_weights = day_weights / day_weights.sum()\n", "\n", " # Choose the transaction dates for the customer from the date_index array \n", " chosen_dates = rng.choice(date_index, size=n_tx, replace=True, p=day_weights)\n", "\n", " # Iterate over the chosen transaction dates \n", " for tx_date in chosen_dates:\n", " # Log-normal amount with segment effect + occasional outliers\n", " amount = rng.lognormal(mean=3.6, sigma=0.55) * segment_amount_mult[seg]\n", "\n", " # Occasionally generate outlier purchases \n", " if rng.random() < 0.015:\n", " amount *= rng.uniform(5, 12) # outlier purchases\n", "\n", " # Small seasonal uplift around Nov/Dec\n", " if pd.Timestamp(tx_date).month in [11, 12]:\n", " amount *= 1.08\n", "\n", " # Append the transaction data to the transaction_rows list \n", " transaction_rows.append(\n", " {\n", " \"customer_id\": cid,\n", " \"transaction_date\": pd.Timestamp(tx_date),\n", " \"amount\": float(round(amount, 2)),\n", " }\n", " )\n", "\n", "# Convert the transaction_rows list into a DataFrame \n", "transactions = pd.DataFrame(transaction_rows) \n", "# Sort the transactions by customer ID and transaction date \n", "transactions = transactions.sort_values([\"customer_id\", \"transaction_date\"]).reset_index(drop=True)\n", "# Display the first few rows of the transactions DataFrame \n", "transactions.head()" ] }, { "cell_type": "code", "execution_count": 5, "id": "9eaf18b6", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.520709Z", "iopub.status.busy": "2026-03-24T15:26:35.520601Z", "iopub.status.idle": "2026-03-24T15:26:35.547650Z", "shell.execute_reply": "2026-03-24T15:26:35.547267Z", "shell.execute_reply.started": "2026-03-24T15:26:35.520701Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Customers head:\n" ] }, { "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", "
customer_idsignup_datecountrycustomer_segmentacquisition_channel
0C00012023-04-07CHStandardReferral
1C00022024-08-19ITStandardPaid Ads
2C00032024-05-24ESBudgetOrganic
3C00042023-12-18ITStandardReferral
4C00052023-12-14ESStandardOrganic
\n", "
" ], "text/plain": [ " customer_id signup_date country customer_segment acquisition_channel\n", "0 C0001 2023-04-07 CH Standard Referral\n", "1 C0002 2024-08-19 IT Standard Paid Ads\n", "2 C0003 2024-05-24 ES Budget Organic\n", "3 C0004 2023-12-18 IT Standard Referral\n", "4 C0005 2023-12-14 ES Standard Organic" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Transactions head:\n" ] }, { "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", "
customer_idtransaction_dateamount
0C00012024-02-1830.96
1C00012024-04-1424.45
2C00012024-07-1544.53
3C00012024-09-0534.86
4C00012024-11-0723.09
\n", "
" ], "text/plain": [ " customer_id transaction_date amount\n", "0 C0001 2024-02-18 30.96\n", "1 C0001 2024-04-14 24.45\n", "2 C0001 2024-07-15 44.53\n", "3 C0001 2024-09-05 34.86\n", "4 C0001 2024-11-07 23.09" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Row counts\n", "customers: 1200\n", "transactions: 4636\n", "\n", "Unique customers\n", "customers table: 1200\n", "transactions table: 1046\n", "customers with no transactions: 154\n", "\n", "Missing values\n", "customers:\n", " customer_id 0\n", "signup_date 0\n", "country 0\n", "customer_segment 0\n", "acquisition_channel 0\n", "dtype: int64\n", "transactions:\n", " customer_id 0\n", "transaction_date 0\n", "amount 0\n", "dtype: int64\n" ] } ], "source": [ "# Basic sanity checks\n", "print(\"Customers head:\")\n", "display(customers.head())\n", "\n", "# Display the first few rows of the transactions DataFrame \n", "print(\"\\nTransactions head:\")\n", "display(transactions.head())\n", "\n", "# Print the row counts for the customers and transactions DataFrames \n", "print(\"\\nRow counts\")\n", "print(\"customers:\", len(customers))\n", "print(\"transactions:\", len(transactions))\n", "\n", "# Print the number of unique customers in the customers and transactions DataFrames \n", "print(\"\\nUnique customers\")\n", "print(\"customers table:\", customers[\"customer_id\"].nunique())\n", "print(\"transactions table:\", transactions[\"customer_id\"].nunique())\n", "\n", "# Calculate the number of customers with no transactions \n", "customers_with_no_tx = customers.loc[~customers[\"customer_id\"].isin(transactions[\"customer_id\"]), \"customer_id\"].nunique()\n", "print(\"customers with no transactions:\", customers_with_no_tx)\n", "\n", "# Print the number of missing values in the customers and transactions DataFrames \n", "print(\"\\nMissing values\")\n", "print(\"customers:\\n\", customers.isna().sum())\n", "print(\"transactions:\\n\", transactions.isna().sum())" ] }, { "cell_type": "code", "execution_count": 6, "id": "57dc3908", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.548137Z", "iopub.status.busy": "2026-03-24T15:26:35.548047Z", "iopub.status.idle": "2026-03-24T15:26:35.559886Z", "shell.execute_reply": "2026-03-24T15:26:35.559262Z", "shell.execute_reply.started": "2026-03-24T15:26:35.548129Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Synthetic data saved to CSV files\n" ] } ], "source": [ "# Save the synthetic data to a CSV file\n", "customers.to_csv(\"data/customers.csv\", index=False)\n", "transactions.to_csv(\"data/transactions.csv\", index=False)\n", "\n", "\n", "print(\"Synthetic data saved to CSV files\")\n", "\n" ] }, { "cell_type": "markdown", "id": "80b21b16", "metadata": {}, "source": [ "## SECTION C — Define Temporal Windows and Reference Date\n", "\n", "Now, we have (synthesized) our raw data set. Often this is the starting point of data that you get from your business stakeholders. \n", "\n", "Next, we must separate:\n", "- **Observation window**: historical data used to build features.\n", "- **Prediction window**: future period used to construct the label.\n", "\n", "If we accidentally include prediction-window information in features, we create **temporal leakage**." ] }, { "cell_type": "code", "execution_count": 7, "id": "cdbcff32", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.560293Z", "iopub.status.busy": "2026-03-24T15:26:35.560199Z", "iopub.status.idle": "2026-03-24T15:26:35.563681Z", "shell.execute_reply": "2026-03-24T15:26:35.562804Z", "shell.execute_reply.started": "2026-03-24T15:26:35.560285Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "reference_date (t): 2025-01-31\n", "observation window: [2024-08-04, 2025-01-31]\n", "prediction window: (2025-01-31, 2025-05-01]\n" ] } ], "source": [ "# Reference date and windows\n", "# Choose t so we still have enough future transactions to build labels\n", "reference_date = transactions[\"transaction_date\"].max() - pd.Timedelta(days=120)\n", "\n", "# Define the observation and prediction windows in days, as discussed in the slides \n", "observation_days = 180\n", "prediction_days = 90\n", "\n", "# Calculate the start and end dates for the observation and prediction windows \n", "obs_start = reference_date - pd.Timedelta(days=observation_days)\n", "obs_end = reference_date\n", "\n", "# Calculate the start and end dates for the prediction window \n", "pred_start = reference_date\n", "pred_end = reference_date + pd.Timedelta(days=prediction_days)\n", "\n", "# Print the reference date and the observation and prediction windows \n", "print(\"reference_date (t):\", reference_date.date())\n", "print(f\"observation window: [{obs_start.date()}, {obs_end.date()}]\")\n", "print(f\"prediction window: ({pred_start.date()}, {pred_end.date()}]\")" ] }, { "cell_type": "markdown", "id": "bda9eefd", "metadata": {}, "source": [ "## SECTION D — Label Construction (Future Revenue)\n", "\n", "Define target for customer *i* as:\n", "\n", "\\[\n", "y_i = \\sum \\text{amount}_{i, d} \\text{ for } d \\in (t, t+90]\n", "\\]\n", "\n", "Customers with no transactions in the prediction window get label **0**." ] }, { "cell_type": "code", "execution_count": 8, "id": "fa61a4ea", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.564111Z", "iopub.status.busy": "2026-03-24T15:26:35.564027Z", "iopub.status.idle": "2026-03-24T15:26:35.573853Z", "shell.execute_reply": "2026-03-24T15:26:35.573015Z", "shell.execute_reply.started": "2026-03-24T15:26:35.564104Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Label summary:\n", "count 1200.000000\n", "mean 46.428433\n", "std 80.516101\n", "min 0.000000\n", "25% 0.000000\n", "50% 19.955000\n", "75% 62.417500\n", "max 1070.010000\n", "Name: future_revenue_90d, dtype: float64\n", "Percent zero labels: 45.17%\n" ] } ], "source": [ "# Prediction-window transactions: (t, t+90]\n", "pred_tx = transactions[\n", " (transactions[\"transaction_date\"] > pred_start)\n", " & (transactions[\"transaction_date\"] <= pred_end)\n", "].copy()\n", "\n", "# Group the transactions by customer ID and sum the amount for each customer \n", "label_df = (\n", " pred_tx.groupby(\"customer_id\", as_index=False)[\"amount\"]\n", " .sum()\n", " .rename(columns={\"amount\": \"future_revenue_90d\"})\n", ")\n", "\n", "# Ensure every customer exists in label table\n", "label_df = customers[[\"customer_id\"]].merge(label_df, on=\"customer_id\", how=\"left\")\n", "label_df[\"future_revenue_90d\"] = label_df[\"future_revenue_90d\"].fillna(0.0)\n", "\n", "# Print a summary of the label distribution \n", "print(\"Label summary:\")\n", "print(label_df[\"future_revenue_90d\"].describe())\n", "\n", "# Calculate the percentage of zero labels \n", "pct_zero = (label_df[\"future_revenue_90d\"] == 0).mean() * 100\n", "print(f\"Percent zero labels: {pct_zero:.2f}%\")" ] }, { "cell_type": "markdown", "id": "71626986", "metadata": {}, "source": [ "## SECTION E — Feature Engineering From Observation Window (Past Behavior)\n", "\n", "We engineer RFM-style and trend features only from historical data in **[t-180, t]**.\n", "\n", "No transaction after **t** is used for features (prevents leakage)." ] }, { "cell_type": "markdown", "id": "643b15d5", "metadata": {}, "source": [ "### SECTION E.1: Define the range of the past 180 days" ] }, { "cell_type": "code", "execution_count": 9, "id": "1c6c0e60", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.574548Z", "iopub.status.busy": "2026-03-24T15:26:35.574455Z", "iopub.status.idle": "2026-03-24T15:26:35.580612Z", "shell.execute_reply": "2026-03-24T15:26:35.580049Z", "shell.execute_reply.started": "2026-03-24T15:26:35.574539Z" } }, "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", "
customer_idtransaction_dateamounttx_day
3C00012024-09-0534.862024-09-05
4C00012024-11-0723.092024-11-07
5C00012025-01-0654.762025-01-06
13C00042024-09-2027.632024-09-20
14C00042024-10-2420.842024-10-24
\n", "
" ], "text/plain": [ " customer_id transaction_date amount tx_day\n", "3 C0001 2024-09-05 34.86 2024-09-05\n", "4 C0001 2024-11-07 23.09 2024-11-07\n", "5 C0001 2025-01-06 54.76 2025-01-06\n", "13 C0004 2024-09-20 27.63 2024-09-20\n", "14 C0004 2024-10-24 20.84 2024-10-24" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Observation-window transactions: [t-180, t], i.e. 180 days before t \n", "obs_tx = transactions[\n", " (transactions[\"transaction_date\"] >= obs_start)\n", " & (transactions[\"transaction_date\"] <= obs_end)\n", "].copy()\n", "obs_tx[\"tx_day\"] = obs_tx[\"transaction_date\"].dt.normalize()\n", "\n", "obs_tx.head() " ] }, { "cell_type": "markdown", "id": "bfa38cb1", "metadata": {}, "source": [ "### SECTION E.2. Core Behavior Features" ] }, { "cell_type": "code", "execution_count": 10, "id": "f8a9af3d", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.581022Z", "iopub.status.busy": "2026-03-24T15:26:35.580941Z", "iopub.status.idle": "2026-03-24T15:26:35.591773Z", "shell.execute_reply": "2026-03-24T15:26:35.590945Z", "shell.execute_reply.started": "2026-03-24T15:26:35.581014Z" } }, "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", "
customer_idlast_purchase_datefrequencymonetary_totalactive_daysavg_order_valuerecency_days
0C00012025-01-063112.71337.57025
1C00042024-10-24248.47224.23599
2C00052024-12-01149.24149.24061
3C00082024-12-16280.94240.47046
4C00092024-12-012171.99285.99561
\n", "
" ], "text/plain": [ " customer_id last_purchase_date frequency monetary_total active_days \\\n", "0 C0001 2025-01-06 3 112.71 3 \n", "1 C0004 2024-10-24 2 48.47 2 \n", "2 C0005 2024-12-01 1 49.24 1 \n", "3 C0008 2024-12-16 2 80.94 2 \n", "4 C0009 2024-12-01 2 171.99 2 \n", "\n", " avg_order_value recency_days \n", "0 37.570 25 \n", "1 24.235 99 \n", "2 49.240 61 \n", "3 40.470 46 \n", "4 85.995 61 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Core behavior features in observation window\n", "# Group by customer ID and calculate the following metrics:\n", "# - last_purchase_date: the latest transaction date for each customer\n", "# - frequency: the number of transactions for each customer\n", "# - monetary_total: the total amount spent by each customer\n", "# - active_days: the number of unique days on which each customer has made a purchase \n", "obs_agg = obs_tx.groupby(\"customer_id\").agg(\n", " last_purchase_date=(\"transaction_date\", \"max\"),\n", " frequency=(\"amount\", \"count\"),\n", " monetary_total=(\"amount\", \"sum\"),\n", " active_days=(\"tx_day\", \"nunique\"),\n", ")\n", "# Calculate the average order value for each customer \n", "obs_agg[\"avg_order_value\"] = obs_agg[\"monetary_total\"] / obs_agg[\"frequency\"]\n", "obs_agg = obs_agg.reset_index()\n", "\n", "# Recency (days since last purchase)\n", "obs_agg[\"recency_days\"] = (reference_date - obs_agg[\"last_purchase_date\"]).dt.days\n", "\n", "obs_agg.head()" ] }, { "cell_type": "markdown", "id": "2818b9c9", "metadata": {}, "source": [ "### SECTION E.3. Trend features\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "c8d5267a", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.592339Z", "iopub.status.busy": "2026-03-24T15:26:35.592255Z", "iopub.status.idle": "2026-03-24T15:26:35.604707Z", "shell.execute_reply": "2026-03-24T15:26:35.604321Z", "shell.execute_reply.started": "2026-03-24T15:26:35.592331Z" } }, "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", "
customer_idlast_purchase_datefrequencymonetary_totalactive_daysavg_order_valuerecency_daysrecent_30d_spendprev_30d_spendspend_trend
0C00012025-01-063112.71337.5702554.760.0054.76
1C00042024-10-24248.47224.235990.000.000.00
2C00052024-12-01149.24149.240610.000.000.00
3C00082024-12-16280.94240.470460.0034.31-34.31
4C00092024-12-012171.99285.995610.000.000.00
\n", "
" ], "text/plain": [ " customer_id last_purchase_date frequency monetary_total active_days \\\n", "0 C0001 2025-01-06 3 112.71 3 \n", "1 C0004 2024-10-24 2 48.47 2 \n", "2 C0005 2024-12-01 1 49.24 1 \n", "3 C0008 2024-12-16 2 80.94 2 \n", "4 C0009 2024-12-01 2 171.99 2 \n", "\n", " avg_order_value recency_days recent_30d_spend prev_30d_spend \\\n", "0 37.570 25 54.76 0.00 \n", "1 24.235 99 0.00 0.00 \n", "2 49.240 61 0.00 0.00 \n", "3 40.470 46 0.00 34.31 \n", "4 85.995 61 0.00 0.00 \n", "\n", " spend_trend \n", "0 54.76 \n", "1 0.00 \n", "2 0.00 \n", "3 -34.31 \n", "4 0.00 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Calculate the sum of the amount for each customer in the recent 30 days \n", "recent_30d = obs_tx[\n", " (obs_tx[\"transaction_date\"] > (reference_date - pd.Timedelta(days=30)))\n", " & (obs_tx[\"transaction_date\"] <= reference_date)\n", "]\n", "\n", "# Calculate the sum of the amount for each customer in the previous 30 days \n", "prev_30d = obs_tx[\n", " (obs_tx[\"transaction_date\"] > (reference_date - pd.Timedelta(days=60)))\n", " & (obs_tx[\"transaction_date\"] <= (reference_date - pd.Timedelta(days=30)))\n", "]\n", "\n", "# Calculate the sum of the amount for each customer in the recent 30 days \n", "recent_30d_spend = (\n", " recent_30d.groupby(\"customer_id\", as_index=False)[\"amount\"]\n", " .sum()\n", " .rename(columns={\"amount\": \"recent_30d_spend\"})\n", ")\n", "\n", "# Calculate the sum of the amount for each customer in the previous 30 days \n", "prev_30d_spend = (\n", " prev_30d.groupby(\"customer_id\", as_index=False)[\"amount\"]\n", " .sum()\n", " .rename(columns={\"amount\": \"prev_30d_spend\"})\n", ")\n", "\n", "# Merge the recent 30 days spend and previous 30 days spend into the observation aggregate DataFrame \n", "features_df = obs_agg.merge(recent_30d_spend, on=\"customer_id\", how=\"left\")\n", "features_df = features_df.merge(prev_30d_spend, on=\"customer_id\", how=\"left\")\n", "features_df[[\"recent_30d_spend\", \"prev_30d_spend\"]] = features_df[[\"recent_30d_spend\", \"prev_30d_spend\"]].fillna(0.0)\n", "features_df[\"spend_trend\"] = features_df[\"recent_30d_spend\"] - features_df[\"prev_30d_spend\"]\n", "\n", "features_df.head()" ] }, { "cell_type": "markdown", "id": "6d009196", "metadata": {}, "source": [ "### Data Cleansing!!\n", "\n", "**Missing-value handling choices:**\n", "- Customers with no observation-window transactions get `frequency=0`, `monetary_total=0`, `active_days=0`, `recent_30d_spend=0`, `prev_30d_spend=0`, `spend_trend=0`.\n", "- `avg_order_value` is set to 0 when `frequency=0`.\n", "- `recency_days` is set to a large value (`observation_days + 1`) for \"not recently active\" customers." ] }, { "cell_type": "code", "execution_count": 12, "id": "4a45ecf0", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.605491Z", "iopub.status.busy": "2026-03-24T15:26:35.605353Z", "iopub.status.idle": "2026-03-24T15:26:35.614974Z", "shell.execute_reply": "2026-03-24T15:26:35.614497Z", "shell.execute_reply.started": "2026-03-24T15:26:35.605480Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
customer_idsignup_datecountrycustomer_segmentacquisition_channelfrequencymonetary_totalactive_daysavg_order_valuerecency_daysrecent_30d_spendprev_30d_spendspend_trend
0C00012023-04-07CHStandardReferral3.0112.713.037.57025.054.760.054.76
1C00022024-08-19ITStandardPaid Ads0.00.000.00.000181.00.000.00.00
2C00032024-05-24ESBudgetOrganic0.00.000.00.000181.00.000.00.00
3C00042023-12-18ITStandardReferral2.048.472.024.23599.00.000.00.00
4C00052023-12-14ESStandardOrganic1.049.241.049.24061.00.000.00.00
\n", "
" ], "text/plain": [ " customer_id signup_date country customer_segment acquisition_channel \\\n", "0 C0001 2023-04-07 CH Standard Referral \n", "1 C0002 2024-08-19 IT Standard Paid Ads \n", "2 C0003 2024-05-24 ES Budget Organic \n", "3 C0004 2023-12-18 IT Standard Referral \n", "4 C0005 2023-12-14 ES Standard Organic \n", "\n", " frequency monetary_total active_days avg_order_value recency_days \\\n", "0 3.0 112.71 3.0 37.570 25.0 \n", "1 0.0 0.00 0.0 0.000 181.0 \n", "2 0.0 0.00 0.0 0.000 181.0 \n", "3 2.0 48.47 2.0 24.235 99.0 \n", "4 1.0 49.24 1.0 49.240 61.0 \n", "\n", " recent_30d_spend prev_30d_spend spend_trend \n", "0 54.76 0.0 54.76 \n", "1 0.00 0.0 0.00 \n", "2 0.00 0.0 0.00 \n", "3 0.00 0.0 0.00 \n", "4 0.00 0.0 0.00 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Merge engineered features into customer table\n", "model_base = customers.merge(features_df, on=\"customer_id\", how=\"left\")\n", "\n", "# Fill missing values with 0.0 for the following columns \n", "fill_zero_cols = [\n", " \"frequency\",\n", " \"monetary_total\",\n", " \"active_days\",\n", " \"recent_30d_spend\",\n", " \"prev_30d_spend\",\n", " \"spend_trend\",\n", "]\n", "\n", "# Fill missing values with 0.0 for the following columns \n", "for col in fill_zero_cols:\n", " model_base[col] = model_base[col].fillna(0.0)\n", "\n", "# Fill missing values with a large value for the following columns \n", "model_base[\"recency_days\"] = model_base[\"recency_days\"].fillna(observation_days + 1)\n", "model_base[\"avg_order_value\"] = model_base[\"avg_order_value\"].fillna(0.0)\n", "\n", "# last_purchase_date is not used as model feature directly\n", "model_base = model_base.drop(columns=[\"last_purchase_date\"], errors=\"ignore\")\n", "\n", "model_base.head()" ] }, { "cell_type": "markdown", "id": "f5fb782a", "metadata": {}, "source": [ "## SECTION F — Add Tenure Feature" ] }, { "cell_type": "code", "execution_count": 13, "id": "ba4b06bd", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.615719Z", "iopub.status.busy": "2026-03-24T15:26:35.615351Z", "iopub.status.idle": "2026-03-24T15:26:35.623598Z", "shell.execute_reply": "2026-03-24T15:26:35.622875Z", "shell.execute_reply.started": "2026-03-24T15:26:35.615693Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
customer_idsignup_datecountrycustomer_segmentacquisition_channelfrequencymonetary_totalactive_daysavg_order_valuerecency_daysrecent_30d_spendprev_30d_spendspend_trendtenure_days
0C00012023-04-07CHStandardReferral3.0112.713.037.57025.054.760.054.76665
1C00022024-08-19ITStandardPaid Ads0.00.000.00.000181.00.000.00.00165
2C00032024-05-24ESBudgetOrganic0.00.000.00.000181.00.000.00.00252
3C00042023-12-18ITStandardReferral2.048.472.024.23599.00.000.00.00410
4C00052023-12-14ESStandardOrganic1.049.241.049.24061.00.000.00.00414
\n", "
" ], "text/plain": [ " customer_id signup_date country customer_segment acquisition_channel \\\n", "0 C0001 2023-04-07 CH Standard Referral \n", "1 C0002 2024-08-19 IT Standard Paid Ads \n", "2 C0003 2024-05-24 ES Budget Organic \n", "3 C0004 2023-12-18 IT Standard Referral \n", "4 C0005 2023-12-14 ES Standard Organic \n", "\n", " frequency monetary_total active_days avg_order_value recency_days \\\n", "0 3.0 112.71 3.0 37.570 25.0 \n", "1 0.0 0.00 0.0 0.000 181.0 \n", "2 0.0 0.00 0.0 0.000 181.0 \n", "3 2.0 48.47 2.0 24.235 99.0 \n", "4 1.0 49.24 1.0 49.240 61.0 \n", "\n", " recent_30d_spend prev_30d_spend spend_trend tenure_days \n", "0 54.76 0.0 54.76 665 \n", "1 0.00 0.0 0.00 165 \n", "2 0.00 0.0 0.00 252 \n", "3 0.00 0.0 0.00 410 \n", "4 0.00 0.0 0.00 414 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_base[\"tenure_days\"] = (reference_date - model_base[\"signup_date\"]).dt.days\n", "model_base[[\"customer_id\", \"signup_date\", \"tenure_days\"]].head()\n", "\n", "model_base.head()" ] }, { "cell_type": "markdown", "id": "4c180338", "metadata": {}, "source": [ "## SECTION G — Handle Categorical Features (One-Hot Encoding)\n", "\n", "Categorical fields (`country`, `customer_segment`, `acquisition_channel`) cannot be used directly by most ML models. We one-hot encode them into binary indicator columns.\n", "\n", "We avoid arbitrary ordinal encoding here because there is no meaningful numeric order between categories." ] }, { "cell_type": "code", "execution_count": 14, "id": "d208ab99", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.624081Z", "iopub.status.busy": "2026-03-24T15:26:35.623991Z", "iopub.status.idle": "2026-03-24T15:26:35.627904Z", "shell.execute_reply": "2026-03-24T15:26:35.627513Z", "shell.execute_reply.started": "2026-03-24T15:26:35.624072Z" } }, "outputs": [ { "data": { "text/plain": [ "customer_id str\n", "signup_date datetime64[us]\n", "country str\n", "customer_segment str\n", "acquisition_channel str\n", "frequency float64\n", "monetary_total float64\n", "active_days float64\n", "avg_order_value float64\n", "recency_days float64\n", "recent_30d_spend float64\n", "prev_30d_spend float64\n", "spend_trend float64\n", "tenure_days int64\n", "dtype: object" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Identify the column types so far \n", "model_base.dtypes" ] }, { "cell_type": "code", "execution_count": 15, "id": "adf6008c", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.628234Z", "iopub.status.busy": "2026-03-24T15:26:35.628161Z", "iopub.status.idle": "2026-03-24T15:26:35.637395Z", "shell.execute_reply": "2026-03-24T15:26:35.636766Z", "shell.execute_reply.started": "2026-03-24T15:26:35.628227Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
customer_idsignup_datecountrycustomer_segmentacquisition_channelrecency_daysfrequencymonetary_totalavg_order_valueactive_daysrecent_30d_spendprev_30d_spendspend_trendtenure_days
0C00012023-04-07CHStandardReferral25.03.0112.7137.5703.054.760.054.76665
1C00022024-08-19ITStandardPaid Ads181.00.00.000.0000.00.000.00.00165
2C00032024-05-24ESBudgetOrganic181.00.00.000.0000.00.000.00.00252
3C00042023-12-18ITStandardReferral99.02.048.4724.2352.00.000.00.00410
4C00052023-12-14ESStandardOrganic61.01.049.2449.2401.00.000.00.00414
\n", "
" ], "text/plain": [ " customer_id signup_date country customer_segment acquisition_channel \\\n", "0 C0001 2023-04-07 CH Standard Referral \n", "1 C0002 2024-08-19 IT Standard Paid Ads \n", "2 C0003 2024-05-24 ES Budget Organic \n", "3 C0004 2023-12-18 IT Standard Referral \n", "4 C0005 2023-12-14 ES Standard Organic \n", "\n", " recency_days frequency monetary_total avg_order_value active_days \\\n", "0 25.0 3.0 112.71 37.570 3.0 \n", "1 181.0 0.0 0.00 0.000 0.0 \n", "2 181.0 0.0 0.00 0.000 0.0 \n", "3 99.0 2.0 48.47 24.235 2.0 \n", "4 61.0 1.0 49.24 49.240 1.0 \n", "\n", " recent_30d_spend prev_30d_spend spend_trend tenure_days \n", "0 54.76 0.0 54.76 665 \n", "1 0.00 0.0 0.00 165 \n", "2 0.00 0.0 0.00 252 \n", "3 0.00 0.0 0.00 410 \n", "4 0.00 0.0 0.00 414 " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Select the categorical columns dedicatedly \n", "categorical_cols = [\"country\", \"customer_segment\", \"acquisition_channel\"]\n", "numeric_cols = [\n", " \"recency_days\",\n", " \"frequency\",\n", " \"monetary_total\",\n", " \"avg_order_value\",\n", " \"active_days\",\n", " \"recent_30d_spend\",\n", " \"prev_30d_spend\",\n", " \"spend_trend\",\n", " \"tenure_days\",\n", "]\n", "\n", "# Keep a clean feature frame (exclude identifiers/date columns)\n", "feature_input = model_base[[\"customer_id\", \"signup_date\"] + categorical_cols + numeric_cols].copy()\n", "\n", "feature_input.head()" ] }, { "cell_type": "code", "execution_count": 16, "id": "9cd24042", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.637841Z", "iopub.status.busy": "2026-03-24T15:26:35.637754Z", "iopub.status.idle": "2026-03-24T15:26:35.653421Z", "shell.execute_reply": "2026-03-24T15:26:35.652945Z", "shell.execute_reply.started": "2026-03-24T15:26:35.637834Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "One-hot columns created: 12\n", "Total feature columns in X: 21\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
country_CHcountry_DEcountry_EScountry_FRcountry_ITcustomer_segment_Budgetcustomer_segment_Premiumcustomer_segment_Standardacquisition_channel_Affiliateacquisition_channel_Organic...acquisition_channel_Referralrecency_daysfrequencymonetary_totalavg_order_valueactive_daysrecent_30d_spendprev_30d_spendspend_trendtenure_days
01.00.00.00.00.00.00.01.00.00.0...1.025.03.0112.7137.5703.054.760.054.76665.0
10.00.00.00.01.00.00.01.00.00.0...0.0181.00.00.000.0000.00.000.00.00165.0
20.00.01.00.00.01.00.00.00.01.0...0.0181.00.00.000.0000.00.000.00.00252.0
30.00.00.00.01.00.00.01.00.00.0...1.099.02.048.4724.2352.00.000.00.00410.0
40.00.01.00.00.00.00.01.00.01.0...0.061.01.049.2449.2401.00.000.00.00414.0
\n", "

5 rows × 21 columns

\n", "
" ], "text/plain": [ " country_CH country_DE country_ES country_FR country_IT \\\n", "0 1.0 0.0 0.0 0.0 0.0 \n", "1 0.0 0.0 0.0 0.0 1.0 \n", "2 0.0 0.0 1.0 0.0 0.0 \n", "3 0.0 0.0 0.0 0.0 1.0 \n", "4 0.0 0.0 1.0 0.0 0.0 \n", "\n", " customer_segment_Budget customer_segment_Premium \\\n", "0 0.0 0.0 \n", "1 0.0 0.0 \n", "2 1.0 0.0 \n", "3 0.0 0.0 \n", "4 0.0 0.0 \n", "\n", " customer_segment_Standard acquisition_channel_Affiliate \\\n", "0 1.0 0.0 \n", "1 1.0 0.0 \n", "2 0.0 0.0 \n", "3 1.0 0.0 \n", "4 1.0 0.0 \n", "\n", " acquisition_channel_Organic ... acquisition_channel_Referral \\\n", "0 0.0 ... 1.0 \n", "1 0.0 ... 0.0 \n", "2 1.0 ... 0.0 \n", "3 0.0 ... 1.0 \n", "4 1.0 ... 0.0 \n", "\n", " recency_days frequency monetary_total avg_order_value active_days \\\n", "0 25.0 3.0 112.71 37.570 3.0 \n", "1 181.0 0.0 0.00 0.000 0.0 \n", "2 181.0 0.0 0.00 0.000 0.0 \n", "3 99.0 2.0 48.47 24.235 2.0 \n", "4 61.0 1.0 49.24 49.240 1.0 \n", "\n", " recent_30d_spend prev_30d_spend spend_trend tenure_days \n", "0 54.76 0.0 54.76 665.0 \n", "1 0.00 0.0 0.00 165.0 \n", "2 0.00 0.0 0.00 252.0 \n", "3 0.00 0.0 0.00 410.0 \n", "4 0.00 0.0 0.00 414.0 \n", "\n", "[5 rows x 21 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# One-hot encode the categorical columns \n", "preprocessor = ColumnTransformer(\n", " transformers=[\n", " (\"cat\", OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False), categorical_cols),\n", " (\"num\", \"passthrough\", numeric_cols),\n", " ]\n", ")\n", "\n", "# Fit the preprocessor on the feature input \n", "X_array = preprocessor.fit_transform(feature_input[categorical_cols + numeric_cols])\n", "\n", "# Get the feature names from the preprocessor \n", "cat_feature_names = preprocessor.named_transformers_[\"cat\"].get_feature_names_out(categorical_cols).tolist()\n", "final_feature_names = cat_feature_names + numeric_cols\n", "\n", "# Create a DataFrame with the one-hot encoded features \n", "X = pd.DataFrame(X_array, columns=final_feature_names, index=feature_input.index)\n", "\n", "# Print the number of one-hot columns created and the total number of feature columns in X \n", "print(\"One-hot columns created:\", len(cat_feature_names))\n", "print(\"Total feature columns in X:\", X.shape[1])\n", "X.head()" ] }, { "cell_type": "markdown", "id": "5100ec99", "metadata": {}, "source": [ "## SECTION H — Final Dataset Assembly" ] }, { "cell_type": "code", "execution_count": 17, "id": "416e715d", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.653781Z", "iopub.status.busy": "2026-03-24T15:26:35.653700Z", "iopub.status.idle": "2026-03-24T15:26:35.663152Z", "shell.execute_reply": "2026-03-24T15:26:35.662687Z", "shell.execute_reply.started": "2026-03-24T15:26:35.653774Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
customer_idcountry_CHcountry_DEcountry_EScountry_FRcountry_ITcustomer_segment_Budgetcustomer_segment_Premiumcustomer_segment_Standardacquisition_channel_Affiliate...recency_daysfrequencymonetary_totalavg_order_valueactive_daysrecent_30d_spendprev_30d_spendspend_trendtenure_daysfuture_revenue_90d
0C00011.00.00.00.00.00.00.01.00.0...25.03.0112.7137.5703.054.760.054.76665.00.00
1C00020.00.00.00.01.00.00.01.00.0...181.00.00.000.0000.00.000.00.00165.00.00
2C00030.00.01.00.00.01.00.00.00.0...181.00.00.000.0000.00.000.00.00252.032.47
3C00040.00.00.00.01.00.00.01.00.0...99.02.048.4724.2352.00.000.00.00410.048.28
4C00050.00.01.00.00.00.00.01.00.0...61.01.049.2449.2401.00.000.00.00414.063.55
\n", "

5 rows × 23 columns

\n", "
" ], "text/plain": [ " customer_id country_CH country_DE country_ES country_FR country_IT \\\n", "0 C0001 1.0 0.0 0.0 0.0 0.0 \n", "1 C0002 0.0 0.0 0.0 0.0 1.0 \n", "2 C0003 0.0 0.0 1.0 0.0 0.0 \n", "3 C0004 0.0 0.0 0.0 0.0 1.0 \n", "4 C0005 0.0 0.0 1.0 0.0 0.0 \n", "\n", " customer_segment_Budget customer_segment_Premium \\\n", "0 0.0 0.0 \n", "1 0.0 0.0 \n", "2 1.0 0.0 \n", "3 0.0 0.0 \n", "4 0.0 0.0 \n", "\n", " customer_segment_Standard acquisition_channel_Affiliate ... \\\n", "0 1.0 0.0 ... \n", "1 1.0 0.0 ... \n", "2 0.0 0.0 ... \n", "3 1.0 0.0 ... \n", "4 1.0 0.0 ... \n", "\n", " recency_days frequency monetary_total avg_order_value active_days \\\n", "0 25.0 3.0 112.71 37.570 3.0 \n", "1 181.0 0.0 0.00 0.000 0.0 \n", "2 181.0 0.0 0.00 0.000 0.0 \n", "3 99.0 2.0 48.47 24.235 2.0 \n", "4 61.0 1.0 49.24 49.240 1.0 \n", "\n", " recent_30d_spend prev_30d_spend spend_trend tenure_days \\\n", "0 54.76 0.0 54.76 665.0 \n", "1 0.00 0.0 0.00 165.0 \n", "2 0.00 0.0 0.00 252.0 \n", "3 0.00 0.0 0.00 410.0 \n", "4 0.00 0.0 0.00 414.0 \n", "\n", " future_revenue_90d \n", "0 0.00 \n", "1 0.00 \n", "2 32.47 \n", "3 48.28 \n", "4 63.55 \n", "\n", "[5 rows x 23 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Join target y\n", "final_dataset = pd.concat(\n", " [\n", " model_base[[\"customer_id\"]].reset_index(drop=True),\n", " X.reset_index(drop=True),\n", " label_df[[\"future_revenue_90d\"]].reset_index(drop=True),\n", " ],\n", " axis=1,\n", ")\n", "\n", "final_dataset.head()" ] }, { "cell_type": "code", "execution_count": 18, "id": "cff82415", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.663695Z", "iopub.status.busy": "2026-03-24T15:26:35.663606Z", "iopub.status.idle": "2026-03-24T15:26:35.673159Z", "shell.execute_reply": "2026-03-24T15:26:35.672629Z", "shell.execute_reply.started": "2026-03-24T15:26:35.663687Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Final dataset shape: (1200, 23)\n", "\n", "Sample rows:\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
customer_idcountry_CHcountry_DEcountry_EScountry_FRcountry_ITcustomer_segment_Budgetcustomer_segment_Premiumcustomer_segment_Standardacquisition_channel_Affiliate...recency_daysfrequencymonetary_totalavg_order_valueactive_daysrecent_30d_spendprev_30d_spendspend_trendtenure_daysfuture_revenue_90d
0C00011.00.00.00.00.00.00.01.00.0...25.03.0112.7137.5703.054.760.054.76665.00.00
1C00020.00.00.00.01.00.00.01.00.0...181.00.00.000.0000.00.000.00.00165.00.00
2C00030.00.01.00.00.01.00.00.00.0...181.00.00.000.0000.00.000.00.00252.032.47
3C00040.00.00.00.01.00.00.01.00.0...99.02.048.4724.2352.00.000.00.00410.048.28
4C00050.00.01.00.00.00.00.01.00.0...61.01.049.2449.2401.00.000.00.00414.063.55
\n", "

5 rows × 23 columns

\n", "
" ], "text/plain": [ " customer_id country_CH country_DE country_ES country_FR country_IT \\\n", "0 C0001 1.0 0.0 0.0 0.0 0.0 \n", "1 C0002 0.0 0.0 0.0 0.0 1.0 \n", "2 C0003 0.0 0.0 1.0 0.0 0.0 \n", "3 C0004 0.0 0.0 0.0 0.0 1.0 \n", "4 C0005 0.0 0.0 1.0 0.0 0.0 \n", "\n", " customer_segment_Budget customer_segment_Premium \\\n", "0 0.0 0.0 \n", "1 0.0 0.0 \n", "2 1.0 0.0 \n", "3 0.0 0.0 \n", "4 0.0 0.0 \n", "\n", " customer_segment_Standard acquisition_channel_Affiliate ... \\\n", "0 1.0 0.0 ... \n", "1 1.0 0.0 ... \n", "2 0.0 0.0 ... \n", "3 1.0 0.0 ... \n", "4 1.0 0.0 ... \n", "\n", " recency_days frequency monetary_total avg_order_value active_days \\\n", "0 25.0 3.0 112.71 37.570 3.0 \n", "1 181.0 0.0 0.00 0.000 0.0 \n", "2 181.0 0.0 0.00 0.000 0.0 \n", "3 99.0 2.0 48.47 24.235 2.0 \n", "4 61.0 1.0 49.24 49.240 1.0 \n", "\n", " recent_30d_spend prev_30d_spend spend_trend tenure_days \\\n", "0 54.76 0.0 54.76 665.0 \n", "1 0.00 0.0 0.00 165.0 \n", "2 0.00 0.0 0.00 252.0 \n", "3 0.00 0.0 0.00 410.0 \n", "4 0.00 0.0 0.00 414.0 \n", "\n", " future_revenue_90d \n", "0 0.00 \n", "1 0.00 \n", "2 32.47 \n", "3 48.28 \n", "4 63.55 \n", "\n", "[5 rows x 23 columns]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Leakage check (date ranges used):\n", "Observation window used for features: [2024-08-04, 2025-01-31]\n", "Prediction window used for label: (2025-01-31, 2025-05-01]\n", "No transactions after t are used in feature engineering.\n" ] } ], "source": [ "print(\"Final dataset shape:\", final_dataset.shape)\n", "print(\"\\nSample rows:\")\n", "display(final_dataset.head(5))\n", "\n", "print(\"\\nLeakage check (date ranges used):\")\n", "print(f\"Observation window used for features: [{obs_start.date()}, {obs_end.date()}]\")\n", "print(f\"Prediction window used for label: ({pred_start.date()}, {pred_end.date()}]\")\n", "print(\"No transactions after t are used in feature engineering.\")" ] }, { "cell_type": "markdown", "id": "d2c0ede8", "metadata": {}, "source": [ "## SECTION H2 — Pre-ML: Correlation, Redundancy, Scaling & Split\n", "\n", "Before feeding the dataset to an ML model, we perform:\n", "\n", "1. **Pre-ML checks**: missing values, duplicates, constant/near-constant columns in the final feature matrix.\n", "2. **Correlation analysis**: heatmap and identification of highly correlated numeric features (and one-hot redundancy).\n", "3. **Redundancy handling**: optionally drop one level per categorical (to avoid perfect multicollinearity) and drop numeric pairs above a correlation threshold.\n", "4. **Train/validation split**: reproducible split for model development (for multiple reference dates in production, use a temporal split).\n", "5. **Scaling**: fit scaler on training data only, then transform both train and validation to avoid leakage." ] }, { "cell_type": "code", "execution_count": 19, "id": "ce322bea", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.673581Z", "iopub.status.busy": "2026-03-24T15:26:35.673499Z", "iopub.status.idle": "2026-03-24T15:26:35.679319Z", "shell.execute_reply": "2026-03-24T15:26:35.678918Z", "shell.execute_reply.started": "2026-03-24T15:26:35.673573Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pre-ML checks (final feature matrix):\n", " Missing per column: No missing values in features.\n", " Duplicate rows (features): 2\n", " Constant/near-constant columns: None\n" ] } ], "source": [ "# ---------------------------------------------------------------------------\n", "# Pre-ML check: sanity on the final feature matrix (before split/scaling)\n", "# ---------------------------------------------------------------------------\n", "\n", "def pre_ml_checks(df, feature_columns, target_column=\"future_revenue_90d\"):\n", " \"\"\"\n", " Run basic sanity checks on the dataset intended for ML.\n", "\n", " Parameters\n", " ----------\n", " df : pd.DataFrame\n", " Full dataset including features and target.\n", " feature_columns : list of str\n", " Column names used as features (exclude IDs and target).\n", " target_column : str\n", " Name of the target column.\n", "\n", " Returns\n", " -------\n", " dict\n", " Summary of checks: missing, duplicates, constant columns.\n", " \"\"\"\n", " X = df[feature_columns]\n", " out = {}\n", "\n", " # Missing values\n", " missing = X.isna().sum()\n", " out[\"missing\"] = missing[missing > 0]\n", " if out[\"missing\"].empty:\n", " out[\"missing\"] = \"No missing values in features.\"\n", "\n", " # Duplicate rows (in feature space)\n", " out[\"n_duplicates\"] = X.duplicated().sum()\n", "\n", " # Constant or near-constant columns (zero variance)\n", " constant = []\n", " for col in X.columns:\n", " if X[col].nunique() <= 1:\n", " constant.append(col)\n", " out[\"constant_columns\"] = constant if constant else \"None\"\n", "\n", " return out\n", "\n", "\n", "# Feature columns = everything in final_dataset except ID and target\n", "FEATURE_COLS = [c for c in final_dataset.columns\n", " if c not in (\"customer_id\", \"future_revenue_90d\")]\n", "TARGET_COL = \"future_revenue_90d\"\n", "\n", "checks = pre_ml_checks(final_dataset, FEATURE_COLS, TARGET_COL)\n", "\n", "print(\"Pre-ML checks (final feature matrix):\")\n", "print(\" Missing per column:\", checks[\"missing\"])\n", "print(\" Duplicate rows (features):\", checks[\"n_duplicates\"])\n", "print(\" Constant/near-constant columns:\", checks[\"constant_columns\"])" ] }, { "cell_type": "code", "execution_count": 20, "id": "e555240b", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:35.679723Z", "iopub.status.busy": "2026-03-24T15:26:35.679658Z", "iopub.status.idle": "2026-03-24T15:26:38.930874Z", "shell.execute_reply": "2026-03-24T15:26:38.930186Z", "shell.execute_reply.started": "2026-03-24T15:26:35.679716Z" } }, "outputs": [ { "data": { "image/png": "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CRy0xbgK5cTrhY1MyC5lpjJFhGb+QA0ZHVSmlDD0kP50/xUp95Q+es2aNctTzklEREREROaJGT4jkMFa5GGI9L+rV6+ewddyTwXxb8i8e/IgIiIiInqSOGiLcTHge8Jkwvfck74TERERERH9FxjwERERERGR0bAPn3GxDx8REREREZGZYsBHRERERERkpljSSURERERERsOSTuNiho+IiIiIiMhMMcNHRERERERGw2kZjIsZPiIiIiIiIjPFDB8RERERERkN+/AZFzN8REREREREZooBHxERERERkZliwEdERERERGSmGPARERERERGZKQ7aQkRERERERsNpGYyLGT4iIiIiIiIzxYCPiIiIiIjITLGkk4iIiIiIjIbz8BkXM3xERERERERmihk+IiIiIiIyGg7aYlzM8BEREREREZkpZviIiIiIiMho2IfPuJjhIyIiIiIiMlMM+IiIiIiIiMwUSzqJiIiIiMhoOGiLcTHDR0REREREZKaY4SMiIiIiIqOxtLDg0TYii6ysrCxjviERERERET291vhVeSLv2+n2STyNmOGj/1SNket4RAEcHd8eAy2CeCzum5F1FYc6tOTxuK/2X1uQuOw7Ho/7HLsP5fmS63xJ3jiL34/77Nu8hoxTW3g87rOq3BL3YhJ4PO4r6uqE5L+m83hozpcOb/FYUB4M+IiIiIiIyGgsOBGfUXHQFiIiIiIiIjPFDB8RERERERmNJTN8RsUMHxERERERkZliho+IiIiIiIzGwoo5J2Pi0SYiIiIiIjJTDPiIiIiIiIgM+OmnnxAUFAR7e3vUq1cPBw4cQH6aNWsGCwuLPI+OHTtq2/Tv3z/P6+3atcPjxJJOIiIiIiIymsIyLcPixYsxZMgQzJgxQwV7kydPRtu2bXHu3DkULVo0T/s///wTqamp2ucRERGoVq0aevTooddOArxff/1V+9zOzu6xfg5m+IiIiIiIiHKZNGkS3njjDbzyyiuoWLGiCvwcHR0xe/ZsGOLh4YFixYppH5s2bVLtcwd8EuDptnN3d8fjxICPiIiIiIiMOi3Dk3g8CsnUHT58GK1atdIus7S0VM/37t1boG3MmjULL7zwApycnPSWb9u2TWUIy5Urh7feektlAh8nlnQSEREREZHZS0lJUY/c2TZDJZXh4eHIyMiAj4+P3nJ5fvbs2Ye+l/T1O3XqlAr6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NUQCQlMjv/TcI2QSEREREZHpGTJkiBrEUa7hZVwPmZYhISFBjdopZDBIKfuUMUaETMMwZswYNfOAVCTevZs99YYmuSNVi1JS2r17d5UllD58Ur0ogyzmF+88FQHfg8ik5/IoLGQ0TfmFEhERERE9rSwe0+Ak/7VevXohLCxMBXESvMl0C5K50wzkcv36db1BfKZPn65G95QBGA31E5QS0RMnTmDu3LlqmjgZ0EXm6ZOM4OOci69QB3xERERERESPyzvvvJPvVGXSzUzX1atXH5r82bBhA4zN5PvwERERERER0T/DDB8REREREZn9PHxPK2b4iIiIiIiIzBQzfEREREREZDzM8BkVM3xERERERERmihk+IiIiIiIyGgudqQzo8ePRJiIiIiIiMlMM+IiIiIiIiMwUSzqJiIiIiMh4OGiLUTHDR0REREREZKYY8BEREREREZkpBnxERERERERmigEfERERERGRmeKgLUREREREZDwWzDkZE482ERERERGRmWKGj4iIiIiIjIcZPqNiho+IiIiIiMhMMcNHRERERERGk8UMn1Exw0dERERERGSmGPARERERERGZKZZ0EhERERGR8bCk06iY4SMiIiIiIjJTzPAREREREZHxWFjwaBsRM3xERERERERmyiIrKyvrSe8EERERERE9HTJunHwi72sVUAVPI5Z00n+qxsh1PKIAjo5vj4EWQTwW983IuopDHVryeNxX+68tSFzyDY/HfY49hvF8yXW+JG+cxe/HffZtXkPGqS08HvdZVW6JezEJPB73FXV1QvJf03k8NOdLh7d4LCgPlnQSERERERGZKWb4iIiIiIjIaLI4LYNRMcNHRERERERkppjhIyIiIiIi42GGz6iY4SMiIiIiIjJTDPiIiIiIiIjMFEs6iYiIiIjIeFjSaVTM8BEREREREZkpZviIiIiIiMh4mOEzKmb4iIiIiIiIzBQzfEREREREZDSceN24mOEjIiIiIiIyUwz4iIiIiIiIzBRLOomIiIiIyHg4aItRMcNHRERERERkppjhIyIiIiIi47Gw4NE2Imb4iIiIiIiIzBQDPiIiIiIiIjPFkk4iIiIiIjIeDtpiVMzwERERERERmSlm+IiIiIiIyGiymOEzKmb4iIiIiIiIzBQzfEREREREZDyWzDkZE482ERERERGRmWLAR0REREREZKYY8P1D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yxLj7e2NqKgoZM2aVWe5XJegLTGy/EPra35+yjb/HzgPHxERERER6U1MmjQpsrdHjBihxuTFZ2ZmBmPHgI+IiIiIiIyemZlZsgM8BwcHpEuXDl5eXjrL5Xq2bNkSvY8s/9D6mp+yTLp0xl+nZMmS+K+wpJOIiIiIiPQmJiZlLp8iY8aMKFOmDA4ePKhdFh0dra5XqlQp0fvI8vjri/3792vXz5Mnjwr64q8j4wilW2dS2/x/YIaPiIiIiIgoASn/7NChA8qWLYvy5curDptBQUGqa6do3749cuTIoR0H2L9/f9SoUQPTp09H48aN4eHhgXPnzmHx4sXq9jRp0mDAgAGYNGkSChQooALAMWPGIHv27Gr6hv8KAz4iIiIiItKb6E9Nt6WQb775Bq9fv1YTpUtTFSm73LNnj7bpypMnT1TnTo3KlStj/fr1atqFkSNHqqBOplsoWrSodp2hQ4eqoLF79+7w9/dH1apV1TZlovb/CgM+IiIiIiKiRPTp00ddEnP48OH3ln399dfqkhTJ8k2YMEFd9IVj+IiIiIiIiIwUM3xERERERKQ3qaOg03gww0dERERERGSkmOEjIiIiIiK9iWaKT6+Y4SMiIiIiIjJSDPiIiIiIiIiMFEs6iYiIiIhIb2JSyTx8xoIZPiIiIiIiIiPFDB8REREREekNm7boFzN8RERERERERooZPiIiIiIi0huO4NOvNDEcNUlERERERHri8zY4Rfa1fRYLmCJm+Oj/asbf97lHAQyqlg+h+5ZxX7xjXq8LQrb9yv3xTqZmAxG6ZzH3h+b10aA7j5cEx0vPNLn5+nhnYcwjhAW+4f54xyyzNQJWjOX+eMeq0wSE+7/i/ngno40T9wW9hwEfERERERHpDZu26BebthARERERERkpZviIiIiIiEhv2EJEv5jhIyIiIiIiMlLM8BERERERkd5Ec1/rFTN8RERERERERooBHxERERERkZFiSScREREREelNTAx3tj4xw0dERERERGSkmOEjIiIiIiK94cTr+sUMHxERERERkZFiwEdERERERGSkWNJJRERERER6E8OuLXrFDB8REREREZGRYoaPiIiIiIj0Jpr7Wq+Y4SMiIiIiIjJSzPAREREREZHecAiffjHDR0REREREZKQY8BERERERERkpBnxERERERERGigEfERERERGRkWLTFiIiIiIi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REREFMWJ1/XKKEs6NfPrpSSZIuLfTBNBRERERET0bxllwEdERERERIaJGT79MsoxfERERERERMSAj4iIiIiIyGixpJOIiIiIiPSGJZ36xZJOIiIiIiIiI8UMHxERERER6Q0zfPrFDB8REREREZGRYsBHRERERERkpFjSSUREREREesOSTv1iho+IiIiIiMhIMeAjIiIiIiIyUgz4iIiIiIiIjBTH8BERERERkd5wDJ9+McNHRERERERkpBjwERERERERGSmWdBIRERERkd6wpFO/mOEjIiIiIiIyUszwERERERGR3jDDp1/M8BERERERERkpBnxERERERERGiiWdRERERESkNyzp1C9m+IiIiIiIiIwUM3xERERERKQ3zPDpFzN8RERERERERooZPiIiIiIi0pvI6BjubT1KExMTwz1ORERERER6MeiPaymyp2c0LQpTxAwf/V+FBgdxjwIwt7DEqzfcFxpO1pYY+ud1vjbe+blJEfx+7SX3xzvNizrzeElwvASsGMvXxztWnSbAvtFk7o93fHaNQs80ubk/3lkY8wjBIaHcH+9YZDLnvqD3cAwfERERERHptWlLSlz+K76+vmjTpg2srKxgY2ODLl26IDAw8IP3qVmzJtKkSaNz6dmzp846T548QePGjWFhYQEnJycMGTIEkZGRn/z4mOEjIiIiIiL6hyTYe/nyJfbv34+IiAh06tQJ3bt3x/r16z94v27dumHChAna6xLYaURFRalgL1u2bDhx4oTafvv27ZEhQwZMmTLlkx4fAz4iIiIiItIbY5qW4ebNm9izZw/Onj2LsmXLqmVz5sxBo0aNMG3aNGTPnj3J+0qAJwFdYvbt24cbN27gwIEDyJo1K0qWLImJEydi2LBh+OGHH5AxY8ZkP0aWdBIREREREf0DJ0+eVGWcmmBP1K1bF2nTpsXp06c/eN9169bBwcEBRYsWxYgRIxAcHKyz3WLFiqlgT6N+/foICAjA9euf1heBGT4iIiIiIjJ6YWFh6hKfmZmZuvxTnp6eanxdfOnTp4ednZ26LSmtW7dGrly5VAbwypUrKnN3+/ZtbN26Vbvd+MGe0Fz/0HYTwwwfERERERHpTVRMTIpcpk6dCmtra52LLEvM8OHD32uqkvBy69atf7wPZIyfZOwkiydjAFevXo3ff/8d9+/fx/8bM3xERERERGT0RowY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/nmdL413fm5SBL9fe8n98U7zos48XhIcLwErkjcJtimw6jQB9o3iGliZOp9do9AzTeppqPRfWxjzCMEhyZvv2BRYZHp/XK4hqjs36flh/0sH+sRVvJgSo5qHj4iIiIiIiIy0pDM1kCYxSdm9ezeqVaum18dDRERERKRPMZyWQa9MJuBbuXIlDMGlS5eSvC3hdBBERERERET/hskEfIYif7wGIkREREREpiaaGT694hg+IiIiIiIiI8WAj4iIiIiIyEixpJOIiIiIiPTGRGaFMxjM8BERERERERkpZviIiIiIiEhvOC2DfjHDR0REREREZKSY4SMiIiIiIr3htAz6xQwfERERERGRkWLAR0REREREZKRY0klERERERHoTE82drU/M8BERERERERkpZviIiIiIiEhvOPG6fjHDR0REREREZKQY8BERERERERkplnQSEREREZHecB4+/WKGj4iIiIiIyEgxw0dERERERHoTEx3Dva1HzPAREREREREZKWb4iIiIiIhIb5jh0y9m+IiIiIiIiIwUAz4iIiIiIiIjxZJOIiIiIiLSm+gYNm3RJ2b4iIiIiIiIjBQzfEREREREpDds2qJfzPAREREREREZqTQxMSyiJSIiIiIi/Sg7bm+K7Opz4+vDFLGkk/6vrrx4wz0KoHh2a4TuWsB98Y55o+8QdeMw98c76QrXRNTTq9wfmv3hUozHS4LjJdz/FV8f72S0cUJYgC/3xztmVnYIDgnl/njHIpM5eqbJzf3xzsKYR6liX7CkU79Y0klERERERGSkmOEjIiIiIiK9iY7mtAz6xAwfERERERGRkWKGj4iIiIiI9IY9I/WLGT4iIiIiIiIjxYCPiIiIiIjISLGkk4iIiIiI9CYmmjtbn5jhIyIiIiIiMlLM8BERERERkd5wWgb9YoaPiIiIiIjISDHgIyIiIiIiMlIs6SQiIiIiIr2JiY7h3tYjZviIiIiIiIiMFAM+IiIiIiLSa4YvJS7/FV9fX7Rp0wZWVlawsbFBly5dEBgYmOT6jx49Qpo0aRK9bN68WbteYrd7eHh88uNjSScREREREdE/JMHey5cvsX//fkRERKBTp07o3r071q9fn+j6Li4uav34Fi9ejF9++QUNGzbUWb5ixQo0aNBAe10Cyk/FgI+IiIiIiPQmOsZ4xvDdvHkTe/bswdmzZ1G2bFm1bM6c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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Numeric pairs with |correlation| >= 0.9:\n", " frequency <-> active_days: 0.998\n" ] } ], "source": [ "# ---------------------------------------------------------------------------\n", "# Correlation analysis: numeric features only (one-hot dummies are 0/1)\n", "# ---------------------------------------------------------------------------\n", "\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "# Numeric feature columns (same as used in encoding)\n", "NUMERIC_FOR_CORR = [\n", " \"recency_days\", \"frequency\", \"monetary_total\", \"avg_order_value\",\n", " \"active_days\", \"recent_30d_spend\", \"prev_30d_spend\", \"spend_trend\", \"tenure_days\",\n", "]\n", "\n", "X_numeric = final_dataset[NUMERIC_FOR_CORR]\n", "corr_matrix = X_numeric.corr()\n", "\n", "fig, ax = plt.subplots(figsize=(10, 8))\n", "sns.heatmap(corr_matrix, annot=True, fmt=\".2f\", cmap=\"RdBu_r\", center=0,\n", " square=True, linewidths=0.5, ax=ax)\n", "ax.set_title(\"Correlation matrix (numeric features)\")\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "# Pairs with |correlation| above threshold (e.g. 0.9 or 0.95)\n", "CORR_THRESHOLD = 0.9\n", "high_corr_pairs = []\n", "for i in range(len(corr_matrix.columns)):\n", " for j in range(i + 1, len(corr_matrix.columns)):\n", " if abs(corr_matrix.iloc[i, j]) >= CORR_THRESHOLD:\n", " high_corr_pairs.append(\n", " (corr_matrix.columns[i], corr_matrix.columns[j], corr_matrix.iloc[i, j])\n", " )\n", "print(f\"\\nNumeric pairs with |correlation| >= {CORR_THRESHOLD}:\")\n", "if high_corr_pairs:\n", " for a, b, r in high_corr_pairs:\n", " print(f\" {a} <-> {b}: {r:.3f}\")\n", "else:\n", " print(\" None.\")" ] }, { "cell_type": "markdown", "id": "ece98852", "metadata": {}, "source": [ "### Interpreting correlation and what to do about it\n", "\n", "**Which features tend to correlate?**\n", "\n", "- **Numeric behavioural features** often move together: e.g. `frequency` and `active_days` (both count activity in the observation window), or `monetary_total` with `recent_30d_spend` (total spend vs a component of it). `avg_order_value` is derived as `monetary_total / frequency`, so it is algebraically tied to those two. In this dataset we may see strong correlations among these.\n", "- **One-hot encoded categoricals** are perfectly redundant within each group: the columns for one categorical (e.g. all `country_*`) sum to 1 for every row, so one column is a linear combination of the others.\n", "\n", "**What can we do?**\n", "\n", "1. **One-hot**: Drop one level per categorical (e.g. the first alphabetically). We keep the rest; the dropped level becomes the \"reference\" in linear models. This removes perfect multicollinearity within each categorical.\n", "2. **Numeric pairs**: For pairs with |correlation| above a chosen threshold (e.g. 0.9 or 0.95), we can drop one of the two. Which one to drop is a modelling choice (e.g. keep the one that is easier to interpret or more stable).\n", "\n", "**Why do it?**\n", "\n", "- **Linear / penalized linear models**: High or perfect correlation makes coefficient estimates unstable (large variance) and can break solvers. Dropping redundant columns stabilizes estimates and keeps the model well-defined.\n", "- **Interpretability**: Fewer redundant features make coefficients easier to interpret (e.g. \"effect of country X vs reference\" instead of an ill-defined mix).\n", "- **Tree-based models** (Random Forest, XGBoost, etc.) are less sensitive to multicollinearity; they can still benefit from fewer noisy/redundant features but do not require this step for numerical stability.\n", "\n", "**How we implement it below**\n", "\n", "- For **categoricals**: we identify one column to drop per group (e.g. first per group) and exclude them from the feature set.\n", "- For **numerics**: we compute the correlation matrix, find pairs above a threshold (e.g. 0.95), and drop one column from each pair (e.g. the second in a fixed order) so that no remaining pair exceeds the threshold. The next cell implements both steps." ] }, { "cell_type": "code", "execution_count": 21, "id": "32af1b27", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:38.931300Z", "iopub.status.busy": "2026-03-24T15:26:38.931157Z", "iopub.status.idle": "2026-03-24T15:26:38.935678Z", "shell.execute_reply": "2026-03-24T15:26:38.935225Z", "shell.execute_reply.started": "2026-03-24T15:26:38.931291Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "One-hot columns dropped (one per group) to avoid multicollinearity: ['country_CH', 'customer_segment_Budget', 'acquisition_channel_Affiliate']\n", "\n", "Numeric columns to drop (|corr| >= 0.95): {'active_days'}\n", "\n", "Feature count: original = 21, reduced = 17\n" ] } ], "source": [ "# ---------------------------------------------------------------------------\n", "# Redundancy: one-hot \"drop first\" and optional removal of highly correlated numerics\n", "# ---------------------------------------------------------------------------\n", "\n", "# (1) One-hot encoding created one column per level; for linear models we often\n", "# drop one level per categorical to avoid perfect multicollinearity.\n", "# Here we define which columns to drop (one per categorical group).\n", "CATEGORICAL_GROUPS = {\n", " \"country\": [c for c in FEATURE_COLS if c.startswith(\"country_\")],\n", " \"customer_segment\": [c for c in FEATURE_COLS if c.startswith(\"customer_segment_\")],\n", " \"acquisition_channel\": [c for c in FEATURE_COLS if c.startswith(\"acquisition_channel_\")],\n", "}\n", "\n", "# Drop the first alphabetically (e.g. country_CH, customer_segment_Budget, acquisition_channel_Affiliate)\n", "COLS_TO_DROP_ONEHOT = [cols[0] for cols in CATEGORICAL_GROUPS.values()]\n", "print(\"One-hot columns dropped (one per group) to avoid multicollinearity:\", COLS_TO_DROP_ONEHOT)\n", "\n", "# (2) Optionally drop one of each highly correlated numeric pair (keep first, drop second)\n", "def get_columns_to_drop_high_corr(corr_matrix, threshold=0.95):\n", " \"\"\"Return a set of column names to drop so that no pair has |corr| >= threshold.\"\"\"\n", " to_drop = set()\n", " for i in range(len(corr_matrix.columns)):\n", " for j in range(i + 1, len(corr_matrix.columns)):\n", " if abs(corr_matrix.iloc[i, j]) >= threshold:\n", " # Drop the second column (j)\n", " to_drop.add(corr_matrix.columns[j])\n", " return to_drop\n", "\n", "\n", "HIGH_CORR_DROP_THRESHOLD = 0.95\n", "cols_drop_high_corr = get_columns_to_drop_high_corr(corr_matrix, HIGH_CORR_DROP_THRESHOLD)\n", "print(f\"\\nNumeric columns to drop (|corr| >= {HIGH_CORR_DROP_THRESHOLD}):\", cols_drop_high_corr or \"None\")\n", "\n", "# Build the reduced feature list (optional: apply both one-hot drop and high-corr drop)\n", "FEATURE_COLS_REDUCED = [\n", " c for c in FEATURE_COLS\n", " if c not in COLS_TO_DROP_ONEHOT and c not in cols_drop_high_corr\n", "]\n", "print(f\"\\nFeature count: original = {len(FEATURE_COLS)}, reduced = {len(FEATURE_COLS_REDUCED)}\")" ] }, { "cell_type": "code", "execution_count": 22, "id": "b96e7873", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:38.936148Z", "iopub.status.busy": "2026-03-24T15:26:38.936054Z", "iopub.status.idle": "2026-03-24T15:26:38.947297Z", "shell.execute_reply": "2026-03-24T15:26:38.946815Z", "shell.execute_reply.started": "2026-03-24T15:26:38.936141Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 1200 entries, 0 to 1199\n", "Data columns (total 18 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 country_DE 1200 non-null float64\n", " 1 country_ES 1200 non-null float64\n", " 2 country_FR 1200 non-null float64\n", " 3 country_IT 1200 non-null float64\n", " 4 customer_segment_Premium 1200 non-null float64\n", " 5 customer_segment_Standard 1200 non-null float64\n", " 6 acquisition_channel_Organic 1200 non-null float64\n", " 7 acquisition_channel_Paid Ads 1200 non-null float64\n", " 8 acquisition_channel_Referral 1200 non-null float64\n", " 9 recency_days 1200 non-null float64\n", " 10 frequency 1200 non-null float64\n", " 11 monetary_total 1200 non-null float64\n", " 12 avg_order_value 1200 non-null float64\n", " 13 recent_30d_spend 1200 non-null float64\n", " 14 prev_30d_spend 1200 non-null float64\n", " 15 spend_trend 1200 non-null float64\n", " 16 tenure_days 1200 non-null float64\n", " 17 future_revenue_90d 1200 non-null float64\n", "dtypes: float64(18)\n", "memory usage: 168.9 KB\n", "None\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
country_DEcountry_EScountry_FRcountry_ITcustomer_segment_Premiumcustomer_segment_Standardacquisition_channel_Organicacquisition_channel_Paid Adsacquisition_channel_Referralrecency_daysfrequencymonetary_totalavg_order_valuerecent_30d_spendprev_30d_spendspend_trendtenure_daysfuture_revenue_90d
00.00.00.00.00.01.00.00.01.025.03.0112.7137.57054.760.054.76665.00.00
10.00.00.01.00.01.00.01.00.0181.00.00.000.0000.000.00.00165.00.00
20.01.00.00.00.00.01.00.00.0181.00.00.000.0000.000.00.00252.032.47
30.00.00.01.00.01.00.00.01.099.02.048.4724.2350.000.00.00410.048.28
40.01.00.00.00.01.01.00.00.061.01.049.2449.2400.000.00.00414.063.55
\n", "
" ], "text/plain": [ " country_DE country_ES country_FR country_IT customer_segment_Premium \\\n", "0 0.0 0.0 0.0 0.0 0.0 \n", "1 0.0 0.0 0.0 1.0 0.0 \n", "2 0.0 1.0 0.0 0.0 0.0 \n", "3 0.0 0.0 0.0 1.0 0.0 \n", "4 0.0 1.0 0.0 0.0 0.0 \n", "\n", " customer_segment_Standard acquisition_channel_Organic \\\n", "0 1.0 0.0 \n", "1 1.0 0.0 \n", "2 0.0 1.0 \n", "3 1.0 0.0 \n", "4 1.0 1.0 \n", "\n", " acquisition_channel_Paid Ads acquisition_channel_Referral recency_days \\\n", "0 0.0 1.0 25.0 \n", "1 1.0 0.0 181.0 \n", "2 0.0 0.0 181.0 \n", "3 0.0 1.0 99.0 \n", "4 0.0 0.0 61.0 \n", "\n", " frequency monetary_total avg_order_value recent_30d_spend \\\n", "0 3.0 112.71 37.570 54.76 \n", "1 0.0 0.00 0.000 0.00 \n", "2 0.0 0.00 0.000 0.00 \n", "3 2.0 48.47 24.235 0.00 \n", "4 1.0 49.24 49.240 0.00 \n", "\n", " prev_30d_spend spend_trend tenure_days future_revenue_90d \n", "0 0.0 54.76 665.0 0.00 \n", "1 0.0 0.00 165.0 0.00 \n", "2 0.0 0.00 252.0 32.47 \n", "3 0.0 0.00 410.0 48.28 \n", "4 0.0 0.00 414.0 63.55 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_final = final_dataset[FEATURE_COLS_REDUCED+[TARGET_COL]]\n", "print(data_final.info())\n", "data_final.head()" ] }, { "cell_type": "code", "execution_count": 23, "id": "42a28e46", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:38.947661Z", "iopub.status.busy": "2026-03-24T15:26:38.947592Z", "iopub.status.idle": "2026-03-24T15:26:38.957042Z", "shell.execute_reply": "2026-03-24T15:26:38.956552Z", "shell.execute_reply.started": "2026-03-24T15:26:38.947654Z" } }, "outputs": [], "source": [ "# save the final dataset to a CSV file \n", "data_final.to_csv(\"data/final_dataset.csv\", sep=\";\", index=False)" ] }, { "cell_type": "markdown", "id": "97c313a1", "metadata": {}, "source": [ "## We have finished (showcasing) feature engineering, but still need to normalize (as an example of preprocessing steps) the data before we can feed it to train the model. \n", "\n", "**Why we still need preprocessing**\n", "\n", "- Many models are sensitive to feature scale (e.g., linear models with regularization, kNN, neural nets). Without scaling, large-magnitude features (e.g. `monetary_total`, `tenure_days`) can dominate the objective and distort learning.\n", "- Some preprocessing steps are required for numerical stability and interpretability (e.g., removing perfect multicollinearity from one-hot encoded categoricals).\n", "\n", "**When to do preprocessing?** \n", "\n", "Normalization (and similar preprocessing) must be fitted **after** the train/validation split. \n", "\n", "Even though we have saved `final_dataset.csv`, the data is not yet in the form we should feed directly into many ML algorithms.\n", "\n", "**Why we split first, then fit preprocessing on train only (leakage avoidance)**\n", "\n", "Preprocessing often computes statistics from the data (mean/std for scaling, quantiles for clipping, PCA directions, feature selection thresholds, imputation values, etc.). If those statistics are computed using *all* rows (train + validation), information from the validation set leaks into training.\n", "\n", "- Correct pattern:\n", " 1. Split into train/validation.\n", " 2. Fit preprocessing steps using **training** data only.\n", " 3. Apply (“transform”) the fitted preprocessing to train and validation.\n", "\n", "- What goes wrong if we fit preprocessing before the split:\n", " - The model indirectly “sees” validation distribution information via the preprocessing statistics.\n", " - Validation metrics become **optimistically biased** and won’t reflect true generalization.\n", "\n", "> Note: the correlation-based feature dropping shown above is also a form of feature selection. In a strict pipeline, it should be decided using training data only. For this teaching notebook we compute it once for simplicity, but the same leakage principle applies." ] }, { "cell_type": "code", "execution_count": 24, "id": "d8b5971c", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:38.957512Z", "iopub.status.busy": "2026-03-24T15:26:38.957411Z", "iopub.status.idle": "2026-03-24T15:26:38.962124Z", "shell.execute_reply": "2026-03-24T15:26:38.961714Z", "shell.execute_reply.started": "2026-03-24T15:26:38.957504Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train size: 960, Validation size: 240\n", "Train target mean: 47.12, val target mean: 43.65\n" ] } ], "source": [ "# ---------------------------------------------------------------------------\n", "# Train/validation split (reproducible; for production with multiple reference dates, use temporal split)\n", "# ---------------------------------------------------------------------------\n", "\n", "from sklearn.model_selection import train_test_split\n", "\n", "SPLIT_SEED = SEED # use same as notebook\n", "VAL_SIZE = 0.2\n", "\n", "# Use reduced feature set if we applied redundancy handling; else use full feature list\n", "X_ml = final_dataset[FEATURE_COLS_REDUCED]\n", "y_ml = final_dataset[TARGET_COL]\n", "\n", "X_train, X_val, y_train, y_val = train_test_split(\n", " X_ml, y_ml, test_size=VAL_SIZE, random_state=SPLIT_SEED, shuffle=True\n", ")\n", "\n", "print(f\"Train size: {len(X_train)}, Validation size: {len(X_val)}\")\n", "print(f\"Train target mean: {y_train.mean():.2f}, val target mean: {y_val.mean():.2f}\")" ] }, { "cell_type": "markdown", "id": "ec86ebd1", "metadata": {}, "source": [ "As mentioned, after **splitting* into train/validation, we can now \n", "\n", " - Fit preprocessing steps using **training** data only.\n", " - Apply (“transform”) the fitted preprocessing to train and validation.\n", "\n", "Separating training and validation data for fitting and applying helps avoid:\n", " - that the model indirectly “sees” validation distribution information via the preprocessing statistics.\n", " - validation metrics become **optimistically biased** and won’t reflect true generalization." ] }, { "cell_type": "code", "execution_count": 25, "id": "7178710d", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:38.962569Z", "iopub.status.busy": "2026-03-24T15:26:38.962488Z", "iopub.status.idle": "2026-03-24T15:26:38.968112Z", "shell.execute_reply": "2026-03-24T15:26:38.967493Z", "shell.execute_reply.started": "2026-03-24T15:26:38.962562Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Scaled feature matrices ready for ML.\n", "X_train_scaled shape: (960, 17)\n", "X_val_scaled shape: (240, 17)\n" ] } ], "source": [ "# ---------------------------------------------------------------------------\n", "# Scaling: fit on training data only, then transform train and validation\n", "# ---------------------------------------------------------------------------\n", "\n", "from sklearn.preprocessing import StandardScaler\n", "\n", "scaler = StandardScaler()\n", "X_train_scaled = scaler.fit_transform(X_train)\n", "X_val_scaled = scaler.transform(X_val)\n", "\n", "# Optional: wrap back into DataFrames for readability\n", "X_train_scaled_df = pd.DataFrame(X_train_scaled, columns=FEATURE_COLS_REDUCED, index=X_train.index)\n", "X_val_scaled_df = pd.DataFrame(X_val_scaled, columns=FEATURE_COLS_REDUCED, index=X_val.index)\n", "\n", "print(\"Scaled feature matrices ready for ML.\")\n", "print(\"X_train_scaled shape:\", X_train_scaled.shape)\n", "print(\"X_val_scaled shape:\", X_val_scaled.shape)" ] }, { "cell_type": "code", "execution_count": 26, "id": "88a1f8ea", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:38.968602Z", "iopub.status.busy": "2026-03-24T15:26:38.968507Z", "iopub.status.idle": "2026-03-24T15:26:38.994987Z", "shell.execute_reply": "2026-03-24T15:26:38.994482Z", "shell.execute_reply.started": "2026-03-24T15:26:38.968594Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saved scaler to: /Users/veit/cusy/trn/ai-tutorial/docs/1intro/data/standard_scaler.joblib\n", "Saved train/val splits to: /Users/veit/cusy/trn/ai-tutorial/docs/1intro/data\n", "Files written:\n", " - X_train.csv\n", " - X_val.csv\n", " - y_train.csv\n", " - y_val.csv\n", " - X_train_scaled.csv\n", " - X_val_scaled.csv\n", " - feature_columns.csv\n" ] } ], "source": [ "# ---------------------------------------------------------------------------\n", "# Export train/validation splits (raw + scaled) for downstream modeling\n", "# ---------------------------------------------------------------------------\n", "\n", "from pathlib import Path\n", "\n", "PROJECT_ROOT = Path.cwd()\n", "PROJECT_ROOT = Path.cwd()\n", "if not (PROJECT_ROOT / \"data\").is_dir():\n", " PROJECT_ROOT = PROJECT_ROOT.parent\n", "\n", "DATA_DIR = PROJECT_ROOT / \"data\"\n", "DATA_DIR.mkdir(parents=True, exist_ok=True)\n", "\n", "# Raw splits\n", "X_train.to_csv(DATA_DIR / \"X_train.csv\", index=False)\n", "X_val.to_csv(DATA_DIR / \"X_val.csv\", index=False)\n", "y_train.to_csv(DATA_DIR / \"y_train.csv\", index=False, header=[TARGET_COL])\n", "y_val.to_csv(DATA_DIR / \"y_val.csv\", index=False, header=[TARGET_COL])\n", "\n", "# Scaled splits\n", "X_train_scaled_df.to_csv(DATA_DIR / \"X_train_scaled.csv\", index=False)\n", "X_val_scaled_df.to_csv(DATA_DIR / \"X_val_scaled.csv\", index=False)\n", "\n", "# Save metadata to help the modeling notebook/script load consistently\n", "(pd.Series(FEATURE_COLS_REDUCED, name=\"feature_name\")\n", " .to_csv(DATA_DIR / \"feature_columns.csv\", index=False))\n", "\n", "# Optional: persist the fitted scaler so the exact same transform can be reused \n", "# Detailed explanation see markdown below\n", "try:\n", " import joblib\n", " joblib.dump(scaler, DATA_DIR / \"standard_scaler.joblib\")\n", " print(\"Saved scaler to:\", DATA_DIR / \"standard_scaler.joblib\")\n", "except Exception as e:\n", " print(\"Could not save scaler (joblib not available or write error):\", repr(e))\n", "\n", "print(\"Saved train/val splits to:\", DATA_DIR.resolve())\n", "print(\"Files written:\")\n", "for name in [\n", " \"X_train.csv\", \"X_val.csv\", \"y_train.csv\", \"y_val.csv\",\n", " \"X_train_scaled.csv\", \"X_val_scaled.csv\",\n", " \"feature_columns.csv\",\n", "]:\n", " print(\" -\", name)" ] }, { "cell_type": "markdown", "id": "e78a37ea", "metadata": {}, "source": [ "### Why did we save `standard_scaler.joblib`?\n", "\n", "In addition to writing the **CSV splits** (raw and scaled), we also persist the **fitted scaler object** as `data/standard_scaler.joblib`.\n", "\n", "**Why store the scaler?**\n", "\n", "- The scaler contains the **exact means and standard deviations** that were learned from the training data.\n", "- Any future code (another notebook, a serving script, a retraining job) that wants to use this model should apply **exactly the same scaling** to new data, otherwise the model will see a different feature distribution and behave unpredictably.\n", "- Storing the scaler is a common production pattern: you ship **both** the model and its preprocessing steps.\n", "\n", "**How to use it later (pseudo-code)**\n", "\n", "===pseudo-code start===\n", "\n", "```python\n", "import joblib\n", "import pandas as pd\n", "\n", "# 1. Load the scaler that was fitted in this notebook\n", "scaler = joblib.load(\"../data/standard_scaler.joblib\")\n", "\n", "# 2. Load or build new feature matrix with the *same columns* as during training\n", "X_new = pd.read_csv(\"../data/new_raw_features.csv\") # or any DataFrame\n", "X_new = X_new[FEATURE_COLS_REDUCED] # enforce same column order\n", "\n", "# 3. Apply the exact same scaling\n", "X_new_scaled = scaler.transform(X_new)\n", "\n", "# 4. Feed X_new_scaled into the trained model for predictions\n", "# y_pred = trained_model.predict(X_new_scaled)\n", "```\n", "===pseudo-code end===\n", "\n", "In this course, `notebooks/02_async_session.ipynb` reads the **pre-scaled CSVs** directly and does **not** need the `.joblib` file. \n", "\n", "Thus, the scaler file is there to illustrate how you would structure a realistic pipeline where preprocessing is reused consistently across training, evaluation, deployment, and monitoring." ] }, { "cell_type": "markdown", "id": "4a21cd21", "metadata": {}, "source": [ "## SECTION I — Optional Sanity Plot" ] }, { "cell_type": "code", "execution_count": 27, "id": "1af68d2c", "metadata": { "execution": { "iopub.execute_input": "2026-03-24T15:26:38.995395Z", "iopub.status.busy": "2026-03-24T15:26:38.995310Z", "iopub.status.idle": "2026-03-24T15:26:39.096258Z", "shell.execute_reply": "2026-03-24T15:26:39.095841Z", "shell.execute_reply.started": "2026-03-24T15:26:38.995386Z" } }, "outputs": [ { "data": { "image/png": "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AkdSCgAAAAAAAIEjKQUAAAAAAIDAkZQCAAAAAABA4EhKAQAAAAAAIHAkpQAAAAAAABA4klIAAAAAAAAIXHzwqyw+duzYYWlpabnOl5iYaLVq1QpkmwAAAIoy4icAAFBgSalNmzbZ0KFD7a233rJff/3VTjzxRJs2bZq1bt3aTfc8z0aOHGnPPPOM7dq1y84991ybMmWKnXTSSaFl7Ny50wYMGGBz5syxuLg4S0lJsccee8yqVKliRSmg+uMNf7Kde37Ndd6aVSvZi9OeJTEFAABKNeInAABQYEmpX375xSWZLr74YpeUUuugdevWWY0aNULzjB8/3iZOnGgzZsywxo0b2913322dOnWyNWvWWIUKFdw8PXv2tC1bttjChQstIyPDbrjhBrv55ptt5syZVlSohZQSUrXapVjlmnWynW/fzm22Y+krbn5aSwEAgNKM+AkAABRYUuqBBx6whg0bupZRPiWefGol9eijj9rw4cOtW7du7rHnn3/e6tSpY6+99ppdc8019tVXX9n8+fNt+fLlodZVjz/+uF1++eX20EMPWf369a0oUUIqsXaDHOfZEdjWAAAAFH3ETwAAIN8Lnb/xxhsukfT73//eateubWeccYbrpudbv369bd261Tp06BB6rFq1atamTRtbunSpu6+/1atXDyWkRPOrG9/HH3+c5XrT09PdlbfwGwAAAAAAAEpJUur7778P1Yd6++23rW/fvnbrrbe6rnqihJSoZVQ43fen6a8SWuHi4+OtZs2aoXmijRs3ziW3/JtaawEAAAAAAKCUJKUOHTpkZ555pt13332ulZTqQN1000325JNPFtwWmtmwYcNs9+7dodvGjRsLdH0AAAAAAAAoQkmpevXqWbNmzSIea9q0qaWmprr/161b1/3dtm1bxDy670/T3+3bt0dMz8zMdCPy+fNES0hIsMTExIgbAAAAAAAASklSSiPvrV27NuKxb775xpKTk0NFz5VYWrRoUWi66j+pVlS7du3cff3dtWuXrVixIjTPu+++61phqfYUAAAAAAAASr48jb43aNAgO+ecc1z3vauuuso++eQTe/rpp91NypQpYwMHDrR7773X1Z1Skuruu+92I+p179491LLqsssuC3X7y8jIsP79+7uR+YrayHsAAAAAAAAoAkmps846y1599VVX42n06NEu6fToo49az549Q/Pccccdtm/fPldvSi2izjvvPJs/f75VqFAhNM9LL73kElGXXHKJG3UvJSXFJk6cmL+vDAAAAAAAACUjKSVXXHGFu2VHraWUsNItOxppb+bMmXldNQAAAAAAAEpjTSkAAAAAAAAgP5CUAgAAAAAAQOBISgEAAAAAACBwJKUAAAAAAAAQOJJSAAAAAAAACBxJKQAAAAAAAASOpBQAAAAAAAACR1IKAACggI0aNcrKlCkTcWvSpElo+v79+61fv36WlJRkVapUsZSUFNu2bVvEMlJTU61Lly5WqVIlq127tg0ZMsQyMzN57wAAQLEVX9gbAAAAUBqceuqp9s4774Tux8f/LwwbNGiQvfnmmzZ79myrVq2a9e/f33r06GEfffSRm37w4EGXkKpbt64tWbLEtmzZYtddd52VK1fO7rvvvkJ5PQAAAEeLpBQAAEAAlIRSUina7t27berUqTZz5kxr3769e2zatGnWtGlTW7ZsmbVt29YWLFhga9ascUmtOnXqWMuWLW3MmDE2dOhQ1wqrfPnyvIcAAKDYofseAABAANatW2f169e3448/3nr27Om648mKFSssIyPDOnToEJpXXfsaNWpkS5cudff1t3nz5i4h5evUqZOlpaXZ6tWrs11nenq6myf8BgAAUFSQlAIAAChgbdq0senTp9v8+fNtypQptn79ejv//PNtz549tnXrVtfSqXr16hHPUQJK00R/wxNS/nR/WnbGjRvnugP6t4YNGxbI6wMAADgSdN8DAAAoYJ07dw79v0WLFi5JlZycbC+//LJVrFixwNY7bNgwGzx4cOi+WkqRmAIAAEUFLaUAAAACplZRJ598sn377beuztSBAwds165dEfNo9D2/BpX+Ro/G59/Pqk6VLyEhwRITEyNuAAAARQVJKQAAgIDt3bvXvvvuO6tXr561atXKjaK3aNGi0PS1a9e6mlPt2rVz9/V31apVtn379tA8CxcudEmmZs2a8f4BAIBiie57AAAABez222+3rl27ui57mzdvtpEjR1rZsmXt2muvdbWe+vTp47rZ1axZ0yWaBgwY4BJRGnlPOnbs6JJPvXr1svHjx7s6UsOHD7d+/fq51lAAAADFEUkpAACAAvbjjz+6BNTPP/9stWrVsvPOO8+WLVvm/i8TJkywuLg4S0lJcSPmaWS9yZMnh56vBNbcuXOtb9++LllVuXJl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/fVWGEhKIbArGvpSpG9zwdi4caPddtttri+wCggjmABaV17uu+8+d19XXnSMq+YOJ7n89/LLL9tLL71kM2fOdDUTVq5c6X7A6Iog+xsAijfixMMpuaBznVqQ/fOf/3TnOtXhKs2JKeLd7Pktx0V1tpSkUg1HxU8aeKS0Il6PzdSpU90xpLi6MNB9L8wxxxzjrsBHj/6m+3Xr1g36vSkx+vfv74revvfee65wo0/7VE0FlZXNbn/rb1bvhz8NFuoKqWL8Z555pmudoJsCFxUm1v/VGoF9nb80Cll0YNi0adNQU2n/+Mzp+0R/owdR0MiSGsWM4zuSRt1Ua6lrrrnGdent1auXK96v0ZvY3wUrv45lvs9LNmIo5HecWNqpJceJJ55orVq1cuc6Fct/7LHHrDTLLd5VK2r8l3qinHzyyfbtt9+W6l2SW7wOsw0bNtg777xjf/rTnwptd5CUivry1xe/6paEZ1d1nz7cead6ngo01Nz43XffPazbhva1RkII39+qLaIvCX9/66+aL4f/2FFrIA2PW5qvFEW75JJL3H7SFTX/plY86trk/599nb/UxSB66GrVO9JVKdHxrh/h4ce3up+pvk748a2krIIsnz4r+t7RFS78z6+//urqE4XTRQTtK/Z3wcqvY1nzaEQ+1RIM/z5XawC67hV/xFDI7zgRkfR9mp6eXqp3S27xruIC/NfevXvtu+++c0mZ0iy3eB1m06ZNcyUYVKet0AReWr2ImzVrlhtRaPr06W40oZtvvtmrXr16xOhviE3fvn29atWqee+//763ZcuW0O3XX38NzXPLLbd4jRo18t59913v008/9dq1a+duvszMTO+0007zOnbs6K1cudKbP3++V6tWLW/YsGG8DbmIHo2EfZ2/PvnkEy8+Pt4bO3ast27dOu+ll17yKlWq5L344ouhee6//373/fH66697//nPf7xu3bp5jRs39n777bfQPJdddpl3xhlneB9//LH34YcfutFkrr32Wo7vKL179/aOPfZYb+7cud769eu9f/3rX94xxxzj3XHHHezvfBrJ6PPPP3c3hQaPPPKI+/+GDRvy7VjWiH116tTxevXq5X355ZfufKvPzFNPPcXxXkIQQx3Z56u0iiVOLK3uvPNONwqhznf6ztV9jWa6YMGCwt60IofR9/7rr3/9q/ss6Zj56KOPvA4dOrg4SaNalmaxxOul2cGDB91vcY1SWJhISmXh8ccfd29O+fLl3fDGy5YtC/6dKQEUeGV1mzZtWmge/aD5y1/+4oa51RfElVde6QKScD/88IPXuXNnr2LFiu7LVV+6GRkZhfCKivdJmn2d/+bMmeOSpkpkN2nSxHv66acjpmtI1bvvvtv9ENc8l1xyibd27dqIeX7++Wf3w71KlSpeYmKid8MNN7gfMIiUlpbmjmd9N1eoUME7/vjjvb/97W9eeno6+zsfvPfee1l+XysZmJ/H8hdffOGGZtYylGRUsgslCzFU3j9fpVUscWJpdeONN3rJycnut4guxuo7l4RU1khK/dfVV1/t1atXzx0zOr/q/rfffhvgUVt84/XS7O2333bfu9ExXdDK6B+arQEAAAAAACBI1JQCAAAAAABA4EhKAQAAAAAAIHAkpQAAAAAAABA4klIAAAAAAAAIHEkpAAAAAAAABI6kFAAAAAAAAAJHUgoAAAAAAACBIykFAAAAAACAwJGUAko4z/Ps5ptvtpo1a1qZMmVs5cqVhb1JKAKmT59u1atXL+zNAAAgzy666CIbOHBgkdxzP//8s9WuXdt++OGH0GMfffSRNW/e3MqVK2fdu3cv1O1D0XLcccfZo48+6v5/4MABd//TTz8t7M0CAkVSCijh5s+f7xIQc+fOtS1btthpp52W63OUvHrttdcC2T7k7LvvvrMrr7zSatWqZYmJiXbVVVfZtm3bIubZuXOn9ezZ001XoqlPnz62d+9edi0AADFQfPSHP/zBTj75ZIuLizuqhNfYsWOtW7duLrngGzx4sLVs2dLWr1/vYrJYjBo1yj0HRcOkSZOsadOmVrFiRTvllFPs+eefP2ye2bNnW5MmTaxChQouCTlv3rw8raN8+fJ2++2329ChQ/Nxy4Gij6QUUAqSGvXq1bNzzjnH6tata/Hx8YGtW1d8isMyi6p9+/ZZx44dXZLw3XffdVda9fq7du1qhw4dCs2nhNTq1att4cKFLvn4wQcfuNZxAAAgd+np6e7iz/Dhw+30008/4l3266+/2tSpU93FoehYrH379tagQYPAWymrxXxmZmaRX2ZRNmXKFBs2bJhLFCreuueee6xfv342Z86c0DxLliyxa6+91r33n3/+uWsRp9uXX36Zp3Uppvvwww/deoBSwwNQYvXu3dvTx9y/JScnu9uECRMi5jv99NO9kSNHuv9revRz/GV169Yt4nm33Xabd+GFF4bu6//9+vVzjyclJXkXXXSRe3zVqlXeZZdd5lWuXNmrXbu298c//tHbsWNHTK/hSJb51FNPefXq1fMOHjwYsazf/e533g033BC6/9prr3lnnHGGl5CQ4DVu3NgbNWqUl5GREZqu1//MM8943bt39ypWrOideOKJ3uuvvx6aPm3aNK9atWoR63j11Vfd88Lltp7svP32215cXJy3e/fu0GO7du3yypQp4y1cuNDdX7NmjVvf8uXLQ/O89dZbbp5NmzZFbGvDhg3d69Dreeihhw7bdgAAigPFBooLZOfOnV6vXr286tWru3OcYoNvvvkmYv6nn37aa9CgQegc+PDDD2d7Dgxfdjg/DtI5/JhjjvGqVq3q/fnPf/bS09ND88yePdurVatW6P769esjYirddD7OLX7Q9Kye5y/v888/Dz3vl19+cY+999577r7+6v68efO8M8880ytXrpx7TDHRfffd5x133HFehQoVvBYtWrjtjcWRLFPTjj32WG/y5MkRy/rss89cjPLDDz+Etr9Pnz6hfXrxxRd7K1euDM2v+FRx6vPPP+9i0sTERO/qq6/20tLSQvPkFtvGsp6ctGvXzrv99tsjHhs8eLB37rnnhu5fddVVXpcuXSLmadOmjTtGfNu2bfOuuOIKt6+0z1588cUst13bNnz48Ji2DSgJaCkFlGCPPfaYjR492l2ZU9P05cuX5/ocf55p06bF/JxwM2bMcM2P1arnySeftF27drmrg2eccYbrI6/uhOp+pm5oBbXM3//+966mw3vvvRfRxU3z6QqU/Pvf/7brrrvObrvtNluzZo099dRTrkm9mt2H09UwLfc///mPXX755e75WlasYl1Pdldu1UoqISEh9JiahKtrga6iydKlS91V19atW4fm6dChg5vn448/dvf1V1fu+vfv72qKXXzxxXbvvffG/BoAACiqrr/+ehcLvPHGG+6cqGtKOl9nZGS46YodbrnlFnce1jnw0ksvjekcnJVFixbZV199Ze+//779/e9/t3/9618uTgg/57dq1Sp0v2HDhi6WUvd61Q3S/6+++upc16N5/vrXv9qpp57qnhPr88Ldeeeddv/997vtbdGihY0bN851OVMcpVY4gwYNsj/+8Y+2ePHiAlmm4hC1HJo5c2bEMl566SU799xzLTk5ORSzbd++3d566y1bsWKFnXnmmXbJJZdExFpqaaayEmoNrpuWr+3Ii1jWk1M8pvgrnLrxffLJJ6HjTMee4q9wnTp1co+HH6sbN2508ek///lPmzx5stumaGeffbY7loBSo7CzYgAKlq6++K2dYr2apK8GXbELF2tLKbUICjdmzBivY8eOEY9t3LjRrWPt2rW5bv+RLlPbeuONN4amq/VU/fr1Q62nLrnkEnd1L9wLL7zgWliF74fwK1V79+51j6klUqwtpWJZT3a2b9/urghqP+/bt8+tv3///m75N998s5tn7Nix3sknn3zYc3Wl1r86ee2113qXX355xHRdZaSlFACgOPJbM6lFlM6JH330UWjaTz/95FpEvfzyy6HzXXQLlp49ex5RS6maNWu687FvypQpXpUqVUKxRXTs4dO6FDP4Yokf/BZC4fLSUkqttH379+/3KlWq5C1ZsiRieWo5pBghN0e6TG2nWkVt2LAhovWU9pv8+9//dnGOlhXuhBNOcHGbvx+0nvCWUUOGDHGtkGKNbWNZT06GDRvm1a1b1/v000+9Q4cOudbpderUcftk8+bNbh61Hps5c2bE8yZNmuRa84viU83/ySefhKZ/9dVX7rHobX/sscdcSyqgtKClFIB8FX6FUL744gt3RahKlSqhm4pA+le+CmqZatH0yiuvuKtb/pW5a665xl2585ehVmThy7jpppvc1UjVhPDpSqCvcuXK7mpnVle1shPrerKi+hYqmqmaBXpetWrVXCsxXd3zX0csdEWzTZs2EY+1a9cu5ucDAFAU6fymWpnh57ikpCRXiFrTZO3ata7lSbjo+7FSvalKlSpFnEs1sIhav8hvv/12WIuawhLegvrbb791MYdaiYXHI2rlFGssdiTLVKF2FQf3W0uphZNiKLVa8mMk7T+9Z+HLUEH48O1S0fiqVauG7qtWal5jsVjWk527777bOnfubG3btnUjKKqQfe/evd20WOMx/1gNj2kVu2ZVY0ytsHKLEYGSJLiKxwCKBJ08/9sI6H/8psf58TwlbsIpCFBh7gceeOCweRVUxOJIlqnp2t4333zTzjrrLNcMesKECRHLUJP7Hj16HLaM8IBSwUc4dafzi4zHsk9iXU92VOhcAdNPP/3kghkFLypYf/zxx7vp+n90YKbio2qOrmkAACAYxxxzjP3y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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Target is right-skewed (common for revenue). log1p transform can be considered in downstream modeling.\n" ] } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig, axes = plt.subplots(1, 2, figsize=(12, 4))\n", "\n", "axes[0].hist(final_dataset[\"future_revenue_90d\"], bins=50, edgecolor=\"black\", alpha=0.7)\n", "axes[0].set_title(\"Target distribution: future_revenue_90d\")\n", "axes[0].set_xlabel(\"future_revenue_90d\")\n", "\n", "axes[1].hist(np.log1p(final_dataset[\"future_revenue_90d\"]), bins=50, edgecolor=\"black\", alpha=0.7)\n", "axes[1].set_title(\"log1p(target) distribution\")\n", "axes[1].set_xlabel(\"log1p(future_revenue_90d)\")\n", "\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "print(\"Target is right-skewed (common for revenue). log1p transform can be considered in downstream modeling.\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.0" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }