行動行銷分析中需要追蹤的核心指標有哪些?行動行銷分析的關鍵指標包含點擊率(CTR)、單次安裝成本(CPI)、客戶取得成本(CAC)、廣告投資報酬率(ROAS)與用戶終身價值(LTV),這些指標共同評估漏斗頂端獲客效率、安裝後變現能力以及長期的行銷活動獲利能力。
行動行銷分析是對多通路廣告成效、App 內用戶互動與安裝後變現資料進行系統化聚合、歸因與分析。透過將漏斗頂端的獲客支出與長期的同期群營收相連結,行銷分析能讓成長團隊衡量行銷活動的廣告投資報酬率(ROAS)、計算客戶取得成本(CAC),並在付費與自然流量通路之間最佳化預算配置。
| 名詞 | 定義 |
|---|---|
| 行銷分析 | 連結媒體支出、用戶旅程與變現指標的架構。 |
| ROAS | 廣告投資報酬率:產生的營收與所產生成本的比率。 |
| 客戶取得成本 | 在定義的轉換標準下,總獲客支出除以新取得的付費客戶數。 |
| 終身價值 | 針對特定用戶或客戶族群以及時間範圍所計算的累積營收或利潤衡量指標。 |
行動行銷分析的單位經濟學架構
核心財務關係:評估 CAC 與同期群 LTV 的對比
永續的行動 App 成長取決於客戶取得成本(CAC)與終身價值(LTV)之間的結構性關係。雖然漏斗頂端的行銷活動專注於以較低的初期成本取得用戶,但長期的商業可行性要求所取得同期群所產生的累積淨營收必須超過取得該同期群所花費的總資本。
為維持數學上的有效性,成長團隊必須在相同的母體分母上評估 LTV 與取得成本:
- 付費客戶模型(單位經濟學與利潤分析):嚴格針對已轉換的付費客戶來評估獲客支出:
- 已取得用戶同期群模型(同期群回收與回本):評估第 0 天所有取得的 App 用戶的獲客支出:
沒有適用於所有行動業務的通用 LTV 對 CAC 門檻。部分成長團隊使用如

虛榮指標的危險:為什麼原始安裝量會掩蓋負面的單位經濟學
僅透過安裝量或單次安裝成本(CPI)來評估成效行銷表現,會對預算配置引入顯著的扭曲。在高等級的高管儀表板上,一個提供 $0.50 CPI 的廣告聯播網可能看起來比提供 $3.00 CPI 的通路更具優勢。
然而,如果 $0.50 的安裝同期群表現出極高的第 1 天流失率且產生微乎其微的後續營收,其每個付費客戶的實際取得成本遠遠超過其營收收益。相反地,一個達到穩定的第 30 天留存率與持續變現的 $3.00 安裝同期群則能提供可行的單位經濟學。行銷分析必須評估後續的轉換效率,而不是停留在安裝事件上。

多層次歸因管線:將曝光與後續購買事件相連結
為了計算準確的單位經濟學,行動衡量架構建立了一個橫跨四個營運階段的不間斷資料管線:
- 媒體投遞:在廣告聯播網邊緣擷取曝光、廣告支出與版位權杖。
- 轉換資料匯入:透過應用程式商店中介的推薦 API、平台歸因架構或第一方路由層來記錄 App 安裝。
- App 內事件追蹤:擷取安裝後的里程碑事件(例如帳號註冊、教學完成與等級推進)。
- 變現對帳:將 App 內購買(IAP)、訂閱續約與廣告營收匯入集中式資料倉儲,以產生統一的同期群報表。

