코호트 매트릭스
Cohort Matrix
코호트 매트릭스는 특정 기간(가입 월/주 등)에 유입된 유저 그룹(코호트)의 시간 경과에 따른 잔존율(Retention) 변화를 히트맵으로 시각화한 표입니다. 이를 통해 제품 개선이나 마케팅 캠페인이 실제 유저 락인(Lock-in)에 기여했는지 기수별로 추적할 수 있습니다.
📖 개념 정의 및 실무 적용
실무에서 단일 시점의 전체 리텐션 지표만 바라보면 특정 프로덕트 업데이트나 이벤트가 장기적인 유저 잔존에 미친 영향을 정확히 파악하기 어렵습니다. 전체 평균의 함정에 빠져 신규 유저 유입 품질의 변화나 이탈 시점을 놓치기 십상입니다.
코호트 매트릭스를 도입하면 기수(Cohort)별로 리텐션을 쪼개어 볼 수 있어, 최근 가입한 유저들의 잔존율이 이전 기수보다 개선되고 있는지 명확한 트렌드를 추적할 수 있습니다. 이를 통해 프로덕트-시장 적합성(PMF) 검증 및 그로스 실험의 성과를 객관적으로 평가할 수 있습니다.
WITH first_activity AS (SELECT user_id, MIN(DATE_TRUNC('month', event_date)) AS cohort_month FROM user_events GROUP BY 1), user_activity AS (SELECT DISTINCT u.user_id, f.cohort_month, DATE_TRUNC('month', u.event_date) AS activity_month FROM user_events u JOIN first_activity f ON u.user_id = f.user_id), cohort_sizes AS (SELECT cohort_month, COUNT(DISTINCT user_id) AS cohort_size FROM first_activity GROUP BY 1), activity_counts AS (SELECT cohort_month, activity_month, COUNT(DISTINCT user_id) AS active_users FROM user_activity GROUP BY 1, 2) SELECT a.cohort_month, c.cohort_size, (EXTRACT(YEAR FROM a.activity_month) - EXTRACT(YEAR FROM a.cohort_month)) * 12 + (EXTRACT(MONTH FROM a.activity_month) - EXTRACT(MONTH FROM a.cohort_month)) AS period_number, a.active_users, ROUND(a.active_users * 100.0 / c.cohort_size, 2) AS retention_rate FROM activity_counts a JOIN cohort_sizes c ON a.cohort_month = c.cohort_month ORDER BY 1, 3;
⚡ 5분 만에 적용하는 실행 스텝
코호트 정의: 유저의 최초 유입 시점(가입일, 첫 구매일 등)을 기준으로 월별 혹은 주별 코호트 그룹을 정의합니다.
활동 데이터 결합: 각 유저의 이후 활동 로그를 코호트 기준일과 매핑하여 경과 기간(Month 0, Month 1 등)을 산출합니다.
집계 및 비율 계산: 각 코호트별 초기 모수 대비 경과 기간별 활성 유저 수를 나누어 리텐션 퍼센트를 계산합니다.
시각화 및 트렌드 분석: 계산된 리텐션 데이터를 스프레드시트나 BI 툴에서 히트맵으로 시각화하여 기수별 우상향 여부를 검토합니다.
🚀 실무자만 아는 한 끗 차이 Pro Tip
⚠️ 흔히 하는 실수 & 주의사항 (삽질 방지)
❓ 자주 묻는 질문 (FAQ)
코호트 매트릭스에서 리텐션 곡선이 우하향하다가 특정 구간에서 평평해지면(Tail) 무엇을 의미하나요?
리텐션 곡선이 수평(Plateau)을 이루는 구간은 해당 서비스의 '코어 유저(Core User)'가 안착했음을 의미하며, 진정한 PMF를 달성했다고 해석할 수 있습니다. 이 평평해지는 지점의 잔존율 높낮이로 서비스의 락인 효과를 판단합니다.
GA4나 앰플리튜드 같은 툴을 쓰지 않고 SQL로 직접 코호트 매트릭스를 짜야 하는 이유는 무엇인가요?
상용 툴은 정의가 고정되어 있거나 커스텀 비즈니스 로직(예: 구독 갱신 주기별 리텐션)을 반영하기 어렵습니다. SQL로 직접 파이프라인을 구축하면 우리 회사만의 독창적인 정의를 반영한 맞춤형 데이터 마트를 유연하게 만들 수 있습니다.