Вывод модели машинного обучения в product

Обучил модель на данных. Теперь мне нужно сделать сервис, который будет предсказывать по вводным данным, т.е., я ввожу данные - он мне выдает результат. Как вообще пропускать новые данные через эту модель?

Данные
Строки представляют пациентов, колонки - атрибуты.
Расшифровка каждого атрибута:

Атрибут Расшифровка
id уникальный индеynbфикатор пациента
gender пол пациента: "Male" — мужчина, "Female" — женщина, "Other" — другое
age Возраст пациента
hypertension гипертония: 0 — нет гипертонии, 1 — гипертония
heart_disease сердечные заболевания: 0 — нет заболеваний, 1 — есть заболевания
ever_married пациент состоял в браке: "No" — не состоял, "Yes" — состоял
work_type тип работы: "Private" — частный сотрудник, "Self-employed" — самозанятый, "Govt_job" — государственная работа, "children" — ребенок(не работает), "Never_worked" — никогда не работал
Residence_type тип проживания: "Rural" — сельский, "Urban" — городской
avg_glucose_level средний уровень глюкозы в крови
bmi индекс массы тела
smoking_status статус курения: "formerly smoked" - ранее курил, "never smoked" - никогда не курил, "smokes" - курит, "Unknown" - нет информации
stroke инсульт: 0 — не был инсульта, 1 — был инсульт
from catboost import CatBoostClassifier
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X_resampled,y_resampled, test_size=0.3, random_state=42)

# Создание и обучение модели CatBoost
catboost_model_first = CatBoostClassifier(random_state=42, iterations=10000, learning_rate=0.1, depth=6, verbose=0)
catboost_model_first.fit(X_train, y_train)

# Предсказания на тестовой выборке
y_pred_test_catboost = catboost_model_first.predict(X_test)
# Предсказания на обучающей выборке
y_pred_train_catboost = catboost_model_first.predict(X_train)

# Вывод метрик для тестовой выборки
print("Тестовая выборка (CatBoost):")
print(classification_report(y_test, y_pred_test_catboost), 'roc_auc', roc_auc_score(y_test, y_pred_test_catboost))
ConfusionMatrixDisplay(confusion_matrix(y_test, y_pred_test_catboost), display_labels=['No Stroke', 'Stroke']).plot()

# Вывод метрик для обучающей выборки
print("Обучающая выборка (CatBoost):")
print(classification_report(y_train, y_pred_train_catboost), 'roc_auc', roc_auc_score(y_train, y_pred_train_catboost))
ConfusionMatrixDisplay(confusion_matrix(y_train, y_pred_train_catboost), display_labels=['No Stroke', 'Stroke']).plot()

Если вдруг ноутбук весь нужен будет

https://colab.research.google.com/drive/1a4lm8UZFLZFrRMWuqoJ3qzbXf6Bkl-cy?usp=sharing


Ответы (1 шт):

Автор решения: CrazyElf

У вас должен быть заготовлен пайплайн подготовки данных. Label encoding и прочее, что вы там использовали (если использовали, CatBoost из коробки с много чем работает напрямую, без подготовки). Далее:

  • Готовите фичи обучающего датасета вашим пайплайном
  • Тренируете модель
  • Сохраняете модель

На сервисе (например, веб, через Flask или FastAPI или ещё что-то):

  • Загружаете модель при старте сервиса
  • При поступлении нового запроса, данные из запроса прогоняете через тот же пайплайн, что и при тренировке модели
  • Предсказываете результат на этих данных
  • Отправляете результат ответом на запрос в каком-то виде (JSON, красивая веб-страница, электронное письмо, сохранение в базу, что угодно)
→ Ссылка