Gamification & Analysis

77+ Challenges Gamification & Data Driven Insight Với SQL – 300726

Series Thuộc Khóa Học Data Analyst BootCamp. Đăng Ký Khóa Học Inbox mình Tại Đây

Bạn Là Data Analyst Tại …

01 thương hiệu Coffee tại Việt Nam tương tự Starbucks

Mindset Gì …
Khoa Học Não BộMô TảGamification
Dopamine & Novelty (Tính mới lạ): Nơ-ron dopamine (dopaminergic neurons) bắn tín hiệu mạnh nhất khi phần thưởng bất ngờ hoặc chưa từng gặp. Khi khách thử một nhóm sản phẩm mới, não ghi nhận đây là “phần thưởng chưa dự đoán” → dopamine tăng → tạo cảm giác hứng thú.Khách mới hoặc khách đang khám phá thường mua từ 3–4 nhóm sản phẩm khác nhau (cà phê, trà, bánh, đồ lạnh) trong cùng một tháng. Mỗi nhóm mới = một “phần thưởng mới” cho não.Bonus Star Challenges: tặng thêm 10–25 sao khi khách mua từ ≥ 2 nhóm sản phẩm trong 7 ngày. Cơ chế này tạo ra tính mới có chủ đích, buộc khách rời khỏi vùng quen thuộc.
Habituation: Khi cùng một kích thích lặp lại nhiều lần, não học được rằng phần thưởng này chắc chắn xảy ra → dopamine giảm dần về mức nền. Khách không còn cảm giác được thưởng dù vẫn mua hàng.Khách thu hẹp từ 3 nhóm → 2 nhóm → 1 nhóm duy nhất (ví dụ: chỉ còn cà phê). Hành vi mua trở thành thói quen tự động, không còn yếu tố khám phá.Personalized Offers: gợi ý sản phẩm khách chưa từng mua dựa trên lịch sử giao dịch. Mục tiêu: tái tạo lại tính mới lạ bằng cách đưa ra kích thích mà não chưa dự đoán được.
Reward Prediction Error (RPE — sai số dự đoán phần thưởng) = 0: Khi phần thưởng hoàn toàn dự đoán được (RPE = 0), nơ-ron dopamine không bắn tín hiệu. Não không ghi nhận thêm giá trị → động lực quay lại giảm.Khoảng cách giữa các lần mua tăng dần (ví dụ: ~10 ngày → ~12 ngày → ~14 ngày/đơn qua 3 tháng). Khách vẫn quay lại nhưng ngày càng ít thường xuyên hơn — dấu hiệu động lực nội tại đang suy giảm.Free Mod Mondays (03/2026): mỗi tháng 1 ngày, khách được miễn phí thay đổi đồ uống — đổi sữa, thêm syrup, đổi kích cỡ. Tạo biến thể mới từ sản phẩm quen → RPE > 0 trở lại.
Kết hợp nhiều yếu tố → ChurnKhách từ “Gold tier mua 14 đơn/quý” chuyển sang “chỉ 8 đơn/quý, toàn 1 nhóm sản phẩm”. Nếu không can thiệp → mất khách vào quý tiếp theo.Kết hợp cả 3 cơ chế trên thành vòng lặp: Challenge tạo novelty (hàng tuần) → Offer duy trì novelty (liên tục, cá nhân hóa) → Mod Monday tái tạo RPE (1 lần/tháng) → giữ khách ở trạng thái khám phá thay vì thói quen.
THÁNG 4
─────────────────────────────────
Lần 1: Cà phê sữa đá ×2 + Trà đào cam sả
Lần 2: Bạc xỉu + Croissant bơ Pháp
Lần 3: Cà phê sữa đá + Trà sen vàng
→ Mua từ 3 nhóm: Cà phê, Trà, Bánh ngọt → Cách nhau ~10 ngày/lần

THÁNG 5      
─────────────────────────────────
Lần 4: Cà phê sữa đá ×2
Lần 5: Bạc xỉu + Trà đào cam sả
Lần 6: Cà phê sữa đá
→ Chỉ còn 2 nhóm: Cà phê, Trà → Cách nhau ~12 ngày/lần

THÁNG 6 
─────────────────────────────────
Lần 7: Cà phê sữa đá ×2
Lần 8: Bạc xỉu
→ Chỉ còn 1 nhóm: Cà phê → Cách nhau ~14 ngày/lần