參見:行銷分析 ──> 行動歸因架構
漏斗頂端核心獲客指標:CPM、CTR、CPC 與 CPI
每千次曝光成本(CPM)與單次點擊成本(CPC):衡量媒體成本與版位動態
漏斗頂端媒體指標可用於診斷廣告版位的成本效率與競爭動態:
- 每千次曝光成本(CPM):投遞 1,000 次廣告曝光的媒體成本:
CPM 上升可能反映出目標受眾區隔內的競標競爭加劇、季節性市場壓力、版位轉換或素材疲勞。 - 單次點擊成本(CPC):廣告素材每次獲得驗證點擊所產生的平均成本:
點擊率(CTR):診斷素材共鳴與廣告疲勞
點擊率衡量的是促成使用者有意點擊的已投遞曝光比例:
活躍行銷活動中持續下降的 CTR 可能表示受眾飽和、素材耗盡或版位組合轉變,這暗示應更新行銷素材以維持後續的轉換速度。
單次安裝成本(CPI):評估漏斗頂端轉換阻力
單次安裝成本衡量產生單一應用程式安裝所需的平均媒體支出:
CPI 反映了廣告素材共鳴、App 商店產品頁面最佳化(ASO)與應用程式套件下載轉換率的綜合效率。
Top of Funnel: Media Exposure & Clicks
[Impressions] ──► [Clicks] (CTR) ──► [Installs] (CPI)
│
▼
Mid-Funnel: Activation & Onboarding
[Registrations] ──► [Core Milestones] ──► [Paying Customers] (CAC)
│
▼
Bottom-Funnel: Monetization & Retention
[Purchases / Ads] ──► [D1/D7/D30 Retention] ──► [Cohort LTV] ──► [Cohort ROAS %]
漏斗中端激活與參與:轉換率、CAC 與留存率
安裝到註冊轉換率(CVR):偵測引導流失
在使用者成功激活之前,取得安裝並不會創造企業價值。安裝到註冊轉換率用以評估引導阻力:
安裝與註冊之間的大幅流失通常代表深度連結失效、強制帳號註冊阻力,或是漏斗頂端廣告素材所建立的使用者期望不符。
付費 CAC 與混合 CAC:衡量自然成長與推薦乘數
分析團隊必須區分付費客戶取得成本與混合客戶取得成本:
- 付費 CAC:嚴格透過直接歸因的付費行銷支出來評估取得成本:
- 混合取得成本:將總行銷支出除以透過付費、自然與病毒式推薦通路取得的所有客戶總數,藉此評估整體組織的獲客效率:
當非付費客戶數量的成長速度大於混合分子中包含的額外行銷支出時,強勁的自然或推薦獲客可以相對於僅限付費的 CAC 降低混合取得成本。
留存指標:評估產品黏着度與流失檢查點
用戶留存衡量的是來自取得同期群的用戶在首次開啟 App 後的第
- 第 1 天留存率(D1):診斷首次使用者體驗(FTUE)、初期 App 可用性與註冊阻力。
- 第 7 天留存率(D7):衡量應用程式是否已成功融入使用者的每週習慣迴圈。
- 第 30 天留存率(D30):衡量長期效用、核心功能共鳴與基準客戶流失率。
工作階段頻率與互動節奏(DAU/MAU)
每日活躍用戶(DAU)與每月活躍用戶(MAU)的比率可用於評估互動頻率:
DAU/MAU 比率應對照應用程式的自然使用節奏與適當的類別基準來解讀;每日社群或遊戲應用程式需要比每月銀行、旅遊或工具應用程式高得多的比率。
漏斗底端變現與獲利能力:ARPU、LTV 與 ROAS
每用戶平均營收(ARPU)與每付費用戶平均營收(ARPPU)
變現指標可量化活躍用戶群轉化為總營收的效率:
- 每用戶平均營收(ARPU):衡量在特定時間範圍內跨活躍用戶群所產生的營收:
- 每付費用戶平均營收(ARPPU):嚴格衡量完成貨幣交易之用戶間的營收集中度:
建構同期群用戶終身價值
為了確保同期群分析中的數學一致性,終身價值是根據每個取得用戶的累積同期群營收來計算的:
- 累積同期群營收 LTV:獲客同期群透過第
天所產生的淨營收,除以在第 0 天取得的總用戶數: - 預測留存 LTV:透過將留存曲線
與隨時間推移的留存用戶變現率 相結合來制定:
其中
計算廣告投資報酬率:總 ROAS 與淨營收 ROAS
廣告投資報酬率用於評估特定時間範圍內行銷活動營收相對於廣告支出的表現:
- 總 ROAS:評估在平台抽成扣除之前直接產生的總 App 內營收:
- 淨營收 ROAS:評估在扣除 App 商店佣金與交易處理費之後,企業實際實現的淨營收:
底下的 JSON 酬載展示了一個結構化的分析事件,用於擷取不可變更的交易後設資料以供後續資料倉儲聚合使用:
{
"event_type": "marketing_conversion_telemetry",
"event_id": "evt_20260826_99812344",
"timestamp_utc": "2026-08-26T03:15:00Z",
"user_context": {
"anonymous_user_id": "usr_anon_88192a7b",
"cohort_acquisition_date": "2026-08-19",
"days_since_install": 7
},
"attribution_source": {
"channel_id": "google_search_paid",
"campaign_id": "cmp_us_brand_intent_v2",
"ad_group_id": "grp_keyword_exact",
"creative_id": "crt_text_ad_04",
"attribution_model_applied": "first_touch_lookback_7d"
},
"financial_payload": {
"event_name": "subscription_renew_month_1",
"transaction_currency": "USD",
"gross_revenue_cents": 1499,
"platform_fee_cents": 225,
"net_revenue_cents": 1274
}
}
多通路資料對帳與落差預防
解析跨通路歸因落差
跨多個廣告聯播網營運的成長團隊經常會遇到廣告聯播網儀表板、應用程式商店主控台報表與內部 BI 資料倉儲之間的資料落差。
常見的技術根本原因包含:
- 時區對齊落差:廣告聯播網回報太平洋時間(PST/PDT),而內部資料倉儲以協調世界時(UTC)擷取事件串流。
- 回溯視窗落差:廣告聯播網宣稱在 30 天視窗內產生轉換,而內部分析平台強制執行嚴格的 24 小時或 7 天歸因視窗。
- 貨幣與費用差異:廣告聯播網回報扣除平台稅金前的總媒體支出,而應用程式商店報表則反映扣除平台交易費後的開發者淨營收。
自我歸因聯播網與多點觸及重疊
自我歸因聯播網(SAN)使用其自身封閉生態系統內可用的互動資料來評估歸因。由於每個平台套用不同的歸因視窗、瀏覽歸因規則與模型化轉換估計,各別儀表板上報表的網路歸因轉換總和,通常會超過獨立去重複後的衡量視圖。
獨立歸因平台透過在參與通路間套用一致的歸因邏輯來調和這些落差,在承認平台特定隱私限制的同時提供統一的報表層。
將平台回傳資料與第一方事件串流進行對帳
隨著 Apple AdAttributionKit 與 SKAdNetwork 等隱私框架在不使用用戶層級識別碼的情況下提供具隱私保護、延遲的歸因回傳資料,現代資料工程架構部署了雙重對帳管線:
- 巨集串流:結合具隱私保護的歸因回傳資料與廣告聯播網支出資料及相容的營收對應,以估算行銷活動層級的獲客成效與方向性 ROAS。
- 微集串流:擷取第一方情境參數與 App 內事件遙測資料,以評估轉換漏斗、引導留存與產品功能互動。
同期群分析:追蹤回本期與留存曲線
建構同期群留存網格
同期群分析根據使用者的獲客日期與行銷通路將其組織成離散群組,並在日曆天數中橫向追蹤其成效。
標準的同期群分析評估架構:
- 橫軸(時間衰減):追蹤單一同期群的留存、互動與累積營收如何隨著時間從第 0 天演進至第 30 天以上。
- 縱軸(同期群品質轉變):比較相同相對生命週期天數下不同日曆同期群的成效,評估產品更新或素材疊代是否提升了同期群品質。
計算同期群淨營收回本期
同期群淨營收回本期代表獲客同期群的累積淨營收等於或超過取得該同期群所花費的總廣告支出所需的確切天數:
較短的回本期可減少營運資金需求,讓成長團隊能夠更快速地將營收再投資於擴展獲客行銷活動。
下方的 Python 指令碼示範如何從原始事件記錄中計算連續同期群留存網格、累積總營收與淨營收 LTV 曲線,以及淨營收回本期:

