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

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

Собеседование Data Scientist на Госуслуги: вопросы и ответы

Разбор вопросов Data Scientist: многоклассовая классификация, ROC-AUC, TF-IDF, asyncio, сохранение моделей, трансформеры и ускорение инференса.

Опубликовано
Обновлено
Видео вышло
Видео
13:32
Текст
8 минут

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

Смотреть на

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

Как оценивать многоклассовую классификацию

Вопрос: какие метрики выбрать?

Сначала выясняем цену ошибок. Если все классы одинаково важны, можно смотреть macro F1: она считает метрику отдельно по каждому классу и усредняет их с равным весом. Если важна доля верных ответов на сбалансированных данных, полезна accuracy. При сильном дисбалансе одной accuracy недостаточно.

ROC-AUC изначально относится к бинарной классификации. Для нескольких классов используют One-vs-Rest или One-vs-One и явно задают усреднение. Macro даёт классам одинаковый вес, weighted учитывает их размер, micro объединяет решения по объектам.

ROC-кривые для классов и варианты усреднения В многоклассовой задаче ROC-AUC зависит от схемы сравнения и усреднения. Источник: scikit-learn.

Правильный ответ звучит не как список метрик, а как выбор под задачу: «Редкий опасный класс нельзя пропускать, поэтому отдельно контролируем recall этого класса, а общее качество сравниваем по macro F1».

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

Как работает TF-IDF

TF показывает, насколько часто термин встречается в документе. IDF уменьшает вес слов, которые встречаются почти во всех документах. Произведение даёт высокий вес словам, характерным для конкретного текста, но не всего корпуса.

Пример кодаPython
from sklearn.feature_extraction.text import TfidfVectorizer

documents = ["оплата услуги", "ошибка оплаты", "вход в личный кабинет"]

# Превращаем каждый текст в разреженный вектор весов слов.
vectorizer = TfidfVectorizer()
matrix = vectorizer.fit_transform(documents)

# Названия столбцов нужны, чтобы объяснить признаки модели.
print(vectorizer.get_feature_names_out())
print(matrix.toarray().round(2))

TF-IDF не понимает порядок слов и контекст, но остаётся сильным baseline для поиска и классификации. Формулы и параметры реализации есть в руководстве scikit-learn.

Коротко: TF-IDF усиливает слова, частые в конкретном документе, но редкие во всём корпусе.

Зачем DS асинхронность и как сохранять модель

asyncio полезен, когда сервис модели ждёт сеть, базу или другой API. Во время await цикл событий может выполнять другую задачу. Тяжёлый инференс сам по себе асинхронность быстрее не сделает: его выносят в отдельный процесс, модельный сервер или ускоритель.

Сохранять только файл с весами недостаточно. Для воспроизводимости нужны препроцессинг, порядок и типы признаков, словари, версия библиотеки, конфигурация модели, метрики и пример запроса. Иначе файл загрузится, но будет получать данные не так, как при обучении.

Коротко: асинхронность помогает ждать ввод-вывод, а артефакт модели нужно сохранять вместе с препроцессингом и версиями.

Чем отличаются CNN, RNN и трансформеры

CNN применяет фильтры к локальным участкам и хорошо находит короткие шаблоны. В тексте это могут быть устойчивые n-граммы. RNN передаёт скрытое состояние от шага к шагу и естественно учитывает порядок, но последовательная обработка мешает распараллеливанию длинных текстов.

Трансформер связывает токены через attention и обрабатывает много позиций параллельно. Позиционная информация добавляется отдельно. Нельзя говорить, что CNN «только для картинок», а RNN «всегда хуже»: архитектуру выбирают по данным, задержке, объёму обучения и требуемому качеству.

Схема encoder-decoder трансформера Трансформер сочетает attention, полносвязные слои и позиционную информацию. Источник: D. Godoy, Wikimedia Commons, CC BY 4.0.

Коротко: CNN ищет локальные шаблоны, RNN передаёт состояние по последовательности, а трансформер связывает токены через attention.

Что делать, если модель не проходит нагрузочные тесты

Сначала фиксируем требование: p95 задержки, пропускную способность, память и допустимую потерю качества. Затем профилируем весь путь. Проблемой может быть не модель, а токенизация, сетевой вызов или слишком маленький batch.

После измерения рассматриваем батчинг, кэширование, компиляцию графа, меньшую модель, дистилляцию и квантизацию. Понижение точности весов способно уменьшить память и ускорить вычисления; варианты описаны в документации Hugging Face. Любую оптимизацию проверяем на исходном наборе качества и реальном профиле нагрузки.

Коротко: ускорение продакшен-модели начинают с требований и профилирования, а заканчивают повторной проверкой качества.

Получил ли кандидат оффер

В открытом финале решение компании не сообщается. Поэтому мы не будем приписывать кандидату ни оффер, ни отказ. По самим ответам видно несколько рисков: определения иногда были неполными, а сравнение архитектур — слишком общим.

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

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

Чек-лист подготовки

  • Выбираю метрику по цене ошибки.
  • Называю схему и усреднение для multiclass ROC-AUC.
  • Объясняю TF-IDF без фразы «важность слова».
  • Различаю ожидание I/O и вычисление модели.
  • Сохраняю препроцессинг вместе с моделью.
  • Начинаю ускорение с профилирования.

Источники

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

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

Как считать ROC-AUC в многоклассовой задаче?

Классы сводят к набору бинарных сравнений One-vs-Rest или One-vs-One, затем явно выбирают macro-, weighted- или micro-усреднение.

Как правильно сохранять ML-модель?

Сохраняйте не только веса, но и препроцессинг, словари признаков, версию кода, зависимости, метрики и пример входных данных.

Получил ли кандидат оффер?

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

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

Отработайте ответы до реального собеседования

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

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