Воронка конверсии: как строить и анализировать

Проверь себя · 1/3разбор после ответа
B2B SaaS продаётся на уровне компании: один аккаунт платит за всю команду. Какой уровень агрегации чаще корректнее для расчёта ARPU и LTV?

Что такое воронка конверсии

Воронка конверсии — последовательность шагов, которые пользователь проходит от первого контакта с продуктом до целевого действия. На каждом шаге часть пользователей отсеивается, и визуально это напоминает воронку: вверху широко, внизу узко.

Примеры воронок:

  • E-commerce: посещение сайта > просмотр товара > добавление в корзину > оформление заказа > оплата
  • SaaS: регистрация > активация > первая оплата > продление подписки
  • Мобильное приложение: установка > онбординг > первое целевое действие > возврат на следующий день

На собеседованиях аналитиков воронки спрашивают в двух форматах: «постройте воронку для X» (продуктовый кейс) и «напишите SQL для расчёта конверсии по шагам» (технический кейс). Обе ситуации разберём ниже.

Типы воронок

Маркетинговая воронка

Классическая модель AIDA: Awareness > Interest > Desire > Action. Используется для описания пути от знакомства с брендом до покупки. В чистом виде на собеседованиях аналитиков встречается редко — это больше маркетинговый фреймворк, чем аналитический инструмент. Но понимать стоит: если вас спросят «как оценить эффективность рекламной кампании», AIDA задаёт структуру ответа.

Продуктовая воронка

Привязана к конкретным действиям пользователя в продукте. Каждый шаг — это событие, которое можно залогировать и посчитать. Именно с такими воронками работает аналитик ежедневно.

Пример для интернет-магазина:

Шаг Пользователей Конверсия в шаг Конверсия от входа
Визит на сайт 100 000 100%
Просмотр товара 60 000 60% 60%
Добавление в корзину 15 000 25% 15%
Начало оформления 9 000 60% 9%
Оплата 4 500 50% 4.5%

Два типа конверсии:

  • Step-to-step (конверсия в шаг) — доля пользователей, перешедших с предыдущего шага на текущий
  • End-to-end (конверсия от входа) — доля от общего числа пользователей на первом шаге

Оба показателя нужны. Step-to-step показывает, где именно проблема. End-to-end показывает кумулятивный эффект.

AARRR (Pirate Metrics)

Фреймворк Дейва Макклюра для стартапов. Пять этапов жизненного цикла пользователя:

  • Acquisition — привлечение. Откуда приходят пользователи и сколько их.
  • Activation — активация. Получил ли пользователь первую ценность от продукта. Для мессенджера — отправил первое сообщение, для сервиса доставки — оформил первый заказ.
  • Retention — удержание. Возвращается ли пользователь. Подробнее — в статье про retention.
  • Revenue — монетизация. Платит ли пользователь.
  • Referral — рекомендации. Приводит ли пользователь других.

AARRR — не воронка в строгом смысле (пользователь не обязан проходить шаги последовательно), но она задаёт структуру для анализа продукта в целом. На собеседованиях по продуктовой аналитике AARRR спрашивают часто: «Какие метрики вы бы отслеживали для нового продукта?»

Строим воронку в SQL

Допустим, у вас есть таблица событий events с колонками user_id, event_name, event_time. Нужно построить воронку: visit > view_product > add_to_cart > checkout > payment.

Шаг 1: определяем попадание пользователя на каждый шаг

