"이 유저가 6개월 안에 떠날 확률은?"이 마케팅 BI에서 자주 나오는 질문입니다. 그런데 더 운영적인 질문은 "언제 떠날까"입니다. 떠나는 시점의 분포를 알면 윈백 캠페인을 적절한 타이밍에 보낼 수 있습니다. Survival 분석은 이 질문의 표준 도구입니다. Kaplan-Meier 곡선으로 시간 분포를 그리고, Cox PH 모델로 변수별 영향을 hazard ratio로 측정합니다. 이탈 분석에 들어가야 할 다른 한 도구를 정리합니다.
1. "떠날까"가 아니라 "언제 떠날까"
마케팅 분석에서 churn(이탈)은 보통 이진 분류 문제로 다뤄집니다 — "이 유저가 다음 30일 안에 떠날까". 로지스틱 회귀나 트리 모델로 풀고 정확도·AUC로 평가합니다.
이 프레임의 한계는 시간 정보를 잃는다는 점입니다.
- "떠난다"의 답이 0/1이라 정확히 언제 떠나는지 안 보임
- 학습 데이터에 아직 안 떠난 유저(censored data)를 어떻게 다룰지 애매함
- 변수 영향을 "확률 변화"로만 표현 — 시간 척도와 무관
Survival 분석은 시간을 명시적으로 다룹니다. 출발점은 시간을 변수로 두는 두 함수입니다.
- — 시점 까지 안 떠나고 살아 있을 확률 (survival function)
- — 시점 에 막 떠나려는 순간적 위험률 (hazard function)
수학적 관계는 다음과 같습니다.
이 두 함수가 churn 분석의 모든 답을 줍니다. 시간별 이탈 확률, 누적 이탈, 변수가 hazard에 미치는 영향, 미디언 생존 시간 등.

