Дизайн ML-систем на собеседовании
«Спроектируйте ленту рекомендаций» — интервью, где проверяют не знание формул, а умение довести ML от продуктовой задачи до работающей и наблюдаемой системы. Здесь выигрывает не самая умная модель, а самый структурированный ответ.
Интуиция
ML system design (дизайн ML-систем) — это разговор на 40–60 минут по открытой задаче: рекомендации, антифрод, поиск, модерация контента. Интервьюер смотрит, как ты думаешь: задаёшь ли вопросы, привязываешь ли метрики к деньгам, помнишь ли про данные и продакшн. Главная ошибка кандидатов — прыгнуть в «возьмём трансформер» на первой минуте, пропустив вопросы «а что мы вообще оптимизируем и какой ценой?».
Как это работает: фреймворк из 8 шагов
- Продуктовая цель и ограничения. Что за продукт, кто пользователь, какова цена ошибок: ложное срабатывание (FP) против пропуска (FN)? Какие латентность, масштаб, бюджет? Во фроде FP — заблокированный честный клиент, FN — украденные деньги; баланс определяет всю систему.
- Метрики. Онлайн (бизнес): выручка, retention, доля пойманного фрода. Оффлайн (ML): AUC, recall, nDCG. Обязательно проговори связь: «оптимизируем PR-AUC, потому что классы несбалансированы, и верим, что рост precision снизит потери от блокировок».
- Данные и разметка. Откуда берём: логи, ручная разметка, слабая разметка? Здесь же — дисбаланс классов и утечки (leakage): признак, недоступный в момент предсказания, даст сказочные оффлайн-метрики и провал в проде.
- Бейзлайн — сначала! Правила, логистическая регрессия, «рекомендуем популярное». Бейзлайн проверяет пайплайн данных, даёт точку отсчёта и нередко закрывает задачу.
- Фичи и модель по нарастающей. От простого к сложному, каждое усложнение оправдано метрикой: логрег → градиентный бустинг → нейросети.
- Обучение и валидация. Для временных данных — сплит по времени: трейн на прошлом, тест на будущем. Random split перемешает будущее с прошлым — утечка и завышенные метрики.
- Деплой и сервинг. Батч (пересчитать рекомендации ночью) или реалтайм (фрод-скоринг за 50 мс)? Кэши для тяжёлых фичей, фолбэк на правила или популярное, если модель недоступна.
- Мониторинг и переобучение. Дрифт входных данных, распределение предсказаний, деградация онлайн-метрик; расписание и триггеры переобучения.
Типичные задачи и их акценты
Задач на таких интервью немного, и у каждой — свой центр тяжести. Рекомендации: двухэтапная схема «отбор кандидатов → ранжирование», холодный старт новых пользователей, метрики nDCG и CTR. Антифрод: жёсткий реалтайм, экстремальный дисбаланс классов, адаптирующийся противник — модель устаревает быстро. Поиск: recall на первом этапе против precision на реранжировании, оценка релевантности по кликам с поправкой на позиционное смещение. Модерация контента: цена пропуска токсичного контента против цены ложного бана, обязательный контур человека-ревьюера для спорных случаев. Полезный ход на интервью — явно назвать, к какому классу относится задача, и переиспользовать известные паттерны.
Красные флаги для интервьюера
Эти фразы мгновенно понижают оценку — проверь, что не говоришь их сам:
- «Возьмём нейросеть» без бейзлайна — непонятно, зачем сложность и с чем сравнивать результат.
- Метрика не привязана к продукту — «будем максимизировать accuracy» во фроде с 0.1% положительного класса: константный ответ «не фрод» даст 99.9%.
- Random split временных данных — модель «подглядела» будущее; в проде метрики рухнут.
- Нет плана на отказ — что показывает лента, если сервис ранжирования упал? Ответ «ничего» не принимается: нужен фолбэк.
- «Спроектируйте антифрод» — начни с цены ошибок FP/FN и требования к латентности (реалтайм!), затем по фреймворку; метрика — precision/recall или PR-AUC, не accuracy.
- «Как валидировать модель оттока?» — сплит по времени: учимся на январе–июне, проверяем на июле; random split даст утечку.
- «Модель готова, что дальше?» — теневой запуск (shadow mode), A/B-тест на онлайн-метриках, мониторинг дрифта, план переобучения.
- «Почему сначала бейзлайн?» — точка отсчёта, проверка пайплайна данных и честный ответ на вопрос «а нужен ли здесь ML вообще».