DHDataHọc
TheoryLesson 2/85 min read+10 XP

DAU, WAU, MAU

Bạn sẽ học được

  • Định nghĩa đúng DAU, WAU, MAU.
  • Vì sao DAU/MAU là chỉ số quan trọng.
  • Ảnh hưởng của định nghĩa "hoạt động" lên con số.
  • Đọc xu hướng người dùng có mùa vụ.
  • Tránh các lỗi so sánh phổ biến.

Khái niệm cốt lõi

Các chỉ số người dùng hoạt động:

Chỉ sốĐịnh nghĩaTrả lời
DAUSố người dùng khác nhau hoạt động trong một ngàyHôm nay có bao nhiêu người?
WAUSố người dùng khác nhau trong 7 ngàyTuần này có bao nhiêu người?
MAUSố người dùng khác nhau trong 30 ngàyTháng này có bao nhiêu người?
DAU/MAUDAU trung bình / MAUNgười dùng quay lại thường xuyên không?

Từ khóa là khác nhau. Cộng số lần hoạt động cho ra "lượt", không phải "người". Trộn hai khái niệm này là lỗi phổ biến nhất khi báo cáo.

Tính DAU

code
SELECT
  date_trunc('day', occurred_at)::date AS ngay,
  COUNT(DISTINCT user_id) AS dau
FROM events
WHERE occurred_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1;

COUNT(DISTINCT user_id) là bắt buộc. COUNT(*) đếm sự kiện, không đếm người.

Một người mở 50 lần trong ngày vẫn chỉ là 1 DAU. Đây là hành vi đúng: DAU đo độ phủ, không đo cường độ.

Định nghĩa "hoạt động"

DAU phụ thuộc hoàn toàn vào việc bạn coi sự kiện nào là hoạt động:

  • Mọi sự kiện (kể cả app_opened do hệ thống tự bắn).
  • Chỉ sự kiện có chủ đích (product_viewed, search_performed).
  • Chỉ sự kiện giá trị (order_created).

Ba định nghĩa cho ba con số rất khác nhau. Định nghĩa rộng nhất thường bị thổi phồng bởi lần mở ứng dụng tự động. Chốt định nghĩa, ghi vào tài liệu chỉ số, và giữ nguyên khi so sánh theo thời gian.

Ví dụ định nghĩa có kỷ luật:

code
WITH hoat_dong AS (
  SELECT DISTINCT user_id, date_trunc('day', occurred_at)::date AS ngay
  FROM events
  WHERE event_name IN (
    'product_viewed', 'search_performed', 'cart_item_added',
    'checkout_started', 'checkout_completed'
  )
)
SELECT ngay, COUNT(*) AS dau
FROM hoat_dong
GROUP BY 1
ORDER BY 1;

WAU, MAU và cửa sổ trượt

WAU tính trên cửa sổ 7 ngày trượt, không phải tuần lịch:

code
SELECT COUNT(DISTINCT user_id) AS wau
FROM events
WHERE occurred_at >= now() - INTERVAL '7 days';

Khác biệt quan trọng:

  • Cửa sổ trượt: mỗi ngày có một con số WAU, so sánh được giữa các ngày.
  • Tuần lịch: chỉ có một con số mỗi tuần, nhưng dễ hiểu với báo cáo điều hành.

Dashboard nên ghi rõ dùng loại nào. Trộn hai loại trong cùng biểu đồ tạo ra bậc thang giả.

DAU/MAU

Tỷ lệ này đo mức độ thường xuyên quay lại:

code
DAU/MAU = DAU trung bình trong 30 ngày / MAU

Cách đọc:

Giá trịÝ nghĩa gần đúng
Dưới 10%Dùng thưa, vài lần một tháng
10–20%Dùng hằng tuần
20–50%Dùng vài lần mỗi tuần
Trên 50%Dùng hằng ngày

Ngưỡng phụ thuộc loại sản phẩm: mạng xã hội có thể trên 50%; ứng dụng mua nhà có thể dưới 5% mà vẫn khoẻ. So sánh với chính mình theo thời gian, không so với sản phẩm khác loại.

Mùa vụ và ngày đặc biệt

DAU biến động theo thứ trong tuần. So sánh thứ Hai với Chủ nhật sẽ thấy "giảm 30%" dù không có gì xấu.

Cách đọc đúng:

  • So cùng thứ trong tuần.
  • Hoặc dùng trung bình động 7 ngày.
  • Đánh dấu ngày lễ, khuyến mãi trên biểu đồ.
code
SELECT
  ngay,
  dau,
  AVG(dau) OVER (ORDER BY ngay ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS dau_tb7
FROM (
  SELECT date_trunc('day', occurred_at)::date AS ngay,
         COUNT(DISTINCT user_id) AS dau
  FROM events
  GROUP BY 1
) t
ORDER BY ngay;

Trung bình động 7 ngày làm mượt biến động thứ trong tuần và cho thấy xu hướng thật.

Lỗi so sánh

Cách so sánhVấn đềCách đúng
Hôm nay với hôm quaKhác thứ trong tuầnSo cùng thứ tuần trước
Tuần này với tuần trướcTuần lễ khác nhauSo cùng số ngày đã qua
Tháng 30 ngày với tháng 31 ngàyKhác độ dàiSo trung bình ngày hoặc cùng số ngày
MAU tháng này với MAU tháng trước giữa thángTháng chưa kết thúcSo cùng kỳ hoặc chờ hết tháng

Tháng chưa kết thúc là cái bẫy lớn: ngày 10 so MAU tháng này với MAU tháng trước luôn giảm, vì tháng này mới có 10 ngày dữ liệu.

Thực hành

  1. Viết truy vấn DAU 30 ngày.
  2. Viết WAU cửa sổ trượt cho hôm nay.
  3. Chọn định nghĩa "hoạt động" cho một sản phẩm bạn biết và giải thích.
  4. Tính DAU/MAU gần đúng từ hai con số.
  5. Thêm trung bình động 7 ngày vào truy vấn DAU.

Lỗi thường gặp

Triệu chứngNguyên nhânCách sửa
DAU cao bất thườngĐếm sự kiện, không đếm ngườiCOUNT(DISTINCT user_id)
DAU tăng vọt không thậtSự kiện hệ thống tự bắnChốt danh sách sự kiện hợp lệ
Giảm mỗi Chủ nhậtMùa vụ tuầnSo cùng thứ, dùng TB 7 ngày
MAU cuối tháng luôn caoCửa sổ chưa đủSo cùng kỳ hoặc chờ hết tháng
Số liệu đổi khi đổi định nghĩaKhông ghi tài liệuGhi định nghĩa vào metric spec
WAU lệch giữa hai báo cáoTrượt vs tuần lịchChốt một cách tính

Tóm tắt

  • DAU/WAU/MAU đếm người khác nhau, không đếm lượt.
  • Định nghĩa "hoạt động" quyết định con số; phải chốt và ghi lại.
  • WAU/MAU cửa sổ trượt khác tuần/tháng lịch.
  • DAU/MAU đo mức quay lại; ngưỡng phụ thuộc loại sản phẩm.
  • So sánh cùng thứ, cùng số ngày, và dùng trung bình động để loại mùa vụ.

Use ← → to move between lessons