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

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

言語 JA

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

中級

06.7.19

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

最終更新 2020-10-07 読了時間 2 分
まとめ
コホートヒートマップは、「いつ獲得したユーザー群(コホート)」を行、「獲得から何か月目か」を列にした継続率の行列を色で塗り、解約の傾向を一枚で見せる図です。行方向に読めば特定の獲得月だけ継続率が低いという縦縞(コホート固有の問題)が、列方向に読めば全コホート共通で 3 か月目に落ちるという横縞(プロダクト共通の離脱点)が、それぞれ色の帯として現れます。実装は ax.imshow(matrix, cmap="YlGnBu", vmin=0, vmax=1) で行列を塗り、二重ループの ax.text で各セルに 70% のような数値を重ねるだけです。読み終えると、6 コホート × 6 か月の行列から「後の月に獲得したコホートほど継続率が低い」という傾向を読み取り、自分のサブスクデータの継続率行列を同じ形で描けるようになります。

直感 #

サブスクリプションの継続率を「2024 年 1 月に登録した人の 1 か月目は 70%、2 か月目は 64%……」と獲得月ごとに表にすると、6 コホート × 6 か月で 36 個の数字になります。コホートヒートマップはこの表の各セルを継続率の高さで色付けし、数字を読まなくても濃淡で傾向をつかめるようにしたものです。左から右へ色が薄くなるのは時間とともに解約が進む自然な流れで、上から下へ薄くなるなら後から獲得したコホートほど定着が悪い、ある列だけ急に薄いなら全員がその月に離脱するきっかけがある、と 3 種類のパターンを区別して読めます。

Python で描く #

次のコードは、1 か月目 70% から 6 か月目 40% へ落ちる基本カーブ base に、コホートが新しくなるごとに 3 ポイントずつ下げる効果とわずかなノイズを加えて 6 × 6 の継続率行列を作り、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()

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

実行結果の読み方 #

行を左から右に追うと、どのコホートも 1 か月目の 60〜70% から 6 か月目の 25〜40% へ色が薄くなり、これが解約の自然な進行です。列を上から下に追うと、2024-06 のコホートは 2024-01 より全体に薄く、後から獲得したユーザーほど定着が悪いというコホート効果が読めます。実データで特定の行だけ急に薄ければ、その獲得月のキャンペーンや流入経路を疑い、特定の列だけ全行で薄ければ、その経過月に起きる請求や機能制限などプロダクト側の離脱点を疑います。

使いどころと落とし穴 #

コホートヒートマップは、SaaS やアプリの継続率を獲得月別に監視し、コホート固有の問題とプロダクト共通の問題を切り分けるときの定番です。コホートが 24 を超えると図が縦長になり色の比較が難しくなるので、四半期ごとにまとめるか、コホートごとの継続率カーブを ax.plot で重ねた折れ線に切り替えます。ユーザー数の絶対値をそのまま色にすると、獲得数の多い月が無条件に濃く見えて誤読するため、必ず各行を初月のユーザー数で割った継続率(%)にしてから imshow に渡してください。カラーマップは jet のような虹色ではなく、YlGnBu や Blues のように明度が一方向に変わるものを選ぶと、濃淡がそのまま大小として読めます。