Отток и реактивация клиентов: кто входит в знаменатель

В январе были активны три клиента, в феврале тоже три. По размеру базы кажется, что ничего не изменилось. Но один январский клиент перестал покупать, а другой вернулся после перерыва. Если смотреть только на итоговое число активных, отток и реактивация взаимно скрываются.

Нужно сравнить множества клиентов в двух периодах. Отток февраля — люди, активные в январе и отсутствующие в феврале. Знаменатель для доли оттока — январская активная база: именно эти люди могли уйти. Люди, пришедшие в феврале, в этот знаменатель не входят. Их нужно разделить на новых и реактивированных по истории до января.

history_before_jan = {4}
jan = {1, 2, 3}
feb = {2, 3, 4}
churned = jan - feb
retained = jan & feb
arrivals = feb - jan
reactivated = arrivals & history_before_jan
new = arrivals - history_before_jan
print('retained:', sorted(retained))
print('churned:', sorted(churned))
print('reactivated:', sorted(reactivated))
print('new:', sorted(new))
print('churn rate:', round(len(churned) / len(jan), 3))

Результат: удержались клиенты 2 и 3, ушёл клиент 1, вернулся клиент 4, новых нет. Доля оттока равна 1/3 = 33,3%. База осталась равной трём людям, потому что один уход компенсирован возвращением. Если бы клиент 4 никогда раньше не появлялся, он был бы новым, а не реактивированным.

Активность должна быть определена заранее

Для магазина активность может означать оплаченный заказ, для подписки — оплаченный период, для приложения — осмысленное действие. Если январь строится по заказам, а февраль по логинам, сравнение множеств теряет смысл. Один и тот же идентификатор клиента и правило активности должны использоваться в обоих месяцах. Возвраты и отмены учитываются согласно заранее выбранному правилу.

Реактивацию нельзя определить только по двум месяцам. Нужна история до начала предыдущего периода: клиент 4 был активен раньше января. Если исторические данные доступны лишь с января, часть старых возвращений ошибочно станет «новыми». В отчёте стоит отмечать глубину истории, на которой основана классификация.

Отток и рост базы — разные метрики

Изменение численности базы равно новым плюс реактивированным минус ушедшие. Оно не заменяет churn rate. В примере изменение нулевое, а отток высокий. Продуктовое решение тоже будет разным: при большом оттоке исследуют причины прекращения активности, при низком притоке — каналы привлечения, при высокой реактивации — сценарии возвращения.

Если период ещё не закрыт, часть клиентов просто не успела совершить обычное действие. Сравнение неполного февраля с полным январём завысит отток. Используйте закрытые календарные периоды или отдельную метрику «активен к дню N месяца» на одинаковой глубине наблюдения. В бизнесе с редкими покупками месячная активность может быть слишком коротким окном, тогда выбирают квартал или другой интервал.

Сдвиг окна изменяет и состав ушедших. Человек покупает раз в два месяца: по месячному определению он будет чередовать отток и реактивацию, хотя его поведение стабильно. Прежде чем запускать кампанию удержания на такой список, посмотрите распределение интервалов между покупками. Окно активности должно соответствовать естественной частоте продукта.

Можно разложить число активных февраля на сохранённых из января, реактивированных и действительно новых. В примере это 2+1+0=3. Такая проверка состава защищает от тихой потери категории при соединениях таблиц. Аналогично январская база распадается на сохранённых и ушедших: 2+1=3. Если равенства не выполняются, правила идентификации клиентов или удаления дублей нарушены.

Для подписки стоит различать отмену автопродления и фактическую потерю оплаченного доступа. Клиент, отменивший подписку сегодня, может оставаться активным до конца периода. Если событие отмены назвать оттоком, момент ухода сдвинется и знаменатель следующего месяца станет непонятным. Выберите событие, которое отвечает бизнес-вопросу, и зафиксируйте его в паспорте метрики.

На курсе «Практическая аналитика данных» клиентские метрики и когортное удержание разбираются на данных магазина, затем переносятся в дашборд и аналитическую записку. Вы проверяете определения и повторяете расчёт на новом месяце. Откройте программу, чтобы связать изменения клиентской базы с конкретным решением.

Для отдельного вопроса о доле возврата исходной когорты полезен разбор retention и его знаменателя.

Продолжить на практике

  • Практическая аналитика данных ↗

    Превратите знания SQL или Python в аналитическую работу: проверяйте данные, считайте бизнес-метрики, стройте дашборды и объясняйте выводы на трёх прикладных кейсах.