Bạn là Data Analyst tại 1 công ty tương tự như Momo. Mục tiêu: Dự đoán retention của user dựa trên hành vi sử dụng trong tuần đầu tiên sau khi đăng ký. Phân tích các Cohort Week trong tháng 01/2025 để xác định xu hướng retention theo thời gian.
User được xem là có tương tác trong ngày nếu họ có ít nhất 1 trong các activity sau: chuyển tiền, nạp tiền, rút tiền, thanh toán hóa đơn, quét mã QR (Các event này có thể thay đổi dynamic tùy giai đoạn)
Engagement → Stickiness → Retention → Growth (Sequoia Capital Framework)
- Engagement (Leading Indicator) là chỉ số đo lường mức độ tương tác của người dùng với sản phẩm. Ví dụ: số lần đăng nhập, số lần sử dụng tính năng, thời gian sử dụng trung bình mỗi ngày.
- Stickiness (Leading Indicator) là chỉ số đo lường khả năng sản phẩm hút người dùng quay lại. Ví dụ: tỷ lệ người dùng quay lại hàng ngày, số ngày hoạt động trong tuần đầu tiên.
- Retention (Lagging Indicator) là chỉ số đo lường khả năng giữ chân người dùng theo thời gian. Ví dụ: retention rate tại tuần 1, 2, 3, 4, 8, 12.
- Growth (Lagging Indicator) là chỉ số đo lường sự tăng trưởng của sản phẩm. Ví dụ: số lượng user mới, doanh thu từ user, tỷ lệ chuyển đổi từ user mới thành user trả phí.
Engagement và Stickiness là leading indicators vì chúng cho biết hành vi của người dùng trong thời gian ngắn hạn và có thể dự đoán được retention trong tương lai.
Retention và Growth là lagging indicators vì chúng cho biết điều đã xảy ra sau một khoảng thời gian nhất định.
L-ness Metric
L-ness là một chỉ số đo lường thói quen sử dụng sản phẩm của người dùng trong tuần đầu tiên sau khi đăng ký. L-ness được tính dựa trên số ngày hoạt động của user trong tuần đầu tiên, với các phân loại sau:
- L1: 1 ngày hoạt động
- L2: 2 ngày hoạt động
- L3: 3 ngày hoạt động
- L4+: 4 hoặc nhiều hơn ngày hoạt động
L-ness có thể được sử dụng như một leading indicator để dự đoán retention dài hạn của user.
Business Rules
- Cohort Week được xác định dựa trên ngày đăng ký của user, lấy ngày đầu tiên của tuần đó làm Cohort Week . (thứ 2 – chủ nhật = 1 tuần)
- Ví dụ: Nếu user đăng ký vào ngày 2025-01-01 (thứ 4), thì Cohort Week của user này sẽ là 2024-12-30 (thứ 2 của tuần đó). Nếu user đăng ký vào ngày 2025-01-05 (chủ nhật), thì Cohort Week của user này sẽ là 2024-12-30 (thứ 2 của tuần đó vì vẫn thuộc cùng tuần).
- Retention tại W1 được tính dựa trên số user có tương tác ít nhất 1 trong các activity đã định nghĩa (chuyển tiền, nạp tiền, rút tiền, thanh toán hóa đơn, quét mã QR) trong tuần đầu tiên sau ngày đăng ký (user_registration_date + 7 ngày).
- Retention tại W2 được tính dựa trên số user có tương tác ít nhất 1 trong các activity đã định nghĩa trong tuần thứ hai sau ngày đăng ký (user_registration_date + 7 ngày đến user_registration_date + 14 ngày).
- Retention tại W3 được tính dựa trên số user có tương tác ít nhất 1 trong các activity đã định nghĩa trong tuần thứ ba sau ngày đăng ký (user_registration_date + 14 ngày đến user_registration_date + 21 ngày). Tương tự cho retention tại W4, W8, W12.
- Ví dụ:
- Nếu Cohort Week 2024-12-30 có 5 users: A, B, C, D, E.
- User A có tương tác vào các ngày 2025-01-01, 2025-01-03, 2025-01-10, 2025-01-15, 2025-01-20, 2025-01-25 (tương tác trong tuần đầu tiên và các tuần tiếp theo), thì A được tính là có retention tại W1, W2, W3, W4, W8, W12.
- User B có tương tác vào các ngày 2025-01-02, 2025-01-05, 2025-01-12 (tương tác trong tuần đầu tiên và tuần thứ hai), thì B được tính là có retention tại W1, W2, nhưng không có retention tại W3, W4, W8, W12.
- User C có tương tác vào ngày 2025-01-03 (tương tác chỉ trong tuần đầu tiên), thì C được tính là có retention tại W1, nhưng không có retention tại W2, W3, W4, W8, W12.
- User D có tương tác vào ngày 2025-01-10 (tương tác chỉ trong tuần thứ hai), thì D không được tính là có retention tại W1, nhưng được tính là có retention tại W2, nhưng không có retention tại W3, W4, W8, W12.
- User E không có tương tác nào sau khi đăng ký, thì E không được tính là có retention tại W1, W2, W3, W4, W8, W12.
- Từ ví dụ trên, retention rate tại W1 cho Cohort Week 2024-12-30 là (3/5)*100% = 60%, retention rate tại W2 là (2/5)*100% = 40%, retention rate tại W3 là (1/5)*100% = 20%, retention rate tại W4, W8, W12 là (1/5)*100% = 20%.
- Nếu Cohort Week 2024-12-30 có 5 users: A, B, C, D, E.
- Retention rate được tính riêng cho từng segment L-ness (L1, L2, L3, L4+) và từng Cohort Week để so sánh retention giữa các segment và giữa các Cohort Week.
- Retention rate được tính theo tuần (W1, W2, W3, W4, W8, W12) để đánh giá sự thay đổi của retention theo thời gian.
- Retention rate được tính dựa trên số user có tương tác ít nhất 1 trong các activity đã định nghĩa, không tính số lần tương tác hay mức độ tương tác của user.
Step by Step Solution
- Xác định cohort_week cho từng user dựa trên ngày đăng ký.
- Tính số ngày hoạt động của từng user trong tuần đầu tiên sau khi đăng ký để phân loại L-ness (L1, L2, L3, L4+).
- Tính số user có tương tác trong từng tuần sau khi đăng ký cho từng cohort_week và từng segment L-ness.
- Tính retention rate cho từng tuần và từng segment L-ness theo công thức: Retention rate = (Số user có tương tác trong tuần / Số user trong cohort_week) * 100%.
- Trực quan hóa kết quả bằng biểu đồ để so sánh retention rate giữa các segment L-ness và giữa các cohort_week bằng Power BI.
- Phân tích kết quả để xác định xu hướng retention theo thời gian và mối quan hệ giữa L-ness và retention.

