Sobre el Proyecto
Sistema de clasificación de zonas urbanas por potencial de revalorización. Combina un XGBoost entrenado (3 clases: Baja/Media/Alta) con un Graph Neural Network (GNN) de 2 rounds de message-passing que propaga el score local entre zonas adyacentes, capturando efectos espaciales de gentrificación.
Cómo medir la efectividad real del modelo
Para modelos de clasificación como este, las métricas clave son F1-score y MCC — son más honestas que el accuracy cuando las clases están equilibradas:
- F1-macro = 0.61: promedio del F1 de las 3 clases (Baja/Media/Alta). Un F1=1.0 sería perfección; F1=0.33 sería azar. Nuestro modelo está un 28% por encima del azar con 3 clases perfectamente equilibradas (~33% cada una). Esto es más honesto que el accuracy, que puede ser alto simplemente prediciendo siempre la clase más frecuente.
- MCC = 0.41: Matthews Correlation Coefficient. Va de -1 (predicciones inversas) a +1 (perfecto). Un MCC=0.41 significa una correlación real del 41% entre predicciones y etiquetas reales — robusto aunque las clases estén desbalanceadas.
- CV F1 = 0.59 ± 0.02: validación cruzada en 5 particiones independientes. La varianza baja (±0.02) confirma que el modelo no hace overfitting — generaliza bien a datos no vistos.
- Por qué el GNN añade valor: el XGBoost predice cada zona de forma independiente. El message-passing GNN añade coherencia espacial: una zona "Alta" rodeada de zonas "Baja" pierde influencia; una zona "Media" rodeada de "Alta" la gana. Esto replica cómo funciona la gentrificación real.
Arquitectura del Modelo
- XGBoost Clasificador: 600 árboles, max_depth=6, lr=0.04. Entrenado con 18 features sobre 4.000 barrios sintéticos calibrados con INE IPV 2015-2024. Predice P(Baja)/P(Media)/P(Alta) → score 0-1.
- Features (18): precio m², tendencia 1a y 3a, infraestructura, transporte, licencias de obra y rehabilitación, renta media, densidad de población, edad media de edificios, vacancia comercial, actividad cultural, distancia al centro, ratio propietarios, superficie media, tasa de paro, nuevos residentes, precio alquiler m².
- GNN Message-passing Round 1: score_r1[i] = 0.65 × score_xgb[i] + 0.35 × media(vecinos). Propaga influencia de zonas emergentes contiguas.
- GNN Message-passing Round 2: score_r2[i] = 0.72 × score_r1[i] + 0.28 × media(vecinos). Suavizado espacial secundario.
Visualización Interactiva
Mapa sobre OpenStreetMap (CartoDB Dark) con marcadores coloreados por score. Click en cualquier zona para ver: datos de mercado, señales detectadas, desglose de contribución al score por feature y zonas vecinas en el grafo.
Tecnologías
Python · XGBoost · FastAPI · Leaflet.js · NumPy · joblib · Laravel (proxy HTTP) · CartoDB Tiles