← Назад к вопросам

Что такое воронка конверсии и как её анализировать?

1.3 Junior🔥 211 комментариев
#Метрики и KPI

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Воронка конверсии: Определение и анализ

Воронка конверсии (Conversion Funnel) — это последовательность этапов, через которые должен пройти пользователь для достижения целевого действия (покупка, подписка, скачивание). Она визуализирует, сколько пользователей теряется на каждом этапе пути к конверсии.

Структура типичной воронки

Для e-commerce:

  1. Visit — посещение сайта (100%)
  2. Browse — просмотр товаров (70%)
  3. Add to Cart — добавление в корзину (30%)
  4. Checkout — начало оформления (15%)
  5. Payment — завершение покупки (8%)

Для SaaS:

  1. Landing Page Visit (100%)
  2. Signup Form View (65%)
  3. Account Created (40%)
  4. Product Setup (25%)
  5. First Active Use (18%)
  6. Subscription (12%)

Ключевые метрики воронки

1. Conversion Rate между этапами (Step Conversion) Процент пользователей, переходящих с этапа i на этап i+1.

Step Conversion = (Users at Step N / Users at Step N-1) × 100%

Например, если 100 посетителей, 30 добавили в корзину, 15 начали оформление, то:

  • Browse → Add to Cart: 30 / 100 = 30%
  • Add to Cart → Checkout: 15 / 30 = 50%

2. Overall Conversion Rate (сквозная конверсия) Процент пользователей от первого этапа, достигших целевого действия.

Overall Conversion = (Users who Converted / Initial Users) × 100%

3. Drop-off Rate (процент отсева) Процент пользователей, не прошедших дальше этапа.

Drop-off = 100% - Conversion%

Анализ воронки конверсии

1. Выявление узких мест (Bottlenecks)

Найти этапы с наибольшим отсевом пользователей:

WITH funnel_data AS (
  SELECT 
    'visit' as stage,
    COUNT(DISTINCT user_id) as users
  FROM events
  WHERE event_type = 'visit'
  
  UNION ALL
  
  SELECT 
    'add_to_cart' as stage,
    COUNT(DISTINCT user_id)
  FROM events
  WHERE event_type = 'add_to_cart'
  
  UNION ALL
  
  SELECT 
    'checkout' as stage,
    COUNT(DISTINCT user_id)
  FROM events
  WHERE event_type = 'checkout'
  
  UNION ALL
  
  SELECT 
    'purchase' as stage,
    COUNT(DISTINCT user_id)
  FROM events
  WHERE event_type = 'purchase'
)
SELECT 
  stage,
  users,
  LAG(users) OVER (ORDER BY CASE stage 
    WHEN 'visit' THEN 1 
    WHEN 'add_to_cart' THEN 2 
    WHEN 'checkout' THEN 3 
    WHEN 'purchase' THEN 4 END) as prev_stage_users,
  ROUND(100.0 * users / LAG(users) OVER (ORDER BY CASE stage WHEN 'visit' THEN 1 WHEN 'add_to_cart' THEN 2 WHEN 'checkout' THEN 3 WHEN 'purchase' THEN 4 END), 2) as conversion_rate_pct
FROM funnel_data
ORDER BY CASE stage WHEN 'visit' THEN 1 WHEN 'add_to_cart' THEN 2 WHEN 'checkout' THEN 3 WHEN 'purchase' THEN 4 END;

2. Сегментированный анализ

Сравнить конверсию по разным сегментам (источник трафика, устройство, регион):

WITH funnel AS (
  SELECT 
    traffic_source,
    COUNT(CASE WHEN event_type = 'visit' THEN 1 END) as visits,
    COUNT(CASE WHEN event_type = 'add_to_cart' THEN 1 END) as add_to_cart,
    COUNT(CASE WHEN event_type = 'purchase' THEN 1 END) as purchases
  FROM events
  GROUP BY traffic_source
)
SELECT 
  traffic_source,
  visits,
  add_to_cart,
  purchases,
  ROUND(100.0 * add_to_cart / visits, 2) as add_to_cart_rate,
  ROUND(100.0 * purchases / visits, 2) as overall_conversion_rate
FROM funnel
ORDER BY overall_conversion_rate DESC;

3. Анализ времени между этапами

Выявить, где пользователи задерживаются:

