docs(10_Wiki): Topic_Business/General/Graphic/Programming을 Topics/ 하위로 이동
최상위 10_Wiki/Topic_*였던 4개 카테고리 폴더를 10_Wiki/Topics/Topic_* 로 재배치. 콘텐츠 변경 없음(순수 폴더 이동) — Topics/ 하위 나머지 폴더는 이미 지난 커밋에서 전부 정리된 상태(잔존 항목은 에이전트 운영 상태 및 사용자가 보존을 요청한 업데이트0615/무제 3.canvas 뿐).
This commit is contained in:
@@ -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 $10–50, 매 conversion 1–5% → ARPU $0.10–2.50.
|
||||
2. **SaaS B2C**: 매 conversion 5–15%, 매 ARPPU $5–30 → ARPU $0.50–4.
|
||||
3. **AI 구독**: 매 ARPPU $20, 매 conversion 5–10%.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### 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 |
|
||||
Reference in New Issue
Block a user