🎓 レベル:基礎 | 重要度:A(必須)
📎 関連:マーケティングサイエンスとは | ファネルとコンバージョンの基本指標
要点(BLUF)
- マーケティングデータは大きく 顧客属性・行動ログ・取引・広告 の4系統。最小粒度は「顧客 × 時間 × イベント」で、これを集計して KPI を作ります。
- KPIツリーは、KGI(売上・利益)を「測れて・動かせる中間指標」へ乗法分解した階層です。早く動く先行指標で兆候を察知し、遅れて確定する遅行指標で成果を確認します。
- 乗法分解では、総売上の各レバーに対する弾力性 = そのレバーが属するチャネルの売上シェアに等しい。だから「大きいチャネル × 現実的に動かせるレバー」を選ぶのが定石です。
1. マーケティングデータの4系統と粒度
マーケティングで扱うデータは、出どころで4系統に整理できます。それぞれ「最小粒度(これ以上分解できない1行の単位)」が違います。
| 系統 | 代表的な中身 | 最小粒度 | 主なKPI |
|---|---|---|---|
| 顧客属性 | 年齢・地域・会員ランク・契約状態 | 顧客 | 会員数・セグメント構成比 |
| 行動ログ | ページ閲覧・クリック・滞在・検索 | 顧客 × 時刻 × イベント | 訪問数・回遊数・直帰率 |
| 取引 | 注文・金額・点数・返品 | 顧客 × 注文 | 売上・購入頻度・平均単価 |
| 広告 | 配信・表示・クリック・費用 | 広告 × 日 × 媒体 | インプレッション・CTR・CPA |
粒度が命です。最小粒度の行(アトミックなログ)を保持しておけば、後からどんな集計 KPI も組み直せます。逆に「日次の売上合計」しか残っていないと、どのチャネル・どの顧客層が効いたのかを分解して掘り下げられません。データ設計では、まず最も細かい粒度で貯め、集計は後工程に回すのが鉄則です。
flowchart LR D1["顧客属性"] --> AGG["集計・結合"] D2["行動ログ"] --> AGG D3["取引"] --> AGG D4["広告"] --> AGG AGG --> KPI["KPI(CVR・単価・CPA…)"] KPI --> KGI["KGI(売上・利益)"]
2. KPIツリー:KGIの乗法分解と先行・遅行指標
KPIツリーは、最終目標 KGI を頂点に、それを構成する KPI、さらに各 KPI を動かす**操作変数(レバー)**へと枝分かれさせた木構造です。EC の売上をチャネル別に乗法分解すると、こう書けます。
ここで は訪問数、 は CVR、 は平均単価です。チャネルごとに「訪問 × CVR × 単価」の積を作り、それを足し上げたものが全体の売上になります。
指標は時間軸でも2種類に分かれます。
- 先行指標(leading):訪問数・CVR・カート投入率・メール開封率など。施策に早く反応し、兆候を先取りできる。
- 遅行指標(lagging):売上・利益・LTV・解約率など。後から確定する最終成果。これだけ見ていると気づいたときには手遅れになりがち。
顧客ライフサイクルで整理する分類軸が AARRR(海賊指標) です。Acquisition(獲得)→ Activation(活性化)→ Retention(継続)→ Referral(紹介)→ Revenue(収益)の5段階に代表 KPI を割り当てると、KPIツリーを「獲得から継続まで」の流れで俯瞰できます(Retention・Referral の数理は第2章以降で扱います)。
flowchart TD KGI["KGI:売上"] --> A["訪問数"] KGI --> B["CVR"] KGI --> C["単価"] A --> A1["広告費"] A --> A2["流入チャネル"] B --> B1["LP改善"] B --> B2["カート離脱対策"] C --> C1["クロスセル"] C --> C2["価格設定"]
3. 弾力性で見る各レバーの効き(数式)
「どのレバーを動かせば KGI が一番増えるか」を、**弾力性(1% 動かしたときに KGI が何 % 動くか)**で考えます。まず単一チャネルの売上 を片対数にすると、積が和になります。
このとき各レバーの弾力性は、いずれも 1 です。
つまり単一チャネルの中では、どのレバーを 1% 上げてもチャネル売上は 1% 増える(率では等価)。では複数チャネルの総和ではどうか。 を1つのレバー(例:)で微分します。
でも同じ結果です。すなわち——
総売上の、チャネル の任意のレバーに対する弾力性は、すべて (チャネル の売上シェア)に等しい。
そして、あるレバーを改善率 (例:+10%)だけ動かしたときの KGI 増分は、
となります。だから優先順位は、(現実的に動かせる改善率)と (そのチャネルの規模)の掛け算で決まる、というのが結論です。
4. どのレバーを動かすか(コード)
4チャネルの KPIツリーを pandas で組み、売上シェア(=弾力性)と感度を計算して、最も効くレバーを特定します。
import numpy as np
import pandas as pd
# チャネル別のKPIツリー(合成データ):訪問数 × CVR × 単価 = チャネル売上
tree = pd.DataFrame({
"チャネル": ["検索広告", "SNS広告", "メール", "オーガニック"],
"訪問数": [50_000, 80_000, 20_000, 100_000],
"CVR": [0.030, 0.015, 0.050, 0.020],
"単価": [8_000, 6_000, 9_000, 7_000],
})
tree["売上"] = tree["訪問数"] * tree["CVR"] * tree["単価"]
KGI = tree["売上"].sum()
tree["売上シェア"] = tree["売上"] / KGI # 総売上の「そのチャネルのレバー」に対する弾力性
print("=== KPIツリー(チャネル別の乗法分解)===")
print(tree.to_string(index=False, formatters={
"訪問数": "{:,.0f}".format, "CVR": "{:.3f}".format,
"単価": "{:,.0f}".format, "売上": "{:,.0f}".format,
"売上シェア": "{:.3f}".format}))
print(f"\nKGI(総売上)= {KGI:,.0f} 円")
# 各レバーの「現実的に動かせる改善率」(実務的な仮定)
achievable = {"訪問数": 0.15, "CVR": 0.10, "単価": 0.05}
# 各(チャネル × レバー)を改善したときのKGI増分(円)= 改善率 × チャネル売上
rows = []
for _, r in tree.iterrows():
for lever, rate in achievable.items():
rows.append({
"チャネル": r["チャネル"],
"レバー": lever,
"改善率": rate,
"弾力性(売上シェア)": r["売上シェア"],
"KGI増分": rate * r["売上"],
})
imp = pd.DataFrame(rows).sort_values("KGI増分", ascending=False)
print("\n=== レバーの感度ランキング(KGI増分が大きい順・上位6)===")
print(imp.head(6).to_string(index=False, formatters={
"改善率": "{:.2f}".format,
"弾力性(売上シェア)": "{:.3f}".format,
"KGI増分": "{:,.0f}".format}))
top = imp.iloc[0]
print(f"\n最も効くレバー:{top['チャネル']} の {top['レバー']} を "
f"+{top['改善率']:.0%} → KGIが {top['KGI増分']:,.0f} 円 増える")
出力:
=== KPIツリー(チャネル別の乗法分解)===
チャネル 訪問数 CVR 単価 売上 売上シェア
検索広告 50,000 0.030 8,000 12,000,000 0.284
SNS広告 80,000 0.015 6,000 7,200,000 0.171
メール 20,000 0.050 9,000 9,000,000 0.213
オーガニック 100,000 0.020 7,000 14,000,000 0.332
KGI(総売上)= 42,200,000 円
=== レバーの感度ランキング(KGI増分が大きい順・上位6)===
チャネル レバー 改善率 弾力性(売上シェア) KGI増分
オーガニック 訪問数 0.15 0.332 2,100,000
検索広告 訪問数 0.15 0.284 1,800,000
オーガニック CVR 0.10 0.332 1,400,000
メール 訪問数 0.15 0.213 1,350,000
検索広告 CVR 0.10 0.284 1,200,000
SNS広告 訪問数 0.15 0.171 1,080,000
最も効くレバー:オーガニック の 訪問数 を +15% → KGIが 2,100,000 円 増える
出力の意味:まず KPIツリーで各チャネルの売上と売上シェアが出ます。オーガニックが最大シェア 0.332。感度ランキングは「改善率 × チャネル売上」で KGI 増分を比べたもの。弾力性(売上シェア)は同じチャネル内ならレバーによらず一定ですが、現実の増分は改善率で差がつきます。結果、シェア最大のオーガニックで最も動かしやすい訪問数(+15%)が、KGI を +210万円 増やす最強レバーでした。「弾力性が全部 1 だから、何を上げても同じ」ではなく、**規模(シェア)× 実現可能性(改善率)**で優先順位が決まる——これが KPIツリーで意思決定する勘所です。
⚠️ よくある誤解
- 「KPI は多いほど良い」ではない:KGI に紐づかない指標は意思決定をぶらすノイズ。まずツリーで KGI と結びつけてから測ります。
- 「遅行指標だけ見れば十分」ではない:売上や解約が動いたときには手遅れ。先行指標(訪問・CVR・開封率)で早期に察知します。
- 「弾力性が全部 1 だから、どのレバーも同価値」ではない:単一チャネル内は率で等価でも、総売上で見ればシェア と実現可能な改善率 の積で増分が大きく変わります。
- 「集計済みの数字があれば足りる」ではない:最小粒度を捨てると後から分解できません。アトミックなログを残すのがデータ設計の前提。
- 乗法分解は会計的な恒等式であって、因果効果ではない:訪問を15%増やすと CVR が下がる(質の低い流入が混じる)こともあります。施策の真の効果は第7章の実験・因果推論で測ります。
関連ノート
- マーケティングサイエンスとは(前のトピック・KGI→KPI の考え方)
- ファネルとコンバージョンの基本指標(次のトピック・CVR を段階に分解する)
- 第1章 マーケティングサイエンスの枠組み 目次
- 第2章 顧客価値の測定(LTV・CAC)で「単価 × 頻度 × 継続」へ展開予定/弾力性の回帰推定など測定の厳密理論は統計テキストへ
- マーケティング・サイエンス 全体目次