퍼널이란?
깔대기 구조: 처음 단계에서는 사용자 수가 많고, 뒷 단계로 갈수록 사용자수가 줄어든다.
홈 -> 상품 검색 -> 상품 검색 결과 페이지 -> 상품 세부 페이지 -> 장바구니 페이지 -> 결제 페이지 -> 주문 완료 페이지
목적
퍼널의 종류
Closed Funnel
Open Funnel
어떤 기준으로 집계할 것인가?
리텐션(retention)이란?
리텐션을 어떻게 정의할 것인가?
앱 접속 기준 : 앱에 한 번이라도 접속한사용자
핵심 이벤트 기준 : 서비스의 핵심 이벤트를 수행한 사용자
실무에서는 서비스의 초기 단계 때 앱 접속 리텐션을 기준으로 서비스의 생존 여부를 파악한다. 이후 서비스의 성장 단계 때부터 핵심 이벤트 기준 리텐션을 기준으로 서비스의 어떤 이벤트가 리텐션을 만들어냈는지 확인한다.
Classic
Range
Rolling

user_id가 NULL인 행을 보고 당황했다.user_id가 NULL일 경우를 대비해 GA4는 user_pseudo_id을 사용한다.DISTINCT 로 하루에 여러 번 방문한 유저 수를 제거하지 못했다. DISTINCT 없이 구한다면 Page View가 된다는 걸 기억하자! DATETIME_DIFF의 단위만 DAY에서 WEEK로 변경하고, 기준도 여전히 first_date를 사용했다.DATE_TRUNC(event_date, WEEK)을 사용했다. 이를 기준으로 첫 방문 주 (first_week)와 이후 주를 비교할 수 있었다.weekly retention의 정의가 훨씬 명확해졌고, 쿼리 구조도 자연스럽게 정리가 됐다.WITH base AS (
SELECT
user_pseudo_id,
event_date,
event_name,
event_timestamp,
param.key,
param.value.string_value,
param.value.int_value
FROM advanced.app_logs
CROSS JOIN UNNEST(event_params) AS param
WHERE event_date BETWEEN "2022-08-01" AND "2022-08-18"
), pivot_data AS (
SELECT
user_pseudo_id,
DATE_TRUNC(event_date, WEEK) AS event_week,
event_name,
event_timestamp,
MAX(IF(key = "firebase_screen", string_value, NULL)) AS firebase_screen,
MAX(IF(key = "food_id", int_value, NULL)) AS food_id,
MAX(IF(key = "session_id", string_value, NULL)) AS session_id
FROM base
GROUP BY ALL
), first_week_table AS (
SELECT
DISTINCT
user_pseudo_id,
event_week,
FIRST_VALUE(event_week) OVER (PARTITION BY user_pseudo_id ORDER BY event_week) AS first_week
FROM
pivot_data
), diff_of_table AS (
SELECT
*,
DATE_DIFF(event_week, first_week, WEEK) AS diff_of_week
FROM
first_week_table
ORDER BY
event_week
), weekly_retention AS (
SELECT
first_week,
diff_of_week,
COUNT(DISTINCT user_pseudo_id) AS user_cnt
FROM
diff_of_table
GROUP BY
first_week,
diff_of_week
ORDER BY
first_week,
diff_of_week
)
SELECT
*,
ROUND(SAFE_DIVIDE(user_cnt, first_cnt), 2) AS weekly_retention_ratio
FROM (
SELECT
*,
FIRST_VALUE(user_cnt) OVER(PARTITION BY first_week ORDER BY diff_of_week) AS first_cnt
FROM
weekly_retention
)

부트캠프 당시 프론트엔드를 맡아 화면 기획과 구현을 동시에 진행했었다. 짧은 개발 일정 속에서 기능을 완성하는 것이 최우선이었고, 발표 이후 서버가 약 일주일 이후까지만 운영되는 구조였기 때문에 이미 구현한 화면을 어떻게 개선할 수 있을지까지 고민할 여유는 없었다. 그 당시의 화면 기획은 대부분 직관과 경험에 의존한 선택에 가까웠다.
그러나 퍼널 분석과 리텐션 분석 수업을 들으면서 화면 개선 역시 감각의 영역이 아니라 분석을 기반으로 한 방법론적 접근이 가능하다는 사실을 처음으로 알게 되었다. 사용자가 어느 단계에서 이탈하는지, 특정 화면 이후 재방문이 이루어지는지와 같은 지표를 통해 화면의 문제를 정의하고 개선 방향을 설정할 수 있다.
화면 개선이 단순한 미적 수정이 아니라 데이터를 통해 문제를 정의하고 개선할 수 있는 영역이라는 점이 새롭게 다가온 하루였다.