Conversion rate: как собрать честную воронку
Как считать conversion rate по воронке: выбрать вход, порядок событий и окно конверсии, найти настоящий drop-off и не перепутать пользователей с сессиями.
Содержание статьи
Когда конверсия падает, команда часто открывает один большой процент и начинает спорить, что чинить: лендинг, форму, цену или продукт. Воронка нужна не для красивого треугольника. Она показывает, на каком конкретном переходе люди теряют контекст, сталкиваются с ошибкой или просто не видят смысла идти дальше.
Коротко
Conversion rate — это доля пользователей, которые вошли в заданный путь и дошли до целевого действия за выбранное окно времени. Смысл метрики полностью зависит от четырёх вещей: кто вошёл, какие шаги обязательны, в каком порядке они идут и сколько времени разрешено на завершение.
- Покажи в отчёте входной шаг и знаменатель, а не только итоговый процент.
- Считай уникальных пользователей, если вопрос про опыт человека; сессии — если вопрос про конкретную попытку.
- Выбирай окно по реальному циклу: 20 минут для checkout и несколько дней для B2B onboarding — это разные задачи.
- Разбирай переходы между шагами, а не только общий conversion rate.
Сначала сформулируй путь словами
До настройки событий полезно произнести воронку обычной фразой. Например: “Новый пользователь увидел pricing, начал регистрацию, создал workspace и открыл первый отчёт в течение семи дней”. Если фразу нельзя сказать без оговорок, воронку ещё рано собирать: скорее всего, вы смешали два разных маршрута.
Один и тот же итоговый event может жить в разных путях. Покупка после повторного визита и покупка в первой сессии — не одна конверсия. Первая больше говорит про весь спрос и маркетинг, вторая — про ясность предложения и friction в checkout.
| Настройка | Вопрос, на который отвечает |
|---|---|
| Единица | Считаем людей, аккаунты, устройства или сессии? |
| Вход | Кто попадает в знаменатель: все визиты, новые пользователи, пользователи с намерением? |
| Порядок | Шаги должны идти строго друг за другом или между ними допустимы другие действия? |
| Окно | Сколько времени пользователю нормально нужно, чтобы закончить путь? |
| Цель | Какой event доказывает результат: payment_succeeded, report_viewed, lead_qualified? |
Воронка должна показывать количество и переход
Итоговая конверсия здесь 11,5%, но для решения важнее не сам процент, а форма пути. Между первым визитом и началом регистрации теряется 71% входа. Потом до первого отчёта доходит заметная часть тех, кто уже создал workspace. Значит, начинать расследование с финального экрана нельзя: сначала нужно понять, почему люди не решаются начать путь.
Значения условные. Под каждым шагом видно долю от входа; именно переходы дают гипотезы для проверки.
Closed funnel, open funnel и порядок событий
Closed funnel считает только тех, кто вошёл с первого шага. Он хорош для диагностики конкретного сценария: например, pricing → registration → first report. Open funnel разрешает пользователю появиться на любом шаге, поэтому удобен для проверки целого процесса и качества данных, но не отвечает на тот же вопрос.
Порядок тоже меняет смысл. Для onboarding чаще нужен порядок “сначала это, потом то”: иначе пользователь мог создать workspace вчера, а открыть pricing сегодня, и система назовёт это одним успешным путём. В продукте между основными шагами обычно допустимы другие действия; требовать exact order стоит только для действительно жёсткого технического процесса.
Если в прошлом месяце в BI считали уникальных пользователей за 7 дней, а в новом отчёте сессии за 24 часа, цифры могут разойтись без единого изменения в продукте. В названии графика лучше сразу писать единицу, окно и режим.
SQL для последовательной onboarding-воронки
Ниже один из прозрачных способов посчитать closed funnel по пользователям. Каждый следующий CTE присоединяется к предыдущему шагу и проверяет окно в семь дней от первого входного события. Это важнее, чем просто проверить наличие всех четырёх events у одного user_id: порядок и срок здесь часть определения метрики.
with pricing as (
select user_id, min(occurred_at) as pricing_at
from events
where event_name = 'pricing_viewed'
and occurred_at >= current_date - interval '30 days'
and occurred_at < current_date
group by 1
),
registration as (
select p.user_id, p.pricing_at, min(e.occurred_at) as registration_at
from pricing p
join events e on e.user_id = p.user_id
and e.event_name = 'registration_completed'
and e.occurred_at >= p.pricing_at
and e.occurred_at < p.pricing_at + interval '7 days'
group by 1, 2
),
workspace as (
select r.user_id, r.pricing_at, min(e.occurred_at) as workspace_at
from registration r
join events e on e.user_id = r.user_id
and e.event_name = 'workspace_created'
and e.occurred_at >= r.registration_at
and e.occurred_at < r.pricing_at + interval '7 days'
group by 1, 2
),
first_report as (
select distinct w.user_id
from workspace w
join events e on e.user_id = w.user_id
and e.event_name = 'report_viewed'
and e.occurred_at >= w.workspace_at
and e.occurred_at < w.pricing_at + interval '7 days'
)
select 'pricing_viewed' as step, count(*) as users from pricing
union all select 'registration_completed', count(*) from registration
union all select 'workspace_created', count(*) from workspace
union all select 'report_viewed', count(*) from first_report;Как найти причину drop-off
Большой drop-off — это место для вопроса, а не готовый диагноз. Сравни тех, кто прошёл переход, с теми, кто остановился: канал, платформа, браузер, тариф, скорость загрузки, ошибки, время между шагами. Если конверсия просела только на Android после релиза, она уже не похожа на общую проблему смысла pricing-страницы.
Не забывай про размер базы. Переход с 8% до 4% в сегменте из 30 пользователей может быть шумом. Падение с 29% до 24% на десятках тысяч пользователей уже стоит разложить по версии приложения и источнику трафика, а затем подтвердить гипотезу экспериментом или качественным исследованием.
- Сравни переходы по каналам, платформам и новым когортам.
- Посмотри медианное время между шагами, а не только факт прохождения.
- Проверь ошибки и технические события рядом с проблемным шагом.
- Узнай, что делают пользователи вместо следующего шага: уходят, возвращаются назад, ищут помощь или идут другим маршрутом.
- Не называй корреляцию причиной без дополнительной проверки.
Открытая и последовательная воронка
В открытой воронке каждый шаг считается от своей аудитории. Она отвечает на вопрос: сколько пользователей дошло до конкретного действия вообще? В последовательной воронке шаги должны идти в заданном порядке и обычно в одном окне. Она отвечает на другой вопрос: какой процент пользователей прошёл путь от старта до результата без пропуска этапов. Оба режима полезны, но их конверсию нельзя сравнивать как одну метрику.
Выбор режима зависит от сценария. Для checkout важна последовательность: просмотр товара, корзина, оплата. Для исследования функций может быть полезно узнать, сколько зарегистрированных когда-либо создали проект, даже если они сначала посмотрели документацию. Подпиши режим в названии отчёта и зафиксируй допустимое время между шагами.
| Режим | Знаменатель шага | Риск неправильного вывода |
|---|---|---|
| Последовательная | пользователи, прошедшие предыдущий шаг | путь зависит от порядка и окна |
| Открытая | одна и та же стартовая база | можно принять параллельный сценарий за линейный |
| Обе | заранее определённая когорта | смешать пользователей разных периодов и версий |
Знаменатель и атрибуция меняют конверсию
Конверсия — это не только деление двух чисел. Нужно понимать, кто попал в стартовую когорту и как долго ему разрешено пройти путь. Если в числителе заказ за семь дней, а знаменатель — все пользователи, зарегистрированные за месяц, показатель будет занижен. Если новые пользователи продолжают добавляться в незакрытое окно, вчерашняя конверсия может меняться задним числом.
Отдельно договорись об атрибуции: пользователь считается один раз по первой сессии, по первому источнику или по кампании, которая привела к конкретному шагу. Для продуктового анализа обычно полезно хранить исходный acquisition channel и отдельно канал последнего касания. Не смешивай их в одном поле, иначе объяснение разницы между сегментами станет спором о данных.
- Зафиксируй стартовое событие и размер когорты.
- Укажи окно: одна сессия, 24 часа, 7 или 30 дней.
- Раздели first-touch и last-touch attribution.
- Отдельно учти повторные попытки и дубликаты заказов.
- Не сравнивай незрелые когорты с полностью дозревшими.
Drop-off — место для диагностики, а не готовая причина
Большой провал между шагами помогает выбрать место исследования, но не объясняет поведение. На одном и том же участке могут работать разные причины: пользователю неясна ценность, форма не помещается на мобильном экране, платёж отклоняется, событие не отправляется или часть аудитории вообще не должна была проходить этот шаг.
Сначала собери операционный разрез: пользователи, доля, медианное время, ошибки и повторные попытки. Затем сравни сегменты и версии. Если drop-off появился после релиза только в Safari, это техническая гипотеза. Если он стабильно выше у пользователей из конкретного рекламного обещания, исследуй качество трафика. Если проблема одинакова везде, можно переходить к UX-исследованию или эксперименту.
| Поле | Зачем |
|---|---|
| users | понимать абсолютный масштаб потери |
| conversion | сравнивать шаги и периоды |
| median time | видеть задержку и повторные попытки |
| error rate | отделять UX-проблему от технической |
| segment | найти локальную причину вместо среднего |
Что почитать дальше
Воронка часто начинается ещё до продукта: пользователь должен получить первую ценность, а команда — убедиться, что её определение не подменено удобным кликом. После прохождения воронки следующий вопрос — какие сегменты приносят деньги и не маскирует ли средняя выручка потерю качества.
Материалы по теме

Как посчитать воронку в SQL: шаги, конверсия и drop-off
Пошагово собираем продуктовую воронку в SQL: считаем пользователей на каждом этапе, выбираем знаменатель конверсии и находим место наибольшего отвала.

Retention по когортам и каналам: как считать D1, D7 и D30
Как считать retention rate, D1/D7/D30 и когортную возвращаемость: выбрать return event, читать heatmap и находить слабые каналы.

MDE и размер выборки: как понять, хватит ли данных для A/B-теста
Что такое MDE, как он связан с размером выборки и длительностью эксперимента, почему маленький тест не может доказать большой продуктовый вывод.