π± 리ν μ (μμ‘΄μ¨) λΆμμ΄λ?
β 리ν μ λΆμμ΄λ?
**리ν μ λΆμ(Retention Analysis)**μ μ±μ μ€μΉνκ±°λ νμκ°μ ν μ¬μ©μκ° μΌμ μκ° μ΄νμλ μ¬μ ν νλνκ³ μλμ§λ₯Ό νμΈνλ λΆμμ λλ€.
β μ 리ν μ λΆμμ ν΄μΌ νλμ?
- λ§μΌν
ν¨μ¨ μΈ‘μ
μ μ κ° μ±μ μ€μΉν ν μ΄ννμ§ μκ³ λ¨μμλ λΉμ¨μ 보면, κ΄κ³ μΊ νμΈμ΄ ν¨κ³Όμ μ΄μλμ§ νκ°ν μ μμ΄μ. - μλΉμ€ μ΄κΈ° κ²½ν νκ°
μ€μΉ ν 1~2μΌ λ΄ μ΄νμ¨μ΄ λλ€λ©΄, μ¨λ³΄λ© UX κ°μ μ΄ νμνλ€λ μ νΈμΌ μ μμ΄μ. - κΈ°λ₯ μ
λ°μ΄νΈλ μ΄λ²€νΈ ν¨κ³Ό μΈ‘μ
νΉμ κΈ°κ° μ΄ν 리ν μ μ΄ κ°μ λμλμ§ νμΈνλ©΄, κΈ°νμ΄ μ±κ³΅μ μ΄μλμ§ νλ¨ν μ μμ΄μ.
π μ΄λ€ μΈμ¬μ΄νΈλ₯Ό μ»μ μ μμκΉ?
- μ€μΉμΌ κΈ°μ€μΌλ‘ λ€μλ (N+1) μ μ κ° μΌλ§λ νλνλμ§
- 1μΌ, 3μΌ, 7μΌ, 14μΌ, 30μΌ κΈ°μ€ λ¦¬ν μ λΉκ΅
- κ΄κ³ μ μ μ±λλ³ λ¦¬ν μ λΆμ β μ λ£ κ΄κ³ ν¨μ¨ κ°μ
- κΈ°κΈ°/OS/μ±λ³/μ°λ Ήλ λ± μΈκ·Έλ¨ΌνΈλ³ 리ν μ μ°¨μ΄
π‘ GA4 BigQueryλ‘ λ¦¬ν μ λΆμνλ λ°©λ²
π§ μ€λΉ μ¬ν
event_name = 'first_open'
β μ€μΉμΌ κΈ°μ€event_name = 'session_start'
oruser_engagement
β νλ νμΈμ©
π SQL μμ : 1μΌ, 7μΌ, 30μΌ λ¦¬ν μ κ³μ°
WITH first_open_users AS (
SELECT
user_pseudo_id,
MIN(DATE(event_timestamp, "Asia/Seoul")) AS install_date
FROM `your_project.analytics_XXXX.events_*`
WHERE event_name = 'first_open'
AND _TABLE_SUFFIX BETWEEN '20240501' AND '20240531'
GROUP BY user_pseudo_id
),
user_activity AS (
SELECT
user_pseudo_id,
DATE(event_timestamp, "Asia/Seoul") AS activity_date
FROM `your_project.analytics_XXXX.events_*`
WHERE event_name = 'user_engagement'
AND _TABLE_SUFFIX BETWEEN '20240501' AND '20240630'
),
retention AS (
SELECT
f.install_date,
DATE_DIFF(a.activity_date, f.install_date, DAY) AS day_diff,
COUNT(DISTINCT a.user_pseudo_id) AS retained_users
FROM first_open_users f
JOIN user_activity a
ON f.user_pseudo_id = a.user_pseudo_id
WHERE DATE_DIFF(a.activity_date, f.install_date, DAY) IN (0, 1, 7, 30)
GROUP BY f.install_date, day_diff
)
SELECT
install_date,
MAX(CASE WHEN day_diff = 0 THEN retained_users END) AS day_0,
MAX(CASE WHEN day_diff = 1 THEN retained_users END) AS day_1,
MAX(CASE WHEN day_diff = 7 THEN retained_users END) AS day_7,
MAX(CASE WHEN day_diff = 30 THEN retained_users END) AS day_30,
ROUND(MAX(CASE WHEN day_diff = 1 THEN retained_users END) * 100.0 /
MAX(CASE WHEN day_diff = 0 THEN retained_users END), 1) AS day1_retention,
ROUND(MAX(CASE WHEN day_diff = 7 THEN retained_users END) * 100.0 /
MAX(CASE WHEN day_diff = 0 THEN retained_users END), 1) AS day7_retention,
ROUND(MAX(CASE WHEN day_diff = 30 THEN retained_users END) * 100.0 /
MAX(CASE WHEN day_diff = 0 THEN retained_users END), 1) AS day30_retention
FROM retention
GROUP BY install_date
ORDER BY install_date;
π κ²°κ³Ό μμ
install_date | day_0 | day_1 | day_7 | day_30 | day1_retention | day7_retention | day30_retention |
---|---|---|---|---|---|---|---|
2024-05-01 | 1000 | 600 | 400 | 150 | 60.0% | 40.0% | 15.0% |
π μ€λ¬΄μμμ νμ© ν
- μΌμλ³ λ¦¬ν μ νΈλ λλ‘ μ¨λ³΄λ© κ°μ μκΈ° νμ
- μ μ
κ²½λ‘(
traffic_source.source
)λ³ λ¦¬ν μ λΉκ΅ β κ΄κ³ ν¨μ¨ μ΅μ ν - μ μ μΈκ·Έλ¨ΌνΈλ³ λΆμ (μ: OS, μ±λ³, λμ΄λ) β νκ² λ§μΆ€ μ λ΅ μ립
- μΊ νμΈ μ /ν λΉκ΅ λΆμμΌλ‘ A/B ν μ€νΈ ν¨κ³Ό μΈ‘μ
π λ§λ¬΄λ¦¬
리ν
μ
λΆμμ λ¨μν νΌλ λΆμ κ·Έ μ΄μμ
λλ€.
μ¬μ©μ μ μ§μ¨μ λμ΄λ μ λ΅μ ν΅μ¬μ΄λ©°,
GA4 BigQueryλ₯Ό νμ©νλ©΄ μ λ°νκ³ μλνλ 리ν
μ
νΈλνΉμ΄ κ°λ₯ν©λλ€.
λ€μ λ¨κ³λ‘λ μΈκ·Έλ¨ΌνΈλ³ 리ν μ μ΄λ LTV λΆμμΌλ‘ νμ₯ν΄λ³΄λ κ²λ μΆμ²λλ €μ!