Зачем

Любая бизнес-метрика — это произведение шагов воронки. Если падает 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 вернулся за день.