Как считать LTV пользователя

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Зачем это знать

LTV — фундамент unit-экономики. Без honest LTV вы не знаете, сколько можно тратить на acquisition. Marketing CAC ≥ LTV → compania растёт в minus. LTV > CAC × 3 — unit-economics healthy.

На собесах продуктового и growth аналитика LTV просят часто. Правильный ответ — 3 метода: simple, cohort, predictive.

Короткое объяснение

LTV (Customer Lifetime Value) = общая revenue, которую пользователь приносит за «время жизни».

Чем больше LTV, тем больше можно тратить на acquisition.

Простая формула

LTV = ARPU × lifetime (месяцы)

Или для subscription:

LTV = ARPU / churn_rate

Пример

ARPU = 100 ₽/мес. Monthly churn = 5%. Lifetime = 1 / 0.05 = 20 месяцев. LTV = 100 × 20 = 2000 ₽.

Недостатки: игнорирует gross margin, предполагает constant ARPU и churn.

LTV с gross margin

LTV = (ARPU × gross_margin) / churn_rate

Если marginal cost — 20%, то gross margin = 80%.

LTV = 100 × 0.8 / 0.05 = 1600 ₽ (not 2000).

Реалистичнее.

Cohort LTV

Вместо average — per cohort:

WITH monthly_revenue AS (
    SELECT
        DATE_TRUNC('month', u.signup_at) AS cohort,
        DATE_DIFF('month', u.signup_at, p.paid_at) AS tenure,
        SUM(p.amount) AS revenue
    FROM users u
    LEFT JOIN payments p ON p.user_id = u.id
    GROUP BY 1, 2
),
cohort_sizes AS (
    SELECT cohort, COUNT(*) AS n_users FROM users GROUP BY 1
)
SELECT
    mr.cohort,
    SUM(mr.revenue) / cs.n_users AS cumulative_arpu
FROM monthly_revenue mr
JOIN cohort_sizes cs ON cs.cohort = mr.cohort
WHERE mr.tenure <= 12
GROUP BY 1, cs.n_users;

Показывает revenue per signup за 12 мес. Это empirical LTV.

Predictive LTV

Для новых users нет history. Prediction:

Simple

ML модель: LTV ~ f(early actions, demographics, source).

Features:

  • Activation actions (first week)
  • Source (organic vs paid)
  • Device, geo

Target: revenue за 90/180/365 дней (known history).

Advanced

BG/NBD + Gamma-Gamma (pareto/NBD) — classical Bayesian model для LTV.

Библиотека Python

from lifetimes import BetaGeoFitter, GammaGammaFitter

bgf = BetaGeoFitter()
bgf.fit(frequency, recency, T)

ggf = GammaGammaFitter()
ggf.fit(frequency, monetary_value)

clv = ggf.customer_lifetime_value(bgf, frequency, recency, T, monetary_value, time=12)

Когортная динамика

Plot cumulative revenue per cohort по месяцам:

  • Steep curve → fast LTV accumulation
  • Flat tail → long-term users bring mало
  • Kink → churn cliff

LTV / CAC

Основа unit-экономики.

  • LTV / CAC < 1: loss на каждом user
  • LTV / CAC ~ 1: break-even
  • LTV / CAC > 3: healthy (rule of thumb)
  • LTV / CAC > 5: underspent marketing (opportunity)

Pitfalls

Survivorship bias

Только «старые» users → biased upward. Include churned.

Constant assumptions

LTV = ARPU / churn неверно если ARPU меняется, churn меняется.

Cohort-based reality-check.

Discounted future

Deep future revenue надо discount (time value of money):

LTV = Σ (monthly_revenue_t × (1 - churn)^t) / (1 + discount_rate)^t

Gross vs net

Include refunds, fraud, discount.

Per-segment LTV

Важнее overall:

  • Paid vs organic
  • Geo
  • Premium vs freemium
  • Device

Decisions на acquisition — per segment.

На собесе

«Как посчитать LTV?» 3 метода: simple (ARPU × lifetime), cohort (empirical), predictive (ML).

«LTV / CAC?» > 3 — healthy. < 1 — loss.

«Подводные камни?» Survivorship, constant assumptions, discount, gross margin.

«Per segment?» Обязательно. Overall маскирует.

Частые ошибки

Average LTV

Mean LTV на heavily skewed distribution — бессмыслен. Используйте median или per-segment.

Игнорировать churn

«LTV = total revenue / users» не учитывает churn trend.

Использовать старые cohorts

Если product изменился, старые cohorts ≠ current.

Связанные темы

FAQ

Когортная или ML?

Если достаточно history (6+ мес) — cohort. Если нужна prediction для новых — ML.

Включать ли referrals?

Да, если user genereates acquisitions — это часть LTV.

Refunds?

Subtract. Net LTV.


Тренируйте unit-экономику — откройте тренажёр с 1500+ вопросами для собесов.