SQL/MySQL

MySQL DAU, WAU, Stickiness 계산 방법

진리뷰 2024. 4. 12. 09:00
반응형

 

 

 

MySQL-DAU-WAU-Stickiness-계산-방법-썸네일
MySQL DAU, WAU, Stickiness

 

 

 

이 글은 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

 

반응형
top