🏢 Ситуация
Полтора года в Datacore позади. Лена приглашает вас в переговорку, там Виктор и Макс:
«Мы открываем позицию Middle ML Engineer, и ты — главный кандидат. Формальность одна: защита сквозного проекта перед нами троими. Задача новая, реальная, целиком твоя — от постановки до плана эксплуатации. Покажи всё, чему научился.»
Проект: служба доставки Datacore хочет предсказывать опоздание заказа (доставим ли позже обещанного срока), чтобы: (а) честно показывать сроки на checkout, (б) проактивно предупреждать клиентов, (в) усиливать проблемные маршруты.
🎯 Ваша задача
Пройти проект по всем шагам самостоятельно, сверяясь с разборами. Это репетиция реальной работы мидла — и вашего собеседования.
💼 Защита проекта: эталонное решение
Шаг 1. Постановка (модули 1, 18)
- Бизнес-метрика: доля заказов, доставленных в обещанный срок (SLA) + NPS доставки.
- ML-задача: бинарная классификация «опоздает / нет» на момент оформления заказа. Вторая очередь — регрессия точного времени.
- Ограничения: предсказание на checkout за < 50 мс; объяснимость для операционной команды.
Шаг 2. Данные и признаки (модули 2, 7)
- История 1.2 млн доставок: маршрут, склад, курьерская служба, товар, время заказа, погода, фактическое время доставки.
- EDA-находки: 2% дублей из-за ретраев; у 8% заказов «отрицательное» время доставки (таймзоны!); пик опозданий в предпраздничные дни.
- Признаки — строго point-in-time: агрегаты опозданий по маршруту/службе за 30/90 дней, загрузка склада на час заказа, календарь, расстояние. Никаких полей, заполняемых после доставки!
Шаг 3. Модель и валидация (модули 4–10)
- Бейзлайн: «опоздает, если маршрут опаздывал в >30% случаев за месяц» → F1 = 0.41.
- Логрег → ROC-AUC 0.78; LightGBM + тюнинг Optuna → ROC-AUC 0.86, PR-AUC 0.52.
- Валидация по времени (rolling, 3 окна), тест — последние 2 месяца, нетронутые до финала.
- Классы 12/88 → веса классов; порог из матрицы издержек: ложная тревога = зря напугали клиента (дёшево), пропуск = сорванное обещание (дорого) → порог на recall 0.85.
Шаг 4. Что показываем на A/B (модули 3, 18)
- Тест на 10% трафика: checkout показывает «честный срок» (прогноз + буфер) вместо стандартного.
- North star: доля заказов в срок; guardrail: конверсия checkout (не упала ли из-за честных, но длинных сроков).
- Результат пилота: SLA-нарушения −22%, конверсия −0.4% (в пределах допуска), обращения «где заказ» −18%.
Шаг 5. Прод и эксплуатация (модуль 19)
- FastAPI + Docker, ONNX-модель, p99 = 23 мс.
- Мониторинг: PSI по признакам и скорам еженедельно; отложенное качество по мере фактических доставок (метки приходят через 1–5 дней — быстрая обратная связь!).
- Переобучение ежемесячно или по алерту дрейфа; shadow mode для новых версий; фолбэк — старая формула сроков.