ファネル分析: 行動ステップの落ち方を見る
Stage 4 — 第3章 | データ分析基礎カリキュラム 推定学習時間:30〜40分 | 難易度:★★★☆☆
この章で学ぶこと
ECサイトでは、顧客が登録してから初回注文し、さらにリピート注文するまでに段階があります。 すべての顧客が最後の段階まで進むわけではありません。
この章では、行動ステップごとの人数や割合を見る ファネル分析 を学びます。
この章を終えると、こんなことができるようになります:
- 登録、初回購入、リピート購入の人数を数えられる
- ステップ間の離脱をSQLで確認できる
COUNT(DISTINCT ...)の使いどころを理解できる- ファネル分析の前提条件を説明できる
1. ファネル分析とは
ファネル分析は、ユーザーが進むステップを上から順に並べ、どこで人数が減っているかを見る分析です。
ECデータでは、たとえば次のようなステップを考えられます。
| ステップ | 意味 |
|---|---|
| 登録 | customers に存在する |
| 初回購入 | 完了注文が1件以上ある |
| リピート購入 | 完了注文が2件以上ある |
この分析では、単なる注文件数ではなく「顧客数」を数えることが重要です。 同じ顧客が複数回注文しても、顧客数としては1人です。
2. 顧客ごとの注文回数を作る
まず、顧客ごとの完了注文回数を集計します。
WITH customer_order_counts AS (
SELECT
customer_id,
COUNT(*) AS completed_order_count
FROM orders
WHERE status = 'completed'
GROUP BY customer_id
)
SELECT
customer_id,
completed_order_count
FROM customer_order_counts;
この中間結果があると、初回購入者とリピート購入者を判定できます。
3. ステップごとの人数を数える
登録顧客、購入顧客、リピート顧客を1つのSQLで集計します。
WITH customer_order_counts AS (
SELECT
customer_id,
COUNT(*) AS completed_order_count
FROM orders
WHERE status = 'completed'
GROUP BY customer_id
)
SELECT
COUNT(DISTINCT c.customer_id) AS registered_customers,
COUNT(DISTINCT CASE
WHEN o.completed_order_count >= 1 THEN c.customer_id
END) AS purchased_customers,
COUNT(DISTINCT CASE
WHEN o.completed_order_count >= 2 THEN c.customer_id
END) AS repeat_customers
FROM customers AS c
LEFT JOIN customer_order_counts AS o
ON c.customer_id = o.customer_id;
LEFT JOIN を使うことで、注文がない顧客も登録顧客として残します。
ここで JOIN にすると、未購入の顧客が消えてしまいます。
4. CVRを計算する
人数だけでなく、次のステップに進んだ割合を見ると、改善ポイントを考えやすくなります。
WITH customer_order_counts AS (
SELECT
customer_id,
COUNT(*) AS completed_order_count
FROM orders
WHERE status = 'completed'
GROUP BY customer_id
),
funnel AS (
SELECT
COUNT(DISTINCT c.customer_id) AS registered_customers,
COUNT(DISTINCT CASE
WHEN o.completed_order_count >= 1 THEN c.customer_id
END) AS purchased_customers,
COUNT(DISTINCT CASE
WHEN o.completed_order_count >= 2 THEN c.customer_id
END) AS repeat_customers
FROM customers AS c
LEFT JOIN customer_order_counts AS o
ON c.customer_id = o.customer_id
)
SELECT
registered_customers,
purchased_customers,
repeat_customers,
purchased_customers * 1.0 / registered_customers AS purchase_rate,
repeat_customers * 1.0 / purchased_customers AS repeat_rate
FROM funnel;
* 1.0 は、小数で割り算するための書き方です。
データベースによっては整数同士の割り算が整数になることがあるため、実務では注意します。
5. ファネル分析の注意点
ファネル分析では、ステップの定義をそろえることが大切です。
| 確認点 | 例 |
|---|---|
| 対象期間 | 2026年1月登録者だけを見るのか、全期間を見るのか |
| 対象注文 | completed のみか、キャンセルも含めるのか |
| 顧客の単位 | customer_id で数えるのか、メールアドレスで数えるのか |
| リピート定義 | 2回以上注文か、30日以内の再購入か |
同じ「購入率」でも、定義が違えば数値は変わります。 分析結果を共有するときは、必ず定義も一緒に伝えましょう。
実務での使いどころ: どこで落ちているかを見る
ファネル分析は、ユーザーが次のステップへ進む割合を見る分析です。 ECなら、訪問、商品閲覧、カート投入、購入のような流れを確認します。
| ステップ | 見たいこと |
|---|---|
| 訪問 | どれだけ入口に来ているか |
| 商品閲覧 | 商品に興味を持ったか |
| カート投入 | 購入意欲があるか |
| 購入 | 最終成果に至ったか |
ファネルでは、人数だけでなく、前のステップからの遷移率を見ます。 どこかで大きく落ちていれば、そのステップに改善余地があるかもしれません。
ただし、ステップの順番や期間定義が曖昧だと、数値の意味も曖昧になります。 「同じ日に購入した人だけを見るのか」「7日以内の購入まで含めるのか」などを先に決めましょう。
ミニ演習
次のファネルを設計してみましょう。
- 無料会員登録までのファネルを3ステップで定義する。
- 模擬試験受験までのファネルを3ステップで定義する。
- 商品購入ファネルで、分母をどのステップにするか考える。
- ファネル分析で期間定義が重要な理由を説明する。
まとめ
| 指標 | SQLでの考え方 |
|---|---|
| 登録顧客数 | customers の顧客数 |
| 購入顧客数 | 完了注文が1件以上ある顧客数 |
| リピート顧客数 | 完了注文が2件以上ある顧客数 |
| CVR | 次ステップ人数 ÷ 前ステップ人数 |
この章のキーメッセージ: ファネル分析では、行数ではなく顧客数を数え、どのステップで落ちているかを確認します。SQLを書く前に、ステップと対象期間を明確にしましょう。
この章の確認
- ファネル分析では何を確認しますか?
- 未購入顧客も含めるために、なぜ
LEFT JOINが必要ですか? - 購入顧客数を数えるとき、なぜ
COUNT(DISTINCT customer_id)を使いますか? - リピート購入率の定義例を説明してください。