Почему усреднённые метрики годами скрывают правду
Отчёт говорит «Retention 20%», и это почти бесполезная цифра, потому что внутри неё смешаны люди с разным стажем в продукте: новичок первого дня, тот, кто с вами два месяца, и старожил, который остаётся три года. Когортный анализ разбирает эту усреднённую массу и смотрит, что происходит с людьми после того, как они впервые пришли, — по неделям и месяцам их собственной жизни в продукте, а не по календарю.
Разница видна сразу. Там, где обычный отчёт показывает одно среднее число, когортный разрез покажет, что одни пользователи удерживаются на 35%, а другие — на 12%; что после переделки онбординга удержание выросло на 6 п.п.; что канал A приводит дешёвых, но плохо окупаемых людей, а канал B — дорогих, но окупаемых; и что провал случается не на привлечении, а на второй неделе использования. Ниже: механика, типы когорт, метрики, порядок построения и ошибки, из-за которых всё это ломается.
Срез или жизненный цикл: две разные оптики
Обычная срезовая аналитика (snapshot) — это показатели за период: MAU за ноябрь, выручка за декабрь, конверсия в оплату за неделю, churn за месяц. Беда в том, что в каждой такой цифре перемешаны пользователи разного «возраста», и вы не понимаете главного: продукт действительно стал лучше или вы просто подлили трафика.
Когортная логика работает иначе. Вы группируете людей по общему признаку — чаще всего по времени первого события — и следите, как ведёт себя каждая группа с течением времени. В фокусе жизненный цикл, а сам анализ почти всегда отвечает на один вопрос: как меняется поведение, ценность и деньги у людей, которые начали с вами в один момент или при одном условии.
Что такое когорта
Когорта — это группа пользователей (или аккаунтов, компаний), объединённых общим событием либо условием. Чаще всего когорту формируют по времени первого касания (все, кто зарегистрировался в первую неделю января или установил приложение в марте. Реже, но не менее полезно), по источнику (пришедшие из TikTok Ads или по реферальной ссылке), по раннему поведению (создавшие три проекта за первую неделю или прошедшие онбординг до конца) и по версии продукта или эксперименту (те, кто видел новый онбординг, или попал в A/B-тест цен). Выбор признака и определяет, на какой вопрос когорта ответит.
Как читать когортную таблицу
Формат почти всегда один. По строкам идут когорты, например, недели регистрации. По столбцам — «возраст» когорты: неделя 0, 1, 2, 3 или день 0, 1, 7, 14. В ячейках стоит метрика: retention, выручка, конверсия, активность.
Смысл ячейки проще всего понять на числах. Если в когорте «2025-W01» было 1000 пользователей, а на второй неделе активными остались 180, то retention этой недели равен 180 / 1000 = 18%. Ценность таблицы именно в том, что она показывает динамику по времени жизни, а не по календарю, поэтому когорты можно сравнивать честно.
Девять задач, ради которых это делают
Первое, что даёт когортный разрез, — ответ на вопрос, растёт ли качество продукта или вы просто наращиваете вход. Рост MAU может означать и больше регистраций при том же слабом удержании, и реальное улучшение удержания у новых когорт; на усреднённой цифре эти два случая неразличимы, на когортной таблице — очевидны.
Отсюда вытекает вторая задача — измерять эффект изменений. Выкатили новый онбординг — сравниваете когорты «до» и «после» по D1/D7/D30 retention, по скорости достижения ценностного события и по конверсии в оплату на первой-второй неделе. Похожим образом когорты сравнивают качество маркетинговых каналов, но не по CPL или CPA, а по окупаемости: дешёвый лид не равен хорошему, и retention, LTV и payback period по каналам расставляют всё по местам.
Дальше идут более тонкие вещи. Сезонность и «пакетные» эффекты: декабрьские когорты нередко удерживаются хуже из-за праздников, а январские лучше, потому что люди «начинают новую жизнь». Дыра в жизненном цикле: типичная картина, когда D1 отличный, D7 средний, а на D14 всё резко проседает, — сигнал, что ценность одноразовая или привычка не закрепляется. Разделение проблемы продукта и проблемы привлечения: если новые когорты держатся хорошо, но роста нет — дело в acquisition; если привлечения много, а свежие когорты хуже старых — дело в продукте, аудитории или обещании в рекламе.
Монетизацию когорты тоже разбирают по времени жизни: когда пользователь впервые платит, сколько платит к 30, 60 и 90 дню, как меняется ARPU и ARPPU от когорты к когорте. Тот же приём доказывает ценность фичи, которая всем нравится, но денег будто не приносит: разрез по признаку «сделал фичу X в первую неделю» часто показывает, что такие люди удерживаются лучше, платят чаще и дают более высокий LTV. И, наконец, устойчивые кривые удержания и выручки по когортам позволяют прогнозировать: будущую выручку, эффект от роста retention на пару пунктов, окупаемость каналов.
Метрики, которые считают в ячейках
Самая популярная — retention. Классическая формула для периода t: Retention(t) = ActiveUsers(t) / CohortSize, где ActiveUsers(t) — пользователи когорты, совершившие целевое действие в период t. Считают её как D1/D7/D30, как weekly или monthly. Рядом стоит rolling retention (скользящее удержание): пользователь считается удержанным, если был активен в этот день или позже. Оно полезно, когда ценность не обязана проявляться строго по расписанию и вам важна «выживаемость» когорты в целом.
Churn — обратная сторона: Churn(t) = 1 − Retention(t). Важно, чтобы churn и retention опирались на одно и то же определение активности, иначе получится аналитическая каша.
Когорты выручки показывают в ячейке либо ARPU, либо накопленную выручку, либо долю сделавших покупку. LTV по когортам чаще считают как накопленную выручку на пользователя к определённому возрасту: LTV_30 = cumulative revenue до 30 дня / cohort size; в подписке к этому добавляют удержание платящих, средний чек и апгрейды с даунгрейдами. Отдельно стоит смотреть активацию, не только «остался ли», но и «дошёл ли до ценности»: долю пользователей, достигших aha-момента за первые 24–72 часа, медианное время до первого ценностного события, конверсию в завершение онбординга. А когортный разрез воронки показывает конверсию по шагам (регистрация → первое действие → повторное действие → оплата) в зависимости от возраста пользователя.
Какие когорты под какой вопрос
Временные когорты — базовый «пульс» продукта: просты и понятны, но саму причину различий не объясняют. Канальные нужны для оптимизации маркетинга и качества трафика: они не дают переплачивать за плохие каналы, но требуют приличной атрибуции. Поведенческие («в первую неделю сделал ≥ 3 ключевых действия») ищут драйверы удержания и монетизации и отвечают на вопрос, что делает пользователя успешным, с одной оговоркой: здесь легче всего перепутать корреляцию с причинностью. Когорты по эксперименту или версии («новый онбординг против старого») ближе всего к причинности, но требуют аккуратного сбора данных и неизменных определений событий.
В B2B единицей анализа часто должен быть не пользователь, а аккаунт: «аккаунты, созданные в январе», «аккаунты, где активировано три места», «аккаунты, где подключён интеграционный коннектор». Спутаете user и account — исказите и retention, и LTV.
Порядок построения
Всё начинается с бизнес-вопроса в измеримом виде. «Как у нас retention?» — плохой вопрос. «Выросло ли удержание новых пользователей после обновления онбординга?», «какой канал даёт лучший D30 retention?», «какое раннее поведение предсказывает оплату?» — рабочие.
Дальше выбирают единицу анализа: user_id, device_id (осторожно, если нет логина), account_id для B2B, subscription_id для подписок — ошибка здесь ломает всё остальное. Затем определяют событие, формирующее когорту: обычно signup, install или first_open, иногда first_purchase или первое событие активации; «первая дата» должна быть однозначной. Параллельно задают целевое событие активности, и это не «заходил», если ценность продукта не в заходе. Лучше брать событие, близкое к ценности: создал проект, отправил сообщение, сделал оплату, сгенерировал отчёт, загрузил файл.
Остаётся выбрать гранулярность времени: для B2C это дни и недели, для B2B недели и месяцы; слишком мелко даёт шум, слишком крупно съедает сигнал. После этого считается сама таблица: метрика по каждой когорте в разрезе возраста. И последний шаг, который чаще всего пропускают, — интерпретация. Таблица показывает, где отличается, но не почему; причину вытаскивают сегментацией (канал, гео, устройство, план), качественными исследованиями, разбором изменений в продукте и экспериментами.
Мини-пример расчёта
Пусть когорты нарезаны по неделе регистрации. В первой когорте 1000 регистраций; на второй неделе активны 250, на третьей — 180, на четвёртой — 150. Тогда W1 retention (неделя 2) = 250/1000 = 25%, W2 retention (неделя 3) = 180/1000 = 18%, W3 retention (неделя 4) = 150/1000 = 15%. Если следующая когорта (Неделя 2) даёт W1 = 30%, W2 = 22%, W3 = 20% — качество новой когорты явно выросло, и это видно без всякой статистики.
Где искать рычаги роста
Когорта — не отчёт ради отчёта, а способ нащупать рычаг. Где именно проседает кривая, туда и указывает, что чинить:
- Провал между week0 и week1 почти всегда означает, что люди не доходят до первого результата: рычаг здесь во времени до ценностного события, доле дошедших до aha и шагах онбординга с самым большим отвалом.
- Провал на второй-третьей неделе — это про привычку: нет повода вернуться, продукт не встроен в рутину, ценность одноразовая; работают частота ключевого действия, повторяемость сценария и триггеры возврата: уведомления, задачи, контент.
- Удержание в порядке, а денег мало — тогда дело в монетизации: слабый paywall, неверная цена, непоказанная ценность платных функций, кривая упаковка, и разбирают это через конверсию в оплату по возрасту, накопительные когорты выручки и апгрейды с даунгрейдами.
Из-за чего когорты начинают врать
Первая ловушка — определить активность как любой визит. В части продуктов «зашёл» не равно «получил ценность», и тогда retention выглядит нормально, а продукт не растёт. Вторая — смешать единицы анализа: если один человек ходит с двух устройств, а вы считаете device_id за пользователей, retention и LTV поедут. Третья — забыть про правую цензуру: свежая когорта физически не может иметь D30, ей ещё нет тридцати дней, и сравнивать полные данные с неполными без пометок нельзя.
Дальше идёт размер. В когорте на 50 человек один случайный крупный клиент искажает выручку; лечится минимальным размером когорты, укрупнением дней до недель и доверительными интервалами, если умеете их строить. Отдельная беда — молча поменять определение события «active user» и «улучшить retention на бумаге»: определения нужно фиксировать как договорённости и версионировать трекинг, иначе вы сравниваете разные вещи. Не забывайте и про внешние факторы: сезонность, промо, сбои, изменения в каналах порой двигают когорты сильнее любой фичи. И самое коварное — путаница корреляции и причинности в поведенческих когортах: «те, кто сделал три действия, держатся лучше» может значить, что действие полезно, а может — что это и так были сильные пользователи. Развести одно от другого помогает только эксперимент (подтолкнуть часть людей к действию) или контролируемая сегментация.
Как это выглядит в SQL
Упрощённая схема weekly retention по дате регистрации и событию активности:
-- Пример: weekly retention по когорте регистрации
WITH cohort AS (
SELECT
user_id,
DATE_TRUNC(MIN(event_time), WEEK) AS cohort_week
FROM events
WHERE event_name = 'signup'
GROUP BY user_id
),
activity AS (
SELECT
e.user_id,
DATE_TRUNC(e.event_time, WEEK) AS activity_week
FROM events e
WHERE e.event_name = 'key_action' -- событие ценности
),
joined AS (
SELECT
c.cohort_week,
a.activity_week,
DATE_DIFF(a.activity_week, c.cohort_week, WEEK) AS age_week,
c.user_id
FROM cohort c
JOIN activity a
ON a.user_id = c.user_id
WHERE DATE_DIFF(a.activity_week, c.cohort_week, WEEK) >= 0
),
cohort_size AS (
SELECT cohort_week, COUNT(DISTINCT user_id) AS users
FROM cohort
GROUP BY cohort_week
),
retention AS (
SELECT
cohort_week,
age_week,
COUNT(DISTINCT user_id) AS active_users
FROM joined
GROUP BY cohort_week, age_week
)
SELECT
r.cohort_week,
r.age_week,
r.active_users,
cs.users AS cohort_users,
SAFE_DIVIDE(r.active_users, cs.users) AS retention_rate
FROM retention r
JOIN cohort_size cs USING (cohort_week)
ORDER BY r.cohort_week, r.age_week;
Под конкретный продукт подстраивают четыре вещи: событие формирования когорты (signup/install/first_purchase), событие ценности (key_action), единицу анализа (user_id/account_id) и гранулярность (DAY/WEEK/MONTH).
Проверка готовности и здравого смысла
Прежде чем строить, честно ответьте, получится ли у вас вообще честный анализ: есть ли стабильный user_id или account_id, дата первого события, чёткое событие ценности, пишутся ли события без дыр и дублей, понятна ли временная зона и хватает ли размера когорт. Если хотя бы одного из этих условий нет, сначала чините данные.
Читая готовую таблицу, держите в голове несколько простых правил. Сравнивайте только когорты одного типа с одинаковыми определениями. Помните о неполных периодах у свежих когорт и о шуме на маленьких размерах. Не делайте причинных выводов без проверки и всегда смотрите разрезы — канал, гео, устройство, план. А если retention падает именно у новых когорт, проверяйте в таком порядке: изменения в привлечении (новые каналы, аудитории, обещания), качество онбординга и time-to-value, баги, перформанс и краши, не сломалось ли само событие активности, и обязательно сегментируйте, чтобы увидеть, где просадка сильнее.
Три сценария, где эффект приходит быстро
Много регистраций, а продукт не растёт: когортная таблица обычно показывает либо нормальный D1 при низком D7 (не закрепили привычку), либо низкий D1 (люди не доходят до ценности), и вы сразу знаете, копать ли в онбординг или в engagement. «Все говорят, что новый онбординг классный» — сравниваете когорты до и после по доле дошедших до ключевого действия, по времени до него и по D7/D30, и очень часто «нравится» оказывается не равно «работает». Спор маркетинга и продукта о том, кто виноват в падении выручки, когортный разрез по каналам и возрасту превращает в диагностику: либо просел вход (качество когорт), либо продукт стал хуже удерживать новых везде.
Не отчёт, а привычка
Сильнее всего когортный анализ работает не как разовая выгрузка, а как постоянный монитор: раз в неделю смотреть свежие когорты по ранним метрикам, раз в месяц — зрелые по D30/D60/D90, и каждый раз связывать изменения продукта и маркетинга с формой кривых. Заведите этот ритм, и команда перестанет жить средними цифрами и начнёт видеть, какие именно решения меняют траекторию пользователей. С этого стоит начать уже на ближайшей неделе: выбрать одно ценностное событие и построить первую таблицу удержания на нём.