콘텐츠로 이동
Data Prep
상세

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%

주의사항

흔한 함정

  1. 단기 최적화: 할인 남발 → 수익성 악화
  2. 잘못된 타겟팅: 어차피 안 떠날 고객에게 혜택
  3. 너무 늦은 개입: 이미 마음 떠난 후
  4. 원인 무시: 근본 문제 해결 없이 혜택만

윤리적 고려

  • 개인정보 활용 동의
  • 차별적 타겟팅 방지
  • 압박성 리텐션 지양