Học Phân Tích Qua Case Studies

Unsubcribe Analysis – Pinterest (Part 01)

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
LevelNội Dung
ObjectiveTố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 2Xá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 PropensityTỷ lệ user có 0 ngày active trong cửa sổ 7 ngày sau mốc quan sát%
Increase in Churn PropensityChênh lệch tương đối churn propensity giữa nhóm unsubscribe và benchmark%
Active-Days DistributionPhân phối số ngày active từ 0 đến 7 ngày% theo từng cột
Unsubscribe VolumeSố lượt unsubscribe theo user_state và loại emailSố lượt
Metric
MetricCông Thức Rút Gọn
pct_active_k_daysCOUNT(user có active = k ngày) / COUNT(user trong nhóm) với k = 0..7
churn_propensitypct_active_0_days
delta_churn_pct(churn_unsub - churn_benchmark) / churn_benchmark
users_in_segmentCOUNT(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_idMã định danh người dùng
signup_dateNgày đăng ký tài khoản
countryQuốc gia
created_atThờ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_idMã dòng
user_idMã user
activity_dateNgày user có hoạt động
session_countSố phiên truy cập trong ngày
3.3. Bảng email_campaigns
CộtÝ Nghĩa
campaign_idMã chiến dịch
email_typeLoại email: digestrecommendationnotificationpromotion
launch_dateNgày phát hành chiến dịch
3.4. Bảng email_sends
CộtÝ nghĩa
send_idMã lượt gửi
user_idMã người nhận
campaign_idMã chiến dịch
sent_atThờ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_idMã dòng
user_idMã user
email_typeLoại email được thay đổi (hoặc ALL nếu áp dụng tất cả)
actionsubscribe hoặc unsubscribe
changed_atThời điểm thay đổi
unsubscribe_reasonLý 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
newsignup_date nằm trong 28 ngày trước T_REF
coreActive >= 20 ngày trong 28 ngày trước T_REF (không phải new)
casualActive từ 8 đến 19 ngày trong 28 ngày trước T_REF
marginalActive từ 1 đến 7 ngày trong 28 ngày trước T_REF
dormantActive 0 ngày trong 28 ngày trước T_REF, có active trước đó
resurrectedActive 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