☕️ Этот подход важен, когда нужно понять, что происходит с пользователями спустя какое-то время после их взаимодействия с продуктом. Например, они пользуются новой фичей или заходят в продукт через 1, 7, 14, 30 дней после регистрации? Когортный анализ помогает ответить на такие вопросы.
🍪🍪 Пример задачи
Допустим, у вас есть продукт, где пользователи регистрируются и совершают действия. Нужно определить, сколько пользователей из каждой когорты (группы, зарегистрированной в один день) возвращаются через разные промежутки времени.
🤔 Что сделаем?
1. Разделим пользователей на когорты по дате регистрации.
2. Посчитаем, сколько пользователей из каждой когорты совершили хотя бы одно действие через 0, 1, 7, 14 и 30 дней.
3. Рассчитаем удержание в процентах относительно размера когорты.
with cohort_base as (
select
u.user_id,
date(u.registration_date) as cohort_date,
datediff(e.event_date, u.registration_date) as days_since_registration
from users u
left join events e
on u.user_id = e.user_id
where e.event_date is not null
),
cohort_activity as (
select
cohort_date,
days_since_registration,
count(distinct user_id) as active_users
from cohort_base
where days_since_registration between 0 and 30
group by cohort_date, days_since_registration
),
cohort_size as (
select
date(registration_date) as cohort_date,
count(distinct user_id) as cohort_size
from users
group by cohort_date
)
select
ca.cohort_date,
ca.days_since_registration,
round(ca.active_users * 100.0 / cs.cohort_size, 2) as retention_rate
from cohort_activity ca
join cohort_size cs
on ca.cohort_date = cs.cohort_date
order by ca.cohort_date, ca.days_since_registration;
😱 Что делает этот запрос?
cohort_base - объединяем таблицу пользователей и таблицу событий, чтобы определить, на какой день с момента регистрации пользователь совершил событие.cohort_activity - считаем количество уникальных пользователей, которые были активны через 0, 1, 7, 14 и 30 дней после регистрации, для каждой когорты.cohort_size - определяем размер каждой когорты — количество пользователей, зарегистрировавшихся в конкретный день.🐸 Рассчитываем удержание (retention_rate) как процент активных пользователей от общего числа зарегистрированных в когорте.
Можно выявить, как изменения в продукте (новая фича, интерфейс) влияют на удержание пользователей. Если retention сильно падает после первых дней, это сигнал, что пользователи теряют интерес или сталкиваются с трудностями.
Обратная задача рассчитать Churn Rate, нужно просто сделать 1 - Retention Rate
Если наберется 100 🐳, выложу еще пост с практическим применением SQL, есть еще что рассказать 🔥