K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

ファネルチャートで段階ごとの離脱を把握

中級

06.7.22

ファネルチャートで段階ごとの離脱を把握

最終更新 2020-02-07 読了時間 2 分
まとめ
ファネルチャートは、訪問 → 商品閲覧 → カート投入 → 決済 → 購入のような段階ごとの残存数を、上から下へ幅が狭くなる帯で描き、どの段で最も多く離脱したかを帯の幅の変化で見せる図です。各段の幅を最初の段の人数で割った比率にして中央揃えで描くと、漏斗(ファネル)の形になります。matplotlib に専用関数はないので、ax.fill_between で四角形を 1 段ずつ塗り、ax.text で段の名前と人数を帯の中に書きます。読み終えると、12,000 人から 1,250 人まで減る 5 段のうち「訪問 → 商品閲覧」で 55% が落ちる最大の離脱点を帯の幅から読み取り、自分のサービスのステップ名と人数を入れ替えて同じ図を描けるようになります。

直感 #

EC サイトの購入フローは、訪問した 12,000 人のうち商品を見た人が 5,400 人、カートに入れた人が 2,600 人、と段階ごとに人が減っていきます。この数字を棒グラフにしても減り方は分かりますが、ファネルチャートは各段の幅を最初の 12,000 人に対する比率にして中央に揃えるため、「漏斗のどこがいちばん細くなるか」として離脱の大きい段が形で見えます。隣り合う段の幅の差が大きいところが改善の優先箇所で、この例では 12,000 人の段から 5,400 人の段で幅が半分以下になるのが一目で分かります。全体の変換率(CVR)は最下段を最上段で割った 1,250 ÷ 12,000 ≒ 10.4% です。

Python で描く #

次のコードは 5 段の人数 counts を最初の段で割って幅を求め、段ごとに ax.fill_between で中央揃えの帯を塗り、帯の中に段名と人数を書きます。軸はすべて消して、左下に CVR を文字で添えます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import numpy as np
import matplotlib.pyplot as plt

steps = ["訪問", "商品閲覧", "カート投入", "決済情報", "購入完了"]
counts = np.array([12000, 5400, 2600, 1800, 1250])
max_width = counts[0]

fig, ax = plt.subplots(figsize=(6, 4))
y_positions = np.arange(len(steps), 0, -1)
for idx, (step, count) in enumerate(zip(steps, counts)):
    width = count / max_width
    left = 0.5 - width / 2
    ax.fill_between(
        [left, left + width],
        [y_positions[idx]] * 2,
        [y_positions[idx] - 0.8] * 2,
        color=plt.cm.Blues(0.3 + idx * 0.12),
    )
    ax.text(
        0.5,
        y_positions[idx] - 0.4,
        f"{step}\n{count:,}",
        ha="center",
        va="center",
        color="white",
        fontsize=11,
    )

ax.set_xlim(0, 1)
ax.set_ylim(0, len(steps) + 0.5)
ax.axis("off")
ax.set_title("EC購入ファネルの離脱状況")

conversion = counts[-1] / counts[0]
ax.text(0.02, 0.3, f"CVR: {conversion:.1%}", fontsize=11, fontweight="bold")

fig.tight_layout()

plt.show()

梯形を使うと帯の幅で残存数の減り具合が直観的に伝わりますの図

実行結果の読み方 #

帯の幅が各段の残存人数 counts、隣の段との幅の差が離脱の大きさです。訪問 12,000 から商品閲覧 5,400 への幅の変化が最も大きく、ここが最大のボトルネックだと読めます。カート投入 2,600 から決済情報 1,800 への差は比較的小さく、決済まで進んだ人は購入に至りやすいことも分かります。左下の CVR 10.4% は最上段と最下段の比で、改善施策の前後でこの数字と帯の形がどう変わるかを比べるのが実務での使い方です。

使いどころと落とし穴 #

ファネルチャートは、EC の購入導線や会員登録フローのように「順番が決まった 3〜7 段」の離脱率を関係者に伝えるときの図です。段をまたぐ所要時間や、途中で別の経路に分岐するフローは表現できないので、分岐があるならサンキーダイアグラムに切り替えます。各段の人数だけを見て段間の時間(カート投入から決済まで平均 3 日かかる、など)を無視すると実態とずれた印象になるため、必要なら段名の下に所要時間も併記してください。幅と高さの両方を変える描き方にすると面積が人数に比例しなくなり誤読を生むので、この例のように高さ 0.8 を固定し、幅だけで人数を表すのが基本です。