Bài toán thực tế #1: Phân tích giỏ hàng (Market Basket Analysis) giúp siêu thị tăng 30% doanh thu chéo

Năm 1992, chuỗi siêu thị Walmart của Mỹ phát hiện ra một điều kỳ lạ trong dữ liệu bán hàng của họ: Mỗi chiều tối cuối tuần, những người mua bỉm trẻ em cũng có tỷ lệ rất cao đồng thời mua bia lon.

Nghe có vẻ vô lý, nhưng sau khi điều tra, họ hiểu ra: Đó là các ông bố trẻ được vợ nhờ đi siêu thị mua bỉm, và tiện thể tự thưởng cho mình vài lon bia sau một tuần làm việc mệt mỏi. Walmart lập tức xếp kệ bia lon ngay cạnh kệ bỉm và doanh số cả hai mặt hàng tăng vọt đáng kể.

Đây chính là sức mạnh của Market Basket Analysis (MBA) — Phân tích giỏ hàng.

Đây không phải câu chuyện huyền thoại. Đây là bài toán dữ liệu thực chiến mà bất kỳ Data Analyst nào làm việc trong ngành bán lẻ, e-commerce hay F&B đều phải thành thục. Và hôm nay, tôi sẽ chỉ cho bạn cách giải quyết bài toán này bằng SQL Server từ đầu đến cuối.


🎨 Trận đồ: Network graph phân tích liên kết sản phẩm trong giỏ hàng

Market Basket Analysis - Retail Data Network


1. Market Basket Analysis là gì? (Giải thích dưới góc nhìn CTO)

Market Basket Analysis là kỹ thuật khai thác dữ liệu (Data Mining) dùng để tìm kiếm các quy tắc kết hợp (Association Rules) — tức là phát hiện những sản phẩm nào thường được mua cùng nhau trong cùng một giao dịch.

Về mặt toán học, MBA dựa trên Thuật toán Apriori và được đo lường bằng 3 chỉ số cốt lõi:

Chỉ số Ý nghĩa Ví dụ
Support Tần suất xuất hiện của cặp sản phẩm trong tổng số giao dịch 5% giao dịch có cả Bia lẫn Bỉm
Confidence Khi đã mua sản phẩm A, xác suất mua thêm sản phẩm B là bao nhiêu? 70% người mua Bỉm cũng mua Bia
Lift Mức độ tác động qua lại (> 1 là tích cực, < 1 là tiêu cực) Lift = 3.5 → Mua Bỉm làm tăng 3.5 lần khả năng mua Bia

2. Bài toán thực chiến: Thiết kế CSDL và truy vấn SQL Server

📐 Bước 1: Thiết lập cấu trúc dữ liệu (Schema Design)

Giả sử bạn có 2 bảng cơ bản trong hệ thống POS (Point of Sale) của siêu thị:

-- Bảng giao dịch chính
CREATE TABLE dbo.orders (
    order_id    INT NOT NULL,
    order_date  DATE NOT NULL,
    customer_id INT NOT NULL
);

-- Bảng chi tiết sản phẩm trong từng giao dịch
CREATE TABLE dbo.order_items (
    order_id    INT NOT NULL,
    product_id  INT NOT NULL,
    product_name VARCHAR(200) NOT NULL,
    quantity    INT NOT NULL,
    unit_price  DECIMAL(10,2) NOT NULL
);

📐 Bước 2: Viết truy vấn MBA — Tìm cặp sản phẩm thường đi cùng nhau

Đây là câu truy vấn SQL Server cốt lõi của Market Basket Analysis. Chúng ta dùng Self-JOIN để tạo ra tất cả các cặp sản phẩm trong cùng một giao dịch, sau đó đếm tần suất xuất hiện:

WITH ProductPairs AS (
    -- Self-JOIN: ghép mỗi sản phẩm với sản phẩm khác trong cùng đơn hàng
    SELECT
        a.order_id,
        a.product_name AS product_A,
        b.product_name AS product_B
    FROM dbo.order_items a
    INNER JOIN dbo.order_items b
        ON  a.order_id = b.order_id   -- cùng đơn hàng
        AND a.product_id < b.product_id -- tránh trùng lặp (A,B) và (B,A)
),
TotalOrders AS (
    SELECT COUNT(DISTINCT order_id) AS total_orders
    FROM dbo.orders
)
SELECT
    pp.product_A,
    pp.product_B,
    COUNT(pp.order_id)                              AS pair_count,
    -- Tính Support: tần suất cặp / tổng giao dịch
    CAST(COUNT(pp.order_id) AS FLOAT) / t.total_orders  AS support,
    -- Tính Confidence: tần suất cặp / số đơn có sản phẩm A
    CAST(COUNT(pp.order_id) AS FLOAT) /
        COUNT(DISTINCT CASE WHEN oi.product_name = pp.product_A
                            THEN oi.order_id END)        AS confidence_A_to_B
