100+ вопросов с собеседований на аналитика | data.hub
← На главную

100+ вопросов с собеседований

Реальные вопросы с интервью на позиции Data Analyst и Product Analyst: SQL, метрики, A/B тесты, Python и кейсы. Кликни на вопрос, чтобы увидеть ответ.

🗃️
SQL

В чем разница между WHERE и HAVING?+
WHERE фильтрует строки до группировки (до GROUP BY), а HAVING фильтрует группы после агрегации. WHERE работает с отдельными строками, HAVING - с результатами агрегатных функций (COUNT, SUM, AVG и т.д.).
Объясни разницу между INNER, LEFT, RIGHT и FULL JOIN+
INNER JOIN возвращает только совпадающие строки из обеих таблиц. LEFT JOIN возвращает все строки из левой таблицы + совпадения из правой (NULL если нет совпадения). RIGHT JOIN - наоборот. FULL JOIN возвращает все строки из обеих таблиц.
Что такое оконные функции? Приведи пример+
Оконные функции выполняют вычисления по группе строк, связанных с текущей строкой, без свертки данных. Пример - ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) для нумерации заказов каждого пользователя.
Как найти дубликаты в таблице?+
SELECT column, COUNT(*) as cnt FROM table GROUP BY column HAVING COUNT(*) > 1;
Напиши запрос для расчета накопительной суммы+
SELECT date, revenue, SUM(revenue) OVER (ORDER BY date) as cumulative_revenue FROM daily_sales;
Чем отличается UNION от UNION ALL?+
UNION объединяет результаты и удаляет дубликаты. UNION ALL объединяет все, включая дубликаты. UNION ALL работает быстрее, так как не тратит ресурсы на удаление дубликатов.
Как работает GROUP BY с несколькими колонками?+
Группировка происходит по уникальным комбинациям значений всех указанных колонок. Например, GROUP BY city, product создаст отдельную группу для каждой комбинации город + продукт.
Что такое CTE и зачем он нужен?+
CTE (Common Table Expression) - временный именованный результат запроса, определяемый через WITH. Делает сложные запросы читаемыми, позволяет переиспользовать подзапросы и упрощает отладку.
Разница между ROW_NUMBER, RANK и DENSE_RANK?+
ROW_NUMBER даёт уникальный номер каждой строке (1,2,3,4). RANK при равных значениях ставит одинаковый ранг и пропускает следующие (1,1,3). DENSE_RANK тоже даёт одинаковый ранг, но не пропускает (1,1,2).
Как посчитать долю (процент) от общего?+
Через оконную функцию: SUM(x) OVER () даёт общий итог. Пример: revenue * 100.0 / SUM(revenue) OVER () AS share_pct. Важно умножать на 100.0, чтобы не потерять дробную часть.
Как найти вторую по величине зарплату?+
Три способа: 1) SELECT MAX(salary) WHERE salary < (SELECT MAX(salary) ...); 2) через оконку DENSE_RANK() OVER (ORDER BY salary DESC) = 2; 3) SELECT DISTINCT salary ORDER BY salary DESC LIMIT 1 OFFSET 1.
Почему COUNT(*) и COUNT(column) дают разные числа?+
COUNT(*) считает все строки, COUNT(column) пропускает NULL в этой колонке. Классическая ловушка на собеседовании: если в колонке половина значений пустая, числа разойдутся вдвое. COUNT(DISTINCT column) считает уникальные непустые значения.
Как ведёт себя NULL в сравнениях и агрегатах?+
Любое сравнение с NULL даёт не TRUE и не FALSE, а NULL, поэтому WHERE x = NULL никогда ничего не вернёт - нужно IS NULL. Агрегаты (SUM, AVG) пропускают NULL, а вот AVG посчитается по меньшему числу строк, чем вы ожидаете. NOT IN с подзапросом, где есть NULL, вернёт пустой результат - частая боль на проде.
Чем отличаются DELETE, TRUNCATE и DROP?+
DELETE удаляет строки по условию, пишет в журнал и откатывается. TRUNCATE быстро очищает всю таблицу целиком, обычно без построчного лога и без WHERE. DROP убирает саму таблицу вместе со структурой. По скорости: TRUNCATE быстрее DELETE на больших объёмах.
Чем DISTINCT отличается от GROUP BY?+
Для простого списка уникальных значений результат одинаковый, план запроса тоже часто совпадает. Разница в задаче: GROUP BY нужен, когда к группам применяются агрегаты, DISTINCT - когда просто убираем повторы. Если видите DISTINCT поверх агрегата, скорее всего в запросе размножающий JOIN.
Что такое индекс и когда он не помогает?+
Индекс - отдельная структура, которая позволяет быстро находить строки без полного перебора таблицы. Не помогает, когда запрос всё равно читает большую часть таблицы, когда колонка обёрнута функцией (WHERE DATE(created_at) = ...), при низкой селективности (пол, флаг) и при LIKE со звёздочкой в начале. Плюс индексы замедляют вставку и занимают место.
Запрос работает медленно. Как будешь ускорять?+
Сначала смотрю EXPLAIN: где full scan, где раздувается число строк. Дальше по шагам: ограничить период и колонки вместо SELECT *, отфильтровать до JOIN, а не после, проверить индексы по ключам джойна и фильтрам, убрать функции с индексируемых колонок, заменить коррелированный подзапрос на JOIN или оконку. Если данных реально много - партиционирование и предагрегаты.
Что показывает EXPLAIN и на что смотреть в плане?+
EXPLAIN показывает, как СУБД собирается выполнять запрос: порядок соединений, тип доступа (seq scan или index scan), оценку числа строк и стоимость. Смотрю на три вещи: полные сканы больших таблиц, сильное расхождение оценки и факта (значит статистика устарела) и место, где число строк резко растёт - там обычно и проблема.
Для чего нужны LAG и LEAD?+
LAG берёт значение предыдущей строки внутри окна, LEAD - следующей. Типовые задачи: прирост к прошлому дню, интервал между покупками пользователя, поиск шагов воронки подряд.
SELECT user_id, event_date, event_date - LAG(event_date) OVER ( PARTITION BY user_id ORDER BY event_date ) AS days_since_prev FROM events;
Как найти пользователей, которые купили товар A, но не покупали B?+
Через агрегацию по пользователю, это надёжнее NOT IN (не ломается на NULL):
SELECT user_id FROM orders GROUP BY user_id HAVING SUM(CASE WHEN product = 'A' THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN product = 'B' THEN 1 ELSE 0 END) = 0;
Альтернатива - LEFT JOIN второй выборки и условие IS NULL.
Напиши запрос для конверсии воронки по шагам+
Считаем уникальных пользователей на каждом шаге и делим на первый шаг:
SELECT COUNT(DISTINCT user_id) AS visited, COUNT(DISTINCT CASE WHEN step >= 2 THEN user_id END) AS added_to_cart, COUNT(DISTINCT CASE WHEN step >= 3 THEN user_id END) AS paid, COUNT(DISTINCT CASE WHEN step >= 3 THEN user_id END) * 100.0 / COUNT(DISTINCT user_id) AS cr_total FROM funnel_events;
Важно оговорить, считаем ли мы шаги строго по порядку и в рамках одной сессии.
Как посчитать retention запросом?+
Определяем когорту по дате первого визита, затем джойним активность и считаем разницу в днях:
WITH first_day AS ( SELECT user_id, MIN(event_date) AS cohort_date FROM events GROUP BY user_id ) SELECT f.cohort_date, e.event_date - f.cohort_date AS day_n, COUNT(DISTINCT e.user_id) * 100.0 / COUNT(DISTINCT f.user_id) OVER (PARTITION BY f.cohort_date) AS retention FROM first_day f JOIN events e ON e.user_id = f.user_id GROUP BY 1, 2;
Что такое партиционирование и чем оно отличается от индекса?+
Партиционирование физически режет таблицу на части, чаще всего по дате. Запрос с фильтром по дате читает только нужные партиции, а старые данные удобно удалять целиком. Индекс же не меняет хранение, а добавляет структуру для поиска. На больших событийных таблицах обычно нужны оба.
Как соединить таблицы по диапазону дат?+
Условие джойна может быть неравенством, а не только равенством. Например, подтянуть курс валюты или тариф, действовавший на момент покупки:
SELECT o.order_id, o.amount * r.rate AS amount_usd FROM orders o JOIN rates r ON o.currency = r.currency AND o.created_at >= r.valid_from AND o.created_at < r.valid_to;
Главное следить, чтобы интервалы не пересекались, иначе строки размножатся.

