Retention и когорты
Определения retention и кривые, когорты, churn, stickiness, активация и анализ выживаемости.
13 вопросов
JuniorТеорияОчень частоN-day, unbounded (rolling) и bracket retention по-разному читаются на одних данных — как каждое решает, что пользователь удержан?
N-day, unbounded (rolling) и bracket retention по-разному читаются на одних данных — как каждое решает, что пользователь удержан?
N-day засчитывает пользователя, только если он вернулся ровно в день N. Unbounded (rolling) — если в день N или любой позже. Bracket засчитывает возврат в окне, например дни 7–13 — поэтому rolling всегда выше всех.
Типичные ошибки
- ✗Считать, что N-day, rolling и bracket дают одно и то же число retention
- ✗Путать rolling (день N или позже) с классическим N-day (ровно день N)
- ✗Называть retention, не уточняя, каким определением он посчитан
Уточняющие вопросы
- →Какое определение подходит продукту с недельной привычкой и почему?
- →Как выбор определения расширяет или сужает разрыв между днём 1 и днём 30?
MiddleТеорияОчень частоКак совокупный (снимок) retention может расти каждый месяц, притом что каждая отдельная когорта на самом деле удерживает хуже?
Как совокупный (снимок) retention может расти каждый месяц, притом что каждая отдельная когорта на самом деле удерживает хуже?
Совокупный retention смешивает все возрасты, поэтому доминируют большие когорты. Наплыв новых с высоким ранним retention поднимает смешанную цифру, даже пока каждая когорта удерживает хуже — mix shift, как парадокс Симпсона. Когорты чинят это, фиксируя возраст.
Типичные ошибки
- ✗Верить, что совокупное обязано падать, если падает каждая когорта
- ✗Винить сезонность вместо сдвига в размерах когорт
- ✗Доверять смешанной линии retention без разбивки по когортам
Уточняющие вопросы
- →Как заметить этот mix shift в дашборде, пока он не ввёл в заблуждение?
- →Когда совокупный retention всё же правильное число для отчёта?
JuniorТеорияЧастоВ продукте без подписки что считается churn — и почему порог это бизнес-решение, а не формула?
В продукте без подписки что считается churn — и почему порог это бизнес-решение, а не формула?
Без события отмены у churn нет жёсткого сигнала, поэтому его определяют как бездействие дольше окна. Окно зависит от ритма продукта — 14 дней для ежедневного приложения, месяцы для travel. Универсального числа нет; его надо озвучить как решение.
Типичные ошибки
- ✗Применять фиксированный порог в 30 дней вне зависимости от ритма продукта
- ✗Считать churn неизмеримым без явного события отмены
- ✗Выбирать окно бездействия, не обосновав его стейкхолдерам
Уточняющие вопросы
- →Как выбрать длину окна по распределению промежутков между заходами?
- →Как выбранное окно связано с определением retention, которое вы показываете?
JuniorДизайнЧастоКогорный треугольник retention заполняет экран — каждая строка это месячная когорта регистрации, каждый столбец это месяцы с момента регистрации, каждая ячейка это процент когорты, всё ещё активной. PM ждёт вашу оценку за тридцать секунд. На что вы смотрите первым делом, чтобы понять, здоров ли retention — читаете поперёк когорт или вдоль жизни одной когорты — и какой единственный паттерн заставит вас усомниться в графике и остановиться до выводов?
Когорный треугольник retention заполняет экран — каждая строка это месячная когорта регистрации, каждый столбец это месяцы с момента регистрации, каждая ячейка это процент когорты, всё ещё активной. PM ждёт вашу оценку за тридцать секунд. На что вы смотрите первым делом, чтобы понять, здоров ли retention — читаете поперёк когорт или вдоль жизни одной когорты — и какой единственный паттерн заставит вас усомниться в графике и остановиться до выводов?
Читайте один столбец (месяц-3) поперёк когорт — он сравнивает их в равном возрасте, показывая, удерживают ли новые лучше. Что останавливает: незрелые ячейки в правом нижнем углу, где прошло мало месяцев, так что свежий 'рост' — неполные данные.
Типичные ошибки
- ✗Сравнивать когорты в разном возрасте вместо чтения одного столбца
- ✗Доверять незрелым ячейкам в правом нижнем углу свежих когорт
- ✗Читать единое смешанное среднее вместо структуры по когортам
Уточняющие вопросы
- →Как сезонность в месяцах регистрации проявится в треугольнике?
- →Как успешное улучшение retention выглядело бы по ячейкам?
JuniorТеорияЧастоЛипкость — DAU/MAU — равна 0.2 у одного приложения, 0.6 у другого; что значит разрыв и каким продуктам его игнорировать?
Липкость — DAU/MAU — равна 0.2 у одного приложения, 0.6 у другого; что значит разрыв и каким продуктам его игнорировать?
DAU/MAU оценивает, сколько дней в месяц активен средний пользователь — 0.2 это около 6 дней, 0.6 около 18 — поэтому выше значит сильнее привычка. Он подходит только продуктам ежедневного использования; для редких, как налоги или travel, низкий показатель ожидаем.
Типичные ошибки
- ✗Считать высокий DAU/MAU хорошим для любой категории продукта
- ✗Читать DAU/MAU как выручку или churn, а не как частоту визитов
- ✗Ставить универсальную цель по липкости для разных типов продуктов
Уточняющие вопросы
- →Когда WAU/MAU будет более честным знаменателем, чем DAU/MAU?
- →Как DAU/MAU может стоять на месте, пока состав пользователей смещается?
MiddleДизайнЧастоВы выкатили изменение онбординга на новую когорту. Retention дня 1 вырос на 10% против контроля, но retention дня 30 упал на 4%. Руководство хочет решение о запуске на этой неделе. Какому числу вы верите для оценки долгосрочного здоровья, как вы примиряете их разнонаправленность и что бы вы измерили перед раскаткой на всех?
Вы выкатили изменение онбординга на новую когорту. Retention дня 1 вырос на 10% против контроля, но retention дня 30 упал на 4%. Руководство хочет решение о запуске на этой неделе. Какому числу вы верите для оценки долгосрочного здоровья, как вы примиряете их разнонаправленность и что бы вы измерили перед раскаткой на всех?
Верьте дню 30: он на пологой кривой и предсказывает долгую ценность, а день 1 отражает новизну. Расхождение значит, что изменение протаскивает больше людей за день 1, но активирует хуже подходящих, кто уходит к дню 30. Оценивайте плато дня 30 по когортам до раскатки.
Типичные ошибки
- ✗Доверять более крупному движению дня 1, а не опорному числу дня 30
- ✗Усреднять разнонаправленные числа retention в один балл
- ✗Считать, что противоречие дня 1 и дня 30 обязательно баг трекинга
Уточняющие вопросы
- →Какой сегмент объяснил бы рост дня 1, но падение дня 30?
- →Сколько бы вы держали holdout перед решением?
MiddleДизайнЧастоОпишите модель жизненного цикла пользователя для growth-команды, которая помечает каждого пользователя за период как new, current (активен в прошлом периоде и в этом), resurrected (активен в этом периоде после паузы), dormant (недавно активен, но не в этом периоде) или churned (неактивен дольше окна). Объясните, какая граница между двумя состояниями целиком зависит от определения churn, и назовите по одному growth-действию, которое разблокирует каждое состояние.
Опишите модель жизненного цикла пользователя для growth-команды, которая помечает каждого пользователя за период как new, current (активен в прошлом периоде и в этом), resurrected (активен в этом периоде после паузы), dormant (недавно активен, но не в этом периоде) или churned (неактивен дольше окна). Объясните, какая граница между двумя состояниями целиком зависит от определения churn, и назовите по одному growth-действию, которое разблокирует каждое состояние.
Границу dormant против churned задаёт окно churn: dormant это неактивен, но недавно, churned за порогом. Действие на состояние — new: активировать; current: углублять привычку; resurrected: понять, что вернуло; dormant: вернуть заранее; churned: реактивация.
Типичные ошибки
- ✗Думать, что границы состояний не зависят от окна churn
- ✗Сводить все пять состояний к одному действию реактивации
- ✗Ставить возврат churned выше более дешёвого возврата dormant
Уточняющие вопросы
- →Почему dormant обычно дешевле вернуть, чем churned?
- →Как бы вы измерили, остаётся ли resurrected возвращённым?
MiddleТеорияЧастоЗдоровая кривая retention должна выходить на плато. О чём говорит кривая, всё ещё падающая на 12-м месяце?
Здоровая кривая retention должна выходить на плато. О чём говорит кривая, всё ещё падающая на 12-м месяце?
Плато означает, что стабильное ядро нашло долгую ценность и держит долгосрочную аудиторию. Кривая, всё ещё падающая на 12-м месяце, не имеет дна: каждая когорта уходит — нет прочного ядра, и бизнес не вырастить одним привлечением.
Типичные ошибки
- ✗Читать выход на плато как остановку роста, а не как здоровое ядро
- ✗Считать, что любая кривая выйдет на плато, если просто ждать дольше
- ✗Верить, что привлечение может поднять кривую, которая не выходит на плато
Уточняющие вопросы
- →Как определить высоту плато по шумной кривой?
- →Почему привлечение может скрыть отсутствие плато в верхнеуровневой метрике?
SeniorДебаггингЧастоRetention подскочил в ту неделю, когда вы переопределили 'активного пользователя' — реальный прирост или артефакт определения?
Retention подскочил в ту неделю, когда вы переопределили 'активного пользователя' — реальный прирост или артефакт определения?
Почти наверняка это артефакт определения: расширение 'активного' с ключевого действия до любого открытия раздувает retention, поэтому он растёт без изменения поведения. Пересчитайте обе недели на одном определении — у артефакта скачок исчезнет, а реальный прирост виден и на старом.
Открыть задачу →Типичные ошибки
- ✗Приписывать заслугу скачку метрики, попавшему ровно на смену определения
- ✗Сравнивать с внешним бенчмарком вместо пересчёта на одном определении
- ✗Считать более широкое определение автоматически более верным
Уточняющие вопросы
- →Как версионирование определений метрик предотвратило бы эту путаницу?
- →Какой бэкфилл позволил бы честно сравнить обе недели?
MiddleДизайнИногдаВаша липкость DAU/MAU два квартала стоит на 0.4. Вы строите power-user curve — гистограмму того, в скольких из последних 28 дней присутствовал каждый активный пользователь — и она в форме улыбки: большой горб на 1–2 днях и ещё один на 25–28 днях, с тонкой серединой. Что эта бимодальная форма раскрывает о базе пользователей, чего единое число 0.4 полностью скрывает, и как это изменит фокус?
Ваша липкость DAU/MAU два квартала стоит на 0.4. Вы строите power-user curve — гистограмму того, в скольких из последних 28 дней присутствовал каждый активный пользователь — и она в форме улыбки: большой горб на 1–2 днях и ещё один на 25–28 днях, с тонкой серединой. Что эта бимодальная форма раскрывает о базе пользователей, чего единое число 0.4 полностью скрывает, и как это изменит фокус?
Среднее 0.4 скрывает две группы — большую случайную, активную 1–2 дня, и ядро, активное почти ежедневно, с малым числом посередине. Одно число липкости подразумевает однородного пользователя, которого нет. Рост должен защищать ядро power-users и конвертировать случайных, а не тянуть среднее.
Типичные ошибки
- ✗Читать плоское среднее как реальный уровень вовлечения типичного пользователя
- ✗Отмахиваться от горба ежедневного ядра как от выбросов
- ✗Путать бимодальную кривую частоты с входящими и выходящими когортами
Уточняющие вопросы
- →Как бы вы задали порог power-user на этой кривой?
- →На какой горб вы бы нацелились первым ради бизнеса и почему?
MiddleКодИногдаПостройте недельную когортную таблицу retention в SQL из таблиц signups и activity
Постройте недельную когортную таблицу retention в SQL из таблиц signups и activity
Соедините activity с signups по user_id, выведите weeks_since_signup = active_week - signup_week, затем GROUP BY signup_week, weeks_since_signup с COUNT(DISTINCT user_id). Счётчик недели 0 каждой когорты это знаменатель для её retention.
Типичные ошибки
- ✗Группировать по календарной неделе вместо недель-с-регистрации
- ✗Брать знаменателем все регистрации вместо недели 0 каждой когорты
- ✗Использовать COUNT(*) вместо COUNT(DISTINCT user_id) и считать дважды
Уточняющие вопросы
- →Как переключить это с недельных когорт на N-day?
- →Как заполнить пропущенные недели, чтобы дыры были 0, а не отсутствующими строками?
SeniorДизайнИногдаАналитик сообщает, что пользователи, вступившие в Group, удерживаются в 3 раза лучше тех, кто никогда не вступал, и VP хочет затолкать всех в Group в следующем квартале. Спроектируйте анализ, который реально обоснует — или похоронит — эту интервенцию. Разберите, почему сырые 3× нельзя брать за чистую монету, какое исследование вы проведёте вместо этого и какой результат заставит вас отсоветовать раскатку, даже если корреляция остаётся сильной.
Аналитик сообщает, что пользователи, вступившие в Group, удерживаются в 3 раза лучше тех, кто никогда не вступал, и VP хочет затолкать всех в Group в следующем квартале. Спроектируйте анализ, который реально обоснует — или похоронит — эту интервенцию. Разберите, почему сырые 3× нельзя брать за чистую монету, какое исследование вы проведёте вместо этого и какой результат заставит вас отсоветовать раскатку, даже если корреляция остаётся сильной.
3× это конфаундинг — вступающие в Group более вовлечены, поэтому разрыв это отбор, а не причина. Проверьте, рандомизировав побуждение вступить и сравнив retention подтолкнутых против неподтолкнутых (intent-to-treat). Отсоветуйте раскатку, если у низкомотивированных нет прироста.
Типичные ошибки
- ✗Читать 3× как причинность, когда вступившие сами отбираются по вовлечённости
- ✗Использовать до/после на вступивших, будто это убрало конфаундинг
- ✗Судить о раскатке по размеру корреляции, а не по рандомизированному приросту
Уточняющие вопросы
- →Почему дизайн с побуждением (intent-to-treat) честнее принудительного вступления?
- →Какой конфаундер, кроме прошлой вовлечённости, мог раздуть 3×?
SeniorТеорияРедкоПочему активные (цензурированные) пользователи ломают наивную среднюю жизнь, и как метод выживаемости Kaplan-Meier их учитывает?
Почему активные (цензурированные) пользователи ломают наивную среднюю жизнь, и как метод выживаемости Kaplan-Meier их учитывает?
Усреднение только завершённых сроков выбрасывает долгоживущих активных, поэтому занижает срок жизни. Они право-цензурированы: известно, что прожили хотя бы столько, но не финал. Kaplan-Meier сохраняет их, строя кривую выживаемости из churn среди тех, кто в риске каждый период.
Типичные ошибки
- ✗Усреднять только ушедших, выбрасывая всё ещё активных
- ✗Считать, что цензурированные оставляют среднее несмещённым
- ✗Думать, что Kaplan-Meier подставляет дату churn, а не использует множества в риске
Уточняющие вопросы
- →О чём говорит плато кривой выживаемости для долгосрочного retention?
- →Как сильное цензурирование расширяет неопределённость оценки?