Age·Period·Cohort, 세 가지 축으로 해석하기
데이터 분석에서 코호트 분석(Cohort Analysis)은 너무도 흔히 쓰이는 도구입니다.
“2025년 3월에 들어온 신규 고객의 1개월 차 리텐션은 25%였다” 같은 식으로요.
그런데 여기엔 중요한 함정이 있습니다. 코호트 분석에는 항상 ‘시간’이라는 요소가 숨어 있다는 것이죠.
✔️ Age(시간 효과) : 유저가 유입된 뒤 경과한 시간
✔️ Period(시점 효과) : 특정 시점에 벌어진 외부 요인 (프로모션, 계절성, 시스템 이슈)
✔️ Cohort(집단 효과) : 그 달에 들어온 고객 집단의 질적 특성 (유입 채널, 마케팅 믹스 등)
코호트 분석을 제대로 쓰려면, 이 세 가지 축을 분리해서 바라봐야 합니다.
예를 들어보겠습니다. 아래는 가상의 앱 데이터에서 코호트별로 유입 월(Cohort Month)과 경과 월(Age)을 매트릭스로 놓고 활성 사용자 수를 정리한 모습입니다.
하지만 실무에서는 이 표를 일일이 읽는 대신, 히트맵으로 시각화하면 패턴을 한눈에 볼 수 있습니다.
또는 아래와 같이 각 코호트의 잔존율 곡선 차트로 나타내기도 합니다.
같은 Age(예: M1)라도 어느 시점(Period)에 있었는지에 따라 값이 흔들립니다. 연말·대형 프로모션·시즌성 때문에 특정 코호트가 유독 좋아 보이거나 나빠 보이는 착시가 생기죠. 이를 줄이려면 월(Period) 기준 전체 활성 규모로 나눠 점유율(share)을 보고, 순수한 Age 패턴을 비교합니다.
코호트 c, 경과월 a, 월 p에서의 활성 사용자
월 p의 전체 활성(모든 코호트·age 합)
Period 정규화 점유율(share)
(참고) 잔존율(코호트 내부 기준)
Period 정규화 점유율은 해당 월의 전체 활성 중 해당 코호트·나이가 차지한 비중이므로, 계절/프로모션 등 달력 효과를 제거한 상태에서 Age 패턴을 공정하게 비교할 수 있습니다
특정 변경(예: 온보딩 개편, 가격 정책 변경, 추천 알고리즘 업데이트)의 효과를 보려면, 모든 관측치를 릴리즈일 기준 상대시간으로 정렬하는 것이 핵심입니다. 각 시점을 “릴리즈 기준 몇 주(또는 몇 달) 떨어져 있는지”로 바꿔 보면, 단기 스파이크 vs 지속 효과가 명확해집니다.
릴리즈 기준 상대시간(주/월) t
예) 월 단위면 t=월차, 주 단위면 t=주차
관심 지표(정규화 권장) St
Period 정규화 점유율을 먼저 만든 뒤, 상대시간으로 모아 St 비교
프리/포스트 평균과 상대 개선율(uplift)
(선택) DiD(차분의 차)—대조군이 있을 때
1번에서 만든 정규화 지표 S를 쓰면, 프로모션/계절성 같은 충격을 훨씬 잘 통제한 상태에서 이벤트 효과를 읽을 수 있습니다.
릴리즈 시점 t=0을 기준으로 [−K,+K] 구간의 지표 추이를 정렬해 비교
즉시 효과(스파이크)가 있는지, 효과가 유지/소멸되는지 한눈에 확인
추가로 실무 팁을 드리자면,
✔️ 윈도우 크기 K는 제품 사이클에 맞추세요 (예 : 앱 온보딩은 4주, 정기 구독은 12개월 등)
✔️ 변동성이 크면 상대개월(rel_m) 단위에서 이동평균 (예: 3포인트 평균)으로 스무딩
(참고) 상대개월 rel_m 생성: period_month - release_month (단위=월)
✔️ 세그먼트 분리(iOS/Android, 신규/복귀, 패션/비패션 카테고리)로 세분화하여 파악
코호트 분석에서 자주 부딪히는 질문은 다음과 같습니다.
이 유지율 변화가 유저의 경과(Age) 때문인가요, 시점(Period) 때문인가요, 아니면 유입 집단(Cohort) 자체의 질 때문인가요?
이를 분리해서 추정하는 프레임이 APC(Age–Period–Cohort)입니다.
모델(집계 카운트 기준)
코호트 c, 경과월 a, 월 p에서 활성 사용자 수를 Ac,a,p라 할 때,
exp(a^a)−1는 Age가 a로 1단계 바뀔 때의 상대 변화율(근사)을 뜻합니다. βp,γc도 동일하게 exp(⋅)−1로 백분율 변화로 해석하면 좋습니다.
식별(Identifiability) 이슈 요약
APC는 본질적으로 a+c=p의 선형 제약이 있어 완전 공선성 문제가 발생합니다. 즉, 세 축을 그대로 모두 넣고 OLS/GLM을 돌리면 해가 유일하지 않습니다.
실무에서의 안전한 해결책 3가지
1. 2단계 잔차법(빠른 레시피) : 먼저 Age+Period(AP)만 적합 → 잔차를 Cohort로 다시 분해(또는 잔차 평균을 Cohort 효과로 간주)
2. 정규화(Regularization) : Ridge(또는 Elastic Net) 페널티를 주어 안정된 해를 구하고 상대 비교에 집중
3. 제약 부여 : 기준 범주 고정(참조 레벨) + 합이 0(평균 0) 등의 선형 제약을 일부 축에 명시
보고 또는 의사결정 목적이라면 1번 잔차법이나 2번 Ridge가 가장 실무 친화적이라고 생각합니다.
빠른 실무 레시피 — 2단계 잔차법(AP → Cohort)
“Age·Period만”으로 공통 패턴을 설명하고, 남은 잔차를 Cohort 고유 품질로 본다.
gamma_rel(%) 양수면 “해당 Cohort의 유입 퀄리티가 상대적으로 좋다”
음수면 반대로 퀄리티가 낮다는 신호
같은 방식으로 Age/Period 효과도 'm_ap.coef_'에서 추정치 → exp(⋅)−1로 % 해석 가능
정교한 추정 — Ridge-GLM(APC 동시)
세 축을 동시에 넣되, Ridge 정규화로 안정화 → 상대 비교에 집중
coef는 로그스케일, rel_pct는 exp(coef)−1로 환산한 상대 변화율(%). 다른 두 축을 통제했을 때, 해당 레벨이 활성에 주는 곱셈적 영향을 의미합니다. 값이 +면 플러스 효과, –면 마이너스 효과. 상대 비교(어느 레벨이 더 큰가)에 초점을 둡니다.
예제의 결과를 간단하게 해석해 보면 다음과 같습니다.
1) Age 효과(공통 패턴)
M0: rel_pct ≈ +71.6%
M1: +33.5%
M2: +7.6%
→ 당연한 이야기지만 유입 시점(M0)과 M1이 압도적으로 중요합니다. 전형적인 "초기 급락, 이후 완만" 패턴이 재확인되는데, 실무에서 제품이나 마케팅에서 초기 경험을 중요시하여 집중 설계하는 것과 같은 맥락이라고 볼 수 있습니다. (예 : 온보딩, 첫 구매, D+7, 14, 30일 트리거, 초기 추천 및 리마인더 최적화)
2) Period 효과(시점 요인)
2025-03: +22.0%
2025-02: +15.0%
2025-04: +9.3%
→ 예제 데이터에서 2~4월에 기간(프로모션) 플러스 효과가 나타납니다. 즉, 이 구간의 상승은 기간 효과 영향이 크다고 판단 할 수 있습니다. 실험 판별 시 1번의 Period 정규화 또는 DiD로 보정하여 판단할 수 있습니다.
3) Cohort 효과(유입 집단의 퀄리티)
2025-04: +14.0%
2025-06: +13.2%
2025-05: +9.6%
2025-03: +7.4%
→ 동일 Age·Period 대비 더 잘 유지되는 코호트입니다. 유입 채널/소재/랜딩·온보딩 플로우의 질이 상대적으로 좋았다는 신호로 해석할 수 있습니다. 실무에서는 상위 코호트의 유입 소스·크리에이티브·온보딩 플로우를 역추적해 템플릿화/확산하고, 하위 코호트는 타게팅·프릭션 제거를 점검할 수 있습니다.
리텐션만 보면 남아 있느냐/떠나느냐를 봅니다. 그러나 비즈니스 판단은 얼마 벌었는가(LTV)로 내려야 합니다. 개입(온보딩 개편, 추천 고도화 등) 이후, 단기 매출 상승이 장기 누적 매출로 이어졌는지를 Age(경과 개월) 축에서 확인합니다.
Ac,a,p : 코호트 c, 경과월 a, 월 p에서의 활성 수/구매 수
ARPUa : Age a에서의 활성 1인당 평균 매출 (또는 ARPPU로 대체 가능)
누적 LTV(코호트 c, Age A)
전/후(Pre/Post) 평균 곡선
Age A에서의 상대 상승률
(선택) DiD(차분의 차) — 대조군이 있을 때
잔존율이 좋아도 ARPU가 떨어지면 LTV는 안 오를 수 있습니다. 반대로 잔존율은 같아도 ARPU가 개선되면 LTV가 오릅니다. 그래서 LTV 곡선을 반드시 같이 봅니다.
✔️ 전 구간 열세 : Post(주황)가 Pre(파랑)보다 M0, M1, M2 모두 낮음 → 개편 이후 코호트의 누적 LTV가 전반적으로 악화
✔️ M1 Uplift ≈ −19%, M2 Uplift ≈ −19.8% → 단기(M1)·중기(M2) 모두 의미 있는 하락이며, 초기 증가가 장기 기여로 이어지지 않음
✔️ 공정 비교 윈도우 : M3 값은 N/A(검열)이라 이번 비교는 M2까지로 해석해야 함 → 최신 코호트 관찰 기간이 짧아 발생하는 문제이므로, 공통 최대 Age까지만 비교한 판단은 타당
실무에서 이러한 결과가 나온다면 다음과 같은 원인 가설을 생각해 볼 수 있습니다.
1. ARPU 저하 : 할인/혜택 구조 변화로 AOV↓ 또는 순매출↓
2. 초기 전환 손실 : 온보딩/첫 구매 플로우 변경으로 M0→M1 전환율↓
3. 채널 믹스 악화 : 저품질 유입 비중↑(의도/적합도 낮은 트래픽)
4. 기간 요인 : 계절/캠페인 영향(1번 Period 정규화나 DiD로 재확인 필요)
데이터 분석가는 액션 체크리스트를 세워 이 가설에 대한 검증을 진행할 수 있습니다.
LTV 분해 : LTV=유저수 ×빈도 ×AOV. M0·M1·M2별로 어떤 축이 꺾였는지 확인
APC 교차검증 : Age·Period 통제 후 Cohort 효과가 Post에서 실제로 낮아졌는지 재확인
세그먼트 뷰 : OS/채널/카테고리/신규·복귀별로 Post < Pre 구간 탐지 → 국소 원인 도출
Event Window 재점검 : 릴리즈 상대개월 t 기준으로 t=0 이후 반응이 스파이크 후 소멸인지 확인
실험/DiD : 대조군이 있으면 DiD 또는 A/B 로그로 인과성 검증
가드레일 : 재구매율, 이탈률, 쿠폰비용, 마진 등 유닛 이코노믹스 동반 점검
코호트 테이블의 오른쪽 하단은 비어 있거나 낮은 값이 많습니다. 이유는 간단합니다. 최신 코호트는 관찰기간이 짧아서 M6·M12가 아직 오지 않았기 때문에(= 우측 검열, right censoring) 이 상태에서 과거 코호트와 풀 호라이즌으로 비교하면 최신 코호트가 부당하게 열세로 보이는 착시가 생깁니다.
핵심 원칙
✔️ 공정한 비교 구간만 본다 : 전/후(또는 모든 코호트)가 공통으로 채워진 최대 Age까지만 비교
✔️ 필요시 보간/생존분석(Kaplan–Meier, parametric)으로 미도달 Age를 추정하되, 실무 보고는 먼저 공통 구간을 제시하는 게 안전
각 코호트의 누적 LTV 곡선을 M3까지만 그려 공정 비교합니다. 최신 코호트를 과소평가하지 않기 위한 필수 가드레일로 M3에서의 상대 위치를 먼저 확인한 뒤, 장기 해석은 별도(보간/생존)로 다룹니다.
예제 데이터의 경우 2025-03 코호트가 M0부터 가장 높은 누적 LTV를 유지하며 M3까지 지속적으로 격차 확대를 보입니다. 모두 M0→M1 구간의 급상승이 크고, 이후 완만. 전형적 Age 패턴을 보입니다. 상위권(2025-03/02/04)은 M2·M3에서도 증가폭이 유지되어 장기 기여가 뚜렷합니다. 2025-05는 초기부터 낮고, 이후도 완만하므로 온보딩/초기 전환·ARPU 모두 점검 필요합니다.
이 데이터 기준으로 원인 가설을 생각하면 Cohort 품질 관점에서 3~4월은 채널, 크리에이티브, 랜딩 페이지, 온보딩 품질이 상대적으로 우수했을 가능성이 있습니다. Preiod 영향으로 보면 3월에 프로모션 + 인접 월의 계절성에 의한 플러스 가능성이 있습니다. 하위 코호트(특히 5월)는 M0-M1 전환 또는 ARPU에서 손실이 있었을 수 있습니다.
이번 글에서 다룬 코호트 분석의 핵심은 시간을 분해해 읽는 것입니다. 동일한 숫자라도 Age(경과시간), Period(시점 효과), Cohort(유입 집단의 질)이 섞이면 오판하기 쉽죠. 그래서 우리는 다섯 가지 도구—Period 정규화(계절·프로모션 착시 제거), 이벤트 윈도우(릴리즈 기준 상대시간), APC 분해(세 축 동시 추정), LTV×Age(잔존이 매출로 이어졌는가), 검열 보정(공정 비교 M3)—를 상호 보완적으로 적용해 맥락을 복원했습니다. 그 결과 “프로모션 시점이라 좋아 보이는지 vs 진짜 좋아진 건지”, “스파이크인지 지속 효과인지”, “채널/온보딩이 좋은 코호트는 어느 달인 지”, “Post가 왜 LTV 열세인지”, “최신 코호트를 어떻게 공정하게 볼지”를 한눈에 판별할 수 있습니다.
실무 절차는 간결합니다. Period 정규화로 착시를 걷어낸 뒤 이벤트 윈도우로 개편 전후의 단기/지속 효과를 분리하고, APC 분해로 나이·기간·코호트의 구조적 기여를 설명합니다. 이어 LTV×Age 곡선으로 ‘잔존’이 실제 매출 기여로 이어졌는지 확인하고, 마지막으로 검열 보정(M3 공정 비교)으로 최신 코호트를 과소평가하지 않도록 합니다. 이 다섯 단계는 대체 관계가 아니라 퍼즐 조각처럼 서로를 보완합니다. 요컨대, 시간을 제대로 다루는 코호트 분석은 “측정 → 정규화/분해 → 설명 → 의사결정 → 실행 → 재측정”의 루프를 빠르게 돌리는 실무 프레임이며, 이를 팀의 표준과 대시보드에 녹이면 “왜 그렇게 보였는가”와 “그래서 무엇을 할 것인가”에 대한 답을 더 빨리, 더 정확하게 낼 수 있습니다.