WITH funnel AS (
    SELECT
        user_id,
        MAX(CASE WHEN event_name = 'visit' THEN 1 ELSE 0 END) AS step_visit,
        MAX(CASE WHEN event_name = 'view_product' THEN 1 ELSE 0 END) AS step_view,
        MAX(CASE WHEN event_name = 'add_to_cart' THEN 1 ELSE 0 END) AS step_cart,
        MAX(CASE WHEN event_name = 'checkout' THEN 1 ELSE 0 END) AS step_checkout,
        MAX(CASE WHEN event_name = 'payment' THEN 1 ELSE 0 END) AS step_payment
    FROM events
    WHERE event_time >= '2026-03-01'
      AND event_time < '2026-04-01'
    GROUP BY user_id
)
SELECT
    COUNT(*) FILTER (WHERE step_visit = 1) AS visit,
    COUNT(*) FILTER (WHERE step_view = 1) AS view_product,
    COUNT(*) FILTER (WHERE step_cart = 1) AS add_to_cart,
    COUNT(*) FILTER (WHERE step_checkout = 1) AS checkout,
    COUNT(*) FILTER (WHERE step_payment = 1) AS payment
FROM funnel

Это простая воронка без учёта порядка шагов. Пользователь считается на шаге, если совершил это событие хотя бы раз за период. Для многих задач такого подхода достаточно.

Шаг 2: строгая воронка с учётом порядка событий

Если нужно учитывать последовательность — пользователь должен пройти шаги именно в заданном порядке:

WITH user_steps AS (
    SELECT
        user_id,
        MIN(event_time) FILTER (WHERE event_name = 'visit') AS t_visit,
        MIN(event_time) FILTER (WHERE event_name = 'view_product') AS t_view,
        MIN(event_time) FILTER (WHERE event_name = 'add_to_cart') AS t_cart,
        MIN(event_time) FILTER (WHERE event_name = 'checkout') AS t_checkout,
        MIN(event_time) FILTER (WHERE event_name = 'payment') AS t_payment
    FROM events
    WHERE event_time >= '2026-03-01'
      AND event_time < '2026-04-01'
    GROUP BY user_id
),
strict_funnel AS (
    SELECT
        user_id,
        t_visit IS NOT NULL AS reached_visit,
        t_visit IS NOT NULL
            AND t_view > t_visit AS reached_view,
        t_visit IS NOT NULL
            AND t_view > t_visit
            AND t_cart > t_view AS reached_cart,
        t_visit IS NOT NULL
            AND t_view > t_visit
            AND t_cart > t_view
            AND t_checkout > t_cart AS reached_checkout,
        t_visit IS NOT NULL
            AND t_view > t_visit
            AND t_cart > t_view
            AND t_checkout > t_cart
            AND t_payment > t_checkout AS reached_payment
    FROM user_steps
)
SELECT
    COUNT(*) FILTER (WHERE reached_visit) AS visit,
    COUNT(*) FILTER (WHERE reached_view) AS view_product,
    COUNT(*) FILTER (WHERE reached_cart) AS add_to_cart,
    COUNT(*) FILTER (WHERE reached_checkout) AS checkout,
    COUNT(*) FILTER (WHERE reached_payment) AS payment
FROM strict_funnel

Здесь для каждого пользователя берём время первого вхождения каждого события и проверяем, что каждый следующий шаг произошёл строго после предыдущего. Этот подход точнее, но сложнее — на собеседовании уточните у интервьюера, нужна ли строгая последовательность.

Шаг 3: конверсии между шагами

WITH funnel_counts AS (
    -- подставьте любой из запросов выше
    SELECT
        COUNT(*) FILTER (WHERE step_visit = 1) AS visit,
        COUNT(*) FILTER (WHERE step_view = 1) AS view_product,
        COUNT(*) FILTER (WHERE step_cart = 1) AS add_to_cart,
        COUNT(*) FILTER (WHERE step_checkout = 1) AS checkout,
        COUNT(*) FILTER (WHERE step_payment = 1) AS payment
    FROM funnel
)
SELECT
    visit,
    view_product,
    ROUND(100.0 * view_product / NULLIF(visit, 0), 1) AS visit_to_view_pct,
    add_to_cart,
    ROUND(100.0 * add_to_cart / NULLIF(view_product, 0), 1) AS view_to_cart_pct,
    checkout,
    ROUND(100.0 * checkout / NULLIF(add_to_cart, 0), 1) AS cart_to_checkout_pct,
    payment,
    ROUND(100.0 * payment / NULLIF(checkout, 0), 1) AS checkout_to_payment_pct,
    ROUND(100.0 * payment / NULLIF(visit, 0), 1) AS overall_conversion_pct
