Когортный анализ простыми словами
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Короткое объяснение
Cohort analysis — разделение пользователей на группы по дате первого контакта с продуктом и отслеживание их поведения во времени.
Помогает отличить «проблемы старых» от «проблем новых» и видеть, становится ли продукт лучше с каждой новой когортой.
Пример
Допустим, общий DAU стабилен. Но:
Когорта | D0 | D1 | D7 | D30
-----------|-----|-----|-----|-----
Jan 2026 |100% | 40% | 20% | 10%
Feb 2026 |100% | 45% | 25% | 15%
Mar 2026 |100% | 35% | 15% | 5% ← проблема!Общий DAU стабилен, но когорта Mar retention-ится хуже. Проблема видна ТОЛЬКО через cohort analysis.
Зачем
1. Отделить новые от старых
Общий retention может быть стабилен, потому что старые держат метрику. Cohort покажет реальное состояние product-market fit для новых.
2. Отслеживать улучшения продукта
«Мы улучшили onboarding» → retention новых когорт должен расти.
3. Валидировать A/B
После релиза новой фичи — сравнить cohort до и после.
4. Прогноз LTV
Retention curve → LTV через площадь под кривой.
Формат: heatmap
Строки — когорта (дата регистрации). Столбцы — период с момента регистрации (D1, D7, D30, M1, M2, M3...). Ячейка — retention / метрика.
В SQL
WITH cohorts AS (
SELECT
user_id,
DATE_TRUNC('month', MIN(event_at)) AS cohort_month
FROM events
GROUP BY user_id
),
activity AS (
SELECT DISTINCT
user_id,
DATE_TRUNC('month', event_at) AS active_month
FROM events
)
SELECT
c.cohort_month,
a.active_month,
EXTRACT(MONTH FROM AGE(a.active_month, c.cohort_month)) AS months_since_signup,
COUNT(DISTINCT a.user_id) AS active_users
FROM cohorts c
JOIN activity a ON a.user_id = c.user_id
GROUP BY 1, 2, 3
ORDER BY 1, 3;Подробнее: когортный анализ SQL.
В Python
import pandas as pd
df['cohort'] = df.groupby('user_id')['event_at'].transform('min').dt.to_period('M')
df['period'] = (df['event_at'].dt.to_period('M') - df['cohort']).apply(lambda x: x.n)
cohort_table = df.groupby(['cohort', 'period'])['user_id'].nunique().unstack('period')
cohort_size = cohort_table[0]
retention = cohort_table.divide(cohort_size, axis=0)Как интерпретировать
По строке
Retention падает во времени для данной когорты. Нормально.
По столбцу
Сравнение когорт. Если Mar D7 хуже, чем Jan D7 — продукт стал хуже для новых.
Диагональ
«Тренд» одного периода: D7 retention всех когорт. Идеально — растёт.
Smiley curve — идеальная retention
___.___.___ <- плато > 0
/
/
/
100% (D0)Если кривая падает до нуля → churn 100%. Продукт не приживается.
Cohort по разным метрикам
Retention (классика)
Сколько вернулись в период N.
Revenue
Средний revenue per cohort за период. Должен расти с «возрастом» (loyal customers spend more).
Activation
Сколько дошли до aha moment за период. Тест onboarding.
Feature adoption
Когда когорта начинает использовать определённую фичу.
Quasi-cohorts (нестандартные когорты)
Можно когортировать не только по дате регистрации, а по:
- Дате первого платежа
- Каналу привлечения (paid vs organic cohort)
- Типу устройства (iOS vs Android cohort)
- Сегменту тарифа
Полезно для сравнения характеристик, не только времени.
Когда применять
- Продуктовая аналитика: retention, LTV, engagement
- Маркетинг: эффективность каналов по cohort
- A/B-тесты: long-term эффект
- Финансы: MRR / net retention по cohort
На собесе
Типичные вопросы:
«Что такое cohort analysis?» Разделение на группы по дате регистрации, отслеживание метрики во времени.
«Зачем нужен?» Отделить новых от старых, видеть тренды улучшения продукта.
«Как построить в SQL?» CTE с cohort date, JOIN с activity, pivot по period.
«Разница cohort и просто group by?» Cohort — время с момента первого контакта (dynamic). Group by — по статической характеристике.
Частые ошибки
1. Cohort без time dimension
«Когорта Москва» — это сегмент, не cohort. Cohort = time-based.
2. Общий retention вместо cohort
Общий retention маскирует проблемы.
3. Слишком широкая cohort
Quarter cohort может скрыть weekly изменения. Month обычно ok.
4. Маленькая cohort — шум
Cohort < 100 users → статистика нестабильная.
Связанные темы
- Что такое когорта простыми словами
- Retention простыми словами
- Задачи на когортный анализ
- SQL для cohort retention
FAQ
Cohort или funnel?
Cohort — через время. Funnel — через шаги. Разные инструменты.
Какой период cohort?
Обычно месяц. Для быстрых продуктов — неделя.
Сколько когорт нужно?
6-12 для тренда. Больше — шум и ретроспектива.
Как визуализировать?
Heatmap с retention %. Или retention curve (line chart по время).
Тренируйте продуктовую аналитику — откройте тренажёр с 1500+ вопросами для собесов.