ML-модуль

Модуль ml/src/ содержит фичеинжиниринг, обучение CatBoost-ансамбля и инференс-сервис на FastAPI.

Задача

  • Residual regression: цель — target_delay_s - cur_dev_s.

  • Такой сдвиг убирает лёгкий базовый прогноз «оставить текущее отклонение как есть» и заставляет модель учить именно поправку.

  • Итоговое предсказание собирается обратно: pred_delay = cur_dev_s + pred_residual.

  • Модель обучается на исторических рейсах с проставленными фактами прибытия.

Схема данных

  • train — исторический датасет рейсов с полной телеметрией и таргетами.

  • test — публичный тест соревнования (структура совпадает с train, target_delay_s отсутствует).

  • validate — внутренние сплиты (K-fold и holdout) поверх train.

  • labels — target_delay_s (секунды, знаковая величина).

CatBoost-ансамбль

  • 5 моделей CatBoost, обученных с разными seed-ами (0..4).

  • Итоговое предсказание — среднее по ансамблю.

  • Есть отдельный «no-route» набор моделей (catboost_noroute_seed*), используется когда категориальные признаки маршрута считаются нестабильными (LOVO / новые маршруты).

  • Полный список из 56 фичей — константа FEATURES в features.tabular (см. также ml/artifacts/bench_latency.json).

  • Основные группы фичей:

    • плановые: plan_gap_prev_s, plan_route_dist_m, plan_speed_kmh, …

    • GPS-агрегаты: gps_med3, gps_med5, gps_max5, gps_slope, …

    • динамика: spd1, spd5, spd15, stop5, spd_trend, …

    • геометрия: dist_tgt_m, dist_next_stop_m, route_left_m, …

    • ETA-подсказки: eta_dev_s, eta_dev_moving_s, req_speed_kmh.

    • временные: hour, hour_sin, hour_cos.

Валидация

  • Proxy K-fold — разбиение по прокси-ключу (рейс/машина), быстрый цикл.

  • Holdout — фиксированный отложенный кусок для честной оценки.

  • LOVO (leave-one-vehicle-out) — устойчивость к новым транспортным средствам.

  • Разрезы качества (маршрут, час суток, хвост распределения) — ml/src/metrics_slices.py.

Латентность

Из ml/artifacts/bench_latency.json (200 запусков, ансамбль из 5 моделей):

  • CatBoost (нативный формат): ~9.4 мс на сэмпл.

  • ONNX fp32: ~1.6 мс на сэмпл (продовый путь).

  • ONNX int8: пока не мерили.

Ссылки