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

中級

6.7.22

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

最終更新 2020-02-07 読了時間 1 分
まとめ
  • ファネルチャートでステップごとのユーザー離脱を帯幅の減衰で可視化する。
  • ax.fill_between で梯形を描き、各段階の残存数とCVRを表示する。
  • EC購入フローやサービス登録導線のボトルネック発見に使う。

流入→CVまでの段階ごとの減衰を示すにはファネルチャートが便利です。梯形を使うと帯の幅で残存数の減り具合が直観的に伝わります。

 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()

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

読み方のポイント #

  • 各ステップの幅が残存ユーザー数を示します。ギャップが大きい段階がボトルネックです。
  • トップとボトムの値からCVRを算出し、図内に表示するとインパクトが伝わります。
  • サービスによってステップ名を変えるだけで応用できます。

いつ使うか #

  • 適している場面: マーケティングや営業プロセスの段階ごとの離脱率を直感的に示したいとき。
  • 不向きな場面: 段階間の時間差やフローの分岐を表現できないため、複雑なプロセスには不十分です。
  • 代替手段: 分岐を含むフローにはサンキーダイアグラムの方が柔軟に表現できます。

よくある失敗パターン #

  • 段階間の時間差を無視: 各段階のコンバージョン率だけ見て、段階間にかかる時間を無視すると実態と乖離した印象を与えます。時間情報も併記しましょう。
  • ファネルの幅が面積と不一致: 幅だけでなく高さも変わると面積が値に比例しなくなります。高さを一定にして幅だけで値を表現してください。