Churn rate и retention rate: что это и как посчитать отток
Churn rate — доля клиентов, которые ушли за период, из тех, кто был в его начале. Как посчитать отток клиентов и retention rate в подписке и в бесплатном продукте, чем customer churn отличается от revenue churn, как перевести месячный отток в годовой и где ошибаются со знаменателем.
Содержание статьи
Финансовый директор просит одну цифру: какой у нас churn. На дашборде написано 18,5% — это доля подписок со статусом churned. Аналитик пересчитывает по платежам и получает 46,3% за август. Обе цифры посчитаны по одной учебной базе, и обе честные. Но churn rate из них только одна, и разница между ними — не ошибка в SQL, а разница в том, что поставили в числитель и знаменатель.
Коротко
- Churn rate (коэффициент оттока) — доля клиентов, которые ушли за период, среди тех, кто был активен в его начале.
- Retention rate в подписке — обратная величина для той же базы: 1 − churn rate.
- В продуктовой аналитике retention чаще значит другое: долю когорты, вернувшейся на N-й день после регистрации (D1, D7, D30).
- Новых клиентов, пришедших внутри периода, в знаменатель не добавляют: они занижают отток.
- Customer churn считает людей, revenue churn — деньги. При разных тарифах они расходятся.
- Годовой отток — не месячный, умноженный на 12: 1 − (1 − m)¹².
- В бесплатном продукте ушедшим называют того, кто не появлялся N дней, и выбор N меняет цифру в разы.
Что такое churn rate
Churn rate — это доля клиентов, которые перестали быть клиентами за выбранный период, от числа клиентов на начало этого периода. По-русски говорят «отток клиентов» или «коэффициент оттока». Если на 1 августа было 421 платящий подписчик и 195 из них не продлили подписку в течение августа, churn rate за август — 195 / 421 = 46,3%.
У определения три обязательные части: период (месяц, квартал, год), база (кто был клиентом в начале) и событие ухода (что именно считать уходом: отмену, непродление, неоплату). Если хотя бы одна из них не записана рядом с цифрой, сравнивать её с чужой бессмысленно.
Retention rate для той же базы — доля оставшихся: 1 − 0,463 = 53,7%. Это одно и то же наблюдение, рассказанное с двух сторон.
churn = ушли за период / активны на начало периода; retention = 1 − churnЧислитель — только те, кто входил в базу на начало. Клиенты, пришедшие внутри периода, не участвуют ни в числителе, ни в знаменателе.
Retention rate: два разных смысла одного слова
В подписочном бизнесе retention rate — зеркало оттока: какая доля платящих на начало периода осталась к его концу. В продуктовой аналитике тем же словом называют когортное удержание: какая доля пользователей, зарегистрированных в один день или неделю, вернулась в продукт на седьмой или тридцатый день.
Это разные метрики с разной базой. На учебной базе подписочный retention за август — 53,7%, а D7 retention всех пользователей — 21,4%. Если в отчёте написано просто «retention 54%», первым вопросом должен быть «чей и за какой период».
| Подписочный retention | Продуктовый retention (Dn) | |
|---|---|---|
| База | платящие клиенты на начало периода | когорта по дате регистрации |
| Что считается «остался» | продлил или не отменил подписку | сделал действие на N-й день |
| Период | календарный: месяц, квартал, год | возраст пользователя: D1, D7, D30 |
| Связь с оттоком | retention = 1 − churn | прямой связи нет |
| Учебная база | 53,7% за август | D7 = 21,4% |
Как посчитать churn rate подписки в SQL
В учебной базе есть таблица payments: каждая оплата покрывает 30 дней, а продление, если оно было, приходит ровно через 30 дней после предыдущей оплаты. Это даёт чистое определение ухода: оплаченный период закончился, а следующей оплаты нет.
База на 1 августа — подписчики, чей оплаченный период покрывает эту дату, то есть оплатившие с 3 по 31 июля. Их продления приходятся на 2–30 августа, и все эти даты уже есть в данных. Если бы срок продления части клиентов выходил за конец данных, их пришлось бы исключить: непришедший платёж в будущем — не отток.
| Тариф | Активны на 1 августа | Не продлили | Churn rate | Retention rate | Revenue churn |
|---|---|---|---|---|---|
| basic | 234 | 109 | 46,6% | 53,4% | 46,6% |
| pro | 139 | 64 | 46,0% | 54,0% | 46,0% |
| team | 48 | 22 | 45,8% | 54,2% | 45,8% |
| Все | 421 | 195 | 46,3% | 53,7% | 46,2% |
with periods as (
-- каждая оплата покрывает 30 дней; продление приходит ровно через 30 дней
select
p.user_id,
p.plan,
p.amount,
p.paid_at,
exists (
select 1
from payments as r
where r.user_id = p.user_id
and r.paid_at = p.paid_at + 30
) as renewed
from payments as p
),
august_base as (
-- активны на 1 августа: оплаченный период покрывает эту дату
select *
from periods
where paid_at between date '2026-08-01' - 29 and date '2026-07-31'
)
select
plan,
count(*) as active_at_start,
count(*) filter (where not renewed) as churned,
round(100.0 * count(*) filter (where not renewed) / count(*), 1) as churn_pct,
sum(amount) as mrr_start,
sum(amount) filter (where not renewed) as mrr_lost,
round(100.0 * sum(amount) filter (where not renewed) / sum(amount), 1) as revenue_churn_pct
from august_base
group by rollup (plan)
order by plan nulls last;Ловушка знаменателя: новые клиенты за период
Самая частая ошибка — делить ушедших на всех, кто был клиентом хоть в какой-то момент месяца. В августе в учебной базе пришло 410 новых подписчиков. Если добавить их в знаменатель, получится 195 / (421 + 410) = 23,5% — вдвое меньше настоящего оттока.
Цифра занижена, потому что новые клиенты почти не успели уйти: первое продление у 14 из них, оплативших 1 августа, наступает 31-го, у остальных — в сентябре. Чем быстрее растёт продукт, тем сильнее такая формула приукрашивает отток. Растущий сервис с этой ошибкой может показывать «снижение churn» месяц за месяцем, хотя каждый клиент уходит так же часто, как раньше.
Новые клиенты августа никуда не пропадают из расчёта. Они войдут в базу на 1 сентября и попадут в сентябрьский churn. Если хочется видеть, как уходят именно новички, это отдельная метрика — отток первого месяца, и считают её по когортам первой оплаты.
Каждый человек в числителе должен быть и в знаменателе. Если в числитель может попасть клиент, которого не было в базе на начало периода, формула сломана.
Статус или платежи: что считать уходом
Вернёмся к 18,5% из начала. Это 169 подписок со статусом churned из 912 когда-либо оформленных. У такой доли нет периода: в неё попали и те, кто ушёл в июне, и те, кто ушёл вчера, а в знаменателе — все подписки за три месяца. Это снимок, а не churn rate. По тарифам снимок тоже почти ровный: 18,9% у basic, 18,6% у pro, 16,7% у team.
Посчитать по статусу отток за период нельзя: в таблице subscriptions нет даты, когда статус сменился. Поэтому период берут из платежей. Но и здесь стоит сверить источники. В учебной базе у 270 пользователей срок продления уже наступил, а платёж не пришёл. Статус churned из них только у 13, у 207 стоит active, у 50 — past_due.
В живом биллинге так бывает из-за льготного периода, ручных оплат по счёту или задержек синхронизации. Решение не в том, чтобы выбрать «правильную» таблицу, а в том, чтобы записать правило ухода и держать его одинаковым от месяца к месяцу. Отдельно договоритесь о past_due: считать ли неоплату сразу оттоком или ждать окончания льготного периода.
Customer churn и revenue churn: в чём разница
Customer churn считает клиентов, revenue churn — ежемесячную выручку, которую они приносили. Формула та же, только вместо штук — деньги: потерянный MRR за период, делённый на MRR на начало периода. В августе на учебной базе на 1 августа было 10 349 MRR, потеряно 4785, revenue churn — 46,2%.
Здесь две метрики почти совпадают, потому что тарифы уходят одинаково: 46,6%, 46,0% и 45,8%. Разойдутся они, когда уходят в основном дешёвые или дорогие клиенты. Если продукт теряет много клиентов на basic и почти не теряет team, customer churn будет выглядеть тревожно, а выручка — держаться. Обратная ситуация опаснее: число клиентов стабильно, а уходят крупные.
В revenue churn обычно учитывают и понижение тарифа (contraction). Если прибавить к удержанной выручке повышения тарифов (expansion), получится net revenue churn, и он может стать отрицательным: оставшиеся клиенты платят больше, чем унесли ушедшие. В учебной базе смены тарифа нет, поэтому net и gross здесь совпадают. Как собирать MRR из новых, ушедших и изменивших тариф клиентов, разобрано в соседнем материале про MRR и ARR.
Как перевести месячный churn в годовой
Месячный отток нельзя умножить на 12. Каждый месяц уходит доля от тех, кто остался, а не от исходной базы. При 5% в месяц за год остаётся 0,95¹² ≈ 54% клиентов, значит, годовой отток — около 46%, а не 60%. При 10% в месяц умножение даёт бессмысленные 120%.
Обратный пересчёт тоже через степень: годовой отток 30% соответствует примерно 2,9% в месяц. Формула предполагает, что отток каждый месяц одинаковый. У молодых продуктов это обычно не так: в первые месяцы уходят быстрее, дальше остаются лояльные. Поэтому для прогноза на год надёжнее когортная кривая, чем одна месячная цифра, возведённая в степень. Августовские 46,3% из учебной базы в годовой пересчёт лучше не превращать: три месяца истории — не основание для экстраполяции.
a = 1 − (1 − m)¹²; m = 1 − (1 − a)^(1/12)Предполагается постоянный месячный отток. Проверено в Python.
| Месячный churn | Годовой churn | Если умножить на 12 |
|---|---|---|
| 2% | 21,5% | 24% |
| 3% | 30,6% | 36% |
| 5% | 46,0% | 60% |
| 10% | 71,8% | 120% |
Как посчитать retention D7 по событиям
Продуктовый retention строится не на платежах, а на действиях. Классический D7 — доля пользователей, которые что-то сделали ровно на седьмой день после регистрации. В учебной базе события заканчиваются 30 августа в 12:59, поэтому в расчёт берём регистрации по 22 августа: у них седьмой день целиком попал в данные.
Результат — 881 из 4109, или 21,4%. Это не «78,6% ушли»: человек, пропустивший седьмой день, мог вернуться на девятый. Поэтому D7 не превращают в отток вычитанием из единицы. Режимы расчёта (ровно на день N или в день N и позже), когортные таблицы и сравнение каналов разобраны в отдельных материалах по ссылкам ниже.
with active_days as (
select distinct user_id, event_time::date as day
from events
),
cohort as (
-- день 7 должен целиком попасть в данные: события обрываются 30 августа
select user_id, signup_date
from users
where signup_date <= date '2026-08-22'
)
select
count(*) as users,
count(a.user_id) as active_day_7,
round(100.0 * count(a.user_id) / count(*), 1) as d7_retention_pct
from cohort as c
left join active_days as a
on a.user_id = c.user_id
and a.day = c.signup_date + 7;Что считать оттоком в бесплатном продукте
В бесплатном продукте нет отмены подписки, и уход приходится определять через молчание: пользователь считается ушедшим, если не появлялся N дней. Число N — решение аналитика, и от него цифра меняется в разы.
На учебной базе возьмём 2718 пользователей, зарегистрированных до 31 июля включительно: у каждого было хотя бы 30 дней, чтобы вернуться. Правило «нет событий 7 дней» записывает в ушедшие 72,2% из них, правило «14 дней» — 51,3%, «30 дней» — 18,5%. Одна и та же база, одна и та же дата отчёта.
Как выбрать N? Посмотрите, как часто люди возвращаются после паузы. У 1450 из этих 2718 пользователей (53,3%) хотя бы раз была пауза в 14 дней и больше, после которой они вернулись. Правило «14 дней» объявило бы каждого из них ушедшим раньше времени. Паузу от 30 дней с возвратом пережили только 158 человек (5,8%). Для этого продукта 30 дней ближе к настоящему уходу: после такой паузы возвращается мало кто. Порог выбирают там, где кривая «вернулись после паузы в N дней» становится почти плоской, и не меняют его без пересчёта истории.
Учебная база SQL-курса, DuckDB. 2718 пользователей, зарегистрированных до 31 июля; ушедший — нет ни одного события за последние N дней до 30 августа.
with last_seen as (
select u.user_id, max(e.event_time)::date as last_day
from users as u
join events as e on e.user_id = u.user_id
-- регистрация не позже 31 июля: у всех было хотя бы 30 дней, чтобы вернуться
where u.signup_date <= date '2026-07-31'
group by u.user_id
)
select
count(*) as users,
count(*) filter (where last_day <= date '2026-08-30' - 7) as churned_7d,
count(*) filter (where last_day <= date '2026-08-30' - 14) as churned_14d,
count(*) filter (where last_day <= date '2026-08-30' - 30) as churned_30d,
round(100.0 * count(*) filter (where last_day <= date '2026-08-30' - 7) / count(*), 1) as churn_7d_pct,
round(100.0 * count(*) filter (where last_day <= date '2026-08-30' - 14) / count(*), 1) as churn_14d_pct,
round(100.0 * count(*) filter (where last_day <= date '2026-08-30' - 30) / count(*), 1) as churn_30d_pct
from last_seen;Частые ошибки при расчёте оттока
Почти все ошибки с churn сводятся к тому, что числитель и знаменатель считают разных людей или разные периоды.
- Новые клиенты периода в знаменателе. Отток занижается тем сильнее, чем быстрее растёт продукт.
- Снимок статусов выдаётся за churn rate. Доля
churnedсреди всех подписок за всё время не имеет периода. - Будущие продления считаются оттоком. Если срок оплаты ещё не наступил, клиент не ушёл, даже если платежа нет.
- Годовой churn получен умножением месячного на 12.
- Подписочный retention сравнивается с продуктовым D7 как одна метрика.
- Порог молчания в бесплатном продукте меняется между отчётами: 14 дней в одном квартале, 30 в следующем.
- Отток усредняется по тарифам без весов. 46% у team из 48 клиентов и 46% у basic из 234 — разный объём денег и разная точность.
Что читать дальше
Отток — последний шаг в цепочке метрик. Материалы ниже помогут посчитать соседние: выручку подписки, удержание по когортам и ценность клиента.
Материалы по теме

MRR и ARR: что это, как считать и что они скрывают
MRR — регулярная выручка активных подписок, приведённая к одному месяцу, ARR — та же величина в годовом масштабе. Как посчитать MRR в SQL, что делать с просроченными оплатами, чем MRR отличается от денег за месяц и из чего складывается его изменение.

Когорта: что это простыми словами и зачем нужен когортный анализ
Когорта — группа пользователей с общим стартовым событием в одном периоде. Что такое когортный анализ, как построить и читать когортную таблицу, какие бывают когорты и почему последние когорты нельзя сравнивать с остальными.

Конверсия: что это, формула и как считать без ошибок
Конверсия — доля тех, кто сделал целевое действие, среди тех, кто мог его сделать. Формула CR, выбор знаменателя, окно конверсии, шаги воронки, сегменты и почему нельзя усреднять конверсии — на примерах с учебной базы.