Churn Analysis (고객 이탈 분석)
고객 이탈을 예측하고 예방하기 위한 분석 프레임워크.
개요
Churn Analysis는 어떤 고객이, 왜, 언제 이탈하는지 파악하여 선제적 리텐션 전략을 수립하는 분석이다. 신규 고객 획득 비용이 기존 고객 유지 비용의 5-7배라는 점에서 비즈니스 핵심 분석이다.
이탈 정의
비즈니스 모델별 이탈 정의
| 비즈니스 |
이탈 정의 |
관찰 기간 |
| SaaS 구독 |
구독 해지 |
즉시 확인 |
| 이커머스 |
N일간 미구매 |
60-90일 |
| 모바일 앱 |
N일간 미접속 |
14-30일 |
| 금융 |
계좌 해지/휴면 |
90-180일 |
| 통신 |
번호 이동 |
즉시 확인 |
이탈 유형
자발적 이탈 (Voluntary)
├── 불만족 이탈: 서비스/가격 불만
├── 경쟁사 전환: 더 나은 대안 발견
└── 니즈 소멸: 더 이상 필요 없음
비자발적 이탈 (Involuntary)
├── 결제 실패: 카드 만료, 잔액 부족
└── 계정 정지: 정책 위반
분석 프레임워크
1. 이탈 예측 모델
특성 카테고리:
features = {
# 행동 특성
'days_since_last_login': '마지막 로그인 후 일수',
'sessions_last_30d': '최근 30일 세션 수',
'feature_adoption_rate': '기능 사용률',
'support_tickets': '문의 건수',
# 거래 특성
'total_revenue': '누적 매출',
'avg_order_value': '평균 주문 금액',
'purchase_frequency': '구매 빈도',
'days_since_last_purchase': '마지막 구매 후 일수',
# 인구통계
'tenure_days': '가입 후 일수',
'plan_type': '요금제',
'payment_method': '결제 수단',
# 참여도
'email_open_rate': '이메일 오픈율',
'nps_score': 'NPS 점수',
'review_count': '리뷰 작성 수'
}
모델 선택:
| 모델 |
장점 |
단점 |
| Logistic Regression |
해석 용이 |
복잡한 패턴 한계 |
| Random Forest |
비선형, 강건함 |
해석 어려움 |
| XGBoost/LightGBM |
높은 성능 |
과적합 주의 |
| Neural Network |
복잡한 패턴 |
데이터/해석 요구 |
2. 생존 분석 (Survival Analysis)
이탈 시점까지의 시간을 모델링.
from lifelines import CoxPHFitter, KaplanMeierFitter
# Kaplan-Meier 생존 곡선
kmf = KaplanMeierFitter()
kmf.fit(durations=df['tenure'], event_observed=df['churned'])
kmf.plot_survival_function()
# Cox Proportional Hazards
cph = CoxPHFitter()
cph.fit(df, duration_col='tenure', event_col='churned')
cph.print_summary()
해석:
- Hazard Ratio > 1: 이탈 위험 증가
- Hazard Ratio < 1: 이탈 위험 감소
3. 세그먼트별 분석
# 이탈 위험 세그먼트
segments = {
'high_value_at_risk': 'LTV 상위 20% & 이탈확률 > 0.7',
'new_user_struggling': '가입 30일 미만 & 참여도 하위 30%',
'dormant': '60일 이상 비활성',
'price_sensitive': '할인 시에만 구매'
}
이탈 원인 분석
정량적 분석
# 이탈자 vs 잔류자 특성 비교
comparison = df.groupby('churned').agg({
'sessions_last_30d': 'mean',
'support_tickets': 'mean',
'feature_adoption_rate': 'mean',
'nps_score': 'mean'
})
# SHAP 분석으로 중요 요인 파악
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test)
정성적 분석
| 방법 |
데이터 소스 |
인사이트 |
| Exit Survey |
해지 시 설문 |
직접적 이유 |
| Support Ticket |
문의 내용 분석 |
불만 패턴 |
| Session Recording |
사용자 행동 |
UX 문제 |
| In-depth Interview |
이탈 고객 인터뷰 |
깊은 맥락 |
리텐션 전략
세그먼트별 전략
| 세그먼트 |
전략 |
액션 |
| 고가치 위험군 |
개인화 케어 |
1:1 연락, VIP 혜택 |
| 신규 이탈 위험 |
온보딩 강화 |
가이드 투어, 성공 사례 |
| 휴면 고객 |
재활성화 |
Win-back 캠페인 |
| 가격 민감 |
가치 전달 |
ROI 리포트, 사례 공유 |
개입 타이밍
이탈 확률 기반 트리거:
- 0.3-0.5: 참여 유도 이메일
- 0.5-0.7: 할인 쿠폰 발송
- 0.7-0.9: CSM 직접 연락
- 0.9+: 해지 방어 오퍼
평가 지표
모델 성능
| 지표 |
설명 |
목표 |
| AUC-ROC |
분류 성능 |
>0.75 |
| Precision@k |
상위 k% 정밀도 |
>0.6 |
| Lift@10% |
상위 10% 리프트 |
>3x |
비즈니스 성과
# 이탈 방지 ROI 계산
def calculate_retention_roi(
targeted_customers,
intervention_cost_per_customer,
churn_rate_reduction,
avg_ltv
):
prevented_churns = targeted_customers * churn_rate_reduction
saved_revenue = prevented_churns * avg_ltv
total_cost = targeted_customers * intervention_cost_per_customer
roi = (saved_revenue - total_cost) / total_cost
return roi
# 예시
roi = calculate_retention_roi(
targeted_customers=1000,
intervention_cost_per_customer=50,
churn_rate_reduction=0.15,
avg_ltv=500
)
# ROI = 50%
핵심 KPI
| 지표 |
계산식 |
| Churn Rate |
이탈 고객 / 기초 고객 |
| Retention Rate |
1 - Churn Rate |
| Net Revenue Retention |
(기존 매출 + 확장 - 이탈) / 기존 매출 |
| Customer Lifetime Value |
평균 매출 × 평균 수명 × 마진 |
구현 예시
파이프라인
# 1. 데이터 준비
df = prepare_churn_features(raw_data)
# 2. 학습/테스트 분할
X_train, X_test, y_train, y_test = train_test_split(
df.drop('churned', axis=1),
df['churned'],
test_size=0.2,
stratify=df['churned']
)
# 3. 모델 학습
model = LGBMClassifier(
class_weight='balanced',
n_estimators=500,
learning_rate=0.05
)
model.fit(X_train, y_train)
# 4. 예측 및 우선순위화
df['churn_probability'] = model.predict_proba(X)[:, 1]
df['priority_score'] = df['churn_probability'] * df['ltv']
high_priority = df.nlargest(100, 'priority_score')
자동화
# Airflow DAG
schedule: "0 9 * * *" # 매일 오전 9시
tasks:
- extract_features
- predict_churn
- segment_customers
- trigger_campaigns
- update_crm
산업별 벤치마크
| 산업 |
평균 이탈률 |
우수 기준 |
| SaaS B2B |
5-7%/년 |
<5% |
| SaaS B2C |
3-5%/월 |
<3% |
| 이커머스 |
20-25%/년 |
<15% |
| 통신 |
2-3%/월 |
<1.5% |
| 은행 |
10-15%/년 |
<8% |
주의사항
흔한 함정
- 단기 최적화: 할인 남발 → 수익성 악화
- 잘못된 타겟팅: 어차피 안 떠날 고객에게 혜택
- 너무 늦은 개입: 이미 마음 떠난 후
- 원인 무시: 근본 문제 해결 없이 혜택만
윤리적 고려
- 개인정보 활용 동의
- 차별적 타겟팅 방지
- 압박성 리텐션 지양