주의할 부분
- 항상 순서대로 하는 것이 정답이 아니라 서비스별로 중요도가 다름
활용 방법
- 단계별로 풀어야하는 문제 확인
- 단계별로 활용되는 주요 지표를 선별하고 측정 -> 지표의 이해
- 현 단계에서 개선해야 하는 목표를 정하고 실험을 통해 단계적 개선이 필요
Activation 과정을 통해 경험한 A HA Moment를 꾸준히 경험하도록 하는 것
A HA Moment 과정 (ex. 페이스북의 경우 '10일 내에 7명의 친구')
리텐션 종류
Classic Retention(Day-N Retention)
: 첫 방문 후 +N일 후 재방문하는 사용자의 비율
Range Retention
: Classic Retention과 거의 동일하지만, 기준이 날짜가 아닌 기간이라는 차이점
Rolling Retention
: 첫 방문 후 +N일 후 1회 이상 재방문하는 사용자 비율
접속이 꼭 Retention의 유일한 기준X -> 다른 유의미한 행동을 기준으로, 시간에 따른 반복도 가능함
리텐션 개선방법
안녕하세요!
메타코드에서 진행하신 무료 특강 내용 중 '데이터분석3'을 python으로 진행해주셨는데, 토스 쿼리 테스트에 AARRR 집계 문제가 출제 된다고 하여 작성해주신 Python 코드를 Bigquery의 sql 쿼리로 작성해봤습니다. 획득-활성화-유지-수익 단계별 유저 수가 python 결과와 크게 다른 데 제가 작성한 sql 쿼리를 확인해주시면 감사드립니다ㅠㅠ
WITH using_events AS ( --비회원으로 이벤트를 발생시킨 유저들의 경우를 함께 고려
SELECT
FROM (SELECT , case when user_id is null then -1 else user_id end as user_id1
FROM
bigquery-public-data.thelook_ecommerce.events
WHERE created_at BETWEEN '2024-07-01' AND '2024-07-31') e
WHERE user_id1 = -1 OR user_id1 IN(SELECT user_id --대상: 24년 7월 가입한 유저
FROM
bigquery-public-data.thelook_ecommerce.users
WHERE created_at BETWEEN '2024-07-01' AND '2024-07-31')
),user_id1_lst AS ( --using_events 테이블에 존재하는 유저 중에 회원가입을 한 유저 리스트
SELECT distinct user_id1
FROM using_events
WHERE user_id1 != -1
),user_session_lst AS ( --using_events 테이블에서 회원가입을 한 유저들의 session_id 리스트
SELECT distinct session_id
FROM using_events
WHERE user_id1 IN (SELECT FROM user_id1_lst)
),not_user_session_lst AS ( --using_events 테이블에서 비회원인 유저들의 session_id 리스트
SELECT distinct session_id
FROM using_events
WHERE user_id1 = -1
),not_usr_lst AS ( --비회원 유저들의 session_id중에 회원가입을 한 유저들의 session_id와 중복되지 않는 비회원 유저들의 session_id 리스트
SELECT session_id
FROM not_user_session_lst
WHERE session_id NOT IN (SELECT FROM user_session_lst)
),acquisition AS ( # not_usr_lst에 속하는 비회원 유저들은 user_id1 대신 session_id로 대체, 따라서 user_id1: string 변환
SELECT cast(user_id1 as string) as user_id1 FROM user_id1_lst
UNION ALL
SELECT FROM not_usr_lst
),final_acquisition AS ( #(1)Acquisition(획득) : 유저 유입(!=회원가입)
SELECT user_id1, 1 as type
FROM acquisition
),activation AS ( #(2)Activation(활동, 활성화) : 회원가입
SELECT user_id1, 2 as type
FROM user_id1_lst
),retention AS ( #(3)Retention(유지) : 홈 방문 및 장바구니 기준으로 설정
SELECT user_id1, 3 as type
FROM using_events
WHERE user_id1 != -1 AND event_type IN ('home','cart')
GROUP BY user_id1
HAVING count() >= 2
),revenue AS ( #(4)Revenue(매출) : 구매(비회원도 매출 발생 가능)
SELECT distinct user_id1, 4 as type
FROM using_events
WHERE event_type = 'purchase'
)--,funnel_data AS ( #(5)funnel_data
SELECT count(user_id1) as usr_cnt FROM final_acquisition
UNION ALL
SELECT count(user_id1) FROM activation
UNION ALL
SELECT count(user_id1) FROM retention
UNION ALL
SELECT count(user_id1) FROM revenue
ORDER BY usr_cnt DESC
--)