📊
Продуктовые метрики

Что такое Retention и как его считать?+
Retention - процент пользователей, вернувшихся в продукт через N дней после первого визита. Retention Day 7 = (пользователи, вернувшиеся на 7 день / когорта первого дня) × 100%. Ключевая метрика для оценки "липкости" продукта.
В чем разница между ARPU и ARPPU?+
ARPU (Average Revenue Per User) = Выручка / Все пользователи. ARPPU (Average Revenue Per Paying User) = Выручка / Платящие пользователи. ARPPU всегда выше ARPU и показывает средний чек платящих.
Как рассчитать LTV?+
LTV = ARPU × Lifetime (средний срок жизни клиента). Для подписочных моделей: LTV = ARPU / Churn Rate. Важно: LTV должен быть минимум в 3 раза больше CAC для здоровой экономики.
Что такое когортный анализ?+
Группировка пользователей по дате первого действия (регистрации, покупки) и отслеживание их поведения во времени. Позволяет сравнивать поколения пользователей и видеть тренды.
Метрика DAU упала на 20%. Как будешь искать причину?+
1) Проверить технические проблемы (баги, падение серверов). 2) Сегментировать по платформам, странам, источникам трафика. 3) Посмотреть на новых vs старых пользователей. 4) Проверить изменения в продукте или маркетинге. 5) Сравнить с историческими данными (сезонность).
Что такое North Star метрика?+
Главная метрика продукта, которая отражает ценность для пользователя и коррелирует с ростом бизнеса. Примеры: для Spotify - время прослушивания, для Airbnb - количество забронированных ночей.
Что такое DAU, WAU, MAU и stickiness?+
DAU/WAU/MAU - уникальные активные пользователи за день, неделю и месяц. Stickiness = DAU/MAU: показывает, сколько дней месяца пользователь заходит в продукт. 0.2 значит примерно 6 дней из 30.
Чем classic retention отличается от rolling?+
Classic (Day-N) считает тех, кто вернулся именно в день N. Rolling считает тех, кто вернулся в день N или позже. Rolling всегда выше и меньше шумит, поэтому его удобно смотреть на маленьких когортах. Главное - не сравнивать одно с другим.
Как посчитать LTV по когортам?+
Берём когорту по месяцу первой покупки, считаем накопленную выручку когорты на 1, 3, 6, 12 месяц и делим на размер когорты. Получается кривая LTV, по которой видно, когда окупается CAC. Формула ARPU × срок жизни - грубая оценка, для юнит-экономики лучше когорты.
Как выбрать North Star метрику?+
Она должна отражать ценность для пользователя и рост бизнеса одновременно, быть опережающей (выручка постфактум не подходит) и управляемой командой. Для доставки это число заказов, для соцсети - время в ленте, для B2B SaaS - число активных рабочих пространств.
Что такое CAC и как его правильно считать?+
CAC = все затраты на привлечение за период / число привлечённых клиентов за тот же период. Две частые ошибки: считать только рекламный бюджет, забыв про зарплаты маркетинга и скидки, и делить на всех пользователей вместо платящих. Считать нужно по каналам, потому что средний CAC маскирует убыточные источники.
Из чего складывается юнит-экономика?+
Берём один юнит (обычно клиента) и смотрим, сколько он приносит и сколько стоит. Базовая связка: LTV против CAC. Внутри LTV - средний чек, частота покупок, срок жизни и маржа. Продукт здоров, когда LTV/CAC около 3 и выше, а CAC окупается за приемлемый срок. Если экономика не сходится, масштабирование только ускоряет убытки.
Как считать churn, если у продукта нет подписки?+
Без подписки нет момента отписки, поэтому churn определяют через окно неактивности: пользователь считается ушедшим, если не совершал целевое действие N дней. N берут из данных - смотрят распределение интервалов между визитами и выбирают порог, за которым возврат маловероятен. Для маркетплейса это может быть 60 дней, для мессенджера 7.
Что такое активация и aha-момент?+
Aha-момент - действие, после которого пользователь понял ценность продукта и с большой вероятностью останется. Находят его так: сравнивают поведение выживших и ушедших когорт и ищут действие с самым сильным разрывом в retention. Активация - доля новичков, дошедших до этого момента за первые дни. Классический пример - 7 друзей за 10 дней у Facebook.
Чем метрика отличается от KPI?+
Метрика - любое измеримое число о продукте. KPI - та метрика, за которую команда отвечает и по которой её оценивают, обычно с целевым значением и сроком. Метрик может быть сотня, KPI - единицы. Отсюда и правило: не превращать в KPI то, на что команда не может повлиять.
Что такое guardrail-метрики?+
Это метрики, которые не должны пострадать, пока мы двигаем целевую. Например, растим конверсию в покупку, но следим, чтобы не выросли возвраты, не упала скорость страницы и не просел retention. Без guardrail легко выкатить изменение, которое даёт плюс сегодня и минус через месяц.
Конверсию считать по пользователям или по сессиям?+
Зависит от вопроса. По сессиям - когда оцениваем конкретный сценарий или изменение интерфейса. По пользователям - когда оцениваем продукт в целом и допускаем, что человек вернётся и купит позже. Числа будут заметно разными, поэтому знаменатель нужно проговаривать сразу, иначе спор с продактом обеспечен.
Что такое MRR, ARR и NRR?+
MRR - регулярная месячная выручка от подписок, ARR - её годовой эквивалент. NRR (Net Revenue Retention) показывает, как изменилась выручка от когорты клиентов за год с учётом апгрейдов, даунгрейдов и оттока. NRR выше 100% означает, что бизнес растёт даже без новых клиентов, и для SaaS это главный признак здоровья.
Что такое RFM-сегментация?+
Разбиение клиентов по трём осям: Recency (как давно покупал), Frequency (как часто), Monetary (на какую сумму). Каждому дают балл, например от 1 до 5, и получают сегменты: чемпионы, спящие, новички, уходящие. Дальше под каждый сегмент своя коммуникация, что заметно эффективнее рассылки по всей базе.
Метрика выросла на 5%. Это рост или шум?+
Сначала смотрю обычный разброс метрики: если она и раньше гуляла на 5-7% неделя к неделе, это шум. Дальше сравниваю с тем же периодом прошлого года (сезонность), проверяю, не изменился ли состав трафика и не было ли релиза или сбоя трекинга. И только потом делаю вывод. Один день роста не событие, важен устойчивый сдвиг уровня.

