Зачем нужна
Отвечает, становится ли продукт привычкой. Для LTV и прогнозов окупаемости важны разные горизонты.
Формула
Retention N Days = Вернувшиеся в окно Dn / Размер когорты (пример: D7).Как считать
Берём когорту по дате начала периода, считаем долю активных в окне [D7, D7+1). Для другого N меняем окно.
SQL-запрос
WITH cohort AS (
SELECT
user_id,
created_at AS signup_ts,
created_at::date AS signup_date
FROM users
WHERE created_at >= CURRENT_DATE - INTERVAL '60 day'
),
d7_returns AS (
SELECT DISTINCT c.user_id
FROM cohort c
JOIN events e ON e.user_id = c.user_id
WHERE e.event_name IN ('app_open','session_start','feature_use') -- same activity definition!
AND e.event_timestamp >= c.signup_ts + INTERVAL '7 day'
AND e.event_timestamp < c.signup_ts + INTERVAL '8 day'
)
SELECT
c.signup_date,
COUNT(DISTINCT c.user_id) AS cohort_size,
COUNT(DISTINCT r.user_id) AS returned,
ROUND(COUNT(DISTINCT r.user_id)::decimal / NULLIF(COUNT(DISTINCT c.user_id), 0), 3) AS retention_d7
FROM cohort c
LEFT JOIN d7_returns r ON r.user_id = c.user_id
GROUP BY 1
ORDER BY 1 DESC;