Files
2nd/10_Wiki/Topics/Game_Design/CPI (Cost Per Install).md
T
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

4.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-cpi-cost-per-install CPI (Cost Per Install) 10_Wiki/Topics verified self
CPI
cost-per-install
install-cost
none A 0.92 applied
mobile
marketing
ua
monetization
ltv
2026-05-10 pending
language framework
analytics ua-channel

CPI (Cost Per Install)

매 한 줄

"매 신규 install 1건당 marketing 비용". 매 mobile UA (User Acquisition) 의 가장 fundamental metric. 매 LTV (lifetime value) 와 매 짝 — 매 LTV > CPI 면 매 ROI positive. 매 2026 iOS ATT post-era 에서 매 CPI 는 매 $3-15 (US tier-1) 의 일반.

매 핵심

매 정의

  • CPI = 총 ad spend / 매 attributed install 수.
  • paid CPI: 매 광고로 attributed 된 매 install 만.
  • blended CPI: 매 paid + organic 합산.
  • organic uplift: 매 paid campaign 에 의한 매 organic install 증가.

매 영향 요인

  • Geo: 매 US/JP/KR > EU > LatAm > India.
  • Platform: 매 iOS 가 매 Android 보다 매 2-4x 비쌈.
  • Genre: 매 mid-core RPG > casual > hyper-casual.
  • Creative: 매 video > playable > static.
  • Targeting: 매 lookalike < broad < whale-target.

매 응용

  1. 매 ROAS (Return on Ad Spend) D7/D30 추적.
  2. 매 channel mix optimization.
  3. 매 creative A/B 의 매 cost-efficiency 비교.

💻 패턴

CPI 계산

type Campaign = {
  id: string;
  spend: number;
  attributed_installs: number;
  organic_installs: number;
};

function paidCPI(c: Campaign): number {
  return c.attributed_installs > 0
    ? c.spend / c.attributed_installs
    : Infinity;
}

function blendedCPI(c: Campaign): number {
  const total = c.attributed_installs + c.organic_installs;
  return total > 0 ? c.spend / total : Infinity;
}

function organicUplift(c: Campaign, baseline_organic: number): number {
  return Math.max(0, c.organic_installs - baseline_organic);
}

Channel ROAS rollup

type ChannelDay = {
  channel: "facebook" | "google" | "tiktok" | "applovin";
  date: string;
  spend: number;
  installs: number;
  d7_revenue: number;
  d30_revenue: number;
};

function rollupROAS(days: ChannelDay[]) {
  const byCh = new Map<string, ChannelDay>();
  for (const d of days) {
    const cur = byCh.get(d.channel) ?? { ...d, spend: 0, installs: 0, d7_revenue: 0, d30_revenue: 0 };
    cur.spend += d.spend;
    cur.installs += d.installs;
    cur.d7_revenue += d.d7_revenue;
    cur.d30_revenue += d.d30_revenue;
    byCh.set(d.channel, cur);
  }
  return [...byCh.values()].map(c => ({
    channel: c.channel,
    cpi: c.spend / c.installs,
    roas_d7: c.d7_revenue / c.spend,
    roas_d30: c.d30_revenue / c.spend,
  }));
}

Bid-cap calculator (target ROAS)

function maxBidForROAS(target_roas: number, expected_ltv_d30: number): number {
  // CPI <= LTV / target_roas
  return expected_ltv_d30 / target_roas;
}

// Example: $5 LTV, target 1.2 ROAS → max CPI $4.17

Cohort LTV vs CPI tracker

function cohortPayback(cohort_installs: number, cpi: number, daily_arpu: number[]): number {
  let cum = 0;
  for (let day = 0; day < daily_arpu.length; day++) {
    cum += daily_arpu[day];
    if (cum >= cpi) return day; // payback day
  }
  return -1; // not paid back
}

SKAdNetwork-aware attribution (iOS post-ATT)

interface SKANPostback {
  campaign_id: number;     // 0-99
  conversion_value: number; // 0-63 (6-bit)
  redownload: boolean;
}

function decodeCV(cv: number): { revenue_bucket: number; engagement: number } {
  // Custom schema — common: bits 0-3 revenue, 4-5 engagement
  return {
    revenue_bucket: cv & 0b1111,
    engagement: (cv >> 4) & 0b11,
  };
}

매 결정 기준

상황 Approach
매 hyper-casual Low CPI ($0.5-2) + IAA monetization
매 casual Medium CPI ($2-5) + IAP + IAA
매 mid-core RPG High CPI ($5-15) + deep IAP
매 4X / strategy Very high CPI ($15-50) + whale-LTV

기본값: 매 D7 ROAS > 0.3, D30 ROAS > 0.7 의 매 channel 만 scale.

🔗 Graph

🤖 LLM 활용

언제: 매 UA budget planning, channel comparison, ROAS analysis. 언제 X: 매 organic-only product — 매 paid UA 의 X.

안티패턴

  • Blended-only 추적: 매 paid 의 incrementality 의 hidden.
  • CPI 만 tracking: 매 LTV 의 무시 — 매 negative ROI scaling.
  • Day-1 만 보기: 매 long-tail 의 무시.
  • iOS = Android 가정: 매 2-4x 차이.

🧪 검증 / 중복

  • Verified (AppsFlyer 2025 benchmark, Liftoff Casual Gaming Apps Report).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — CPI definition + UA channel measurement patterns.