Cohort Analysis: Phân Tích Hành Vi Theo Nhóm để Hiểu Customer Journey
TL;DR
Cohort Analysis là phương pháp phân tích hành vi của các nhóm người dùng có chung đặc điểm (ví dụ: cùng tháng đăng ký) theo thời gian. Đây là công cụ quan trọng để:
- Đo lường Retention: Bao nhiêu % user quay lại sau 1 tuần, 1 tháng?
- Hiểu Product-Market Fit: Sản phẩm có giữ chân được user không?
- Tối ưu Customer Journey: Tại sao user rời bỏ sản phẩm? Tại đâu?
- Đánh giá tác động của Features: Feature mới có cải thiện retention không?
Ví dụ thực tế: Netflix phát hiện user đăng ký trong Q4 (mùa lễ) có retention thấp hơn 15% so với Q2 → Tối ưu onboarding cho cohort mùa lễ → Tăng retention 22%.
3 loại Cohort phổ biến:
- Time-based Cohorts: Nhóm theo thời gian (tháng đăng ký, tuần mua hàng đầu tiên)
- Behavior-based Cohorts: Nhóm theo hành vi (đã dùng feature X, đã refer bạn bè)
- Acquisition Channel Cohorts: Nhóm theo nguồn (Google Ads, Organic, Referral)
Cohort Analysis Là Gì?
Định nghĩa
Cohort Analysis là kỹ thuật phân tích data chia người dùng thành các nhóm (cohorts) có chung đặc điểm hoặc trải nghiệm trong cùng khoảng thời gian, sau đó theo dõi hành vi của từng cohort theo thời gian.
Tại sao Cohort Analysis quan trọng?
Vấn đề với Overall Metrics:
Tháng 1: 1,000 user, Retention = 40%
Tháng 2: 1,500 user, Retention = 40%
Tháng 3: 2,000 user, Retention = 40%
→ Trông có vẻ ổn định! Nhưng...
Thực tế khi phân tích theo Cohort:
| Cohort | Month 0 | Month 1 | Month 2 | Month 3 |
|---|---|---|---|---|
| Jan 2025 | 100% | 50% | 35% | 25% |
| Feb 2025 | 100% | 45% | 30% | |
| Mar 2025 | 100% | 40% |
→ Retention đang giảm dần theo cohort! Overall metric che giấu vấn đề.
3 Lợi ích chính
1. Phát hiện xu hướng ẩn
- Overall metric có thể tăng nhờ user mới, nhưng retention thực sự đang giảm
- Cohort analysis lộ ra vấn đề sớm hơn
2. Đo lường tác động của thay đổi
- Release feature mới vào tháng 3 → So sánh cohort Mar vs Feb vs Jan
- Thay đổi pricing → So sánh retention trước/sau
3. Hiểu customer lifecycle
- Khi nào user thường churn? (Ngày 7? Tháng 3?)
- Retention tốt nhất ở giai đoạn nào?
Các Loại Cohort Phổ Biến
1. Time-based Cohorts (Phổ biến nhất)
Nhóm user theo thời gian họ thực hiện hành động đầu tiên.
Ví dụ:
- Acquisition Cohort: Tháng đăng ký (Jan 2025, Feb 2025, ...)
- Purchase Cohort: Tháng mua hàng đầu tiên
- Activation Cohort: Tuần hoàn thành onboarding
Câu hỏi trả lời:
- User đăng ký tháng nào có retention tốt nhất?
- Có mùa vụ nào ảnh hưởng đến chất lượng user không?
2. Behavior-based Cohorts
Nhóm user theo hành vi cụ thể.
Ví dụ:
- User đã dùng feature "Export to PDF"
- User đã invite >= 3 teammates
- User đã connect integration (Slack, Google Sheets, ...)
- User đã complete tutorial
Câu hỏi trả lời:
- Feature nào giúp tăng retention?
- Hành vi nào là leading indicator của retention tốt?
3. Acquisition Channel Cohorts
Nhóm user theo nguồn traffic.
Ví dụ:
- Google Ads
- Facebook Ads
- Organic Search
- Referral
- Direct
Câu hỏi trả lời:
- Kênh nào mang lại user chất lượng tốt nhất (high retention)?
- Kênh nào có LTV cao nhất?
Retention Cohort Analysis - Phân Tích Chi Tiết
Cách đọc Retention Cohort Table
Ví dụ điển hình:
| Cohort | Month 0 | Month 1 | Month 2 | Month 3 | Month 4 |
|---|---|---|---|---|---|
| Jan 2025 | 100% (500) | 45% (225) | 32% (160) | 28% (140) | 25% (125) |
| Feb 2025 | 100% (800) | 52% (416) | 38% (304) | 33% (264) | |
| Mar 2025 | 100% (1200) | 58% (696) | 42% (504) | ||
| Apr 2025 | 100% (1500) | 61% (915) |
Cách đọc:
- Cột "Month 0": Luôn là 100% (tất cả user trong cohort)
- Cột "Month 1": % user quay lại sau 1 tháng
- Số trong ngoặc: Số lượng user thực tế
- Ô trống: Chưa đủ dữ liệu
Phân tích:
- ✅ Xu hướng tích cực: Cohort mới hơn có retention tốt hơn (Jan 45% → Apr 61%)
- ⚠️ Churn pattern: Churn mạnh nhất ở Month 0→1 (giảm ~40-50%)
- 📊 Stabilization: Retention ổn định hơn sau Month 3 (28% → 25%)
SQL để tính Retention Cohort
WITH user_cohorts AS (
-- Xác định cohort của mỗi user (tháng đăng ký)
SELECT
user_id,
DATE_TRUNC('month', created_at) AS cohort_month
FROM users
),
user_activities AS (
-- Tất cả activities của user
SELECT
user_id,
DATE_TRUNC('month', activity_date) AS activity_month
FROM user_events
WHERE event_type IN ('login', 'purchase', 'engagement')
GROUP BY user_id, activity_month
),
cohort_size AS (
-- Tổng số user trong mỗi cohort
SELECT
cohort_month,
COUNT(DISTINCT user_id) AS total_users
FROM user_cohorts
GROUP BY cohort_month
),
cohort_retention AS (
-- Tính số user active trong mỗi tháng sau cohort
SELECT
uc.cohort_month,
ua.activity_month,
-- Số tháng kể từ cohort
DATEDIFF('month', uc.cohort_month, ua.activity_month) AS months_since_cohort,
COUNT(DISTINCT uc.user_id) AS active_users
FROM user_cohorts uc
JOIN user_activities ua ON uc.user_id = ua.user_id
GROUP BY uc.cohort_month, ua.activity_month
)
-- Kết quả cuối cùng
SELECT
cr.cohort_month,
cr.months_since_cohort,
cs.total_users AS cohort_size,
cr.active_users,
ROUND(100.0 * cr.active_users / cs.total_users, 2) AS retention_pct
FROM cohort_retention cr
JOIN cohort_size cs ON cr.cohort_month = cs.cohort_month
ORDER BY cr.cohort_month, cr.months_since_cohort;
Output:
cohort_month | months_since | cohort_size | active_users | retention_pct
-------------|--------------|-------------|--------------|---------------
2025-01-01 | 0 | 500 | 500 | 100.00
2025-01-01 | 1 | 500 | 225 | 45.00
2025-01-01 | 2 | 500 | 160 | 32.00
2025-02-01 | 0 | 800 | 800 | 100.00
2025-02-01 | 1 | 800 | 416 | 52.00
...
Python để visualize Cohort Table
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# Giả sử đã có data từ SQL query trên
df = pd.read_sql(cohort_query, conn)
# Pivot để tạo cohort table
cohort_table = df.pivot_table(
index='cohort_month',
columns='months_since_cohort',
values='retention_pct'
)
# Heatmap visualization
plt.figure(figsize=(12, 8))
sns.heatmap(
cohort_table,
annot=True, # Hiển thị số
fmt='.0f', # Format: số nguyên
cmap='RdYlGn', # Red-Yellow-Green
vmin=0,
vmax=100,
cbar_kws={'label': 'Retention %'}
)
plt.title('User Retention Cohort Analysis', fontsize=16)
plt.xlabel('Months Since First Use')
plt.ylabel('Cohort (Signup Month)')
plt.tight_layout()
plt.savefig('cohort_retention_heatmap.png', dpi=300)
Kết quả: Heatmap với màu xanh (retention cao) và đỏ (retention thấp).
Revenue Cohort Analysis
Ngoài retention, bạn có thể phân tích Revenue per Cohort để hiểu LTV.
SQL cho Revenue Cohort
WITH user_cohorts AS (
SELECT
user_id,
DATE_TRUNC('month', created_at) AS cohort_month
FROM users
),
cohort_revenue AS (
SELECT
uc.cohort_month,
DATE_TRUNC('month', o.order_date) AS revenue_month,
DATEDIFF('month', uc.cohort_month, o.order_date) AS months_since_cohort,
SUM(o.amount) AS revenue
FROM user_cohorts uc
JOIN orders o ON uc.user_id = o.user_id
GROUP BY uc.cohort_month, revenue_month
),
cohort_size AS (
SELECT
cohort_month,
COUNT(DISTINCT user_id) AS total_users
FROM user_cohorts
GROUP BY cohort_month
)
SELECT
cr.cohort_month,
cr.months_since_cohort,
cs.total_users,
cr.revenue AS total_revenue,
ROUND(cr.revenue / cs.total_users, 2) AS revenue_per_user
FROM cohort_revenue cr
JOIN cohort_size cs ON cr.cohort_month = cs.cohort_month
ORDER BY cr.cohort_month, cr.months_since_cohort;
Output:
cohort_month | months_since | total_users | total_revenue | revenue_per_user
-------------|--------------|-------------|---------------|------------------
2025-01-01 | 0 | 500 | $25,000 | $50.00
2025-01-01 | 1 | 500 | $18,000 | $36.00
2025-01-01 | 2 | 500 | $15,000 | $30.00
2025-02-01 | 0 | 800 | $48,000 | $60.00
2025-02-01 | 1 | 800 | $32,000 | $40.00
...
Phân tích:
- Feb cohort có revenue/user cao hơn Jan cohort
- Revenue giảm dần theo tháng (tự nhiên vì một số user churn)
- Dùng để tính LTV by Cohort
Case Study: Tối Ưu Retention với Cohort Analysis
Case Study 1: Duolingo - Phát hiện "Critical Day"
Context:
- Duolingo (app học ngôn ngữ) muốn cải thiện retention
- Phân tích cohort để tìm "điểm rơi" của user
Phân tích:
| Cohort | Day 0 | Day 1 | Day 2 | Day 7 | Day 14 | Day 30 |
|---|---|---|---|---|---|---|
| Week 1 | 100% | 68% | 52% | 35% | 28% | 18% |
| Week 2 | 100% | 70% | 55% | 38% | 30% | 20% |
Phát hiện:
- Day 1 → Day 2: Churn mạnh nhất (~15-18%)
- User không quay lại Day 2 có 80% khả năng churn vĩnh viễn
Hành động:
- Gửi notification reminder vào chiều Day 1
- Gamification: Streak bonus (liên tục 2 ngày → +10 XP)
- Personalized lesson cho Day 2 (dễ hơn, ngắn hơn)
Kết quả:
- Day 1→2 retention tăng từ 68% → 78% (+10pp)
- Day 30 retention tăng từ 18% → 25% (+7pp)
- LTV tăng ~30%
Case Study 2: E-commerce Việt Nam - So sánh Acquisition Channel
Context:
- Startup e-commerce Việt Nam chạy ads trên Google, Facebook, TikTok
- Muốn biết kênh nào mang lại user chất lượng tốt nhất
Phân tích:
Google Ads Cohort:
| Cohort | Week 0 | Week 1 | Week 2 | Week 4 | Week 8 |
|---|---|---|---|---|---|
| Jan | 100% (200) | 35% | 22% | 18% | 15% |
Facebook Ads Cohort:
| Cohort | Week 0 | Week 1 | Week 2 | Week 4 | Week 8 |
|---|---|---|---|---|---|
| Jan | 100% (500) | 28% | 18% | 12% | 8% |
TikTok Ads Cohort:
| Cohort | Week 0 | Week 1 | Week 2 | Week 4 | Week 8 |
|---|---|---|---|---|---|
| Jan | 100% (300) | 42% | 30% | 25% | 22% |
Phân tích:
- TikTok: Retention tốt nhất (22% ở Week 8)
- Google: Retention trung bình (15%)
- Facebook: Retention thấp nhất (8%)
Revenue per User:
- TikTok: $45 LTV
- Google: $38 LTV
- Facebook: $22 LTV
Hành động:
- Tăng ngân sách cho TikTok Ads (+50%)
- Tối ưu lại targeting Facebook (loại bỏ low-intent audience)
- A/B test landing page cho Google Ads
Kết quả:
- CAC giảm 18%
- LTV/CAC tăng từ 2.1x → 3.2x
- Revenue tăng 35% trong 3 tháng
Các Metrics Quan Trọng Trong Cohort Analysis
1. Retention Rate
Định nghĩa: % user còn active sau X thời gian
Công thức:
Retention Rate = (Active Users in Period X / Total Users in Cohort) × 100
Benchmark:
- SaaS B2B: 80-90% (Month 1), 70-80% (Month 3)
- Consumer App: 30-40% (Week 1), 15-25% (Month 1)
- E-commerce: 20-30% (Month 1), 10-15% (Month 3)
2. Churn Rate
Định nghĩa: % user rời bỏ sản phẩm
Công thức:
Churn Rate = 100% - Retention Rate
Hoặc tính chính xác hơn:
SELECT
cohort_month,
months_since_cohort,
(1 - active_users_this_month / active_users_last_month) * 100 AS churn_rate
FROM cohort_retention;
3. Customer Lifetime (Average Lifespan)
Định nghĩa: Trung bình user sử dụng sản phẩm bao lâu?
Cách tính đơn giản:
Average Lifetime = 1 / Churn Rate
Ví dụ: Churn rate = 5%/tháng → Average lifetime = 20 tháng
4. Cumulative Retention
Định nghĩa: % user ever quay lại (không nhất thiết liên tục)
SQL:
WITH user_active_months AS (
SELECT
uc.cohort_month,
uc.user_id,
COUNT(DISTINCT ua.activity_month) AS active_months
FROM user_cohorts uc
LEFT JOIN user_activities ua
ON uc.user_id = ua.user_id
AND ua.activity_month > uc.cohort_month
GROUP BY uc.cohort_month, uc.user_id
)
SELECT
cohort_month,
COUNT(CASE WHEN active_months >= 1 THEN 1 END) * 100.0 / COUNT(*) AS ever_returned_pct
FROM user_active_months
GROUP BY cohort_month;
Best Practices khi làm Cohort Analysis
1. Chọn Cohort Size phù hợp
Quá nhỏ: Noise, khó tìm pattern
Daily Cohort (Jan 1, Jan 2, Jan 3, ...) → Mỗi cohort chỉ 10-20 user
Quá lớn: Mất đi chi tiết
Yearly Cohort (2024, 2025, ...) → Không đủ granular
Khuyến nghị:
- SaaS/App: Weekly hoặc Monthly cohorts
- E-commerce: Monthly cohorts
- High-traffic site: Weekly hoặc Daily (nếu đủ sample size)
Rule of thumb: Mỗi cohort nên có ít nhất 100-200 users để kết quả có ý nghĩa thống kê.
2. Định nghĩa "Active" rõ ràng
Ví dụ không rõ ràng:
- "User active = user login"
- → Có thể user chỉ mở app lên rồi tắt
Ví dụ tốt hơn:
- Spotify: Active = nghe ít nhất 1 bài
- Notion: Active = tạo hoặc edit ít nhất 1 page
- E-commerce: Active = xem ít nhất 1 product detail page
3. So sánh Like-for-Like
Sai:
So sánh Jan 2024 cohort (có đủ 12 tháng data)
với Dec 2024 cohort (chỉ có 1 tháng data)
Đúng:
So sánh Month 1 retention của tất cả cohorts:
- Jan 2024 Month 1: 45%
- Feb 2024 Month 1: 48%
- Mar 2024 Month 1: 52%
→ Xu hướng tăng!
4. Kết hợp với Qualitative Research
Cohort Analysis cho biết "Cái gì đang xảy ra", nhưng không cho biết "Tại sao".
Ví dụ:
- Phát hiện: Feb cohort có retention thấp bất thường
- → Làm user interview với Feb cohort users
- → Phát hiện: Server downtime 2 ngày đầu tháng Feb
Tools để làm Cohort Analysis
1. SQL + BI Tools (Flexible nhất)
Tools:
- SQL (BigQuery, Snowflake, Redshift)
- BI: Looker, Tableau, Metabase
Ưu điểm:
- Fully customizable
- Có thể tạo cohort phức tạp
- Cost-effective
Nhược điểm:
- Cần technical skills
- Setup time lâu
2. Product Analytics Tools (Dễ dùng)
Tools:
- Amplitude: Cohort analysis built-in, rất mạnh
- Mixpanel: Retention reports tự động
- Heap: Auto-capture events, cohort analysis đơn giản
- PostHog: Open-source, self-hosted
Ưu điểm:
- No-code interface
- Pre-built templates
- Real-time updates
Nhược điểm:
- Đắt (pricing theo MAU)
- Giới hạn customization
3. Google Analytics 4
Setup:
- Explore → Template Gallery → Cohort exploration
- Chọn cohort dimension (First user campaign, First user source, ...)
- Chọn return metric (Daily active users, Sessions, ...)
Ưu điểm:
- Free
- Dễ setup
Nhược điểm:
- Giới hạn customization
- Chỉ time-based cohorts
Common Pitfalls và Cách Tránh
Pitfall 1: Survivorship Bias
Vấn đề:
Chỉ phân tích cohort user còn active
→ Bỏ qua user đã churn
→ Kết luận sai
Giải pháp: Luôn bao gồm tất cả users trong cohort, kể cả churned users.
Pitfall 2: Seasonality không được tính đến
Ví dụ:
- Dec cohort (mùa lễ, nhiều gift subscriptions) có retention thấp hơn
- Không phải vì product tệ, mà vì user không tự chọn
Giải pháp:
- So sánh cohort cùng tháng khác năm (Dec 2024 vs Dec 2023)
- Phân tích theo acquisition type (Gift vs Self-purchase)
Pitfall 3: Quá tập trung vào Acquisition, bỏ qua Activation
Vấn đề:
Cohort Jan có 1,000 users signup
Nhưng chỉ 300 users complete onboarding
→ Retention thấp không phải vì product mà vì onboarding kém
Giải pháp: Tạo Activation Cohort (users hoàn thành onboarding) thay vì chỉ Acquisition Cohort.
Cohort Analysis cho Startups Việt Nam
Thách thức đặc thù
1. Sample size nhỏ
- Startup mới: 100-500 users/tháng
- Cohort weekly không đủ sample size
- → Dùng monthly cohort hoặc quarterly cohort
2. High seasonality
- Tết Nguyên Đán: Activity giảm mạnh
- Lương cuối tháng: Activity tăng (fintech, e-commerce)
- → Cần adjust khi so sánh cohorts
3. Limited tooling budget
- Amplitude/Mixpanel đắt ($2,000+/tháng)
- → Dùng open-source: PostHog, Metabase + SQL
Khuyến nghị cho Startups
Giai đoạn Pre-PMF (0-1,000 users):
- Focus: Week 1 retention
- Cohort size: Monthly hoặc All-time cohort
- Tools: Google Sheets + manual SQL
- Goal: Tìm được retention > 30% (Week 1)
Giai đoạn Growth (1,000-10,000 users):
- Focus: Month 1 & Month 3 retention
- Cohort size: Weekly
- Tools: Metabase hoặc PostHog
- Goal: Retention curve flatten (ổn định sau 3 tháng)
Giai đoạn Scale (10,000+ users):
- Focus: LTV cohort analysis
- Cohort size: Weekly, phân tích chi tiết theo channel/feature
- Tools: Amplitude hoặc Looker
- Goal: LTV/CAC > 3x
Kết Luận
Cohort Analysis là công cụ không thể thiếu để hiểu sâu về hành vi người dùng và tối ưu sản phẩm. Thay vì chỉ nhìn overall metrics (có thể misleading), bạn cần:
Key Takeaways
- Chia user thành cohorts có chung đặc điểm (time, behavior, channel)
- Theo dõi retention theo thời gian để phát hiện xu hướng
- So sánh cohorts để đánh giá tác động của features/campaigns
- Kết hợp với revenue analysis để tính LTV
- Chọn cohort size và definition phù hợp với giai đoạn công ty
Next Steps
Sau khi master Cohort Analysis, bạn nên học:
- Attribution Modeling: Feature/channel nào contribute vào conversion?
- A/B Testing: Test các hypothesis từ cohort analysis
- Customer Segmentation: Nhóm users theo behavior patterns
Carptech - Giải Pháp Cohort Analysis cho Doanh Nghiệp Việt Nam
Tại Carptech, chúng tôi giúp doanh nghiệp Việt Nam xây dựng hệ thống analytics với:
Dịch vụ của chúng tôi
- Data Platform Setup: Modern data stack với BigQuery, dbt, Looker
- Cohort Analysis Implementation: SQL templates, BI dashboards tự động
- Custom Metrics & Dashboards: Tailored cho business model của bạn
- Training & Consulting: Đào tạo team làm việc với cohort data
Case Studies
- E-commerce: Tăng LTV 45% nhờ phân tích cohort theo channel
- SaaS: Giảm churn 30% bằng cách tối ưu onboarding cho cohort churn cao
- Fintech: Tối ưu cross-sell với behavior-based cohort analysis
Liên hệ: https://carptech.vn
Bài viết được viết bởi Carptech Team - Chuyên gia về Data Platform & Analytics tại Việt Nam.