FROM funnel_counts

NULLIF нужен, чтобы избежать деления на ноль. Подробнее о работе с SQL на собеседованиях — в отдельной статье.

Где искать потери

Воронка построена — дальше нужно понять, где она «протекает» сильнее всего. Здесь есть ловушка: интуитивно хочется смотреть на шаг с самым низким процентом конверсии, но это не всегда правильно.

Абсолютный drop vs. относительный

Допустим, воронка выглядит так:

Шаг Пользователей Step-to-step Потеряно
Визит 100 000
Просмотр 60 000 60% 40 000
Корзина 15 000 25% 45 000
Оформление 9 000 60% 6 000
Оплата 4 500 50% 4 500

По относительной конверсии хуже всего шаг «просмотр > корзина» (25%). По абсолютным потерям тоже — 45 000 человек. Здесь выводы совпадают, но так бывает не всегда.

Правило: начинайте с шага, который даёт наибольшее абсолютное число потерь. Именно там скрыт наибольший потенциал роста. Если вы улучшите конверсию «просмотр > корзина» с 25% до 30%, это +3000 пользователей в корзине. Если улучшите «оформление > оплата» с 50% до 60%, это +900 пользователей. Даже при меньшем процентном улучшении верхний шаг даёт больше в абсолюте.

Сравнение с бенчмарками

Если у вас нет исторических данных, сравнивайте с отраслевыми бенчмарками. Средние значения для e-commerce:

  • Просмотр > корзина: 5–15%
  • Корзина > оплата: 30–70% (зависит от ниши и устройства)

Если ваша конверсия «корзина > оплата» составляет 20% при среднем по рынку 40% — это красный флаг, даже если абсолютные потери на этом шаге невелики.

Тренируйся к собесу продуктового аналитика
400+ вопросов по метрикам, кейсам, retention и unit-экономике
Тренировать продукт в Telegram

Сегментация воронки

Общая воронка показывает среднюю картину. Чтобы найти причину потерь, нужна сегментация.

По источнику трафика

Пользователи из органического поиска, платной рекламы и реферальных программ ведут себя по-разному. Если конверсия «просмотр > корзина» упала — возможно, проблема не в продукте, а в том, что вырос трафик из источника с низким intent (например, баннерная реклама).

По устройству