DẤU HIỆU NHẬN BIẾT:                    
─────────────────────────────────
• Đa dạng: 3 nhóm → 2 nhóm → 1 nhóm (giảm liên tục)
• Tần suất: ~10 ngày/đơn → ~12 → ~14 ngày/đơn (giãn cách tăng qua 3 tháng)
• So với nửa đầu năm: 6.5 ngày/đơn → 11.3 ngày/đơn (+72%)
• Kết luận: Nguy cơ rời bỏ CAO — cần can thiệp bằng ưu đãi cá nhân hóa
Nhiệm Vụ Của Bạn Là …

Phân tích nhằm phát hiện khách hàng có độ đa dạng danh mục sản phẩm giảm liên tục qua tháng 4 → 5 → 6 kèm theo tần suất mua hàng giảm so với 3 tháng đầu năm.

Bạn Tính Như Thế Nào …

Bước 1 — Shannon Entropy theo tháng (đo độ đa dạng danh mục)

Tại sao dùng Entropy thay vì COUNT(DISTINCT category_id)?

COUNT(DISTINCT) chỉ đếm số nhóm có xuất hiện, không đo mức độ tập trung bên trong. Hai khách hàng cùng mua 3 nhóm nhưng hành vi hoàn toàn khác:

Khách A: Cà phê ×10, Trà ×1, Bánh ×1   → COUNT(DISTINCT) = 3, H ≈ 0.64  (tập trung nặng vào 1 nhóm)
Khách B: Cà phê ×4,  Trà ×4, Bánh ×4   → COUNT(DISTINCT) = 3, H ≈ 1.10  (mua đều cả 3 nhóm)

→ COUNT(DISTINCT) trả về 3 cho cả hai — không phân biệt được. Entropy phân biệt rõ: A thấp (sắp quen hóa), B cao (đang khám phá) → entropy phát hiện sự thu hẹp dần trước khi nhóm biến mất hoàn toàn:
Tháng 4: Cà phê ×5, Trà ×5   → COUNT(DISTINCT) = 2, H = 0.693
Tháng 5: Cà phê ×9, Trà ×1   → COUNT(DISTINCT) = 2, H = 0.325  ← giảm mạnh!
Tháng 6: Cà phê ×10          → COUNT(DISTINCT) = 1, H = 0.000

→ COUNT(DISTINCT) tháng 4→5 vẫn = 2 (không phát hiện). Entropy giảm từ 0.693 → 0.325 (phát hiện sớm 1 tháng). Với bài toán CRM, phát hiện sớm 1 tháng = thêm 1 tháng để can thiệp trước khi khách rời bỏ.

H=i=1npi×ln(pi)với pi=soˆˊ item trong category itổng soˆˊ item trong thaˊng

  • H=0 → chỉ mua 1 category (không đa dạng).
  • H càng cao → mua càng đều trên nhiều category.
INPUT: order_items của C1 trong tháng 4
─────────────────────────────────────────────────────────────────
Category        │ SUM(quantity) │  p_i    │ -p_i × ln(p_i)
────────────────┼───────────────┼─────────┼────────────────
Cà phê          │      4        │  4/7    │  0.3198
Trà             │      2        │  2/7    │  0.3579
Bánh ngọt       │      1        │  1/7    │  0.2780
────────────────┼───────────────┼─────────┼────────────────
Tổng            │      7        │  1.0    │  H = 0.9557

THÁNG 5: chỉ còn Cà phê (4) + Trà (1) → H = 0.5004
THÁNG 6: chỉ còn Cà phê (3)           → H = 0.0000

Bước 2 — Lọc xu hướng giảm liên tục (tháng 4 > 5 > 6)

INPUT (từ Bước 1):                    OUTPUT (sau pivot):
─────────────────────────────         ─────────────────────────────────────
customer_id │ month │ entropy         customer_id │ entropy_m4 │ entropy_m5 │ entropy_m6
     1      │   4   │ 0.9557               1      │   0.9557   │   0.5004   │   0.0000
     1      │   5   │ 0.5004               2      │   0.9557   │   0.5004   │   0.0000
     1      │   6   │ 0.0000               5      │   1.3863   │   1.3863   │   1.3661  ← bị loại
     2      │  ...  │  ...
     5      │  ...  │  ...

Giữ lại:   entropy_m4  >  entropy_m5  >  entropy_m6    (giảm nghiêm ngặt)
Loại bỏ:   entropy_m4 ≤ entropy_m5  HOẶC  entropy_m5 ≤ entropy_m6

Bước 3 — Tính thay đổi tần suất mua hàng

