Собеседование аналитика данных в 2026 — это уже не «расскажите про себя». Это 3-4 раунда: SQL-задача live, Python-задача live, A/B-кейс с цифрами, разбор продуктовой метрики. Если хотя бы один раунд провалил — оффера не будет.
Я был на 40+ собесах за последние 2 года (Яндекс, Ozon, Сбер, Авито, Тинькофф, VK, X5, Wildberries, Lamoda, OZON Tech, МегаФон). В этом гайде — 150+ реальных вопросов которые повторяются. К каждой теме — ссылка на тренажёр zasqlpython.ru где можно сразу попробовать на реальных данных.
Структура собеса аналитика в РФ-компаниях 2026
В большинстве компаний (Yandex, Ozon, Сбер, Тинькофф) собес выглядит так:
| Раунд | Что | Длительность |
|---|---|---|
| 1. Скрининг | HR, мотивация, ожидания по зарплате | 30 мин |
| 2. SQL live | 1-2 задачи в общем доке, JOIN/window/CTE | 45-60 мин |
| 3. Python live | pandas/numpy задача + код по статистике | 45-60 мин |
| 4. Продуктовый | Кейс «упал DAU — что делать», A/B дизайн | 60 мин |
| 5. Финал | Метрики, кейсы из прошлого опыта, team fit | 30-45 мин |
В Yandex 4-5 технических раундов, в Сбере проще — 2 раунда. Готовиться по всем 4 темам обязательно, иначе один раунд утопит.
→ Открыть AI мок-собес — отрабатывай ответы на реальных вопросах из бесплатного пула.
SQL — 50 вопросов (8 разделов)
SQL — это минимум 1 раунд на любом собесе аналитика. Без SQL на middle не возьмут. Senior проверят на сложных оконных функциях, performance, дедлоках.
JOINs и связи таблиц (10 вопросов)
Базовые вопросы которые задают всегда:
- Чем INNER JOIN отличается от LEFT/RIGHT/FULL OUTER JOIN? — наизусть, объясни на Венна
- Что вернёт LEFT JOIN если справа NULL? — все строки слева, NULL вместо правых полей
- Как найти строки которые есть в таблице A но нет в B? — LEFT JOIN + WHERE b.id IS NULL (anti-join)
- CROSS JOIN — когда нужен и в чём опасность? — генерация календаря, но осторожно с большими таблицами (декартово произведение)
- SELF JOIN — где встречается? — manager-employee chain, найти товары в одной категории
- NATURAL JOIN — почему его не рекомендуют? — implicit столбцы, ломается при добавлении новых полей
- Что быстрее: JOIN или подзапрос? — обычно JOIN (план запроса оптимальнее), но зависит от индексов
- Как сделать FULL OUTER JOIN в MySQL? — UNION LEFT и RIGHT (MySQL не поддерживает FULL)
- LATERAL JOIN — что это? — для каждой строки слева выполняется подзапрос справа (top-N per group)
- Дай пример WHEN LEFT JOIN превращается в INNER — когда добавляешь условие на правую таблицу в WHERE (не в ON)
→ Попрактиковаться: 37 SQL JOIN задач в тренажёре
Window-функции (10 вопросов)
Сейчас на собесах window-функции — must have. Без них на middle не возьмут.
- ROW_NUMBER, RANK, DENSE_RANK — отличия? — ROW_NUMBER уникальный, RANK даёт одинаковый при равных + пропуск, DENSE_RANK одинаковый без пропуска
- Как найти 2-ю по величине зарплату? —
DENSE_RANK() OVER (ORDER BY salary DESC)+ WHERE = 2 - PARTITION BY vs GROUP BY — в чём разница? — PARTITION сохраняет все строки, GROUP схлопывает в одну строку на группу
- LAG/LEAD — для чего? — сравнение с предыдущей/следующей строкой (MoM, разрыв между событиями)
- ROWS vs RANGE в window frame — ROWS по физическим строкам, RANGE по значениям ORDER BY
- Running total через window —
SUM(amount) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - NTILE — для чего? — разделить на N квантилей (RFM-скоринг, A/B-разбивка)
- FIRST_VALUE/LAST_VALUE — частая ошибка — нужно явно указать frame, иначе LAST_VALUE = текущая строка
- Что такое default frame? — RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW (если ORDER BY есть)
- Как найти топ-3 в каждой категории? —
ROW_NUMBER() OVER (PARTITION BY cat ORDER BY x DESC)+ WHERE ≤ 3
→ 77 задач на window-функции в тренажёре — реальная PostgreSQL-песочница
CTE, подзапросы, рекурсия (8 вопросов)
- WITH vs подзапрос — что лучше? — CTE читабельнее, но в PG может быть optimization fence; в современных версиях inlined
- Можно ли использовать одну CTE дважды? — да, в этом её преимущество (один раз вычислил → 2 раза использовал)
- Recursive CTE — как работает? — anchor + recursive step + UNION ALL, остановка при отсутствии новых строк
- Пример recursive CTE — manager-employee chain до CEO, hierarchy categories, fibonacci
- Подзапрос в SELECT vs JOIN —
SELECT (SELECT max(x) FROM ...)— простой, но медленный если выполняется per row - Коррелированный подзапрос — внутренний зависит от внешней строки, обычно медленный
- EXISTS vs IN — что быстрее? — EXISTS останавливается на первой найденной строке, IN материализует всё
- NOT IN ловушка — если в подзапросе есть NULL, NOT IN вернёт пусто. Используй NOT EXISTS
→ 39 задач на CTE + 39 на подзапросы
Агрегация и GROUP BY (7 вопросов)
- HAVING vs WHERE — в чём разница? — WHERE до агрегации (по строкам), HAVING после (по группам)
- **COUNT(*) vs COUNT(col) vs COUNT(DISTINCT col)** — *: все строки; col: NOT NULL; DISTINCT: уникальные NOT NULL
- Conditional aggregation —
SUM(CASE WHEN x THEN 1 ELSE 0 END)— counts с условием в одной агрегации - GROUPING SETS / ROLLUP / CUBE — multi-grain отчёты одним запросом
- Зачем нужен COALESCE в агрегации? — заменить NULL в результате на 0 / другое значение
- MEDIAN в SQL — нет встроенной в стандарте, через
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY x)(PG) - Percentile через window без PERCENTILE_CONT —
ROW_NUMBER() / (COUNT(*) OVER ()) → найти первое >= 0.5
Funnel и Retention (10 вопросов)
Самый частый продуктовый кейс — посчитать воронку и retention.
- Как посчитать воронку view→cart→purchase? — JOIN events по user_id, MIN(event_time) per stage, последовательность
- D1/D7/D30 retention — что это? — % cohort у которых был event через 1, 7, 30 дней после signup
- Cohort retention triangle — pivot по [cohort_week × age_days]
- Stickiness DAU/MAU —
AVG(DAU) / MAU— % daily active от monthly active - Активация / aha-moment — первое значимое действие пользователя (3 события за 7 дней и т.д.)
- Churn — что считать? — нет события N дней / нет оплаты в следующем периоде
- N-day rolling retention —
JOIN events WHERE event_date - signup_date = N - Funnel drop-off — где терять метрику? — обычно view→cart (40-60% drop)
- Cohort vs snapshot retention — cohort: фиксированная группа во времени; snapshot: текущее состояние
- Bounce rate в SQL — сессии с count(*) = 1 после сессионизации
→ 34 задачи на retention + 30 на funnel
Sessionization и Gaps-and-Islands (5 вопросов)
- Как разделить события на сессии (timeout 30 мин)? — LAG, разрыв > 30 мин = новая сессия, накопительная SUM флагов
- Gaps-and-islands — что это? — найти непрерывные последовательности дат/значений
- Трюк gaps-and-islands —
date - ROW_NUMBER()стабилен внутри непрерывной серии → GROUP BY этой разности - Самая длинная серия активных дней — gaps-and-islands + MAX(count) per user
- Срывы streak —
LEAD(date) - date > 1= разрыв серии
→ 7 задач на sessionization + 8 на gaps-and-islands
Python — 40 вопросов (4 раздела)
pandas базовый (10)
- DataFrame vs Series — отличия? — Series: 1D; DataFrame: 2D таблица из Series
- loc vs iloc — loc: label-based; iloc: integer position
- Как объединить два df? —
pd.concat(по строкам) vspd.merge(по ключу как SQL JOIN) - groupby() — что возвращает? — DataFrameGroupBy объект; затем .agg(), .transform(), .apply()
- Разница agg vs apply vs transform — agg агрегирует (n→1); transform сохраняет размер (n→n); apply гибкий
- fillna() — стратегии заполнения NULL — константа, mean, median, forward fill (ffill), backward fill
- Как удалить дубли по конкретной колонке? —
df.drop_duplicates(subset=['col'], keep='last') - Pivot vs melt — pivot длинный → широкий; melt широкий → длинный
- value_counts() vs groupby().count() — value_counts: на Series; groupby по нескольким колонкам
- Как ускорить операции на pandas? — векторизация (NO .apply), Categorical для строк, chunked read
→ pandas задачи в Python-тренажёре
pandas advanced (10)
- Multiindex — когда полезен? — иерархические данные (year×month×category)
- resample() — для чего? — переагрегация time-series в другой период (день→неделя)
- rolling() vs expanding() — rolling: фикс окно; expanding: с начала до текущей
- shift() — где используется? — LAG из SQL: предыдущее значение в группе
- Window-функция в pandas —
.rolling(),.expanding(),.ewm() - Merge с suffixes — зачем? — конфликт имён колонок:
pd.merge(a, b, on='id', suffixes=['_a', '_b']) - Categorical type — преимущества? — экономия памяти (5-10x) для повторяющихся строк
- chunksize при read_csv — для файлов > RAM, итерация по чанкам
- Memory profiling pandas —
df.info(memory_usage='deep')+ downcast int/float - Pandas vs Polars — когда переходить? — на 50M+ строк polars быстрее в 5-10 раз (lazy + Rust)
→ Python тренажёр — 204 pandas задач
A/B-тесты на scipy (10)
- Стандартное A/B на конверсию — какой тест? — z-test для пропорций (или chi-square)
- scipy функция для z-test пропорций? —
statsmodels.stats.proportion.proportions_ztest - Welch's t-test vs Student's t-test — Welch не требует равных дисперсий, в реальности используй его
- Bootstrap CI для медианы — np.random.choice n раз, percentile [2.5, 97.5]
- Поправка Бонферрони —
min(p × n_tests, 1.0)— для multiple testing - Benjamini-Hochberg vs Bonferroni — BH контролирует FDR, Bonferroni FWER. BH мягче.
- Delta-method для ratio-метрик — линеаризация ratio через ряд Тейлора (для GMV/sessions)
- CUPED variance reduction — вычитаем линейную часть y, объяснённую pre-experiment covariate
- Sample Ratio Mismatch (SRM) —
chi-squareс df=1 на 50/50 распределение групп - Sequential testing (mSPRT/SPRT) — для peek-based A/B без inflate alpha
→ A/B практика в Python-тренажёре
Алгоритмы и stdlib (10)
- Two Sum за O(n) — hash map: для каждого x ищем (target - x)
- Reverse linked list — итеративно (prev, curr, next swap) или рекурсивно
- Sliding Window Maximum — monotonic deque за O(n)
- LRU Cache — OrderedDict или hash + doubly linked list
- Median from Data Stream — two heaps (max + min)
- Coin Change — DP
dp[a] = min(dp[a - c] + 1), greedy НЕ работает - Word Break — DP + memoization
- Top K Frequent — heap O(n log k) или bucket sort O(n)
- Сложность list vs set vs dict в Python — list
in= O(n); set/dictin= O(1) avg - GIL и threads vs processes — threads для I/O bound, processes для CPU bound (numpy NOT отпускает GIL)
→ 100+ алгоритмических задач в Python-тренажёре
A/B-тесты — 30 вопросов
A/B продуктовый — это самый сложный раунд на синьорных собесах. Даже миддл-аналитики тут плавают.
Базовая теория (10)
- Что такое H₀ и H₁? — H₀: нет эффекта; H₁: есть эффект
- Ошибки I и II рода — I: H₀ верна, отвергли (false positive); II: H₁ верна, не отвергли (false negative)
- Альфа vs мощность (power) — α: вероятность ошибки I рода; power = 1 - β
- p-value — что это? — вероятность увидеть такой или более экстремальный результат при верной H₀
- MDE (Minimum Detectable Effect) — минимальный эффект который тест может выявить при заданных n, α, power
- Sample size — от чего зависит? — base conversion, MDE, α, power, односторонний/двусторонний
- Односторонний vs двусторонний тест — двусторонний по умолчанию (treatment может быть и хуже)
- Peeking problem — если смотреть p-value в течение теста и останавливать → inflated α
- A/A test — зачем? — sanity check randomizer (если p-value < 0.05 часто → бага в split)
- Confidence Interval vs p-value — CI содержит больше информации (величина эффекта + неопределённость)
CUPED, sequential, advanced (10)
- CUPED — зачем нужен? — variance reduction → меньше n нужно для той же мощности
- CUPED формула —
y* = y - θ(x - x̄), где θ = cov(y,x)/var(x) - Какие переменные подходят как covariate для CUPED? — pre-experiment outcome (GMV до эксперимента)
- mSPRT — что это? — sequential test для peek-based, контролирует α
- Group Sequential Design — заранее запланированные interim looks с corrected α (Pocock, OBF)
- CUPED vs stratification — CUPED через регрессию; strat через bucketing
- Bayesian A/B — Beta-Binomial conjugate prior + posterior distribution
- Уровень рандомизации — user vs session vs request: user правильнее для retention метрик
- Network effects в A/B — двусторонний рынок (Uber: пассажиры vs водители)
- Switchback design — для двустронних рынков: меняем treatment по времени, не по юзерам
Метрики, дизайн, ошибки (10)
- Guardrail метрики — что НЕ должно сильно падать (например, время загрузки, retention)
- North Star метрика — главная метрика бизнеса (GMV для маркетплейса, Time-to-X для соц-сети)
- OKR vs KPI — OKR: качественная цель + измеримые KR; KPI: конкретный показатель
- Cannibalization — выигрыш в одной метрике за счёт другой (push больше → conversion + но retention −)
- Goodhart's law — «когда метрика становится целью, она перестаёт быть хорошей метрикой»
- Simpson's paradox — тренд внутри подгрупп противоположен тренду в общей популяции
- Counterfactual baseline — что бы было без эксперимента (нужен для difference-in-differences)
- Novelty / primacy effects — новизна → временный лифт; принцип знакомого → drop в начале
- Hawthorne effect — пользователи ведут себя иначе зная что наблюдают
- Treatment heterogeneity — эффект разный для разных сегментов (рассмотри CATE = conditional ATE)
→ Тестовые задания A/B-тестов в продукте
Метрики — 30 вопросов (3 раздела)
Продуктовые метрики (10)
- DAU, WAU, MAU — определения — уникальные юзеры за день/неделю/месяц
- Когда WAU лучше DAU? — для бизнесов где не каждый день заходят (банк, инвестиции)
- Stickiness — формула — DAU/MAU. Норма ~0.1-0.2; топ сервисы (соцсети) ~0.5+
- Retention vs Churn — Retention = % оставшихся; Churn = 1 - Retention
- Cohort retention curve — что важно? — D1 высокий (>40%) → D7 (>15%) → D30 (>5%) для B2C
- Activation rate — % новых пользователей дошедших до aha-moment в первые N дней
- Power user curve — % MAU использующих продукт ≥ N дней за месяц
- NPS / CSAT / CES — отличия — NPS: лояльность 0-10; CSAT: удовлетворённость 1-5; CES: усилие 1-7
- Vanity metrics — registrations, downloads — не отражают реальную ценность
- Counter-metrics — что нужно мерить чтобы не сломать другое (push: opens VS unsubscribes)
→ 368 продуктовых метрик с формулами
Unit-экономика (10)
- LTV — формула —
ARPU / churn(простая); илиΣ(ARPU × retention[t]) / (1+discount_rate)^t - CAC — что включать? — все маркетинговые расходы / новых клиентов (sales, ads, контент)
- LTV/CAC ratio — норма ≥ 3, иначе бизнес unprofitable
- Payback period — за сколько месяцев накопленная gross margin покрывает CAC. Цель ≤ 12 мес для SaaS
- AOV vs ARPU vs ARPPU — AOV: per order; ARPU: per all users; ARPPU: per paying users
- Contribution margin — revenue - variable costs (НЕ включает overhead/fixed)
- Rule of 40 — growth% + FCF margin% ≥ 40 (для SaaS зрелости)
- Magic Number — net new ARR / sales+marketing spend; ≥ 1 → эффективное привлечение
- NRR (Net Revenue Retention) — (start + expansion - downgrade - churn) / start
- Quick Ratio (LTV) — (new + expansion) / (churn + downgrade); ≥ 4 → здоровый рост
→ Unit-экономика метрики с примерами
A/B-метрики и анализ (10)
- Primary vs secondary metric — primary решает; secondary помогают интерпретировать
- Ratio metrics — почему сложнее? — variance считается через delta-method, не t-test
- Bayesian probability to beat baseline — P(treatment > control | data)
- Sequential testing — когда применять? — для дорогих экспериментов где хочется ранний stop
- Stratified randomization — split по сегментам (50/50 mobile/desktop отдельно)
- Pre-vs-Post analysis — не A/B, но используется при невозможности эксперимента
- Difference-in-Differences (DiD) — quasi-experiment: control vs treatment до/после
- Synthetic Control — для одного treatment unit (рынок A vs синтетический рынок из B, C, D)
- Propensity Score Matching — observational data: match by P(treatment | covariates)
- Instrumental Variables (IV) — когда есть unobserved confounder + valid instrument
Как готовиться 30 дней — пошаговый план
Шаг 1. Неделя 1 — SQL (7 дней)
- День 1-2: JOIN + window-функции — 30 задач в SQL-тренажёре
- День 3-4: CTE + рекурсия — 15 задач
- День 5-6: Retention/funnel — 20 задач
- День 7: AI мок-собес на SQL — /ai-hub
Шаг 2. Неделя 2 — Python (7 дней)
- День 8-10: pandas базовый + advanced — 30 задач в Python-тренажёре
- День 11-12: A/B на scipy — 10 задач
- День 13-14: Алгоритмы (Two Sum, LRU, Sliding Window Max)
Шаг 3. Неделя 3 — A/B + метрики (7 дней)
- День 15-17: A/B теория + кейсы — /cases (453 кейсов)
- День 18-19: Метрики продукта + unit-экономика — /metrics
- День 20-21: Тестовые задания типа /tasks — 612 заданий
Шаг 4. Неделя 4 — финиш (7 дней)
- День 22-24: AI мок-собес каждый день (Pro безлимит — тариф)
- День 25-26: Закрепление слабых тем (где AI сказал «доработай»)
- День 27-28: Резюме + cover letter
- День 29-30: Реальные собесы — пройди 3-5 для практики стресса
→ Открыть AI мок-собес сейчас — 5 free мок-собесов без регистрации
FAQ — частые вопросы про подготовку
За сколько дней реально подготовиться к собесу аналитика данных?
30 дней при 2-3 часах в день — на уверенное прохождение middle. Junior — 14 дней. Senior — нужен опыт + 14 дней powdler-up.
Что важнее: SQL или Python?
SQL обязателен в 100% собесов на аналитика. Python в 80% (в крупных компаниях). Если время ограничено — SQL первым.
Какая зарплата аналитика данных в России в 2026?
Junior: 94-149K, Middle: 150-255K, Senior: 300-426K (Levels.fyi RU + Hh.ru данные). Топ компании (Yandex G16+, Tinkoff senior): 400-650K.
Что спрашивают в Yandex на аналитика?
4-5 раундов: HR → SQL live (45 мин) → Python live (45 мин) → продуктовый кейс (60 мин) → System Design / финал. Grade ladder G14-G18.
Нужно ли знать ClickHouse / dbt / Airflow?
Для middle — желательно (читать SQL syntax). Для senior — обязательно. На zasqlpython есть полный курс ClickHouse 25 модулей и блог-посты про dbt и Airflow.
Какие книги читать аналитику?
- «Trustworthy Online Controlled Experiments» (Kohavi, Tang, Xu) — про A/B
- «Designing Data-Intensive Applications» (Kleppmann) — про инфраструктуру
- «Storytelling with Data» (Knaflic) — про презентации
- Habr Otus / Yandex Praktikum — реальные кейсы РФ-компаний
Как готовиться к продуктовому раунду?
Учить фреймворки: AARRR, CIRCLES, STAR. Решай 453 продуктовых кейсов — там реальные сценарии «упал DAU», «снизилась конверсия».
Сколько раундов на собесе?
Junior: 2-3. Middle: 3-4. Senior: 4-6. В крупных компаниях (Yandex, Сбер) больше, в стартапах меньше.
Спрашивают ли о SQL-оптимизации?
Senior — да. Middle — поверхностно. Junior — нет. Готов отвечать на: EXPLAIN ANALYZE, индексы (B-tree/GIN/BRIN), partition pruning.
Что делать если завалил техраунд?
Запросить feedback (50% компаний дают). Через 6 месяцев можно повторить. Используй это время как roadmap для прокачки.
Что дальше
Этот гайд — точка входа. Реальная подготовка = практика в браузере без установки.
521 SQL задач + 532 Python задач + 453 продуктовых кейсов + 612 тестовых заданий + 368 метрик + AI мок-собес — всё в одном месте.
Связанные посты
- Топ-50 SQL вопросов на собеседовании 2026
- Как стать аналитиком данных в 2026
- Зарплата аналитика данных 2026
- Где практиковать SQL для аналитика
- Подготовка к собесу за 30 дней
- Тестовые задания аналитика — типы и подготовка
- Резюме аналитика данных — шаблон
- A/B-тесты на Python + scipy
Сравнить Free и Pro → (1999₽/мес — безлимит мок-собесов + все 521 SQL + 532 Python задачи)
Источники
- Levels.fyi RU данные 2026 (Yandex, Avito, Wildberries средние зарплаты)
- exp-platform.com (Microsoft A/B testing methodology, CUPED 2013)
- postgresql.org/docs/current (SQL syntax, window functions)
- statsmodels.org (Welch's t-test, proportions_ztest)
- Habr Otus — реальные кейсы РФ-компаний 2026
- Karpov Courses — Yandex Praktikum public materials