Как считать Retention: формулы, SQL-запросы и подводные камни

Проверь себя · 1/3разбор после ответа
В пользовательской воронке: шаг 1 = view_product, шаг 2 = purchase, расчёт идёт по уникальным пользователям. Пользователь сделал view_product 5 раз и purchase 1 раз. Как он должен учитываться на шагах?

Что такое retention и почему это фундамент

Retention — доля пользователей, которые вернулись в продукт через определённое время после первого визита. За этой простой формулировкой стоит главная метрика продукта: retention отвечает на вопрос, получают ли люди достаточно ценности, чтобы возвращаться сами, без повторной оплаты за их привлечение.

Почему именно retention считают фундаментом. Во-первых, это опережающий индикатор product-market fit: если новые пользователи не возвращаются, никакой рост привлечения не спасёт — вы наливаете воду в дырявое ведро. Во-вторых, retention мультипликативно влияет на всю экономику: он определяет время жизни клиента, а значит и LTV, окупаемость CAC и потенциал виральности. Продукт с retention 40% на плато и продукт с 10% при одинаковом привлечении — это два совершенно разных бизнеса.

Retention — обратная сторона оттока: за один период и на одной базе Retention = 100% − Churn. Разница в акценте: retention смотрит на тех, кто остался, churn — на тех, кто ушёл. На собеседованиях аналитиков retention спрашивают почти всегда, причём не «что это», а «как посчитаете», «какие подводные камни» и «напишите SQL».

Как читать retention-кривую

Одно число retention почти бесполезно — метрику читают как кривую по дням с момента первого визита.

Кривая Retention

Типичная retention-кривая круто падает в первые дни и затем выходит на плато. Форма кривой говорит о продукте больше, чем любая отдельная точка:

  • Уровень плато — это и есть долгосрочный retention, ядро пользователей, для которых продукт стал привычкой. Ненулевое плато — сигнал product-market fit. Если кривая не стабилизируется и продолжает падать к нулю, привычка не формируется, и PMF нет.
  • Крутизна начального спада — про онбординг и скорость доставки ценности. Резкий обвал в D1–D3 означает, что новый пользователь не понимает, зачем ему продукт.
  • Smile curve (загиб вверх) — на зрелых продуктах кривая иногда идёт вверх на длинном горизонте за счёт реактивации: часть ушедших возвращается. Это признак сильного продукта с реальной потребностью.

Работая с кривой, сравнивают когорты между собой. Если новая когорта поднимает всю кривую вверх — улучшился онбординг, ценность доносится быстрее. Если кривая стала более пологой на длинном хвосте — вырос долгосрочный retention, продукт стал липче. Эти два движения лечат разными продуктовыми решениями, и умение их различать — то, что проверяют на собесе.

Виды retention

Классический retention (Day-N)

Доля пользователей, которые были активны ровно на N-й день после первого визита.

Retention(Day N) = активные ровно на день N / все пользователи когорты

«Ровно на N-й день» означает именно этот конкретный день. Если пользователь пришёл на 6-й и 8-й день, но не на 7-й — в D7 он не попадает. Классический retention чувствителен к частоте использования и уместен для продуктов ежедневного спроса.

Rolling retention (возвратный)

Доля пользователей, активных на N-й день или позже. Более мягкая метрика — учитывает всех, кто не ушёл навсегда.

Rolling Retention(Day N) = активные на день N или позже / все пользователи когорты

Rolling всегда не ниже классического. Он лучше подходит для продуктов с нерегулярным использованием: сервисы бронирования, маркетплейсы, страхование — там «вернулся на 30-й день или позже» осмысленнее, чем «вернулся ровно на 30-й».

Bounded retention (интервальный)

Доля пользователей, активных хотя бы раз в окне: например, D7 bounded — «был активен хотя бы раз в дни 1–7». Чаще используется во внутренней отчётности; на собесе обычно спрашивают классический Day-N.

Бенчмарки по типам продуктов