Мобильный трафик часто показывает конверсию в 2–3 раза ниже десктопного. Если доля мобильного трафика растёт, общая конверсия падает — даже если на каждом устройстве ничего не изменилось. Это эффект Симпсона (Simpson's paradox), и на собеседованиях его спрашивают регулярно.

По когортам

Разрезайте воронку по неделе регистрации. Если новые когорты конвертируются хуже — проблема в привлечении (изменился состав аудитории) или в онбординге. Если хуже конвертируются все когорты — проблема в продукте. Подробнее о когортном подходе — в статье про retention.

По географии, тарифу, сегменту

Любой атрибут пользователя может быть разрезом. Задача аналитика — не строить 50 разрезов, а выбрать 3–5 гипотез и проверить их через сегментацию. Начните с тех, которые объясняют наибольшую дисперсию.

A/B-тесты на шагах воронки

Когда вы нашли проблемный шаг, следующий вопрос — как его улучшить. Здесь начинаются A/B-тесты.

Ключевые принципы тестирования воронки:

Одна гипотеза — один тест. Если вы одновременно меняете форму оформления и добавляете новый способ оплаты, невозможно понять, что именно повлияло на конверсию.

Primary metric — конверсия конкретного шага. Если тестируете редизайн страницы оформления, primary metric — конверсия «оформление > оплата», а не общая конверсия от визита до оплаты. Общая конверсия будет secondary metric.

Следите за каннибализацией. Улучшение одного шага может ухудшить следующий. Пример: агрессивная кнопка «Добавить в корзину» увеличивает конверсию в корзину, но пользователи добавляют не думая и потом не покупают. Конверсия «корзина > оплата» падает. Поэтому всегда смотрите на end-to-end.

Размер выборки считайте для конкретного шага. Если на этап «оформление > оплата» попадает 9 000 пользователей в месяц, а текущая конверсия 50%, рассчитайте, сколько времени нужно для детекции минимального значимого эффекта. Может оказаться, что тест придётся держать 2–3 месяца.

Что спрашивают на собеседованиях

«Конверсия упала на 20%. Как будете разбираться?»

Это самый частый кейс по воронкам на собеседовании. Структура ответа:

  1. Уточните контекст. Какая именно конверсия: step-to-step или end-to-end? За какой период? По сравнению с чем (прошлая неделя, прошлый месяц)?

  2. Проверьте данные. Нет ли бага в логировании? Не изменилось ли определение события? Не было ли технического сбоя (падение сервера, ошибка платёжного шлюза)? 20% падение чаще вызвано техническими причинами, чем продуктовыми.

  3. Локализуйте шаг. На каком этапе воронки произошло падение? Если «визит > просмотр» — проблема на входе (трафик, лендинг). Если «корзина > оплата» — проблема в чекауте или оплате.

  4. Сегментируйте. Падение равномерное или сконцентрировано в одном сегменте? Проверьте: источник трафика, устройство, географию, новых vs. старых пользователей.

  5. Найдите причину. Совпадает ли падение по времени с каким-то событием: релиз, изменение рекламной кампании, действия конкурента, сезонность?

  6. Предложите действие. Если причина техническая — починить. Если продуктовая — сформулируйте гипотезу и предложите A/B-тест.

«Постройте воронку для [продукт X]»

Определите целевое действие продукта. Разложите путь пользователя на 4–6 шагов. Для каждого шага назовите событие, которое логируется. Не усложняйте — на собеседовании ценят ясность, а не количество шагов.

«Напишите SQL для расчёта конверсии»

Используйте запрос из раздела выше. Уточните у интервьюера: нужна ли строгая последовательность или достаточно «хотя бы раз совершил действие». Упомяните NULLIF для деления — это показывает внимание к краевым случаям.

«Чем отличается воронка от retention?»

Воронка — про путь к целевому действию (горизонтальное движение по шагам). Retention — про возврат к продукту после первого визита (вертикальное движение по времени). Воронка отвечает на вопрос «где теряем?», retention — «надолго ли остаются?». Оба инструмента дополняют друг друга: хорошая воронка без retention означает, что пользователи конвертируются, но не возвращаются.

Читайте также

FAQ

Что такое воронка конверсии?

Воронка конверсии — последовательность шагов, которые пользователь проходит от первого контакта с продуктом до целевого действия. На каждом шаге часть пользователей отсеивается. Задача аналитика — найти, где теряется больше всего пользователей, и понять почему.

Чем отличается step-to-step конверсия от end-to-end?

Step-to-step — доля пользователей, перешедших с одного шага на следующий (например, из корзины в оплату). End-to-end — доля от общего числа на первом шаге (например, от визита до оплаты). Оба показателя нужны: step-to-step показывает, где проблема, end-to-end — кумулятивный эффект.

Как найти самый проблемный шаг воронки?

Начинайте с шага, который даёт наибольшее абсолютное число потерь — там скрыт наибольший потенциал роста. Улучшение верхнего шага воронки даёт больше в абсолюте, даже при меньшем процентном улучшении, чем оптимизация нижнего шага.

Чем воронка конверсии отличается от retention?

Воронка — про путь к целевому действию (горизонтальное движение по шагам), retention — про возврат пользователя к продукту со временем (вертикальное движение по дням). Воронка отвечает на вопрос «где теряем?», retention — «надолго ли остаются?». Оба инструмента дополняют друг друга.