Я был на 40+ собеседованиях аналитика — и почти на всех вопросы повторяются. Не дословно, но темы — одни и те же. Если знаешь эти 50 — пройдёшь любой джуниор/миддл собес. Сениорам нужен опыт, но и здесь база та же.
Вопросы реальные с собесов в Яндекс, Ozon, Сбер, Авито, Тинькофф, VK, X5, Wildberries — собрал за последний год.
SQL (15 вопросов)
Чем отличается INNER JOIN от LEFT JOIN?
INNER возвращает только пересечение, LEFT — все из левой таблицы плюс совпадения справа. Если справа нет — NULL. Подвох: WHERE на правую таблицу превращает LEFT в INNER. Условие на правую — в ON, а не в WHERE.
Что вернёт COUNT(*) vs COUNT(column) vs COUNT(DISTINCT column)?
COUNT(*)— все строки включая NULLCOUNT(column)— только non-NULL значенияCOUNT(DISTINCT column)— уникальные non-NULL
Как найти топ-3 в каждой группе?
Через оконную функцию: ROW_NUMBER() OVER (PARTITION BY group ORDER BY metric DESC) <= 3. Или через correlated subquery.
Что такое CTE и зачем?
WITH name AS (...) — именованный результат подзапроса. Делает сложные запросы читаемыми, можно ссылаться несколько раз. Рекурсивные CTE — для иерархий и временных рядов.
Чем оконные функции отличаются от GROUP BY?
GROUP BY схлопывает строки. Оконные функции считают агрегат, не схлопывая строки — каждая строка получает агрегат своего «окна». Используй когда нужно «топ-N в группе», «доля от общего», «running total».
Объясни ROW_NUMBER vs RANK vs DENSE_RANK
- ROW_NUMBER — уникальный номер 1, 2, 3, 4 (даже при равенстве)
- RANK — 1, 2, 2, 4 (пропускает после ничьи)
- DENSE_RANK — 1, 2, 2, 3 (без пропусков)
Как найти дубликаты?
SELECT col, COUNT(*) FROM t GROUP BY col HAVING COUNT(*) > 1. Или через ROW_NUMBER OVER (PARTITION BY col) для удаления дублей сохраняя одну запись.
Чем HAVING отличается от WHERE?
WHERE фильтрует строки до GROUP BY. HAVING — группы после агрегации. COUNT(*) > 100 нельзя в WHERE, только в HAVING.
Как посчитать процент от общего?
Через оконную функцию: SUM(value) * 100.0 / SUM(SUM(value)) OVER (). Без оконных — нужен подзапрос.
Что такое self-join и когда нужен?
JOIN таблицы самой с собой. Используется для сравнения строк внутри таблицы (manager-employee, прошлое-текущее значение). Сейчас часто заменяется оконной LAG().
Объясни UNION vs UNION ALL
UNION убирает дубликаты (дороже — нужна сортировка). UNION ALL включает дубли. Если уверены что дублей нет — UNION ALL быстрее.
Как посчитать DAU/MAU?
COUNT(DISTINCT user_id) за день / месяц. DAU/MAU = stickiness ratio. Если 0.2 — юзер заходит ~6 дней в месяц.
Как найти retention M+1?
Cohort = месяц регистрации. Активных в M+1 / размер когорты. См. подробный гайд: Когортный анализ retention в SQL.
Что такое EXPLAIN и зачем?
Показывает план запроса: какие индексы используются, тип JOIN, сколько строк сканируется. Главный инструмент оптимизации SQL.
Как ускорить медленный SELECT?
- Индексы на WHERE / JOIN колонках
- Фильтры до JOIN (в подзапросе)
- Маленькую таблицу справа в hash JOIN
- Денормализация если читают чаще чем пишут
- Партиционирование по дате
Python и pandas (10 вопросов)
Как сгруппировать DataFrame и посчитать несколько агрегатов?
df.groupby('col').agg({'a': 'mean', 'b': 'sum'}) или named aggregation agg(avg_a=('a','mean')).
Чем отличается merge от join в pandas?
merge — гибкий, по любым колонкам. join — только по индексам. На практике 95% — merge.
Как заменить for-loop на векторные операции?
- Сложение/умножение → прямые операторы (
df['c'] = df['a'] + df['b']) - Условия →
np.whereилиapply - Группировки → groupby + transform
См. 10 функций pandas вместо for.
Что такое apply, map, applymap?
map— для Series, элемент за элементомapply— для DataFrame по rows/columns или для Seriesapplymap— устаревшее, элемент за элементом для DataFrame (заменено наmap)
Как посчитать скользящее среднее?
df['col'].rolling(window=7).mean(). Для timeseries с резными частотами — resample('D').mean().rolling(7).
Как найти топ-N по группе в pandas?
df.groupby('cat').apply(lambda x: x.nlargest(3, 'metric')) или через rank: df[df.groupby('cat')['m'].rank(ascending=False) <= 3].
Что вернёт isnull(), notnull(), isna()?
isnull == isna (синонимы) — bool Series, True для NaN. notnull — обратное.
Как обработать пропущенные значения?
dropna()— удалитьfillna(value)— заменитьfillna(method='ffill')— forward fill- Для статистики — interpolate / mean/median
Чем list comprehension отличается от for?
LC создаёт новый список, синтаксис чище, в 2-3 раза быстрее за счёт оптимизаций интерпретатора. Для side-effects (print, сохранение) — for.
Что такое generator и когда использовать?
Функция с yield — возвращает iterator, не загружает всё в память. Используй для больших файлов (читай построчно), для бесконечных последовательностей.
Статистика и A/B-тесты (10 вопросов)
Чем отличаются среднее и медиана?
Среднее чувствительно к выбросам, медиана — нет. Для skewed распределений (выручка, время сессии) — медиана честнее.
Что такое p-value?
Вероятность увидеть наблюдаемое различие (или большее) если H0 верна. НЕ «вероятность что H1 верна» — это разные вещи.
Какой тест применить к конверсиям?
Chi-square (scipy.stats.chi2_contingency) или z-test для долей. См. A/B-тесты в Python: scipy.stats.
Что такое MDE (Minimum Detectable Effect)?
Минимальный эффект который сможем заметить при заданной выборке и α/β. Меньше MDE → даже сильное изменение «статистически незначимо».
Что такое ошибки I и II рода?
- I (α) — ложно отвергли H0 (видим эффект там где нет)
- II (β) — ложно приняли H0 (не увидели реальный эффект)
- Power = 1-β
Когда A/B-тест НЕ нужен?
- Эффект очевиден (исправление бага)
- Нет ресурсов на корректный тест
- Целевая метрика не из MAU/DAU
- Регуляторные изменения
Что такое нормальное распределение?
Симметричное, среднее = медиана = мода, 68% в ±1σ, 95% в ±2σ. На реальных данных встречается редко (выручка — log-normal, time on page — exponential).
Доверительный интервал — это что?
«Если повторить эксперимент 100 раз, в 95 случаях интервал содержит истинное значение». Не то же самое что «95% что значение здесь».
Парный или независимый t-test?
- Парный — одни и те же объекты до/после (вес 100 человек до/после диеты)
- Независимый — разные группы (контроль vs тест)
Как обнаружить аномалию во временном ряду?
- Z-score (3 sigma rule)
- Скользящий median + MAD
- Декомпозиция (trend + seasonality + residual) и анализ residual
- Изоляционный лес для multivariate
Продуктовые метрики (10 вопросов)
Что такое DAU, MAU, WAU?
Daily/Weekly/Monthly Active Users — уникальные юзеры активные за период. Stickiness = DAU/MAU.
Что такое retention?
Доля юзеров возвращающихся через N дней/недель/месяцев. Classic retention M+N — активен ИМЕННО в N-й период. Rolling — был активен в N+ или позже.
Какие метрики у e-commerce?
Conversion rate, AOV, GMV, CAC, LTV, retention, cart abandonment, repeat purchase rate, ARPU.
Что такое LTV и как считать?
Lifetime Value — суммарная выручка от юзера за всё время. LTV = ARPU × LT где LT — средний срок жизни. Для подписки: MRR / churn rate.
Как декомпозировать падение DAU?
- Cohort анализ — какая группа упала
- Сегмент — устройство / источник / гео
- Воронка — где отвал в активациях
- Внешние факторы — сезонность, день недели
Что такое NPS и как считать?
% promoters - % detractors (на шкале 0-10). 9-10 promoters, 7-8 passive, 0-6 detractors. От -100 до +100.
Как измерить engagement?
- Time on page / app
- Сессий в день
- Действий за сессию
- Stickiness (DAU/MAU)
- Метрики специфичные продукту (количество комментариев в соцсети, уроков в EdTech)
Что такое North Star metric?
Главная метрика бизнеса. Для Spotify — minutes listened. Для Airbnb — nights booked. Объединяет product-market fit и business value.
Что такое HEART framework?
Google's Happiness, Engagement, Adoption, Retention, Task success. Структура для UX-метрик.
Как посчитать unit economics?
Profit per unit = ARPU - CAC - operational costs. Если положительный — масштабируем. Если отрицательный — оптимизируем перед ростом.
Soft skills и кейсы (5 вопросов)
Расскажи о сложном проекте
Структура: контекст → задача → действия → результат (STAR). Цифры, не общие слова. «Снизил CAC на 23%» лучше чем «оптимизировал маркетинг».
Как ты приоритизируешь задачи?
RICE / ICE / WSJF / по влиянию на North Star. Покажи что думаешь не «что просили», а «что максимизирует impact».
Опиши какую-нибудь дашборд который сделал
Какая бизнес-цель, какие метрики, какие срезы, что нашёл благодаря дашборду. Не «я освоил Tableau», а «я нашёл что 80% выручки от 20% юзеров и предложил персональные офферы».
Как ты работаешь с продактом?
Регулярные синки, общая doc с открытыми вопросами, proactive (приносить инсайты не дожидаясь ad-hoc), explain over deliver.
Где видишь себя через 3 года?
Не «будут руководителем», а «глубже разобрался в продуктовой аналитике, веду свои инициативы, наставляю младших». Покажи рост, а не амбициозность.
План подготовки на 4 недели
| Неделя | Фокус | Задачи |
|---|---|---|
| 1 | SQL фундамент | 50 задач из песочницы, JOIN/GROUP BY/оконные |
| 2 | SQL продвинуто | CTE, retention, когорты, оптимизация |
| 3 | Python + статистика | pandas, A/B-тесты, scipy.stats |
| 4 | Кейсы + софты | продуктовые кейсы, мок-собес с AI |
Связанные материалы
- SQL-тренажёр — 325 задач с проверкой
- Python-тренажёр — 402 задачи (74 algorithm + pandas/numpy)
- Тестовые задания — 484 реальных с собесов
- Продуктовые кейсы — 228 кейсов
- AI мок-собеседование — тренировка стресса
- Метрики продукта — 296 метрик с формулами
Открой SQL-тренажёр, найди задачу на оконные функции — реши за час. Это лучший способ подготовиться: не читать ответы, а руками решать.