본문 바로가기
프로그래밍/SQL 함수 쌓기

DAU 집계하기 / COUNT 활용 (distinct)

by 멀티코린 2020. 9. 6.

DAU 란?

Daily Actuve Users의 약자로 일일 활성 유저를 의미한다. DAU는 일반적으로 대부분의 플랫폼회사에서 중요한 핵심 지표로 여기는 지표 중에 하나다. DAU의 측정 기준은 각 회사마다 세운 조건에 따라 달라질 수 있으며 집계 방식은 가장 간단한 방식으로 아래와 같이 집계할 수 있다.

집계를 위한 정의를 자세히 적어보자면 다음과 같다.
DAU : 하루동안 어플리케이션에 접속한 유저의 ID를 중복을 제거하고 집계한 수.

* 플랫폼회사라 함은 쇼핑, 게임, SNS 등 우리의 휴대폰에 설치된 앱을 개발 및 서비스하는 회사를 의미하는 단어로 사용하였습니다.

 


* table : user_daily
- 일별 접속 기록 테이블
* sample

dt user_id
2020-07-01 87643
2020-07-02 87643
2020-07-01 87589
2020-07-30 28374
2020-08-05 28374

 

7, 8월의 일별 DAU 집계하기

count 함수는 데이터 분석가라면 가장 많이 쓰는 함수 중에 하나이며 절대 빠질 수 없는 중요한 함수이다. 
DAU 집계를 위해서는 '중복 제거' 이 부분을 가장 주의해야한다.
실제 현업에서 사용되는 데이터는 어플리케이션을 실행할 때 마다 로그가 기록되는 테이블로 raw_data가 존재하고 그 이외의 데이터들은 모두 재가공을 통해서 나타나는 것으로 하루 동안 접속한 유니크한 유저 수를 count 하고싶다면 count함수 내에 distinct를 잊어서는 절대 안된다.

나도 아주 종종 정신없을 때 distinct 를 까먹고 count(user_id)만 입력해서 수치가 이상하다고 하루종일 원인을 찾아다녔었던 경험이 있었다. 원인은 알고보니 당연히 넣었을거라고 생각한 distinct를 넣지 않았음을 확인하고나면 어이없으면서도 중요성을 새삼깨닫는다.

Select dt, count(distinct user_id) as DAU
from user_daily
where month in (7,8)   ---7,8월 데이터만
group by dt
order by dt
limit 500;

DAU를 집계하는 방식은 굉장히 간단해보일수 있지만 실제로는 훨씬 복잡한 조건의 DAU를 산출해야하는 경우도 존재한다.
이 경우에는 where 절에 여러 조건이 붙는다.


예시를 들어보자면

* 접속 OS별 DAU 
* 구매 카테코리별 DAU
* 7월에 접속한 유저들의 8월 DAU ( 앞 선 예시보다는 고난도)

 

COUNT( )  / 

SELECT
	COUNT (기준A), ----중복제거하지 않을 경우
    COUNT (distinct 기준A) ----중복제거할 경우
FROM sample1     

 

 

 

 

 

 

댓글