コホートヒートマップで継続率を一望

中級

6.7.19

コホートヒートマップで継続率を一望

最終更新 2020-10-07 読了時間 1 分
まとめ
  • コホートヒートマップで獲得月×経過月の継続率を色で一望する。
  • ax.imshow でマトリクスを描画し、セル内にパーセント値を重ねる。
  • サブスクの解約傾向や特定コホートの問題発見に使う。

プロダクトの継続率分析では、獲得コホートと経過月を表にしたヒートマップが便利です。縦縞や横縞が出ていれば、特定期間の問題を推測できます。

 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
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

cohorts = ["2024-01", "2024-02", "2024-03", "2024-04", "2024-05", "2024-06"]
months = [f"{m}ヶ月目" for m in range(1, 7)]
rng = np.random.default_rng(21)
base = np.linspace(0.7, 0.4, num=6)
matrix = np.vstack(
    [
        np.clip(base - idx * 0.03 + rng.normal(0, 0.01, size=base.size), 0.1, 0.9)
        for idx in range(len(cohorts))
    ]
)

fig, ax = plt.subplots(figsize=(6.4, 3.8))
im = ax.imshow(matrix, cmap="YlGnBu", vmin=0, vmax=1)

ax.set_xticks(range(len(months)), labels=months)
ax.set_yticks(range(len(cohorts)), labels=cohorts)
ax.set_title("サブスク継続率のコホートヒートマップ")

for i in range(matrix.shape[0]):
    for j in range(matrix.shape[1]):
        ax.text(j, i, f"{matrix[i, j]*100:.0f}%", ha="center", va="center", fontsize=9)

cbar = fig.colorbar(im, ax=ax, fraction=0.045, pad=0.02)
cbar.set_label("継続率")
ax.set_xlabel("経過月")
ax.set_ylabel("獲得コホート")

fig.tight_layout()

plt.show()

縦縞や横縞が出ていれば、特定期間の問題を推測できますの図

読み方のポイント #

  • 縦方向の濃さが急に落ちているコホートがあれば、その獲得月に問題があったと推測できます。
  • 横方向に共通した色変化は、プロダクトのライフサイクル全体の課題を示します。
  • 値をパーセント表示にすると、色だけに頼らず具体的な継続率が把握できます。

いつ使うか #

  • 適している場面: 獲得月(コホート)別にリテンション率の時間変化を色で一望したいとき。SaaSの継続率分析に最適です。
  • 不向きな場面: コホート数が増えすぎるとヒートマップが縦長になり、パターンの比較が困難になります。
  • 代替手段: 折れ線グラフでコホート別のリテンション曲線を重ねると、特定コホートの比較がしやすくなります。

よくある失敗パターン #

  • 絶対値と比率の混同: ユーザー数の絶対値をそのまま色にすると、コホートサイズの違いで誤解します。リテンション率(%)に変換してから描画してください。
  • カラーマップの選択ミス: 虹色カラーマップは値の大小関係が直感的でありません。連続的な単色グラデーション(Blues 等)を使いましょう。