SaaSのコホート分析でよく使われるレイヤー・ケーキ・チャートの作り方

![p1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/13a04cf0-d21a-cecd-6550-f60a014055db.png)

# 初めに

SaaS（Software as a service)やサブスクリプションのビジネスは売り切りのビジネスとは異なり、月または年ごとに定期的な収益をあげていくモデルです。そこでMRR（月間定期収益）やARR（年間定期収益）というものをモニターしていくことになります。

加えてただMRRやARRをモニターするだけではなく、毎月なり毎年なり、獲得した顧客がどのようにサービスを継続しているかをモニターすることも重要になります。

こうしたデータを可視化する時によく使われるレイヤー・ケーキと呼ばれるチャートがあるのですが、今日はこちらの作り方を紹介します。

# 準備

今回は[Exploratory](https://ja.exploratory.io/?utm_campaign=layer_cake&utm_medium=blog&utm_source=exploratory)を使って、簡単にレイヤー・ケーキ・チャートを作成する方法を見ていきましょう。Exploratoryは30日間フル機能の試用ができますので興味があれば、お試しください！

 Exploratory無料トライアル - [リンク](https://exploratory.io/pricing/?utm_campaign=layer_cake&utm_medium=blog&utm_source=exploratory)

# 使用データ概要

今回は以下のような1行が顧客ごとの決済トランザクションを表しているデータを使っていきます。
![p2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/d721283e-12e6-48de-6f41-74c999e3bddf.png)
データは[こちら](https://exploratory.io/data/BWz1Bar4JF/Payment-Log-knZ1fDd6ip)からダウンロードできます。

**データ項目**

- payment_date (支払いがあった日)
- userid（顧客ごとに一意なID）
- price （支払い金額。今回は月額5,000円のサービスを想定）

またデータをインポートすると以下のことがわかります。
![p3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/b1aa4202-7860-a655-78df-1100ec8286f6.png)

* 2016/05/17から2017/02/20の間のデータであること
* 顧客がのべ3390人いる（解約者含む）こと
* 月額5,000円のサービスであること

# MRR（月間定期収入）を可視化する

レイヤー・ケーキはエリア・チャートを使いますが、まずはエリア・チャートを使ってMRRを可視化してみます。
チャート・ビューに移動してチャート・タイプからエリアを選択、X軸に「payment_date」を、Y軸に「price」を設定します。
![p4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/8a04fe7d-8dab-071c-8abb-0b67462d3080.png)
続いてX軸のスケールを「年に切り捨て」から「月に切り捨て」に変更します。　
![p5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/37edd191-1cc0-3800-eb1b-52ad2e50ea71.png)
これでMRRが可視化されました。
![p6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/a4fbe637-8077-9ce3-6a92-e328977258a8.png)

# 購読開始日の列を作る

レイヤー・ケーキ・チャートはこのMRRのエリア・チャートを購読開始タイミングごとに色分けしたものなので、色（グループ化）に購読開始タイミングを割り当てれば、期待している形になります。
![p7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/b3dcebd5-ff99-80f7-c71e-e8ad11e0acfd.png)
ただ残念なことに元のデータには顧客ごとの購読開始タイミングといった列はないのでデータを加工をして、顧客の購読開始日の列を追加してみましょう。

具体的には以下のように顧客ごとの購読開始日の列をつくっていきます。
![p8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/f51eaa1c-9798-d1d5-5ad3-777f9640776e.png)
テーブル・ビューに戻って列をつくっていきます。上記の図のように顧客ごとにデータの固まりをつくりたいので、列ヘッダーメニューからグループ化を選択します。
![p9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/1d7ed1ac-033f-31f0-37f7-a22f9085d126.png)
すると先程の図のように顧客ごとにデータが色分けされ、顧客ごとにデータの固まりができたことが分かります。
![p10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/3ab5ac8d-ced4-c8ff-4f93-6d79c5bee781.png)
次は列の追加です。「payment_date」の列ヘッダーメニューをクリックして計算の作成をクリックします。
![p11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/5b835ce6-d331-65a2-1dd1-059998ae150e.png)
すると計算を作成するダイアログが表示されます。購読開始日は言い換えると、「payment_date」の最小値とも言えるので、最小値を計算するmin関数という関数を使って下記のように入力・実行します。
![p12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/681bb9bf-f86b-7eaf-39d3-c28df7959441.png)
すると顧客ごとの「payment_date」の最小値、すなはち購読開始日の列が追加されるわけです。
![p13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/62d98489-5ba0-6675-d91d-c8846815466d.png)

# 購読開始日をコホートにしたレイヤー・ケーキをつくる

それではチャート・ビューに戻って、色（グループ化）に「subscribed_date」を割り当ててみましょう。
![p14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/cb0353d0-cb8f-88f7-aaff-534ba7a4e205.png)
先程と同様にスケールが「年に切り捨て」されているので、スケールを「月に切り捨て」に変更します。
![p15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/be137a56-c4ce-0510-d241-5a1002a70b77.png)
すると期待と違うチャートが表示されているはずです。
![p16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/1fc7eb00-d95e-8e39-cf1f-2d50a605baab.png)
上記のチャートは、新しく入ってきた顧客のコホートが下のレイヤーになっていて、その上に古くからいる顧客のコホートのレイヤーがのっかっている形になっています。

この順序を逆にすることで、つまり新しく入ってきた顧客のコホートが上のレイヤーになるようにすると、より直感的にわかりやすくなります。

そのために、チャートの色の順序を逆にしてみましょう。

色（グループ化）のメニューから、「色の並び順」を選択します。
![p17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/9d89a897-b708-e639-de68-c902e5098cfd.png)
すると色の並び順の設定画面が表示されるので、「下から上」を選択します。
![p18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/87aeadd4-8faa-bce0-1ce7-d38fb0a8073d.png)
これでよりわかりやすいレイヤー・ケーキ・チャートが完成しました！
![p19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/fed5f7e8-0e3a-3be2-0ad5-c1f24c60b3c4.png)

# 見栄えを調整する

## 色のパレットを変える

折角なのでカラーパレットを変更してみましょう。色（グループ化）のメニューをクリックして、「色の設定」を選択します。
![p20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/17d7d768-b27f-c880-58dc-fa8433d79de9.png)
今回はブルーのパレットを利用しましょう。
![p21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/097438cc-8df4-decd-3c31-aa02171344cc.png)
カラーパレットが変更されました。
![p22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/f1da1cbf-5d9b-3880-b351-3ad34dfc8378.png)

## 数値をチャート上に表示する

続いてチャート内に値も表示させましょう。ギヤアイコンをクリックして、値をプロット上に表示を「上」、フォントサイズを「14」に設定します。
![p23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/f34cfc5c-1f66-d2c0-67e0-5c00e4cb570d.png)
完成です。レイヤー・ケーキ・チャートで可視化することで、例えば2017年2月に多くの顧客がチャーン（解約）し、新規顧客を獲得していることが明らかになります。
![p24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/d74419d7-7f70-d99f-a785-c16cab4a2b88.png)
毎回チャートを作成する手間も省けるので、こういった定点観測するようなチャートはダッシュボードにまとめて、スケジュール機能を使って更新をしていくと良いかと思います。
![p25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/0cb5dfa2-ab7a-003e-34c8-4ab95fd84264.png)

# レイヤー・ケーキの罠

今回は2017年2月にあまりに急激な変化が起こっているために、変化に気づくことが容易でした。しかしビジネスをやっていると、今回ほど急激な変化はなかなか起きません。

レイヤー・ケーキ・チャートでは大きな変化を捉えることはできますが、例えば各コホート（購読開始タイミング毎のグループ）毎のサービス継続状況を比べることは難しかったりします。そういった時には**生存曲線**を利用した**コホート分析**というのが有効となります。

下記に生存分析に関するリンクを貼っておくので、ご興味がある方はそちらも合わせてご確認ください。

- [SaaSアナリティクス — 今さら聞けないサブスクリプション・ビジネス最重要指標 — Vol. 5— コホート分析](https://exploratory.io/note/BWz1Bar4JF/SaaS-Vol-5-CSM9zmT1Ja)


# そもそも元データのようにデータが整形されていない場合

なお今回のデータは1行が1つの決済トランザクションとなっていたため数ステップでレイヤー・ケーキ・チャートの作成ができましたが、例えば権限の問題で決済システムへのアクセスができず、取得できるデータは顧客ごとの購読開始情報と解約情報しかないといったケースもあるかと思います。

そういったケースの場合、どのようにデータをつくっていくのかという話はまた別の機会で話していきたいと思います。

-----


# 自分のデータで実際に試してみる

Exploratoryでは30日間の無料トライアルができます。実際に自分達のデータを使って試してみたい方は下記より無料トライアルをご利用ください！
![p26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226318/ee3f1c51-29b3-55db-d266-b69ffc4eafde.png)

- Exploratory 無料トライアル - [リンク](https://exploratory.io/pricing/?utm_campaign=layer_cake&utm_medium=blog&utm_source=exploratory)

なおExploraotryは統計・機械学習のモデルを使ったデータ分析もできます。そちらについては毎週、[無料オンラインセミナー](https://exploratory.io/online-seminar-jp)を開催しています（録画もあり）ので、ご興味ある方は是非ご視聴ください！