Esta es una solución robusta y modular para el despliegue de modelos de Machine Learning. El objetivo principal es ofrecer una API REST escalable que automatice el ciclo de vida de un clasificador de cáncer de mama.
El proyecto sigue el patrón App Factory para Flask y una separación clara de responsabilidades:
├── .github/workflows/ # Automatización de Tests y Despliegue (Docker Hub)
├── serializar_modelo/ # Datos de entrenamiento y modelo serializado (.pkl)
├── app.py # Punto de entrada y ensamblaje de la aplicación
├── config.py # Gestión centralizada de configuración y Envs
├── model_handler.py # Lógica de ML (Carga, validación y predicción)
├── routes.py # Definición de Endpoints (Blueprints)
├── test_app.py # Suite de pruebas unitarias con Pytest
├── Dockerfile # Configuración de contenedor de producción (Gunicorn)
└── requirements.txt # Listado de dependencias con versiones fijadas- Docker (Recomendado) o Python 3.12
- Git
Ideal para entornos estables y despliegues rápidos.
# 1. Clonar y entrar al repositorio
git clone <tu-repo-url>
cd app_ml
# 2. Construir la imagen de producción
docker build -t breast-cancer-api:latest .
# 3. Ejecutar el contenedor
docker run -d -p 6875:6875 --name ml-api breast-cancer-api:latest# Crear entorno virtual e instalar dependencias
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
pip install -r requirements.txt
# Ejecutar tests para validar el entorno
pytest test_app.py
# Iniciar la API
python app.pyGET /
- Descripción: Verifica que la API y el modelo estén cargados correctamente.
- Respuesta Exitosa (200 OK):
{ "status": "ready", "message": "Breast Cancer Predictor API is operational" }
POST /predict
- Descripción: Recibe 30 características clínicas y devuelve la clasificación.
- Payload (JSON):
{ "features": [1.93, 0.99, 1.93, 2.01, 0.30, 1.06, 2.29, 2.11, 1.43, -0.54, 2.16, -0.71, 1.73, 2.14, -0.58, 0.76, 2.09, 1.11, 0.41, 0.45, 1.92, 0.21, 1.72, 1.98, -0.49, 0.40, 2.04, 1.46, 0.36, -0.30] }
$body = @{ "features" = @(1.93, 0.99, ... , -0.30) } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri "http://localhost:6875/predict" -ContentType "application/json" -Body $bodycurl -X POST http://localhost:6875/predict \
-H "Content-Type: application/json" \
-d '{"features": [1.93, 0.99, ... , -0.30]}'| Variable | Descripción | Valor por Defecto |
|---|---|---|
PORT |
Puerto en el que corre la API | 6875 |
MODEL_PATH |
Ruta al archivo .pkl del modelo | ./serializar_modelo/Modelo_Breast_Cancer.pkl |
N_FEATURES |
Cantidad de features esperadas | 30 |
FLASK_DEBUG |
Activa el modo debug de Flask | False |
Este proyecto implementa Integración Continua (CI) mediante GitHub Actions. Cada vez que se sube código a master:
- Linter & Test: Se ejecutan los tests unitarios con
pytest. - Dockerization: Si los tests pasan, se crea una imagen Docker.
- Versioning: La imagen se etiqueta con el SHA del commit y la fecha, y se sube automáticamente a Docker Hub.
© 2026 - Desarrollado para la Evaluación de Despliegue de ML