Условие
У нас есть данные cohort retention только за 30 дней. CFO просит спрогнозировать 12-месячный LTV. Как?
Решение
Способ 1: параметрическая модель retention
Чаще всего retention хорошо ложится на power law или shifted-geometric:
r(t) = α × t^(-β) # power law
r(t) = θ × (1 - p)^t # shifted geometric (BG/NBD)
Подбираем параметры на 30 днях, экстраполируем дальше.
import numpy as np
from scipy.optimize import curve_fit
t_obs = np.arange(1, 31)
r_obs = retention_array # доля активных по дням
def power_law(t, a, b):
return a * t**(-b)
popt, _ = curve_fit(power_law, t_obs, r_obs)
t_future = np.arange(1, 366)
r_future = power_law(t_future, *popt)Способ 2: BG/NBD + Gamma-Gamma
Стандарт в e-commerce. lifetimes библиотека:
from lifetimes import BetaGeoFitter, GammaGammaFitter
bgf = BetaGeoFitter()
bgf.fit(rfm['frequency'], rfm['recency'], rfm['T'])
ggf = GammaGammaFitter()
ggf.fit(rfm['frequency'], rfm['monetary'])
ltv_365 = ggf.customer_lifetime_value(
bgf, rfm['frequency'], rfm['recency'], rfm['T'], rfm['monetary'],
time=12, discount_rate=0.01,
)Способ 3: ML на похожих cohort
Если есть исторические cohort с полным жизненным циклом, обучите модель «retention по дню t → retention через год».
Способ 4: «average historical curve»
Берём средную форму retention по старым cohort, нормируем на 30-й день текущей. Просто и часто достаточно.
LTV
LTV(t) = ARPU × margin × Σ r(i) for i = 1..t
или просто ARPU × margin × (1/churn_steady) для long-term steady state.
Подводные камни
- Экстраполяция на 12 месяцев по 30 дням всегда рискованная. Чем меньше точек, тем шире доверительный интервал.
- Power law даёт reasonable формы, но переоценивает long tail (медленнее убывает, чем реальность).
- BG/NBD предполагает «вернулся = живой», подходит для частых покупок, не для редких (раз в год).
- Discount rate в LTV критичен на годовом горизонте — без него LTV завышен.
- Один LTV на всех — слишком грубо. Сегментируйте по каналам, GEO, типу первого товара.
Эталонный ответ
Параметрическая power-law/shifted-geometric кривая на 30 днях → экстраполяция; для e-com — BG/NBD + Gamma-Gamma. Always с CI и сегментацией по каналам.