WITH user_journey AS (
  SELECT 
    user_id,
    event_type,
    created_at,
    LEAD(created_at) OVER (PARTITION BY user_id ORDER BY created_at) as next_event_time
  FROM events
)
SELECT 
  event_type,
  COUNT(DISTINCT user_id) as users,
  ROUND(AVG(EXTRACT(EPOCH FROM (next_event_time - created_at)) / 3600), 2) as avg_hours_to_next,
  PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY EXTRACT(EPOCH FROM (next_event_time - created_at)) / 3600) as median_hours
FROM user_journey
GROUP BY event_type
ORDER BY event_type;

Python-анализ воронки

import pandas as pd
import matplotlib.pyplot as plt

# Загрузка данных событий
events = pd.read_csv('events.csv')

# Создание воронки
funnel_data = {
    'Stage': ['Landing Page', 'Signup', 'Profile Setup', 'First Purchase', 'Repeat Purchase'],
    'Users': [10000, 6500, 4200, 1680, 840]
}

df_funnel = pd.DataFrame(funnel_data)

# Расчёт метрик
df_funnel['Conversion_Rate'] = (df_funnel['Users'] / df_funnel['Users'].iloc[0] * 100).round(2)
df_funnel['Step_Conversion'] = (df_funnel['Users'] / df_funnel['Users'].shift() * 100).round(2)
df_funnel['Dropoff'] = 100 - df_funnel['Conversion_Rate']

print(df_funnel)
# Output:
#                Stage  Users  Conversion_Rate  Step_Conversion  Dropoff
# 0         Landing Page  10000            100.0             NaN      0.0
# 1                Signup   6500             65.0            65.0     35.0
# 2          Profile Setup   4200             42.0            64.6     58.0
# 3         First Purchase   1680             16.8            40.0     83.2
# 4        Repeat Purchase    840              8.4            50.0     91.6

# Визуализация воронки
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))

# График 1: Количество пользователей
ax1.bar(df_funnel['Stage'], df_funnel['Users'], color='steelblue', edgecolor='black')
ax1.set_ylabel('Количество пользователей')
ax1.set_title('Воронка конверсии: Количество')
ax1.tick_params(axis='x', rotation=45)
for i, v in enumerate(df_funnel['Users']):
    ax1.text(i, v + 200, str(v), ha='center', va='bottom')

# График 2: Процент конверсии
ax2.plot(df_funnel['Stage'], df_funnel['Conversion_Rate'], 
         marker='o', linewidth=2, markersize=8, color='steelblue')
ax2.set_ylabel('Сквозная конверсия (%)')
ax2.set_title('Тренд сквозной конверсии')
ax2.set_ylim(0, 105)
ax2.grid(axis='y', alpha=0.3)
ax2.tick_params(axis='x', rotation=45)
for i, v in enumerate(df_funnel['Conversion_Rate']):
    ax2.text(i, v + 2, f"{v}%", ha='center', va='bottom')

plt.tight_layout()
plt.show()

Санкей-диаграмма (Sankey Diagram)

Отличный способ визуализации потоков пользователей между этапами:

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
    node=dict(
        pad=15,
        line=dict(color='black', width=0.5),
        label=['Landing Page', 'Signup', 'Profile Setup', 'Purchase', 'Bounced'],
        color=['steelblue', 'steelblue', 'steelblue', 'green', 'red']
    ),
    link=dict(
        source=[0, 0, 1, 1, 2, 2],
        target=[1, 4, 2, 4, 3, 4],
        value=[6500, 3500, 4200, 2300, 1680, 2520]
    )
)])

fig.update_layout(title_text='Санкей-диаграмма пути пользователей', font_size=10)
fig.show()

Рекомендации по оптимизации

Для каждого узкого места:

  1. Выявить причину — провести UX-тестирование, опросы, сессионные записи
  2. Гипотезировать решение — часто проблемы с clarity, friction, trust
  3. Тестировать улучшения — A/B тесты для валидации гипотез
  4. Мониторить результаты — отслеживать изменение метрик

Частые проблемы:

  • Непонятный CTА
  • Медленная загрузка страницы
  • Отсутствие социального доказательства
  • Слишком много полей в форме
  • Неожиданные затраты (shipping, tax)

Инструменты анализа

  • Google Analytics: встроенная Funnel Visualization
  • Mixpanel: детальные воронки с фильтрацией
  • Amplitude: когортный анализ в воронках
  • Tableau/Looker: кастомные визуализации

Анализ воронки конверсии — ключ к систематическому улучшению пути пользователя и увеличению доходов компании.

Что такое воронка конверсии и как её анализировать? | PrepBro