Зачем нужна
Ключевой драйвер роста и LTV. Высокий Churn съедает весь приток.
Формула
Churn = 1 - Retention = Ушедшие / Активные в прошлом периодеКак считать
Берём активных в прошлом периоде, смотрим, кто не активен в текущем, делим на прошлую базу.
SQL-запрос
WITH prev_period AS (
SELECT DISTINCT user_id
FROM events
WHERE event_timestamp >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND event_timestamp < DATE_TRUNC('month', CURRENT_DATE)
),
curr_period AS (
SELECT DISTINCT user_id
FROM events
WHERE event_timestamp >= DATE_TRUNC('month', CURRENT_DATE)
AND event_timestamp < DATE_TRUNC('month', CURRENT_DATE + INTERVAL '1 month')
)
SELECT
COUNT(DISTINCT prev.user_id) AS active_prev,
COUNT(DISTINCT curr.user_id) AS active_curr,
COUNT(DISTINCT prev.user_id) FILTER (WHERE curr.user_id IS NOT NULL) AS retained,
COUNT(DISTINCT prev.user_id) - COUNT(DISTINCT prev.user_id) FILTER (WHERE curr.user_id IS NOT NULL) AS churned,
ROUND(
(COUNT(DISTINCT prev.user_id) - COUNT(DISTINCT prev.user_id) FILTER (WHERE curr.user_id IS NOT NULL))::decimal
/ NULLIF(COUNT(DISTINCT prev.user_id), 0),
3
) AS churn_rate
FROM prev_period prev
LEFT JOIN curr_period curr ON curr.user_id = prev.user_id;