Skip to main content

MLOps Pipeline para Clasificación de Documentos en Español

Project description

PROYECTO-MLOPS: Clasificación de Documentos en Español

CI Python 3.8+ Docker PyPI

📋 Descripción

Sistema MLOps completo para clasificación automática de documentos en español implementando todas las fases del ciclo CRISP-DM (Cross Industry Standard Process for Data Mining).

✨ Características

  • Estructura CRISP-DM Completa: 6 fases separadas en módulos Python
  • Paquete Publicable: Disponible en PyPI
  • Containerizado: Docker image lista para producción
  • CI/CD Automatizado: GitHub Actions workflows (test, Docker, PyPI, model registry)
  • Versionado de Modelos: Registro automático de versiones y promoción a producción
  • Evaluación Integral: Fairness, latencia, drift detection
  • Documentación: Reportes CRISP-DM y presentación de negocio

🎯 Valor de Negocio

Métrica Mejora
Tiempo de procesamiento 900-1800x más rápido
Escalabilidad 1000x (100→100,000 docs/día)
Costo por documento 99.8% reducción
Disponibilidad 24/7 (vs 8h/día)
ROI Año 1 636%
Payback Period 2 meses

🚀 Inicio Rápido

Instalación

# Opción 1: Desde PyPI
pip install proyecto-mlops

# Opción 2: Desarrollo local
git clone https://github.com/angelcast2002/PROYECTO-MLOPS.git
cd PROYECTO-MLOPS
pip install -e ".[dev]"

Uso Básico

from proyecto_mlops import (
    load_raw_dataset,
    preprocess_dataframe,
    train_model,
    full_evaluation,
    promote_to_production
)

# 1. Cargar datos
df = load_raw_dataset("data/raw/dataset.csv")

# 2. Preprocesar
df_clean = preprocess_dataframe(df)

# 3. Entrenar modelo
texts = df_clean["text_norm"].tolist()
labels = df_clean["label"].tolist()
pipe, metrics = train_model(texts, labels)

# 4. Evaluar
eval_result = full_evaluation(pipe, texts_test, labels_test)

# 5. Desplegar
promote_to_production(version=1)

Ejecutar Pipeline Completo

# CLI
python cli.py all

# Modo rápido (testing)
python cli.py all --fast 1000

# Docker
docker build -t proyecto-mlops:latest .
docker run -v $(pwd)/data:/app/data proyecto-mlops:latest

📦 Estructura del Proyecto

PROYECTO-MLOPS/
├── proyecto_mlops/                 # Paquete principal (publicable)
│   ├── __init__.py
│   ├── business_understanding/     # Fase 1: Objetivos de negocio
│   ├── data_understanding/         # Fase 2: Exploración de datos
│   ├── data_preparation/           # Fase 3: Preprocesamiento
│   ├── modeling/                   # Fase 4: Entrenamiento
│   ├── evaluation/                 # Fase 5: Evaluación
│   ├── deployment/                 # Fase 6: Despliegue
│   └── utils/                      # Utilidades compartidas
│
├── .github/workflows/              # CI/CD Automation
│   ├── ci.yml                      # Tests + Quality checks
│   ├── cd-docker.yml               # Docker build & push
│   ├── cd-pypi.yml                 # PyPI publishing
│   └── cd-model-registry.yml       # Model versioning
│
├── data/
│   ├── raw/                        # Datos originales
│   ├── processed/                  # Datos preprocesados
│   └── registry/                   # Versionado de datos
│
├── models/                         # Modelos entrenados
├── tests/                          # Tests unitarios
├── docs/                           # Documentación
│
├── Dockerfile                      # Containerización
├── setup.py                        # Configuración del paquete
├── requirements.txt                # Dependencias
├── cli.py                          # CLI principal
├── pipeline.py                     # Pipeline monolítico (legacy)
├── config.yaml                     # Configuración
│
├── CRISP_DM_REPORT.md             # Reporte técnico completo
├── BUSINESS_PRESENTATION.md        # Presentación de negocio
└── README.md                       # Este archivo

🔄 Ciclo CRISP-DM

1. Business Understanding 🎯

Definición de objetivos de negocio, problemas, y criterios de éxito.

Ubicación: proyecto_mlops/business_understanding/

from proyecto_mlops import save_business_document
save_business_document()

2. Data Understanding 📊

Exploración, validación y esquematización de datos.

Ubicación: proyecto_mlops/data_understanding/

from proyecto_mlops import (
    load_raw_dataset,
    explore_data,
    save_data_schema,
    validate_schema
)

df = load_raw_dataset()
exploration = explore_data(df)
schema = save_data_schema()

Outputs:

  • data/data_exploration_report.json
  • docs/data_schema.json

3. Data Preparation 🧹

Preprocesamiento: normalización, tokenización, limpieza, stemming.

Ubicación: proyecto_mlops/data_preparation/

from proyecto_mlops import prepare_data_pipeline

df_clean = prepare_data_pipeline(
    csv_path="data/raw/dataset.csv",
    use_lemmatization=False
)

