Зачем
Любая бизнес-метрика — это произведение шагов воронки. Если падает GMV, проблема может быть в:
- Visits
- Sessions
- ATC (Add to Cart)
- Checkout started
- Payment success
- Order placed
SQL для воронки
SELECT
count(DISTINCT CASE WHEN step = 'visit' THEN user_id END) AS visits,
count(DISTINCT CASE WHEN step = 'view_product' THEN user_id END) AS product_views,
count(DISTINCT CASE WHEN step = 'add_to_cart' THEN user_id END) AS atc,
count(DISTINCT CASE WHEN step = 'checkout' THEN user_id END) AS checkout,
count(DISTINCT CASE WHEN step = 'purchase' THEN user_id END) AS purchases
FROM events
WHERE created_at >= now() - interval '7 days';
Подвохи
Юзер видит много продуктов
Используй DISTINCT user_id, не COUNT(*).
Шаги могут быть параллельными
Юзер может добавить в корзину БЕЗ просмотра карточки.
Время между шагами
Используй cohort-аналитику.
Cohort funnel
WITH cohort AS (
SELECT user_id, date_trunc('day', created_at) AS signup_day
FROM users
)
SELECT
cohort.signup_day,
count(DISTINCT cohort.user_id) AS signups,
count(DISTINCT CASE WHEN o.id IS NOT NULL THEN cohort.user_id END) AS purchased
FROM cohort
LEFT JOIN orders o ON o.user_id = cohort.user_id
AND o.created_at <= cohort.signup_day + interval '7 days'
GROUP BY 1;
Anomaly detection
Смотри изменения CR между шагами по времени.
Кейс из маркетплейса
GMV упал на 15% за неделю. Декомпозировали:
- Visits — норма
- ATC — норма
- Checkout — норма
- Payment success — упал с 92% до 75%
Проверка платёжного провайдера → новый антифрод выкатили слишком жёстко, отклонял 17% валидных карт. Откатили — GMV вернулся за день.