Условие
Дано:
- Retention-curve приложения по месяцам: m0=100%, m1=28.7%, m2=24.1%, m3=21.7%, m4=20.0%, m5=18.5%, m6=17.5%, m7=16.5%, m8=15.4%, m9=14.2%, m10=13.4%, m11=12.8%, m12=12.4%.
- MAU = 100 000.
- Monthly revenue (free app, реклама) = $20 000.
Вопросы:
- Спрогнозировать retention на месяцы 13, 14, 15, …. Когда уйдёт последний пользователь?
- Посчитать LTV среднего пользователя — сколько денег он принесёт за всё время использования приложения.
Решение
Шаг 1. Аппроксимация retention
Видно: первый месяц обвал (28.7%), потом мягкий хвост — снижение на 0.5–1 п.п. в месяц. Классический паттерн mobile.
Для прогноза подходит степенной закон:
R(t) = a * t^(-b) для t >= 1
Подгонка по log-log регрессии:
import numpy as np
from sklearn.linear_model import LinearRegression
t = np.arange(1, 13)
R = np.array([28.7, 24.1, 21.7, 20.0, 18.5, 17.5, 16.5, 15.4, 14.2, 13.4, 12.8, 12.4]) / 100
# log-log fit
X = np.log(t).reshape(-1, 1)
y = np.log(R)
reg = LinearRegression().fit(X, y)
b = -reg.coef_[0]
a = np.exp(reg.intercept_)
print(f"R(t) ≈ {a:.4f} * t^(-{b:.4f})")
# например: R(t) ≈ 0.286 * t^(-0.34)Для месяца t > 12 экстраполируем по найденной кривой.
Альтернативы:
- Экспоненциальный спад
R(t) = a * exp(-b*t)— обычно затухает слишком быстро, не описывает «толстый» mobile-хвост. - BG/NBD или Beta-Geometric модели — лучше для подписочных продуктов, для рекламной модели избыточно.
Степенной закон даёт «бесконечный хвост», поэтому последний пользователь не уйдёт никогда в чистой математике. На практике можно ввести порог: пользователь считается ушедшим, когда R(t) < 1/N, где N — размер начальной когорты, или когда абсолютное число удерживаемых < 1.
Шаг 2. ARPU и LTV
ARPU (Average Revenue Per User в месяц):
ARPU = Monthly revenue / MAU = 20_000 / 100_000 = 0.20 USD
LTV среднего пользователя:
LTV = ARPU * sum(R(t), t=0..∞)
Месяц 0 (m0) обычно считается как 1 (только что установил). Считаем сумму retention от t=1 до большого T (например, 120 месяцев = 10 лет, дальше вклад мизерный).
horizon = 120
t = np.arange(1, horizon + 1)
R_extrapolated = a * t**(-b)
total_months_user_active = 1 + R_extrapolated.sum() # +1 за m0
ltv = 0.20 * total_months_user_active
print(f"LTV ≈ {ltv:.2f} USD")С коэффициентами выше получится примерно LTV ≈ $1.5–2.5 в зависимости от подобранной кривой и горизонта.
Шаг 3. Альтернативный путь — без модели
Считаем сумму известного retention + допущение, что после m12 retention падает на постоянный «δ» в месяц до 0:
sum(R) = 1 + 0.287 + 0.241 + ... + 0.124 + tail
tail = sum экспоненциального продолжения от 0.124
Это грубее, но прозрачнее.
Шаг 4. Когда уйдёт последний пользователь
Если в начале N пользователей, последний уйдёт когда R(t) < 1/N. Для N=100 000:
0.286 * t^(-0.34) < 1/100000
t > (0.286 * 100000)^(1/0.34) ≈ 1.35e5 ≈ 135000 месяцев
Очевидно, абсурдно много — это артефакт степенного закона. Корректнее ответить: «Математически last user не уходит при степенном retention. Бизнесово — отсечение по порогу 0.5% или 1% даёт горизонт около T месяцев».
Шаг 5. Презентация
Топ-менеджмент хочет одно число — LTV ≈ $X. Поясняем:
- В предположении степенного retention и ARPU $0.20 (постоянного во времени).
- LTV чувствителен к (а) форме retention в хвосте, (б) горизонту.
- Если ARPU меняется (например, ad rates падают), LTV пересчитываем как
LTV = ∫ ARPU(t) * R(t) dt.
Подводные камни
- Считать LTV как
ARPU * 1/churn(геометрический ряд) — корректно только при экспоненциальном retention с постоянным churn. У mobile churn падает со временем, ряд расходится в обратную сторону. - Игнорировать m0. Установивший пользователь — это уже один месяц активности. Не забыть прибавить 1 в сумму retention.
- Степенной закон → бесконечный LTV. Без bounded horizon LTV «уходит в небо». Нужно выбрать практический горизонт (12 / 24 / 60 / 120 месяцев) и явно его указать.
- ARPU предполагается постоянным. На самом деле ad-rates меняются с возрастом пользователя (старые пользователи кликают меньше / больше — зависит от продукта).
- MAU — это не «начальная когорта». MAU усреднён по всем когортам сразу. Аккуратно: если retention считается на новых установок, использовать когортный ARPU, а не MAU-based.
- «Когда уйдёт последний пользователь» — провокация. В реальности зависит от модели. Лучше отвечать через бизнес-порог.
- Не учли «возвращающихся». После churn пользователь может вернуться (resurrection). У степенной модели это учтено имплицитно, но если строить от чистого churn — нужно отдельное слагаемое.
Эталонный ответ
- Подбираем степенной закон
R(t) = a * t^(-b)log-log регрессией по 12 точкам. Для прогноза m13+ экстраполируем кривую. - ARPU = 20k / 100k = $0.20 в месяц.
- LTV = ARPU × (1 + Σ R(t)) на конечном горизонте (60–120 месяцев). Получается ≈ $1.5–2.5.
- «Когда уйдёт последний пользователь»: при степенном retention математически — никогда; бизнесово ответ — пока retention не упадёт ниже порога (0.5%–1%), что даёт горизонт в десятки лет.
В презентации обязательно подчеркнуть: LTV чувствителен к выбору модели хвоста и горизонта. Изменения этих допущений двигают LTV в 1.5–2 раза.