El Modelo como Artefacto

Separando la "Fábrica" de la "Tienda": El Pilar del Despliegue Robusto.

La Analogía: La Fábrica y la Tienda

En un flujo MLOps maduro, el entrenamiento de modelos y el desarrollo de aplicaciones son dos procesos completamente separados. Imagina que intentas construir el motor de un coche dentro del concesionario mientras los clientes esperan. Sería un caos: ruidoso, lento y poco profesional.

La solución es simple: hay una fábrica (el entorno del científico de datos) que se especializa en construir motores (modelos) de alta calidad. El resultado de su trabajo es un producto terminado y empaquetado (un archivo `.rds`). Luego, está la tienda (la aplicación Shiny), cuyo único trabajo es tomar ese motor, instalarlo en un chasis elegante (la UI) y presentárselo al cliente.

¿Qué es un Artefacto de Modelo?

Un artefacto de modelo es simplemente un archivo que encapsula toda la lógica y los parámetros aprendidos durante el entrenamiento. Es un "snapshot" del cerebro del modelo, listo para ser cargado y utilizado para hacer predicciones sobre datos nuevos. En R, la forma más común y robusta de crear este artefacto es usando la función `saveRDS()`.

Lado del Científico de Datos: "La Fábrica"

# Este es el script R/model_training.R
# ... (código para cargar librerías y datos crudos) ...

# Se entrena el modelo
modelo_puntaje <- lm(
  punt_matematicas ~ punt_lectura_critica + punt_sociales_ciudadanas + punt_c_naturales,
  data = datos_crudos
)

# Se guarda el "producto final" en la carpeta de modelos
saveRDS(modelo_puntaje, "models/modelo_puntaje_mat.rds")

Lado del Desarrollador Shiny: "La Tienda"

# Este código va en el global.R de la aplicación
# La app carga el producto terminado, listo para usar
modelo_matematicas <- readRDS("models/modelo_puntaje_mat.rds")

# Ahora la app puede usarlo para hacer predicciones
nuevos_datos <- data.frame(
    punt_lectura_critica = 80,
    punt_sociales_ciudadanas = 75,
    punt_c_naturales = 70
)
predict(modelo_matematicas, newdata = nuevos_datos)

Los Beneficios Clave del Desacoplamiento

Separar la "fábrica" de la "tienda" no es solo una buena práctica; es la base para un sistema MLOps robusto y escalable.

Rendimiento

El entrenamiento puede tardar minutos u horas. Una aplicación web debe cargar en segundos. Desacoplar asegura que la app solo realice una operación de carga rápida, no el costoso proceso de entrenamiento.

Reproducibilidad y Versionado

El artefacto `.rds` es un archivo que se versiona con Git, al igual que el código. Esto nos da trazabilidad total: siempre sabemos qué versión del código generó qué versión del modelo.

Colaboración

Permite que los científicos de datos (expertos en modelos) y los desarrolladores Shiny (expertos en UI/UX) trabajen en paralelo. Cada uno se enfoca en su especialidad sin interferir con el otro.

Seguridad y Simplicidad

La aplicación Shiny no necesita acceso a los datos de entrenamiento crudos, ni a las complejas librerías de entrenamiento. Su única dependencia es el archivo final del modelo, simplificando su entorno y reduciendo riesgos de seguridad.

El Flujo de Trabajo en la Práctica con Git

Así es como esta separación se ve en un flujo de trabajo colaborativo real usando Git.

Rol: Científico de Datos

  1. Trabaja en una rama de Git (`feature/nuevo-modelo-v2`).
  2. Escribe y perfecciona el script `R/model_training.R`.
  3. Su objetivo es producir el archivo `models/modelo_v2.rds`.
  4. Una vez satisfecho, hace commit de ambos archivos (el script y el `.rds`) y los sube al repositorio.

Rol: Desarrollador Shiny

  1. Trabaja en otra rama de Git (`feature/integrar-modelo-v2`).
  2. Hace `git pull` para obtener el nuevo artefacto `modelo_v2.rds` que el científico de datos subió.
  3. Modifica el `global.R` para que ahora cargue el nuevo modelo: `readRDS("models/modelo_v2.rds")`.
  4. La aplicación ahora usa la nueva lógica predictiva. Es importante destacar que el desarrollador Shiny nunca ejecuta el script de entrenamiento. Solo consume su resultado (el artefacto).