Что такое продуктовая воронка
Воронка — это последовательность шагов, которые пользователь проходит на пути к целевому действию. Регистрация → активация → первая покупка. Или: каталог → карточка товара → корзина → оплата → подтверждение заказа.
Почему «воронка»? Потому что на каждом шаге часть пользователей отваливается. Из 10 000 посетителей 3 000 кликнут на товар, 800 добавят в корзину, 400 дойдут до оплаты, 300 оплатят. Визуально это выглядит как сужающаяся воронка — отсюда и название.
Задача аналитика — найти, где отваливается больше всего пользователей, понять почему, и предложить изменения, которые увеличат конверсию.
Пример: воронка интернет-магазина
Два типа конверсии: total и step-to-step
На собеседовании важно различать эти два типа. Когда вас спрашивают «какая конверсия из корзины в оплату?» — это step-to-step (400/800 = 50%). А «какая конверсия checkout?» — чаще имеют в виду total (400/10000 = 4%).
Как правильно строить воронку
Не любая последовательность шагов — это воронка. Чтобы анализ имел смысл, нужно соблюсти несколько принципов.
Принцип 1: Определите целевое действие
Стройте воронку от конца к началу. Сначала определите, что является конверсией (оплата? регистрация? первое сообщение?), а потом разбейте путь к ней на этапы. Не наоборот.
Принцип 2: Шаги должны быть последовательными
Каждый пользователь, попавший на шаг N, должен был пройти шаг N-1. Если пользователь может перескочить этап (например, сразу попасть на страницу оплаты по прямой ссылке) — воронка будет некорректной. Либо учтите это в логике, либо исключите таких пользователей.
Принцип 3: Определите временное окно
Воронка всегда строится в пределах одного временного окна. Обычно это одна сессия или N дней с момента первого шага. Если пользователь зашёл в каталог в понедельник, а оплатил в пятницу — это одна воронка или две? Без чёткого окна ответ размывается.
Принцип 4: Один пользователь — один проход
Если пользователь прошёл воронку 3 раза (3 заказа за месяц), как считать? Два основных подхода: по уникальным пользователям (человек считается один раз на этапе) или по сессиям/событиям (каждый проход считается отдельно). Для продуктовых задач обычно считают по уникальным пользователям.
SQL-запросы для построения воронки
На собеседовании вас попросят построить воронку в SQL. Ниже — два основных подхода.
Запрос 1: Простая воронка по событиям
Предполагаем таблицу events с полями user_id, event_name, event_date. Строим воронку регистрация → активация → первая покупка за последние 30 дней.
WITH funnel AS ( SELECT COUNT(DISTINCT CASE WHEN event_name = 'registration' THEN user_id END) AS step_1_registration, COUNT(DISTINCT CASE WHEN event_name = 'activation' THEN user_id END) AS step_2_activation, COUNT(DISTINCT CASE WHEN event_name = 'first_purchase' THEN user_id END) AS step_3_purchase FROM events WHERE event_date >= CURRENT_DATE - 30 ) SELECT step_1_registration, step_2_activation, step_3_purchase, ROUND(100.0 * step_2_activation / step_1_registration, 1) AS cr_1_to_2, ROUND(100.0 * step_3_purchase / step_2_activation, 1) AS cr_2_to_3, ROUND(100.0 * step_3_purchase / step_1_registration, 1) AS cr_total FROM funnel;
Запрос 2: Воронка со строгим порядком шагов
Когда нужно, чтобы каждый пользователь проходил шаги именно в правильной последовательности — строим цепочку через LEFT JOIN.
WITH s1 AS ( SELECT DISTINCT user_id, MIN(event_date) AS step1_date FROM events WHERE event_name = 'page_view_catalog' GROUP BY user_id ), s2 AS ( SELECT DISTINCT user_id, MIN(event_date) AS step2_date FROM events WHERE event_name = 'add_to_cart' GROUP BY user_id ), s3 AS ( SELECT DISTINCT user_id, MIN(event_date) AS step3_date FROM events WHERE event_name = 'purchase' GROUP BY user_id ) SELECT COUNT(s1.user_id) AS step_1_catalog, COUNT(s2.user_id) AS step_2_cart, COUNT(s3.user_id) AS step_3_purchase, ROUND(100.0 * COUNT(s2.user_id) / COUNT(s1.user_id), 1) AS cr_1_to_2, ROUND(100.0 * COUNT(s3.user_id) / NULLIF(COUNT(s2.user_id), 0), 1) AS cr_2_to_3 FROM s1 LEFT JOIN s2 ON s1.user_id = s2.user_id AND s2.step2_date >= s1.step1_date -- строгий порядок LEFT JOIN s3 ON s2.user_id = s3.user_id AND s3.step3_date >= s2.step2_date; -- строгий порядок
Ключ — условие step_date >= previous_step_date в JOIN. Это гарантирует, что пользователь прошёл шаги в правильном порядке. NULLIF защищает от деления на ноль, если на каком-то шаге ноль пользователей.
Запрос 3: Воронка с разбивкой по сегментам
На собеседовании часто просят не просто построить воронку, а разбить её по сегментам — например, по платформе (iOS / Android / Web). Это помогает локализовать проблему.
SELECT e.platform, COUNT(DISTINCT CASE WHEN e.event_name = 'page_view' THEN e.user_id END) AS views, COUNT(DISTINCT CASE WHEN e.event_name = 'add_to_cart' THEN e.user_id END) AS cart, COUNT(DISTINCT CASE WHEN e.event_name = 'purchase' THEN e.user_id END) AS purchases, ROUND(100.0 * COUNT(DISTINCT CASE WHEN e.event_name = 'purchase' THEN e.user_id END) / NULLIF(COUNT(DISTINCT CASE WHEN e.event_name = 'page_view' THEN e.user_id END), 0) , 1) AS total_cr FROM events e WHERE e.event_date >= CURRENT_DATE - 30 GROUP BY e.platform ORDER BY total_cr DESC;
Анализ drop-off: где теряются пользователи
Drop-off (или отвал) — это процент пользователей, которые не перешли с одного шага на следующий. Если из 800 пользователей в корзине только 400 начали оплату — drop-off на этом шаге 50%.
Задача аналитика — не просто зафиксировать drop-off, а объяснить, почему он такой и что с ним делать.
Фреймворк анализа drop-off
Типичные причины drop-off по шагам
| Переход | Типичные причины drop-off | Что проверить |
|---|---|---|
| Каталог → Карточка товара | Нерелевантная выдача, плохие превью, медленная загрузка, слишком много товаров без фильтрации | Качество поиска, CTR карточек, скорость страницы |
| Карточка → Корзина | Цена, нет нужного размера/цвета, мало информации, нет отзывов, неудобная кнопка «В корзину» | Разбивку по категориям: может, drop-off только в одной |
| Корзина → Оплата | Неожиданная стоимость доставки, нужна регистрация, нет удобного способа оплаты, сложная форма | Долю брошенных корзин по сегментам, heatmap экрана |
| Оплата → Подтверждение | Ошибка платёжной системы, таймаут, страх (безопасность), редирект на сторонний сайт банка | Логи ошибок, долю по методам оплаты, конверсию по банкам |
5 типичных ошибок при построении воронки
Как оптимизировать воронку
Оптимизация воронки — это не одно большое действие, а система мелких экспериментов. Вот подход, который работает в BigTech-компаниях:
Шаг 1: Найдите главное узкое место
Постройте воронку, посчитайте абсолютный drop-off на каждом шаге (не процентный, а в людях). Шаг, где отваливается больше всего пользователей в абсолютных числах — ваш приоритет.
Шаг 2: Поймите причину через данные
Не угадывайте — разбивайте. Сравните конверсию по платформам, по гео, по новым и вернувшимся, по источнику трафика. Посмотрите, на каких устройствах или в каких регионах проблема острее. Часто drop-off локализован: не «все плохо», а «на Android в Firefox конверсия в 3 раза ниже».
Шаг 3: Сформулируйте гипотезу и протестируйте
Гипотеза должна быть конкретной: «Если мы уберём обязательную регистрацию на шаге корзина → оплата, drop-off на этом шаге снизится с 50% до 35%». Проверяем через A/B тест. Измеряем не только конверсию этого шага, но и общую конверсию воронки — иногда улучшение одного шага ухудшает следующий.
Бенчмарки конверсий
| Воронка | Типичная конверсия | Хороший результат |
|---|---|---|
| E-commerce (visit → purchase) | 1–3% | 4–6% |
| SaaS (visit → signup) | 2–5% | 7–12% |
| SaaS (signup → paid) | 5–15% | 20–30% |
| Mobile app (install → Day-1 open) | 40–60% | 70–80% |
| Маркетплейс (поиск → покупка) | 2–5% | 6–10% |
Вопросы про воронки на собесе в BigTech
- Постройте воронку регистрации для мобильного приложения. Какие шаги включите и почему?
- Конверсия из корзины в оплату упала с 60% до 45%. Как будете разбираться? С чего начнёте?
- Напишите SQL-запрос, который строит воронку по событиям page_view → add_to_cart → purchase.
- Маркетплейс: конверсия из поиска в покупку — 3%. Это много или мало? Как улучшить?
- В чём разница между total conversion и step-to-step conversion? Когда какую метрику использовать?
- Вы улучшили один шаг воронки, но общая конверсия не изменилась. Почему это возможно?
- Как построить воронку, если пользователь может вернуться и пройти её несколько раз?
- Мы упростили форму регистрации: убрали 3 поля. Как проверить, что это помогло?
Связанные материалы
Главное про воронки
Воронка — один из главных инструментов продуктового аналитика. Она показывает, где продукт теряет пользователей, и помогает приоритизировать работу команды. Хорошая воронка — не просто «сколько дошло до конца», а инструмент для принятия решений.
На собеседовании от вас ждут три вещи: умение построить воронку в SQL, способность объяснить drop-off (не «упало», а «упало потому что, и вот как проверить»), и понимание того, как связать воронку с A/B тестами и бизнес-метриками.
Следующий шаг: возьмите любой e-commerce датасет (Olist на Kaggle), постройте воронку в SQL, найдите шаг с максимальным drop-off и напишите 3 гипотезы, почему он такой. Это упражнение — ровно то, что спросят на собесе.
