[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -2,75 +2,156 @@
|
||||
id: wiki-2026-0508-이탈률-churn-rate
|
||||
title: 이탈률(Churn Rate)
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Churn, User Churn, Attrition Rate, 이탈]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [analytics, retention, kpi, business-metrics]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: python
|
||||
framework: pandas-lifelines
|
||||
---
|
||||
|
||||
# [[이탈률(Churn Rate)|이탈률(Churn Rate]]
|
||||
# 이탈률(Churn Rate)
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
이탈률(Churn Rate)은 더 이상 게임을 플레이하지 않는 사용자의 비율을 측정하는 핵심 지표이다[1]. 주로 1에서 유지율(Retention Rate)을 차감하는 방식으로 계산되며, 구독 모델이나 무료 플레이 모델 등에서 고객 평생 가치(LTV)를 산정하는 데 필수적인 요소로 사용된다[2-4]. 이탈률이 높을 경우 기존 사용자 감소분을 메우기 위해 신규 사용자 확보에 지속적으로 비용을 지불해야 하므로, 결과적으로 게임의 성장과 수익성에 심각한 악영향을 미친다[1, 5].
|
||||
## 매 한 줄
|
||||
> **"매 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.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **이탈률의 정의와 계산 방법**
|
||||
* 이탈률은 기본적으로 **1에서 순유지율(Net Retention Rate)을 뺀 값**으로 계산된다(예: 유지율이 40%라면 이탈률은 60%가 됨)[2-4].
|
||||
* 또는 특정 기간(예: 28일 연속 미접속) 동안 게임을 플레이하지 않은 플레이어를 이탈자로 간주하여 계산할 수도 있다[2].
|
||||
* 금전적인 측면을 평가하기 위해 MRR 이탈률(MRR Churn Rate)을 사용하기도 하며, 이는 이전 기간 대비 현재 기간의 월간 반복 수익(MRR) 감소분을 통해 이탈로 인한 이익 손실을 측정한다[1].
|
||||
## 매 핵심
|
||||
|
||||
* **LTV 및 수익성에 미치는 영향**
|
||||
* 이탈률은 고객 평생 가치(LTV) 산출 공식의 분모에 해당하며, **LTV는 ARPU(가입자당 평균 수익)를 이탈률로 나눈 값**으로 정의된다[4, 6].
|
||||
* 아무리 ARPU가 높더라도 이탈률이 높으면 LTV가 급격히 잠식당하게 된다[5].
|
||||
* 높은 이탈률은 LTV를 고객 획득 비용(CAC) 임계값(예: $15) 아래로 너무 빨리 떨어뜨리므로, 건강한 경제 모델을 유지하고 LTV를 극대화하기 위해서는 이탈률을 낮추는 데 집중해야 한다[5, 7, 8].
|
||||
### 매 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.
|
||||
|
||||
* **이탈의 선행 지표 및 위험 관리**
|
||||
* 이탈은 초기 사용자 경험(FTUE)과 밀접하게 연관되어 있다. 첫 7일 유지율(D7)이 낮다는 것은 첫 사용자 경험이 실패했음을 의미하며, 이는 결국 높은 이탈률로 이어진다[5].
|
||||
* 만약 게임의 핵심 설정 및 온보딩 과정을 완료하는 데 14일 이상이 소요된다면 이탈 위험(Churn risk)은 급격히 증가한다[8, 9].
|
||||
* 높은 이탈률 하에서는 현상을 유지하기 위해 지속적으로 이탈한 유저를 신규 유저로 채워넣어야(backfill) 하므로 전체적인 게임의 성장을 저해하게 된다[1].
|
||||
### 매 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.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[유지율(Retention Rate)|유지율(Retention Rate]], 고객 평생 가치(LTV), 고객 획득 비용(CAC), [[유저 평균 매출(ARPU)|ARPU]]
|
||||
- **Projects/Contexts:** 가상 경제 시스템의 구조적 무결성과 데이터 기반 수익화 전략 분석, Mobile Game Development
|
||||
- **Contradictions/Notes:** 소스 전반에 걸쳐 이탈률이 게임 성장 및 LTV에 미치는 치명적인 악영향에 대해 이견 없이 동의하고 있으며, 이탈률과 유지율은 서로 반비례하는 구조임을 공통으로 강조하고 있습니다.
|
||||
### 매 응용
|
||||
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.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-29*
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Basic churn calculation
|
||||
```python
|
||||
import pandas as pd
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
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
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Cohort retention curve
|
||||
```python
|
||||
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
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Survival analysis (Kaplan-Meier)
|
||||
```python
|
||||
from lifelines import KaplanMeierFitter
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
def survival_curve(durations, event_observed):
|
||||
kmf = KaplanMeierFitter()
|
||||
kmf.fit(durations, event_observed)
|
||||
return kmf.survival_function_
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
# durations: days until churn (or censoring)
|
||||
# event_observed: 1 if churned, 0 if still active (right-censored)
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Cox proportional hazards (predictive)
|
||||
```python
|
||||
from lifelines import CoxPHFitter
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
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
|
||||
```python
|
||||
import lightgbm as lgb
|
||||
from sklearn.model_selection import train_test_split
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
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
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
### Negative churn (expansion > churn)
|
||||
```python
|
||||
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
|
||||
- 부모: [[Retention]] · [[KPI]] · [[Customer Analytics]]
|
||||
- 변형: [[Logo Churn]] · [[Revenue Churn]] · [[Net Revenue Retention]]
|
||||
- 응용: [[유니버스 LTV(Universe LTV)]] · [[CAC Payback]] · [[Cohort Analysis]]
|
||||
- Adjacent: [[Survival Analysis]] · [[Engagement Score]]
|
||||
|
||||
## 🤖 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 |
|
||||
|
||||
Reference in New Issue
Block a user