PrecioPiso (TFM): predicción inmobiliaria con POI y Streamlit

Data Science

PrecioPiso (TFM): predicción inmobiliaria con POI y Streamlit

Por Alonso Valdés2025-09-16
#vivienda#ml#random forest#scraping#streamlit#osm

Introducción

PrecioPiso es un proyecto de fin de máster orientado a estimar precios de vivienda en España a partir de datos de portales inmobiliarios y variables contextuales del entorno. Combina un pipeline reproducible de scraping, un EDA riguroso, modelos supervisados y una interfaz web en Streamlit para consulta interactiva.

Datos y pipeline

  • Fuentes: anuncios de venta y alquiler de portales inmobiliarios, enriquecidos con Points of Interest (POI) de OpenStreetMap mediante Overpass.
  • Extracción: scripts en Python dentro de contenedores Docker; manejo de pausas aleatorias, cabeceras simuladas y reintentos.
  • Estructura: staging en CSV → integración en PostgreSQL → dataset unificado con variables de inmueble (mt2, baños, habitaciones, coordenadas, CCAA) y distancias a POI (1km/3km/5km).
  • Limpieza: depuración de outliers evidentes, mapeo ciudad→CCAA, eliminación de columnas irrelevantes y tratamiento explícito de missings.

EDA en breve

  • Distribuciones con asimetría marcada; concentración de superficies por debajo de 100 m² y presencia de outliers en colas.
  • Missings controlados tras imputaciones dirigidas; variables con alta ausencia (p. ej., planta) se eliminan.
  • Correlaciones: latitud/longitud sin relación lineal fuerte con mt2; importancia de las categorías territoriales y del contexto.

Modelos y evaluación

Dos enfoques: Regresión Lineal (línea base interpretable) y Random Forest (no lineal, robusto). Entrenamiento con train/test split, validación cruzada e hyperparameter tuning. Métricas: R², RMSE y MAE. El modelo tipo bosque supera consistentemente a la línea base. Variables dominantes: mt2, baños, habitaciones y un bloque relevante de POI (farmacias, supermercados, transporte, etc.).

De modelo a producto

  • Arquitectura: contenedores Docker por etapa (ingesta, procesamiento, entrenamiento, app).
  • CI/CD: GitHub Actions para construir imágenes; despliegue automatizado y rollouts frecuentes.
  • Orquestación ligera: tareas programadas con cron para actualizar datos/modelo diariamente.
  • App web: Streamlit como front de consulta con formularios y visualizaciones (distribuciones, mapas de calor y comparativas).

UX y visualización

  • Entrada guiada por campos clave (ubicación, mt2, habitaciones, baños, contexto).
  • Resultados con estimación puntual, bandas de error y descomposición por contribuciones de variables.
  • Mapas de calor: simulaciones manteniendo atributos del inmueble y variando la geolocalización para comparar zonas.

Limitaciones

  • Ámbito geográfico acotado a varias CCAA en la versión actual.
  • Dependencia de cobertura/calidad de anuncios y POI; factores macro (ciclo, política urbana) fuera del alcance del modelo.
  • Coste computacional del bosque en datasets grandes; necesidad de optimizar y vigilar tiempos de inferencia.

Riesgos de datos y cumplimiento

El scraping de portales comerciales tiene restricciones. Para explotación comercial o redistribución es recomendable negociar licencias o usar proveedores de datos con permisos explícitos. Definir políticas de actualización, rotación de agentes de usuario y respeto de robots.txt.

Próximos pasos

  • Expansión nacional de cobertura y normalización territorial más fina (sección censal, IRIS, etc.).
  • Modelos alternativos: Gradient Boosting/XGBoost; calibración probabilística; explicabilidad (SHAP).
  • Análisis temporal: nowcasting de precios, elasticidades locales, sensibilidad a apertura/cierre de POI.
  • API ligera para consumo externo; feature store minimalista; trazabilidad de versiones de datos y modelo.

Conclusión

PrecioPiso demuestra que una arquitectura contenida, un dataset enriquecido con contexto y un modelo no lineal bien gobernado pueden ofrecer estimaciones útiles y accionables. El valor no está sólo en la predicción, sino en la capacidad de comparar escenarios y comunicar incertidumbre de forma clara a usuarios no técnicos.

Repositorio de ejemplo: github.com/Alonsomar/TFM_inmobiliario_av.