Files
2nd/10_Wiki/Topics/Other/이탈률(Churn Rate).md
Antigravity Agent f8b21af4be Wiki cleanup: error-doc removal, dedup merge, link normalization
10_Wiki/Topics 대규모 정리:
- 오류 캡처/미완성 stub 문서 227개 제거
- 교차폴더 중복 43클러스터 병합 (63파일 → redirect)
- 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건
- 카테고리 MOC 6개 신규 생성
- Graph 섹션 미해결 related-keyword 링크 10,058건 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 23:52:15 +09:00

5.9 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-이탈률-churn-rate 이탈률(Churn Rate) 10_Wiki/Topics verified self
Churn
User Churn
Attrition Rate
이탈
none A 0.9 applied
analytics
retention
kpi
business-metrics
2026-05-10 pending
language framework
python pandas-lifelines

이탈률(Churn Rate)

매 한 줄

"매 churn 매 retention 의 의 mirror — 매 leak rate 의 quantify". 매 SaaS (5% monthly = catastrophe) 매 game (D30 retention 30% = norm), 매 의 의 의 의 의 metric 매 universal — 매 user lost / total user 의 unit time 의 의 의. 매 2026 modern stack 매 Cox proportional hazards + churn-prediction LightGBM 매 standard.

매 핵심

매 churn 의 정의 variants

  • logo churn (count): 매 #lost / #total. 매 simple.
  • revenue churn (gross): 매 lost MRR / total MRR. 매 enterprise SaaS 매 critical.
  • net revenue churn: 매 (lost - expansion) / total. 매 < 0 (negative churn) 매 holy grail.
  • active churn vs passive churn: 매 cancel button 매 / 매 expired card. 매 win-back 매 different strategy.

매 measurement window 매 매 매

  • 매 daily / weekly / monthly / quarterly. 매 game 매 D1/D7/D30 매 standard. 매 SaaS 매 monthly.
  • cohort-based: 매 sign-up week 의 의 group 의 churn curve 의 trace.
  • rolling: 매 last-N-day window 매 trailing.

매 응용

  1. 매 SaaS health: <5% monthly churn 매 healthy, >7% 매 alarm.
  2. 매 mobile game: D1 ~40-50%, D7 ~20%, D30 ~5-10% retention (= 90-95% churn by D30).
  3. 매 telecom: 매 churn prediction 매 ML 매 retention offer trigger.
  4. 매 streaming (Netflix etc.): 매 voluntary cancel + 매 dunning (passive).
  5. 매 freemium → premium conversion 매 churn 의 의 inverse calculation.

💻 패턴

Basic churn calculation

import pandas as pd

def monthly_churn(users: pd.DataFrame, month: str) -> float:
    """users: [user_id, signup_date, last_active_date]"""
    start = pd.to_datetime(month)
    end = start + pd.offsets.MonthEnd(1)
    active_at_start = users[users["last_active_date"] >= start - pd.Timedelta(days=30)]
    churned = active_at_start[active_at_start["last_active_date"] < end - pd.Timedelta(days=30)]
    return len(churned) / len(active_at_start) if len(active_at_start) else 0

Cohort retention curve

def cohort_retention(events: pd.DataFrame) -> pd.DataFrame:
    """events: [user_id, event_date]. Returns cohort x days_since_signup matrix."""
    first = events.groupby("user_id")["event_date"].min().rename("cohort")
    df = events.merge(first, on="user_id")
    df["days_since"] = (df["event_date"] - df["cohort"]).dt.days
    df["cohort_week"] = df["cohort"].dt.to_period("W")
    matrix = (
        df.groupby(["cohort_week", "days_since"])["user_id"]
        .nunique()
        .unstack(fill_value=0)
    )
    return matrix.div(matrix.iloc[:, 0], axis=0)  # normalize to D0

Survival analysis (Kaplan-Meier)

from lifelines import KaplanMeierFitter

def survival_curve(durations, event_observed):
    kmf = KaplanMeierFitter()
    kmf.fit(durations, event_observed)
    return kmf.survival_function_

# durations: days until churn (or censoring)
# event_observed: 1 if churned, 0 if still active (right-censored)

Cox proportional hazards (predictive)

from lifelines import CoxPHFitter

def churn_hazard(df: pd.DataFrame):
    """df: [duration, event, plan, monthly_usage, support_tickets, ...]"""
    cph = CoxPHFitter()
    cph.fit(df, duration_col="duration", event_col="event")
    return cph  # cph.hazard_ratios_ shows feature impact

LightGBM churn prediction

import lightgbm as lgb
from sklearn.model_selection import train_test_split

def train_churn_model(features: pd.DataFrame, churn_label: pd.Series):
    X_tr, X_te, y_tr, y_te = train_test_split(features, churn_label, stratify=churn_label)
    model = lgb.LGBMClassifier(
        n_estimators=500, learning_rate=0.05,
        class_weight="balanced", num_leaves=63
    )
    model.fit(X_tr, y_tr, eval_set=[(X_te, y_te)], callbacks=[lgb.early_stopping(20)])
    return model

Negative churn (expansion > churn)

def net_revenue_churn(start_mrr, lost_mrr, expansion_mrr) -> float:
    return (lost_mrr - expansion_mrr) / start_mrr  # negative = good

매 결정 기준

상황 metric
매 SMB SaaS logo churn (monthly)
매 Enterprise SaaS net revenue churn
매 mobile game D1/D7/D30 retention curve
매 telecom / streaming survival + ML prediction
매 marketplace cohort retention + GMV per cohort

기본값: 매 cohort retention 매 D1/D7/D30 + 매 monthly logo churn 매 dual-track tracking.

🔗 Graph

🤖 LLM 활용

언제: 매 product / business 매 health 의 measurement, 매 retention 매 effort 의 ROI 의 prove, 매 churn-prediction model 의 build. 언제 X: 매 single-purchase 매 product (no recurring) — 매 LTV / repeat-rate 의 의 substitute.

안티패턴

  • 매 averaging across cohorts: 매 hide newer-cohort 매 improvement / regression.
  • 매 treating active churn = passive churn: 매 dunning fix 매 retention campaign 매 confused.
  • 매 vanity tracking: 매 churn 매 measure 만 매 매, 매 root-cause 의 의 의 segmentation 의 의 의 X.
  • 매 D30 only: 매 long-tail (D90/D180) 매 ignore — 매 LTV 매 underestimate.

🧪 검증 / 중복

  • Verified (Reichheld The Loyalty Effect, ChartMogul SaaS benchmarks 2025-2026, lifelines library docs).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — churn variants + cohort curves + KM/Cox/LightGBM code