Какую задачу решал на проекте?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Проектная задача: Оптимизация воронки конверсии для SaaS платформы
Контекст проекта
Я работал на SaaS платформе для управления подписками с 50,000+ активных пользователей. Компания заметила, что конверсия с пробного периода в платных подписок упала с 35% до 18% за квартал. Это привело к потерям ~$500K в годовом доходе. Моя задача была понять причины и предложить рекомендации для восстановления конверсии.
Фаза 1: Анализ данных и выявление проблем
Первый шаг — построить воронку и найти узкие места:
WITH funnel AS (
SELECT
'trial_signup' as stage,
COUNT(DISTINCT user_id) as users
FROM users WHERE trial_started_at IS NOT NULL
UNION ALL
SELECT
'first_login',
COUNT(DISTINCT user_id)
FROM sessions
WHERE user_id IN (SELECT user_id FROM users WHERE trial_started_at IS NOT NULL)
UNION ALL
SELECT
'feature_usage',
COUNT(DISTINCT user_id)
FROM events
WHERE event_type = 'feature_used'
AND user_id IN (SELECT user_id FROM users WHERE trial_started_at IS NOT NULL)
UNION ALL
SELECT
'paid_conversion',
COUNT(DISTINCT user_id)
FROM subscriptions
WHERE user_id IN (SELECT user_id FROM users WHERE trial_started_at IS NOT NULL)
AND subscription_status = 'active'
)
SELECT
stage,
users,
LAG(users) OVER (ORDER BY stage) as prev_stage_users,
ROUND(100.0 * users / LAG(users) OVER (ORDER BY stage), 2) as conversion_percent
FROM funnel;
Результаты:
- Trial signup → First login: 65% (норма)
- First login → Feature usage: 42% (ниже, чем было 55%)
- Feature usage → Paid conversion: 22% (критично, было 38%)
Фаза 2: Углублённый анализ когорт
Использовал Python для анализа когорт по времени:
import pandas as pd
import numpy as np
# Загрузка данных когорт
df_cohorts = pd.read_sql("""
SELECT
DATE_TRUNC('week', trial_started_at) as cohort_week,
DATE_TRUNC('week', subscription_created_at) as paid_week,
COUNT(*) as users
FROM users u
LEFT JOIN subscriptions s ON u.user_id = s.user_id
WHERE trial_started_at >= '2023-01-01'
GROUP BY 1, 2
""", conn)
# Построение матрицы когорт
cohort_pivot = df_cohorts.pivot_table(
values='users',
index='cohort_week',
columns='paid_week',
aggfunc='sum'
)
# Расчёт конверсии по неделям
for col in cohort_pivot.columns:
cohort_pivot[col] = 100.0 * cohort_pivot[col] / cohort_pivot.iloc[:, 0]
print(cohort_pivot)
Найденные закономерности:
- Когорты от январь-марта: конверсия 35-40% (норма)
- Когорты от апреля: конверсия 18-22% (критическое падение)
- День падения конверсии совпадает с обновлением ценовой страницы
Фаза 3: Выявление корневой причины
Проанализировал поведение пользователей после обновления цен:
-- Сравнение поведения до и после обновления (1 апреля)
WITH user_events AS (
SELECT
u.user_id,
u.trial_started_at,
COUNT(CASE WHEN e.event_type = 'pricing_page_view' THEN 1 END) as pricing_views,
COUNT(CASE WHEN e.event_type = 'upgrade_button_click' THEN 1 END) as upgrade_clicks,
COUNT(CASE WHEN e.event_type = 'feature_demo_started' THEN 1 END) as demo_starts,
AVG(CASE WHEN e.event_type = 'feature_used' THEN 1 ELSE 0 END) as feature_engagement
FROM users u
LEFT JOIN events e ON u.user_id = e.user_id
GROUP BY u.user_id, u.trial_started_at
)
SELECT
CASE WHEN trial_started_at < '2024-04-01' THEN 'Before' ELSE 'After' END as period,
COUNT(*) as total_users,
ROUND(AVG(pricing_views), 2) as avg_pricing_views,
ROUND(AVG(upgrade_clicks), 2) as avg_upgrade_clicks,
ROUND(AVG(feature_engagement), 2) as avg_engagement
FROM user_events
GROUP BY 1;
Вывод:
- После обновления цен: количество переходов на pricing page упало на 30%
- Те, кто всё же смотрели цены: upgrade click rate упал с 12% на 5%
Фаза 4: Гипотезы и рекомендации
Разработал 3 гипотезы:
Гипотеза 1: Ценовой шок
- Средняя цена вросла на 25%
- Рекомендация: A/B тест с более мягким повышением (15% пошагово)
Гипотеза 2: Оформление цен
- Новый дизайн менее понятный (нет явного CTA)
- Рекомендация: добавить яркий "Upgrade" button рядом с ценой
Гипотеза 3: Нехватка фич в пробном периоде
- Пользователи не видят фичи за деньги, прежде чем платят
- Рекомендация: разрешить 10 дополнительных фичей на день 7-10 пробного периода
Фаза 5: Реализация и результаты
Реализовал гипотезу 2 (А/В тестирование дизайна):
-- Отслеживание результатов A/B теста
SELECT
variant,
COUNT(DISTINCT user_id) as users,
COUNT(DISTINCT CASE WHEN purchased = true THEN user_id END) as converters,
ROUND(100.0 * COUNT(DISTINCT CASE WHEN purchased = true THEN user_id END) / COUNT(DISTINCT user_id), 2) as conversion_rate,
ROUND(AVG(revenue), 2) as avg_revenue_per_user
FROM ab_test_metrics
WHERE test_name = 'pricing_page_redesign'
GROUP BY variant;
Результаты:
- Контрольная группа (старый дизайн): 5% конверсия
- Тестовая группа (новый дизайн с CTA): 8.5% конверсия
- Улучшение: +70% в конверсии с pricing page
- В масштабе: восстановление ~$350K в годовом доходе
Ключевые метрики
| Метрика | До | После | Изменение |
|---|---|---|---|
| Общая конверсия | 18% | 24% | +33% |
| Pricing page view → upgrade | 5% | 8.5% | +70% |
| Средний доход на пользователя | $42 | $48 | +14% |
| Время на pricing page | 45 сек | 65 сек | +44% (лучше) |
Навыки, которые я применил
- SQL анализ — воронки, когорты, временные ряды
- Python/Pandas — обработка и визуализация больших датасетов
- Статистика — A/B тесты, доверительные интервалы (95%)
- Бизнес-логика — понимание impact на доход
- Коммуникация — презентация результатов stakeholders
Эта задача показала, как правильный анализ данных может напрямую влиять на доходы компании.