Retention vs Churn — в чём разница и как считать
Коротко
Retention — доля пользователей, которые вернулись в продукт за период. Churn — доля пользователей, которые ушли. В сумме Retention + Churn = 100%. На собеседованиях спрашивают обе метрики, но считать их нужно аккуратно — подводных камней много.
Что такое Retention
Retention (удержание) показывает, какая доля пользователей осталась активной через N дней после первого визита. Самые популярные метрики: Day 1, Day 7, Day 30 Retention.
-- Day 7 Retention: доля пользователей, вернувшихся на 7-й день
WITH cohort AS (
SELECT user_id,
DATE(MIN(created_at)) AS signup_date
FROM events
GROUP BY user_id
)
SELECT c.signup_date,
COUNT(DISTINCT c.user_id) AS cohort_size,
COUNT(DISTINCT e.user_id) AS returned,
ROUND(100.0 * COUNT(DISTINCT e.user_id) / COUNT(DISTINCT c.user_id), 1) AS retention_d7
FROM cohort c
LEFT JOIN events e
ON c.user_id = e.user_id
AND DATE(e.created_at) = c.signup_date + INTERVAL '7 days'
GROUP BY c.signup_date
ORDER BY c.signup_date;Если из 1 000 пользователей, зарегистрировавшихся 1 марта, 250 вернулись на 8-е марта — Day 7 Retention = 25%.
Что такое Churn
Churn (отток) — доля пользователей, которые перестали пользоваться продуктом за период. Для подписочных продуктов считают по отмене подписки, для бесплатных — по отсутствию активности.
-- Monthly Churn Rate по подписочной модели
SELECT DATE_TRUNC('month', churned_at) AS month,
COUNT(*) AS churned_users,
(SELECT COUNT(*)
FROM subscriptions
WHERE status = 'active'
AND created_at < DATE_TRUNC('month', s.churned_at)
) AS active_start,
ROUND(100.0 * COUNT(*) / NULLIF(
(SELECT COUNT(*)
FROM subscriptions
WHERE status = 'active'
AND created_at < DATE_TRUNC('month', s.churned_at)
), 0), 1) AS churn_rate
FROM subscriptions s
WHERE churned_at IS NOT NULL
GROUP BY DATE_TRUNC('month', churned_at)
ORDER BY month;Если в начале месяца было 5 000 платящих пользователей, а за месяц ушли 200 — Monthly Churn Rate = 4%.
Ключевые отличия
| Retention | Churn | |
|---|---|---|
| Что показывает | Долю оставшихся | Долю ушедших |
| Формула | Вернувшиеся / Когорта × 100% | Ушедшие / Активные на начало × 100% |
| Связь | Retention = 100% − Churn | Churn = 100% − Retention |
| Типичные значения (мобайл) | Day 1: 25–40%, Day 30: 5–15% | Monthly: 3–7% для подписок |
| Где акцент | Рост и вовлечение | Проблемы и потери |
| Единица анализа | Когорта (дата регистрации) | Период (месяц, неделя) |
Когда использовать Retention
- Оценка качества онбординга (Day 1, Day 3 Retention)
- Сравнение когорт до и после изменений в продукте
- Построение Retention Curve для понимания, когда пользователи «отваливаются»
- A/B-тесты фич, влияющих на вовлечение
- Оценка Product-Market Fit (хороший Day 30 Retention — сигнал PMF)
Когда использовать Churn
- Подписочные продукты (SaaS, стриминг) — прогноз выручки
- Расчёт LTV: LTV = ARPU / Churn Rate
- Поиск причин оттока (Churn Analysis)
- Когортный анализ по каналам привлечения
- Финансовое моделирование и юнит-экономика
Типичная ошибка
Считать Churn как «1 − Retention» для не-подписочных продуктов без чёткого определения «активного пользователя».
-- Неправильно: считаем churn без определения «активности»
SELECT COUNT(*) FILTER (WHERE last_seen < NOW() - INTERVAL '30 days')
/ COUNT(*)::float AS churn_rate
FROM users;
-- Правильно: сначала определяем активных на начало периода
WITH active_start AS (
SELECT user_id
FROM events
WHERE created_at BETWEEN '2026-03-01' AND '2026-03-31'
GROUP BY user_id
),
active_end AS (
SELECT user_id
FROM events
WHERE created_at BETWEEN '2026-04-01' AND '2026-04-30'
GROUP BY user_id
)
SELECT COUNT(a.user_id) AS active_march,
COUNT(a.user_id) - COUNT(b.user_id) AS churned,
ROUND(100.0 * (COUNT(a.user_id) - COUNT(b.user_id))
/ COUNT(a.user_id), 1) AS churn_rate
FROM active_start a
LEFT JOIN active_end b ON a.user_id = b.user_id;Без чёткого определения «активного пользователя» метрики Retention и Churn теряют смысл. Зафиксируйте критерий (визит, событие, покупка) до расчёта.
Вопросы с собеседований
— Чем Retention отличается от Churn? — Retention — доля оставшихся пользователей, Churn — доля ушедших. Математически Churn = 100% − Retention, но на практике их считают по-разному: Retention — по когортам, Churn — по периодам.
— Как посчитать LTV через Churn? — LTV = ARPU / Churn Rate. Если средний чек $10/мес и месячный Churn = 5%, то LTV = 10 / 0.05 = $200. Формула работает при стабильном Churn.
— Какой Day 1 Retention считается хорошим? — Зависит от категории. Для мобильных приложений 25–40% — нормально. Для игр 30–50%. Ниже 20% — сигнал проблем с онбордингом.
— Что делать, если Churn растёт? — Сегментировать: по когортам, каналам привлечения, платформам. Найти, в каком сегменте проблема. Посмотреть, на каком шаге пользователи уходят. Частая причина — ухудшение качества трафика.
— Можно ли иметь отрицательный Churn? — Да, Net Revenue Churn может быть отрицательным, если расширение выручки от оставшихся (upsell, cross-sell) превышает потери от ушедших. Это называется Net Negative Churn.
FAQ
Retention и Churn всегда дают в сумме 100%?
На уровне одной когорты за один период — да. Но на практике Retention обычно считают по когортам (день регистрации), а Churn — по календарным периодам (месяц). Поэтому прямое сложение не всегда корректно.
Как считать Retention для продукта без регистрации?
Используйте анонимный идентификатор (device ID, cookie). Определите «первый визит» как дату первого события. Дальше считайте стандартно по когортам, но учитывайте, что один человек может генерировать несколько ID.
Что важнее отслеживать — Retention или Churn?
Зависит от бизнес-модели. Для подписочных продуктов (SaaS) ключевой Churn Rate — он напрямую влияет на выручку. Для freemium-продуктов с рекламной монетизацией важнее Retention — от него зависит DAU и инвентарь.
Какой нормальный Monthly Churn для SaaS?
Для B2B SaaS — 3–5% в месяц (или ~30–50% годовой). Для B2C подписок — 5–10% в месяц. Лучшие SaaS-компании добиваются <2% месячного Churn.