コホート・LTV
定着率と顧客価値
「来期 CAC を 1.5 倍に上げて新規獲得を加速して良いのか?」「いま割引で集めた顧客は黒字化するのか?」「メディアの新規読者は何ヶ月後にサービス導入してくれるのか?」。これらの問いに答えるのが コホート分析・リテンション・LTV(顧客生涯価値) です。獲得数だけを追うと、新規を集めただけなのか定着まで作れたのかが切り分けられません。月次セッションが伸びても、解約・離脱が同じペースで進めば、事業の土台は太くなりません。
たとえば 月額 3,000 円の BtoB SaaS で、新規契約が毎月 100 社あっても、平均継続月数が 3 ヶ月しか持たないなら、1 社あたり積み上がる売上は約 9,000 円です。CAC(顧客獲得費用、後述)が 1 社 20,000 円かかっていれば、契約が増えるほど赤字が膨らみます。一方、平均継続が 24 ヶ月なら 1 社あたり約 72,000 円積み上がり、CAC を回収して利益が残る計算になります。獲得数の裏にある継続の挙動を見ない判断は危険です。
BtoB オウンドメディアでも構造は同じです。月 1 万人の新規訪問が集まっても、1 ヶ月以内に再訪する人が 5% しかいなければ、サービスへの認知導線として機能しているのは月 500 人だけ。記事制作費を新規訪問数で割って「1 訪問あたり 100 円」と評価しても、定着した読者を見ると「1 定着読者あたり 2,000 円」になります。ECでも、初回購入のキャンペーンで集めた顧客が 90 日以内に再購入しなければ、購入回数を期待した広告ターゲティングは赤字に振れます。獲得時点の数字だけで判断すると、メディアでも EC でも投資判断を誤ります。
コホート分析は「同じ時期に獲得したユーザーをひとつの集団として時間軸で追う」分析手法です。月次・週次で切り出したコホートごとに残存率(リテンション率)を並べると、定着の良し悪しがヒートマップで一目で読めます。打ち切りを考慮した Kaplan-Meier 推定で生存曲線を描き、顧客生涯価値(Lifetime Value、LTV) を簡易法または確率モデルで推定し、顧客獲得費用(Customer Acquisition Cost、CAC)との比とペイバック期間で投資判断を回す、という流れで進めると詰まりにくくなります。
- コホート:同じ時期に獲得されたユーザーをひとつの集団として時間軸で追う、その集団のこと。
- リテンション率:コホート獲得時を 100% としたとき、N 期後にも残っているユーザーの割合。
- 顧客生涯価値(Lifetime Value、LTV):1 人のユーザーが生涯にもたらす売上または粗利の推定値。
- 顧客獲得費用(Customer Acquisition Cost、CAC):1 人のユーザーを獲得するのにかかった費用。
- 1 人あたり平均売上(Average Revenue Per User、ARPU):月次や年次の単位で計算する、ユーザー 1 人あたりの平均売上。
- Kaplan-Meier 推定:医療統計で発展した、観測の打ち切りを考慮した生存率の階段状推定手法。
- BG/NBD モデル:Beta-Geometric / Negative Binomial Distribution。EC など非契約型ビジネスで、ユーザーごとの将来購入回数を推定する確率モデル。
- Gamma-Gamma モデル:BG/NBD と組み合わせて、ユーザーごとの平均購入単価を推定する確率モデル。
01.まず結論:コホート分析は『獲得時期で集団を切る』ことで定着を見る
コホート分析の出発点は、ユーザー全員を 1 つの塊として扱うのをやめて、獲得時期で集団に切り分けることです。同じ「2026 年 1 月時点のアクティブユーザー」でも、2025 年から使い続けている人と、その月に登録したばかりの人では行動がまったく違います。獲得時期で揃えれば、施策ごとの「育ち方の違い」が初めて比較できます。
| 用語 | 意味 | 実務での使い所 |
|---|---|---|
| コホート(cohort) | 同じ時期に獲得されたユーザーをひとつの集団として追う、その集団のこと | 週次・月次の獲得バッチごとに集団を作り、その集団を時間軸で追跡する |
| リテンション率 | コホート獲得時を 100% としたとき、N 期後にも残っているユーザーの割合 | M1(1 期後)の落ち込み、3〜6 ヶ月後の安定水準を比較する |
| LTV(Customer Lifetime Value) | 1 人のユーザーが生涯にもたらす売上または粗利の推定値 | 獲得投資の上限を決める。CAC との比で投資判断を回す |
| CAC(Customer Acquisition Cost) | 1 人のユーザーを獲得するのにかかった費用 | 広告費・営業人件費を獲得人数で割る。LTV/CAC で健全性を見る |
コホート分析が威力を発揮するのは、施策の前後比較です。「2 月にオンボーディング動画を入れたら、3 月以降のコホートで M1 残存が改善したか」を見ると、施策の効果が定着率に効いたかを判定できます。逆に、全体平均だけ追っていると、新規流入が増えたぶん見かけ上の数字が伸びても、定着率は悪化していた、という見落としが起きます。
02.コホート分析の作り方|週次・月次の切り出し方
コホート分析の最初のステップは、ユーザーごとの獲得日を決め、それを週次または月次の単位で丸めることです。基準日の選び方とコホートの粒度で、後段の解釈が変わります。
| 設計項目 | 選択肢 | 判断基準 |
|---|---|---|
| 基準日 | 登録日 / 契約開始日 / 利用開始日 / 初回購入日 / 初回訪問日 / メルマガ登録日 | SaaS は活性化なら利用開始日・収益なら契約日。EC は初回購入日が定番。メディアは初回訪問日かメルマガ登録日 |
| 粒度 | 日次 / 週次 / 月次 | 短期施策の検証は週次、ユニットエコノミクス全体は月次が使いやすい |
| 残存の定義 | ログイン / 課金継続 / 購入 / リピート訪問 / 記事閲覧 / メルマガ開封 | SaaS は課金継続、EC はリピート購入、メディアはリピート訪問やメルマガ開封 |
| 観測期間 | M0〜M5(半年) / M0〜M11(1 年) / M0〜M23(2 年) | 解約や離反が起きる典型期間より長く取る。SaaS は 12 ヶ月以上、メディアはコンテンツの賞味期限に合わせて 6〜12 ヶ月 |
コホート分析というと「獲得時期コホート」が定番ですが、行動コホート(特定の行動を取ったユーザー集団)も実務でよく使います。たとえば「初回ログイン後 7 日以内にデータ連携を完了したユーザー」を 1 つのコホートにすると、活性化条件と長期定着の関係を切り出せます。「2 月にウェビナーに参加したユーザー」を行動コホートにして、その後の継続率を一般集団と比較する、という設計も有効です。
| 手順 | やること | 判断ポイント |
|---|---|---|
| 01 | 獲得日を決める | 登録日 / 契約日 / 利用開始日 / 初回購入日 / 初回訪問日のどれを基準にするか。SaaS は活性化なら利用開始日・収益なら契約日、EC は初回購入日、メディアは初回訪問日かメルマガ登録日 |
| 02 | 粒度を選ぶ | 週次 / 月次。短期施策の検証なら週次、ユニットエコノミクスの判断なら月次 |
| 03 | 残存の定義を決める | ログイン / 課金継続 / 購入 / リピート訪問 / メルマガ開封のどれを「残った」と定義するか |
| 04 | pandas でコホート × 経過月のマトリクスを作る | groupby + pivot_table でコホート × 経過月の uniqueユーザー数を集計し、M0 で割って % 化 |
| 05 | 中央値曲線と比較して施策効果を読む | 全コホートを重ねて中央値を引き、個別コホートが中央値より上か下かで施策の効果を判定 |
# pandas で月次コホート × リテンションマトリクスを作る
import pandas as pd
# events: user_id, event_date(DatetimeIndex でも列でも可), event_type の3列
# まず、ユーザーごとの獲得月(最初のイベントが起きた月)を決める
events["cohort_month"] = events.groupby("user_id")["event_date"] \
.transform("min").dt.to_period("M")
# 各イベントの月(観測月)
events["event_month"] = events["event_date"].dt.to_period("M")
# コホート開始からの経過月数(Period の差は MonthEnd オフセットを返すので .n で月数を取り出す)
events["period_index"] = (
events["event_month"] - events["cohort_month"]
).apply(lambda x: x.n)
# コホート × 経過月で uniqueユーザー数を集計
cohort_counts = (
events.groupby(["cohort_month", "period_index"])["user_id"]
.nunique()
.reset_index()
)
# pivot_table でマトリクス化
cohort_matrix = cohort_counts.pivot_table(
index="cohort_month",
columns="period_index",
values="user_id",
)
# M0 を 100% としたリテンション率に変換
retention = cohort_matrix.div(cohort_matrix[0], axis=0) * 10003.リテンション曲線の読み方|ヒートマップとカーブ
コホート × 経過月のリテンション率は、ヒートマップとカーブの 2 つの読み方を組み合わせるのが定番です。ヒートマップで全体傾向と異常コホートを目で見つけ、カーブで個別の減衰形を確認します。
図:月次コホート × 経過月のリテンションヒートマップ
行が獲得月、列が経過月。獲得時点(M0)は 100%、時間が経つほど残存率が下がる。新しいコホートほど右側が未観測(空欄)になる三角形のレイアウトが特徴。
| 獲得月 | M0 | M1 | M2 | M3 | M4 | M5 |
|---|---|---|---|---|---|---|
| 2025.12 | 100% | 65% | 50% | 43% | 39% | 36% |
| 2026.01 | 100% | 68% | 52% | 45% | 41% | 39% |
| 2026.02 | 100% | 70% | 55% | 48% | 44% | — |
| 2026.03 | 100% | 72% | 58% | 50% | — | — |
| 2026.04 | 100% | 74% | 60% | — | — | — |
| 2026.05 | 100% | 76% | — | — | — | — |
2026.01 コホートを横に読むと、M0=100% → M1=68% → M2=52% → ⋯ と減衰し、M3 以降は緩やかになっている。新しいコホート(下の行)ほど M1 の残存率が改善している=オンボーディング施策が効いている、という読み方ができる。
| 読み方 | 見るポイント | 気付ける異常・改善 |
|---|---|---|
| 縦方向に読む(同じ経過月で比較) | M1 残存率が新しいコホートで改善しているか | オンボーディング改修・初週施策の効果 |
| 横方向に読む(同じコホートを追跡) | 減衰のスピードと安定水準 | 解約が集中する月、長期定着の水準 |
| 対角線で読む(同じ暦月の影響) | 全コホートが同じ月に下がっていないか | サービス障害・値上げ・季節要因 |
ヒートマップで個別の異常を見たあとは、複数コホートをまとめた平均リテンションカーブを引きます。横軸を経過月、縦軸をリテンション率に固定し、各コホートを 1 本ずつ細線で重ねたうえで、中央値を太い線で描くのが見やすい構成です。多くの SaaS では「最初の 1〜3 ヶ月で大きく落ち、その後 6 ヶ月以降でほぼ横ばい」というカーブが出ます。EC はカテゴリで形が大きく変わりますが、消耗品(コスメ・サプリ)はゆるやかな水平、耐久財(家電・家具)は急峻に落ちる傾向です。オウンドメディアは M1 で半減し、M3〜M6 でロングテール読者の比率が安定する形が典型。この安定水準がそのプロダクト・サイトの本質的な定着率で、長期 LTV の見積もりに直結します。
04.生存時間分析の発想|Kaplan-Meier 曲線
リテンション率の単純集計では、観測期間が短いコホートが「まだ解約していないだけ」なのか「本当に定着している」のかを区別できません。生存時間分析は、医療統計で発展した手法で、「ある時点までの生存(解約していない状態)」と「途中で観測が終わった(打ち切り)」を分けて扱う考え方です。
図:Kaplan-Meier 曲線(階段状の生存率推定)
イベント(解約・購入停止など)が起きた時点で階段状に落ちる。短い縦棒は打ち切り(censoring。途中で観測が終わったが解約はしていない)の印。
オレンジが生存率の推定曲線。青の縦棒は打ち切り点で、その時点までは生存していたが、その後の観測ができていないことを意味する。打ち切りを「解約」扱いせずに残存集団から外せるのが Kaplan-Meier の利点。
| 用語 | 意味 | SaaS / EC / メディアでの具体例 |
|---|---|---|
| 生存時間 | 獲得から終了イベント(解約・離脱など)までの時間 | 契約開始から解約までの日数、初回購入から最終購入までの日数、初回訪問から最終訪問までの日数 |
| イベント | 観察したい終了事象 | SaaS:解約。EC:90 日無購入を離脱と定義。メディア:60 日無訪問・メルマガ購読解除など |
| 打ち切り(censoring) | 観察期間内にイベントが起きなかった or 追跡終了 | 観測月時点でまだ契約中・購読中、調査開始後に登録したユーザー |
| Kaplan-Meier 推定 | 打ち切りを考慮した生存率の階段状推定 | 「契約 6 ヶ月後に何 % が残るか」「初回訪問から 12 週後に何 % が再訪しているか」を観測期間の偏りを補正して推定 |
単純なリテンション集計では、観測期間内に追跡が終わったユーザーを「残存」または「離脱」のどちらかに無理やり分類します。たとえば 4 月に契約したユーザーを 5 月時点で集計するとき、まだ 1 ヶ月しか経っていないので「6 ヶ月後の残存」は計算できません。Kaplan-Meier はこのユーザーを打ち切りとして扱い、観測できた範囲だけを生存率の推定に使います。新しいコホートを混ぜても推定が偏らないのが大きな利点です。
# lifelines で Kaplan-Meier 生存曲線を描く
from lifelines import KaplanMeierFitter
import pandas as pd
# users: user_id, duration(観測日数), event(1=解約, 0=打ち切り)
kmf = KaplanMeierFitter()
kmf.fit(
durations=users["duration"],
event_observed=users["event"],
label="全体",
)
# 6 ヶ月後の生存率(解約率 = 1 - 生存率)
print(kmf.predict(180))
# プラン別に層別して比較したい場合
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
for plan, group in users.groupby("plan"):
kmf.fit(group["duration"], group["event"], label=plan)
kmf.plot_survival_function(ax=ax)05.LTV の計算方法|簡易法と確率モデル(BG/NBD + Gamma-Gamma)
LTV の計算は、ビジネスモデルで適した手法が分かれます。契約型(サブスクリプション SaaS や有料購読メディア)は簡易法で十分なケースが多く、非契約型(EC や広告売上のメディアなど、購入や訪問のタイミングがユーザーの自由)は確率モデルや別の式が力を発揮します。
図:LTV の 2 つの計算方法(簡易法 vs 確率モデル)
左は SaaS のような契約型ビジネス向けの簡易法、右は EC のような非契約型ビジネス向けの確率モデル。同じ「LTV」でも前提が違う。
A. 簡易法(契約型 SaaS 向け)
LTV = ARPU × 粗利率 × 平均継続月数
3,000 × 0.7 × 12 = 25,200 円。簡単で説明しやすいが「全員が同じ条件で継続する」という仮定を置く粗い推定。
B. 確率モデル(非契約型 EC 向け)
BG/NBD(購入回数)× Gamma-Gamma(購入単価)
BG/NBD:将来の購入回数を推定
ユーザーごとの購入頻度と離脱確率をベイズ推定 → 「あと N ヶ月で何回買うか」を分布で出す
Gamma-Gamma:平均購入単価を推定
ユーザーごとの 1 回あたり購入額を、過去の購入額の散らばりから推定
| 手法 | 想定するビジネス | 必要なデータ | 出力 |
|---|---|---|---|
| 簡易法(ARPU × 粗利率 × 平均継続月数) | 契約型 SaaS・有料購読メディアなど月額・年額の定額モデル | ARPU、粗利率、解約率(または平均継続月数) | ユーザー全体の平均 LTV(1 つの数値) |
| 簡易法(ARPU × 粗利率 ÷ 月次解約率) | 契約型 SaaS、解約率から平均継続を逆算するパターン | ARPU、粗利率、月次解約率 | ユーザー全体の平均 LTV(1 つの数値) |
| コホート積み上げ法 | 契約型でも非契約型でも可。実データに忠実 | コホート × 経過月のリテンション率と ARPU(または PV × 広告 RPM、訪問 × CV 単価) | コホート単位の累積 LTV カーブ |
| BG/NBD + Gamma-Gamma | 非契約型 EC、リピート購入頻度がユーザーごとに違う | ユーザーごとの購入履歴(日付・金額) | ユーザー単位の期待 LTV の分布 |
| メディア LTV(PV × 広告 RPM) | 広告売上中心のオウンドメディア | ユーザーあたり生涯 PV、千 PV あたり広告売上(RPM) | 1 読者あたり広告売上ベース LTV |
| メディア LTV(訪問 × CV 率 × CV 単価) | BtoB オウンドメディアなど、後段サービスへの送客が収益源 | ユーザーあたり生涯訪問数、CV 率、CV 単価(後段サービスの LTV や粗利) | 1 読者あたりリード価値ベース LTV |
有料購読メディア(日経電子版・New York Times など)は 契約型 SaaS と同じ簡易法で計算できます。広告売上中心のメディアは 生涯 PV × 広告 RPM(千 PV あたり収益)。BtoB オウンドメディアのように後段のサービスへ送客するモデルは、生涯訪問数 × CV 率 × CV 単価(後段サービスの LTV) で読みます。たとえば、1 読者が生涯 8 回訪問し、CV 率 0.5%、CV 1 件あたり後段サービスの粗利 60 万円なら、1 読者の LTV は約 2,400 円相当です。「記事 1 本制作費 5 万円 ÷ 1 読者 2,400 円」のように記事 ROI の議論に直結します。
月次解約率が r(例:月 5% = 0.05)で一定と仮定すると、ユーザーの平均継続月数は 1 / r(この例なら 20 ヶ月)で近似できます。月 5% 解約のサービスは、平均すると 1 人 20 ヶ月使う、という直感的な変換です。ただしこれは「解約率が時間で変わらない」前提で、実際には初期の解約率が高くて長期は下がる(ハザード率の低下)パターンが多いため、長期予測には Kaplan-Meier やコホート積み上げで補正するのが安全です。
LTV の計算は、ARPU の単位(月次か年次か)、粗利率を掛けたか売上のままか、解約率の単位(月次か年次か)、で結果が桁単位で変わります。たとえば ARPU 3,000 円/月 × 粗利率 70% × 平均継続 12 ヶ月 = 25,200 円 は 1 人あたり粗利ベースの 12 ヶ月分を集計したケース。これを「ARPU 3,000 円/月 ÷ 月次解約率 5%」で計算すると 60,000 円(粗利率を掛ける前)になり、粗利率 70% を掛ければ 42,000 円です。差が出る理由は、後者は 1 / 月次解約率 = 1 / 0.05 = 20 ヶ月の平均継続を前提にしているのに対し、前者は実測の 12 ヶ月を使っているからです。同じ ARPU・粗利率でも、平均継続を「実測の 12 ヶ月」とするか「月次解約率 5% から導いた 20 ヶ月」とするかで 25,200 円〜42,000 円のレンジが出ます。計算式と単位、平均継続の出所を、レポートに必ず併記してください。
| 手順 | やること | 数値・注意 |
|---|---|---|
| 01 | ARPU を出す | 過去 90 日の月次売上 ÷ 月次有料ユーザー数。新規・既存を分けず母集団を統一して計算 |
| 02 | 粗利率を決める | 原価・サポート・インフラを差し引いた粗利率。売上ベースではなく粗利ベースで計算しないと LTV が過大評価される |
| 03 | 平均継続月数を出す | 1 / 月次解約率(解約率一定の前提)、または Kaplan-Meier の半生存時間(median survival)。短い観測期間で外挿しない |
| 04 | 3 値を掛けて LTV を算出 | LTV = ARPU × 粗利率 × 平均継続月数。例:3,000 × 0.7 × 12 = 25,200 円 |
| 05 | 単位と前提をレポートに併記 | ARPU の単位、粗利ベースか売上ベースか、平均継続が実測値か推定値かを明記。意思決定者が桁を読み違えない形にする |
月次・年次の定額契約で継続が予測しやすい 契約型 SaaS や有料購読では BG/NBD は不要で、簡易法かコホート積み上げで十分です。一方、購入タイミングがユーザーの自由で、ユーザーごとに購入頻度・単価のばらつきが大きい EC や非契約型サービスでは、平均値が実態を反映しないため BG/NBD + Gamma-Gamma が有効です。「上位 10% の顧客に集中投資」のような切り出しを分布で語りたい場合に特に効きます。
# lifetimes で BG/NBD + Gamma-Gamma による LTV 推定
from lifetimes import BetaGeoFitter, GammaGammaFitter
from lifetimes.utils import summary_data_from_transaction_data
# transactions: customer_id, date, amount
summary = summary_data_from_transaction_data(
transactions,
customer_id_col="customer_id",
datetime_col="date",
monetary_value_col="amount",
observation_period_end=transactions["date"].max(),
freq="D",
)
# summary には frequency / recency / T / monetary_value が入る
# 1) 購入回数:BG/NBD
bgf = BetaGeoFitter(penalizer_coef=0.001)
bgf.fit(summary["frequency"], summary["recency"], summary["T"])
# 2) 購入単価:Gamma-Gamma(frequency >= 1 のユーザーのみ)
returning = summary[summary["frequency"] > 0]
ggf = GammaGammaFitter(penalizer_coef=0.001)
ggf.fit(returning["frequency"], returning["monetary_value"])
# 3) 12 ヶ月先までの期待 LTV を割引率込みで算出
ltv = ggf.customer_lifetime_value(
bgf,
returning["frequency"],
returning["recency"],
returning["T"],
returning["monetary_value"],
time=12, # 12 ヶ月先まで
freq="D",
discount_rate=0.01, # 月次の割引率
)06.LTV/CAC とペイバック期間|ユニットエコノミクス
LTV と CAC は単独で見ても判断材料になりません。LTV/CAC(顧客生涯価値 ÷ 顧客獲得費用)とペイバック期間(CAC を粗利で回収するまでの月数)の 2 つを並べて読むと、ユニットエコノミクス(顧客 1 人単位の採算性)が初めて判定できます。
| 指標 | 計算 | 一般的な目安 |
|---|---|---|
| LTV/CAC 比 | LTV ÷ CAC | 3 倍以上が健全。1 倍を切ると獲得するほど赤字 |
| ペイバック期間 | CAC ÷(ARPU × 粗利率)または CAC ÷ 月次貢献利益 | SaaS は 12〜18 ヶ月以内、EC は 6〜12 ヶ月以内、メディアは 12〜24 ヶ月(収益化までのリードタイムが長い) |
| 粗利ベース vs 売上ベース | LTV を粗利で計算するか売上で計算するか | 投資判断は粗利ベースが原則。売上ベースだと過大評価 |
| CAC の対象 | 新規獲得のみ / 全マーケ費を新規獲得数で割る | 厳密には「新規獲得に直接かかった費用」、運用上は後者で簡易化 |
| 手順 | やること | 判断ポイント |
|---|---|---|
| 01 | LTV を粗利ベースで計算 | 売上ベースだと過大評価。原価・サポート・インフラを差し引いた粗利で LTV を出す |
| 02 | CAC は新規獲得の直接費 + 月次配賦人件費 | 広告費だけだと過小評価。新規獲得に紐づく営業・マーケ人件費とツール費を月次で配賦して合算 |
| 03 | 目安と照らす | LTV/CAC ≧ 3 倍。ペイバックは SaaS 12〜18 ヶ月 / EC 6〜12 ヶ月 / メディア 12〜24 ヶ月 |
| 04 | チャネル別・コホート別に分解 | 全体平均で見過ごしている偏りを点検。広告チャネル別 / プラン別 / 行動コホート別に LTV/CAC を出す |
投資家向け SaaS ベンチマークで広く参照される LTV/CAC ≧ 3 倍は、Bessemer Venture Partners などのレポートで提唱されてきた経験則です。1 倍を切れば獲得するほど赤字、2 倍前後だと販管費・サポートコストを賄えず実質赤字、3 倍以上で初めて健全に再投資できる、という考え方が背景にあります。ペイバック期間は 12〜18 ヶ月が SaaS の目安としてよく挙げられますが、これは粗利率・成長段階で大きく動く数値で、自社の資金繰りや調達状況と合わせて判断するのが現実的です。
オウンドメディアでは、CAC は「記事制作費 + 編集人件費 + SNS/広告費」を新規定期訪問者数(または新規メルマガ登録者数)で割る形が出発点になります。LTV は本記事 05 章のメディア向け式(生涯訪問数 × CV 率 × CV 単価、または生涯 PV × 広告 RPM)で算出。ペイバックが長く出やすいので、12 ヶ月単位ではなく 四半期コホート × 12〜24 ヶ月で読むのが実務的です。記事 1 本ごとの収益化リードタイムは早くて 3〜6 ヶ月、ロングテールで 1〜2 年見るのが現実的です。
# LTV/CAC とペイバック期間の計算例(簡易法)
arpu_monthly = 3000 # 円 / 月
gross_margin = 0.70
avg_months = 12
ltv = arpu_monthly * gross_margin * avg_months # 25,200 円
cac = 8000 # 円 / 1 顧客
ltv_cac = ltv / cac # 3.15
payback_months = cac / (arpu_monthly * gross_margin) # 3.81 ヶ月
print(f"LTV: {ltv:,.0f} 円 / CAC: {cac:,.0f} 円")
print(f"LTV/CAC: {ltv_cac:.2f} 倍 / Payback: {payback_months:.1f} ヶ月")手計算で確認すると、ARPU 3,000 円 × 粗利率 0.7 = 月次粗利 2,100 円。これに 12 ヶ月を掛けて LTV は 25,200 円。CAC 8,000 円なら、LTV/CAC は 25,200 ÷ 8,000 = 3.15 倍、ペイバックは 8,000 ÷ 2,100 = 約 3.81 ヶ月、という構造になります。CAC を 1 万 5,000 円まで上げると LTV/CAC は 1.68 倍に落ち、3 倍ラインを下回ります。
07.実務でつまずく落とし穴と対処
コホート分析と LTV の運用で、多くのチームが共通してつまずく点を整理します。
| 落とし穴 | 起きること | 対処 |
|---|---|---|
| 観測期間が短いまま LTV を断定する | M0〜M3 だけのデータで「LTV は 5 万円」と発表し、後で大幅に下方修正 | Kaplan-Meier で打ち切りを正しく扱い、長期は外挿に注意 |
| 全ユーザーを 1 つの平均 LTV で語る | 上位プランと無料プランを混ぜてしまい、施策判断がぶれる | プラン別・流入経路別・行動コホート別に分けて算出する |
| 解約率を年次で語って月次と混ぜる | 年次 50% を月次にすると約 5.6%、月次 5% を年次にすると約 46%。混在するとレポートが破綻 | レポート上で必ず単位(月次 / 年次)を明記する |
| CAC に間接費を入れない | 広告費だけを CAC にしてしまい、営業人件費・ツール費が抜ける | 新規獲得に紐づく人件費・ツール費を月次で配賦して CAC に入れる |
| BG/NBD を契約型に当てる | SaaS の月次課金データに無理やり当てて非合理な分布を出す | 契約型は簡易法 or コホート積み上げ、非契約型のみ BG/NBD |
| 値上げ・プラン改定の前後を混ぜる | ARPU が改定後に変わったのに、過去 ARPU で LTV を計算してしまう | 改定前後でコホートを分割し、別系列として算出する |
生存者バイアス(survivorship bias)は、観察対象から「途中で脱落した個体」が除かれてしまい、結果が体系的に偏ってしまう現象のことです。コホート分析では、現役の継続ユーザーだけを集計対象にして「平均利用月数」を計算すると、解約済みユーザーが母集団から消えるため LTV が過大評価 されます。今いるユーザーは「まだ解約していない」集団なので、平均的に長く使っている人が多くなって当然です。LTV を見るときは、対象期間に獲得した全コホート(解約済みも含む)を母集団にし、Kaplan-Meier やコホート積み上げで打ち切りを正しく扱う必要があります。
実装の選択肢を整理すると次のとおり。手元のデータ環境とチーム体制で選びます。
- プロダクト分析 SaaS(標準機能でコホート画面が出る):Amplitude / Mixpanel / Heap / PostHog。設定だけで月次・週次コホートのヒートマップが出る。SaaS・モバイルアプリで第一選択肢。
- BI ツール(SQL を書いて描く):Looker Studio / Tableau / Power BI / Metabase。BigQuery などのデータ基盤がある会社向け。SQL でコホートテーブルを作って可視化。
- 自前で Python:
pandas(コホート集計)+lifelines(Kaplan-Meier)+lifetimes(BG/NBD + Gamma-Gamma)。柔軟性が高く、ユニットエコノミクスのカスタム指標まで作れる。 - Excel + ピボット:100 件・10 期程度の少数コホートなら、ピボットテーブルだけで描ける。スタートアップ初期や検証目的に。
- CRM/CDP の組み込み機能:HubSpot・Salesforce のレポートでも簡易コホートが出る。マーケ・営業の手元データで完結したい場合に。
選び方の指針:(a) プロダクトのイベントログがあるなら Amplitude / Mixpanel から始める、(b) BigQuery などの DWH に集約済みなら Looker Studio で組む、(c) BG/NBD のような確率モデルが欲しくなったら Python に移る、の 3 段階がスムーズ。
08.よくある質問(FAQ)
週次と月次コホート、どちらを使えばよいですか?
粒度は目的で分けます。新規オンボーディングや初週の活性化施策など、短期の検証は 週次コホート。ユニットエコノミクスや LTV/CAC の判断、長期定着の評価は 月次コホート が読みやすく、レポートとしても安定します。両方をダッシュボードに並べ、週次で施策の即時反応を、月次で中長期の経済性を確認するのが現実的です。
コホート基準日は何にすればよいですか?(SaaS・EC・メディアの違い)
目的とビジネスモデルで分けます。SaaS で活性化や定着を測りたいなら 利用開始日、収益や解約率を測りたいなら 契約日。EC なら 初回購入日 から始めると購入頻度・再購入率を追いやすくなります。オウンドメディアは流入経路で揃えたいなら 初回訪問日、読者育成を測りたいなら メルマガ登録日 が基準として読みやすい設計です。SaaS で「契約日」と「利用開始日」を並べると、導入までのタイムラグ自体が改善対象として浮き上がる、というように、複数の基準日を並走させると追加の発見が出ます。
LTV 計算で簡易法と BG/NBD はどう使い分けますか?(メディアは?)
ビジネスモデルで分岐させます。契約型 SaaS のように月額・年額で継続が定期化していて ARPU と解約率が安定しているなら、ARPU × 粗利率 × 平均継続月数 の簡易法から始めるのが現実的で、説明力も十分です。EC や非契約型サービスでは、ユーザーごとに購入頻度・単価のばらつきが大きく、平均値だけだと実態を反映しません。この場合は BG/NBD + Gamma-Gamma でユーザー単位の期待 LTV を分布として推定します。オウンドメディアは収益化モデルで式が変わり、有料購読なら契約型 SaaS の簡易法、広告売上中心なら 生涯 PV × 広告 RPM、後段サービスへの送客中心なら 生涯訪問数 × CV 率 × CV 単価 で計算します。中間案として、契約型でも「コホート × 経過月の累積売上」を積み上げる方法は精度が高く、両方の弱点を埋められます。
LTV/CAC は何倍以上が健全ですか?
SaaS 業界で広く参照される目安は LTV/CAC ≧ 3 倍、ペイバック期間 12〜18 ヶ月以内です。これは Bessemer Venture Partners の SaaS ベンチマークなどで提唱されてきた経験則で、1 倍を切ると獲得するほど赤字、2 倍前後だと販管費を賄えず、3 倍以上で初めて再投資余力が生まれる、という考え方が背景にあります。アーリーステージや高成長フェーズでは一時的に下回るのが許容される一方、成熟期は 4〜5 倍を目指す、というように成長段階で目標を調整するのが現実的です。EC は粗利率が低い分、ペイバックを 6〜12 ヶ月で短く設計するチームが多くなります。オウンドメディアは記事公開から検索流入・CV までのリードタイムが長いため、ペイバックは 12〜24 ヶ月を許容し、四半期コホート単位で評価するのが現実的です。
解約予測でロジスティック回帰と生存時間分析はどう使い分けますか?
目的で分岐させます。「次の 90 日以内に解約するか否か」のような 二値予測 は ロジスティック回帰 や勾配ブースティングが直接的で、特徴量の重要度も解釈しやすい構成。一方、「解約までの時間そのもの」「N ヶ月後に何 % が残るか」を推定したいなら 生存時間分析(Kaplan-Meier、Cox 比例ハザードモデル)。生存時間分析の最大の強みは、観察期間中にイベントが起きていないユーザーを打ち切りとして正しく扱える点で、新しいコホートを混ぜても推定が偏らないのが利点です。両方を組み合わせ、ロジスティック回帰で「解約しそうな個別ユーザー」を絞り、Kaplan-Meier で「集団としての生存率」を語る、という二段運用も有効です。
09.まとめ
コホート分析は、ユーザー全員を 1 つの塊で見ていた状態から、獲得時期で集団に切り分けて時間軸で追う視点に切り替えるための道具です。ヒートマップで全体傾向を、リテンションカーブで減衰形を、Kaplan-Meier で打ち切りを補正した生存率を、それぞれ役割分担で見ていくと、施策効果と定着の良し悪しを切り分けて議論できます。
LTV は契約型 SaaS なら簡易法(ARPU × 粗利率 × 平均継続月数)で十分なケースが多く、非契約型 EC では BG/NBD + Gamma-Gamma の確率モデルが個別ユーザー単位の推定を出します。オウンドメディアは収益化モデルで式を切り替え、広告売上中心なら「生涯 PV × 広告 RPM」、後段サービスへの送客中心なら「生涯訪問数 × CV 率 × CV 単価」で読みます。LTV/CAC とペイバック期間でユニットエコノミクスを確認し、3 倍・12〜18 ヶ月(メディアは 12〜24 ヶ月)の目安を自社の資金繰りと突き合わせる。この一連の流れを社内ダッシュボードに載せておくと、獲得施策と定着施策の優先順位が定量的に決まるようになります。
予測モデル評価の指標と使い分け
F1・ROC-AUC・MAE・RMSE・Pearsonなど予測モデルの代表指標を整理します。
データ分析でよく使うアルゴリズム・指標まとめ
類似度・一致度・予測モデル評価の3カテゴリで指標を整理した総合解説です。
A/Bテスト設計の基礎
サンプルサイズ・MDE・カイ二乗とt検定の使い分けを整理しています。
SEO KPI 設計(BtoB)
BtoB SaaS の検索流入を CV まで運ぶ KPI 設計を整理しています。
コホート分析・LTV ダッシュボード構築をご相談ください
SaaS・EC・オウンドメディアのリテンションダッシュボード設計、Kaplan-Meier や BG/NBD を使った LTV 推定パイプライン、メディアのリピート訪問×CV 価値の可視化までを伴走支援しています。お気軽にお問い合わせください。