B1:
Merge Queries FactActivity với DimActivityType để lấy cột Is_Retention_Event
B2: Power Query M Code tại DimUser
let
Source = Excel.Workbook(File.Contents("...\dataset.xlsx"), null, true),
DimUser_Sheet = Source{[Item="DimUser",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(DimUser_Sheet, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"user_id", type text}, {"user_registration_date", type date}, {"cohort_week", type date}, {"age_group", type text}, {"device_type", type text}, {"acquisition_channel", type text}}),
FactWithRegDate = Table.NestedJoin(FactActivity, {"user_id"}, #"Changed Type", {"user_id"}, "User", JoinKind.Inner),
ExpandedRegDate = Table.ExpandTableColumn(FactWithRegDate, "User", {"user_registration_date"}, {"user_registration_date"}),
FilteredFacts = Table.SelectRows(ExpandedRegDate, each
[activity_date] >= [user_registration_date] and
[activity_date] <= Date.AddDays([user_registration_date], 6) and
[Is_Retention_Event] = 1
),
GroupedFacts = Table.Group(FilteredFacts, {"user_id"}, {
{"ActiveDays", each List.NonNullCount(List.Distinct([activity_date])), Int64.Type}
}),
FinalMerge = Table.NestedJoin(#"Changed Type", {"user_id"}, GroupedFacts, {"user_id"}, "Aggregated", JoinKind.LeftOuter),
ExpandedAgg = Table.ExpandTableColumn(FinalMerge, "Aggregated", {"ActiveDays"}, {"ActiveDays"}),
ReplacedNulls = Table.ReplaceValue(ExpandedAgg, null, 0, Replacer.ReplaceValue, {"ActiveDays"}),
AddedLness = Table.AddColumn(ReplacedNulls, "L-ness Segment", each
if [ActiveDays] >= 4 then "L4+"
else if [ActiveDays] = 3 then "L3"
else if [ActiveDays] = 2 then "L2"
else if [ActiveDays] = 1 then "L1"
else "L0", type text
),
#"Changed Type1" = Table.TransformColumnTypes(AddedLness,{{"ActiveDays", Int64.Type}})
in
#"Changed Type1"
B3: Tạo Parameter Table cho Dynamic Retention (DimWeek)
- Tab Home → Enter Data.
- Tạo bảng với 2 cột:
- week_number: 1, 2, 3, 4, 8, 12
- week_name: W1, W2, W3, W4, W8, W12
- Đặt tên bảng là DimWeek
B4
Total Users = DISTINCTCOUNT(DimUser[user_id])
Dynamic Title =
VAR W12_L4 = CALCULATE([Retention Rate], DimWeek[week_name] = "W12", DimUser[L-ness Segment] = "L4+")
VAR W12_L1 = CALCULATE([Retention Rate], DimWeek[week_name] = "W12", DimUser[L-ness Segment] = "L1")
VAR Multiplier = DIVIDE(W12_L4, W12_L1)
RETURN
"Nhóm L4+ có tỷ lệ giữ chân ở W12 đạt " & FORMAT(W12_L4, "0.0%") &
", cao gấp " & FORMAT(Multiplier, "0.0") & " lần so với nhóm L1!"
Retention Rate =
VAR SelectedWeek = SELECTEDVALUE(DimWeek[week_number], 1)
VAR CohortUsers = [Total Users]
VAR RetainedUsers =
CALCULATE(
DISTINCTCOUNT(FactActivity[user_id]),
FILTER(
FactActivity,
VAR UserRegDate = RELATED(DimUser[user_registration_date])
VAR WeekStartDate = UserRegDate + (SelectedWeek - 1) * 7
VAR WeekEndDate = WeekStartDate + 6
VAR IsValidActivity = RELATED(DimActivityType[Is_Retention_Event]) = 1
RETURN
FactActivity[activity_date] >= WeekStartDate &&
FactActivity[activity_date] <= WeekEndDate &&
IsValidActivity
)
)
RETURN
DIVIDE(RetainedUsers, CohortUsers, 0)
Retention Drop-off =
VAR CurrentWeekNum = SELECTEDVALUE(DimWeek[week_number])
VAR CurrentRetention = [Retention Rate]
VAR PreviousWeekNum = CALCULATE(MAX(DimWeek[week_number]), DimWeek[week_number] < CurrentWeekNum, REMOVEFILTERS(DimWeek))
VAR PreviousRetention = CALCULATE([Retention Rate], DimWeek[week_number] = PreviousWeekNum, REMOVEFILTERS(DimWeek))
RETURN
IF(ISBLANK(PreviousWeekNum), BLANK(), CurrentRetention - PreviousRetention)
Giải thích cách đọc biểu đồ Retention Drop-off:
– Nếu cột Drop-off ở tuần W2 là -20%, nghĩa là từ W1 sang W2, đã có 20% user bị mất. Nếu cột Drop-off ở tuần W3 là -10%, nghĩa là từ W2 sang W3, chỉ còn 10% user bị mất nữa. Như vậy, nếu W2 có cột Drop-off rất cao (ví dụ: -30%), đó chính là “điểm chết” cần tập trung cải thiện nhất trong hành trình giữ chân user.
– Nếu cột Drop-off ở tuần W8 là -5%, nghĩa là từ W4 sang W8, chỉ còn 5% user bị mất nữa. Điều này cho thấy sau khi vượt qua được điểm chết ở W2, chúng ta đã làm tốt công việc giữ chân user trong giai đoạn dài hạn (W4 -> W8).
– Nếu cột Drop-off ở tuần W12 là -2%, nghĩa là từ W8 sang W12, chỉ còn 2% user bị mất nữa. Điều này cho thấy chúng ta đã làm rất tốt công việc giữ chân user trong giai đoạn dài hạn (W8 -> W12).
Nhận xét
- Engagement Drives Stickiness: Nhóm user có L-ness Segment cao (L3, L4+) thể hiện sự tương tác mạnh mẽ ngay trong tuần đầu tiên.
- Stickiness Drives Retention: Chính nhóm L3, L4+ này có đường cong Retention Rate (W1 → W12) nằm cao nhất và ít bị rớt (drop-off) nhất so với nhóm L1, L2.
- Actionable Insight:
- Cần tập trung nguồn lực Marketing và Product vào 7 ngày đầu tiên của user mới (Onboarding, Push Notification, Khuyến mãi nạp tiền/thanh toán) để đẩy họ từ L1 lên L3, L4+.
- Khi user đạt được L4+, tỷ lệ giữ chân dài hạn (W8, W12) sẽ tự động được đảm bảo.
Phần giải thích chi tiết hơn sẽ có trong Khóa Học Power BI Thực Chiến Qua 100+ Challenges & Cases. Nếu bạn muốn đăng ký khóa học này để thực chiến nhiều Challenges thực tế, thì Inbox mình Tại Đây nhé.

Leave a Comment