サブスクリプション型のビジネスに特有な収益の指標の作り方

サブスクリプション型のビジネスは、購読型であるがゆえに、売上型のビジネスとは異なるサブスクリプション型のビジネスに特有の指標を扱うことになります。

また、サブスクリプション型のビジネスに特有な指標の一覧はこちらにまとめていますが、こちらのノートでは、以下の収益に関わる指標を支払いデータから計算する方法を紹介します。

  • エクスパンション / コントラクション - リンク
  • MRRリテンション率 - リンク
  • MRRエクスパンション率 - リンク
  • ネット・レベニュー・リテンション率 - リンク
  • クイック・レシオ - リンク

データの概要

今回のサンプルデータはサブスクリプション型のビジネスの支払いデータです。データはこちらのページからダウンロードできます。

このデータは、一行が一人の顧客の月ごとの支払い履歴を表していて、列には以下の情報があります。

  • 顧客ID
  • 支払い日
  • 支払いプラン
  • 支払い金額

データのインポート

Exploratoryを起動したら、プロジェクト「新規作成」ボタンをクリックします。

プロジェクトを作成するためのダイアログが表示されるので、任意の名前をつけて、作成ボタンをクリックします。

プロジェクトを作成できました。

次はデータをインポートします。今回はサンプルデータとしてSaaSサービスの支払いデータを使用します。このデータは1行が1顧客の毎月の支払いを表すデータです。

データはこちらのページからダウンロードできます。

支払いデータをダウンロードできたら、ダウンロードしたフォルダを開き、「支払いデータ.csv」をExploratoryの画面にドラッグ&ドロップします。

すると、インポートダイアログが表示されます。

インポートダイアログでは左側にある項目から、データをインポートする際の設定を指定できますが、今回は設定は不要なため「インポート」ボタンをクリックします。

するとデータフレームの作成ダイアログが表示されるので、「作成」ボタンをクリックします。

データがインポートされ、データのサマリ情報をまとめた、「サマリビュー」が開きます。

「テーブル」をクリックすると、テーブル形式でデータを確認できる「テーブルビュー」が開きます。

各指標を計算する前に

今回は各指標の計算を簡単にできるように、インポートした支払いデータを、以下のように1行が、とある月の以下の収益の指標を表すデータになるように先に集計していきます。

  • MRR
  • ニューMRR
  • 既存顧客からのMRR

MRR

MRR(月間定期収益)は、それぞれのユーザーが払った金額の月々の合計値になるため、月々の支払い金額を計算するだけで簡単に計算できます。

支払い日の列ヘッダーメニューから、「集計」を選択します。

集計のダイアログが表示されたら、グループに「支払い日」を選択し、日付の単位に「月」で切り捨てを選択します。

続いて値に、「支払い金額」を選択し、集計関数には合計値(SUM)を選択します。

最後に列名をMRRに変更して実行します。

これでMRRを集計できました。

ニューMRR

ニューMRRは新規顧客から得られたMRRとなります。

そのため、以下のように顧客の支払い回数の情報があれば、支払い回数が1回の顧客から得られる月々の収益を計算して、ニューMRRを集計できます。

そこで、支払いデータに支払回数の情報を計算するために、集計前のデータソースのステップに戻り、「支払い日」の列ヘッダーメニューから、「表計算」、「ランキング(隙間なし)」の「昇順」を選択します。

このとき、支払い日のランキングを計算するのは、顧客ごとに日付が古い順にランキングをつけることで、支払い回数を計算できるからです。

表計算のダイアログが開いたら、今回は顧客ごとにランキングを計算したいので、グループに「顧客ID」を選択し、プレビューボタンをクリックします。

最後に値の列名を、「支払い回数」に変更し、実行します。

これで支払い回数を計算できました。

続いて支払い回数をもとに新規顧客から得られたMRRを計算するために、集計のステップに移動し、集計のトークンをクリックして、ステップを開きます。

集計のダイアログが開いたら、値に「支払い金額」を追加し、集計関数に「条件付き合計値(SUM_IF)」を選択します。

すると、条件を指定するためのダイアログが表示されるため、列に「支払い回数」、演算子に「等しい」、値に「1」と入力します。

続いて列名を「ニューMRR」に設定し適用し、実行します。

これで、ニューMRRを集計できました。

既存顧客からのMRR

最後に既存顧客からMRRを集計します。

既存顧客からのMRRは、支払い回数が1回ではない顧客から得られる月々の収益になるため、ニューMRRと同じように「条件付き合計値(SUM_IF)」使って集計をしていきます。

値に「支払い金額」を再度選択し、集計関数に「条件付き合計値(SUM_IF)」を選択します。

すると、条件を指定するためのダイアログが表示されるため、列に「支払い回数」、演算子に「以上」、値に「2」と入力します。

続いて列名を「既存顧客からのMRR」に設定し、適用のうえ、実行します。

これで、既存顧客からのMRRを集計できました。

エクスパンション・コントラクション