🔬
A/B тесты и статистика

Что такое статистическая значимость?+
Вероятность того, что наблюдаемый результат не случаен. Обычно используют порог p-value < 0.05 (95% уверенность). Если p-value меньше порога - результат статистически значим.
Что такое ошибки I и II рода?+
Ошибка I рода (α, False Positive) - нашли эффект там, где его нет. Ошибка II рода (β, False Negative) - не нашли эффект там, где он есть. Мощность теста = 1 - β. При фиксированной выборке уменьшение одной ошибки увеличивает другую.
Как определить размер выборки для A/B теста?+
Зависит от: 1) базовой конверсии, 2) минимального детектируемого эффекта (MDE), 3) статистической мощности (обычно 80%), 4) уровня значимости (обычно 5%). Есть калькуляторы: Evan Miller, Optimizely.
Что такое AA-тест и зачем он нужен?+
Тест, где обе группы получают одинаковый опыт (без изменений). Нужен для проверки корректности системы сплитования. Если AA-тест показывает значимую разницу - проблема в методологии.
Когда нельзя использовать A/B тест?+
Когда: 1) мало трафика для достижения значимости, 2) изменение влияет на всех пользователей (например, цены), 3) есть сетевые эффекты между группами, 4) нужны долгосрочные выводы, а времени мало.
Что такое p-value простыми словами?+
Вероятность увидеть такой (или больший) эффект при условии, что на самом деле разницы нет. Маленький p (< 0.05) означает, что различие вряд ли случайно. p это НЕ вероятность того, что гипотеза верна.
Что такое мощность теста и от чего зависит?+
Мощность - это вероятность обнаружить реальный эффект. Растёт с размером выборки, величиной эффекта (MDE) и α; падает при высокой дисперсии. Обычно целятся в 80%.
Зачем нужна поправка на множественные сравнения?+
Проверяя много метрик сразу, вероятность хотя бы одной ложной находки растёт. Поправки (Bonferroni: α/n или Benjamini-Hochberg) снижают порог, чтобы контролировать долю ложных срабатываний.
Что такое ошибка подглядывания (peeking)?+
Когда тест останавливают в момент, где p впервые стал меньше 0.05. Если подглядывать каждый день, вероятность хотя бы раз случайно увидеть значимость доходит до 30% и выше. Лечится фиксацией размера выборки заранее или последовательными методами вроде sequential testing.
Как правильно делить пользователей на группы?+
По хешу стабильного идентификатора (user_id, а не cookie), чтобы пользователь всегда попадал в одну группу и на всех устройствах видел одно и то же. Соль хеша должна быть своя у каждого эксперимента, иначе тесты будут коррелировать между собой. Если продукт социальный или есть общий инвентарь, делить лучше не пользователей, а города или сообщества.
Что такое SRM и что делать, если он есть?+
SRM (Sample Ratio Mismatch) - когда фактическое соотношение групп не совпадает с задуманным, например 48/52 вместо 50/50. Проверяется хи-квадратом по числу пользователей. Если p очень мал, результатам теста верить нельзя: где-то теряются пользователи или сломан сплит. Тест останавливают и чинят причину, а не интерпретируют цифры.
Как быть с выбросами и китами в тесте?+
Один пользователь с покупкой на миллион способен перевернуть результат по выручке. Варианты: винзоризация или обрезка по перцентилю (99-й), переход на более устойчивую метрику (медиана, конверсия в покупку), бутстрап вместо t-теста. Правило отсечки фиксируют до начала теста и применяют одинаково к обеим группам.
Что такое CUPED и зачем он нужен?+
Метод снижения дисперсии за счёт данных до эксперимента. Мы корректируем метрику пользователя на его же поведение в предпериоде, и разброс между людьми частично уходит. На практике это сокращает нужную выборку или длительность теста на десятки процентов. Работает только там, где предпериод есть, то есть не для новых пользователей.
В чём сложность ratio-метрик вроде CTR?+
В таких метриках единица наблюдения (показ, клик) не равна единице рандомизации (пользователь), поэтому обычный t-тест недооценивает дисперсию и даёт слишком много ложных срабатываний. Решения: считать метрику на уровне пользователя, применять дельта-метод для корректной дисперсии или бутстрапить по пользователям.
Тест не показал значимого эффекта. Что дальше?+
Отсутствие значимости не означает отсутствие эффекта. Смотрю доверительный интервал: если он широкий и включает интересные значения, теста просто не хватило по мощности. Если интервал узкий и лежит около нуля, эффекта действительно нет и фичу можно закрывать. Отдельно проверяю сегменты, но как источник гипотез, а не как готовый вывод.
Сколько времени держать тест?+
Минимум одну полную неделю, а лучше две: поведение в будни и выходные разное, и обрывать на середине цикла нельзя. Дальше по расчёту выборки под нужный MDE. Плюс поправка на эффект новизны: первые дни пользователи реагируют на изменение просто потому, что оно новое, и эффект потом оседает.
Что такое holdout-группа?+
Небольшая доля пользователей, которой долго не показывают новые фичи. Нужна, чтобы измерить накопленный эффект всех изменений за квартал, а не только каждой фичи по отдельности. Часто оказывается, что сумма выигрышей отдельных тестов сильно больше реального прироста, и holdout это показывает.

