Visitar
Para ver el dashboard en línea, entra aquí o haz clic en la imagen de arriba.
InmoInsight - Housing Market Data-Driven Analysis
InmoInsight es un proyecto de ingeniería de datos end-to-end que combina web scraping, procesamiento ETL, enriquecimiento con inteligencia artificial, y machine learning para analizar el mercado de alquiler de apartamentos en República Dominicana. El proyecto incluye un pipeline orquestado con Apache Airflow, un modelo predictivo de precios con XGBoost, y visualizaciones interactivas en Tableau.
Visión General del Proyecto
El objetivo principal es extraer insights valiosos del mercado inmobiliario mediante:
- Extracción automatizada: Web scraping de listados de apartamentos desde supercasas.com
- Transformación y limpieza: Normalización de datos, conversión de unidades, manejo de valores faltantes
- Enriquecimiento con IA: Uso de OpenAI Batch API para extraer características adicionales del texto libre
- Predicción de precios: Modelo XGBoost para estimar precios de alquiler basado en características
- Visualización: Dashboard interactivo en Tableau para análisis exploratorio
Flujo del Pipeline

Extract → Transform + Enrich (OpenAI) → LoadArquitectura del Sistema
1. Pipeline ETL con Apache Airflow
El pipeline está orquestado con Airflow y ejecuta las siguientes etapas cada 2 semanas:
Extract Stage
- Web scraping con BeautifulSoup y requests
- Extracción de ~200 listados de apartamentos por ejecución
- Datos crudos: precio, habitaciones, baños, ubicación, características, descripciones
Transform Stage
- Limpieza y normalización de datos
- Conversión de monedas (USD → DOP)
- Extracción de valores numéricos de texto
- Manejo de valores faltantes
- Conversión de tipos de datos
Enrich Stage
- Preparación de batches JSONL para OpenAI
- Enriquecimiento con GPT para extraer:
- Conflictos en datos (validación cruzada)
- Características no estructuradas (cuarto de servicio, walk-in closet)
- Normalización de ubicaciones
- Extracción de valores mencionados en texto libre

Load Stage
- Carga a PostgreSQL con SQLAlchemy
- Estrategia de reemplazo de datos
- Validación de integridad
2. Modelo Predictivo de Alquiler
El modelo utiliza XGBoost Regressor para predecir precios de alquiler con las siguientes características:
Feature Engineering
# Características numéricas- rooms, baths, parking- construction_meters, floor- amount_of_elevators, amount_of_facilities
# Características derivadas- price_per_sqm (precio por metro cuadrado)- total_rooms (habitaciones + baños)- amenities_score (suma de amenidades booleanas)- is_high_floor (piso >= 5)- is_new (basado en previous_owners)
# Características categóricas (Label Encoded)- location (ubicación del apartamento)- origin_currency (moneda original)
# Características booleanas- has_pool, has_gym, has_terrace- security_24_7, service_room, walk_in_closet- full_power_plant, water_cistern- y más...Métricas del Modelo

{ "mae": 11,773 DOP (~$196 USD), "rmse": 18,259 DOP (~$304 USD), "r2": 0.757, "mape": 19.79%}Interpretación:
- R² = 0.757: El modelo explica el 75.7% de la varianza en precios
- MAE: Error promedio de ~$196 USD por predicción
- MAPE: Error porcentual promedio del 19.79%
Distribución de Residuos

Los residuos siguen una distribución aproximadamente normal, lo que indica un buen ajuste del modelo.

Importancia de Features

Las características más influyentes:
- construction_meters - Tamaño del apartamento
- location - Ubicación geográfica
- rooms - Número de habitaciones
- amenities_score - Cantidad de amenidades
- floor - Piso del apartamento
Análisis de Errores

El modelo tiene menor error en rangos de precio medio (15,000-40,000 DOP) y mayor error en propiedades premium (>80,000 DOP).


Curvas de Aprendizaje

