Вывод модели машинного обучения в 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 шт):
У вас должен быть заготовлен пайплайн подготовки данных. Label encoding
и прочее, что вы там использовали (если использовали, CatBoost
из коробки с много чем работает напрямую, без подготовки). Далее:
- Готовите фичи обучающего датасета вашим пайплайном
- Тренируете модель
- Сохраняете модель
На сервисе (например, веб, через Flask
или FastAPI
или ещё что-то):
- Загружаете модель при старте сервиса
- При поступлении нового запроса, данные из запроса прогоняете через тот же пайплайн, что и при тренировке модели
- Предсказываете результат на этих данных
- Отправляете результат ответом на запрос в каком-то виде (
JSON
, красивая веб-страница, электронное письмо, сохранение в базу, что угодно)