Как вы анализируете поведение пользователей с брошенными корзинами?

«Как вы анализируете поведение пользователей с брошенными корзинами?» — вопрос из категории Аналитика и метрики, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Анализ брошенных корзин (cart abandonment) — это поиск узких мест в воронке. Я подхожу к этому комплексно, используя данные о событиях и сессиях.

1. Инструментарий и сбор данных: Я настраиваю сквозную аналитику (например, с помощью Snowplow или Amplitude), чтобы отслеживать ключевые события: Product Viewed, Add to Cart, Initiate Checkout, Enter Payment Info, Purchase. Для каждого события записываю таймстамп, ID пользователя, ID сессии и релевантные атрибуты (сумма корзины, список товаров, примененный промокод).

2. Расчет ключевых метрик:

  • Cart Abandonment Rate: (Количество сессий с началом оформления - Количество покупок) / Количество сессий с началом оформления * 100%.
  • Анализ по шагам воронки: Где именно происходит основной отток.

3. Глубокий анализ с помощью SQL: Я строю запросы, чтобы сегментировать пользователей и найти причины.

-- Анализ оттока по шагам воронки за последнюю неделю
WITH funnel AS (
    SELECT 
        session_id,
        MAX(CASE WHEN event_name = 'Add to Cart' THEN 1 ELSE 0 END) as reached_cart,
        MAX(CASE WHEN event_name = 'Initiate Checkout' THEN 1 ELSE 0 END) as reached_checkout,
        MAX(CASE WHEN event_name = 'Purchase' THEN 1 ELSE 0 END) as reached_purchase
    FROM product_events 
    WHERE event_timestamp >= CURRENT_DATE - 7
    GROUP BY session_id
)
SELECT 
    COUNT(*) as total_sessions,
    SUM(reached_cart) as sessions_with_cart,
    SUM(reached_checkout) as sessions_with_checkout,
    SUM(reached_purchase) as sessions_with_purchase,
    -- Конверсия между шагами
    ROUND(SUM(reached_checkout) * 100.0 / NULLIF(SUM(reached_cart), 0), 2) as cart_to_checkout_rate,
    ROUND(SUM(reached_purchase) * 100.0 / NULLIF(SUM(reached_checkout), 0), 2) as checkout_to_purchase_rate
FROM funnel
WHERE reached_cart = 1; -- Смотрим только на тех, кто дошел до корзины

4. Поиск причин и гипотез:

  • Технические проблемы: Анализирую сессии, в которых после Initiate Checkout нет следующих событий. Проверяю логи ошибок фронтенда/бэкенда за соответствующий период.
  • Ценовой барьер: Сравниваю среднюю сумму корзины у бросивших и совершивших покупку. Если у бросивших она значительно выше, причина может быть в стоимости доставки или отсутствии ожидаемых скидок.
  • Сложность оформления: Смотрю на время, проведенное на шаге ввода данных. Долгое время может указывать на UX-проблемы.

5. Действия: На основе анализа я предлагаю решения: A/B-тест упрощенной формы заказа, триггерное email- или push-напоминание о корзине через 1 час, отображение прогресс-бара в checkout.