DEV Community

Cover image for Survival 분석으로 이탈 예측 — 마케팅 churn에 Kaplan-Meier·Cox PH
HyunSeok Jeong
HyunSeok Jeong

Posted on • Originally published at blog.trysitely.com

Survival 분석으로 이탈 예측 — 마케팅 churn에 Kaplan-Meier·Cox PH

"이 유저가 6개월 안에 떠날 확률은?"이 마케팅 BI에서 자주 나오는 질문입니다. 그런데 더 운영적인 질문은 "언제 떠날까"입니다. 떠나는 시점의 분포를 알면 윈백 캠페인을 적절한 타이밍에 보낼 수 있습니다. Survival 분석은 이 질문의 표준 도구입니다. Kaplan-Meier 곡선으로 시간 분포를 그리고, Cox PH 모델로 변수별 영향을 hazard ratio로 측정합니다. 이탈 분석에 들어가야 할 다른 한 도구를 정리합니다.

1. "떠날까"가 아니라 "언제 떠날까"

마케팅 분석에서 churn(이탈)은 보통 이진 분류 문제로 다뤄집니다 — "이 유저가 다음 30일 안에 떠날까". 로지스틱 회귀나 트리 모델로 풀고 정확도·AUC로 평가합니다.

이 프레임의 한계는 시간 정보를 잃는다는 점입니다.

  • "떠난다"의 답이 0/1이라 정확히 언제 떠나는지 안 보임
  • 학습 데이터에 아직 안 떠난 유저(censored data)를 어떻게 다룰지 애매함
  • 변수 영향을 "확률 변화"로만 표현 — 시간 척도와 무관

Survival 분석은 시간을 명시적으로 다룹니다. 출발점은 시간을 변수로 두는 두 함수입니다.

  • S(t)S(t) — 시점 tt 까지 안 떠나고 살아 있을 확률 (survival function)
  • h(t)h(t) — 시점 tt 에 막 떠나려는 순간적 위험률 (hazard function)

수학적 관계는 다음과 같습니다.

S(t)=exp(0th(u)du),h(t)=dlnS(t)dt S(t) = \exp\left(-\int_0^t h(u)\, du\right), \quad h(t) = -\frac{d \ln S(t)}{dt}

이 두 함수가 churn 분석의 모든 답을 줍니다. 시간별 이탈 확률, 누적 이탈, 변수가 hazard에 미치는 영향, 미디언 생존 시간 등.

Kaplan-Meier 곡선과 hazard 변화 다이어그램
시간이 지나면서 살아남은 유저 비율 곡선이 S(t). 곡선이 가장 가파르게 떨어지는 자리가 hazard h(t)가 가장 큰 시점이다.

📌 이 글에서 다루는 것

Survival 분석은 의학·생물학에서 출발해 마케팅 churn 분석에 본격 도입된 지 10년이 넘었습니다. Kaplan-Meier(비모수)·Cox PH(준모수) 두 도구가 표준이고, lifelines·scikit-survival 같은 Python 라이브러리로 한 줄 코드 수준에서 다룹니다. 마케터가 이탈 분석 보고서를 받을 때 알아야 할 직관과 운영 적용을 정리합니다.

2. Censoring — survival 분석의 핵심 자산

Survival 분석이 단순 분류와 가장 다른 자리가 censoring입니다. 학습 데이터에는 두 종류의 유저가 있습니다.

  • Event observed — 관측 기간 안에 떠난 유저 (실제 이탈 시점 TT 알 수 있음)
  • Censored — 관측 기간 안에 안 떠난 유저 (이탈 시점 TT > 관측 종료 시점)

단순 분류는 이 두 그룹을 어떻게 다룰지 애매합니다. censored 유저를 "안 떠남(0)"으로 두면 학습이 편향되고, 빼면 정보 손실이 큽니다.

Survival 분석은 censored 유저의 정보를 자연스럽게 활용합니다. "관측 기간 동안 안 떠남"도 신호로 사용해 likelihood에 기여합니다. 이 기능 하나가 마케팅 데이터에 survival을 도입할 가치의 절반입니다.

3. Kaplan-Meier 곡선 — 비모수 추정의 표준

Kaplan-Meier는 분포 가정 없이 S(t)S(t) 를 그대로 추정하는 비모수 도구입니다. 한 줄 식은 다음입니다.

S^(t)=tit(1dini) \hat S(t) = \prod_{t_i \leq t} \left(1 - \frac{d_i}{n_i}\right)

여기서 tit_i 는 어떤 유저든 떠난 시점, did_i 는 그 시점에 떠난 수, nin_i 는 그 직전까지 살아 있던 수입니다. 매 시점에 떠난 비율을 곱해가는 형태로 생존 곡선이 나옵니다.

운영적으로 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) 모델이 줍니다.

h(tX)=h0(t)exp(βX) h(t \mid X) = h_0(t) \cdot \exp(\beta^\top X)

핵심 가정은 비례 위험성(proportional hazards) — 변수의 영향이 시간에 무관하게 hazard를 곱해주는 형태로 작용한다는 가정. 이 가정 위에서 베이스라인 hazard h0(t)h_0(t) 를 추정하지 않고도 변수 효과 β\beta 를 추정할 수 있습니다.

운영자가 받는 결과는 hazard ratio exp(βj)\exp(\beta_j) 형태입니다.

  • exp(βj)=1.5\exp(\beta_j) = 1.5 — 그 변수가 1단위 증가하면 이탈 위험이 50% 증가
  • exp(βj)=0.7\exp(\beta_j) = 0.7 — 그 변수가 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
Enter fullscreen mode Exit fullscreen mode

이게 본문의 유일한 코드입니다. 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
답하는 질문 이탈 시점 분포·변수 영향 미래 거래 횟수·살아있을 확률
핵심 출력 S(t)S(t) , 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개 동시에 보면 어떻게 거짓 양성을 통제하느냐의 문제입니다.

참고

Top comments (0)