ペイバックピリオドは、顧客獲得にかけた費用を平均して何ヶ月で回収できるかを表した指標で、投資判断や事業戦略を立てる際に欠かせない指標となります。
特にSaaS企業やサブスクリプションビジネスにおいて、新規顧客の獲得に投じた資金がどれだけ効率的に回収できているかを評価する際に活用されます。
この指標は、特にCFOをはじめとする経営陣や、事業責任者、そしてマーケティング部門のリーダーにとって重要な判断材料となり、定期的な事業レビューや予算策定時に注目されます。
ペイバックピリオドCAC(顧客獲得コスト)を1人の顧客から得られる平均的な月間粗利益で割ることで求めることができます。
なお1人の顧客から得られる平均的な月間粗利益はARPU(1ユーザーあたりのMRR)に粗利益率を掛けることで計算が可能です。
今回は、2つのサンプルデータを使ってペイバック・ピリオドを計算していきます。
1つ目のデータはサブスクリプション型のビジネスの支払いデータです。データはこちらのページからダウンロードできます。
このデータは、一行が一人の顧客の月ごとの支払い履歴を表していて、列には以下の情報があります。
2つ目のデータは、このビジネスのコストに関するデータです。データはこちらのページからダウンロードできます。
このデータは、一行がとある月のコストに関する情報を表していて、列には以下の情報があります。
ペイバック・ピリオドを計算するためには、CAC(顧客獲得コスト)を計算する必要があり、顧客獲得コストは以下の計算で求められます。
また、ARPU(1ユーザーあたりの平均収益)は以下の計算から求められます。
さらに粗利益率は以下の計算から求められます。
そのため、今回は前述した2つデータから、以下のようなテーブルを作成します。
このようなテーブルを作成できれば、ペイバック・ピリオドを計算するために必要な情報が揃うので、まずは上記のテーブルを作成します。
MRRは月ごとに「支払い金額」の合計値を集計し、顧客数は月ごとに一意(ユニーク)な顧客IDの数を集計することで計算が可能です。
一方で新規顧客の数は、支払いデータを集計をするだけは計算できません。ではどうすればいいかというと、元のデータに支払い回数の情報があれば、支払い回数が1回の顧客の一意な数を集計することで、新規顧客数を計算することが可能です。
そこで、支払いデータに支払回数の情報を計算するために、「支払い日」の列ヘッダーメニューから、「表計算」、「ランキング(隙間なし)」の「昇順」を選択します。
このような処理を行うのは、顧客ごとに支払い日が古い順にランクをつけることで、何回目の支払い回数かを計算できるからです。
このときランキングの方法に「隙間なし」を選択するのは、アップグレードなどによる支払いが同日にあったときに、別の支払いとして扱われないようにするためです。
今回は顧客ごとにランキングを計算したいので、表計算のダイアログが開いたら、グループに「顧客ID」を選択し、プレビューボタンをクリックします。
最後に値の列名を、「支払い回数」に変更し、実行します。
これで支払い回数の情報を支払いデータに追加できました。
続いてMRR(月間定期収益)を集計します。
MRRはそれぞれのユーザーが払った金額の月々の合計値になるため、月々の支払い金額を計算するだけで簡単に計算できます。
「支払い日」の列ヘッダーメニューから、「集計」を選択します。
集計のダイアログが表示されたら、グループに「支払い日」を選択し、日付の単位に「月」で切り捨てを選択します。
続いて値に、「支払い金額」を選択し、集計関数には合計値(SUM)を選択します。
最後に列名をMRRに変更して、プレビューボタンをクリックします。
これでMRRを集計するための設定ができました。
次に顧客数を集計します。
集計のダイアログの値に「顧客ID」を選択し、集計関数に「一意な値の数(UNIQUE)」を選択します。
続いて、編集アイコンをクリックして新しい列名を「顧客数」に変更のうえ、実行ボタンをクリックします。
顧客数を集計する準備ができました。
最後に支払い回数をもとに、新規顧客の数を集計します。
、値に「顧客ID」を選択し、集計関数に「条件に合った一意な値の数(COUNT_UNIQUE_IF)」を選択します。
条件を設定するための「列の設定」ダイアログが表示されるので、列に「支払い回数」、演算子に「等しい」、値に「1」と入力します。
この設定により、「支払い回数」が1回の「顧客ID」の「一意な値の数」を集計できます。
続いて新しい列名に「新規顧客数」と入力し、適用します。
プレビューボタンをクリックして、「新規顧客数」を集計できていることを確認したら、実行ボタンをクリックします。
MRR、顧客数、新規顧客数を集計することができました。
続いて、先程集計したデータにコストの情報を結合します。
「支払い日」の列ヘッダーメニューから「結合(列を追加する/Join)」を選択します。
結合のダイアログが開いたら「結合先データフレーム」にもう一方のコストのデータを選択し、キー列には「日付」を選択し、実行します。
これでペイバック・ピリオドを計算するためのデータをつくることができました。
最後にペイバック・ピリオドを計算します。
まずはCAC(顧客獲得コスト)を計算するために「新規顧客の獲得コスト」の列ヘッダーメニューから、「計算を作成」の「標準」を選択します。
計算を作成ダイアログが開いたら、計算エディタに新規顧客の獲得コスト / 新規顧客数
と入力します。
続いて、新しく列を作成にチェックが付いていることを確認したら、列名を「CAC」に設定のうえ、「この列の後に作る」を「(最後の列)」に設定して、実行します。
CACを計算することができました。
続いて、ARPUを計算します。MRRの列ヘッダーメニューから、「計算を作成」の「標準」を選択します。
計算を作成のダイアログが開いたら、計算エディタにMRR / 顧客数
と入力します。
最後に、「新しく列を作成」にチェックが付いていることを確認し、列名を「ARPU」に設定のうえ、「この列の後に作る」を最後の列に変更し、実行します。
ARPUを計算することができました。
最後に、粗利益率を計算します。「MRR」の列ヘッダーメニューから「計算を作成」の「標準」を選択します。
計算を作成のダイアログが開いたら計算エディタに(MRR - 製造原価) / MRR
と入力します。
次に、「新しく列を作成」にチェックが付いていることを確認し、列名を「粗利益率」に設定のうえ、「この列の後に作る」を最後の列に変更し、実行します。
粗利益率を計算できました。
これでパイバックピリオドを計算するための全ての情報が揃いました。
「CAC」の列ヘッダーメニューから、「計算を作成」の「標準」を選択します。
計算を作成のダイアログが開いたら、計算エディタにCAC / (ARPU * 粗利益率)
と入力します。
次に、「新しく列を作成」にチェックが付いていることを確認し、列名を「ペイバック・ピリオド」に設定のうえ、「この列の後に作る」を最後の列に変更し、実行します。
これでペイバック・ピリオドを計算できました。
今回の支払いデータとコストのデータをつかて、ペイバック・ピリオドを計算したい場合、以下のRコードをご参考ください。
# Step 1: 顧客IDごとに支払い回数を計算
mutate_group(
# 顧客IDでグループ化
group_cols = c(顧客ID = "顧客ID"),
group_funs = c("none"),
# 各顧客の支払い回数を支払い日順に計算(1回目、2回目...)
支払い回数 = dplyr::dense_rank(支払い日)
) %>%
# Step 2: 支払い日ごとの指標を集計
summarize_group(
# 支払い日でグループ化
group_cols = c(支払い日 = "支払い日"),
group_funs = c("rtomon"),
# その日のMRR(Monthly Recurring Revenue)を計算
MRR = sum(支払い金額, na.rm = TRUE),
# その日の総顧客数を計算
顧客数 = n_distinct(顧客ID),
# その日に初めて購入した新規顧客数を計算
新規顧客数 = count_unique_if(顧客ID, 支払い回数 == 1)
) %>%
# Step 3: コストデータを結合
left_join(
`コスト`,
by = join_by(支払い日 == 日付)
) %>%
# Step 4: CAC(顧客獲得コスト)を計算
mutate(
CAC = 新規顧客の獲得コスト / 新規顧客数
) %>%
# Step 5: ARPU(顧客あたりの収益)を計算
mutate(
ARPU = MRR / 顧客数
) %>%
# Step 6: 粗利益率を計算
mutate(
粗利益率 = (MRR - 製造原価) / MRR
) %>%
# Step 7: ペイバック・ピリオドを計算
mutate(
ペイバック・ピリオド = CAC / (ARPU * 粗利益率)
)