Challenge 1: Retention Curve Analysis là bài đầu tiên trong case study User Activation Moments
Mục tiêu của challenge này là giúp bạn học cách xây dựng Retention Curve để hiểu pattern giữ chân người dùng theo cohort thời gian, và phát hiện “điểm rơi” của hành vi rời bỏ sau khi kích hoạt.
Bạn sẽ áp dụng SQL thực chiến để tính toán retention theo cohort, diễn giải hành vi người dùng, và tìm insight tăng trưởng dựa trên dữ liệu thực tế.
Tình huống: Bạn là Data Analyst cho một sản phẩm SaaS. Ban lãnh đạo muốn hiểu rõ thực trạng giữ chân người dùng (user retention) hiện tại để làm cơ sở cho các chiến lược cải thiện tỷ lệ kích hoạt (activation). Yêu cầu của bạn là xây dựng một đường cong giữ chân (retention curve) chi tiết, phân rã theo từng nhóm người dùng (cohort) đăng ký theo tháng để xác định “điểm rơi” của người dùng.
Challenge Retention Curve
Viết một câu lệnh SQL Server để tính toán tỷ lệ giữ chân người dùng theo từng cohort tháng (từ tháng 1/2023 đến tháng 3/2023).
- Cohort: Nhóm người dùng đăng ký trong cùng một tháng.
- Retention Period (Kỳ giữ chân): Số tháng kể từ khi người dùng đăng ký (Tháng 0 là tháng đăng ký).
- Retained User: Người dùng được tính là “giữ chân” trong một kỳ nếu họ có ít nhất một hoạt động trong tháng đó.
Theory Liên Quan
Retention Curve
- Định nghĩa: Retention Curve (Đường cong giữ chân) là một biểu đồ dạng đường (line chart) trả lời cho câu hỏi: “Bao nhiêu phần trăm người dùng quay trở lại sản phẩm của chúng ta theo thời gian?”
- Cách hoạt động:
- Trục tung (Y-axis): Biểu thị tỷ lệ phần trăm người dùng vẫn còn hoạt động.
- Trục hoành (X-axis): Biểu thị thời gian kể từ lúc người dùng đăng ký (ví dụ: Ngày 1, Ngày 7, Tháng 1, Tháng 2).
- Tại sao nó quan trọng:
- Nó là thước đo trực tiếp cho thấy sản phẩm của bạn “dính” (sticky) và có giá trị với người dùng như thế nào. Một đường cong thoải và đi ngang cho thấy người dùng đang ở lại. Một đường cong dốc xuống cho thấy người dùng đang rời đi rất nhanh.
- Nó giúp bạn xác định chính xác thời điểm người dùng rời bỏ. Ví dụ, nếu bạn thấy một sự sụt giảm lớn giữa Ngày 1 và Ngày 7, đó là tín hiệu cho thấy trải nghiệm ban đầu của người dùng có vấn đề.
- Ví dụ thực tế:
- Một ứng dụng game di động vừa ra mắt.
- Ngày 0 (Ngày ra mắt): 100% người dùng tải về đã mở ứng dụng.
- Ngày 1: Chỉ có 40% trong số họ quay lại chơi.
- Ngày 7: Chỉ còn 15% quay lại.
- Ngày 30: Chỉ còn 5% vẫn đang chơi.
- Việc vẽ các điểm phần trăm này (100%, 40%, 15%, 5%) theo thời gian sẽ tạo ra Retention Curve. Sự sụt giảm mạnh sau Ngày 1 cho đội ngũ phát triển biết rằng họ cần làm cho vài phút đầu tiên của game trở nên hấp dẫn hơn.
Cohort Analysis
- Định nghĩa: Cohort Analysis (Phân tích theo nhóm) là một kỹ thuật phân tích hành vi bằng cách nhóm những người dùng có chung đặc điểm lại với nhau và theo dõi họ theo thời gian.
- Đặc điểm chung phổ biến nhất là thời gian:
- Một Cohort là một nhóm người dùng bắt đầu sử dụng sản phẩm của bạn trong cùng một khoảng thời gian.
- Ví dụ: “Cohort Tháng 1/2023” bao gồm tất cả những ai đăng ký trong tháng 1 năm 2023. “Cohort Tháng 2/2023” là tất cả những ai đăng ký trong tháng 2.
- Tại sao nó tốt hơn việc nhìn vào tất cả người dùng cùng một lúc:
- Cô lập tác động của thay đổi: Nó cho phép bạn xem liệu các thay đổi bạn thực hiện trên sản phẩm có ảnh hưởng gì không. Nếu bạn ra mắt một tính năng lớn vào tháng 2, bạn có thể so sánh Retention Curve của “Cohort Tháng 2” với “Cohort Tháng 1”. Nếu đường cong của tháng 2 cao hơn, tính năng của bạn có khả năng đã tạo ra tác động tích cực.
- So sánh công bằng: Nó tránh việc trộn lẫn người dùng mới và người dùng cũ. Một chỉ số như “lượng người dùng hoạt động hàng ngày” có thể gây hiểu lầm vì nó kết hợp cả những người dùng mới toanh, tò mò với những người dùng trung thành lâu năm. Phân tích cohort cho phép bạn so sánh các nhóm tương đồng với nhau (ví dụ: trải nghiệm tháng đầu tiên của người dùng đăng ký tháng 1 so với người dùng đăng ký tháng 2).
- Ví dụ thực tế:
- Một công ty SaaS muốn cải thiện quy trình hướng dẫn ban đầu (onboarding).
- Cohort Tháng 1: Nhóm này trải qua quy trình onboarding cũ. Tỷ lệ giữ chân ngày thứ 7 (Day 7 retention) của họ là 20%.
- Tháng 2: Công ty ra mắt một hướng dẫn tương tác mới.
- Cohort Tháng 2: Nhóm này trải nghiệm hướng dẫn mới. Tỷ lệ giữ chân ngày thứ 7 của họ là 35%.
- Bằng cách so sánh hai cohort này, công ty có bằng chứng rõ ràng rằng hướng dẫn mới đã cải thiện đáng kể tỷ lệ giữ chân ban đầu. Nếu không có Cohort Analysis, insight này sẽ bị chìm trong nhiễu của các con số tổng thể.
SQL Solution
/*
* Mục tiêu: Tính toán tỷ lệ người dùng quay lại sử dụng sản phẩm trong các tháng tiếp theo, dựa trên tháng họ đăng ký.
* Phương pháp: Sử dụng phân tích Cohort, nhóm người dùng theo tháng đăng ký.
* Công thức: RetentionRate = (Số người dùng trong cohort quay lại vào tháng N) / (Tổng số người dùng ban đầu trong cohort đó)
*/
WITH
/*
* Mục tiêu: Gán mỗi người dùng vào một "nhóm" (cohort) dựa trên tháng họ đăng ký.
* Tư duy ngược (Tại sao cần bước này?): Để tính tỷ lệ giữ chân của một nhóm, trước hết chúng ta phải định nghĩa nhóm đó là gì. Đây là bước nền tảng, tạo ra các nhóm mà chúng ta sẽ theo dõi theo thời gian.
* Cách làm: Lấy ngày đăng ký của người dùng và chuẩn hóa nó về ngày đầu tiên của tháng.
*/
UserCohorts AS (
SELECT
UserID,
-- Ví dụ: Một người dùng đăng ký ngày '2023-01-15' sẽ thuộc cohort '2023-01-01'.
DATEFROMPARTS(YEAR(RegistrationDate), MONTH(RegistrationDate), 1) AS CohortMonth
FROM
Users
),
/*
* Mục tiêu: Lấy danh sách các tháng mà mỗi người dùng có ít nhất một hoạt động.
* Tư duy ngược (Tại sao cần bước này?): Để biết một người dùng có "quay lại" hay không, chúng ta cần biết họ có hoạt động trong những tháng nào. Dùng DISTINCT để đảm bảo hiệu suất và mỗi người dùng chỉ được tính một lần mỗi tháng.
* Cách làm: Lấy tất cả các tháng duy nhất từ cột EventTimestamp cho mỗi UserID.
*/
MonthlyActivity AS (
SELECT DISTINCT
UserID,
DATEFROMPARTS(YEAR(EventTimestamp), MONTH(EventTimestamp), 1) AS ActivityMonth
FROM
Events
),
/*
* Mục tiêu: Với mỗi hoạt động của người dùng, xác định nó xảy ra ở tháng thứ mấy kể từ khi họ đăng ký.
* Tư duy ngược (Tại sao cần bước này?): Phân tích cohort cần một trục thời gian tương đối (tháng 0, 1, 2...). Bước này tạo ra trục thời gian đó (`RetentionMonth`), cho phép so sánh các cohort khác nhau trên cùng một hệ quy chiếu.
* Cách làm: JOIN UserCohorts và MonthlyActivity, sau đó dùng DATEDIFF để tính khoảng cách giữa tháng hoạt động và tháng đăng ký.
*/
CohortRetention AS (
SELECT
uc.CohortMonth,
ma.UserID,
-- RetentionMonth = 0 là tháng đăng ký, 1 là tháng tiếp theo, v.v.
DATEDIFF(MONTH, uc.CohortMonth, ma.ActivityMonth) AS RetentionMonth
FROM
UserCohorts uc
JOIN
MonthlyActivity ma ON uc.UserID = ma.UserID
),
/*
* Mục tiêu: Đếm số lượng người dùng duy nhất được giữ chân cho mỗi cohort trong mỗi tháng tương đối.
* Tư duy ngược (Tại sao cần bước này?): Đây chính là TỬ SỐ (Numerator) trong công thức tính RetentionRate. Chúng ta cần con số này để biết "bao nhiêu người đã quay lại".
* Cách làm: Đếm số UserID duy nhất và nhóm theo CohortMonth và RetentionMonth.
*/
FinalCounts AS (
SELECT
CohortMonth,
RetentionMonth,
COUNT(DISTINCT UserID) AS RetainedUsers
FROM
CohortRetention
GROUP BY
CohortMonth,
RetentionMonth
),
/*
* Mục tiêu: Đếm tổng số người dùng ban đầu trong mỗi cohort.
* Tư duy ngược (Tại sao cần bước này?): Đây chính là MẪU SỐ (Denominator) trong công thức. Tỷ lệ giữ chân phải được tính dựa trên quy mô ban đầu của nhóm.
* Cách làm: Đếm số UserID duy nhất từ CTE UserCohorts và nhóm theo CohortMonth.
*/
CohortSizes AS (
SELECT
CohortMonth,
COUNT(DISTINCT UserID) AS TotalUsersInCohort
FROM
UserCohorts
GROUP BY
CohortMonth
)
/*
* Mục tiêu: Kết hợp TỬ SỐ và MẪU SỐ để tính ra tỷ lệ giữ chân cuối cùng.
* Tư duy ngược (Tại sao cần bước này?): Đây là bước tổng hợp cuối cùng, ráp nối tất cả các mảnh ghép đã chuẩn bị ở trên để đưa ra kết quả phân tích.
* Cách làm: JOIN FinalCounts (tử số) và CohortSizes (mẫu số), sau đó thực hiện phép chia.
*/
SELECT
cs.CohortMonth,
cs.TotalUsersInCohort, -- Mẫu số
fc.RetentionMonth,
fc.RetainedUsers, -- Tử số
-- Ép kiểu sang FLOAT để đảm bảo phép chia ra số thập phân chính xác.
CAST( (1.0 * fc.RetainedUsers) / NULLIF(cs.TotalUsersInCohort, 0) AS DECIMAL(6,2) ) AS RetentionRate
FROM
FinalCounts fc
JOIN
CohortSizes cs ON fc.CohortMonth = cs.CohortMonth
ORDER BY
cs.CohortMonth,
fc.RetentionMonth;
Giải Thích Output
- CohortMonth: Tháng đăng ký của nhóm người dùng. Ví dụ,
2023-01-01đại diện cho tất cả người dùng đăng ký trong tháng 1/2023. - TotalUsersInCohort: Tổng số người dùng thuộc cohort đó.
- RetentionMonth: Tháng thứ N kể từ khi đăng ký.
0là tháng đăng ký,1là tháng kế tiếp, v.v. - RetainedUsers: Số lượng người dùng duy nhất trong cohort có hoạt động trong
RetentionMonth. - RetentionRate: Tỷ lệ giữ chân, được tính bằng
RetainedUsers / TotalUsersInCohort. Đây là chỉ số quan trọng nhất.
Cách đọc kết quả:
Nhìn vào RetentionRate của CohortMonth = ‘2023-01-01’:
- Ở
RetentionMonth= 0, tỷ lệ giữ chân là 1.0 (100%). Điều này là hiển nhiên vì tất cả 4 người dùng trong cohort đều hoạt động trong tháng họ đăng ký. - Sang
RetentionMonth= 1, tỷ lệ này giảm xuống 0.5 (50%), nghĩa là chỉ còn 2 trong 4 người dùng ban đầu hoạt động. - Ở
RetentionMonth= 2, tỷ lệ vẫn là 0.5 (50%).
Đây chính là đường cong giữ chân (retention curve) của cohort tháng 1.
Template Insight Mẫu
- So sánh hiệu quả giữ chân giữa các Cohort.
- Khi so sánh các cohort, cohort tháng 3/2023 (thời điểm
use_new_feature_xđược ra mắt) cho thấy hiệu suất giữ chân ở Tháng 1 vượt trội (66.7%) so với cohort tháng 1 (50%) và tháng 2 (33.3%). - Điều này cung cấp một tín hiệu tích cực rằng các thay đổi hoặc tính năng mới được giới thiệu vào tháng 3 có thể đã cải thiện khả năng giữ chân người dùng mới.
- Khi so sánh các cohort, cohort tháng 3/2023 (thời điểm
- Sự ổn định của người dùng trung thành.
- Đối với những người dùng đã vượt qua được giai đoạn tháng đầu tiên, tỷ lệ giữ chân có xu hướng ổn định hơn đáng kể. Cohort tháng 1/2023 giữ được 50% người dùng ở Tháng 1 và vẫn giữ nguyên tỷ lệ này ở Tháng 2. Điều này cho thấy nếu người dùng tìm thấy giá trị cốt lõi trong tháng đầu, họ có khả năng cao trở thành người dùng trung thành và gắn bó lâu dài.
- Thử thách tháng đầu tiên
- Phân tích cho thấy, trong khi tỷ lệ giữ chân ở Tháng 0 (tháng đăng ký) luôn là 100%, một sự sụt giảm nghiêm trọng xảy ra ngay ở Tháng 1. Ví dụ, cohort tháng 1/2023 giảm mạnh từ 100% xuống chỉ còn 50% ở tháng tiếp theo. Đây là thử thách mà chúng ta cần tập trung giải quyết, cho thấy trải nghiệm trong 30 ngày đầu tiên chưa đủ sức thuyết phục người dùng ở lại.
Liên Kết Điều Hướng
← Về Case User Activation Moments
Tiếp tục Challenge 2 → Habit Moment Correlation
Nếu bạn muốn học phân tích dữ liệu thực chiến từ Business Mindset cho đến Coding thì có thể đăng ký các khóa học Phân Tích Dữ Liệu Thực Chiến nhé. Inbox mình Tại Đây.