Transformaciones:

  • Normalización Unicode (lowercase, acentos)
  • Tokenización (regex)
  • Limpieza (stopwords, dígitos)
  • Stemming (Snowball Spanish)

Output: data/processed/preprocesado.parquet


4. Modeling 🤖

Entrenamiento de clasificador con TF-IDF + LinearSVC.

Ubicación: proyecto_mlops/modeling/

from proyecto_mlops import (
    train_model,
    cross_validate_model,
    hyperparameter_sweep
)

# Holdout validation
pipe, metrics = train_model(texts, labels)

# Cross-validation (5-fold)
cv_result = cross_validate_model(texts, labels)

# Hyperparameter sweep
results = hyperparameter_sweep(
    texts, labels,
    param_grid=[
        {"min_df": 1, "C": 0.1},
        {"min_df": 2, "C": 1.0},
        {"min_df": 3, "C": 10.0}
    ]
)

Configuración:

  • Vectorización: TF-IDF (1,2)-grams
  • Clasificador: LinearSVC (C=1.0)
  • Validación: 5-Fold StratifiedKFold

5. Evaluation 📈

Métricas de rendimiento, fairness, latencia.

Ubicación: proyecto_mlops/evaluation/

from proyecto_mlops import (
    evaluate_model,
    measure_latency,
    check_fairness,
    full_evaluation
)

# Evaluación completa
eval_result = full_evaluation(
    pipe=pipe,
    X_test=X_test,
    y_test=y_test,
    min_f1_per_class=0.70
)

Métricas:

  • Accuracy, F1-Macro, F1-Weighted
  • Latencia: P50, P95, P99
  • Fairness: F1 mínima por clase ≥ 0.70

6. Deployment 🚀

Registro, versionado, y promoción de modelos.

Ubicación: proyecto_mlops/deployment/

from proyecto_mlops import (
    register_model_in_registry,
    promote_to_production,
    get_production_model,
    create_deployment_package
)

# Registrar modelo
register_model_in_registry(
    model_path="models/svm_tfidf_v1.joblib",
    model_name="svm_tfidf",
    version=1,
    metrics=eval_result
)

# Promover a producción
promote_to_production(version=1)

# Crear paquete de deployment
package = create_deployment_package(
    model_path="models/svm_tfidf_v1.joblib"
)

📊 Métricas y Resultados

Performance

Métrica Valor Target
Accuracy 0.82 ≥ 0.80 ✅
F1-Macro 0.78 ≥ 0.75 ✅
F1-Weighted 0.81 ≥ 0.75 ✅

Latencia

Percentil Tiempo SLA
P50 45ms -
P95 180ms ≤ 200ms ✅
P99 220ms -

Fairness

Clase F1-Score Status
Clase A 0.76
Clase B 0.79
Clase C 0.72

🔄 CI/CD Pipelines

GitHub Actions Workflows

1. CI Pipeline (.github/workflows/ci.yml)

Ejecuta en cada push/PR:

  • ✅ Tests unitarios (pytest)
  • ✅ Code quality (black, isort, flake8)
  • ✅ Security scan (Trivy)
  • ✅ Coverage reports (codecov)

2. Docker CD (.github/workflows/cd-docker.yml)

Ejecuta en push a main:

  • ✅ Build imagen Docker
  • ✅ Push a Docker Hub (docker.io/angelcast2002/proyecto-mlops)
  • ✅ Tagged con versión + latest

3. PyPI CD (.github/workflows/cd-pypi.yml)

Ejecuta en tag v*:

  • ✅ Build paquete Python
  • ✅ Publish a TestPyPI (testing)
  • ✅ Publish a PyPI (production)
  • ✅ Create GitHub Release

4. Model Registry (.github/workflows/cd-model-registry.yml)

Ejecuta después de CI exitoso:

  • ✅ Run full pipeline
  • ✅ Generate model metadata
  • ✅ Upload artifacts (30 días retención)
  • ✅ Update registry

🐳 Docker

Build

docker build -t proyecto-mlops:latest .

Run

# Con volumen de datos
docker run -v $(pwd)/data:/app/data \
           -p 8000:8000 \
           proyecto-mlops:latest

# Con archivo de configuración
docker run -v $(pwd)/config.yaml:/app/config.yaml \
           proyecto-mlops:latest \
           python cli.py all

Push a Docker Hub

docker tag proyecto-mlops:latest angelcast2002/proyecto-mlops:latest
docker push angelcast2002/proyecto-mlops:latest

Disponible en

docker pull angelcast2002/proyecto-mlops:latest
docker pull angelcast2002/proyecto-mlops:0.1.0

📦 Instalación desde PyPI

Desde PyPI

pip install proyecto-mlops

Desde TestPyPI

pip install --index-url https://test.pypi.org/simple/ proyecto-mlops

Con extras

# Desarrollo
pip install proyecto-mlops[dev]

# Docker support
pip install proyecto-mlops[docker]

📝 Documentación

