「広告費 1000 万投じたら 1 万人インストールしてくれた」── これだけでは広告効果は分かりません。そのユーザーが残って課金してくれたかまで見てはじめて広告 が出る。本記事では チャネル別 Cohort 分析の設計と実装を扱います。
なぜ「インストール数」だけじゃダメか
- 質の差:A 広告は安いが残らないユーザー、B 広告は高いが残るユーザー → CPI で見ると A が良いが で見ると B が勝ち
- 遅延発火:キャンペーン直後はインストール多いが、課金は 3 ヶ月後に出る
- チャネルミックスの最適化:複数チャネルを走らせるとき、効果の悪いチャネルを止める判断材料
first_touch_channel の保持
ユーザーの初回流入経路を user 属性として永続保持する。 パラメータ や 広告 の attribution データから取得し、登録時に user_attribute テーブルに書き込む。
first_touch_channel ベースの Cohort sql
SQL
SELECT ua.first_touch_channel, ua.first_touch_campaign, DATE_TRUNC(ua.signup_date, WEEK) AS cohort_week, COUNT(DISTINCT ua.user_id) AS installs, COUNT(DISTINCT IF(ae.active_date = DATE_ADD(ua.signup_date, INTERVAL 1 DAY), ae.user_id, NULL)) * 1.0 / COUNT(DISTINCT ua.user_id) AS d1_retention, COUNT(DISTINCT IF(ae.active_date BETWEEN DATE_ADD(ua.signup_date, INTERVAL 7 DAY) AND DATE_ADD(ua.signup_date, INTERVAL 14 DAY), ae.user_id, NULL)) * 1.0 / COUNT(DISTINCT ua.user_id) AS d7_retention, SUM(o.amount) / COUNT(DISTINCT ua.user_id) AS ltv_30dFROM `user_attribute` uaLEFT JOIN `active_event` ae USING(user_id)LEFT JOIN `orders` o ON o.user_id = ua.user_id AND o.order_date <= DATE_ADD(ua.signup_date, INTERVAL 30 DAY)GROUP BY 1, 2, 3ORDER BY installs DESC;ROI 判定の式
Payback Period
CAC を回収するまでの月数 = CAC ÷ 月次。SaaS 業界では 3 ヶ月以内が黄金、6 ヶ月までが許容、それ以上は危険信号。チャネル別に Payback 計算すると、止めるべき広告がはっきり見える。
キャンペーン別ダッシュボード(テンプレ)
- Top カード:CPI、CPA、ROAS(売上÷広告費)
- チャネル別 D1/D7/D30 継続率:色分けで悪いチャネル即発見
- 累積 LTV / CAC:30 日 / 90 日 / 180 日のスナップショット
- Cohort ヒートマップ:チャネル × 経過日でデグレ早期発見
ふくふくの進め方
「広告効果が見えない」というご相談には、広告 SDK と の連携設計(2 週間)→ チャネル別 Cohort → ダッシュボード化を 1 ヶ月で。月数百万の広告予算を最適化することで、ROI 1.5〜2 倍は普通に達成可能です。
次回予告
EP.09 はアイテム入手後の継続率・課金率。プロダクト内のイベント効果測定の話、 とも繋がる重要トピック。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。