Вопросы на собеседовании Data Scientist и ML-инженера
Что гоняют на собесе дата-сайентиста: классический ML и метрики качества, статистика и A/B-тесты, нейросети, NLP и LLM, System Design ML. Ниже — реальные вопросы с разбором; полный банк с движком повторения открывается в тренажёре.
- Зачем перед запуском A/B-теста считать размер выборки (power analysis)?A)Чтобы формально отчитаться о самом факте запуска теста перед своим менеджеромB)Чтобы заранее выбрать первичную метрику для оценки результата тестаC)Размер выборки на итоговые выводы теста фактически никак не влияетD)Оценить трафик и срок под MDE/α/мощность; недобранный тест неинформативен
показать ответ и разбор
+D)Оценить трафик и срок под MDE/α/мощность; недобранный тест неинформативен// разбор: Мощность = вероятность увидеть эффект, если он есть. Без расчёта легко запустить тест с мощностью 20%: отрицательный результат неинформативен (эффект мог быть, вы бы его не поймали). Входы: базовое значение метрики, её дисперсия, MDE, α (обычно 0.05), мощность (0.8): отсюда n на группу и срок. MDE диктует бизнес: какой минимальный аплифт окупает изменение.
- Метрика теста — «средний доход на пользователя», но рандомизация шла по сессиям. В чём проблема?A)Никакой проблемы: сессий заметно больше, чем юзеров, значит и мощность теста вышеB)Юнит рандомизации ≠ юнит анализа: сессии юзера зависимы и в обеих группахC)Проблема в том, что группы получились разного размераD)Доход сложно корректно измерять в рамках A/B-теста
показать ответ и разбор
+B)Юнит рандомизации ≠ юнит анализа: сессии юзера зависимы и в обеих группах// разбор: Классическая ловушка: наблюдения внутри юзера коррелированы, а юзер размазан по группам — и независимости нет, и экспозиция смешана. Стандарт: рандомизация по user_id; ratio-метрики (клики/показы) считать с дельта-методом или бутстрепом по юзерам. Проверка «совпадает ли юнит рандомизации с юнитом анализа» — рефлекс сеньора.
- Что такое мощность (power) A/B-теста?A)Вероятность обнаружить эффект при условии, что он на самом деле естьB)Доля пользователей, случайно попавших в тестовую группу вместо контрольнойC)Величина различия между средними в группах на момент стартаD)Вероятность ложно объявить эффект там, где его нет
показать ответ и разбор
+A)Вероятность обнаружить эффект при условии, что он на самом деле есть// разбор: Мощность 1−β — вероятность отвергнуть нулевую гипотезу, когда эффект действительно существует. Обычно целятся в 0.8: тест поймает реальный эффект в 80% случаев. Низкая мощность означает высокий риск ошибки II рода — пропустить настоящий эффект. Вероятность ложного прокраса — это α (ошибка I рода), другая величина.
- Зачем в A/B-тестах специально снижают дисперсию метрики?A)Чтобы искусственно увеличить наблюдаемый эффект фичиB)Чтобы поймать тот же эффект на меньшей выборке или точнее — на той жеC)Чтобы поднять базовое значение метрики сразу в обеих сравниваемых группахD)Чтобы уравнять размеры тестовой и контрольной групп
показать ответ и разбор
+B)Чтобы поймать тот же эффект на меньшей выборке или точнее — на той же// разбор: Размер выборки растёт с дисперсией (n ∝ σ²). Срезав дисперсию оценки, получаешь либо тот же MDE на меньшем трафике, либо более узкий доверительный интервал на прежнем — тест становится чувствительнее без дополнительных пользователей. Средний эффект при этом не меняется, снижается только шум оценки.
- Почему поиск по ключу в хеш-таблице (dict/set) в среднем O(1), а в списке — O(n)?A)Список хранит элементы строго отсортированными, а хеш-таблица — вперемешку без порядкаB)В списке элементы занимают меньше памяти, поэтому поиск медленнееC)Хеш по ключу сразу вычисляет позицию (бакет), а список надо обходить подрядD)Разницы нет, оба O(n)
показать ответ и разбор
+C)Хеш по ключу сразу вычисляет позицию (бакет), а список надо обходить подряд// разбор: Хеш-функция превращает ключ в индекс бакета за O(1), и мы прыгаем прямо к нему. В списке адреса по значению неизвестны, поэтому линейный поиск обходит элементы один за другим — O(n). Цена O(1): нет порядка и есть накладные расходы на хеширование и коллизии.
- Алгоритм работает за O(n). Что это значит на практике?A)Он выполняет ровно n операций при входе — ни больше, ни меньшеB)Число операций растёт линейно с размером входа nC)В худшем случае он делает порядка n² операцийD)Ему требуется ровно n байт дополнительной памяти
показать ответ и разбор
+B)Число операций растёт линейно с размером входа n// разбор: O(n) — про асимптотику: при росте входа вдвое время растёт примерно вдвое. Это верхняя оценка скорости роста, а не точное число операций и не про память. Константы и младшие члены отбрасывают: O(3n+5) — это O(n).
- Бинарный поиск работает за O(log n). Какое условие обязательно для его применения?A)Массив должен состоять из чисел, строки бинарным поиском искать не получитсяB)Массив (или диапазон) должен быть отсортирован по искомому ключуC)В массиве не должно быть повторяющихся значенийD)Размер массива должен быть степенью двойки
показать ответ и разбор
+B)Массив (или диапазон) должен быть отсортирован по искомому ключу// разбор: Бинарный поиск на каждом шаге отбрасывает половину диапазона, сравнивая середину с искомым — это возможно только если данные упорядочены по ключу. O(log n) — число делений пополам до одного элемента. Повторы и нечисловые типы допустимы (лишь бы был порядок); степень двойки не требуется.
- Стек (stack) — это структура с дисциплиной...A)LIFO: последним пришёл — первым вышелB)FIFO: первым пришёл — первым вышелC)По приоритету: первым выходит элемент с наименьшим ключом среди всех имеющихсяD)Случайного доступа по индексу
показать ответ и разбор
+A)LIFO: последним пришёл — первым вышел// разбор: Стек — LIFO: push кладёт наверх, pop снимает верхний, оба O(1). Аналогия — стопка тарелок. FIFO — это очередь, приоритет — куча. Стек естественно моделирует вложенность: вызовы функций (call stack), парсинг скобок, откат (undo), обход в глубину.
- Чем отличаются два способа реализации DP: мемоизация и табуляция?A)Мемоизация — рекурсия сверху вниз с кэшем; табуляция — итеративное заполнение таблицы снизу вверхB)Мемоизация применима только к задачам на графах, а табуляция — исключительно к задачам на деревьях и решёткахC)Это два названия одного и того же приёмаD)Табуляция экспоненциальна, мемоизация линейна
показать ответ и разбор
+A)Мемоизация — рекурсия сверху вниз с кэшем; табуляция — итеративное заполнение таблицы снизу вверх// разбор: Оба варианта DP устраняют повторный счёт перекрывающихся подзадач, но идут с разных концов. Мемоизация — это рекурсия сверху вниз, которая запоминает результат каждой подзадачи и при повторе берёт из кэша; считает только реально нужные подзадачи, но держит стек рекурсии. Табуляция заполняет таблицу снизу вверх циклом от базовых случаев; нет рекурсии и её стека, но иногда считает лишние ячейки.
это девять из 1565
В тренажёре ещё 1556 вопросов по теме — с движком повторения.
Разбор прочитать мало: навык ставится практикой. В Сеньорчике вопросы идут сессиями, а движок возвращает темы, где вы плывёте, пока не начнёт отскакивать от зубов. Роль «Data Scientist / ML» — 21 тем, 1565 вопросов. Начать можно бесплатно.