Назад к материалам

Видео + статья / Собеседования

Собеседование Data Scientist в Газпромбанке: ROC-AUC, Python и L1/L2

Семь вопросов с собеседования Data Scientist в Газпромбанке: правильные ответы про ROC-AUC, ЦПТ, Python, оптимизацию и регуляризацию.

Компания
Газпромбанк
Опубликовано
Обновлено
Видео вышло
Видео
13:33
Текст
9 минут

Если ролик не загружается, выберите другую площадку.

Смотреть на

На технической встрече в Газпромбанке кандидата на позицию Data Scientist проверили по статистике, машинному обучению и Python. Личные данные участников мы не используем. Ниже — самостоятельный разбор семи вопросов: какой короткий ответ ждёт интервьюер, где нужна оговорка и какой пример показывает настоящее понимание.

Что такое ROC-AUC и при чём здесь порог классификации

Короткий ответ: ROC-AUC показывает, насколько хорошо модель ранжирует положительные объекты выше отрицательных по всему диапазону порогов. Значение не привязано к одному порогу классификации.

Сначала модель выдаёт вероятность или score, а затем порог превращает его в класс. Для одной и той же последовательности score изменение рабочего порога меняет precision, recall и матрицу ошибок, но не сам ROC-AUC. Порог выбирают отдельно — по цене пропуска мошенничества, ложной блокировки клиента или другой бизнес-ошибки. В примере scikit-learn порог настраивается под целевую метрику, а не принимается равным 0,5 автоматически.

Пример ROC-кривых для многоклассовой модели

ROC-кривые показывают компромисс между долей верно найденных положительных объектов и ложными срабатываниями. Источник: scikit-learn.

Что на самом деле утверждает центральная предельная теорема

Короткий ответ: при выполнении условий стандартизованное выборочное среднее при росте размера выборки приближается к нормальному распределению. Исходные наблюдения при этом не становятся нормальными.

В базовом варианте мы предполагаем независимые одинаково распределённые наблюдения с конечной дисперсией. Для тяжёлых хвостов, зависимых наблюдений или слишком маленькой выборки нужны дополнительные проверки. Справочник NIST также связывает теорему именно с распределением выборочного среднего.

На интервью полезно привести пример: средний чек в отдельных заказах может иметь асимметричное распределение, но средние по большим независимым группам часто становятся ближе к нормальному. Это помогает строить интервальные оценки, однако не освобождает от проверки дизайна эксперимента и зависимостей в данных.

Чем изменяемые типы Python отличаются от неизменяемых

Короткий ответ: список, словарь и множество можно изменить на месте. Число, строку, bytes и кортеж изменить нельзя: операция создаёт новый объект или новое значение ссылки.

Важно не смешивать изменяемость и хешируемость. Ключ словаря должен быть хешируемым, но не всякий неизменяемый объект автоматически подходит. Например, кортеж со списком внутри не хешируется. Пользовательский класс тоже может определить собственное поведение.

Хороший пример на собеседовании: функция получила список и вызвала append — исходный список снаружи изменился. Если она выполнила text += "!", появилась новая строка, потому что строки неизменяемы. Подробности о типах и протоколах собраны в модели данных Python.

Как работает цикл for и протокол итерации

Короткий ответ: for вызывает iter() для получения итератора, затем повторяет next(). Когда итератор выбрасывает StopIteration, цикл заканчивается.

На уровне класса это обычно методы __iter__() и __next__(). Итерируемый объект умеет отдать итератор, а итератор хранит состояние обхода. Генератор с yield создаёт итератор автоматически и вычисляет значения по мере запроса.

Это объяснение сильнее фразы «цикл проходит по списку», потому что работает для файлов, генераторов и собственных контейнеров. Интервьюер видит, что кандидат понимает ленивую обработку и не обязан заранее хранить всю последовательность в памяти.

Для чего нужны магические методы и dunder methods

Короткий ответ: специальные методы с двойным подчёркиванием подключают объект к операциям языка. __len__ отвечает за len(obj), __getitem__ — за доступ по индексу, __call__ позволяет вызвать объект как функцию, __repr__ задаёт техническое представление.

Частая неточность — называть __init__ конструктором без оговорки. Объект создаёт __new__, а __init__ инициализирует уже созданный экземпляр. В обычном прикладном коде достаточно переопределить __init__, но на собеседовании полезно знать границу.

Не нужно перечислять десятки методов. Выберите один протокол и покажите минимальный класс, который ведёт себя естественно для пользователя.

Как правильно ускорять Python-код

Короткий ответ: сначала измеряем, где программа тратит время, затем исправляем самое дорогое место. Удаление циклов само по себе не является стратегией.

Порядок работы обычно такой: проверить алгоритмическую сложность, запустить cProfile или точечный замер, сократить лишние запросы и копирования, затем рассмотреть векторизацию, кеширование, процессы или нативную библиотеку. Документация профилировщиков Python показывает, как получить статистику вызовов вместо догадок.

Если 90% времени занимает запрос к базе, переписывать небольшую функцию на NumPy бессмысленно. Если узкое место — цикл над миллионами чисел, векторизация может помочь. Сильный ответ всегда связывает оптимизацию с измерением до и после.

Чем отличаются регуляризации L1 и L2

Короткий ответ: L1 добавляет штраф за сумму модулей коэффициентов и может занулить часть весов. L2 штрафует сумму квадратов и обычно плавно уменьшает веса, сохраняя все признаки.

Оба подхода ограничивают сложность модели, но не гарантируют качество без валидации. Признаки обычно масштабируют, иначе штраф действует на коэффициенты неравномерно. При коррелирующих признаках L1 может выбрать один из них, а L2 распределит вес стабильнее. Комбинация называется Elastic Net. Формулы и поведение моделей приведены в руководстве scikit-learn по линейным моделям.

Важно говорить не «большой коэффициент означает переобучение», а «слишком гибкая модель может подстроиться под шум; силу регуляризации мы выбираем по качеству на данных, которые не использовались для обучения».

Итог: получил ли кандидат оффер

Известный факт: итоговое решение Газпромбанка в доступной записи не раскрыто.

Наша оценка: на заявленный уровень кандидат, скорее всего, не прошёл бы этот этап. Проблема не в одной оговорке, а в нескольких пробелах в базовых понятиях: связи ROC-AUC с порогом, протоколе итерации и регуляризации. Такие ответы трудно углубить уточняющими вопросами.

При этом результат можно исправить. Соберите вопросы в один набор, дайте на каждый ответ по схеме «определение — механизм — пример — ограничение», а затем повторите встречу в тренажёре собеседований ЮНИКОД. Цель — не заучить текст, а научиться восстанавливать логику под новым уточнением.

Источники

частые вопросы

Короткие ответы

Нужно ли учить формулы для собеседования Data Scientist?

Формулу полезно понимать, но одной записи недостаточно. Объясните смысл величины, условия применения, способ проверки и пример, где метрика может ввести в заблуждение.

Как отвечать, если забыл точное определение?

Не придумывайте термин. Обозначьте, что помните, приведите рабочий пример и честно назовите границу ответа. После интервью восстановите определение по первичному источнику.

Как тренировать такие вопросы?

Отвечайте по схеме «короткое определение — механизм — пример — ограничение», записывайте себя и повторяйте вопрос через несколько дней в случайном порядке.

следующий шаг

Проверьте ответы до настоящего интервью

Тренажёр ЮНИКОД помогает повторить теорию, найти пробелы и научиться отвечать коротко, точно и по существу.

Перейти в тренажёр →