Как посчитать Cart Abandonment в SQL
price_text хранит цены как текст: 2, 10, 100. Аналитик написал WHERE price_text > '10' и получил неожиданный набор строк. Как сделать сравнение числовым?Содержание:
Зачем Cart Abandonment
В e-com 70% корзин не доходят до оплаты — это норма по индустрии. Аналитик показывает: у вашего магазина 85%. Минус 15 п.п. от среднего = миллионы потерянной выручки. Cart abandonment отвечает: где именно теряется конверсия.
Формула
Cart Abandonment Rate = (Carts Started - Carts Completed) / Carts Started × 100%Базовый расчёт
Данные: events(user_id, event_type, event_date).
SELECT
COUNT(DISTINCT CASE WHEN event_type = 'add_to_cart' THEN user_id END) AS carts_started,
COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END) AS completed,
(COUNT(DISTINCT CASE WHEN event_type = 'add_to_cart' THEN user_id END)
- COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END))::NUMERIC * 100
/ NULLIF(COUNT(DISTINCT CASE WHEN event_type = 'add_to_cart' THEN user_id END), 0)
AS abandonment_rate_pct
FROM events
WHERE event_date >= CURRENT_DATE - INTERVAL '30 days';По этапам оформления
SELECT
event_type AS stage,
COUNT(DISTINCT user_id) AS users
FROM events
WHERE event_type IN ('add_to_cart', 'checkout_start', 'shipping_info', 'payment_info', 'purchase')
AND event_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY event_type
ORDER BY CASE event_type
WHEN 'add_to_cart' THEN 1
WHEN 'checkout_start' THEN 2
WHEN 'shipping_info' THEN 3
WHEN 'payment_info' THEN 4
WHEN 'purchase' THEN 5
END;Покажет, где именно происходит утечка.
По устройству и каналу
WITH cart_users AS (
SELECT DISTINCT user_id, 'add_to_cart' AS stage
FROM events
WHERE event_type = 'add_to_cart'
AND event_date >= CURRENT_DATE - INTERVAL '30 days'
),
purchase_users AS (
SELECT DISTINCT user_id, 'purchase' AS stage
FROM events
WHERE event_type = 'purchase'
AND event_date >= CURRENT_DATE - INTERVAL '30 days'
)
SELECT
u.device_type,
COUNT(DISTINCT c.user_id) AS carts,
COUNT(DISTINCT p.user_id) AS purchases,
(COUNT(DISTINCT c.user_id) - COUNT(DISTINCT p.user_id))::NUMERIC * 100
/ NULLIF(COUNT(DISTINCT c.user_id), 0) AS abandonment_pct
FROM cart_users c
JOIN users u ON u.user_id = c.user_id
LEFT JOIN purchase_users p ON p.user_id = c.user_id
GROUP BY u.device_type
ORDER BY abandonment_pct DESC;На мобильных abandonment обычно на 10-15 п.п. выше, чем на десктопе.
Частые ошибки
Ошибка 1. Не учитывать время до покупки. Пользователь положил в корзину, а купил через неделю — это abandonment или нет? Зафиксируйте окно (24 часа, 7 дней).
Ошибка 2. Переходы между устройствами. Пользователь положил товар с телефона, а купил с ПК. Без объединения профилей это засчитается как abandonment.
Ошибка 3. Сравнивать метрики с разными определениями этапа. «Начатую корзину» в разных продуктах считают по-разному: добавили один товар / открыли оформление / ввели email.
Ошибка 4. Сессии или пользователи. Считаете уникальных пользователей или сессии? Числа получатся разными.
Ошибка 5. Не учитывать оформление без регистрации. Гости без входа в аккаунт не имеют user_id — отслеживайте их по session_id или device_id.
Связанные темы
- Как посчитать funnel в SQL
- Как посчитать bounce rate в SQL
- Как посчитать конверсию в SQL
- Как посчитать AOV в SQL
FAQ
Какой Cart Abandonment считается нормой?
В среднем по e-com — 65-75%, на мобильных — 75-85%, в тревеле — 80-90%. Всё, что ниже 60%, — отличный результат.
Cart Abandonment упал на 5 п.п.
Это заметный прирост выручки. Но сначала проверьте, не изменилось ли само определение воронки, и убедитесь, что сработало именно снижение трения в оформлении, а не смена методики подсчёта.
Какое окно брать?
В стандартном GA окно от 24 до 72 часов, в Mixpanel оно привязано к сессии. Главное — заранее договориться о единой методике с командой.
Как уменьшить Cart Abandonment?
Сократите число шагов в оформлении, дайте возможность купить без регистрации, сохраняйте корзину между сессиями, шлите email-напоминания («вы забыли товар в корзине…») и добавьте сигналы доверия — значки безопасной оплаты.
Мобильные и десктоп — почему разница?
На мобильных мешают маленький экран, промахи по кнопкам, плохое автозаполнение форм и постоянные отвлечения. Лечится это оформлением, спроектированным в первую очередь под мобильные устройства.