
이 글은 DAU, WAU, Stickiness 간단 개념 및 MySQL 버전의 계산 방법과 예시 담고 있습니다.
DAU, WAU, Stickiness
- DAU
매일 활성 사용자(Daily Active User)
- WAU
주간 활성 사용자(Weekly Active User)
- Stickiness
사용자 고착도(애정도 혹은 충성도), 재방문율 측정 지표. (DAU / MAU)*100 혹은 (DAU / WAU)*100로 계산
MySQL DAU, WAU, Stickiness 계산 방법
아래의 order_info 테이블로 계산해보자.
- order_dt: 주문일
- customer_id: 주문자 아이디
DAU 계산 방법
DAU는 00:00:00 ~ 23:59:59 약 24시간 기준, "하루에 몇 명의 사용자가 활동했는가?"를 계산하면 된다.
하루 동안 고객의 사용 횟수가 아닌, 사용자 수를 계산해야 한다.
order_info |
|
order_dt | customer_id |
2024-03-01 | CU19030189A |
2024-03-01 | CU20051822C |
2024-03-02 | CU17080411D |
2024-03-03 | CU23010187C |
2024-03-04 | CU22112004A |
2024-03-05 | CU21060107B |
2024-03-06 | CU19020134B |
2024-03-07 | CU24010137A |
2024-03-07 | CU24010137A |
2024-03-07처럼, 고객 CU24010137A 가 여러 번 주문했더라도 1로 계산한다.
반면, 2024-03-01은 고객 CU19030189A, CU20051822C 2명이 사용했기에 2로 계산한다.
따라서 COUNT 사용 시, DISTINCT를 입력해야 한다.
# DAU
SELECT order_dt
, COUNT(DISTINCT customder_id) AS DAU
FROM order_info
GROUP BY order_dt
ORDER BY order_dt ASC;
order_dt | DAU |
2024-03-01 | 2 |
2024-03-02 | 1 |
2024-03-03 | 1 |
2024-03-04 | 1 |
2024-03-05 | 1 |
2024-03-06 | 1 |
2024-03-07 | 1 |
WAU 계산 방법
이번에는 위에서 사용한 예시 테이블을 활용해서 WAU를 계산해 보자.
WAU는 "일주일 동안 몇 명의 사용자가 활동했는가?"를 계산하면 된다.
- JOIN & DATE_SUB
1주일의 시작일과 마지막일 중 마지막 일을 기준으로, 시작일부터 누적된 사용자 수를 계산해야 한다.
따라서 셀프 조인과 DATE_SUB을 사용한다.
*메인테이블인 order_info를 A, 셀프 조인하는 order_info를 B라고 지칭하자.
아래 A의 2024-03-07 WAU는 2024-03-01 ~ 2024-03-07까지 누적된 사용자 데이터여야 한다.
이때 노란색 하이라이트를 친 문장이 바로 A에 셀프 조인한 B의 역할이다.
다시 말해, A의 2024-03-07 = B의 2024-03-07(2024-03-01 ~ 2024-03-07)인 셈이다.
order_info(=A) |
order_info(=B) | ||
order_dt | customer_id | order_dt | customer_id |
2024-03-01 | CU19030189A | 2024-03-07 (= 2024-03-01 ~ 2024-03-07) |
CU19030189A |
2024-03-01 | CU20051822C | CU20051822C | |
2024-03-02 | CU17080411D | CU17080411D | |
2024-03-03 | CU23010187C | CU23010187C | |
2024-03-04 | CU22112004A | CU22112004A | |
2024-03-05 | CU21060107B | CU21060107B | |
2024-03-06 | CU19020134B | CU19020134B | |
2024-03-07 | CU24010137A | CU24010137A | |
2024-03-07 | CU24010137A | CU24010137A |
자, B의 2024-03-07은 03-01 ~ 03-07까지 데이터를 담고 있다.
이때 파란색 하이라이트인 03-01은 03-07에서 6일을 뺀 값이다.
따라서 이 부분은 DATE_SUB으로 표현한다.
# WAU
SELECT A.order_dt
, COUNT(DISTINCT B.customer_id) AS DAU
FROM order_info AS A
LEFT JOIN order_info AS B
ON B.order_dt BETWEEN DATE_SUB(A.order_dt, INTERVAL 6 day) AND A.order_dt
WHERE A.order_dt = '2024-03-07'
GROUP BY A.order_dt
ORDER BY A.order_dt ASC;
03-01에는 두 명의 사용자가 한 번씩 주문, 03-02 ~ 03-6에는 모두 다른 사용자가 한 번씩 주문, 03-07에는 동일인이 두 번 주문했다. 따라서 2024-03-07의 WAU는 2+1+1+1+1+1+1 = 8이다.
order_dt | WAU |
2024-03-07 | 8 |
Stickiness 계산 방법
Stickiness는 DAU / WAU 혹은 DAU/ MAU인데, 이 글에서는 WAU를 분모로 계산한다.
2024-03-07의 DAU는 1이었고, WAU는 8이었다. 따라서 Stickiness는 1/8 = 0.125이다.
*조금 더 보기 편하게 100을 곱하면 12.5%가 되겠다.
# Stickiness
SELECT A.order_dt
# DAU / WAU
, (COUNT(DISTINCT A.customer_id) / COUNT(DISTINCT B.customer_id)) AS Stickiness
FROM order_info AS A
LEFT JOIN order_info AS B
ON B.order_dt BETWEEN DATE_SUB(A.order_dt, INTERVAL 6 DAY) AND A.order_dt
WHERE A.order_dt = '2024-03-07'
GROUP BY A.order_dt
ORDER BY A.order_dt ASC;
order_dt | Stickiness |
2024-03-07 | 0.125 |
'SQL > MySQL' 카테고리의 다른 글
MySQL 백틱 Back-ticks(`) 기본 정리 (0) | 2024.04.18 |
---|---|
윈도우 버전 VScode와 SQL 파일 생성, 실행 방법 (0) | 2024.03.21 |
MySQL 윈도우 "mysql은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다." 쉬운 해결 방법 (0) | 2024.03.20 |
MySQL과 AWS RDS 가입부터 접속까지 기본 정리(접속편) (0) | 2024.03.18 |
MySQL 유저(User) 관리 기본 총정리 (2) | 2024.03.15 |