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
'프로그래밍 > SQL 함수 쌓기' 카테고리의 다른 글
NULL 혹은 빈 문자열 제외 하는 방법들 ( 함수 / LENGTH ) (0) | 2020.09.28 |
---|---|
일자별 시간별 10분 단위 집계하기 / CASE WHEN 구문, SUBSTR , CONCAT 활용 (0) | 2020.08.30 |
SQL 실무 함수 정리에 앞서 (PostgreSQL, HiveQL, Redshift) (0) | 2020.08.16 |
댓글