Универсального «хорошего» retention нет — он определяется тем, насколько часто у продукта есть повод для возврата. Сравнивать значение можно только внутри своей категории.

Тип продукта D1 D30 Почему так
Соцсеть, мессенджер 50%+ 25–40% Ежедневный повод вернуться
Мобильная игра 25–40% 5–15% Быстрое вовлечение, но выгорание
SaaS B2B 20–40% Реже, но встроен в рабочий процесс
E-commerce 10–25% 5–15% Покупки эпизодичны
Маркетплейс услуг ниже важнее длинный хвост Потребность возникает редко

Для daily-use продуктов критичен ранний retention (D1): если пользователь не вернулся завтра, привычка не сформировалась. Для продуктов эпизодического спроса важнее длинный хвост (D30 и дальше) и rolling-метрика — там нормально не заходить неделями, но возвращаться при возникновении потребности. Поэтому вопрос «что лучше — высокий D1 или высокий D30» без указания типа продукта не имеет ответа.

Когортный анализ

Retention всегда считается по когортам. Когорта — группа пользователей, объединённых по дате первого действия (регистрация, установка, первая покупка). Без когорт вы смешиваете новых и старых пользователей, и метрика теряет диагностическую ценность.

Когорта D0 D1 D7 D14 D30
1–7 янв 100% 25% 12% 8% 5%
8–14 янв 100% 28% 14% 9% 6%
15–21 янв 100% 30% 15% 10%

Строки — когорты по неделям, столбцы — дни после первого визита. Здесь каждая следующая когорта удерживается чуть лучше — значит, продукт улучшается. Когортный разрез отделяет эффект роста от эффекта качества: без него нельзя понять, retention упал из-за плохого продукта или из-за того, что старые сильные когорты «вымылись» из среднего.

Закрепи формулу retention в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать retention в Telegram

Как считать retention в SQL

Главное правило: единица анализа (пользователь) и определение «активности» фиксируются до начала расчёта.

D1 retention по когортам:

WITH cohort AS (
    SELECT user_id, MIN(event_date) AS cohort_date
    FROM user_activity
    GROUP BY user_id
),
activity AS (
    SELECT DISTINCT user_id, event_date
    FROM user_activity
)
SELECT
    c.cohort_date,
    COUNT(DISTINCT c.user_id) AS cohort_size,
    ROUND(COUNT(DISTINCT a.user_id)::numeric
        / NULLIF(COUNT(DISTINCT c.user_id), 0) * 100, 1) AS d1_retention_pct
FROM cohort c
LEFT JOIN activity a
    ON c.user_id = a.user_id
    AND a.event_date = c.cohort_date + INTERVAL '1 day'
GROUP BY c.cohort_date
ORDER BY c.cohort_date;

Rolling D7 — через дату последней активности:

WITH cohort AS (
    SELECT user_id, MIN(event_date) AS cohort_date
    FROM user_activity
    GROUP BY user_id
),
last_seen AS (
    SELECT user_id, MAX(event_date) AS last_activity_date
    FROM user_activity
    GROUP BY user_id
)
SELECT
    c.cohort_date,
    COUNT(DISTINCT c.user_id) AS cohort_size,
    COUNT(DISTINCT CASE
        WHEN l.last_activity_date >= c.cohort_date + INTERVAL '7 days'
        THEN c.user_id END) AS rolling_d7
FROM cohort c
JOIN last_seen l ON c.user_id = l.user_id
GROUP BY c.cohort_date
ORDER BY c.cohort_date;

Ключевой момент для когортного retention — сравнивать активность с cohort_date + INTERVAL 'N days', а не с одной фиксированной датой. Разбор SQL глубже — в статье про когортный анализ.

Примеры из продуктов и с собеседований

Retention лучше всего понимается через то, как его определяют в реальных продуктах. Классические публично известные примеры «аха-момента», который вытягивает retention: у Facebook это «7 друзей за 10 дней», у Slack — команда, обменявшаяся примерно 2000 сообщений. Логика одна: находят действие, которое сильнее всего коррелирует с дальнейшим удержанием, и перестраивают онбординг так, чтобы больше новых пользователей его совершали. Retention здесь — не пассивная метрика, а цель, под которую оптимизируют продукт.

