Table of Contents

    Customer Segmentation Project

    MACHINE LEARNING

    Customer Segmentation Project

    Build a real-world clustering model that groups customers based on their behavior using K-Means.

    Project Overview

    In this hands-on project, we'll build a Customer Segmentation Model using K-Means Clustering. The goal is to group customers based on their annual income and spending behavior, helping businesses make smart, data-driven decisions.

    Goal: Segment customers into meaningful groups to enable targeted marketing, personalized offers, and improved customer engagement.

    Project Objectives

    • Understand customer data and clean it.
    • Perform Exploratory Data Analysis (EDA).
    • Apply scaling and preprocessing.
    • Use the Elbow Method to choose optimal K.
    • Apply K-Means Clustering.
    • Evaluate cluster quality using Silhouette Score.
    • Visualize and interpret customer segments.

    Prerequisites

    Required Tools:
    • Python 3.x
    • Jupyter Notebook / Google Colab
    • Libraries: pandas, numpy, matplotlib, seaborn, scikit-learn
    pip install pandas numpy matplotlib seaborn scikit-learn

    Project Workflow

    Step-by-Step Plan

    • Import libraries
    • Load dataset
    • Perform EDA
    • Feature selection
    • Scale features
    • Use Elbow Method
    • Apply K-Means
    • Visualize clusters
    • Interpret segments
    • Suggest business insights

    Step 1: Import Libraries

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    from sklearn.cluster import KMeans
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import silhouette_score

    Step 2: Create / Load Dataset

    For demonstration, we'll create a sample dataset of mall customers.

    data = {
        "CustomerID": list(range(1, 21)),
        "Age":        [19, 21, 20, 23, 31, 22, 35, 45, 60, 55,
                       30, 40, 28, 33, 50, 27, 42, 38, 47, 25],
        "Annual_Income": [15, 16, 17, 18, 20, 25, 35, 40, 50, 55,
                          45, 60, 70, 75, 80, 90, 95, 100, 110, 120],   # in $1000
        "Spending_Score": [39, 81, 6, 77, 40, 76, 6, 94, 3, 72,
                           55, 65, 50, 60, 20, 90, 30, 85, 25, 95]   # 1-100
    }
    
    df = pd.DataFrame(data)
    print(df.head())
    Insight Each row represents a customer with their Age, Annual Income, and Spending Score.

    Step 3: Data Exploration

    print(df.shape)
    print(df.info())
    print(df.describe())
    print(df.isnull().sum())

    Visualize the distribution of each feature:

    sns.pairplot(df[["Age", "Annual_Income", "Spending_Score"]])
    plt.show()

    Step 4: Feature Selection

    For segmentation, we'll use two key features:

    X = df[["Annual_Income", "Spending_Score"]]
    print(X.head())
    These features reflect customer earnings and shopping behavior — perfect for segmentation.

    Step 5: Feature Scaling

    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
    Why Important Scaling ensures both features contribute equally to clustering.

    Step 6: Find Optimal K Using Elbow Method

    wcss = []
    for k in range(1, 11):
        km = KMeans(n_clusters=k, init="k-means++", random_state=42, n_init=10)
        km.fit(X_scaled)
        wcss.append(km.inertia_)
    
    plt.plot(range(1, 11), wcss, marker="o", color="red")
    plt.title("Elbow Method")
    plt.xlabel("Number of Clusters (K)")
    plt.ylabel("WCSS")
    plt.grid(True)
    plt.show()
    Output The graph forms an "elbow shape" — pick K where the curve bends (usually K = 5).

    Step 7: Apply K-Means with Optimal K

    kmeans = KMeans(n_clusters=5, init="k-means++", random_state=42, n_init=10)
    y_kmeans = kmeans.fit_predict(X_scaled)
    
    df["Cluster"] = y_kmeans
    print(df.head())
    Output Each customer is now assigned to one of 5 distinct clusters.

    Step 8: Evaluate Cluster Quality

    score = silhouette_score(X_scaled, y_kmeans)
    print(f"Silhouette Score: {score:.3f}")
    Higher Silhouette Score (close to +1) means strong clusters.

    Step 9: Visualize Clusters

    plt.figure(figsize=(8, 6))
    sns.scatterplot(
        x=X["Annual_Income"], y=X["Spending_Score"],
        hue=y_kmeans, palette="viridis", s=100
    )
    plt.scatter(
        scaler.inverse_transform(kmeans.cluster_centers_)[:, 0],
        scaler.inverse_transform(kmeans.cluster_centers_)[:, 1],
        s=200, c="red", marker="X", label="Centroids"
    )
    plt.title("Customer Segments")
    plt.xlabel("Annual Income (k$)")
    plt.ylabel("Spending Score")
    plt.legend()
    plt.show()
    Output The plot shows different customer segments with their centroids highlighted in red.

    Step 10: Interpret Customer Segments

    Based on income and spending behavior, here are typical clusters:

    Cluster Income Spending Customer Type
    0LowLowBudget Customers
    1LowHighCareless Spenders
    2HighLowCautious Wealthy
    3HighHighPremium Customers
    4MediumMediumAverage Buyers

    Business Insights & Strategies

    Budget Customers

    • Offer discounts
    • Promote affordable products

    Careless Spenders

    • Loyalty programs
    • Targeted upsells

    Cautious Wealthy

    • Highlight premium quality
    • Use trust-based marketing

    Premium Customers

    • Exclusive offers
    • VIP membership programs

    Average Buyers

    • General promotions
    • Cross-selling strategies

    Bonus: Save the Model

    import joblib
    
    joblib.dump(kmeans, "customer_segmentation_model.pkl")
    joblib.dump(scaler, "scaler.pkl")
    
    # Load and Predict
    loaded_model = joblib.load("customer_segmentation_model.pkl")
    loaded_scaler = joblib.load("scaler.pkl")
    
    new_customer = [[70, 80]]  # Annual Income, Spending Score
    prediction = loaded_model.predict(loaded_scaler.transform(new_customer))
    print("Predicted Cluster:", prediction[0])
    Output The saved model can predict the segment of any new customer.

    Suggested Project Folder Structure

    customer_segmentation_project/
    │
    ├── data/
    │   └── customers.csv
    ├── notebooks/
    │   └── customer_segmentation.ipynb
    ├── models/
    │   └── customer_segmentation_model.pkl
    ├── visualizations/
    │   ├── elbow_plot.png
    │   └── cluster_plot.png
    ├── requirements.txt
    └── README.md

    Real-Life Analogy

    Customer Segmentation = Store Layout

    Just like supermarkets group similar products together (dairy, snacks, beverages), businesses group similar customers to better serve them. Clustering automates this process using data.

    Real-World Applications

    E-Commerce

    • Personalized recommendations
    • Targeted marketing campaigns

    Banking

    • Customer profiling
    • Loan and credit segmentation

    Telecom

    • Plan recommendation
    • Churn prediction

    Retail & FMCG

    • Sales optimization
    • Inventory planning

    Healthcare

    • Patient segmentation
    • Personalized care plans

    OTT / Streaming

    • Group users by interests
    • Recommendation engines

    Common Mistakes to Avoid

    Mistake 1 Skipping feature scaling.
    Mistake 2 Choosing K without using Elbow + Silhouette.
    Mistake 3 Ignoring outliers — they distort clusters.
    Mistake 4 Not interpreting segments in business terms.

    Best Practices

    Quick Tips

    • Use clean and recent customer data.
    • Combine Elbow + Silhouette to choose K.
    • Standardize features before clustering.
    • Use PCA for high-dimensional data.
    • Always interpret clusters in business context.
    • Save models for reuse.

    What You Learned

    Data Handling

    • Cleaning & visualization
    • Feature selection

    Clustering Skills

    • Apply K-Means
    • Evaluate using Silhouette

    Visualization

    • Cluster visualization
    • Elbow & Silhouette plots

    Business Insight

    • Interpret clusters
    • Suggest marketing actions

    Golden Rule

    REMEMBER
    Smart Clustering + Business Interpretation = Powerful Customer Strategy

    Key Takeaway

    This Customer Segmentation Project demonstrates how clustering algorithms like K-Means can transform raw customer data into actionable business insights. By identifying meaningful segments, businesses can deliver personalized experiences, boost sales, and improve customer satisfaction.

    Get Machine Learning updates by email

    Short, practical lessons and course updates from Rumman Ansari. No spam.