Представьте: после введения автоудаления неактивных аккаунтов D30-retention вырос, хотя поведение пользователей не менялось. В знаменателе отчёта остаются только аккаунты, существующие на 30-й день. Какой механизм создал рост метрики?
Рост создан смещением состава когорты: из знаменателя исключили пользователей, которые не дожили до 30-го дня в базе. Это форма survivorship bias — в расчёте остались преимущественно более активные пользователи, поэтому retention выглядит выше без реального улучшения продукта.
Когортный анализ появился как способ сравнивать пользователей, пришедших в одинаковый период или совершивших одинаковое исходное действие. Он решает проблему смешения пользователей разного возраста: у новой когорты ещё не было возможности дойти до D30, а у старой такая возможность уже есть.
Для retention важна фиксированная исходная популяция. Пользователь должен оставаться в знаменателе когорты независимо от того, активен он сейчас, удалён его аккаунт или он перестал пользоваться продуктом.
В описанном отчёте знаменатель формируется не из всех пользователей, начавших пользоваться продуктом, а из тех, кто сохранился в базе к 30-му дню. Неактивные пользователи чаще попадают под автоудаление, поэтому процедура удаления зависит от самого поведения, которое измеряет retention.
Если такие пользователи исключены из знаменателя, метрика отвечает уже на другой вопрос: «Какова активность среди доживших до D30 аккаунтов?», а не «Какая доля исходной когорты вернулась на D30?». Сравнение с периодами до изменения политики удаления становится некорректным.
Корректный знаменатель — все пользователи, вошедшие в когорту в день или период её формирования. Для D30 нужно проверить, был ли пользователь активен в течение заданного окна на 30-й день, но не исключать его из исходной когорты из-за удаления аккаунта.
Если аккаунт удалён, его статус должен быть явно отражён в данных. Обычно удаление из-за неактивности трактуют как отсутствие retention-события, если бизнес-правило не задаёт иной смысл. Нельзя автоматически считать удалённого пользователя неизвестным и удалять его из расчёта.
Нужно также зафиксировать определения: событие формирования когорты, retention-событие, временную зону, допустимое окно вокруг D30 и правила обработки удалённых или заблокированных аккаунтов. При изменении политики хранения следует разделить эффект изменения данных и эффект изменения продукта.
Полезны контрольные проверки: сравнить размер исходной когорты с числом аккаунтов, доступных на D30, построить retention по статусу удаления и провести расчёт на историческом снимке пользователей. Если рост наблюдается только после исключения удалённых аккаунтов, это признак артефакта знаменателя.
Есть важный компромисс: удалённые данные могут быть недоступны по требованиям приватности или политики хранения. Тогда нельзя выдавать точный исторический retention без оговорок; следует сохранить агрегированные признаки когорты до удаления либо явно пометить период как несопоставимый.
Сервис удалил аккаунты без активности в течение 14 дней. Аналитики заметили рост D30-retention с 18% до 24% и предложили считать релиз успешным. При проверке выяснилось, что в знаменателе были только аккаунты, существующие на дату отчёта.
Рассматривались два варианта. Первый — оставить текущий расчёт: он прост и использует доступные записи, но систематически завышает retention и делает периоды несопоставимыми. Второй — восстановить фиксированные размеры исходных когорт из исторических агрегатов и считать удалённых пользователей не вернувшимися; этот вариант требует доработки хранения, зато сохраняет смысл метрики.
Выбрали второй вариант и отдельно добавили отчёт по удалению аккаунтов. После пересчёта D30-retention вернулся к 18–19%, а исходный рост оказался артефактом фильтрации. Команда не стала откатывать полезную политику удаления, но перестала использовать искажённый отчёт для оценки продукта.
1. Можно ли просто считать удалённых пользователей вернувшимися, если они исчезли из базы?
Нет. Отсутствие пользователя в текущей базе не является доказательством активности. Нужно различать «пользователь активен», «пользователь неактивен» и «данные о пользователе недоступны». Если после удаления нет сохранённого признака поведения, корректнее считать результат неизвестным и отдельно оценивать границы метрики, а не приписывать активность.
2. Всегда ли удаление аккаунта должно считаться оттоком?
Не обязательно: это зависит от определения бизнес-метрики. Если удаление вызвано неактивностью, оно обычно является сильным сигналом отсутствия retention. Если аккаунт удалён по запросу пользователя из-за требований приватности, причина может быть иной, но исключение такого пользователя из заранее определённой когорты всё равно меняет знаменатель. Правило должно быть задано до сравнения периодов и применяться одинаково.
3. Чем такой эффект отличается от обычной цензуры данных в когортном анализе?
При обычной правой цензуре у пользователя ещё не наступил момент наблюдения: например, свежая когорта пока физически не достигла D30. Это ограничение зрелости данных, а не изменение состава уже зрелой когорты. В рассматриваемом случае из знаменателя выборочно удаляют пользователей, причём вероятность удаления связана с их активностью, поэтому возникает систематическое смещение, а не просто неполнота наблюдений.