На продуктовом собесе retention чаще проверяют ситуационно, а не определением. Разберём типовые вопросы с оценкой ответов.

«Retention упал с 15% до 10%. Как будешь разбираться?» Слабый ответ — «посмотрю, почему упал». Сильный ответ — декомпозиция: на каком дне провал, не сместился ли состав когорт (например, маркетинг пригнал дешёвый низкокачественный трафик), разрез по источнику, платформе, гео и версии приложения, сравнение с сезонностью. Первым делом проверяют, не изменился ли сам состав пользователей, прежде чем винить продукт.

«У тебя D7 retention 12%. Это много или мало?» Слабый ответ — назвать число «нормой». Сильный — сначала уточнить, классический это D7 или rolling (их нельзя сравнивать), затем — тип продукта и сравнение со своей же историей и с бенчмарком категории. Абсолютное значение без контекста ничего не значит.

«Какую retention-метрику взял бы как North Star?» Сильный ответ привязывает выбор к типу продукта: для daily-use — ранний classic retention или DAU/MAU, для эпизодического — rolling на длинном горизонте. И объясняет, почему именно это отражает получение ценности.

Потренировать такие вопросы с разбором можно в Карьернике — retention и другие продуктовые метрики разложены на задачи с ответами.

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

Часовые пояса. Пользователь зарегистрировался в 23:50 по Москве, а данные в UTC — там это уже следующий день. Считая retention по UTC, вы запишете его в «вернувшихся на D0» вместо D1. За уточнение часового пояса на собесе дают бонусные очки.

Размытое определение активности. Что считать возвращением — открыл приложение, совершил целевое действие, провёл больше 10 секунд? Разные определения дают разный retention. Зафиксируйте критерий до расчёта и проговорите его на интервью — это показывает зрелость.

Маленькие когорты. В когорте из 20 человек retention случайно скачет от 0% до 50%. Группируйте когорты по неделям или месяцам ради статистической значимости.

Незавершённые когорты. Когорта «последняя неделя» ещё не может показать D30 — прошло мало времени. Без фильтра WHERE cohort_date <= CURRENT_DATE - INTERVAL '30 days' retention искусственно занижается.

Путаница classic и rolling. Rolling всегда выше классического, сравнивать их между собой нельзя. Прежде чем оценивать «12% — это много или мало», уточните, какой это D7.

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

FAQ

Какой retention считается хорошим?

Зависит от типа продукта. Для мобильных приложений ориентиры: D1 — 25–40%, D7 — 10–20%, D30 — 5–15%. Для SaaS D30 обычно выше: 20–40%. Для соцсетей и мессенджеров D1 может быть 50%+. Сравнивайте только с бенчмарками своей категории — универсального «хорошего» значения нет.

В чём разница между retention и возвратом (return rate)?

Retention считается по когортам и привязан к конкретному дню от первого визита. Возврат — более общая метрика: какая доля активных на прошлой неделе была активна на этой. Retention показывает качество удержания новых пользователей, return rate — стабильность активной базы. На собеседованиях чаще спрашивают именно retention.

Можно ли считать retention без когорт?

Технически да, но это бессмысленно. Без когорт вы смешиваете новых и старых пользователей, и метрика теряет диагностическую ценность. Если D1 упал — это новые пользователи хуже удерживаются или старые когорты закончились? Без когортного разреза не узнаете.

Чем retention отличается от stickiness?

Retention отслеживает конкретную когорту во времени — вернулись ли те же люди на день N. Stickiness (DAU/MAU) измеряет, насколько часто в среднем активная база пользуется продуктом внутри месяца. Retention отвечает на вопрос «удерживаем ли новых», stickiness — «как интенсивно живёт текущая база». Это дополняющие, а не взаимозаменяемые метрики.