🐍
Python и pandas

Чем отличаются merge, join и concat?+
merge соединяет два датафрейма по колонкам и умеет все типы JOIN, это основной инструмент. join делает то же самое, но по индексу и синтаксически короче. concat просто склеивает датафреймы по строкам или по колонкам без сопоставления ключей. На собеседовании часто просят объяснить, почему после merge строк стало больше: значит ключ не уникален в правой таблице.
Как обрабатывать пропуски в данных?+
Сначала разбираюсь, почему они появились: не пришло из источника, пользователь не заполнил, или это осмысленный ноль. Дальше по ситуации: удалить строки (если пропусков мало и они случайны), заполнить медианой или соседним значением для временных рядов, вынести в отдельную категорию для признака. Заполнять средним подряд опасно - это занижает дисперсию и портит выводы.
Почему apply работает медленно и чем его заменить?+
apply проходит по строкам питоновским циклом, а векторные операции считаются внутри numpy на C. Разница на миллионе строк доходит до двух порядков. Вместо apply: арифметика над колонками напрямую, np.where и np.select для условий, map по словарю для замен, str-методы для текста. apply оставляю там, где логика реально сложная и данных немного.
Как посчитать несколько метрик в разрезе группы?+
Через groupby и agg со словарём:
df.groupby('channel').agg( users=('user_id', 'nunique'), orders=('order_id', 'count'), revenue=('amount', 'sum'), avg_check=('amount', 'mean') ).reset_index()
Именованная агрегация сразу даёт понятные названия колонок, без многоуровневого индекса.
Что означает SettingWithCopyWarning?+
Pandas предупреждает, что вы пишете в объект, который может оказаться копией среза, а не исходным датафреймом, и изменения потеряются. Возникает при цепочке вида df[df.x > 0]['y'] = 1. Правильно писать через loc одним обращением: df.loc[df.x > 0, 'y'] = 1, а если срез нужен как самостоятельная таблица - явно сделать copy().
Файл не влезает в память. Что делать?+
Читать частями через chunksize и агрегировать по кускам, брать только нужные колонки через usecols, сжимать типы (int64 в int32, строки-повторы в category), перейти с csv на parquet. Если это регулярная задача, лучше не тащить данные в память вообще, а посчитать агрегат в SQL и забрать готовый результат.
Чем pivot_table отличается от groupby?+
По сути это та же агрегация, но pivot_table разворачивает одну из группировок в колонки и умеет считать итоги через margins. Удобно для сводных таблиц вида канал по строкам, месяц по колонкам. groupby отдаёт длинный формат, который дальше проще передавать в графики и джойны.
Как найти выбросы в данных?+
Метод IQR: считаем первый и третий квартиль, всё, что выходит за границы Q1 - 1.5·IQR и Q3 + 1.5·IQR, помечаем как выброс. Для примерно нормальных распределений подходит z-score выше 3. Но сначала я всегда смотрю на распределение глазами: у выручки длинный правый хвост нормален, и обрезать китов только потому, что они выделяются, нельзя.
Как посчитать скользящее среднее?+
Через rolling по отсортированному по дате датафрейму:
df = df.sort_values('date') df['ma7'] = df['revenue'].rolling(7, min_periods=1).mean()
Семь дней берут, чтобы убрать недельную сезонность. Для разрезов сначала groupby, потом rolling внутри группы через transform.
Чем Series отличается от DataFrame?+
Series - одномерный массив с индексом, по сути одна колонка. DataFrame - двумерная таблица, набор Series с общим индексом. df['col'] возвращает Series, а df[['col']] - DataFrame из одной колонки. Разница вылезает, когда метод ожидает таблицу, а получает вектор.
Как соединить события с ближайшим по времени значением?+
Через merge_asof: он джойнит не по точному совпадению, а по ближайшему предыдущему значению ключа. Типовая задача - подтянуть к покупке последнюю цену или последнюю сессию пользователя. Обе таблицы должны быть отсортированы по ключу сортировки, иначе pandas выдаст ошибку.
Какими библиотеками считаешь статистику?+
scipy.stats для базовых тестов (t-тест, хи-квадрат, Манна-Уитни, доверительные интервалы), statsmodels для регрессий, поправок на множественные сравнения и расчёта мощности, numpy для бутстрапа руками. Для визуализации matplotlib и seaborn, для интерактива plotly.