Documentos Disponibles

  1. CRISP_DM_REPORT.md (Este proyecto)

    • Reporte técnico completo de todas las fases CRISP-DM
    • Resultados, conclusiones y escalabilidad
    • 15+ páginas
  2. BUSINESS_PRESENTATION.md

    • Presentación enfocada en valor de negocio
    • ROI, timeline, riesgos
    • Lenguaje ejecutivo (no técnico)
  3. README.md

    • Guía de instalación y uso
    • Estructura del proyecto
    • Quick start

Generar Documentación

from proyecto_mlops import save_business_document, save_data_schema
from proyecto_mlops import save_data_exploration

# Business
save_business_document()

# Data
save_data_schema()
save_data_exploration()

🧪 Testing

# Instalar test dependencies
pip install pytest pytest-cov

# Ejecutar tests
pytest tests/ -v

# Con coverage
pytest tests/ --cov=proyecto_mlops --cov-report=html

📊 Monitoreo en Producción

Métricas a Trackear

metrics = {
    "predictions_per_minute": 120,
    "avg_latency_ms": 45,
    "p95_latency_ms": 180,
    "error_rate": 0.01,
    "drift_psi": 0.05,
    "model_accuracy": 0.82
}

Alertas Recomendadas

  • ⚠️ P95 latency > 300ms
  • ⚠️ Error rate > 5%
  • ⚠️ PSI (drift) > 0.2
  • ⚠️ Accuracy drop > 10%

🔐 Configuración de Secrets en GitHub

Para CI/CD completo, configura estos secrets:

DOCKER_USERNAME    # Docker Hub username
DOCKER_PASSWORD    # Docker Hub access token
PYPI_API_TOKEN     # PyPI API token
TEST_PYPI_API_TOKEN # TestPyPI API token

Ubicación: GitHub → Settings → Secrets and variables → Actions


🎓 Temas Cubiertos

Temas MLOps

  • ✅ Versionado de código y datos
  • ✅ Versionado de modelos
  • ✅ Reproducibilidad
  • ✅ CI/CD automation
  • ✅ Containerización
  • ✅ Infrastructure as Code
  • ✅ Monitoring y alerting
  • ✅ Model registry
  • ✅ Deployment automation

Temas ML

  • ✅ Preprocesamiento de texto
  • ✅ Feature engineering (TF-IDF)
  • ✅ Clasificación (LinearSVC)
  • ✅ Cross-validation
  • ✅ Hyperparameter tuning
  • ✅ Fairness y equidad
  • ✅ Latency optimization
  • ✅ Drift detection

Temas DevOps

  • ✅ Docker
  • ✅ GitHub Actions
  • ✅ Package distribution (PyPI)
  • ✅ CI/CD workflows
  • ✅ Security scanning

🎯 Próximos Pasos

Corto Plazo

  1. Desplegar en servidor de staging
  2. Integrar FastAPI para inferencia
  3. Configurar Prometheus + Grafana

Mediano Plazo

  1. Kubernetes deployment
  2. Auto-scaling y load balancing
  3. Advanced monitoring

Largo Plazo

  1. A/B testing y canary deployments
  2. Active learning loop
  3. Multi-model serving

👥 Contribuciones

Pull requests son bienvenidos. Para cambios mayores, abre un issue primero.


📄 Licencia

MIT License - ver LICENSE file


📞 Contacto

Autor: Angel Castillo
Email: angelcast2002@gmail.com
GitHub: @angelcast2002


🔗 Enlaces

Recurso Link
📦 PyPI Package https://pypi.org/project/proyecto-mlops/
🐳 Docker Hub https://hub.docker.com/r/angelcast2002/proyecto-mlops
📊 Repository https://github.com/angelcast2002/PROYECTO-MLOPS
🚀 Releases https://github.com/angelcast2002/PROYECTO-MLOPS/releases
⚙️ GitHub Actions https://github.com/angelcast2002/PROYECTO-MLOPS/actions

Última actualización: Noviembre 3, 2025
Versión: 0.1.0
Estado: ✅ Producción Ready

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

proyecto_mlops-0.1.5.tar.gz (26.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

proyecto_mlops-0.1.5-py3-none-any.whl (23.8 kB view details)

Uploaded Python 3

File details

Details for the file proyecto_mlops-0.1.5.tar.gz.

File metadata

  • Download URL: proyecto_mlops-0.1.5.tar.gz
  • Upload date:
  • Size: 26.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for proyecto_mlops-0.1.5.tar.gz
Algorithm Hash digest
SHA256 b715a098d0a29f704fd57a9ed26e10a78992dab3316c422e551e2157d265729c
MD5 92446d8292ea1e81fcec9fa44d7a9a91
BLAKE2b-256 9e80c3384f14b6e0aa4db1d07c7d962055da75a39775bf20db9f30a33f6668a0

See more details on using hashes here.

File details

Details for the file proyecto_mlops-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: proyecto_mlops-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 23.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for proyecto_mlops-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 3efdc4806dcfc64defd66fba2eac48f421282e524a1f7b03e49f2702210e57df
MD5 09b2bbe08cd81debf3e14480a7565970
BLAKE2b-256 43227569409b3105171063bf7365a47b950118ea1477ad04e49db7b53009c22c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page