Las curvas de entrenamiento y validación convergen, indicando que el modelo no presenta overfitting significativo.
3. Tecnologías y Stack
Orquestación y ETL:
- Apache Airflow (TaskFlow API)
- Python 3.13
- Docker Compose
Extracción:
- BeautifulSoup4
- Requests
- HTML parsing
Procesamiento:
- Pandas
- NumPy
Enriquecimiento:
- OpenAI API (GPT-5-nano)
- Batch API para procesamiento eficiente
Almacenamiento:
- PostgreSQL
- SQLAlchemy
Machine Learning:
- XGBoost
- Scikit-learn
- Joblib
Visualización:
- Matplotlib
- Tableau Desktop
Funcionalidades Principales
Pipeline ETL Automatizado
- Ejecución programada cada 2 semanas
- Manejo robusto de errores y reintentos
- Logging detallado en cada etapa
- Validación de datos en cada paso
- Containerización con Docker
Enriquecimiento con IA
- Batch processing para eficiencia de costos
- Validación cruzada de datos estructurados vs. texto
- Extracción de características no estructuradas
- Normalización de ubicaciones y valores
Modelo Predictivo
- Feature engineering automatizado
- Grid search para optimización de hiperparámetros
- Validación cruzada
- Persistencia de modelos y encoders
- API de predicción lista para producción
Visualización de Resultados
- 8 gráficas de evaluación del modelo
- Dashboard interactivo en Tableau
- Análisis exploratorio de datos
- Visualización de distribuciones y outliers
Dashboard en Tableau
El dashboard interactivo incluye:
- Mapa de calor por ubicación: Visualización geográfica de precios promedio
- Distribución de precios: Histogramas y box plots por sector
- Análisis de amenidades: Correlación entre características y precio
- Tendencias temporales: Evolución de precios en el tiempo
- Comparativa de sectores: Rankings por ubicación
- Filtros interactivos: Por precio, habitaciones, ubicación, amenidades
Casos de Uso
1. Inversores Inmobiliarios
- Identificar zonas con mejor relación calidad-precio
- Predecir retorno de inversión en alquileres
- Analizar tendencias del mercado
2. Agentes Inmobiliarios
- Valoración automática de propiedades
- Recomendaciones de precios competitivos
- Análisis de portafolio de propiedades
3. Inquilinos
- Detectar ofertas por debajo del mercado
- Comparar opciones basadas en características
- Entender qué amenidades justifican precios más altos
Resultados del Modelo
Configuración Óptima (Grid Search)
{ "max_depth": 3, "learning_rate": 0.1, "n_estimators": 100, "subsample": 0.9, "colsample_bytree": 1.0, "objective": "reg:squarederror"}Ejemplo de Predicción
from model.predict import RentPredictor
predictor = RentPredictor()
# Apartamento de ejemploapartment = { "rooms": 3, "baths": 2, "parking": 2, "construction_meters": 150, "floor": 7, "location": "Bella Vista", "has_pool": True, "has_gym": True, "security_24_7": True, "amount_of_elevators": 2, # ... más características}
predicted_rent = predictor.predict(apartment)print(f"Precio estimado: {predicted_rent:,.0f} DOP")# Output: Precio estimado: 45,230 DOPDesafíos y Soluciones
1. Calidad de Datos
Problema: Datos inconsistentes, valores faltantes, formatos diversos
Solución: Pipeline robusto de limpieza + validación con IA
2. Extracción de Características
Problema: Información relevante en texto libre no estructurado
Solución: OpenAI Batch API para extracción inteligente
3. Ubicaciones No Estandarizadas
Problema: Misma ubicación con múltiples nombres
Solución: Normalización con IA + geolocalización
4. Costos de API
Problema: Llamadas individuales a OpenAI muy costosas
Solución: Batch API reduce costos en 50%
Mejoras Futuras
Pipeline
- Agregar más fuentes de datos (otros portales inmobiliarios)
- Implementar data versioning con DVC
- Agregar tests automatizados con Great Expectations
- Monitoreo con Prometheus + Grafana
Modelo
- Experimentar con LightGBM y CatBoost
- Implementar ensemble models
- Agregar features de geolocalización (distancia a puntos de interés)
- Incorporar datos históricos para análisis de tendencias
- Implementar model monitoring y drift detection
Enriquecimiento
- Análisis de sentimiento en descripciones
- Extracción de imágenes y clasificación con CV
- Scoring de calidad de anuncios
Dashboard
- Integrar con API REST para consultas
Aprendizajes Clave
- ETL robusto es fundamental: La calidad del modelo depende directamente de la calidad de los datos
- Batch processing ahorra costos: 50% de reducción en costos de API usando batches
- Feature engineering > algoritmos complejos: Buenas características importan más que el modelo en sí
- Validación cruzada con IA: Usar LLMs para validar y enriquecer datos estructurados
- Visualización comunica insights: Gráficas bien diseñadas facilitan la toma de decisiones
Repositorio
Autor
- Vladimir Curiel - Desarrollador