FROM ProductPairs pp
CROSS JOIN TotalOrders t
INNER JOIN dbo.order_items oi ON oi.order_id = pp.order_id
GROUP BY pp.product_A, pp.product_B, t.total_orders
HAVING COUNT(pp.order_id) >= 10  -- Lọc cặp xuất hiện ít nhất 10 lần
ORDER BY support DESC, confidence_A_to_B DESC;

📐 Bước 3: Tính Lift và lọc “Quy tắc vàng”

-- Mở rộng: Tính Lift để đánh giá mức độ tương quan thực sự
WITH SupportA AS (
    SELECT product_name, 
           COUNT(DISTINCT order_id) AS count_A
    FROM dbo.order_items
    GROUP BY product_name
),
TotalOrders AS (
    SELECT COUNT(DISTINCT order_id) AS total FROM dbo.orders
)
-- Chỉ giữ lại các cặp có Lift > 1.5 (tương quan thực sự có ý nghĩa)
-- và Confidence > 0.3 (30% người mua A cũng mua B)
SELECT TOP 20
    product_A,
    product_B,
    support,
    confidence_A_to_B,
    -- Lift = Confidence / Support(B)
    confidence_A_to_B / (count_B.count_A * 1.0 / t.total) AS lift
FROM ... -- kết hợp CTE ở trên
WHERE lift > 1.5
  AND confidence_A_to_B > 0.3
ORDER BY lift DESC;

[!TIP]
Trong thực tế, với dữ liệu hàng triệu giao dịch, hãy tạo Clustered Index trên cột order_id của bảng order_items trước khi chạy truy vấn Self-JOIN để tránh Table Scan toàn bộ bảng, giảm thời gian thực thi từ nhiều phút xuống còn vài giây.


3. Từ Data đến Quyết định kinh doanh (Action Plan)

Sau khi có kết quả, nhiệm vụ của Data Analyst không phải là dừng lại ở con số. Bạn phải dịch sang ngôn ngữ kinh doanh và đề xuất hành động cụ thể:

Kết quả phân tích Đề xuất hành động kinh doanh KPI theo dõi
Lift(Cà phê, Bánh ngọt) = 4.2 Tạo combo “Cà phê + Bánh” giảm 10% → đặt ở quầy thu ngân Doanh số combo / Tuần
Confidence(Kem đánh răng → Bàn chải) = 65% Đặt bàn chải ngay cạnh kệ kem đánh răng Doanh số bàn chải tăng %
Support(Mì gói, Trứng gà) = 12% Email/Push Notification “Gợi ý hôm nay: Trứng gà tươi” cho nhóm hay mua mì gói CTR thông báo

🎓 Giải bài toán kinh doanh thực tế tại DNT Academy

Đây chỉ là 1 trong 15+ Case Study thực chiến đa ngành mà bạn sẽ được trực tiếp “mổ xẻ” và giải quyết trong chương trình huấn luyện Thực Chiến Data Analyst cùng Giám đốc Công nghệ (CTO):

  • Bán lẻ / E-commerce: Market Basket Analysis, Customer Segmentation (RFM), Churn Prediction.
  • Logistics: Tối ưu tuyến đường giao hàng, dự báo tồn kho theo mùa vụ, phân tích SLA vi phạm.
  • Tài chính: Phát hiện giao dịch bất thường (Anomaly Detection), dự báo dòng tiền (Cash Flow Forecast).
  • Nhân sự: Phân tích hiệu suất nhân viên, dự báo tỷ lệ nghỉ việc (Attrition Model).

🔥 Bạn muốn học cách giải những bài toán triệu đô này?

Đây là những kỹ năng thực chiến mà không một khóa học đại học nào dạy bạn, nhưng lại chính là những gì CEO và CTO cần bạn làm ngay từ ngày đầu đi làm.

👉 Liên hệ ngay để được tư vấn lộ trình học cá nhân hóa trực tiếp cùng CTO:

💬 LIÊN HỆ ĐĂNG KÝ HỌC TRỰC TIẾP QUA ZALO


Thông tin chi tiết khóa học và lịch khai giảng xem thêm tại: huongnghiepdulieu.com