1. Bài Toán Cần Giải Quyết
Pinterest vận hành một chương trình email với khoảng 12 loại email khác nhau gửi cho người dùng. Đội ngũ phân tích cần trả lời một câu hỏi nghiệp vụ: một lượt người dùng bấm unsubscribe (hủy nhận email) gây thiệt hại bao nhiêu cho mức độ giữ chân người dùng (retention)?
Tại Sao Không Chạy A/B Test?
Cách chính xác nhất để đo tác động là A/B test: chia user thành 2 nhóm, nhóm A ngừng nhận email, nhóm B tiếp tục nhận, rồi so sánh retention. Tuy nhiên Pinterest không thể làm điều này vì: (01) Ràng buộc pháp lý và (02) ngừng gửi email cho nhóm control (đang muốn nhận) để so sánh sẽ gây hại trải nghiệm người dùng.
Giải Pháp: Phân Tích Tương Quan
Thay vì thí nghiệm, sẽ chọn cách quan sát hành vi tự nhiên: so sánh hoạt động của user đã tự bấm unsubscribe với baseline (toàn bộ user nhận email). Phương pháp này có hạn chế — Self-Selection Bias: user bấm unsubscribe có thể vốn đã có xu hướng rời bỏ sản phẩm cao hơn bình thường, nên phần chênh lệch churn có thể phản ánh một phần đặc tính sẵn có của họ chứ không hoàn toàn do mất email.
┌──────────────────────────────┐
│ Toàn bộ user nhận email │
│ (BENCHMARK GROUP) │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Một số user bấm Unsubscribe │
│ (TREATMENT GROUP) │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Đo số ngày active trong │
│ cửa sổ 7 ngày SAU sự kiện │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ So sánh phân phối hoạt động │
│ giữa 2 nhóm theo user_state │
└──────────────────────────────┘
- Đối tượng phân tích: người dùng có ít nhất 1 lần nhận email trong khoảng quan sát.
- Chỉ số chính: tỷ lệ user inactive (0 ngày active trong 7 ngày) — gọi là Churn Propensity.
- Đơn vị so sánh: 6 nhóm user_state (core, casual, marginal, new, dormant, resurrected).
- Kết quả mong đợi: chênh lệch churn propensity giữa nhóm unsubscribe và benchmark theo từng user_state.
2. Khung OKR – KPI – Metric
OKR
| Level | Nội Dung |
|---|---|
| Objective | Tối ưu khối lượng email gửi để giảm thiệt hại retention từ các lượt unsubscribe |
| Key Result 1 | Định lượng được mức tăng churn propensity sau unsubscribe theo từng user_state |
| Key Result 2 | Xác định được nhóm user_state nào có chi phí unsubscribe cao nhất để điều chỉnh tần suất gửi email |
| Key Result 3 | Đưa ra khuyến nghị phân khúc tần suất email theo user_state |
KPI
| KPI | Định nghĩa | Đơn vị |
|---|---|---|
| Churn Propensity | Tỷ lệ user có 0 ngày active trong cửa sổ 7 ngày sau mốc quan sát | % |
| Increase in Churn Propensity | Chênh lệch tương đối churn propensity giữa nhóm unsubscribe và benchmark | % |
| Active-Days Distribution | Phân phối số ngày active từ 0 đến 7 ngày | % theo từng cột |
| Unsubscribe Volume | Số lượt unsubscribe theo user_state và loại email | Số lượt |
Metric
| Metric | Công Thức Rút Gọn |
|---|---|
pct_active_k_days | COUNT(user có active = k ngày) / COUNT(user trong nhóm) với k = 0..7 |
churn_propensity | pct_active_0_days |
delta_churn_pct | (churn_unsub - churn_benchmark) / churn_benchmark |
users_in_segment | COUNT(DISTINCT user_id) theo user_state |
Sơ Đồ Liên Kết OKR → KPI → Metric → Challenge
OKR (Tối ưu email volume)
│
├── KR1: Định lượng churn tăng thêm
│ └── KPI: Churn Propensity, Active-Days Distribution
│ └── Metric: pct_active_k_days, churn_propensity
│ └── Challenge 01 (phân loại user_state)
│ └── Challenge 02 (propensity nhóm unsubscribe)
│ └── Challenge 03 (propensity nhóm benchmark)
│
├── KR2: Xác định nhóm thiệt hại nặng
│ └── KPI: Increase in Churn Propensity
│ └── Metric: delta_churn_pct
│ └── Challenge 04 (tính delta giữa 2 bảng)
│
├── KR3: Khuyến nghị phân khúc tần suất
│ └── KPI: Unsubscribe Volume + delta_churn_pct
│ └── Metric: chi phí unsubscribe = volume × delta
│ └── Challenge 05 (xếp hạng và khuyến nghị)
│
├── KR4: Phát hiện loại email / lý do unsubscribe nguy hiểm nhất
│ └── KPI: delta_churn_pct theo lát cắt (email_type × reason × user_state)
│ └── Metric: slice_priority = delta_rel_pct × unsub_volume
│ └── Challenge 06 (cắt lát đa chiều)
│
└── KR5: Đo thời gian hồi phục sau unsubscribe
└── KPI: churn_propensity_week_k (k = 1, 2, 4)
└── Metric: pct_active_0 tính theo từng tuần sau unsubscribe
└── Challenge 07 (decay theo thời gian)
3. Schema Dữ Liệu
3.1. Bảng users
| Cột | Ý Nghĩa |
|---|---|
user_id | Mã định danh người dùng |
signup_date | Ngày đăng ký tài khoản |
country | Quốc gia |
created_at | Thời điểm tạo bản ghi |
3.2. Bảng user_activity
Ghi lại mỗi ngày user có hoạt động trên Pinterest. Một user có thể có nhiều dòng (mỗi ngày active là một dòng). Nếu một ngày không có dòng → user không active ngày đó.
| Cột | Ý Nghĩa |
|---|---|
activity_id | Mã dòng |
user_id | Mã user |
activity_date | Ngày user có hoạt động |
session_count | Số phiên truy cập trong ngày |
3.3. Bảng email_campaigns
| Cột | Ý Nghĩa |
|---|---|
campaign_id | Mã chiến dịch |
email_type | Loại email: digest, recommendation, notification, promotion |
launch_date | Ngày phát hành chiến dịch |
3.4. Bảng email_sends
| Cột | Ý nghĩa |
|---|---|
send_id | Mã lượt gửi |
user_id | Mã người nhận |
campaign_id | Mã chiến dịch |
sent_at | Thời điểm gửi |
is_opened | Đã mở email hay chưa |
3.5. Bảng email_subscription_log
Nhật ký thay đổi trạng thái subscribe / unsubscribe của user theo loại email.
| Cột | Ý Nghĩa |
|---|---|
log_id | Mã dòng |
user_id | Mã user |
email_type | Loại email được thay đổi (hoặc ALL nếu áp dụng tất cả) |
action | subscribe hoặc unsubscribe |
changed_at | Thời điểm thay đổi |
unsubscribe_reason | Lý do (nullable) |
4. Quy Ước Phân Loại User State
Mọi user được phân loại tại cùng 1 mốc cố định T_REF. Xét hành vi trong 28 ngày trước T_REF — cửa sổ [T_REF - 28, T_REF).
┌─────────────────────────────────────────────────────────────┐
│ T_REF - 28 ngày T_REF │
│ ◄─────────────── cửa sổ quan sát 28 ngày ─────────────► │
└─────────────────────────────────────────────────────────────┘
| user_state | Điều Kiện |
|---|---|
new | signup_date nằm trong 28 ngày trước T_REF |
core | Active >= 20 ngày trong 28 ngày trước T_REF (không phải new) |
casual | Active từ 8 đến 19 ngày trong 28 ngày trước T_REF |
marginal | Active từ 1 đến 7 ngày trong 28 ngày trước T_REF |
dormant | Active 0 ngày trong 28 ngày trước T_REF, có active trước đó |
resurrected | Active 1-7 ngày trong 28 ngày trước T_REF, nhưng 28 ngày liền trước cửa sổ đó = 0 ngày active, và có hoạt động trước đó nữa |
5. Quy Ước Tính Propensity — Hai Cửa Sổ Khác Nhau
Nhóm Unsubscribe: Cửa Sổ PER-USER
Mỗi user đo từ ngày họ thực sự unsubscribe. Cửa sổ = [unsub_date + 1, unsub_date + 7].
User A unsubscribe ngày 2026-04-10
│
├─ 04-11 ─ 04-12 ─ 04-13 ─ 04-14 ─ 04-15 ─ 04-16 ─ 04-17
│ cửa sổ 7 ngày SAU ngày unsubscribe của user A
│
User B unsubscribe ngày 2026-04-15
│
├─ 04-16 ─ 04-17 ─ 04-18 ─ 04-19 ─ 04-20 ─ 04-21 ─ 04-22
│ cửa sổ 7 ngày SAU ngày unsubscribe của user B
Lý do: đo tác động ngay sau unsubscribe của từng user..
Nhóm Benchmark: Cửa Sổ Cố Định
Toàn bộ user nhận email dùng chung cửa sổ [T_REF + 1, T_REF + 7]
T_REF = 2026-05-01 (mốc phân tích)
│
├─ 05-02 ─ 05-03 ─ 05-04 ─ 05-05 ─ 05-06 ─ 05-07 ─ 05-08
│ cửa sổ chung cho MỌI user trong benchmark
Lý do: chỉ cần đo mức engagement bình thường tại thời điểm phân tích.
Đo Lường
Nhóm theo user_state, tính tỷ lệ % user theo từng giá trị num_days_active (0..7). Cột 0 chính là Churn Propensity.
NỘI DUNG CHI TIẾT SẼ ĐƯỢC GIẢI THÍCH LẠI TRONG KHÓA HỌC.

Leave a Comment