Skip to content

IgnOrtega/app_ml

Repository files navigation

🩺 Breast Cancer ML API

Python Version Flask Docker CI/CD

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.


🏗️ Arquitectura del Proyecto

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

🚀 Guía de Instalación

Requisitos Previos

  • Docker (Recomendado) o Python 3.12
  • Git

Opción A: Despliegue con Docker (Producción)

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

Opción B: Entorno de Desarrollo (Local)

# 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.py

📡 Referencia de la API

1. Estado de Salud (Health Check)

GET /

  • 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"
    }

2. Predicción de Cáncer de Mama

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]
    }

Ejemplo de consumo (PowerShell):

$body = @{ "features" = @(1.93, 0.99, ... , -0.30) } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri "http://localhost:6875/predict" -ContentType "application/json" -Body $body

Ejemplo de consumo (cURL):

curl -X POST http://localhost:6875/predict \
     -H "Content-Type: application/json" \
     -d '{"features": [1.93, 0.99, ... , -0.30]}'

⚙️ Configuración (Variables de Entorno)

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

🧪 Calidad y CI/CD

Este proyecto implementa Integración Continua (CI) mediante GitHub Actions. Cada vez que se sube código a master:

  1. Linter & Test: Se ejecutan los tests unitarios con pytest.
  2. Dockerization: Si los tests pasan, se crea una imagen Docker.
  3. 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

About

Evaluación que consiste en mostrar una api que ante cambios se reinicie e inicie nuevamente de la forma más automatizada posible

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors