
Привет! Меня зовут Владимир Суворов, я Senior Data Scientist в Страховом Доме ВСК и core-разработчик нашей библиотеки машинного обучения OutBoxML.
В эпоху ChatGPT, LLM и Reinforcement Learning классические методы машинного обучения часто остаются в тени. Однако для большинства бизнес-задач именно они — бустинг и GLM — оказываются наиболее эффективными. Они не только показывают отличные результаты, но и, что критически важно, обеспечивают интерпретируемость, которую часто требуют бизнес-заказчики и регуляторы. Попробуйте объяснить страховому актуарию, как именно нейросеть оценила риск клиента — задача нетривиальная. С GLM-моделями таких проблем не возникает.
Но сегодня мы поговорим не о выборе алгоритмов, а о том, как автоматизировать весь процесс ML — от данных до деплоя и мониторинга, сократив время на подготовку с дней до часов. Мы разберем это на примере классической задачи о Титанике, реализованной на нашем фреймворке.
Зачем нужны Auto ML фреймворки

Мечта любого дата‑сайентиста ‑ получить готовый ML‑пайплайн «из коробки», где:
Обучение базовой модели запускается одной командой;
Производится сравнение с предыдущей версией модели;
Рассчитывается потенциальный финансовый эффект;
Принимается решение о деплое модели на основе метрик;
Результаты экспортируются в MLFlow, Git, дашборды, письма и т. д.
Вся информация о процессе, параметрах логируется.
При ручном управлении процесса повышается суммарная вероятность ошибки на каждом из этапов, общее время увеличивается.
Что же даёт хороший ML-фреймворк?
Единый процесс обучения
Стандартизированные пайплайны для feature engineering.
Автоматический расчёт метрик (включая бизнес-показатели, например, прогнозируемую прибыль).
Гибкие настройки каждого этапа ML в виде пользовательских подключаемых интерфейсов. (Все базовые настройки логируются)
Версионирование артефактов и запусков (конфиги, метрики, модели).
Интеграция с модель-репозиториями (MLflow, Gitlab).
Как итог: быстрый вывод в продакшен.
|
Без фреймворка |
С фреймворком |
Подготовка данных |
Правила подготовки зависят от данных и модели |
Данные обрабатываются по заранее заданным правилам (конфигу) |
Обучение модели |
Выбор любой модели |
Выбор архитектуры из библиотеки или пользовательская модель |
Добавление факторов и фичей |
Ручная проверка фичей, пользовательская оценка, решение о вводе фичи принимается пользователем |
Автоматически проверяются и добавляются в модель |
Деплой |
Ручная проверка моделей и написание сервиса |
Автоматические проверки и деплой. Сервис «из коробки» |
Мониторинг |
Отдельный процесс мониторинга под каждую модель |
Мониторинг «из коробки» для полученной модели по конфиг файлу |
Рассмотрим технические особенности работы с нашим фрейморком на примере классической задачи о Титанике.
Задача о Титанике
Задача о Титанике является одной из самых известных и часто используемых в обучении машинному обучении. Думаю, что в подробном описании не нуждается. Она основана на исторических данных о пассажирах, которые находились на борту знаменитого лайнера «Титаник», затонувшего 15 апреля 1912 года в северной части Атлантического океана.
Цель модели состоит в том, чтобы предсказать, выживет ли пассажир (т.е. будет ли он спасен или нет) на основе различных признаков, таких как:
Пол (Sex): Мужчина или женщина — исследования показывают, что женщины и дети спасались чаще.
Возраст (Age): Молодые дети и пожилые люди имели разные шансы на выживание.
Класс (Pclass): Социальный статус пассажиров, определяющий уровень комфорта и возможностей в случае эвакуации.
Число братьев/сестер или супругов на борту (SibSp): Наличие семьи на борту могло повлиять на шансы на выживание.
Цена билета (Fare): Экономическая способность пассажиров также могла играть определенную роль в их выживании.
Место отправления (Embarked): Порт, из которого пассажир сел на борт, мог отражать социальные и экономические условия.
Помимо основных факторов, представленных выше, датасет имеет поля, отражающих ненужную информацию: номер билета, имя пассажира и его номер.
Знакомство с нашим Auto ML фреймворком
Как организовать непрерывное обновление моделей без простоя сервиса: в современных ML-системах одна из ключевых задач — обеспечить бесперебойную работу инференса, одновременно позволяя моделям постоянно обучаться на новых данных. В этой статье мы разберем архитектуру такого решения на классическом примере набора данных «Титаник», реализованного с помощью FastAPI, фоновых процессов и механизма автоматического обучения и деплоя моделей (AutoML).
Архитектура решения
Запуск библиотеки подробно описан в статье Библиотека OutboxML от Страхового Дома ВСК / Хабр. Для дальнейшей работы выбираем ветку v. 0.8.1
Идея заключается в параллельной работе двух независимых компонентов:
Сервис инференса FastAPI (examples/titanic/run_service.py): принимает прогнозные запросы в реальном времени.
Фоновый процесс (examples/titanic auto_ml_example.py): периодически проверяет новые данные с заданным интервалом, переобучает модели и обновляет продакшен-сервис. Новая модель, обеспечившая критерий качества по сравнению с предыдущей, автоматически подхватывается сервисом.
Такое разделение гарантирует, что процесс обучения не помешает работе API.
Компонент 1: Сервис инференса на FastAPI
Запуск сервиса является точкой входа для прогнозов. Мы инициализируем приложение и загружаем модель. Параметры host и port передаются для гибкой настройки подключения. Запуск ведется через bash:
python -m service --host 127.0.0.1 --port 8080
Код модуля:
from outboxml.service import run_service
def main(host="127.0.0.1",
port=8080,
):
run_service(
host=host,
port=port)
if __name__ == "__main__":
main()
Компонент 2: Фоновый процесс AutoML
Это ядро системы автоматического машинного обучения. Он работает как независимый скрипт, который запускается параллельно с сервисом FastAPI.
Его алгоритм работы:
Циклический мониторинг данных: Процесс «просыпается» каждые 2 минуты (интервал легко настраивается).
Мониторинг данных: Он проверяет базу данных (например, PostgreSQL) или файловую систему на наличие новых транзакций (записей о пассажирах).
Запуск обучения: Если новые данные обнаружены, запускается скрипт обучения. Этот скрипт передается в виде callback, что делает систему гибкой и расширяемой.
Валидация модели: После обучения запускается скрипт проверки качества новой модели. Он сравнивает ее с текущей продакшен-моделью по заданным метрикам.
Деплой лучшей модели: Если новая модель оказывается лучше, она помечается в MLflow с определенным тегом, например,
Deployment_deсision = True
, после чего сразу загружается в сервис FastAPI c помощью MLFlowRelease, заменяя старую модель в памяти.
def main(auto_ml_script: Callable, config: Any, waiting_time: float):
params = {'script': auto_ml_script, 'config': config, 'waiting_time': waiting_time}
while True:
check_postgre_transaction(**params)
MLFLowRelease(config=config).load_model_to_source_from_mlflow(group_name='example_titanic')
time.sleep(waiting_time)
if __name__ == "__main__":
main(auto_ml_script=titanic_example,
config=config,
waiting_time=2 * 60,
)
Как это работает вместе
Запуск:
В одном терминале:
python / –m run_service.py --host 0.0.0.0 --port 8000
В другом терминале:
python / auto_ml_example.py
Скрипт добавления строки в таблицу
add_to_db
находится вauto_ml_example.py
Работа в продакшене:
Пользователи отправляют HTTP-запросы на /predict API-сервиса и мгновенно получают ответы.
Каждые 2 минуты фоновый процесс проверяет, не появились ли новые данные для обучения.
Обновление:
Как только появляются новые данные, запускается цикл обучения.
Обучение и валидация проходят изолированно от работающего API.
После успешного прохождения проверки новая модель бесшовно подгружается сервисом FastAPI (например, через механизм атомарной замены объекта модели в памяти), не прерывая его работу.
Ключевая идея — обучение не мешает API. Пользователи всегда получают ответы, а новые модели подгружаются «бесшовно».
Далее разберем процесс AutoML более подробно.
Процесс Auto ML

Как это работает
Триггер. Всё начинается с изменения в данных. Пайплайн запускается автоматически по событию транзакции в заранее указанной таблице базы данных (все настройки, включая путь к таблице, хранятся в конфигурационных файлах).
Загрузка и проверка данных. После запуска система:
Загружает новые данные.
Проверяет их на наличие новых признаков (features) или новый строк.
Запускает проверку новых факторов и подбора гиперпараметров моделей.
Обучение и валидация модели. Затем пайплайн:
Обучает модель на актуальных данных.
Сравнивает её качество с предыдущей продакшен-версией по набору метрик.
Ключевой момент: Решение о деплое принимается автоматически на основе предзаданных условий в конфиге. Эти условия включают как стандартные ML-метрики (например, mae), так и бизнес-метрики, которые может задать пользователь (например, ожидаемый прирост маржи).
Формирование отчетности. По итогам работы система автоматически готовит детальный отчёт в формате HTML или email-письма. В отчёт попадают все ключевые артефакты: графики, метрики, проверенный признаки. Все артефакты (модели, конфигурационные файлы, лог выполнения и т.д.) выгружаются в MLFlow. Метрики выгружаются в Grafana.
Деплой. Если система развёрнута в продакшене и новая модель прошла все проверки, она поступает в предразвёрнутый сервис на основе FastAPI, который предоставляется «из коробки».
Итог: Весь процесс — от появления новых данных до выкладки улучшенной модели в продакшен — полностью автоматизирован. Пользователю достаточно настроить конфигурацию один раз, и система будет работать по принципу set-and-forget, запускаясь по триггеру и самостоятельно принимая решения.

