churn rateотток клиентовSQL для аналитикаretentionunit-экономика

Churn rate: формула оттока клиентов и расчёт в SQL

2026-07-07 11 мин

Churn rate (отток) — доля клиентов или выручки, потерянная за период. Базовая формула: churn = (ушедшие за период) / (были в начале периода). Считать нужно на фиксированном окне (обычно месяц), с корректным знаменателем и без новичков, которые пришли в середине окна.

Дальше — что именно измерять, чем customer churn отличается от revenue churn, как посчитать помесячный отток в SQL и какие ошибки чаще всего ломают цифру на собеседовании.

Что такое отток клиентов простыми словами?

Отток — это клиенты, которые перестали пользоваться продуктом или платить за него в течение выбранного периода. Обратная величина — retention (удержание): если за месяц ушло 5% клиентов, то удержалось 95%. Отток и удержание в сумме дают 100% на одном и том же окне и знаменателе.

Важно сразу договориться о трёх вещах, иначе метрика будет несравнимой между командами:

Для подписочных (SaaS) продуктов отток обычно определяют по факту отмены подписки. Для транзакционных (e-commerce, маркетплейс) — по отсутствию активности за скользящее окно, потому что явного «расторжения договора» нет.

Чем отличается customer churn от revenue churn?

Это две разные метрики, и путать их нельзя.

Revenue churn бывает gross (только потерянная выручка от ушедших и даунгрейдов) и net (потери минус апселлы и расширения оставшихся клиентов). Net revenue churn может быть отрицательным — это хорошо: значит расширения перекрывают потери.

МетрикаЧто считаетФормула (за период)
Customer churnклиентовушедшие / клиенты на начало
Gross revenue churnпотерянные деньги(MRR отмен + даунгрейды) / MRR на начало
Net revenue churnденьги с учётом роста(потери − апселлы) / MRR на начало

Пример разницы: за месяц ушло 8% клиентов, но это были самые мелкие тарифы, поэтому revenue churn — всего 3%. Или наоборот: ушёл один enterprise-клиент, customer churn 1%, а revenue churn 15%. Всегда смотрите обе метрики вместе.

Voluntary vs involuntary churn — в чём разница?

Involuntary churn часто даёт 20–40% всего оттока в подписках (иллюстративный диапазон) и при этом самый дешёвый в починке — иногда достаточно повторить списание через 3 дня. На собеседовании стоит уточнять, разделяет ли компания эти два типа: тактики восстановления у них разные.

Как считать churn rate: формула

Базовая формула customer churn за период:

churn = (C_lost) / (C_start)

где C_lost — число клиентов, ушедших за период, C_start — число активных клиентов на начало периода.

Ключевое правило знаменателя: в него идут только те, кто уже был клиентом на начало окна. Новые клиенты, пришедшие в течение месяца, не могли уйти из «начальной» когорты, поэтому в знаменатель не включаются (иначе отток искусственно занизится).

Retention как обратная величина:

retention = 1 - churn

Для revenue churn формула та же, но вместо количества клиентов — их MRR (месячная выручка).

Cohort-based или snapshot — какой метод выбрать?

Есть два способа считать, и они дают разные числа.

Когортный анализ честнее для растущих продуктов: если база быстро растёт, snapshot размывает отток притоком новичков. Подробный разбор когорт есть в отдельном материале — когортный анализ retention в SQL.

Пример расчёта оттока на цифрах

Возьмём иллюстративные данные подписочного сервиса за март.

Customer churn:

churn = (45) / (1000) = 0,045 = 4,5%

Retention: 1 - 0,045 = 95,5%.

Обратите внимание: 120 новых клиентов не входят в знаменатель. Если ошибочно взять базу на конец месяца (1000 − 45 + 120 = 1075), получим 45/1075 = 4,2% — заниженный отток.

Теперь revenue churn. Пусть MRR на 1 марта = 2 000 000 ₽, ушедшие клиенты уносят 60 000 ₽, даунгрейды дают −20 000 ₽, а апселлы оставшихся +50 000 ₽.

Логотипный отток 4,5%, а денег компания теряет всего 1,5% благодаря апселлам — картинка совсем другая.

Как посчитать помесячный отток в SQL?

Набросок для подписочной таблицы subscriptions с полями user_id, started_at, canceled_at (данные условные). Логика: для каждого месяца считаем, сколько подписок было активно на его начало и сколько из них отменилось в течение месяца.

WITH months AS (
    SELECT generate_series(
        date_trunc('month', DATE '2026-01-01'),
        date_trunc('month', DATE '2026-06-01'),
        INTERVAL '1 month'
    ) AS month_start
),
metrics AS (
    SELECT
        m.month_start,
        -- активны на начало месяца: стартовали раньше и ещё не отменились
        COUNT(*) FILTER (
            WHERE s.started_at < m.month_start
              AND (s.canceled_at IS NULL OR s.canceled_at >= m.month_start)
        ) AS active_start,
        -- ушли в течение этого месяца
        COUNT(*) FILTER (
            WHERE s.canceled_at >= m.month_start
              AND s.canceled_at <  m.month_start + INTERVAL '1 month'
              AND s.started_at   <  m.month_start
        ) AS churned
    FROM months m
    CROSS JOIN subscriptions s
    GROUP BY m.month_start
)
SELECT
    month_start,
    active_start,
    churned,
    ROUND(churned::numeric / NULLIF(active_start, 0), 4) AS churn_rate
FROM metrics
ORDER BY month_start;

Три момента, которые делают запрос корректным:

Потренироваться писать такие агрегатные и оконные запросы можно в SQL-тренажёре, а разбор воронок — в статье про воронку конверсии в SQL.

Как отток связан с retention и LTV?

Отток напрямую задаёт срок жизни клиента. Для подписки со стабильным месячным оттоком средняя продолжительность жизни:

lifetime = (1) / (churn_month)

При месячном оттоке 4,5% средний клиент живёт 1/0,045 ≈ 22 месяца. Отсюда упрощённая LTV:

LTV = ARPU × (1) / (churn)

Если ARPU = 900 ₽/мес, то LTV ≈ 900 × 22 = 19 800 ₽ (иллюстративно). Снижение оттока с 4,5% до 3% удлиняет жизнь до ~33 месяцев и поднимает LTV почти в полтора раза — поэтому работа с оттоком часто дешевле, чем привлечение новых. Как связать LTV с окупаемостью привлечения, разобрано в материале про LTV, CAC и unit-экономику.

Частые ошибки при расчёте оттока

Разберите отток на живых данных: соберите помесячный запрос в SQL-тренажёре, а логику расчёта метрик и защиту цифр на интервью прогоните в AI-собеседовании или на реальных кейсах.

Практикуйся на реальных задачах
545 SQL + 538 Python задач с автопроверкой, 618 кейсов. Первые — без регистрации.
Посчитать отток в SQL-тренажёре →