エクスパンションは、プランのアップグレードなどによって、前月(あるいは前年)から増えた収益となり、コントラクションはプランのダウングレードなどによって、前月(あるいは前年)から減った収益となります。

そのため、顧客ごとに前回との支払い金額の差を計算し、増収(0より大きい)の場合は、エクスパンション、減収(0より小さい場合)場合コントラクションと捉えることが可能です。

そこでまずは顧客ごとに前回からの支払い金額の差を計算するために、集計を実行する前のステップに移動し、「支払い金額」の列ヘッダーメニューから「表計算」、「…からの差」、「前の値(lag)」を選択します。

表計算のダイアログが開いたら、顧客ごとに差を計算するために、グループに「顧客ID」を選択し、プレビューをクリックします。

このとき、データが日付順に並んでいないと、前の値との差が、前回の支払い金額からの差として計算できないため、「計算前にデータを並び替える」にチェックを付けて、並び替える列に「支払い日」を選択し、ソートに昇順を選択します。

最後に、値の列名を編集し、列名を「支払い金額の差」に変更し、実行します。

これでユーザーごとに「支払い金額の差」を計算できましたが、このとき、値が0を超えるものは「エクスパンション」、値が0を下回るものがコントラクトションとなるわけです。

そのため、ここからは、「エクスパンション」と「コントラクション」という新しい列を作成し、「支払い金額の差」が0を超えるときには、同じ行のエクスパンション列に該当の値が入り、「支払い金額の差」が0を下回るときには、同じ行のエクスパンション列に該当の値が入るようにします。

「支払い金額の差」の列ヘッダーメニューから、「計算を作成」、「条件付き」を選択します。

「条件を元に計算、または置き換える」のダイアログが表示されたら条件を追加します

条件の設定ダイアログが開いたら、列に「支払い金額の差」、演算子に「より大きい」を選択し、値に「0」を選択し、OKボタンをクリックします。

続いて、新しい値に「列」を指定し、列に「支払い金額の差」を選択します。

最後に「新しく列を作成」にチェックが付いていることを確認したら、列名を「エクスパンション」に設定して実行します。

これでエクスパンションの列を追加できました。

同じようにコントラクションの列も追加します。

「支払い金額の差」の列ヘッダーメニューから、「計算を作成」、「条件を指定」を選択します。

「条件を元に計算、または置き換える」のダイアログが表示されたら条件を追加します。

条件の設定ダイアログが開いたら、列に「支払い金額の差」、演算子に「より小さい」を選択し、値に「0」を選択し、OKボタンをクリックします。

続いて、新しい値に「列」を指定し、列に「支払い金額の差」を選択します。

最後に「新しく列を作成」にチェックが付いていることを確認したら、列名を「コントラクション」に設定して実行します。

これでコントラクションの列を追加できました。

最後に、集計のステップに移動して、集計のトークンをクリックします。

集計のダイアログが開いたら、値に「エクスパンション」と「コントラクション」を追加して、合計値(SUM)を集計関数に選択して実行します。

毎月のエクスパンションとコントラクションを集計できました。

MRRリテンション率

続いてMRRリテンション率を計算します。MRRリテンション率は、既存顧客からの収益をどれだけ維持できているかに注目した指標です。

またMRRリテンション率は、以下のように、既存顧客から得られたMRRから、エクスパンションによる増収分の金額を取り除いた金額を前月のMRRで割ることで計算できます。

今回は、すでにMRR既存顧客からのMRRエクスパンション、を計算していますので、必要な指標はすでに揃っているため、それぞれの指標を使って、計算するだけです。

そこで、 「既存顧客のMRR」の列ヘッダーメニューから、「計算を作成」の「標準」を選択します。

計算を作成のダイアログが表示されたら、計算エディタに(既存顧客からのMRR- エクスパンション) / lag(MRR)と入力します。

なお、lag関数は指定した列の前の行の値を取得する関数になるため、lag(MRR)によって、前月の値、つまりは、前月のMRRを計算していることになります。

最後に、「新しく列を作成」にチェックがついていることを確認したら、列名を「MRRリテンション率」に設定して、「この列の後に作る」に「最後の列」を選択して実行します。

これで、「MRRリテンション率」を計算できました。

MRRエクスパンション率

MRRエクスパンション率は、既存顧客からのエクスパンションの金額をどれだけ増やせているかを測る指標です。

MRRリテンション率は、以下のように、既存顧客から得られたMRRから、エクスパンションによる増収分の金額を取り除いた金額を前月のMRRで割ることで計算できます。

今回は、すでにエクスパンション、を計算していますので、後はエクスパンションの値を使って、MRRエクスパンション率を計算するだけです。

「エクスパンション」の列ヘッダーメニューから、「計算を作成」の「標準」を選択します。

計算を作成のダイアログが表示されたら、計算エディタに(エクスパンション - lag(エクスパンション)) / lag(エクスパンション)と入力します。

