Модель работает в ноутбуке: как передать её коллегам

Коллега присылает таблицу клиентов и просит посчитать вероятность повторной покупки. Вы открываете ноутбук, меняете путь к файлу, запускаете ячейки, отправляете результат. Через два дня приходит новый файл. Модель уже приносит пользу, но каждый прогноз по-прежнему проходит через вас.

Чтобы передать её в работу, сначала выясните, как коллега принимает решение. Ему нужен список каждое утро, прогноз для одной заявки во время разговора или возможность иногда загрузить свою таблицу? Ответ определяет способ доставки, а заодно позволяет избежать лишней разработки.

Сначала отделить прогноз от эксперимента

В ноутбуке рядом живут обучение, графики, очистка данных и получение прогноза. Пользователю нужен короткий воспроизводимый путь: получить входные данные, проверить их, применить сохранённые преобразования и модель, вернуть результат с идентификаторами исходных объектов.

Например, отдел продаж ждёт список клиентов с вероятностью повторной покупки за следующий месяц. Согласуйте смысл вероятности, дату, на которую собраны признаки, и действия с результатом. Вероятность покупки сама по себе не доказывает, что скидка изменит поведение клиента. Это влияет на применение модели ещё до выбора сервера.

Запишите входные столбцы, типы, единицы и правила пропусков. Если модель использует количество заказов за последние 30 дней, задайте точку отсчёта. Коллега не должен угадывать, считать ли сегодняшний день и включать ли отменённые покупки. Выход должен содержать идентификатор клиента, прогноз, дату расчёта и версию модели.

Сохраните вместе с моделью необходимую подготовку признаков и зависимости окружения. При загрузке модели важны совместимые версии библиотек; файлы форматов на основе pickle следует загружать только из доверенного источника. Перед передачей сверьте требования выбранного формата сохранения и зафиксируйте версии библиотек в комплекте модели.

Если ответ нужен утром, начните с пакетного расчёта

Когда отдел каждый день работает с готовым списком, модель может обрабатывать файл или таблицу целиком и сохранять результат в согласованное место. Это пакетный расчёт, или batch. Коллега открывает итог привычным способом и не знает, какие библиотеки вы использовали.

Сначала сделайте один запуск по инструкции, затем добавляйте расписание. Сохраните число входных строк, число успешных прогнозов и причины отклонения остальных. Если часть файла не обработана, пользователь должен увидеть это до принятия решения. Продумайте повторный запуск за ту же дату: он должен заменять нужный результат или создавать явную новую версию, а не незаметно добавлять дубли.

У такого подхода есть понятная граница: свежесть ограничена частотой расчёта. Если список обновляется ночью, в нём ещё нет событий сегодняшнего утра. Для планирования обзвона это может быть приемлемо. Для ответа по только что созданной заявке нужен другой путь.

Когда нужен API

Если прогноз должен появляться внутри существующей системы сразу после действия пользователя, модель можно открыть через API. Приложение отправляет признаки, сервис возвращает прогноз. Для коллеги ничего не меняется: он продолжает работать в своей системе.

До реализации согласуйте пример корректного запроса и ответа, поведение при отсутствии обязательного поля, допустимое время ожидания и действие клиента при ошибке. FastAPI позволяет описать тело запроса типизированной моделью и выполнять проверку входа; механизм разобран в руководстве по Request Body. Но схема не узнает сама, что указанная сумма выражена в копейках вместо рублей. Такие правила нужно задавать и проверять отдельно.

API имеет смысл, если есть система, которая будет его вызывать, и человек, отвечающий за запуск сервиса и доступ к нему. Сам по себе адрес сервера ещё не решает вопрос передачи: нужен работающий потребитель результата и понятная реакция на недоступность.

Когда коллеге нужен собственный экран

Иногда запросы редкие, системы для интеграции нет, а человеку удобно загрузить CSV и скачать ответ. Для первого интерфейса можно взять готовый инструмент: например, Mercury добавляет элементы ввода к ноутбуку и превращает его в веб-приложение. Это позволяет сначала проверить, удобно ли коллеге работать с моделью. Перед размещением рабочих данных выберите подходящие условия хранения и доступа. Собственный интерфейс имеет смысл, когда нужны особые правила загрузки и взаимодействия; он может использовать тот же механизм прогнозирования. Он должен показывать ожидаемые столбцы, ограничения файла и понятную причину отказа. Полезно дать шаблон входных данных и пример результата.

Форма загрузки и API могут использовать одну функцию подготовки признаков и прогнозирования. Тогда исправление обработки пропусков не придётся повторять в двух местах. При этом экран не отменяет задачи доступа: заранее определите, кто имеет право отправлять данные и где хранятся результаты.

Проверка передачи — запуск без автора

Подготовьте маленький контрольный файл, ожидаемое поведение при пропуске столбца и один обычный рабочий пример. Попросите коллегу выполнить полный путь по инструкции. Если ему требуется открыть ноутбук и найти нужную ячейку, часть процесса ещё осталась у вас.

После передачи отслеживайте как минимум ошибки обработки, распределение входных признаков и распределение прогнозов. Когда появляются фактические исходы, сравнивайте их с прогнозами на соответствующем периоде. Изменение входов помогает заметить проблему раньше, но ещё не доказывает ухудшение качества модели.

Следующая практика: собрать единый путь инференса

В платном курсе «ML Engineer / Data Scientist: табличные модели в продакшн» этот переход разобран отдельными уроками: автоматизация обучения, inference pipeline, unit-тесты, REST API на FastAPI, batch-инференс и Docker. Темы уроков охватывают загрузку сохранённых модели и препроцессора, проверку нужных признаков, сохранение прогнозов и логирование. Далее программа переходит к качеству и дрейфу. Такой маршрут полезен, если вам предстоит регулярно поддерживать расчёт, менять модель и разбирать ошибки после передачи. Откройте программу и посмотрите темы блока автоматизации и deployment моделей. Сопоставьте их со своей задачей: пакетный расчёт, интеграция в систему или поддержка сервиса.

Для своей модели первым результатом сделайте один запускаемый расчёт с явными входом и выходом. Затем выберите способ доступа под реальный ритм работы коллеги. Весь маршрут обучения заново проходить ради кнопки не требуется; развивайте ту часть, которая мешает передать уже полезную модель.

Продолжить на практике

  • ML Engineer / Data Scientist: табличные модели в продакшн ↗

    Практический курс для тех, кто хочет получить навыки ML Engineer / Data Scientist на реальных табличных задачах. В курсе Вы не просто обучите CatBoost/LightGBM, а соберёте полноценный production-style пайплайн: подготовка данных, feature engineering (генерация признаков), корректная валидация, защита от leakage (утечек), тюнинг через Optuna, интерпретация через SHAP, batch-инференс и REST API для предсказаний.