Архитектура нашего фреймворка строится вокруг трёх ключевых классов, каждый из которых отвечает за свой этап жизненного цикла модели.
AutoMLManager централизует управление всем пайплайном машинного обучения: от обучения моделей и их сравнения с предыдущими версиями до расчёта метрик качества и финальной выгрузки лучших кандидатов в продакшен.
DataSetsManager берёт на себя всю работу с данными, включая подготовку обучающих выборок, формирование контейнеров с результатами и оркестрацию процессов обработки.
MonitoringManager обеспечивает контроль за работой моделей после деплоя, занимаясь онлайн-мониторингом их производительности, расчётом дата-дрифта, экстраполяцией целевых переменных и другими операциями для сбора актуальных метрик.
Помимо основных классов, фреймворк включает набор вспомогательных компонентов, организованных в отдельные модули. Они отвечают за экспорт данных, предоставление интерфейсов для подготовки и обработки, а также генерацию отчётов. Эти модули могут использоваться как самостоятельно, так и в составе единого пайплайна.
Модульность и гибкость архитектуры реализуется через систему подключаемых интерфейсов, которые поддерживаются каждым из трёх основных классов. Рассмотрим, как это работает на примере задачи с «Титаником».
Процесс начинается с извлечения данных (Extractor). Запускается экстрактор через метод extract_dataset
, и на выходе получается DataFrame для дальнейшей обработки.
Затем в дело вступает предобработка (DataPreprocessor, PrepareDataset). Данные поступают в препроцессор, где подготавливаются согласно правилам, заданным в конфигурации. На этом этапе также можно подключить кастомный интерфейс подготовки PrepareDataset
с его абстрактным методом prepare_data
, возвращающим объект PrepareDatasetResult
.
Следующий этап — обучение моделей (BaseModel). По умолчанию модель выбирается из конфига согласно параметру wrapper
, но возможна и передача кастомной модели с обязательными методами fit
и predict
, поддерживающей классическую архитектуру, например, как у sklearn.BaseEstimator
.
После обучения происходит расчёт метрик (BaseMetric). Контейнер с результатами передаётся базовому интерфейсу ModelMetrics
, который поддерживает пользовательские метрики, реализованные через класс BaseMetric
с абстрактным методом calculate_metrics
, что обеспечивает гибкую систему оценки качества.
Далее система проводит A/B тесты (RetroFS) для проверки значимости новых фичей, используя как встроенные, так и кастомные механизмы анализа через интерфейс BaseFS
.
Завершающий штрих — формирование отчетов. Фреймворк поддерживает различные форматы, такие как HTML и email, через интерфейсы HTMLReport
и Email
, позволяя гибко настраивать содержимое итоговых документов.
Все эти вспомогательные компоненты — от загрузки данных и обработки до моделей, метрик, экспорта результатов, визуализации и отчётов — вынесены в независимые модули, что обеспечивает исключительную гибкость и переиспользуемость кода и могут использоваться независимо:
Преимущества архитектуры
Ключевым преимуществом представленной архитектуры является её комплексный подход к организации ML-пайплайна. Гибкость системы позволяет глубоко кастомизировать каждый этап workflow, что особенно важно при работе с разнородными данными и специфическими бизнес-требованиями. Эта гибкость дополняется модульностью: все компоненты, от обработки сырых данных до генерации отчётов, спроектированы как независимые и заменяемые модули. Это означает, что разработчик может использовать их как в составе цельного пайплайна, так и отдельно для решения точечных задач, что значительно повышает степень повторного использования кода.
В основе всего процесса лежит строгая стандартизация — единые интерфейсы для всех операций гарантируют согласованность работы разных частей системы и упрощают их интеграцию. Такая стандартизация, в свою очередь, создаёт прочный фундамент для расширяемости. Архитектура спроектирована так, что добавление новых функций, метрик, моделей или источников данных становится интуитивно понятной и предсказуемой задачей, что позволяет фреймворку легко адаптироваться к новым вызовам и технологиям.
Выводы
Мы реализовали автоматизированный пайплайн для задачи с Титаник, который при появлении новых данных сам переобучает модель, проверяет её и деплоит, если она лучше предыдущей. Это значительно ускоряет итерации и снижает операционные затраты. Модульная архитектура приложения позволяет гибко применять пользовательские настройки загрузки, обработки данных и обучения в виде независимых подключаемых интерфейсов.
В следующий статьях мы подробнее рассмотрим каждый из этапов обучения и мониторинга моделей на основе библиотеки.
Пишите в комментариях, о каких аспектах автоматизации ML вам хотелось бы узнать подробнее. Удачи в реализации ваших проектов!