Как посчитать tutorial drop-off в SQL
Содержание:
Зачем drop-off
Tutorial / onboarding — критический funnel. Если 30% юзеров отваливаются на step 2, 50% от оставшихся на step 3, итог: только 35% завершают. Drop-off по шагам показывает, где именно проблема — confusing UI, slow loading, ненужный шаг.
Шаги tutorial
Стандартный список:
- step 1 — welcome screen
- step 2 — sign-up
- step 3 — permission request
- step 4 — first action
- step 5 — tutorial complete
Drop-off в SQL
WITH cohort AS (
SELECT DISTINCT user_id, install_date
FROM app_installs
WHERE install_date >= CURRENT_DATE - INTERVAL '30 days'
),
step_completion AS (
SELECT
c.user_id,
MAX(CASE WHEN e.event_name = 'tutorial_step_1_complete' THEN 1 ELSE 0 END) AS step_1,
MAX(CASE WHEN e.event_name = 'tutorial_step_2_complete' THEN 1 ELSE 0 END) AS step_2,
MAX(CASE WHEN e.event_name = 'tutorial_step_3_complete' THEN 1 ELSE 0 END) AS step_3,
MAX(CASE WHEN e.event_name = 'tutorial_complete' THEN 1 ELSE 0 END) AS step_done
FROM cohort c
LEFT JOIN events e ON e.user_id = c.user_id
AND e.event_date BETWEEN c.install_date AND c.install_date + INTERVAL '1 day'
GROUP BY c.user_id
)
SELECT
COUNT(*) AS installs,
SUM(step_1) AS at_step_1,
SUM(step_2) AS at_step_2,
SUM(step_3) AS at_step_3,
SUM(step_done) AS completed,
SUM(step_1)::NUMERIC * 100 / COUNT(*) AS pct_step_1,
SUM(step_2)::NUMERIC * 100 / COUNT(*) AS pct_step_2,
SUM(step_3)::NUMERIC * 100 / COUNT(*) AS pct_step_3,
SUM(step_done)::NUMERIC * 100 / COUNT(*) AS pct_complete
FROM step_completion;Видно абсолютную drop-off на каждом шаге.
Worst step
Drop-off между шагами:
WITH steps AS (
SELECT
step_number,
users_at_step
FROM (VALUES
(1, 9500),
(2, 8200),
(3, 4500),
(4, 4200),
(5, 4000)
) AS t(step_number, users_at_step)
)
SELECT
step_number,
users_at_step,
LAG(users_at_step) OVER (ORDER BY step_number) AS prev_users,
LAG(users_at_step) OVER (ORDER BY step_number) - users_at_step AS dropped,
(LAG(users_at_step) OVER (ORDER BY step_number) - users_at_step)::NUMERIC * 100
/ NULLIF(LAG(users_at_step) OVER (ORDER BY step_number), 0) AS drop_pct
FROM steps;В примере step 2 → step 3 — 45% drop. Это bottleneck.
Cohort comparison
A/B test нового tutorial:
SELECT
variant,
COUNT(*) AS users,
SUM(step_done)::NUMERIC * 100 / COUNT(*) AS completion_rate_pct
FROM tutorial_ab_results
WHERE install_date >= '2026-04-01'
GROUP BY variant;Если new variant даёт higher completion при equal n — катить.
Частые ошибки
Ошибка 1. Считать на все installs. Иногда сразу crash → не успел даже step 1 загрузить. Сравнивайте на «opened app at least once».
Ошибка 2. Окно слишком короткое. Tutorial не всегда single session. 24h — стандарт. Меньше — теряете returning users.
Ошибка 3. Не учитывать skip. Skip-button — это не «прошёл», но иногда tracking считает.
Ошибка 4. Сравнивать на разных платформах одинаково. iOS vs Android могут иметь разные funnels.
Ошибка 5. Не сегментировать по канале. Paid юзеры обычно «холоднее», organic — «горячее». Drop-off разный.
Связанные темы
- Как посчитать onboarding completion в SQL
- Как посчитать funnel в SQL
- Как посчитать tutorial completion в SQL
- Как посчитать funnel drop-off в SQL
FAQ
Tutorial vs onboarding?
Tutorial — fixed sequence. Onboarding — broader (включает permissions, sign-up).
Какой completion rate хороший?
Mobile: 50-80% для simple, 30-50% для длинного. Optimize длинные.
Skip считать?
В analytics — yes (track separately). В completion — no.
Best practice — number of steps?
3-5 max. 7+ слишком. Lazy onboarding (skip, return when needed).
Mandatory steps?
Sign-up, permission for core feature — mandatory. Rest — skippable.