Собесов

LTV приложения: прогноз retention и расчёт пожизненной ценности

Кейсы и метрикиLTV и юнит-экономикаСредняяMiddle

Условие

Дано:

  1. 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%.
  2. MAU = 100 000.
  3. Monthly revenue (free app, реклама) = $20 000.

Вопросы:

  1. Спрогнозировать retention на месяцы 13, 14, 15, …. Когда уйдёт последний пользователь?
  2. Посчитать 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.

Подводные камни

  1. Считать LTV как ARPU * 1/churn (геометрический ряд) — корректно только при экспоненциальном retention с постоянным churn. У mobile churn падает со временем, ряд расходится в обратную сторону.
  2. Игнорировать m0. Установивший пользователь — это уже один месяц активности. Не забыть прибавить 1 в сумму retention.
  3. Степенной закон → бесконечный LTV. Без bounded horizon LTV «уходит в небо». Нужно выбрать практический горизонт (12 / 24 / 60 / 120 месяцев) и явно его указать.
  4. ARPU предполагается постоянным. На самом деле ad-rates меняются с возрастом пользователя (старые пользователи кликают меньше / больше — зависит от продукта).
  5. MAU — это не «начальная когорта». MAU усреднён по всем когортам сразу. Аккуратно: если retention считается на новых установок, использовать когортный ARPU, а не MAU-based.
  6. «Когда уйдёт последний пользователь» — провокация. В реальности зависит от модели. Лучше отвечать через бизнес-порог.
  7. Не учли «возвращающихся». После churn пользователь может вернуться (resurrection). У степенной модели это учтено имплицитно, но если строить от чистого churn — нужно отдельное слагаемое.

Эталонный ответ

  1. Подбираем степенной закон R(t) = a * t^(-b) log-log регрессией по 12 точкам. Для прогноза m13+ экстраполируем кривую.
  2. ARPU = 20k / 100k = $0.20 в месяц.
  3. LTV = ARPU × (1 + Σ R(t)) на конечном горизонте (60–120 месяцев). Получается ≈ $1.5–2.5.
  4. «Когда уйдёт последний пользователь»: при степенном retention математически — никогда; бизнесово ответ — пока retention не упадёт ниже порога (0.5%–1%), что даёт горизонт в десятки лет.

В презентации обязательно подчеркнуть: LTV чувствителен к выбору модели хвоста и горизонта. Изменения этих допущений двигают LTV в 1.5–2 раза.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти