Собес в Авито · Data Scientist (автоматическая модерация)
Материал Эйч · Опубликовано 27 октября 2026
Обзор
ML для текста, фото и видео: поиск нарушений, NER, CV и устойчивость моделей в проде на масштабе Авито
Фишка: Команда автомодерации закрывает >95% объявлений алгоритмами; собеседование проверяет готовность работать с высоким потоком данных, несколькими модальностями и постоянной эволюцией нарушений.
| Этап | Длительность | Что проверяют |
|---|---|---|
| Скрининг / HR | 30–45 мин | Мотивация, опыт ML в проде 3+ лет, формат работы (офис/гибрид/удалёнка), ожидания по компенсации |
| Техническое интервью | 60–90 мин | Теория ML/DL, Python, SQL, разбор прошлых проектов по модерации, классификации, NLP/CV |
| Углублённый ML / кейс | 60–90 мин | Задачи автомодерации: дисбаланс классов, мультимодальность, переобучение пайплайнов, метрики бизнеса |
| Финал с командой | 45–60 мин | Культура DS в Авито, взаимодействие с разработкой и заказчиками, ownership моделей после внедрения |
Стек и темы
Обязательный минимум
- Python (pandas, sklearn, PyTorch/TF на уровне проектов)
- Классификация, детекция, NER, эмбеддинги текстов
- Метрики для несбалансированных классов (precision/recall, PR-AUC, cost-sensitive)
- SQL (JOIN, агрегации, OLTP vs аналитика)
- Валидация, кросс-валидация, утечки данных
- Мониторинг деградации моделей и переобучение
Плюсом будет
- Опыт с LLM и chat template для инструктивных моделей
- RecSys (смежные команды Авито)
- Survival analysis и кластерная рандомизация в экспериментах
- CUDA: memory-bound vs compute-bound
- Git, документирование экспериментов, Kaggle/соревнования
Классическое ML и ансамбли
Как менять параметры модели и гиперпараметры? Как понимать, в какую сторону менять?
Веса — градиент функции потерь; гиперпараметры — grid/random/Bayesian, валидационная метрика, learning rate schedule.
Какие модели берут в bagging? Какая глубина деревьев?
Базовые — глубокие одиночные деревья (высокая дисперсия); в Random Forest деревья растут до листьев или с ограничением глубины для разнообразия.
Что выступает в роли «весов» в градиентном бустинге?
Отрицательный градиент/остатки функции потерь; каждое новое дерево аппроксимирует ошибку ансамбля.
Слабые модели — чем это проявляется?
Underfitting: высокая ошибка на train и test, не хватает ёмкости или признаков; противоположность переобучению.
Какие ограничения AutoML на больших данных?
Стоимость перебора, память, время; часто сэмплирование и распределённые фреймворки; риск переобучения на валидации при многих trial.
Фишка: В модерации часто ансамбли и бустинги на табличных признаках сочетаются с DL на тексте/картинках — готовьте примеры, где что выбрали и почему.
Ловушка: Не путайте гиперпараметры обучения с весами модели и не забывайте про дисбаланс классов при выборе loss и метрик.
Deep Learning: NLP, CV и мультимодальность
Как получить эмбеддинг длинного текста (описание товара) для классификации?
Chunking + эмбеддер (BERT/ST); агрегация mean/max/attention; при лимите токенов — иерархия или truncation с риском потери смысла.
Для чего нужен pooling слой?
Снижение размерности, инвариантность к сдвигу; max vs average pooling в CNN.
Как работает свёрточный слой?
Скользящие фильтры по пространственным осям, карты признаков, padding/stride, число каналов на выходе.
Что такое chat template и зачем он для инструктивных LLM?
Фиксированный формат ролей (system/user/assistant); без него модель хуже следует инструкциям и ломается special tokens.
Чем memory-bound отличается от compute-bound?
Узкое место — пропускная способность памяти vs FLOPS; в inference/training batch size и fusion влияют на профиль.
Совет: Свяжите ответы с вакансией: классификация изображений, детекция объектов, поиск запрещённого контента в тексте и на медиа.
Валидация, эксперименты и статистика
Как делим данные для кросс-валидации?
K-fold/stratified по таргету; для временных рядов и прод-логов — time-based split; группировка по user/item против утечек.
Какие методы кластеризации эксперимента (cluster randomization)?
Рандомизация кластеров (регион, продавец), а не пользователей; учёт ICC, размер выборки больше, чем при user-level.
Что такое survival analysis и какие данные нужны?
Время до события + цензурирование; в продукте — отток, время до блокировки объявления; Kaplan-Meier, Cox.
Ловушка: В модерации легко получить leakage (повторные объявления одного продавца) — явно проговорите стратегию сплита.
SQL и хранилища данных
Какой тип JOIN по умолчанию при написании просто JOIN?
INNER JOIN — только совпадающие ключи в обеих таблицах.
В чём разница OLTP и OLAP?
OLTP — транзакции, нормализация, низкая латентность; OLAP — аналитика, денормализация/колоночные хранилища, агрегации.
Какая структура в Python моделирует NoSQL-документ?
Вложенные dict/list, произвольные поля; аналог документов MongoDB.
Совет: На собесе могут дать простой SQL: джойн логов модерации с объявлениями, доля автоматических решений по категориям.
Python и базовый код
Как реализовать реверс массива без дополнительных структур?
Два указателя с концов, swap пока left < right; O(n) по времени, O(1) память.
Совет: Проверяют чистый код на Python: edge cases (пустой массив, один элемент), читаемые имена.
Задачи
Реверс массива
Напишите функцию, которая разворачивает массив целых чисел на месте за O(n) времени и O(1) дополнительной памяти.
def reverse_inplace(a):
l, r = 0, len(a) - 1
while l < r:
a[l], a[r] = a[r], a[l]
l += 1
r -= 1
return aСложность: O(n) время, O(1) память
Эмбеддинг длинного описания
Есть описание товара на 5000 символов. Нужен один вектор признаков для бинарного классификатора «нарушение / нет». Опишите пайплайн без обучения новой трансформерной модели с нуля.
Разбить на предложения/абзацы в пределах лимита токенов; прогнать через предобученный энкодер; агрегировать (mean pooling по чанкам или weighted по длине); опционально PCA/нормализация; обучить лёгкий классификатор (логрег/LightGBM) на валидации со stratified split по продавцу.
Сложность: Линейно по числу чанков относительно длины текста
Метрика для автомодерации
Класс «нарушение» редкий (1%). Ручная проверка дорогая. Какую метрику и порог выберете и как объясните бизнесу?
Precision@k / recall при фиксированном бюджете асессоров; PR-кривая; cost matrix (ложное пропускание vs ложная блокировка). Порог — по максимизации ожидаемого utility или при заданном минимальном recall для опасных классов.
Сложность: Зависит от размера валидации и стабильности оценки порога
System Design
- Спроектируйте сервис автомодерации объявлений с потоком тысяч объявлений в минуту: текст, фото, видео.
- Как обеспечить устойчивость к сбоям в цепочке автоотклонения (очереди, внешние API, модели)?
- Как организовать автоматическое переобучение моделей поиска нарушений при деградации метрик?
Каркас ответа
- Уточнить SLA, долю автоматических решений и эскалацию на асессоров
- Схема: ingestion → feature extraction → модели по модальностям → policy/ensemble → decision + audit log
- Хранение: сырые артефакты, версии моделей, состояние объявления, idempotent обработка
- Очереди (Kafka и аналоги), retry, dead letter, circuit breaker для внешних сервисов
- Мониторинг: latency, drift, precision/recall по срезам, алерты, shadow/canary deploy
- Feedback loop: разметка асессоров → датасет → scheduled retrain с валидацией на holdout по времени
Поведенческое
- Расскажите о ML-решении в проде: задача, метрика успеха, что изменилось после запуска
- Как оценивали качество модели не только при релизе, но и через месяцы эксплуатации?
- Пример, когда пришлось отказаться от сложной модели в пользу простой эвристики — почему?
- Как взаимодействовали с разработкой и заказчиком при внедрении модели?
- Был ли опыт с RecSys или LLM? Как это может пригодиться в экосистеме маркетплейса?
- Как документируете эксперименты и критически оцениваете результаты?
План подготовки
3 дня
- Повторить bagging/boosting, метрики на imbalanced data, leakage в CV
- Прорешать 2–3 задачи на Python (массивы, простая обработка текста)
- Подготовить 2 STAR-кейса: продовая модель и деградация/переобучение
7 дней
- NLP: эмбеддинги, chunking; CV: CNN, pooling, детекция vs классификация
- SQL: JOIN, оконные функции, типовой запрос по логам модерации
- Набросать схему автомодерации Авито: модальности, очереди, мониторинг
14 дней
- System design: отказоустойчивость, версионирование моделей, A/B и cluster randomization
- LLM: chat template, ограничения inference (memory/compute)
- Прочитать описание вакансии и сопоставить каждый буллет с вашим опытом или учебным проектом
| Блок | Готов, если... |
|---|---|
| Классическое ML | можете объяснить bagging vs boosting и выбор метрики при 1% позитива |
| DL / мультимодальность | опишете эмбеддинг длинного текста и роль pooling в CNN |
| SQL и данные | пишете JOIN и отличаете OLTP от OLAP в контексте логов модерации |
| Прод и дизайн | нарисуете поток автомодерации и что хранить для fault tolerance |
| Поведение | есть два кейса с цифрами до/после внедрения ML |
В день собеседования
- Повторить формулы precision/recall и когда что важнее для модерации
- Иметь под рукой вопросы про команду, стек MLOps, частоту переобучения моделей
- 10 минут: спокойно проговорить вслух пайплайн «объявление → решение»