Senior-грейд (3–5 лет): аналитика мессенджера VK — SQL, Python, статистика, A/B-тесты и продуктовые метрики на масштабе десятков миллионов пользователей
Фишка: VK сильно копает в статистику экспериментов: ratio-метрики, выбор между t-test и Mann-Whitney, CUPED, период расчёта DAU, split-единица (пользователь vs чат). Вопросы часто привязаны к продуктовому контексту мессенджера и соцсети.
| Этап | Длительность | Что проверяют |
|---|---|---|
| HR-скрининг | 30–45 мин | Мотивация, опыт 3–5 лет в продуктовой аналитике, знание стека (Python, SQL, BI), формат работы (гибрид/офис, Москва), общие вопросы о поиске работы |
| Техническое интервью | 60–90 мин | SQL-задачи (в т.ч. ClickHouse), Python (pandas, ETL), статистика и A/B-тесты: ratio-метрики, выбор критериев, валидация экспериментов, вопросы про DAU и сессионные метрики |
| Продуктовое / кейс-интервью | 60 мин | Разбор метрик продукта, ретроспективный анализ, дизайн эксперимента (split по пользователям vs чатам), прогнозирование трендов, презентация выводов для заказчика |
| Финал с руководителем / командой | 45–60 мин | Опыт сложных кросс-функциональных проектов, проактивность, soft skills, вопросы кандидата о продукте и команде |
Обязательный минимум
Плюсом будет
Была ли необходимость оптимизировать запросы?
Опиши конкретный кейс: EXPLAIN, индексы, партиционирование, денормализация, материализованные вьюхи. Для VK релевантен ClickHouse — MergeTree, ORDER BY, PREWHERE.
Работал ли с ClickHouse?
Колоночное хранение, быстрые агрегации на больших объёмах, отличие от row-based (MySQL/PostgreSQL). Типичные паттерны: event-логи, сессии, воронки.
В чём разница между ClickHouse и MySQL?
ClickHouse — OLAP, колоночный, append-heavy, агрегации на миллиардах строк. MySQL — OLTP, строковый, транзакции, частые UPDATE. Для аналитики событий — ClickHouse.
Фишка: В VK аналитика строится на больших объёмах событий — ожидай вопросы про ClickHouse и оптимизацию тяжёлых запросов.
Ловушка: Не путай COUNT(DISTINCT user_id) за день и за сессию — разные определения DAU и сессионных метрик.
Какие задачи решал на Python?
Структура: источник данных → трансформация (pandas) → валидация → загрузка в DWH/витрину. Упомяни автоматизацию расчёта метрик и пайплайн A/B-теста.
Как построить пайплайн проверки A/B-теста и расчёта метрик?
Шаги: сбор сырых событий → атрибуция к эксперименту → фильтрация (боты, новички) → агрегация по юниту рандомизации → статистический тест → отчёт.
Совет: Покажи знание pandas: groupby, merge, pivot, работа с датами (resample). Для ETL — Airflow/внутренние оркестраторы, идемпотентность.
По каким метрикам можно посмотреть, что нужен мессенджер в социальной сети?
DAU/MAU мессенджера, доля пользователей с ≥1 сообщением, retention D1/D7/D30, среднее число сообщений на пользователя, cross-usage (пользователи и лента, и чаты), cannibalization vs synergy с основным продуктом.
В чём разница между просмотренными постами за раз, за сессию и за день?
За раз — в одном непрерывном скролле/визите. За сессию — между открытием и закрытием приложения (таймаут 30 мин). За день — календарные сутки UTC/локаль. Разные агрегации дают разные значения.
Для каждой ли метрики характерна сезонность?
Нет. DAU/сессии — да (выходные, праздники). Конверсия в покупку — слабее. ARPPU — зависит от продукта. Всегда проверяй YoY и day-of-week эффект.
В чём разница между ARPPU и GMV?
GMV — общий объём транзакций (gross). ARPPU — средняя выручка на платящего пользователя (GMV / paying users). ARPU — на всех пользователей.
В чём разница между приёмочной и информационной метрикой?
Приёмочная (primary) — по ней принимается решение о запуске. Информационная (secondary/guardrail) — мониторинг побочных эффектов, не для go/no-go.
Что такое CR1?
Conversion Rate первого шага воронки — доля пользователей, совершивших целевое действие на первом этапе (контекст зависит от продукта, уточни определение в кейсе).
Ловушка: Среднее по пользователям ≠ ratio-метрика. Среднее время сессии — не ratio; CTR = clicks/impressions — ratio.
Фишка: VK часто спрашивает про метрики в контексте мессенджера внутри экосистемы — думай про cross-product эффекты.
Какие A/B-тесты проводил?
Структура ответа: гипотеза → метрики (primary + guardrails) → дизайн (юнит, размер выборки, длительность) → результат → решение. Упомяни MDE и проверку SRM.
Делаешь ли A/B тесты?
Да/нет с примерами. На Senior — полный цикл: от формулировки гипотезы до рекомендации продукту.
Как будешь находить статистическую значимость конверсии между группами A и B?
Проверь размер выборки и SRM. Для конверсии: z-test пропорций или χ². При малых выборках — точный тест Фишера. Укажи α, power, MDE.
Как будешь валидировать результат A/B теста?
SRM, AA-тест, стабильность по сегментам, novelty effect, перекрёстное загрязнение, длительность (полные недели), guardrail-метрики, CUPED для снижения дисперсии.
В какой период проводится тест для DAU?
Минимум 1–2 полные недели (учёт day-of-week). Для DAU — календарный день, не сессия. Учитывай ramp-up и novelty.
Зависит ли числитель от знаменателя в ratio-метрике?
В ratio X/Y числитель и знаменатель обычно зависимы (один пользователь даёт и X, и Y). Нельзя применять обычный t-test к ratio без дельта-метода или бутстрапа.
Все ли что берётся средним значением является ratio-метрикой?
Нет. Среднее время сессии — average, не ratio. Ratio — отношение двух агрегатов (CTR, ARPU, конверсия).
В чём разница между ratio-метрикой и не ratio-метрикой для средних значений?
Ratio: сумма числителей / сумма знаменателей (правильная агрегация). Среднее средних по пользователям — другая метрика (Simpson's paradox).
Достаточно ли того, что оба распределения нормальные?
Нет. Нужны ещё независимость наблюдений, равенство дисперсий (или Welch), достаточный размер выборки. Для ratio — специальные методы.
Когда использовал Mann-Whitney вместо t-теста?
Непараметрический критерий: тяжёлые хвосты, выбросы, малые выборки, нарушение нормальности. Сравнивает ранги, не средние.
В чём разница между параметрическими и непараметрическими критериями?
Параметрические (t-test, z-test) — предположения о распределении. Непараметрические (Mann-Whitney, Wilcoxon) — без них, но меньше мощность.
Будешь делать split по чатам или по пользователям?
По пользователям — если эффект на уровне пользователя. По чатам — если фича на уровне группового чата (network effect). Обоснуй юнит рандомизации.
Всегда ли вырастет конверсия, если она выросла в A/B тесте?
Нет. Статистическая значимость ≠ практическая. Проверь MDE, доверительный интервал, guardrails, долгосрочный эффект, сегменты.
Как реализуется дизайн теста?
Гипотеза → primary metric → MDE → power analysis → длительность → юнит рандомизации → стратификация → план анализа (в т.ч. CUPED).
Были ли стратегии принятия решения в последнем A/B тесте?
Pre-defined критерии: значимость primary + guardrails в норме + бизнес-impact > cost. Escalation при конфликте метрик.
Есть ли A/B платформа на нынешней работе?
Опиши инструмент (внутренний/Optimizely/LaunchDarkly). Если нет — покажи, как делал вручную: сплит, логирование, расчёт.
Фишка: VK — один из самых глубоких интервьюеров по A/B в РФ. Готовься к ratio-метрикам, выбору критерия и валидации.
Ловушка: Не останавливайся на p-value. Покажи доверительный интервал, размер эффекта и бизнес-интерпретацию.
Совет: Упомяни CUPED, switchback и региональные тесты — это плюс в вакансии.
Будет ли относиться метка к каналу установки, если пользователь запустит сессию через 3 дня или через 40 дней после установки?
Зависит от модели атрибуции: last-click, first-click, 7-day/30-day window. После окна атрибуции — organic или re-engagement.
В чём разница между web-аналитикой и мобильной аналитикой?
Мобильная: install/open/session events, push, offline, IDFA/GAID, deeplinks. Web: pageviews, cookies, referrer. Разные инструменты и определения сессии.
В чём разница между путём клиента в web и в мобильном приложении?
Web — линейные pageviews, URL. Mobile — screen views, background/foreground, deeplinks, push-driven returns.
Совет: Знай определения session timeout и способы дедупликации пользователей (device_id vs user_id).
Расчёт конверсии в отправку первого сообщения
Дана таблица events(user_id, event_name, event_time), где event_name ∈ {'app_open', 'message_sent'}. Напиши SQL-запрос: для когорты пользователей, впервые открывших приложение в январе 2026, посчитай конверсию в отправку хотя бы одного сообщения в течение 7 дней после первого открытия.
WITH first_open AS (
SELECT user_id, MIN(event_time) AS first_open_time
FROM events
WHERE event_name = 'app_open'
AND event_time >= '2026-01-01' AND event_time < '2026-02-01'
GROUP BY user_id
),
converted AS (
SELECT fo.user_id
FROM first_open fo
JOIN events e ON e.user_id = fo.user_id
AND e.event_name = 'message_sent'
AND e.event_time BETWEEN fo.first_open_time AND fo.first_open_time + INTERVAL '7 days'
GROUP BY fo.user_id
)
SELECT COUNT(DISTINCT c.user_id)::float / COUNT(DISTINCT fo.user_id) AS conversion_7d
FROM first_open fo
LEFT JOIN converted c ON c.user_id = fo.user_id;Сложность: O(n) с индексом по (user_id, event_time)
DAU по дням с оконной функцией
Таблица sessions(user_id, session_date). Напиши SQL: DAU за каждый день января 2026 и 7-дневное скользящее среднее DAU.
WITH daily AS ( SELECT session_date, COUNT(DISTINCT user_id) AS dau FROM sessions WHERE session_date BETWEEN '2026-01-01' AND '2026-01-31' GROUP BY session_date ) SELECT session_date, dau, AVG(dau) OVER (ORDER BY session_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS dau_7d_ma FROM daily ORDER BY session_date;
Сложность: O(n log n) при сортировке
Проверка SRM в A/B-тесте
В эксперименте 10 000 пользователей должны были быть разделены 50/50 между control и treatment. Фактически: control — 4 850, treatment — 5 150. Как проверить Sample Ratio Mismatch и что делать при отклонении?
χ² test на соответствие ожидаемым пропорциям: expected 5000/5000, observed 4850/5150. χ² = Σ(O-E)²/E ≈ 9.0, df=1, p < 0.01 — SRM detected. Действия: не доверять результатам, искать причину (баг сплита, фильтрация, логирование), перезапустить тест.
Сложность: O(1)
Расчёт CTR как ratio-метрики
Группа A: 1 000 000 показов, 50 000 кликов. Группа B: 1 000 000 показов, 52 000 кликов. Как корректно проверить значимость различия CTR?
CTR_A = 0.05, CTR_B = 0.052. Z-test для двух пропорций: z = (p_B - p_A) / sqrt(p_pooled × (1-p_pooled) × (1/n_A + 1/n_B)), где p_pooled = (50000+52000)/2000000. Альтернатива: бутстрап ratio на уровне пользователей. Не применять t-test к per-user CTR без учёта зависимости.
Сложность: O(1) для агрегированных данных
Каркас ответа
3 дня
7 дней
14 дней
| Блок | Готов, если... |
|---|---|
| SQL | можешь написать запрос на DAU, воронку и когортную конверсию с оконными функциями без подсказок |
| A/B-тесты | можешь объяснить дизайн теста, SRM, выбор критерия для ratio-метрики и валидацию результата |
| Продуктовые метрики | различаешь DAU/MAU/retention, сессионные и дневные агрегации, primary vs guardrail метрики |
| Статистика | знаешь когда t-test, z-test, Mann-Whitney и χ²; понимаешь p-value vs размер эффекта |
| Python/ETL | можешь описать пайплайн от сырых событий до витрины метрик |
| Продуктовые кейсы | можешь за 10 минут разобрать падение метрики или оценить новую фичу по framework из гайда |
| Soft skills | есть 3 STAR-кейса про кросс-функциональную работу и донесение выводов до заказчика |
В день собеседования