🧠
Кейсы и задачи

Конверсия корзины упала. Как найдешь причину?+
1) Сегментация по устройствам, браузерам, платформам. 2) Анализ воронки - на каком шаге отваливаются. 3) Проверка технических ошибок. 4) Сравнение новых и старых пользователей. 5) Анализ изменений в продукте/маркетинге в этот период.
Как бы ты измерил успех новой фичи?+
1) Определить цель фичи и целевую метрику. 2) Выбрать guardrail-метрики (что не должно упасть). 3) Провести A/B тест. 4) Дождаться статистической значимости. 5) Проверить долгосрочный эффект (новизна может искажать).
Пользователь говорит, что фича не работает, но данные показывают рост. Что делать?+
1) Проверить сегменты - возможно, проблема у части пользователей. 2) Убедиться в корректности метрики. 3) Провести качественное исследование (интервью). 4) Возможно, метрика не отражает реальную ценность.
Как найти причину падения выручки?+
Разложить метрику: выручка = пользователи × конверсия × средний чек. Сегментировать (устройство, регион, канал, новизна). Проверить сезонность, релизы, баги трекинга, внешние события. Найти, какой сегмент или множитель просел.
Как оценить эффект фичи без A/B теста?+
Before/after с поправкой на тренд, difference-in-differences (сравнение с контрольной группой), синтетический контроль, регрессия с учётом факторов. Все слабее A/B, поэтому важно контролировать внешние факторы.
DAU вырос, а выручка нет. Почему?+
Новые пользователи могут быть неплатящими (плохой канал/акция), выросла доля бесплатного сегмента, упал ARPPU, или прирост в регионах с низкой монетизацией. Разложить выручку по сегментам.
Как приоритизировать гипотезы роста?+
По фреймворку ICE/RICE: Reach × Impact × Confidence / Effort. Оценить ожидаемый эффект на ключевую метрику и стоимость реализации, брать с лучшим соотношением.
Как обнаружить аномалию или фрод в данных?+
Статистически: отклонение от скользящего среднего, z-score, IQR, резкие скачки, дубли, нереалистичные паттерны (сотни действий в секунду с одного id). Плюс бизнес-правила и сравнение сегментов.
Как понять, что сломался трекинг, а не продукт?+
Признаки поломки трекинга: метрика падает ступенькой в ноль или ровно вдвое, проседает только одна платформа или одна версия приложения, падение совпадает с релизом, при этом бизнес-показатели рядом (платежи в биллинге, заказы в базе) не изменились. Первым делом сверяю событие с независимым источником: если в базе заказы есть, а в аналитике нет, дело в трекинге.
Как оценить размер рынка для новой фичи?+
Считаю сверху вниз и снизу вверх, затем сравниваю. Снизу вверх честнее: беру число пользователей, которым фича применима, умножаю на ожидаемую долю пользующихся (берётся из похожих фич или из опроса) и на средний доход с такого пользователя. Обязательно проговариваю допущения, потому что вопрос проверяет ход рассуждений, а не точность числа.
Как выбрать между двумя фичами, если ресурс один?+
Оцениваю обе по ожидаемому эффекту на одну и ту же метрику: сколько пользователей затрагивает, какой прирост можно ожидать, насколько мы уверены в оценке и сколько стоит разработка. Дальше сравниваю по RICE. Если уверенность низкая у обеих, дешевле сначала проверить гипотезу минимальной версией, чем спорить на встрече.
Как оценить, во что обходится медленная загрузка?+
Сначала смотрю связь: разбиваю пользователей по времени загрузки и сравниваю конверсию по бакетам. Это корреляция, поэтому дальше проверяю на данных эксперимента, где скорость менялась, или ищу естественный эксперимент вроде выкатки CDN на часть регионов. Перевожу в деньги: прирост конверсии умножаю на трафик и средний чек.
Как оценить эффект от скидки?+
Главный вопрос - сколько покупок случилось бы и без скидки. Смотрю не на выручку, а на маржу с учётом каннибализации: часть клиентов купила бы по полной цене. Правильный способ - тест со случайной выдачей промокода, где контроль не получает ничего. Плюс проверяю отложенный эффект: не приучили ли аудиторию ждать распродажу.
Как найти узкое место в онбординге?+
Строю пошаговую воронку регистрации и смотрю, где самый большой обрыв в абсолютных числах, а не в процентах. Дальше режу проблемный шаг по платформам, источникам и новым устройствам, смотрю время между шагами (долгая пауза часто означает ошибку или ожидание кода) и сверяюсь с записями сессий. После этого формулирую гипотезу и проверяю тестом.
Как отличить сезонность от настоящего роста?+
Сравниваю год к году, а не месяц к месяцу, и смотрю на скользящее среднее за 7 или 28 дней, чтобы убрать недельный цикл. Если есть история за несколько лет, раскладываю ряд на тренд, сезонность и остаток. Рост реален, когда он виден после снятия сезонной компоненты и подтверждается на уровне когорт, а не только суммарно.
Какие метрики положишь на дашборд для руководителя?+
Не больше 7-8 показателей на первом экране: выручка и её динамика, активные пользователи, конверсия в целевое действие, retention, средний чек, юнит-экономика по ключевым каналам. Каждая цифра с понятной базой сравнения (прошлый период и план), а детализация уходит на второй уровень. Дашборд должен отвечать на вопрос, всё ли в порядке, за 10 секунд.

