Saltar al contenido
Proyectos

House Price Predictor: pipeline MLOps de punta a punta

Estimación del precio de venta de una casa en King County (Seattle) con un Gradient Boosting entrenado sobre 21.000 ventas reales, servido por FastAPI y una interfaz Streamlit bilingüe con mapa.

Pythonscikit-learnMLflowFastAPIStreamlitPrometheusDockerKubernetes

## Contexto Proyecto del MLOps Bootcamp de School of Devops que llevé hasta producción y rehice con datos reales: colocas la casa en un mapa de King County (Washington), indicas superficie, terreno, dormitorios, baños, año, estado, calidad de construcción, vista y frente al agua, y obtienes un precio estimado con un rango calibrado. Interfaz en español e inglés. ## Pipeline - Datos: 21.613 ventas reales de 2014-2015 (King County House Sales, CC0); se quitan las ventas repetidas de la misma casa y las filas con valores imposibles. - Selección de modelo y de variables con validación cruzada de 5 folds: gana un Gradient Boosting sobre log(precio) con coordenadas en lugar del zipcode, entrenado con semilla fija y registrado en MLflow. - API FastAPI con validación Pydantic, endpoint /model-info y métricas Prometheus; rechaza ubicaciones a más de 0,5 km de cualquier venta (lagos, fuera del condado). Streamlit la consume por la red interna de Docker.

Problema

El proyecto original usaba 85 casas de ejemplo y un modelo con fuga de datos (price_per_sqft, derivado del propio precio) que mostraba un R² de 0,995 inservible en inferencia; la interfaz además enseñaba una confianza, un rango y una latencia escritos a mano.

Solución

Lo rehice con 21.418 ventas reales, eliminé la fuga y elegí modelo y variables midiendo cada cambio con validación cruzada: la configuración original rendía peor que una regresión lineal, y pasar del zipcode a coordenadas en un mapa junto con la calidad de construcción subió el R² de 0,80 a 0,90. Cada dato inventado de la interfaz se sustituyó por uno medido (intervalo empírico del 90%, latencia real, métricas servidas por la API), y el entrenamiento corre en el Dockerfile multi-stage con semilla fija, así que cada build produce el mismo modelo.

Resultado

R² 0,89, MAE ≈ 67.000 $ y error típico del 12% en test (frente al 42% del baseline), desplegado con Docker Compose detrás de Nginx; la API no se expone a Internet, solo la interfaz.