Какой research проводил на проекте?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Research на проектах Data Analyst
В моей практике research — это не опциональное дополнение, а критическая часть работы аналитика. Вот несколько примеров исследований, которые привели к конкретным решениям.
Research 1: Анализ причин высокой стоимости привлечения пользователя (CAC)
Контекст: Маркетинг говорит, что CAC = $50 за нового пользователя. Это высоко. Нужно понять, почему.
Вопросы, которые я задал:
- Откуда приходит трафик? — Все ли каналы одинаково дорогие?
- Кто на самом деле конвертируется? — Может быть, мы платим за мусорный трафик?
- Какая средняя жизнь пользователя? — Может, они уходят в течение недели?
Результат анализа:
-- Анализ CAC по каналам
WITH channel_analysis AS (
SELECT
utm_source,
COUNT(DISTINCT user_id) as new_users,
COUNT(DISTINCT CASE WHEN status = 'active' THEN user_id END) as active_users,
COUNT(DISTINCT CASE WHEN first_purchase_date IS NOT NULL THEN user_id END) as converted_users,
SUM(marketing_spend) as channel_spend,
ROUND(SUM(marketing_spend) / NULLIF(COUNT(DISTINCT user_id), 0), 2) as cac_per_user,
ROUND(SUM(marketing_spend) / NULLIF(COUNT(DISTINCT CASE WHEN first_purchase_date IS NOT NULL THEN user_id END), 0), 2) as cac_per_converted,
EXTRACT(DAY FROM AVG(CURRENT_DATE - created_at)) as avg_days_active
FROM users
GROUP BY utm_source
)
SELECT * FROM channel_analysis ORDER BY cac_per_converted DESC;
-- Результат выявил:
-- utm_source new_users converted cac_per_converted avg_days_active
-- google 3500 1400 $25 87 days
-- facebook 2800 280 $140 14 days
-- tiktok 1200 150 $200 8 days
-- direct 400 350 $5 120 days
Вывод: Основная проблема — Facebook и TikTok дают мусорный трафик. Пользователи уходят быстро. Рекомендация: переключить бюджет на Google и Direct.
Research 2: Выявление когда пользователи "дозревают" до платной подписки
Контекст: Компания хотела оптимизировать момент, когда показывать upgrade-prompts.
Гипотеза: Есть критический момент, после которого вероятность платить резко вырастает.
Анализ:
import pandas as pd
import matplotlib.pyplot as plt
# Для каждого пользователя: сколько дней прошло до первой платной подписки
df = pd.read_sql("""SELECT
u.id,
EXTRACT(DAY FROM (s.created_at - u.created_at)) as days_to_conversion
FROM users u
LEFT JOIN subscriptions s ON u.id = s.user_id
WHERE s.status = 'active'
""", conn)
# Распределение по дням
conversion_by_day = df.groupby(pd.cut(df['days_to_conversion'], bins=30)).size()
print("Когда пользователи становятся платящими:")
print(conversion_by_day)
# Результат показал БОЛЬШОЙ скачок на день 7 и день 30
# День 7: 15% конверсия
# День 14: 28% конверсия
# День 30: 42% конверсия ← критический момент!
# Дни 30+: рост замедляется
Вывод: Нужно показывать upgrade-prompt на день 7 (когда пользователь активен) и день 30 (критический moment). Это увеличило конверсию на 34%.
Research 3: Сегментация причин churn
Контекст: 5% пользователей в месяц уходит. Нужно понять почему — чтобы это было адресным.
Методология: Cohort + RFM анализ
-- Выявляем "churned" пользователей
WITH churned_users AS (
SELECT
u.id,
u.utm_source,
MAX(a.action_at) as last_action,
EXTRACT(DAY FROM CURRENT_DATE - MAX(a.action_at)) as days_inactive,
COUNT(DISTINCT a.id) as total_actions,
COUNT(DISTINCT CASE WHEN action_type = 'purchase' THEN a.id END) as purchase_count,
COALESCE(SUM(o.amount), 0) as lifetime_value
FROM users u
LEFT JOIN actions a ON u.id = a.user_id
LEFT JOIN orders o ON u.id = o.user_id
WHERE EXTRACT(DAY FROM CURRENT_DATE - MAX(a.action_at)) > 90 -- inactive > 90 дней
GROUP BY u.id, u.utm_source
)
SELECT
CASE
WHEN days_inactive > 180 AND purchase_count = 0 THEN 'Never engaged'
WHEN purchase_count >= 1 AND lifetime_value < 100 THEN 'Low-value churned'
WHEN purchase_count >= 5 AND lifetime_value > 500 THEN 'High-value churned'
ELSE 'Other'
END as churn_segment,
COUNT(*) as user_count,
ROUND(AVG(lifetime_value), 2) as avg_ltv,
ROUND(AVG(EXTRACT(DAY FROM CURRENT_DATE - u.created_at)), 0) as avg_lifetime_days
FROM churned_users cu
CROSS JOIN users u WHERE u.id = cu.id
GROUP BY churn_segment;
Результат выявил 3 типа churn:
- Never engaged (45%) — зарегистрировались, но так ничего не сделали. Причина: плохой onboarding
- Low-value churned (40%) — пробовали, но не полюбили. Причина: не нашли value
- High-value churned (15%) — были платящими, ушли. Причина: нужно интервьюировать
Действие: Для каждого сегмента своя retention-программа.
Research 4: Корреляционный анализ между фичами и retention
Контекст: Какие фичи приложения наиболее связаны с удержанием пользователей?
Анализ:
import pandas as pd
from scipy.stats import pearsonr
# Собираем user-level метрики
df = pd.read_sql("""SELECT
u.id,
-- Фичи (использование)
COUNT(DISTINCT CASE WHEN feature = 'analytics' THEN DATE(a.action_at) END) as days_used_analytics,
COUNT(DISTINCT CASE WHEN feature = 'exports' THEN a.id END) as exports_count,
COUNT(DISTINCT CASE WHEN feature = 'api' THEN a.id END) as api_calls,
COUNT(DISTINCT CASE WHEN feature = 'integrations' THEN a.id END) as integrations_count,
-- Целевая переменная: retained ли пользователь спустя 6 месяцев
MAX(CASE WHEN a.action_at >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) THEN 1 ELSE 0 END) as is_retained
FROM users u
LEFT JOIN actions a ON u.id = a.user_id
GROUP BY u.id
""", conn)
# Корреляция каждой фичи с retention
features = ['days_used_analytics', 'exports_count', 'api_calls', 'integrations_count']
for feature in features:
corr, p_value = pearsonr(df[feature], df['is_retained'])
print(f"{feature}: correlation={corr:.3f}, p-value={p_value:.4f}")
# Результат:
# days_used_analytics: correlation=0.651, p-value=0.0000
# integrations_count: correlation=0.478, p-value=0.0001
# api_calls: correlation=0.234, p-value=0.0523
# exports_count: correlation=0.089, p-value=0.4221
Вывод: Analytics — это killer feature. Пользователи, которые используют аналитику, остаются. Рекомендация: сделать analytics первым экраном при onboarding.
Research 5: A/B тест дизайна (Experimentation)
Контекст: Нужно проверить, улучшит ли новый CTA button (call-to-action) конверсию.
Дизайн эксперимента:
from scipy.stats import chi2_contingency
# Контрольная группа (старый дизайн) vs Тестовая (новый дизайн)
contingency_table = pd.DataFrame({
'Clicked': [850, 920], # старый дизайн: 850, новый: 920
'Not clicked': [9150, 9080] # старый дизайн: 9150, новый: 9080
}, index=['Control', 'Treatment'])
# Chi-square тест (для категорических данных)
chi2, p_value, dof, expected = chi2_contingency(contingency_table)
control_ctr = 850 / (850 + 9150) # 0.085 (8.5%)
treatment_ctr = 920 / (920 + 9080) # 0.0920 (9.2%)
print(f"Control CTR: {control_ctr:.2%}")
print(f"Treatment CTR: {treatment_ctr:.2%}")
print(f"Improvement: {(treatment_ctr - control_ctr) / control_ctr * 100:.1f}%")
print(f"P-value: {p_value:.4f}")
if p_value < 0.05:
print("✓ Статистически значимый результат!")
else:
print("✗ Результат может быть из-за случайности")
# Результат: p-value = 0.032 (значимо!), улучшение на 8.2%
Вывод: Новый дизайн лучше. Его нужно развернуть всем пользователям.
Research 6: Benchmarking против конкурентов
Контекст: Как мы себя чувствуем по сравнению с конкурентами?
Метрики для сравнения:
Метрика Наша компания Конкурент A Конкурент B Industry median
────────────────────────────────────────────────────────────────────────────────
User Retention (7d) 62% 58% 71% 65%
Avg Revenue/User $45 $52 $38 $44
Time to payback CAC 18 месяцев 24 месяца 12 месяцев 16 месяцев
Churn Rate 4.2% 5.1% 2.8% 4.0%
NPS Score 42 35 51 40
Анализ: Мы хороши в retention (62% vs 65%), но отстаём в revenue per user ($45 vs $44 industry). Конкурент B лучше во всём. Нужно исследовать их монетизацию.
Процесс research, который я использую
- Гипотеза — что я хочу проверить?
- Данные — какие метрики мне нужны?
- Анализ — какой метод статистики применить?
- Статистическая значимость — может ли это быть случайностью?
- Вывод — что это означает для бизнеса?
- Действие — какое решение я рекомендую?
Выводы
Lучший research — это когда аналитик не просто отвечает на вопросы, а задаёт их сам. Когда видит паттерны, которые бизнес не видит. Когда умеет доказать гипотезу числами и статистикой, а не мнением.
Все эти исследования имели одну общую черту: они привели к конкретным действиям, которые улучшили бизнес. Это и есть смысл работы аналитика.