💼
Общие вопросы

Расскажи о себе / своем опыте+
Структура: 1) Кратко о бэкграунде (30 сек). 2) Релевантный опыт с конкретными достижениями. 3) Почему интересна эта позиция/компания. Не пересказывай резюме - выдели главное и покажи результаты.
Почему хочешь работать аналитиком?+
Расскажи про интерес к данным и решению бизнес-задач. Приведи примеры, когда анализ данных тебя увлекал. Покажи, что понимаешь суть работы аналитика - не просто считать, а влиять на решения.
Расскажи о сложном проекте+
Используй STAR: Situation (контекст), Task (задача), Action (что делал), Result (результат с цифрами). Покажи свой вклад и чему научился.
Какие метрики ты смотришь каждый день?+
Зависит от продукта, но обычно: активные пользователи (DAU), ключевая конверсия, выручка/GMV, retention и здоровье воронки. Плюс алерты на аномалии, чтобы ловить проблемы сразу.
Как объясняешь сложные результаты нетехническим людям?+
Начать с вывода и его влияния на бизнес, а не с метода. Одна главная мысль, простые визуализации, без жаргона, аналогии. Всегда отвечать на вопрос, что теперь делать.
Как ты проверяешь качество данных?+
Проверки на пропуски, дубли, выбросы, консистентность типов и диапазонов, сверку сумм с источником, свежесть данных. Автоматизирую проверки и не доверяю данным без валидации.
Как работать со стейкхолдером, которому нужен заранее известный результат?+
Оставаться честным: показать данные как есть, объяснить методологию и ограничения. Понять бизнес-цель за запросом и предложить корректный способ её достичь. Репутация аналитика держится на объективности.
Какие вопросы задать интервьюеру в конце?+
Про задачи роли и метрики успеха, устройство данных и стек, как принимаются решения на данных, состав команды и процессы, чего ждут от кандидата в первые 3 месяца. Показывает интерес и вовлечённость.
Расскажи про ошибку, которую ты допустил в анализе+
Здесь проверяют не безошибочность, а зрелость. Рабочая схема: что произошло, как обнаружили, какие были последствия, что сделали, чтобы не повторилось (проверка на дубли, сверка с источником, ревью запросов). Ответ в духе "серьёзных ошибок не было" звучит хуже честного разбора.
Как ты приоритизируешь задачи, когда всё срочно?+
Смотрю на цену решения: какая задача блокирует чужую работу или деньги, а какая просто интересна. Быстрые запросы на 15 минут закрываю сразу, крупное исследование ставлю в очередь и согласую срок. Если запросов больше, чем времени, иду к руководителю с прозрачным списком и прошу расставить приоритеты, а не тихо тону.
Что делаешь, если задача поставлена нечётко?+
Возвращаюсь к заказчику с вопросом, какое решение он примет по результату. Это сразу отсекает половину лишней работы. Дальше фиксирую в переписке цель, метрику, период и сегменты, и только потом сажусь считать. Если ответа нет, делаю минимальную версию с явными допущениями и показываю её на раннем этапе.
Что делать, если нужных данных просто нет?+
Сначала ищу косвенные источники: соседние события, логи бэкенда, выгрузки из биллинга или CRM. Если восстановить нельзя, честно говорю об ограничении и предлагаю прокси-метрику с оговоркой о её слабых местах. Параллельно ставлю задачу на разметку событий, чтобы через месяц данные уже были.
Как ты оформляешь результат анализа?+
Начинаю с вывода и рекомендации, потом цифры, потом методология и ограничения. Читатель должен понять главное из первого экрана. Всегда указываю период, фильтры и источник данных, чтобы результат можно было воспроизвести. Запросы храню в репозитории или в закреплённом документе, а не в личном файле.
Как ты учишься новому и следишь за профессией?+
Лучше всего работает связка "читаю под задачу и сразу применяю". Полезно называть конкретику: тренажёры по SQL, инженерные блоги компаний про эксперименты, разборы кейсов, профильные каналы и сообщества. Ответ вроде "прохожу курсы" без деталей звучит пусто.
Почему уходишь с текущего места?+
Говорить нужно про то, куда идёте, а не про то, от чего бежите. Рабочие формулировки: хочу продуктовые задачи вместо выгрузок, хочу масштаб данных больше, хочу влиять на решения. Критиковать бывшего работодателя не стоит, даже если есть за что: интервьюер примерит это на себя.
Назови свои слабые стороны+
Нужна настоящая слабость плюс то, что вы с ней делаете. Например: закапываюсь в детали, поэтому теперь фиксирую таймбокс на исследование и показываю промежуточный результат. Ответы про "я перфекционист" и "слишком много работаю" считываются как уход от вопроса.

Хочешь подготовиться к собеседованиям?

Ментор проведет mock-интервью и поможет подготовиться к реальным собеседованиям

Узнать про менторство →