LESSON

LTV(顧客生涯価値)分析

「離反率5%のインパクトは理解できた。だが、経営層を動かすには具体的な金額で話す必要がある。」

田中VPoEが続ける。

「顧客1人の離反がいくらの損失になるのか。セグメントによってどう違うのか。LTVで定量化してくれ。」

あなたはLTV分析に取りかかることにした。

LTV(Customer Lifetime Value)とは

LTVは、1人の顧客が取引期間全体を通じて企業にもたらす総収益を表す指標である。

基本的なLTV計算

# シンプルなLTV計算
def calculate_ltv(arpu, churn_rate):
    """
    ARPU: Average Revenue Per User(月間)
    churn_rate: 月間離反率
    """
    average_lifetime_months = 1 / churn_rate
    ltv = arpu * average_lifetime_months
    return ltv, average_lifetime_months

# NetShop社のケース
arpu = 5000  # 月額5,000円
churn_rate = 0.05  # 月間5%

ltv, lifetime = calculate_ltv(arpu, churn_rate)
print(f"平均顧客寿命: {lifetime:.0f}ヶ月")
print(f"LTV: ¥{ltv:,.0f}")
# 出力: 平均顧客寿命: 20ヶ月
# 出力: LTV: ¥100,000

割引率を考慮したLTV

将来の収益は現在価値に割り引く必要がある。

def calculate_discounted_ltv(arpu, churn_rate, discount_rate=0.01):
    """
    discount_rate: 月間割引率(年率12%なら月率約1%)
    """
    ltv = arpu / (churn_rate + discount_rate)
    return ltv

discounted_ltv = calculate_discounted_ltv(5000, 0.05, 0.01)
print(f"割引後LTV: ¥{discounted_ltv:,.0f}")
# 出力: 割引後LTV: ¥83,333

セグメント別LTV分析

顧客は一様ではない。セグメントごとにLTVを計算することで、離反防止施策の優先度を決定できる。

import pandas as pd

segments = pd.DataFrame({
    'セグメント': ['プレミアム', 'スタンダード', 'ライト'],
    'ARPU': [15000, 5000, 2000],
    '月間離反率': [0.02, 0.05, 0.08],
    '顧客数': [1000, 5000, 4000],
})

segments['平均寿命(月)'] = 1 / segments['月間離反率']
segments['LTV'] = segments['ARPU'] * segments['平均寿命(月)']
segments['セグメント総価値'] = segments['LTV'] * segments['顧客数']

print(segments.to_string(index=False))
セグメントARPU月間離反率顧客数平均寿命LTVセグメント総価値
プレミアム¥15,0002%1,00050ヶ月¥750,000¥7.5億
スタンダード¥5,0005%5,00020ヶ月¥100,000¥5.0億
ライト¥2,0008%4,00012.5ヶ月¥25,000¥1.0億

離反コストの定量化

離反が発生した場合の損失を計算する。

def calculate_churn_cost(segment_data):
    """離反1人あたりのコスト = 残存LTV + 再獲得コスト"""
    results = []
    for _, row in segment_data.iterrows():
        remaining_ltv = row['LTV'] * 0.5  # 平均して残存期間の半分と仮定
        reacquisition_cost = row['ARPU'] * 3  # 再獲得コスト = 3ヶ月分の売上
        total_cost = remaining_ltv + reacquisition_cost
        monthly_loss = row['顧客数'] * row['月間離反率'] * total_cost
        results.append({
            'セグメント': row['セグメント'],
            '1人あたり離反コスト': total_cost,
            '月間離反人数': row['顧客数'] * row['月間離反率'],
            '月間損失額': monthly_loss
        })
    return pd.DataFrame(results)

churn_cost = calculate_churn_cost(segments)
print(churn_cost.to_string(index=False))

離反率改善のインパクト

離反率を1%改善した場合の効果を算出する。

def improvement_impact(arpu, current_churn, improved_churn, customer_count):
    current_ltv = arpu / current_churn
    improved_ltv = arpu / improved_churn
    ltv_increase = improved_ltv - current_ltv
    total_impact = ltv_increase * customer_count
    return {
        'LTV増加額': ltv_increase,
        '総インパクト': total_impact
    }

# スタンダードセグメントで離反率を5%→4%に改善
impact = improvement_impact(5000, 0.05, 0.04, 5000)
print(f"LTV増加: ¥{impact['LTV増加額']:,.0f}/人")
print(f"総インパクト: ¥{impact['総インパクト']:,.0f}")
# 出力: LTV増加: ¥25,000/人
# 出力: 総インパクト: ¥125,000,000(1.25億円)

LTV分析のフレームワーク

LTV分析の実践手順:
1. セグメント定義 → 顧客を意味のあるグループに分類
2. ARPU算出      → セグメント別の月間平均収益を計算
3. 離反率測定    → セグメント別の月間離反率を測定
4. LTV計算       → ARPU / 離反率(割引率考慮)
5. コスト試算    → 離反コスト × 離反人数 = 月間損失額
6. 施策優先度    → 損失額の大きいセグメントから着手

まとめ

項目ポイント
LTV基本式ARPU / 月間離反率
割引LTVARPU / (離反率 + 割引率)
セグメント分析顧客を分類しセグメント別にLTVを比較
離反コスト残存LTV + 再獲得コスト
改善インパクト離反率1%改善で億単位の効果もありうる

チェックリスト

  • LTVの基本的な計算式を説明できる
  • 割引率を考慮したLTV計算ができる
  • セグメント別のLTV分析を実施できる
  • 離反コストを定量化できる
  • 離反率改善のビジネスインパクトを算出できる

次のステップへ

LTVによる定量化ができたところで、次は離反要因の仮説構築に進み、どのような要因が離反に影響するのかを体系的に整理しよう。

推定読了時間: 30分