Привет! На связи Илья Ковалев, ментор курса «Аналитик данных» 👋🏻
Retention или возвращаемость — одна из ключевых метрик в аналитике продукта. Она позволяет ответить на вопрос: сколько пользователей, зарегистрировавшихся в определенный день, вернулись на N-й день?
Привлечь нового пользователя гораздо дороже, чем удержать существующего, поэтому важно следить за этой метрикой. Если retention низкий — пользователи оттекают быстрее, чем успевают принести прибыль компании, и вы просто сжигаете бюджет на привлечение.
Формула простая:
Retention Day N = (Количество пользователей вернувшихся на N-й день / Общее количество пользователей в когорте) x 100%
Например, 1000 пользователей зарегистрировались 1 января. 300 из них вернулись 8 января (Day 7). Retention Day 7 = 300/1000 = 30%.
Очевидно, что каждый раз считать возвращаемость вручную — задача не для дата-аналитика, поэтому смоделируем запрос в SQL.
Допустим, у нас есть таблица events с событиями пользователей формата
user_id | event_timestamp | event_name и мы хотим посчитать retention в окнах 1/7/14/30 дней. Тогда, чтобы посчитать retention, нам необходимо:
1. Найти дату первой активности каждого пользователя (
cohort_date);2. Для каждой активности пользователя посчитать, на какой день после регистрации она произошла;
3. Посчитать, сколько уникальных пользователей было активно на каждый
day_number;4. Поделить на размер когорты.
SQL-запрос будет выглядеть так:
WITH first_activity AS (
SELECT
user_id,
MIN(DATE(event_timestamp)) AS cohort_date
FROM events
GROUP BY user_id
),
user_activity AS (
SELECT
e.user_id,
fa.cohort_date,
DATE(e.event_timestamp) AS activity_date,
DATE_DIFF(DATE(e.event_timestamp), fa.cohort_date, DAY) AS day_number
FROM events e
JOIN first_activity fa USING (user_id)
),
cohort_sizes AS (
SELECT
cohort_date,
COUNT(DISTINCT user_id) AS cohort_size
FROM first_activity
GROUP BY cohort_date
)
SELECT
ua.cohort_date,
ua.day_number,
COUNT(DISTINCT ua.user_id) AS returned_users,
COUNT(DISTINCT ua.user_id) * 100.0 / cs.cohort_size AS retention_rate
FROM user_activity ua
JOIN cohort_sizes cs USING (cohort_date)
WHERE ua.day_number IN (1, 7, 14, 30)
GROUP BY ua.cohort_date, ua.day_number, cs.cohort_size
ORDER BY ua.cohort_date, ua.day_number;
Какие окна retention смотреть, зависит от типа продукта и от частотности сервиса. Для частотных сервисов обычно смотрят на:
🟠 Retention Day 1 — критичный показатель для всех продуктов. Показывает качество онбординга. Если пользователь не вернулся на следующий день, он скорее всего не вернётся вообще.
🟠 Retention Day 7. Показывает, прошёл ли пользователь период «знакомства» с продуктом.
🟠 Retention Day 30 — долгосрочное удержание. Если пользователь активен через месяц, он с большой вероятностью останется надолго.
Для низкочастотных (B2B-сервисов, фудтеха) окно возвращаемости может быть выше.
Практические советы:
1️⃣ Всегда смотрите retention в разрезе когорт, а не общий по всей базе. Когорты могут сильно различаться.
2️⃣ Сегментируйте retention по источникам трафика. Часто оказывается, что дорогой канал приводит пользователей с низким retention.
3️⃣ Retention — это про продукт, а не про маркетинг. Если Retention Day 1 низкий — проблема в онбординге или в product-market fit.
4️⃣ Не путайте retention и churn. Churn = 1 - Retention. Если retention 30%, то churn 70%.
5️⃣ Сравнивайте retention до и после запуска фичей. Это один из лучших способов оценить их влияние на продукт.
Retention — базовая метрика для любого продукта. Научитесь считать её правильно, и вы сможете отвечать на главный вопрос: возвращаются ли пользователи в ваш продукт?
📊 Simulative