Как посчитать tutorial drop-off в SQL

Закрепи формулу tutorial drop off в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать tutorial drop off в Telegram

Зачем 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.

Закрепи формулу tutorial drop off в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать tutorial drop off в Telegram

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 разный.

Связанные темы

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.