INPUT: orders của C1 (sắp xếp theo thời gian)
─────────────────────────────────────────────────────────────────
order_datetime    │ LAG()          │ DATEDIFF(DAY) │ Nửa
──────────────────┼────────────────┼───────────────┼──────────
2025-01-03 08:15  │ NULL           │ —             │ 1 (T1–3)
2025-01-09 09:30  │ 2025-01-03     │ 6             │ 1
2025-01-15 07:45  │ 2025-01-09     │ 6             │ 1
...               │ ...            │ ...           │ 1
2025-03-29 08:45  │ 2025-03-22     │ 7             │ 1
──────────────────┼────────────────┼───────────────┼──────────
2025-04-06 09:00  │ 2025-03-29     │ 8             │ 2 (T4–6)
2025-04-16 08:30  │ 2025-04-06     │ 10            │ 2
...               │ ...            │ ...           │ 2
2025-06-27 08:15  │ 2025-06-13     │ 14            │ 2

avg_interval_first_half  = AVG(days) WHERE tháng ∈ {1,2,3}  =  6.5 ngày
avg_interval_second_half = AVG(days) WHERE tháng ∈ {4,5,6}  = 11.3 ngày

frequency_change_pct = (11.3 − 6.5) / 6.5 × 100 = +72.1%
                       ─────────────────────────────────────
                       Giá trị DƯƠNG → khoảng cách tăng → tần suất GIẢM

Bước 4 — Phân loại

INPUT: kết quả Bước 2 (entropy giảm) + Bước 3 (frequency_change_pct)
─────────────────────────────────────────────────────────────────
                    │ frequency_change_pct │ risk_level
────────────────────┼──────────────────────┼────────────
  > 20%             │     C1: +72.1%       │   HIGH
  > 0% và ≤ 20%     │     C3: +14.3%       │   MEDIUM
  ≤ 0%              │     C4: −22.4%       │   LOW
Output Mong Muốn
cust_idcust_nametierH_m4H_m5H_m6declineint_1hint_2hfreq%risk
3Lê Hoàng CườngSilver0.99500.50040.00000.99507.08.0+14.3MEDIUM
4Phạm Minh ĐứcSilver0.99500.50040.00000.99509.27.2−22.4LOW
1Nguyễn Văn AnGold0.95570.50040.00000.95576.511.3+72.1HIGH
2Trần Thị BìnhGold0.95570.50040.00000.95576.611.1+68.2HIGH
7Bùi Thị LanGold0.95570.50040.00000.95576.811.1+64.3HIGH
CộtÝ NghĩaGiải Thích
cust_idMã khách hàng
cust_nameHọ tên khách hàng
tierHạng thành viên (Bronze / Silver / Gold)Gold = khách giá trị cao → ưu tiên can thiệp trước
H_m4Shannon Entropy tháng 4 (đo độ đa dạng danh mục)Càng cao = mua càng nhiều nhóm khác nhau. Ví dụ 0.9557 ≈ mua đều 3 nhóm
H_m5Shannon Entropy tháng 5So sánh với H_m4: nếu H_m5 < H_m4 → khách đang thu hẹp lựa chọn
H_m6Shannon Entropy tháng 6
declineMức giảm entropy tổng: H_m4 − H_m6Giá trị càng lớn → mức độ thu hẹp danh mục càng nghiêm trọng
int_1hKhoảng cách trung bình giữa các đơn hàng nửa đầu năm (tháng 1–3), đơn vị: ngàyThấp = mua thường xuyên. Ví dụ 6.5 ngày ≈ ~4.6 đơn/tháng
int_2hKhoảng cách trung bình giữa các đơn hàng nửa cuối (tháng 4–6), đơn vị: ngàyCao hơn int_1h → khách đang giãn cách dần
freq%% thay đổi khoảng cách: (int_2h − int_1h) / int_1h × 100Dương = khoảng cách tăng → tần suất mua giảmÂm = tần suất mua tăng
riskMức nguy cơ tổng hợp (dựa trên freq%)HIGH: freq% > 20% · MEDIUM: 0% < freq% ≤ 20% · LOW: freq% ≤ 0%

Cách đọc ví dụ dòng C1 — Nguyễn Văn An

  • H_m4 = 0.9557 → 0.5004 → 0.0000: khách thu hẹp từ 3 nhóm → 2 nhóm → 1 nhóm duy nhất qua 3 tháng.
  • int_1h = 6.5 → int_2h = 11.3: khoảng cách giữa các đơn tăng từ ~6.5 lên ~11.3 ngày.
  • freq% = +72.1%: khoảng cách tăng 72% → tần suất mua giảm mạnh → HIGH (nguy cơ rời bỏ cao nhất).
  • CRM action: kích hoạt Personalized Offer ngay — gợi ý sản phẩm thuộc nhóm Trà / Bánh ngọt mà khách đã bỏ.

Leave a Comment