📌 리텐션
- 시간에 따른 제품 사용을 측정하는 지표. customer가 제품을 재이용하는 단계.
👉 함께 보면 좋은 글 : Market Fir Lab Solution
제품 특성(자주 사용하는 제품이 있고, 1회성으로 사용하는 제품/ 유료, 무료 인 제품)에 따라 리텐션을 분석할 때, 고려해야하는 부분이 달라짐. 예를 들어, 1회성으로 사용할 경우 리텐션이 적음
PMF(Product Market Fit) : 제품과 시장의 적합성. 시장의 요구와 고객의 필요를 충족시키는 정도. 리텐션 커브에서 평평한 구간!. 어떻게 하면 PMF을 유지할 수 있을 지 생각해보는 것이 리텐션의 목표!
처음 리텐션 접근시, 접속기록 > 핵심 이벤트처럼 점점 구체적으로 파악하는 것이 좋음.
히스토그램을 그리면 제품의 사용주기 확인이 쉬움
: 오른쪽일 수록 긴 주기
1. CLASSIC 리텐션(N DAY 리텐션)
: 유저가 최조로 참여한 DAY0 이후에 DAY N 별로 참여했는 지 계산. 낮은 값이 나올 수 있음. 보수적. 정기적이거나 하루단위
2. RANGE 리텐션(BRACKER 리텐션)
: 특정 RANGE 내에서 또 참여했는지 계산. 유용하고 실용적. 주차별.
3. ROLLING 리텐션(UNBOUNDED 리텐션)
: DAY N 이후 한 번이라도 참여했을 경우 그 동안 모두 참여한 것으로 간주. 높은 값이 나올 수 있음. 유저의 최근 참여에 따라 데이터 결과가 달라짐. 장기적, 사용주기가 긴경우
4. 리텐션 커브 (Retention Curve)
: 코호트 리텐션을 차트로 시각화한 것. 시각적으로 표현해서 직관적.
5. 코호트 리텐션(Cohert Retention)
: 동질적 특성을 가진 사람들의 집합. 보통, 동일한 시기에 가입한 사용자들을 지칭하는 용어로 사용됨.
👉 함께 보면 좋은 글 : 사용자 '리텐션'을 측정하는 5가지 지표 (요즘 IT)
👉 함께 보면 좋은 글 데이터 분석가의 SQL 최적화 일기 : 코호트 리텐션 Batch Query 만들기
n day retention은 특정 날짜, n일 뒤에도 서비스를 사용했는 지 확인
쿼리 구성
1. 가입 또는 첫 이용일 계산
: min()을 사용하여 최초일 계산
2. n일 뒤에도 이용 중인지 계산
: where을 통해 특정 기간의 데이터 중
3. 재이용까지 걸린 날짜 계산
: join, datediff로 재이용 또는 재접속 까지 걸린 기간을 계산
예시
: n을 7일으로 뒀을 경우의 예시
WITH first_activity AS (
SELECT
user_id,
MIN(activity_date) AS first_activity_date
FROM
user_activity
GROUP BY
user_id
)
SELECT
COUNT(DISTINCT user_id) AS day_7_retention
FROM
first_activity f
JOIN
user_activity a ON f.user_id = a.user_id
WHERE
DATEDIFF(a.activity_date, f.first_activity_date) = 7;
특정 범위내에서 사용자가 활동했는지 확인
쿼리 구성
1. 가입 또는 첫 이용일 계산
: min()을 사용하여 최초일 계산
2. 특정 기간에서의 사용자 수 계산
: count, case절, datediff를 통해 특정 기간애 서비스를 이용한 사용자의 수 계산
예시
: 1~3, 4~7일인 두 경우에 대한 계산
WITH first_activity AS (
SELECT
user_id,
MIN(activity_date) AS first_activity_date
FROM
user_activity
GROUP BY
user_id
)
SELECT
f.user_id,
f.first_activity_date,
-- 첫 이용 이후 1일~3일 범위에 활동한 사용자
COUNT(CASE WHEN DATEDIFF(a.activity_date, f.first_activity_date) BETWEEN 1 AND 3 THEN 1 END) AS day_1_to_3_retention,
-- 첫 이용 이후 4일~7일 범위에 활동한 사용자
COUNT(CASE WHEN DATEDIFF(a.activity_date, f.first_activity_date) BETWEEN 4 AND 7 THEN 1 END) AS day_4_to_7_retention
FROM
first_activity f
JOIN
user_activity a ON f.user_id = a.user_id
GROUP BY
f.user_id, f.first_activity_date
첫 활동 이후 재접속의 지속성 추적. 재접속을 했는지에 대한 여부 (서비스 이용의 지속성)
range와 달리, 날짜에 제한이 없고, 다시 돌아오는지 추적
첫 접속이후, 3일 7일 15일 등 특정 기간에 최소 한 번 재접속했는지 확인
사용자가 얼마나 빨리 돌아오는지, 자주 오는 지 측정
쿼리 구성
1. 가입 또는 첫 이용일 계산
: min()을 사용하여 최초일 계산
2. 특정 기간에서의 사용자 수 계산
: count, case절, datediff를 통해 특정 기간애 서비스를 이용한 사용자의 수 계산
WITH first_activity AS (
SELECT
user_id,
MIN(activity_date) AS first_activity_date
FROM
user_activity
GROUP BY
user_id
)
SELECT
f.user_id,
f.first_activity_date,
-- 첫 이용 이후 1일 이내에 활동한 사용자 수
COUNT(CASE WHEN DATEDIFF(a.activity_date, f.first_activity_date) <= 1 THEN 1 END) AS day_1_retention,
-- 첫 이용 이후 7일 이내에 활동한 사용자 수
COUNT(CASE WHEN DATEDIFF(a.activity_date, f.first_activity_date) <= 7 THEN 1 END) AS day_7_retention,
-- 첫 이용 이후 30일 이내에 활동한 사용자 수
COUNT(CASE WHEN DATEDIFF(a.activity_date, f.first_activity_date) <= 30 THEN 1 END) AS day_30_retention
FROM
first_activity f
JOIN
user_activity a ON f.user_id = a.user_id
GROUP BY
f.user_id, f.first_activity_date
예로 1일, 7일, 30일에 다시 접속했는지 여부를 추적
Range Retention
사용자 A: 첫 사용일 2024-10-01
1일 리텐션: 2024-10-02에 다시 접속
7일 리텐션: 2024-10-08에 다시 접속
30일 리텐션: 2024-10-31에 다시 접속
Rolling Retention
사용자 A: 첫 사용일 2024-10-01
1일 리텐션: 첫 사용일 이후 1일 동안 재접속한 사용자
7일 리텐션: 첫 사용일 이후 7일 이내 재접속한 사용자
30일 리텐션: 첫 사용일 이후 30일 이내 재접속한 사용자