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

Какой research проводил на проекте?

1.2 Junior🔥 241 комментариев
#Опыт работы и проекты

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

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

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

Research на проектах Data Analyst

В моей практике research — это не опциональное дополнение, а критическая часть работы аналитика. Вот несколько примеров исследований, которые привели к конкретным решениям.

Research 1: Анализ причин высокой стоимости привлечения пользователя (CAC)

Контекст: Маркетинг говорит, что CAC = $50 за нового пользователя. Это высоко. Нужно понять, почему.

Вопросы, которые я задал:

  1. Откуда приходит трафик? — Все ли каналы одинаково дорогие?
  2. Кто на самом деле конвертируется? — Может быть, мы платим за мусорный трафик?
  3. Какая средняя жизнь пользователя? — Может, они уходят в течение недели?

Результат анализа:

-- Анализ 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, который я использую

  1. Гипотеза — что я хочу проверить?
  2. Данные — какие метрики мне нужны?
  3. Анализ — какой метод статистики применить?
  4. Статистическая значимость — может ли это быть случайностью?
  5. Вывод — что это означает для бизнеса?
  6. Действие — какое решение я рекомендую?

Выводы

Lучший research — это когда аналитик не просто отвечает на вопросы, а задаёт их сам. Когда видит паттерны, которые бизнес не видит. Когда умеет доказать гипотезу числами и статистикой, а не мнением.

Все эти исследования имели одну общую черту: они привели к конкретным действиям, которые улучшили бизнес. Это и есть смысл работы аналитика.