import numpy as np
import pandas as pd
def calculate_cohort_unit_economics(
events_df: pd.DataFrame,
ad_spend_df: pd.DataFrame,
max_lifecycle_days: int = 90
) -> pd.DataFrame:
"""
Computes cohort retention checkpoints, cumulative gross and net LTV curves,
gross and net revenue ROAS percentages, and net revenue payback days.
events_df columns: ['user_id', 'acquisition_cohort', 'event_date', 'gross_revenue_cents', 'net_revenue_cents']
ad_spend_df columns: ['acquisition_cohort', 'total_spend_cents', 'acquired_users', 'paying_customers']
Note: Any user with at least one recorded event on lifecycle day N is considered active for this example retention calculation.
"""
# Input Validation
if ad_spend_df['acquired_users'].min() <= 0:
raise ValueError("Acquired users count must be greater than zero for all cohorts.")
if ad_spend_df['total_spend_cents'].min() < 0:
raise ValueError("Total ad spend cannot be negative.")
# 1. Compute lifecycle day for each event
events_df['event_date'] = pd.to_datetime(events_df['event_date'])
events_df['acquisition_cohort'] = pd.to_datetime(events_df['acquisition_cohort'])
events_df['lifecycle_day'] = (events_df['event_date'] - events_df['acquisition_cohort']).dt.days
valid_events = events_df[(events_df['lifecycle_day'] >= 0) & (events_df['lifecycle_day'] <= max_lifecycle_days)].copy()
# 2. Build Continuous Daily Revenue Matrices (Gross and Net)
all_days = list(range(0, max_lifecycle_days + 1))
# Net Revenue Matrix
cohort_net_sparse = valid_events.groupby(['acquisition_cohort', 'lifecycle_day'])['net_revenue_cents'].sum().unstack(fill_value=0)
cohort_net_daily = cohort_net_sparse.reindex(columns=all_days, fill_value=0)
cumulative_net_revenue = cohort_net_daily.cumsum(axis=1)
# Gross Revenue Matrix
cohort_gross_sparse = valid_events.groupby(['acquisition_cohort', 'lifecycle_day'])['gross_revenue_cents'].sum().unstack(fill_value=0)
cohort_gross_daily = cohort_gross_sparse.reindex(columns=all_days, fill_value=0)
cumulative_gross_revenue = cohort_gross_daily.cumsum(axis=1)
# 3. Calculate Cohort Retention Matrix (Active unique users per day / initial cohort users)
ad_spend_df['acquisition_cohort'] = pd.to_datetime(ad_spend_df['acquisition_cohort'])
spend_indexed = ad_spend_df.set_index('acquisition_cohort')
cohort_active_users = valid_events.groupby(['acquisition_cohort', 'lifecycle_day'])['user_id'].nunique().unstack(fill_value=0)
cohort_active_users = cohort_active_users.reindex(columns=all_days, fill_value=0)
unit_economics = pd.DataFrame(index=cumulative_net_revenue.index)
unit_economics['acquired_users'] = spend_indexed['acquired_users']
unit_economics['paying_customers'] = spend_indexed['paying_customers']
unit_economics['ad_spend_cents'] = spend_indexed['total_spend_cents']
# Cost Metrics: Cost per Acquired User vs Paid CAC per Paying Customer
unit_economics['cost_per_acquired_user_usd'] = (unit_economics['ad_spend_cents'] / unit_economics['acquired_users']) / 100.0
# Handle zero paying customers gracefully to prevent division by zero
unit_economics['paid_cac_per_paying_customer_usd'] = np.where(
unit_economics['paying_customers'] > 0,
(unit_economics['ad_spend_cents'] / unit_economics['paying_customers']) / 100.0,
np.nan
)
# 4. Extract Cumulative LTV ($) and Retention (%) checkpoints
for day in [1, 7, 30, 60, 90]:
if day <= max_lifecycle_days:
# Retention rate at Day N
active_at_day = cohort_active_users[day] if day in cohort_active_users.columns else 0
unit_economics[f'retention_d{day}_pct'] = (active_at_day / unit_economics['acquired_users']) * 100.0
# Cumulative Gross LTV ($ per acquired user) through Day N
gross_rev_through_day = cumulative_gross_revenue[day]
unit_economics[f'gross_ltv_d{day}_usd'] = (gross_rev_through_day / unit_economics['acquired_users']) / 100.0
# Cumulative Net Revenue LTV ($ per acquired user) through Day N
net_rev_through_day = cumulative_net_revenue[day]
unit_economics[f'net_ltv_d{day}_usd'] = (net_rev_through_day / unit_economics['acquired_users']) / 100.0
# Cumulative Gross ROAS (%) through Day N
gross_rev_through_day = cumulative_gross_revenue[day]
unit_economics[f'gross_roas_d{day}_pct'] = (gross_rev_through_day / unit_economics['ad_spend_cents']) * 100.0
# Cumulative Net Revenue ROAS (%) through Day N
unit_economics[f'net_roas_d{day}_pct'] = (net_rev_through_day / unit_economics['ad_spend_cents']) * 100.0
# 5. Calculate Cohort Net Revenue Payback Day (First lifecycle day where Cumulative Net Revenue >= Total Ad Spend)
def find_payback_day(cohort_date):
spend = spend_indexed.loc[cohort_date, 'total_spend_cents']
cum_net_series = cumulative_net_revenue.loc[cohort_date]
break_even_days = cum_net_series[cum_net_series >= spend].index
return int(break_even_days[0]) if len(break_even_days) > 0 else np.nan
unit_economics['net_revenue_payback_day'] = [find_payback_day(c) for c in unit_economics.index]
return unit_economics.reset_index()
# Example Execution:
if __name__ == "__main__":
sample_events = pd.DataFrame({
'user_id': ['u1', 'u2', 'u1', 'u3', 'u2'],
'acquisition_cohort': ['2026-08-01', '2026-08-01', '2026-08-01', '2026-08-01', '2026-08-01'],
'event_date': ['2026-08-01', '2026-08-02', '2026-08-08', '2026-08-15', '2026-08-30'],
'gross_revenue_cents': [1199, 1799, 599, 3499, 2399],
'net_revenue_cents': [999, 1499, 499, 2999, 1999]
})
sample_spend = pd.DataFrame({
'acquisition_cohort': ['2026-08-01'],
'total_spend_cents': [5000],
'acquired_users': [3],
'paying_customers': [2]
})
results = calculate_cohort_unit_economics(sample_events, sample_spend, max_lifecycle_days=30)
print("--- Cohort Unit Economics Summary ---")
print(results.to_string(index=False))
跨行動商業模型的指標優先順序
Apple App Store Connect Analytics 與 Google Play Console 皆提供情境同儕群組基準,讓開發者能夠與相關的 App 類別比較成效。指標優先順序會根據產品變現結構而根本不同:
| 商業模型 | 主要留存焦點 | 核心單位經濟學指標 | 目標回本焦點 | 主要 ROAS 最佳化指標 |
|---|---|---|---|---|
| 行動遊戲(IAP + 廣告) | D1、D7 與 D30 留存率 | 累積 ARPU 與付費轉換 | 與變現曲線對齊的早期至中期生命週期回收 | D7 / D30 混合 ROAS |
| 電子商務與零售 | 30 天回購率 | 每筆訂單淨貢獻毛利 | 購買週期與貢獻毛利回收 | 首次購買與 D30 重複 ROAS |
| 訂閱與 B2B SaaS | 每月 / 每年流失率 | 訂閱者 LTV 與付費 CAC 比率 | 跨定期訂閱續約週期的回收 | 第 3 個月與第 12 個月累積 ROAS |
| 金融科技與銀行 | 30 天入金帳號比率 | 每個活躍帳號的貢獻毛利 | 更長遠期、風險調整後的客戶經濟效益 | 長尾帳號存款 LTV |
常見問題(FAQ)
行動 App 行銷中的 ROI 與 ROAS 有何區別?
為什麼廣告聯播網儀表板指標與內部 BI 報表會有所不同?
同期群分析如何改善行動廣告支出配置?
總結與決策架構
最佳化行動 App 廣告投資報酬率(ROAS)需要超越漏斗頂端的安裝指標,建立全漏斗的衡量架構。透過將媒體獲客成本(CPM、CPC、CPI)與後續的激活、留存和同期群變現指標(CAC、LTV、ROAS、回本期)相連結,成長團隊能夠獲得實現永續單位經濟學所需的透明度。
類似 OpoInstall 的平台提供基礎設施來擷取多通路歸因資料、對帳跨網路落差,並將原始轉換事件串流至內部 BI 系統,為數據驅動的行銷分析奠定基礎。
若要進一步了解如何設定多通路追蹤並建構先進的行銷分析儀表板,請參閱 OpoInstall 文件。
相關資料
-
概念:行動行銷分析、廣告投資報酬率、客戶取得成本、同期群分析、回本期
-
技術:歸因資料倉儲、即時資料匯入管線、StoreKit 衡量、OpoInstall 行動 SDK
-
標準:IETF RFC 8259 JSON 規格、W3C 效能指標指引
-
API:OpoInstall 事件匯入 API、App Store Connect Analytics Reports API
官方文件
Share this article