なお、lag関数は指定した列の前の行の値を取得する関数になるため、lag(エクスパンション)によって、前月のエクスパンションを計算していることになります。

最後に新しく列を作成にチェックがついていることを確認したら、列名を「MRRエクスパンション率」に設定して、「この列の後に作る」に「最後の列」を選択して実行します。

これで、「MRRエクスパンション率」を計算できました。

ネット・レベニュー・リテンション率

ネット・レベニュー・リテンション率は、エクスパンションやコントラクションを考慮したうえで、既存顧客からの収益をどれだけ、維持あるいは増やせているのかを測る指標です。

また、ネット・レベニュー・リテンション率は、前月の顧客から得られたその翌月のMRRを、前月のMRRで割ることで計算できます。

そのため、「既存顧客からのMRR」の列ヘッダーメニューから、「計算を作成」の「標準」を選択します。

計算を作成のダイアログが表示されたら、計算エディタに既存顧客からのMRR / lag(MRR)と入力します。

なお、lag関数は指定した列の前の行の値を取得する関数になるため、lag(MRR)によって、前月の値、つまりは、前月のMRRを計算していることになります。

最後に新しく列を作成にチェックがついていることを確認したら、列名を「ネット・レベニュー・リテンション率」に設定して、「この列の後に作る」に「最後の列」を選択して実行します。

これで、「ネット・レベニュー・リテンション率」を計算できました。

クイック・レシオ

クイック・レシオはビジネスの成長の効率性を測る指標です。

新規顧客から得られるニューMRRとプランのアップグレードによるエクスパンションMRRを足したものを、チャーン(キャンセル)によって生じるMRRの減収とプランのダウングレードによるコントラクションを足したもので割ることで計算されます。

ニューMRRエクスパンションコントラクションの計算方法は、こちらのノートで紹介していますので、このセクションではチャーンMRRの計算方法から見ていきます。

例えば、以下のような推移をしているビジネスにおける3月の収益を例に考えてみます。

このビジネスには、プロ(1万円)とスタンダード(2万円)という2つのプランが用意されており、2月には3人顧客がいて、3月に1名の顧客がサービスをキャンセルしています。

しかし、3月には1名のプランのアップグレード(エクスパンション)が生じたため、既存顧客から得られたMRRは、前月のMRRと変わらず3万円のため、チャーンMRRは0円だと思うかもしれません。

ですが、実際にはスタンダードプランの顧客1名がキャンセルをしているので、チャーンMRRは1万円ということなります。

このように前月のMRRと既存顧客からのMRRを比べるだけでは正確なチャーンMRRを計算することができず、エクスパンションによる増収による影響を取り除いたうえで、前月のMRRと既存顧客からのMRRを比較することで、はじめてチャーンMRRは計算できるのです。

このことを踏まえて、クイック・レシオを計算していきます。

まずは以下のようにニューMRRエクスパンションコントラクションの集計を終えます。

続いて、ニューMRRの列ヘッダーメニューから、「計算を作成」「標準」を選択します。

計算を作成のダイアログが開いたら、計算エディタに(ニューMRR + エクスパンション) /((lag(MRR) - (既存顧客からのMRR - エクスパンション)) - abs(コントラクション)) と入力します。

lag関数は前の指定した列の前の行の値を取得するため、lag(MRR)という計算によって前月のMRRを取得しています。そのため、(lag(MRR) - (既存顧客からのMRR - エクスパンション))という計算では、チャーンMRRを求めているわけです。

また、abs関数は、指定した列の値の絶対値を返す関数です。abs(コントラクション) という計算によって、プランのダウングレードに伴う減収を表すコントラクションに、今回のデータのようにマイナスの符号がついていたとしても、正の数値として扱えるようにしています。

最後に新しく列を作成にチェックがついていることを確認したら、列名を「クイック・レシオ」に設定して、「この列の後に作る」に「最後の列」を選択して実行します。

これで、「クイック・レシオ」を計算できました。

SaaSトライアルツアー

サブスクリプション型ビジネスユーザー様向けのトライアルツアーの他のパートは下記のリンクからご確認いただけます。

  1. ビジネスKPIの可視化
  2. レイヤーケーキ・チャートの作成 - リンク
  3. コンバージョンの要因分析と予測 - リンク
  4. コホート分析 - リンク

次回はサブスクリプション型ビジネスの成長の「健康度」を可視化するレイヤーケーキ・チャートを作成いただきます。

今回と同じく、20分程度終えていただける内容になっていますので、是非、お試しください!

サブスク型ビジネスデータ分析のためのページ

SaaSなどを始めとするサブスクリプション型ビジネスにとって重要なKPI、データの加工、可視化、統計・機械学習といった様々なデータサイエンスの手法やシリコンバレーなどでの事例を1つのページにまとめて紹介しています。

ぜひご覧ください!

詳細はこちら

Export Chart Image
Output Format
PNG SVG
Background
Set background transparent
Size
Width (Pixel)
Height (Pixel)
Pixel Ratio