リテンション率

リテンション率は、サブスクリプション型ビジネスにおいて顧客の継続状況を測定する重要な指標です。

この指標は、一定期間における既存顧客の継続率を表すもので、ビジネスの健全性と持続可能性を評価する上で不可欠な要素となっています。

特にSaaS企業やその他のサブスクリプション型のビジネスモデルを採用する企業の経営陣やカスタマーサクセスチーム、そして投資家にとって注目すべき指標です。新規顧客の獲得だけでなく、既存顧客の維持がビジネスの成長に直結するため、リテンション率は月次や四半期ごとに定期的なモニタリングすることになります。


SaaSをはじめとするサブスクリプション型のビジネスでは、顧客がサービスを継続する間は決まった周期(例: 毎月、毎年)で、繰り返し収益を得られます。

また、顧客ごとに、繰り返される月間あるいは年間の収益を足し上げたものがビジネス全体の収益となります。

そのため、新規顧客の分だけ収益は増えるわけですが、実際のビジネスでは顧客はサービスをキャンセルして、その分の収益が減ることになるため、キャンセルの数によってビジネスの成長は大きな影響を受けることになります。

このように、SaaSやサブスクリプション型のビジネスでは、顧客やユーザーのリテンション(維持)が最重要です。そのため、顧客がサービスや製品を通して課題を解決できているか、さらには費用を払うだけの価値を感じているのかを理解する必要があります。

こうしたことをサポートするのがカスタマーサクセス・チームで、顧客を維持できている割合の「リテンション率」をモニターすることになります。

なお、リテンション率は、どの程度の顧客が、前回(例: 前月、前年)の支払いから、サービスを継続しているかの割合の指標となります。

例えば、とあるサブスクリプション型のサービスにおいて、2月には4人の顧客がいて、3月に1人の顧客がキャンセルしたとします。

その場合、4名のうち3名がサービスを継続したことになるため、3月のリテンション率は75%になるわけです。

リテンション率の推移をモニターすることで、顧客を毎月、あるいは毎年、どの程度維持できているのかを理解できるようになり、リテンション率が悪化しているときには、顧客体験になんらかの問題が生じているものと想定して、改善に取り組むことが可能です。

さらに、セグメント(例: プラン、顧客セグメントなど)ごとにリテンション率を可視化して、問題のあるセグメントを見つけたときには、改善に取り組むことが可能です。

リテンション率の計算方法

支払いデータの場合

リテンション率を計算するためのRコマンド

# Step 1: 顧客ごとの支払い回数を計算
mutate_group(
 # 顧客IDでグループ化
 group_cols = c(`顧客ID` = "顧客ID"),
 group_funs = c("none"),
 # 支払い日でソート
 sort_cols = c("支払い日"),
 sort_funs = c("none"),
 # 支払い日ごとに順位をつける(支払い回数を計算)
 `支払い回数` = dplyr::dense_rank(支払い日)
) %>%

# Step 2: 支払い日を月単位に変更
# 月間(月ごと)のチャーン率やリテンション率を計算したいときには日付を「月」で切り捨てる
# 年間(年ごと)のチャーン率やリテンション率を計算したいときには日付を「年」で切り捨てる
mutate(`支払い日` = floor_date(`支払い日`, unit = "month")) %>%

# Step 3: 月間(月ごと)の顧客数と継続顧客数を集計
# 今回はあらかじめ日付を「月」で切り捨てているので、月間(月ごと)の顧客数と継続顧客を集計する
# 日付を「年」で切り捨てている場合、年間(年ごと)の顧客数と継続顧客を集計する
group_by(`支払い日`) %>%
summarize(
  `顧客数` = n_distinct(`顧客ID`),  # その月のユニーク顧客数
  `継続顧客数` = count_unique_if(顧客ID, 支払い回数 >= 2))  # 2回以上支払いのある顧客数(継続顧客)
) %>% ungroup() %>%

# Step 4: リテンション率を計算
mutate(`リテンション率` = 継続顧客数 / lag(顧客数)) %>%
ungroup() %>%

セグメントごとにリテンション率を計算するためのRコマンド

セグメントごとにリテンション率を計算するためには、グループごとに集計し、セグメントごとにグループ化した状態で、リテンション率を計算する必要があります。

# Step 1: 顧客ごとの支払い回数を計算
mutate_group(
 # 顧客IDでグループ化
 group_cols = c(`顧客ID` = "顧客ID"),
 group_funs = c("none"),
 # 支払い日でソート
 sort_cols = c("支払い日"),
 sort_funs = c("none"),
 # 支払い日ごとに順位をつける(支払い回数を計算)
 `支払い回数` = dplyr::dense_rank(支払い日)
) %>%

# Step 2: 支払い日を月単位に変更
# 月間(月ごと)のチャーン率やリテンション率を計算したいときには日付を「月」で切り捨てる
# 年間(年ごと)のチャーン率やリテンション率を計算したいときには日付を「年」で切り捨てる
mutate(`支払い日` = floor_date(`支払い日`, unit = "month")) %>%

# Step 3: セグメントごとに月間の顧客数と継続顧客数を集計
# 今回はあらかじめ日付を「月」で切り捨てているので、月間(月ごと)の顧客数と継続顧客を集計する
# 日付を「年」で切り捨てている場合、年間(年ごと)の顧客数と継続顧客を集計する
group_by(`支払い日`, `セグメント`) %>%
summarize(
  `顧客数` = n_distinct(`顧客ID`),  # その月のユニーク顧客数
  `継続顧客数` = count_unique_if(顧客ID, 支払い回数 >= 2))  # 2回以上支払いのある顧客数(継続顧客)
) %>% ungroup() %>%

# Step 4: セグメントでグループ化して月間のキャンセル率を計算
# 今回はあらかじめ日付を「月」で切り捨てているので、月間(月ごと)の顧客数と継続顧客を集計する
# グループごとにリテンション率を計算するためにgroup_byが必須
group_by(セグメント) %>%
mutate(`リテンション率` = 継続顧客数 / lag(顧客数)) %>%
ungroup() %>%
  
# Step 5: プランごとに並び替え
arrange(セグメント, 支払い日)
  • サブスクデータ分析 #1: ビジネスKPIの可視化 - リンク

カスタマーサクセス指標の作り方

今回、紹介したリテンション率以外のカスタマーサクセスの重要指標とその作り方を紹介する動画を公開しています。

ぜひ、ご覧ください!

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