06.7.19
コホートヒートマップで継続率を一望
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 か月目の 60〜70% から 6 か月目の 25〜40% へ色が薄くなり、これが解約の自然な進行です。列を上から下に追うと、2024-06 のコホートは 2024-01 より全体に薄く、後から獲得したユーザーほど定着が悪いというコホート効果が読めます。実データで特定の行だけ急に薄ければ、その獲得月のキャンペーンや流入経路を疑い、特定の列だけ全行で薄ければ、その経過月に起きる請求や機能制限などプロダクト側の離脱点を疑います。
使いどころと落とし穴 #
コホートヒートマップは、SaaS やアプリの継続率を獲得月別に監視し、コホート固有の問題とプロダクト共通の問題を切り分けるときの定番です。コホートが 24 を超えると図が縦長になり色の比較が難しくなるので、四半期ごとにまとめるか、コホートごとの継続率カーブを ax.plot で重ねた折れ線に切り替えます。ユーザー数の絶対値をそのまま色にすると、獲得数の多い月が無条件に濃く見えて誤読するため、必ず各行を初月のユーザー数で割った継続率(%)にしてから imshow に渡してください。カラーマップは jet のような虹色ではなく、YlGnBu や Blues のように明度が一方向に変わるものを選ぶと、濃淡がそのまま大小として読めます。
- 相関ヒートマップ — 変数間の相関を色で一覧
- カレンダーヒートマップ — 年間の日別指標を曜日×週で俯瞰
- タイルマップ — 地域スコアを正方形グリッドで比較