Данный проект представляет собой end-to-end MLOps решение для предсказания риска сердечного приступа. Проект охватывает полный цикл: от исследовательского анализа данных (EDA) до развертывания обученной модели в виде публичного веб-сервиса с помощью FastAPI.
Готовое приложение развернуто на платформе Render и доступно для тестирования.
Интерактивная документация (Swagger UI): https://heart-risk-predictor-api.onrender.com/docs
Далее приведена пошаговая инструкция, как протестировать сервис.
Вы можете легко проверить работу сервиса, отправив тестовые данные через интерактивный интерфейс.
-
Перейдите по ссылке: https://heart-risk-predictor-api.onrender.com/docs
-
Активируйте эндпоинт: В открывшемся интерфейсе найдите блок
POST /predict_csvи нажмите на кнопкуTry it out. -
Выберите файл для отправки: В появившемся поле
fileнажмитеChoose Fileи выберите тестовый файлdata/heart_test.csvиз этого репозитория. -
Отправьте запрос: Нажмите синюю кнопку
Execute, чтобы отправить файл на сервер для обработки. -
Получите результат: Прокрутите страницу ниже до раздела
Server response. Там вы увидите ответ от API в формате JSON, содержащий предсказания для каждой строки из отправленного файла.
heart-attack-risk-predictor/
├── app/
│ └── main.py # Код FastAPI приложения
├── data/
│ ├── heart_train.csv # Данные для обучения
│ └── heart_test.csv # Тестовые данные для API
├── models/
│ └── catboost_final_model.cbm # Обученная модель
├── notebooks/
│ └── research.ipynb # Jupyter Notebook с исследованием
├── How_to_use_the_application.md # Детальная инструкция по API
├── requirements.txt # Файл с зависимостями для развертывания
└── Readme.md # Этот файл
В ходе исследования (notebooks/research.ipynb) были выявлены критические проблемы в исходных данных, которые существенно ограничили предсказательную способность модели:
-
❗️ Критическая утечка данных (Data Leakage): Признаки
Sedentary Hours Per Day,BMI,IncomeиExercise Hours Per Weekимели идеальную корреляцию (1.00) с целевой переменной. Эти признаки были полностью исключены из обучения. -
📉 Низкое качество данных: Многие признаки имели неправдоподобные распределения, что свидетельствует о возможной синтетической природе данных.
-
🔗 Сильная мультиколлинеарность: Была обнаружена высокая корреляция между такими признаками, как
Diet,TriglyceridesиCholesterol. -
⚖️ Дисбаланс классов: В данных наблюдался значительный дисбаланс классов (пациентов с риском было намного меньше).
Итог анализа: Исходные данные имеют фундаментальные проблемы, которые не позволяют построить модель с высокой практической ценностью.
-
Метрика качества: Из-за дисбаланса классов в качестве основной метрики была выбрана ROC AUC.
-
Финальная модель: В качестве итоговой модели была выбрана
CatBoostClassifierза её способность нативно обрабатывать пропуски и категориальные признаки, что упрощает пайплайн. -
Итоговое качество: Финальная модель показала ROC AUC ≈ 0.57 на валидационной выборке. Этот результат лишь ненамного превышает случайное угадывание (0.5), что подтверждает вывод о невозможности построения качественной модели на имеющихся данных.
- Python 3.10+
- FastAPI: Высокопроизводительный веб-фреймворк для создания API.
- Uvicorn: ASGI-сервер для запуска FastAPI.
- CatBoost: Библиотека для градиентного бустинга.
- Scikit-learn: Для утилит машинного обучения.
- Pandas & NumPy: Для обработки и анализа данных.
- Jupyter Notebook: Для исследовательского анализа.