Вывод модели машинного обучения в 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, красивая веб-страница, электронное письмо, сохранение в базу, что угодно)