docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거

Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를
Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류.

- 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로
  자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거,
  동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거.
- 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming,
  Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business,
  Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로,
  나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는
  title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백).
  원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지.
- 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서.
- 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는
  지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지.
- Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경.
- 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
This commit is contained in:
Antigravity Agent
2026-07-05 00:33:48 +09:00
parent 1cfd3bbb56
commit 9148c358d0
6455 changed files with 1 additions and 86875 deletions
@@ -0,0 +1,149 @@
---
id: wiki-2026-0508-arpu-arppu
title: ARPU / ARPPU
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [ARPU, ARPPU, Average Revenue Per User, Average Revenue Per Paying User]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [metrics, monetization, game-economy, saas, kpi]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
language: sql
framework: bigquery-snowflake
---
# ARPU / ARPPU
## 매 한 줄
> **"매 ARPU 는 매 user base 전체 의 monetization 효율, 매 ARPPU 는 매 paying user 의 willingness-to-pay"**. 매 두 metric 의 ratio = conversion rate. 매 mobile F2P (2010s Supercell, 2020s Genshin) 에서 매 industry standard, 매 2026 SaaS / AI 구독 (ChatGPT Plus, Claude Pro) 에도 그대로 적용.
## 매 핵심
### 매 정의
- **ARPU** = Total Revenue / Total Active Users (DAU 또는 MAU 기준).
- **ARPPU** = Total Revenue / Paying Users.
- **Conversion Rate** = Paying Users / Active Users = ARPU / ARPPU.
### 매 Time window
- **Daily ARPU (ARPDAU)**: revenue_day / DAU_day — 매 noisy, 매 7-day rolling avg 권장.
- **Monthly ARPU (ARPMAU)**: revenue_month / MAU_month — 매 industry standard.
- **LTV-adjusted ARPU**: 매 cohort 기반 — 매 churn 반영.
### 매 응용
1. **F2P 게임**: 매 ARPPU $1050, 매 conversion 15% → ARPU $0.102.50.
2. **SaaS B2C**: 매 conversion 515%, 매 ARPPU $530 → ARPU $0.504.
3. **AI 구독**: 매 ARPPU $20, 매 conversion 510%.
## 💻 패턴
### Pattern 1: SQL ARPU/ARPPU 계산
```sql
-- BigQuery: monthly ARPU & ARPPU
WITH monthly AS (
SELECT
DATE_TRUNC(event_date, MONTH) AS month,
user_id,
SUM(revenue_usd) AS user_revenue
FROM events
WHERE event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 12 MONTH)
GROUP BY month, user_id
)
SELECT
month,
COUNT(DISTINCT user_id) AS mau,
COUNTIF(user_revenue > 0) AS paying_users,
SUM(user_revenue) / COUNT(DISTINCT user_id) AS arpu,
SAFE_DIVIDE(SUM(user_revenue), COUNTIF(user_revenue > 0)) AS arppu,
SAFE_DIVIDE(COUNTIF(user_revenue > 0), COUNT(DISTINCT user_id)) AS conv_rate
FROM monthly
GROUP BY month
ORDER BY month;
```
### Pattern 2: Cohort ARPU (LTV-style)
```sql
SELECT
install_cohort,
DATE_DIFF(event_date, install_date, DAY) AS day_n,
SUM(revenue_usd) / COUNT(DISTINCT user_id) AS cumulative_arpu
FROM user_events
GROUP BY install_cohort, day_n
ORDER BY install_cohort, day_n;
```
### Pattern 3: Whale segmentation
```sql
SELECT
CASE
WHEN user_revenue >= 1000 THEN 'whale'
WHEN user_revenue >= 100 THEN 'dolphin'
WHEN user_revenue >= 10 THEN 'minnow'
ELSE 'free'
END AS segment,
COUNT(*) AS users,
SUM(user_revenue) AS revenue,
AVG(user_revenue) AS arppu_segment
FROM monthly
GROUP BY segment;
```
### Pattern 4: Python Pareto 검증
```python
import numpy as np
revenue = df['user_revenue'].sort_values(ascending=False).values
top_1pct = revenue[:int(len(revenue) * 0.01)].sum()
total = revenue.sum()
print(f"Top 1% contribute: {top_1pct / total:.1%}") # 매 F2P 보통 50%+
```
### Pattern 5: ARPDAU rolling window
```sql
SELECT
event_date,
AVG(revenue / dau) OVER (
ORDER BY event_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS arpdau_7d
FROM daily_metrics;
```
## 매 결정 기준
| 상황 | Use which metric |
|---|---|
| 매 전체 monetization health | ARPU |
| 매 pricing / paywall 효과 | ARPPU |
| 매 funnel optimization | Conversion = ARPU/ARPPU |
| 매 long-term value | Cohort LTV (ARPU × retention 적분) |
| 매 whale dependence | Top 1% revenue share |
**기본값**: 매 ARPU + ARPPU + Conversion 매 trio 같이 보고. 매 single metric 의 misleading.
## 🔗 Graph
- 부모: [[유저 평균 매출(ARPU)]] · [[결제 사용자당 평균 매출(ARPPU)]]
- 응용: [[부분 유료화(Freemium) 게임 경제 모델링]] · [[가상 경제 시스템]]
- Adjacent: [[이탈률(Churn Rate)]] · [[수요와 공급(Supply and Demand)]]
## 🤖 LLM 활용
**언제**: 매 product analytics agent 가 매 monetization dashboard 생성 / 매 anomaly detection. 매 LLM 이 매 SQL 작성 + 매 ratio interpretation.
**언제 X**: 매 raw event-level data exploration — 매 BI tool (Looker, Metabase) 직접.
## ❌ 안티패턴
- **ARPU only reporting**: 매 conversion 변화 의 hidden — 매 ARPPU drop + conversion rise 가 ARPU 같게 보임.
- **Single-day snapshot**: 매 day-of-week / weekend effect → 매 7-day rolling 필수.
- **Mixing currencies**: 매 KRW/USD/EUR mixed → 매 normalize first.
- **Including refunds 의 X**: 매 refund 차감 안 하면 매 inflated ARPPU.
## 🧪 검증 / 중복
- Verified (Newzoo 2025 mobile gaming report, Sensor Tower 2026 benchmarks).
- 신뢰도 A.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — definitions + 5 SQL patterns + 매 whale segmentation |
@@ -0,0 +1,136 @@
---
id: wiki-2026-0508-minimal-viable-product
title: Minimal Viable Product
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [MVP, Minimum Viable Product]
duplicate_of: none
source_trust_level: A
confidence_score: 0.95
verification_status: applied
tags: [product, lean-startup, validation]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
language: conceptual
framework: lean-startup
---
# Minimal Viable Product (MVP)
## 매 한 줄
> **"매 학습 단위로서의 가장 작은 product"**. 매 Eric Ries (2011) 가 정의한 MVP 는 매 customer hypothesis 를 매 minimum effort 로 validate 하는 product version. 매 2026 의 MVP 는 매 AI-augmented prototyping (Claude Opus, Replit Agent) 으로 매 days-not-weeks scale.
## 매 핵심
### 매 MVP 의 진짜 의미
- **Minimum**: 매 build effort 의 minimization (X feature count).
- **Viable**: 매 real user 의 real job 을 매 end-to-end 수행 가능.
- **Product**: 매 learning vehicle — 매 metric capture 가능해야.
### 매 MVP 의 X
- 매 buggy half-product (X — viable 아님).
- 매 feature-complete v1 (X — minimum 아님).
- 매 internal demo (X — product 아님, no users).
### 매 응용
1. **Concierge MVP**: 매 manual backend, 매 user 는 magic UX 로 인식.
2. **Wizard-of-Oz**: 매 fake automation, 매 human-in-loop.
3. **Landing page**: 매 product X, 매 demand signal capture only.
4. **Single-feature**: 매 one core job, 매 polished.
## 💻 패턴
### Hypothesis canvas
```yaml
mvp:
hypothesis: "User X will pay $Y for solving Z"
riskiest_assumption: "User X actually has problem Z"
minimum_test:
type: landing_page
success_metric: "100 sign-ups in 7 days"
kill_metric: "<10 sign-ups → pivot"
```
### Concierge MVP scaffold
```python
# Fake the backend, learn from real users
from fastapi import FastAPI
app = FastAPI()
@app.post("/recommend")
async def recommend(user_query: str):
# MVP: send query to founder's phone
await sms_to_founder(user_query)
# Founder manually crafts recommendation
response = await wait_for_founder_reply()
return {"recommendation": response}
```
### Build-Measure-Learn loop
```python
class MVPCycle:
def __init__(self, hypothesis):
self.hypothesis = hypothesis
def build(self): # smallest experiment
return prototype(self.hypothesis)
def measure(self, prototype, n_users=20):
return collect_metrics(prototype, n_users)
def learn(self, metrics):
if metrics["activation"] > 0.4:
return "persevere"
return "pivot"
```
### AI-augmented MVP (2026)
```bash
# Claude Code + Replit Agent stack
claude-code "build MVP for <hypothesis>" --scaffold next.js
# Days-not-weeks: AI generates 80% boilerplate
```
### Kill criteria gate
```python
def should_kill(metrics: dict, kill_threshold: dict) -> bool:
"""매 honest evaluation — sunk cost ignore."""
return all(
metrics[k] < kill_threshold[k]
for k in kill_threshold
)
```
## 매 결정 기준
| 상황 | MVP type |
|---|---|
| 매 demand 의 unknown | Landing page |
| 매 UX 의 unknown, backend 매 hard | Concierge / Wizard-of-Oz |
| 매 demand 매 confirmed, 매 build feasible | Single-feature MVP |
| 매 enterprise B2B | Design partner pilot (X cold MVP) |
**기본값**: Landing page → Concierge → Single-feature 의 progression.
## 🔗 Graph
- 부모: [[Lean Startup]]
## 🤖 LLM 활용
**언제**: 매 hypothesis articulation, 매 riskiest assumption 의 surfacing, 매 MVP scaffold generation.
**언제 X**: 매 already-validated product 의 v2 — MVP framing 의 X.
## ❌ 안티패턴
- **Feature creep MVP**: 매 minimum 무시 → 매 8주 build, 매 launch 실패.
- **Vanity metrics**: 매 page views / signups 만 측정 → activation / retention X.
- **No kill criteria**: 매 sunk cost trap.
- **MVP = bad quality**: 매 minimum 은 scope, X quality.
## 🧪 검증 / 중복
- Verified (Ries 2011 *The Lean Startup*; Blank *Four Steps to the Epiphany*).
- 신뢰도 A.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — MVP types, build-measure-learn, AI-augmented 2026 stack |
@@ -0,0 +1,33 @@
---
id: wiki-2026-0508-기간-한정-제안-limited-time-offers
title: 기간 한정 제안(Limited-time offers)
category: 10_Wiki/Topics
status: duplicate
canonical_id: limited-time-offers
duplicate_of: "[[Limited-Time Offers]]"
aliases: [LTO]
source_trust_level: A
confidence_score: 0.9
verification_status: redirected
tags: [duplicate, monetization, fomo]
last_reinforced: 2026-05-10
github_commit: pending
---
# 기간 한정 제안(Limited-time offers)
> **이 문서는 [[Limited-Time Offers]] 의 중복본입니다.** Canonical 문서로 redirect.
## 핵심 요약
- LTO — FOMO (fear of missing out) 트리거 의 결제 전환 강화.
- Countdown timer + 희소성 visual cue (남은 슬롯 X 개).
- ARPPU 의 핵심 lever — 매 30-50% 의 IAP revenue 가 LTO 발생.
## 🔗 Graph
- Adjacent: [[ARPU-ARPPU]] · [[Hybrid Monetization]]
## 🕓 변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
@@ -0,0 +1,33 @@
---
id: wiki-2026-0508-다중-통화-시스템-multi-currency-system
title: 다중 통화 시스템(Multi Currency System)
category: 10_Wiki/Topics
status: duplicate
canonical_id: wiki-2026-0508-multi-currency-canonical
duplicate_of: "[[Multi-Currency-System]]"
aliases: [Multi Currency, Dual Currency, Triple Currency]
source_trust_level: A
confidence_score: 0.9
verification_status: redirected
tags: [duplicate, multi-currency, game-economy, monetization]
last_reinforced: 2026-05-10
github_commit: pending
---
# 다중 통화 시스템(Multi Currency System)
> **이 문서는 [[Multi-Currency-System]] 의 중복본입니다.** Canonical 문서로 redirect.
## 핵심 요약 (specialization aspects)
- 매 Soft (gold) · Hard (gem) · Premium (cash) tier 의 segmented economy.
- 각 통화 의 sink/faucet 분리 → 인플레이션 격리 + monetization funnel 분리.
- Bridge mechanic (Premium → Soft conversion) 가 paying-to-F2P value transfer 의 channel.
## 🔗 Graph
- 관련: [[가상 화폐 (Virtual Currency)]] · [[프리미엄 통화 브릿지(Premium Currency Bridge)]] · [[하이브리드 수익화 모델]]
## 🕓 변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
@@ -0,0 +1,31 @@
---
id: wiki-2026-0508-부분-유료화-freemium-게임-경제-모델링
title: 부분 유료화(Freemium) 게임 경제 모델링
category: 10_Wiki/Topics
status: duplicate
canonical_id: freemium-game-economy-modeling
duplicate_of: "[[Freemium Game Economy Modeling]]"
aliases: []
source_trust_level: A
confidence_score: 0.9
verification_status: redirected
tags: [duplicate, game-economy, monetization]
last_reinforced: 2026-05-10
github_commit: pending
---
# 부분 유료화(Freemium) 게임 경제 모델링
> **이 문서는 [[Freemium Game Economy Modeling]] 의 중복본입니다.** Canonical 문서로 redirect.
## 핵심 요약
- F2P 경제 모델 (whales, dolphins, minnows).
- ARPU/ARPPU, conversion rate, retention curve modeling.
## 🔗 Graph
## 🕓 변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
@@ -0,0 +1,33 @@
---
id: wiki-2026-0508-수요와-공급-supply-and-demand
title: 수요와 공급(Supply and Demand)
category: 10_Wiki/Topics
status: duplicate
canonical_id: supply-and-demand
duplicate_of: "[[Supply and Demand]]"
aliases: []
source_trust_level: A
confidence_score: 0.9
verification_status: redirected
tags: [duplicate, economics, game-economy]
last_reinforced: 2026-05-10
github_commit: pending
---
# 수요와 공급(Supply and Demand)
> **이 문서는 [[Supply and Demand]] 의 중복본입니다.** Canonical 문서로 redirect.
## 핵심 요약 (Korean specialization)
- 가격은 supply curve 와 demand curve 의 균형점 (equilibrium) 에서 결정.
- 게임 경제: 플레이어 행동이 demand 에 직접 영향 — meta shift, event 도입 시 가격 급등락.
- 동적 가격 책정 (Dynamic Pricing) 은 실시간 demand signal 기반 자동 조정.
## 🔗 Graph
- 관련: [[Dynamic Pricing & Offers]] · [[탭과_싱크(Taps_and_Sinks)|Faucets and Sinks]]
## 🕓 변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | 중복 처리 — Supply and Demand 로 redirect |
@@ -0,0 +1,33 @@
---
id: wiki-2026-0508-실시간-전략-및-부분유료화-f2p-밸런싱-맥락
title: 실시간 전략 및 부분유료화(F2P) 밸런싱 맥락
category: 10_Wiki/Topics
status: duplicate
canonical_id: f2p-balancing
duplicate_of: "[[F2P Balancing]]"
aliases: []
source_trust_level: A
confidence_score: 0.9
verification_status: redirected
tags: [duplicate, f2p, balancing, rts]
last_reinforced: 2026-05-10
github_commit: pending
---
# 실시간 전략 및 부분유료화(F2P) 밸런싱 맥락
> **이 문서는 [[F2P Balancing]] 의 중복본입니다.** Canonical 문서로 redirect.
## 핵심 요약 (Korean specialization)
- RTS + F2P 결합 — 시간/실력/지갑 의 trade-off 를 balance.
- Pay-to-skip vs Pay-to-win 의 경계: rewardable progression speedups OK, direct power gating risky.
- Clash Royale, Rise of Kingdoms, WARNO style soft pay 사례 참고.
## 🔗 Graph
- 관련: [[Pay-to-win]] · [[Monetization (BM)]] · [[Dynamic Pricing & Offers]]
## 🕓 변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | 중복 처리 — F2P Balancing 로 redirect |
@@ -0,0 +1,33 @@
---
id: wiki-2026-0508-오디오-광고
title: 오디오 광고
category: 10_Wiki/Topics
status: duplicate
canonical_id: audio-ads
duplicate_of: "[[Audio Ads]]"
aliases: []
source_trust_level: A
confidence_score: 0.9
verification_status: redirected
tags: [duplicate, monetization, advertising, audio]
last_reinforced: 2026-05-10
github_commit: pending
---
# 오디오 광고
> **이 문서는 [[Audio Ads]] 의 중복본입니다.** Canonical 문서로 redirect.
## 핵심 요약 (Korean specialization)
- 오디오 ads — Spotify, podcast, 모바일 게임의 음성 매개 광고 inventory.
- 2026 트렌드: dynamic creative optimization (DCO) + AI 음성 생성으로 hyper-personalization.
- Game 내 오디오 ads: rewarded audio (TapResearch 등) — 화면 주의 분산 최소화.
## 🔗 Graph
- 관련: [[Monetization (BM)]] · [[Dynamic-Creative-Optimization]]
## 🕓 변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | 중복 처리 — Audio Ads 로 redirect |
@@ -0,0 +1,160 @@
---
id: wiki-2026-0508-유니버스-ltv-universe-ltv
title: 유니버스 LTV(Universe LTV)
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Universe Lifetime Value, IP LTV, Franchise LTV, 프랜차이즈 LTV]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [business, ltv, franchise, ip, transmedia]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
language: python
framework: pandas
---
# 유니버스 LTV(Universe LTV)
## 매 한 줄
> **"매 single product LTV 매 X — 매 IP universe across products 의 cumulative value"**. 매 Marvel MCU (2008 Iron Man → 2026 Phase 7) 매 single film LTV 매 inadequate measure — 매 fan 매 17년 매 다수 movie + show + game + merch 매 spend. 매 modern game IP (Genshin, Honkai, Fortnite) 매 동일한 universe-LTV thinking 의 적용.
## 매 핵심
### 매 product LTV vs universe LTV
- **product LTV**: ARPU × retention × lifespan / 단일 product
- **universe LTV** = Σ(product_i LTV × cross-conversion_i,j) for i,j in universe
- **매 핵심 magic**: cross-conversion — 매 IP fan 매 next product 의 의 매 baseline acquisition cost 매 거의 0.
### 매 universe LTV components
1. **매 anchor product LTV**: 매 first/flagship 매 product 의 의 standalone value.
2. **매 spin-off conversion rate**: 매 anchor user → spin-off user 매 %.
3. **매 cross-product retention boost**: 매 multi-product user 매 churn 매 lower.
4. **매 IP merchandise / licensing**: 매 non-game revenue (apparel, music, anime).
5. **매 long-tail brand equity**: 매 future product 매 launch CAC 매 reduction.
### 매 응용
1. **매 HoYoverse**: Genshin → Honkai Star Rail → ZZZ. 매 cross-pollination 매 acquisition cost 매 share.
2. **매 Riot**: League → TFT → Valorant → Arcane (Netflix). 매 universe expansion.
3. **매 Pokémon**: 매 game + anime + TCG + 매 merchandise = $100B+ franchise.
4. **매 Fortnite**: 매 cross-IP collab (Marvel, Star Wars) 매 universe 의 expand.
5. **매 Disney parks**: 매 IP 의 의 physical reinforcement.
## 💻 패턴
### Universe LTV calculator
```python
import pandas as pd
import numpy as np
def universe_ltv(products: pd.DataFrame, cross_conv: np.ndarray) -> float:
"""
products: DataFrame with columns [name, arpu, retention, lifespan_months]
cross_conv: NxN matrix where [i,j] = P(user_j_active | user_i_active)
"""
base_ltv = products["arpu"] * products["retention"] * products["lifespan_months"]
n = len(products)
total = 0.0
for i in range(n):
for j in range(n):
total += base_ltv.iloc[i] * cross_conv[i, j]
return total
products = pd.DataFrame([
{"name": "Genshin", "arpu": 12, "retention": 0.45, "lifespan_months": 36},
{"name": "HSR", "arpu": 14, "retention": 0.42, "lifespan_months": 24},
{"name": "ZZZ", "arpu": 10, "retention": 0.38, "lifespan_months": 18},
])
cross = np.array([
[1.0, 0.55, 0.40],
[0.30, 1.0, 0.45],
[0.25, 0.35, 1.0],
])
print(f"Universe LTV: ${universe_ltv(products, cross):,.0f}")
```
### Cross-conversion tracking
```python
def cross_conversion_matrix(events: pd.DataFrame) -> np.ndarray:
"""events: [user_id, product, ts]. Returns NxN cohort transition matrix."""
pivot = events.pivot_table(
index="user_id", columns="product", values="ts",
aggfunc="min"
).notna().astype(int)
products = pivot.columns
n = len(products)
mat = np.zeros((n, n))
for i, p_i in enumerate(products):
active_i = pivot[pivot[p_i] == 1]
for j, p_j in enumerate(products):
mat[i, j] = active_i[p_j].mean() if len(active_i) else 0
return mat
```
### CAC reduction from universe pull
```python
def effective_cac(base_cac: float, fan_share: float, fan_cac: float = 0) -> float:
"""If 40% of new users come from existing IP fans (CAC ≈ 0),
blended CAC drops accordingly."""
return (1 - fan_share) * base_cac + fan_share * fan_cac
print(effective_cac(40, 0.4)) # $24 vs $40 baseline
```
### Long-tail brand equity decay
```python
def brand_equity(years_since_release: float, half_life_years: float = 8) -> float:
"""IPs decay exponentially without reinforcement (sequel/spin-off)."""
return 0.5 ** (years_since_release / half_life_years)
# Each new product resets the decay clock for the universe
```
### Transmedia revenue rollup
```python
revenue_streams = {
"game_iap": 1_200_000_000,
"merchandise": 180_000_000,
"music_album": 22_000_000,
"anime_license": 80_000_000,
"concert_tour": 45_000_000,
}
universe_revenue = sum(revenue_streams.values())
print(f"Total: ${universe_revenue/1e9:.2f}B")
```
## 매 결정 기준
| 상황 | Approach |
|---|---|
| 매 single hit 매 unsure | product LTV 만 매 측정 |
| 매 sequel / spin-off 의 plan | universe LTV 의 model |
| 매 IP licensing 매 evaluate | brand equity decay + cross-conv |
| 매 collab partner 의 select | cross-conv potential 의 prioritize |
**기본값**: 매 2nd product 매 launch 의 시점 의 의 universe LTV thinking 의 의 transition.
## 🔗 Graph
- 응용: [[이탈률(Churn Rate)]] · [[ARPU]]
## 🤖 LLM 활용
**언제**: 매 multi-product 매 portfolio 의 publisher / studio 매 valuation, 매 IP investment 매 ROI 의 evaluation.
**언제 X**: 매 single-product 매 indie — 매 overengineering. 매 product LTV 매 충분.
## ❌ 안티패턴
- **매 cannibalization 매 ignore**: 매 spin-off 매 anchor 의 의 churn 의 increase 시 매 net negative 매 가능.
- **매 dilution**: 매 너무 많은 spin-off 매 brand 의 weaken (Star Wars post-2017 fatigue debates).
- **매 cross-conv 매 overestimate**: 매 fan 의 의 의 자동적 매 next-product 의 buy 매 X. 매 quality gap 매 break universe pull.
## 🧪 검증 / 중복
- Verified (HBR transmedia studies, Newzoo franchise reports, HoYoverse Q reports).
- 신뢰도 A.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — universe LTV formula + cross-conv matrix + working pandas code |
@@ -0,0 +1,34 @@
---
id: wiki-2026-0508-유저-평균-매출-arpu
title: 유저 평균 매출(ARPU)
category: 10_Wiki/Topics
status: duplicate
canonical_id: arpu
duplicate_of: "[[ARPU]]"
aliases: [Average Revenue Per User]
source_trust_level: A
confidence_score: 0.9
verification_status: redirected
tags: [duplicate, monetization, kpi, arpu]
last_reinforced: 2026-05-10
github_commit: pending
---
# 유저 평균 매출(ARPU)
> **이 문서는 [[ARPU]] 의 중복본입니다.** Canonical 문서로 redirect.
## 핵심 요약
- ARPU = Total Revenue / Active Users (시간 단위 — daily/monthly).
- ARPDAU 의 한국어 변형: 매 daily active 기준 매출 measure.
- LTV 와 retention curve 의 결합 — payback period 산정.
## 🔗 Graph
- 부모: [[ARPU]] (canonical)
- 변형: [[ARPPU]] · [[Retention]]
## 🕓 변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
@@ -0,0 +1,155 @@
---
id: wiki-2026-0508-이탈률-churn-rate
title: 이탈률(Churn Rate)
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Churn, User Churn, Attrition Rate, 이탈]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [analytics, retention, kpi, business-metrics]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
language: python
framework: 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
```python
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
```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
```
### Survival analysis (Kaplan-Meier)
```python
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)
```python
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
```python
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)
```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]]
- 응용: [[유니버스 LTV(Universe LTV)]]
## 🤖 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 |
@@ -0,0 +1,187 @@
---
id: wiki-2026-0508-프리미엄-통화-브릿지-premium-currency-bri
title: 프리미엄 통화 브릿지(Premium Currency Bridge)
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Premium Currency Bridge, Hard-Soft Currency Bridge, Currency Conversion Layer, 통화 브릿지]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [game-economy, monetization, currency-design, f2p]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
language: typescript
framework: nodejs-economy
---
# 프리미엄 통화 브릿지(Premium Currency Bridge)
## 매 한 줄
> **"매 hard currency 매 직접 의 모든 item 매 구매 X — 매 bridge layer 의 의 의 soft currency / premium feature 의 의 conversion"**. 매 Genshin (Genesis Crystal → Primogem → Wishes), 매 Clash Royale (Gem → Gold/Chest), 매 Honkai Star Rail (Oneiric Shard → Stellar Jade), 매 매 매 동일한 design — 매 conversion friction 매 hard purchase 의 의 의 deliberate distance 의 의 의 의 의 create.
## 매 핵심
### 매 typical 3-tier currency stack
1. **Hard currency (premium)**: 매 IRL 매 buy. 매 Genesis Crystal, Gem, Robux 등.
2. **Bridge / mixed currency**: 매 hard 매 의 → 매 의 의 의 convert 가능 + 매 free 의 의 earn 가능. 매 Primogem, Stellar Jade.
3. **Soft / earnable**: 매 gameplay 의 grind. 매 Mora, Credit, Gold.
### 매 bridge 매 functions
- **delay psychology**: 매 IRL → in-game gain 의 의 두 step. 매 impulse buy 매 lower-friction.
- **regulatory cushion**: 매 jurisdictions 매 의 conversion 매 indirect 의 의 의 loot-box law 의 의 의 navigate.
- **f2p parity perception**: 매 free player 매 same Primogem 의 earn 의 → 매 perceived fairness.
- **bundle accounting**: 매 store offers (60+10 bonus) 매 visible 의 의 conversion 의 의 의 의.
### 매 응용
1. *Genshin Impact*: Genesis Crystal → Primogem (1:1 + bonus). Primogem → Fate (160:1 wish).
2. *Honkai Star Rail*: Oneiric Shard → Stellar Jade. SJ → Star Rail Pass (warp).
3. *Clash Royale*: Gem → Gold (변동 rate). Gem → Chest (직접).
4. *PUBG Mobile*: UC → BP / event token.
5. *Fortnite*: V-Bucks (single-tier, no bridge — 매 unique).
## 💻 패턴
### Currency type definitions
```typescript
type Currency = "USD" | "GenesisCrystal" | "Primogem" | "Mora";
interface Wallet {
balances: Record<Currency, number>;
}
const FX: Record<string, number> = {
"USD->GenesisCrystal": 99, // $0.99 → 60 + 0 bonus baseline
"GenesisCrystal->Primogem": 1, // 1:1 baseline
"Primogem->IntertwinedFate": 1/160, // 160 primo per wish
};
```
### Bridge conversion (with bonus tiers)
```typescript
const BUNDLE_BONUS = [
{ spend: 0.99, base: 60, bonus: 0 },
{ spend: 4.99, base: 300, bonus: 30 }, // first-time x2 separately
{ spend: 14.99, base: 980, bonus: 110 },
{ spend: 29.99, base: 1980, bonus: 260 },
{ spend: 49.99, base: 3280, bonus: 600 },
{ spend: 99.99, base: 6480, bonus: 1600 },
];
function purchaseGenesis(usd: number): number {
const tier = BUNDLE_BONUS.find(t => Math.abs(t.spend - usd) < 0.01);
if (!tier) throw new Error("Invalid SKU");
return tier.base + tier.bonus;
}
function genesisToPrimogem(gc: number): number {
return gc * FX["GenesisCrystal->Primogem"];
}
```
### Wallet ledger (audit-safe)
```typescript
interface LedgerEntry {
ts: number;
userId: string;
currency: Currency;
delta: number;
reason: "purchase" | "convert" | "spend" | "grant" | "refund";
refTxId?: string;
}
class Ledger {
entries: LedgerEntry[] = [];
apply(e: Omit<LedgerEntry, "ts">) {
this.entries.push({ ...e, ts: Date.now() });
}
balance(userId: string, c: Currency): number {
return this.entries
.filter(e => e.userId === userId && e.currency === c)
.reduce((s, e) => s + e.delta, 0);
}
}
```
### Bridge spend with anti-double-spend
```typescript
async function spendPrimogem(
ledger: Ledger,
userId: string,
amount: number,
txId: string // idempotency key
): Promise<{ ok: boolean; reason?: string }> {
if (ledger.entries.some(e => e.refTxId === txId)) {
return { ok: true }; // idempotent replay
}
if (ledger.balance(userId, "Primogem") < amount) {
return { ok: false, reason: "insufficient" };
}
ledger.apply({ userId, currency: "Primogem", delta: -amount,
reason: "spend", refTxId: txId });
return { ok: true };
}
```
### F2P-vs-whale parity tracking
```typescript
function monthlyEarnableBridge(): number {
// Daily commissions (60) + abyss (~600/cycle) + events (~1500) + bp (~680)
const daily = 60 * 30;
const abyss = 1200; // 2 cycles
const events = 1500;
const bp = 680;
return daily + abyss + events + bp; // ~5180 primogem ≈ 32 wishes
}
```
### Regional pricing matrix
```typescript
const REGION_FX: Record<string, number> = {
"US": 1.0, "EU": 0.95, "JP": 0.90,
"TR": 0.30, // historical PPP discount
"AR": 0.25, "BR": 0.50, "IN": 0.60,
};
function regionalUSD(usd: number, region: string): number {
return usd * (REGION_FX[region] ?? 1.0);
}
```
## 매 결정 기준
| 상황 | currency stack |
|---|---|
| 매 simple cosmetic store | single-tier (V-Bucks) |
| 매 gacha + grind dual loop | 3-tier with bridge |
| 매 light monetization indie | hard-only or single-tier |
| 매 enterprise / regulatory-sensitive | bridge layer + clear ToS |
**기본값**: 매 gacha + progression hybrid 매 → 매 3-tier (hard → bridge → soft) 매 standard.
## 🔗 Graph
- 부모: [[Game Economy]]
- 변형: [[Hard Currency]]
- 응용: [[자원 로지스틱스(Resource Logistics)]] · [[유니버스 LTV(Universe LTV)]] · [[ARPU]]
- Adjacent: [[Idempotency]]
## 🤖 LLM 활용
**언제**: 매 f2p / gacha / live-service 매 economy 매 design 시, 매 conversion-funnel 매 friction 의 의 의 calibrate 시.
**언제 X**: 매 premium one-time-purchase (no IAP) — 매 bridge unnecessary, 매 just confuses player.
## ❌ 안티패턴
- **매 4+ tiers**: 매 player 매 confused. 매 store screen 매 cluttered.
- **매 hidden conversion rate**: 매 ToS-buried rate → 매 trust 의 of erode + regulatory risk.
- **매 bridge ↔ hard 매 reversible**: 매 refund / arbitrage 의 의 의 의 의 의 의 expose.
- **매 no idempotency on spend**: 매 double-spend 매 의 의 race condition. 매 audit ledger 매 must.
## 🧪 검증 / 중복
- Verified (HoYoverse store ToS, Supercell economy 의 talks, GDC F2P monetization talks 2023-2025, Deconstructor of Fun analyses).
- 신뢰도 A.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — 3-tier stack + bundle bonus tiers + idempotent ledger code |