Вопросы для собеседования Data Scientist
Готовый набор для интервьюера: 36 вопросов с тезисами эталонного ответа, задача, рубрика и план встречи.
На собеседовании Data Scientist хорошо работает схема на 60 минут: 3-4 устных вопроса по стеку, одна задача на live coding, проектирование для middle и выше и вопросы кандидата. Ниже вопросы по грейдам из базы Техпрогона: у каждого тезисы, которые должен назвать сильный кандидат.
Всего в базе по этой роли 220 устных вопросов с чек-листом ответа.
Как построить техсобес на 60 минут
0-5 мин
Знакомство
Кто вы, формат встречи, кандидат коротко о себе и последнем проекте.
5-20 мин
Вопросы по стеку
3-4 устных вопроса из набора ниже. Сверяйте ответ с тезисами.
20-45 мин
Live coding
Одна задача. Смотрите на процесс по рубрике, а не только на ответ.
45-55 мин
Проектирование
Для middle и выше: система или решение целиком. Для junior: ещё вопросы.
55-60 мин
Вопросы кандидата
Что спросил кандидат, тоже сигнал: интерес к задачам и команде.
Junior: 12 вопросов
Основы: как устроено и зачем. Хватит 3-4 вопросов на встречу.
Расскажите, как работает groupby в pandas и какие у него есть режимы.
Что хотим услышать
- Схема split-apply-combine
aggсворачивает группу в одно значение, именованная агрегацияtransformвозвращает результат формы исходной таблицыfilterоставляет группы целиком по условию- Ключ уходит в индекс,
as_index=Falseилиreset_index - NaN в ключе по умолчанию выпадает
Если ответил, копните глубже
size отличается от count?apply не обойтись?Вам дали выгрузку чеков за месяц. Как вы опишете распределение, прежде чем делать выводы?
Что хотим услышать
- Объём данных, пропуски, явные ошибки
- Среднее и медиана вместе, их сравнение говорит о хвосте
- Разброс: std и IQR, квантили p5/p25/p75/p95/p99
- Гистограмма, лучше в логарифмической шкале для денег
- Выбросы: ошибка данных или реальные крупные клиенты
- Разрезы по сегментам, где распределение может отличаться
Если ответил, копните глубже
Объясните теорему Байеса на примере медицинского теста. Почему положительный тест на редкую болезнь часто ложный?
Что хотим услышать
- Называет приор, правдоподобие и апостериор
- Различает P(+ | болен) и P(болен | +)
- Считает пример с числами, например через 10 000 человек
- Объясняет роль базовой частоты: здоровых намного больше
- Связь с ML: precision при редком классе
Если ответил, копните глубже
Объясните, что такое регуляризация в линейных моделях, чем отличаются L1 и L2 и как выбирать коэффициент.
Что хотим услышать
- Регуляризация штрафует сложность (величину весов) и снижает переобучение
- L2 уменьшает веса равномерно, помогает при мультиколлинеарности
- L1 обнуляет часть весов, работает как отбор признаков
- Перед регуляризацией признаки нужно масштабировать
- λ подбирается кросс-валидацией по логарифмической сетке
Если ответил, копните глубже
Объясните, как обучается нейросеть: что происходит на прямом и обратном проходе и как обновляются веса.
Что хотим услышать
- Прямой проход: вычисление выходов слой за слоем и loss, сохранение активаций
- Обратный проход: цепное правило от loss к первому слою
- Для слоя: градиент по весам δ·xᵀ, по входу Wᵀδ
- Шаг оптимизатора по градиентам, обнуление градиентов
- Батчи и эпохи, повторение до сходимости
Если ответил, копните глубже
Чем отличается WHERE от HAVING? Приведи пример, где нужны оба.
Что хотим услышать
- WHERE фильтрует строки до группировки, HAVING фильтрует группы после
- В WHERE нельзя агрегаты, в HAVING можно
- Порядок: FROM, WHERE, GROUP BY, HAVING, SELECT
- Условия без агрегатов лучше писать в WHERE: меньше строк до группировки
- Пример: WHERE status = 'paid' и HAVING SUM(total) > 10000
Если ответил, копните глубже
Объясни, как ты оцениваешь временную и пространственную сложность своего решения на собесе.
Что хотим услышать
- Называет, что такое n (и m, если входов несколько)
- Считает циклы: вложенные перемножаются, последовательные складываются
- Помнит скрытые циклы: includes, indexOf, slice, sort, spread
- Отдельно оценивает память, включая стек рекурсии
- Сравнивает с ограничениями: при n до 10⁵ O(n²) уже не годится
Если ответил, копните глубже
arr.slice() внутри цикла?Назовите ваши сильные стороны.
Что хотим услышать
- Две-три стороны, а не список из десяти
- Каждая подкреплена примером
- Стороны связаны с вакансией
- Нет пустых слов вроде «стрессоустойчивый, коммуникабельный» без доказательств
- Уверенно, без хвастовства
Если ответил, копните глубже
Какие проблемы вы проверяете сразу после чтения файла в pandas?
Что хотим услышать
shape,head,dtypes: правильно ли разобраны колонки- Числа и даты не стали строками:
sep,decimal,parse_dates - ID с ведущими нулями прочитаны строкой
- Пропуски:
isna().sum(), не съел ли парсер реальные значения вродеNA - Кодировка: нет ли кракозябр
- Дубликаты и неожиданные значения
Если ответил, копните глубже
Объясните продакт-менеджеру без формул, что такое p-value и как читать результат теста.
Что хотим услышать
- Предполагаем, что эффекта нет
- p-value: как часто случайность дала бы такую же или большую разницу
- Маленький p-value: случайностью объяснить трудно, отвергаем H0
- Не вероятность того, что гипотеза верна, и не размер эффекта
- Порог α выбран заранее, обычно 5%
- Большой p-value: эффект не доказан, а не доказано отсутствие
Если ответил, копните глубже
Объясните интервьюеру без формул, что такое градиент и почему обучение модели идёт против градиента функции потерь.
Что хотим услышать
- Градиент это вектор частных производных по каждому параметру
- Показывает направление наискорейшего роста и его крутизну
- Против градиента loss убывает быстрее всего локально
- Шаг ограничивают learning rate, потому что градиент верен только около точки
- В минимуме градиент нулевой, но нулевой градиент бывает и в седле
Если ответил, копните глубже
Объясните, как строится ROC-кривая и что такое ROC-AUC.
Что хотим услышать
- Перебор порогов от высокого к низкому
- По осям FPR и TPR (recall)
- Диагональ это случайная модель, AUC 0.5
- AUC это вероятность правильно упорядочить случайную пару
- Не зависит от порога и монотонных преобразований скоров, но не видит калибровку
Если ответил, копните глубже
Middle: 12 вопросов
Практика: почему так, какие компромиссы, что ломается.
Вам выгрузили CSV из CRM. Опишите по шагам, как вы приведёте его в порядок перед анализом.
Что хотим услышать
- Разведка: shape, info, head, describe, доля пропусков по колонкам
- Типы: даты через to_datetime, числа через to_numeric с coerce, категории
- Строки: strip, регистр, единый формат, лишние символы
- Дубли: полные и по ключу, правило какую запись оставить
- Пропуски: природа и стратегия, флаг пропуска
- Проверки: диапазоны, уникальность ключа, сверка сумм с источником
Если ответил, копните глубже
Нам нужно протестировать новую кнопку оплаты в одном клике. Как спроектируете тест?
Что хотим услышать
- Гипотеза с механизмом и ожидаемым эффектом
- Целевая метрика (конверсия в оплату), прокси и guardrail (ошибки оплаты, возвраты, скорость)
- Единица рандомизации: пользователь; анализ по дошедшим до оплаты
- MDE, альфа, мощность: размер выборки и длительность целыми неделями
- Проверки: A/A, SRM, критерий решения заранее
- Что делаем при каждом исходе
Если ответил, копните глубже
Сравните MLE и MAP. Когда разница существенна? Приведите пример из практики.
Что хотим услышать
- MLE смотрит только на данные, MAP добавляет приор
- MAP = MLE + регуляризация (гауссов приор ↔ L2, лапласов ↔ L1)
- Разница велика при малых данных, исчезает при больших
- Пример: CTR нового объявления с 1 кликом из 2 показов
- Оба дают точечную оценку, в отличие от полного байесовского вывода
Если ответил, копните глубже
Задача с 0.2% положительных (например, мошенничество). Расскажите вашу стратегию от данных до порога.
Что хотим услышать
- Метрики: PR-AUC, recall при фиксированной precision, стоимость ошибок
- Разбиение со стратификацией и честное распределение в валидации
- Модель: бустинг с весами классов или без, сравнить
- Семплирование только внутри фолда, калибровка после
- Порог по бизнес-стоимости и ёмкости проверки, мониторинг
Если ответил, копните глубже
Loss не падает с первых шагов. Как вы будете искать причину?
Что хотим услышать
- Переобучиться на одном маленьком батче: если не получается, баг в коде
- Проверить данные и метки: соответствие, нормализация, перемешивание
- Проверить loss и выход: логиты против вероятностей, правильный reduction
- Проверить цикл: zero_grad, backward, step, режим train, requires_grad
- Подбор lr, нормы градиентов по слоям, инициализация
Если ответил, копните глубже
Спроектируй схему базы для заказов интернет-магазина: клиенты, товары, заказы, оплаты. Какие таблицы, ключи и ограничения?
Что хотим услышать
- Таблицы customers, products, orders, order_items, payments и их связи
- order_items как связь заказа и товара с qty и ценой на момент покупки
- Ограничения: FK, NOT NULL, CHECK (qty > 0), UNIQUE там, где нужно
- Типы: numeric или копейки для денег, timestamptz для времени, статус через CHECK или enum
- Индексы на FK и под частые запросы (заказы клиента по дате)
- Платежи отдельной таблицей с идемпотентным внешним id от платёжки
Если ответил, копните глубже
Объясни решение задачи «минимальное число монет для суммы» и его сложность. Почему тут не подходит жадность?
Что хотим услышать
- Показывает контрпример для жадности
- Формулирует состояние: dp[s] минимум монет для суммы s
- Переход: dp[s] = min(dp[s - c] + 1) по монетам
- База dp[0] = 0, остальные Infinity, недостижимо → -1
- O(S · k) времени, O(S) памяти
Если ответил, копните глубже
Почему вы ищете новую работу?
Что хотим услышать
- Причина через цель, а не через бегство
- Ни слова негатива о текущем работодателе
- Показано, что на текущем месте был рост и результаты
- Связка с этой вакансией
- Коротко: до минуты
Если ответил, копните глубже
Как посчитать DAU и WAU по московскому времени, если события лежат в UTC? Какие ловушки?
Что хотим услышать
to_datetime(..., utc=True)иtz_convert("Europe/Moscow")до взятия даты- День:
dt.normalize()илиdt.dateпосле конвертации nuniqueпользователей, а не число событийresampleили полная сетка дат, чтобы пустые дни были видны- WAU не равен сумме DAU, считать уникальных за неделю
- Неделя с понедельника:
to_period("W")
Если ответил, копните глубже
Менеджер спрашивает: «Почему нельзя остановить тест, как только он стал значимым? Это же экономит время». Объясните.
Что хотим услышать
- 5% ошибки гарантированы только для одной проверки в конце
- Каждая промежуточная проверка даёт ещё шанс случайно пересечь порог
- При ежедневных проверках ложных побед в разы больше
- Ранние дни не покрывают недельную сезонность и новизну
- Если досрочная остановка нужна, её закладывают в дизайн: последовательные тесты
- Промежуточно можно смотреть guardrail и SRM
Если ответил, копните глубже
Как вы на практике подбираете learning rate для новой модели?
Что хотим услышать
- Поиск по логарифмической сетке (1e-5 … 1e-1) на коротких прогонах
- LR range test: растить lr и смотреть, где loss начинает расти
- Признаки плохого lr по кривым: взрыв и NaN, или слишком медленное падение
- Расписание: warmup и затухание (cosine, step)
- Связь с размером батча и оптимизатором
Если ответил, копните глубже
Как вы выбираете метрику качества для новой задачи классификации? Приведите пример.
Что хотим услышать
- От бизнес-цели и цены ошибок FP и FN
- Учёт баланса классов: при редком классе PR-AUC, precision@k, recall при фиксированной precision
- Нужны ли вероятности: тогда log loss, Brier, калибровка
- Офлайн-метрика для сравнения моделей и решение по порогу отдельно
- Проверка связи офлайн-метрики с онлайн-эффектом
Если ответил, копните глубже
Senior: 12 вопросов
Глубина и опыт: границы подходов, решения в продакшене.
Что изменилось в pandas 3.0 и на что это влияет в существующем коде?
Что хотим услышать
- Copy-on-Write по умолчанию: результат индексации ведёт себя как копия
- Цепочное присваивание
df["a"][0] = 1больше не меняет df - SettingWithCopyWarning ушёл вместе со старой моделью
- Строки по умолчанию получают dtype
strвместоobject - Проверки
dtype == objectв коде надо пересмотреть - Перед обновлением прогнать тесты на 2.x с включёнными опциями будущего поведения
Если ответил, копните глубже
Как вы поступаете с выбросами в данных при анализе и в A/B-тестах?
Что хотим услышать
- Сначала понять природу: ошибка, бот, тест или реальный крупный клиент
- Ошибки и ботов исправить или исключить по правилу, записанному заранее
- Реальные значения не удалять: они часть бизнеса
- Для тестов: винзоризация или устойчивые метрики, правило до запуска
- Проверить чувствительность вывода: с выбросами и без
- Одинаковая обработка во всех группах
Если ответил, копните глубже
Объясните, как MSE и кросс-энтропия выводятся из метода максимального правдоподобия.
Что хотим услышать
- MLE: максимизировать Σ log p(yᵢ | xᵢ, θ), то есть минимизировать отрицательный log-likelihood
- Регрессия: y ~ N(f(x), σ²) даёт MSE
- Классификация: y ~ Бернулли(p(x)) даёт binary cross-entropy
- Многоклассовая: категориальное распределение даёт softmax с кросс-энтропией
- Другое распределение шума даёт другую потерю (Лаплас: MAE, Пуассон: Poisson loss)
Если ответил, копните глубже
Продакт просит «сделать ML, чтобы клиенты меньше уходили». Как вы превратите это в ML-задачу?
Что хотим услышать
- Уточнить бизнес-цель и действие: что сделаем с прогнозом (скидка, звонок)
- Определить целевую переменную и горизонт: отток за 30 дней, что считается оттоком
- Момент прогноза и признаки только из прошлого, без утечек
- Метрики: офлайн (PR-AUC, uplift) и бизнес (сохранённая выручка), бейзлайн
- Проверка эффекта экспериментом, подумать про uplift-модель
Если ответил, копните глубже
Расскажите, как менялись функции активации от сигмоиды до SwiGLU и чем каждая решала проблемы предыдущей.
Что хотим услышать
- Сигмоида и tanh: насыщение, затухание градиента, сигмоида не центрирована
- ReLU: нет насыщения справа, дёшево, но мёртвые нейроны
- LeakyReLU, ELU: ненулевой градиент слева
- GELU, SiLU: гладкие, стандарт в трансформерах
- Гейтированные (GLU, SwiGLU) в MLP-блоках LLM
Если ответил, копните глубже
Расскажите, как в PostgreSQL устроен MVCC, откуда берутся мёртвые строки и зачем нужен VACUUM.
Что хотим услышать
UPDATEсоздаёт новую версию строки, старая остаётся сxmax;DELETEтолько помечает версию- Каждая транзакция видит версии по своему снимку, поэтому чтение не блокирует запись и наоборот
- VACUUM удаляет версии, которые уже никому не видны, обновляет visibility map и замораживает старые строки
- Долгие транзакции и забытые слоты репликации мешают очистке и раздувают таблицы
- Autovacuum настраивают по таблицам:
autovacuum_vacuum_scale_factor, лимиты стоимости; мониторинг черезpg_stat_user_tables - HOT-обновления и
fillfactorуменьшают нагрузку на индексы
Если ответил, копните глубже
VACUUM FULL отличается от обычного?Вы претендуете на senior. Расскажите о себе.
Что хотим услышать
- Назван масштаб: команда, нагрузка, пользователи или деньги
- Есть решения, которые повлияли дальше своего кода
- Есть метрики результата
- Упомянуто влияние на команду: менторинг, процессы, ревью
- Уложился в 2 минуты, не утонул в деталях
Если ответил, копните глубже
Вам дали новый датасет заказов. Какие графики построите в первые полчаса и что будете в них искать?
Что хотим услышать
- Динамика числа заказов и выручки по дням: провалы, всплески, неполные периоды
- Распределения ключевых чисел, часто в логарифме: хвосты, выбросы, нули
- Доли пропусков по колонкам
- Сравнение сегментов: boxplot или ECDF
- Связи: scatter или heatmap корреляций
- Проверка гипотез о качестве данных, а не красивые картинки
Если ответил, копните глубже
Как вы выбираете α и мощность для теста? Какая ошибка дороже в продукте?
Что хотим услышать
- α и мощность задают цену ложного срабатывания и пропуска
- Стандарт 5% и 80% не догма
- Рискованное изменение (цены, платёжный поток): строже α, жёсткие guardrail
- Дешёвые обратимые изменения: можно мягче α ради скорости
- Пропуск эффекта дорог, если трафика мало и тестов мало
- Решение фиксируется до теста
Если ответил, копните глубже
Где в ML используется идея низкорангового приближения матриц? Приведите два-три примера и объясните, почему это работает.
Что хотим услышать
- Усечённое SVD как лучшее приближение ранга k (Эккарт-Янг)
- Матричная факторизация в рекомендациях: пользователи и товары как векторы латентных факторов
- LoRA: обновление весов ΔW = BA с маленьким рангом r
- Сжатие слоёв и эмбеддингов, LSA для текстов
- Работает, потому что реальные матрицы имеют быстро убывающий спектр
Если ответил, копните глубже
Спроектируйте систему обнаружения мошеннических платежей для банка: решение по платежу нужно за 100 мс.
Что хотим услышать
- Требования: латентность, цена пропуска и ложной блокировки, действия (блок, доп. проверка, разбор аналитиком)
- Данные и метки: задержка меток (чарджбэки), selective labels, дисбаланс
- Признаки: профиль клиента батчем, скоростные признаки в реальном времени, устройство и граф связей
- Модель: бустинг, правила как первая линия, пороги по стоимости, калибровка
- Валидация по времени, метрики recall при фиксированной доле блокировок, PR-AUC
- Прод: онлайн-инференс, feature store, мониторинг дрейфа, holdout для меток, быстрое переобучение
Если ответил, копните глубже
Объясните, как квантуют большие языковые модели до 4 бит и почему это работает с небольшими потерями.
Что хотим услышать
- Квантуются в основном веса, активации остаются в bf16 (weight-only)
- Групповое квантование с масштабом на группу (например 128 весов)
- Выбросы и чувствительные каналы: методы учитывают важность весов (GPTQ, AWQ и подобные)
- Выигрыш: память и скорость в memory-bound декодировании
- Проверка: перплексия и задачи, особенно рассуждения и длинный контекст
Если ответил, копните глубже
Задача для live coding
Заполнить пропуски медианой группы
Дан список записей rows ({"city", "salary"}, salary может быть None). Заполните пропуски в salary медианой зарплаты своего города. Если в городе нет ни одного значения, используйте медиану по всем данным. Верните список зарплат в исходном порядке, округлённых до 1 знака.
- Подсказка, если застрял:
groupby(...).transform("median")сохраняет длину. - Подсказка, если застрял: Второй
fillnaдля городов без данных.
Эталон, тесты и таймер открываются интервьюеру в живом моке
Рубрика оценки: 1-4 балла
Те же критерии процесса, что в живом моке Техпрогона. Ставьте балл по каждому пункту, сумма показывает картину лучше, чем «понравился или нет».
Уточнил условие
Ограничения, формат входа, что вернуть при пустом вводе
Привёл примеры до кода
Обычный случай и хотя бы один краевой
Проговорил алгоритм словами
До того как писать код
Назвал сложность
По времени и по памяти
Написал рабочий код
Тесты прошли
Сам проверил краевые случаи
Прогнал в голове пустой ввод, один элемент, дубликаты
Нашёл и исправил ошибку сам
Или ошибок не было с первого раза
Мок-собес без регистрации для интервьюера
Хотите проверить кандидата на задаче с эталоном и рубрикой? Так работает живой мок в Техпрогоне.
Кандидат готовится в Техпрогоне и на задаче открывает ступень «Живой мок».
Он присылает вам ссылку. Вы открываете её без регистрации.
У вас условие, эталон, рубрика, уточняющие вопросы и таймер.
Вы ставите оценки и вердикт, кандидат сразу видит результат.
Для интервьюера бесплатно. Ссылку создаёт кандидат на тарифе Рывок
Наборы для других ролей
Готовитесь к собесу сами? Подготовка к собеседованию: Data Scientist