시간이 지나면서 살아남은 유저 비율 곡선이 S(t). 곡선이 가장 가파르게 떨어지는 자리가 hazard h(t)가 가장 큰 시점이다.
📌 이 글에서 다루는 것
Survival 분석은 의학·생물학에서 출발해 마케팅 churn 분석에 본격 도입된 지 10년이 넘었습니다. Kaplan-Meier(비모수)·Cox PH(준모수) 두 도구가 표준이고, lifelines·scikit-survival 같은 Python 라이브러리로 한 줄 코드 수준에서 다룹니다. 마케터가 이탈 분석 보고서를 받을 때 알아야 할 직관과 운영 적용을 정리합니다.
2. Censoring — survival 분석의 핵심 자산
Survival 분석이 단순 분류와 가장 다른 자리가 censoring입니다. 학습 데이터에는 두 종류의 유저가 있습니다.
- Event observed — 관측 기간 안에 떠난 유저 (실제 이탈 시점 알 수 있음)
- Censored — 관측 기간 안에 안 떠난 유저 (이탈 시점 > 관측 종료 시점)
단순 분류는 이 두 그룹을 어떻게 다룰지 애매합니다. censored 유저를 "안 떠남(0)"으로 두면 학습이 편향되고, 빼면 정보 손실이 큽니다.
Survival 분석은 censored 유저의 정보를 자연스럽게 활용합니다. "관측 기간 동안 안 떠남"도 신호로 사용해 likelihood에 기여합니다. 이 기능 하나가 마케팅 데이터에 survival을 도입할 가치의 절반입니다.
3. Kaplan-Meier 곡선 — 비모수 추정의 표준
Kaplan-Meier는 분포 가정 없이 를 그대로 추정하는 비모수 도구입니다. 한 줄 식은 다음입니다.
여기서 는 어떤 유저든 떠난 시점, 는 그 시점에 떠난 수, 는 그 직전까지 살아 있던 수입니다. 매 시점에 떠난 비율을 곱해가는 형태로 생존 곡선이 나옵니다.
운영적으로 Kaplan-Meier가 주는 정보는 다음입니다.
- 시간별 이탈 패턴의 시각화 — retention curve의 통계적 강화판
- 그룹별 비교 — 채널별·세그먼트별 곡선 그리고 log-rank 검정으로 차이의 유의성
- 미디언 생존 시간 — "절반의 유저가 떠나는 시점" — 단순한 한 숫자
| 비교 | 단순 retention curve | Kaplan-Meier |
|---|---|---|
| censoring 처리 | 안 함 (편향 있음) | 적절히 처리 |
| 신뢰구간 | 없음 (보통) | Greenwood 공식으로 자동 |
| 그룹 비교 검정 | 안 함 | log-rank 검정 |
| 운영 보고 | 시각용 | 의사결정용 |
retention curve의 운영 해석 글에서 다룬 코호트 곡선의 통계적 정합 강화판이 Kaplan-Meier라고 봐도 됩니다. 같은 그래프를 더 안전하게 그리는 도구입니다.
4. Cox PH 모델 — hazard ratio로 변수의 영향
Kaplan-Meier가 답하지 않는 질문이 있습니다 — 어떤 변수가 이탈 시점에 어떻게 영향을 주나. 이 답은 Cox proportional hazards(PH) 모델이 줍니다.
핵심 가정은 비례 위험성(proportional hazards) — 변수의 영향이 시간에 무관하게 hazard를 곱해주는 형태로 작용한다는 가정. 이 가정 위에서 베이스라인 hazard 를 추정하지 않고도 변수 효과 를 추정할 수 있습니다.
운영자가 받는 결과는 hazard ratio 형태입니다.
- — 그 변수가 1단위 증가하면 이탈 위험이 50% 증가
- — 그 변수가 1단위 증가하면 이탈 위험이 30% 감소
마케팅에 자주 쓰이는 변수와 해석:
- 마지막 30일 활동 횟수 — hazard ratio 보통 0.5~0.8 (활동 많으면 이탈 줄어듦)
- 첫 가입 채널 — 채널별 hazard ratio 비교 — 어느 채널이 더 churn 위험 큰가
- CRM 캠페인 노출 — hazard ratio < 1이면 효과 있음
- 마지막 결제 후 경과일 — 보통 hazard ratio > 1 (경과 길수록 이탈 위험)
from lifelines import CoxPHFitter
cph = CoxPHFitter()
cph.fit(df, duration_col='days_to_event', event_col='churned')
cph.print_summary() # 변수별 hazard ratio + p-value + 95% CI
이게 본문의 유일한 코드입니다. lifelines 패키지로 Cox PH가 한 줄로 돌아갑니다. 결과 표에 hazard ratio·신뢰구간·p-value가 모두 들어 있습니다.
💡 hazard ratio가 의사결정 단위로 적합한 이유
마케팅에서 변수의 영향을 보고할 때 "이탈 확률 5%p 감소" 같은 단위는 시간 척도가 빠집니다. hazard ratio는 시간 척도와 무관하게 "위험률을 곱하는" 단위라 의사결정자 누구에게나 같은 의미를 가집니다. CRM·온보딩·UX 변경의 효과 보고서에 hazard ratio를 한 줄 더하는 게 표준이 되어가고 있습니다.
5. BG/NBD와 무엇이 다른가
같은 "고객 lifecycle"을 다루는 도구로 huny.log에는 BG/NBD LTV 글이 있습니다. 두 도구의 차이를 정리합니다.
| 항목 | Survival 분석 | BG/NBD |
|---|---|---|
| 답하는 질문 | 이탈 시점 분포·변수 영향 | 미래 거래 횟수·살아있을 확률 |
| 핵심 출력 | , hazard ratio | predicted purchases, p_alive |
| 변수 활용 | 강함 (Cox PH) | 약함 (RFM 3개만) |
| censoring | 자연스럽게 처리 | 묵시적 처리 |
| 사용 시점 | 이탈 분석·CRM 타이밍 | LTV 추정·예산 단가 |
운영적으로 두 도구는 같은 자리에 같이 갈 수 있습니다. BG/NBD가 "이 고객이 살아 있는가"의 점추정 + 미래 거래 횟수를 주고, Survival 분석이 "언제 떠날 가능성이 큰가"의 시간 분포 + 변수 영향을 줍니다.
CRM 운영을 디자인할 때:
- BG/NBD p_alive 0.3~0.6 슬롯 → 윈백 1순위 타겟
- Survival 곡선의 가장 가파른 시점(보통 D14 또는 D30) → 캠페인 전송 타이밍
- Cox PH hazard ratio 큰 변수 → 캠페인 콘텐츠의 핵심 메시지 (그 변수를 다루는 메시지)
세 도구의 결합으로 캠페인 타겟·타이밍·메시지가 한 묶음으로 결정됩니다.
6. 마케팅 실무 케이스 3개
6-1. 구독 서비스 churn 분석
구독 서비스에서 가장 핵심 질문 — "신규 구독자가 언제 해지하나". Kaplan-Meier로 시간 분포를 그리면 보통 첫 7일·첫 30일·갱신 직전이 가파른 자리입니다. 각 자리에 맞는 다른 캠페인을 따로 디자인할 수 있습니다.
6-2. 광고 채널별 churn 비교
채널 A·B·C로 가입한 유저의 churn 곡선이 다릅니다. log-rank 검정으로 차이가 통계적으로 유의한지 확인하고, Cox PH로 hazard ratio 비교. 채널 LTV뿐 아니라 churn 측면에서 채널을 평가하는 자리입니다.
6-3. CRM 캠페인 효과의 hazard ratio 보고
CRM 푸시 받은 유저 vs 안 받은 유저의 hazard ratio를 보고서에 적습니다. "푸시 받은 유저의 hazard ratio 0.78 (95% CI [0.71, 0.85])" 같은 한 줄. 이탈 위험이 22% 감소한 효과가 통계적으로 보증되는 형태입니다.
{/* TODO_HUNY: huny가 운영 중인 채널·서비스에서 churn 곡선이 가장 가파르게 떨어지는 시점 한 가지 추가해주세요. D7·D30·갱신 직전 중 어느 자리에서 가장 큰 이탈이 나오는지. */}
7. Survival이 깨질 때 — 흔한 함정 3가지
7-1. 비례 위험성 가정이 깨진다
Cox PH는 변수 영향이 시간에 무관하다는 가정 위에 있습니다. 신규 채널 유저의 이탈 위험이 첫 7일은 매우 높고 그 이후는 정상으로 돌아오는 시간 의존 효과는 PH 가정을 깨뜨립니다. 이런 자리는 stratified Cox나 시간 의존 변수 추가로 가야 합니다.
7-2. censoring이 무작위가 아니다
Survival 분석의 censoring은 무작위(random)여야 합니다. "관측 기간 끝까지 안 떠난 유저"가 떠날 가능성이 다른 유저보다 체계적으로 다르면 추정이 편향됩니다. 운영에서는 관측 기간을 충분히 길게 잡고, censoring 비율이 너무 높지 않도록(50% 이하 권장) 설계합니다.
7-3. 이벤트 정의가 모호하다
"이탈"의 정의가 30일 미접속인지 60일인지에 따라 결과가 통째로 다릅니다. 운영팀과 정의를 한 번 합의하고 그 정의를 한 글에 적으세요. 정의를 명시하지 않은 churn 보고는 비교 자체가 깨집니다.
⚠️ 비례 위험성 검정은 필수
Cox PH 결과를 의사결정에 쓰기 전, 비례 위험성 검정(Schoenfeld residual·log-log plot)을 반드시 같이 보고해야 합니다. 가정이 깨졌으면 stratified Cox·Aalen additive·machine learning survival(Random Survival Forest 등)로 갈아타야 합니다.
8. 마치며 — 마케터의 이탈 분석 도구상자
마케터의 churn 분석 도구상자에는 이제 두 종류의 도구가 있어야 합니다.
- 분류 모델 — "다음 30일 안에 떠날까" — 단순, 빠른 알람
- Survival 분석 — "언제 떠날까, 변수 영향은?" — 시간 분포·hazard ratio
분류는 알람용으로 충분하지만, 캠페인 타이밍·콘텐츠 설계까지 가려면 시간 분포 정보가 필요합니다. Survival 분석은 그 자리를 정확히 채웁니다.
다음 글에서는 또 다른 자주 부딪히는 통계 함정, multiple testing의 FDR 보정을 다룹니다. 메트릭 10개 동시에 보면 어떻게 거짓 양성을 통제하느냐의 문제입니다.
참고
- Kaplan & Meier (1958), Nonparametric Estimation from Incomplete Observations, JASA — Kaplan-Meier 원전
- Cox (1972), Regression Models and Life-Tables, JRSS-B — Cox PH 원전
- Klein & Moeschberger (2003), Survival Analysis (2nd edition) — 표준 교과서
- lifelines — Python 라이브러리 — Kaplan-Meier·Cox PH 구현
- scikit-survival — ML survival 모델 — Random Survival Forest·gradient boosting
- huny.log 내부 글: BG/NBD LTV, 코호트 retention curve, Uplift 모델링
Top comments (0)