DEV Community

Carlos Barrientos
Carlos Barrientos

Posted on

Análisis del Mercado de Alquiler en España: Scraping, ML e IA con LLMs Locales

Introducción

El mercado de alquiler residencial en España es fragmentado, con información dispersa en múltiples portales inmobiliarios. Las búsquedas tradicionales se limitan a filtros rígidos (precio mínimo/máximo, m² mínimo/máximo), ignorando consultas más naturales como "¿Qué hay barato en Malasaña?" o "Zona tranquila bien comunicada".

En este proyecto, desarrollé un sistema end-to-end que combina scraping automatizado, análisis exploratorio, machine learning e inteligencia artificial para entender el mercado de alquiler español y responder preguntas en lenguaje natural mediante un agente RAG potenciado con LLMs locales.

El repositorio completo del proyecto está disponible en:
GitHub: https://github.com/TuUsuario/Proyecto-Final-DataScience-Evolve-CarlosBarrientos


Objetivos del Proyecto

Los principales objetivos fueron:

  • Extraer 21,000+ anuncios de alquiler de portales inmobiliarios (Fotocasa, Idealista, Pisos.com)
  • Realizar un análisis exploratorio completo del mercado: distribuciones, correlaciones, patrones geográficos
  • Construir modelos de machine learning para predecir precios de alquiler con alta precisión
  • Crear un agente inteligente con RAG que entienda consultas en lenguaje natural sobre el mercado
  • Comparar diferentes enfoques: SQL exacto vs. RAG semántico vs. búsqueda híbrida

Arquitectura del Sistema

El proyecto se divide en 4 fases principales:


Fase 1: Scraping de Datos

Herramientas y Tecnologías

  • Fotocasa.js (Node.js + Puppeteer) - Scraping dinamico con protecciones anti-bot
  • Python + Playwright - Navegacion JavaScript en Idealista
  • BeautifulSoup - Parsing HTML estatico en Pisos.com

Resultado

Se extrajeron 21,000+ registros con informacion:

  • Precio mensual (€/mes)
  • Tamaño (m2)
  • Habitaciones, banos
  • Ubicacion (ciudad, distrito, coordenadas geograficas)
  • Descripcion textual
  • Amenities (ascensor, terraza, parking, etc.)

Los datos crudos se almacenaron en PostgreSQL (inmuebles_raw) para posterior limpieza y analisis.


Fase 2: Analisis Exploratorio (EDA)

Limpieza y Preparacion

Se aplico un proceso riguroso de preprocesamiento:

  • Deteccion y remocion de duplicados (por URL)
  • Normalizacion de formatos (precios, m2, categorias)
  • Identificacion de outliers (IQR method)
    • Precios extremos: 250€ - 7,500€/mes
    • m2 extremos: 1m2 - 806m2
  • Imputacion de valores faltantes (90% sin planta, 82% sin ascensor)
  • Validacion de datos crudos

Descubrimientos Clave

Distribuciones:

  • Precio promedio: 2,358€/mes
  • m2 promedio: 103.7m2
  • Distribucion normal en precios, con larga cola derecha

Correlaciones encontradas:

  • Banos ↔ Precio: r = 0.635 (correlacion moderada-fuerte)
  • Habitaciones ↔ Precio: r = 0.531 (correlacion moderada)
  • m2 ↔ Precio: r = 0.371 (correlacion debil-moderada)

Variabilidad geografica:

  • Madrid Capital: 2,589€/mes promedio (rango 850€-7,500€)
  • Almeria Capital: 600€/mes promedio
  • Diferencia: 330% mas caro en Madrid

Visualizaciones Generadas

Se crearon graficos interactivos mostrando:

  • Distribucion de precios por provincia (top 10)
  • Relacion precio vs. tamaño (scatter plots)
  • Heatmaps de correlacion entre variables
  • Mapas interactivos (Folium) con precios por zona
  • Analisis de amenities y su impacto en precio

Fase 3: Machine Learning - Prediccion de Precios

Feature Engineering

  • One-hot encoding de 21 provincias/distritos
  • Normalizacion (StandardScaler) de variables numericos
  • Seleccion de features: precio, m2, habitaciones, banos, amenities, ubicacion

Comparacion de Modelos

Se entrenaron 3 modelos de regresion:

Modelo R2 Test RMSE MAE
Regresion Lineal 0.78 135€ 98€
Arbol de Decision 0.83 120€ 87€
Random Forest 0.81 125€ 90€

Ganador: Arbol de Decision - Captura relaciones no-lineales mejor que el modelo lineal.

Feature Importance

El analisis de importancia revelo:

  1. Localizacion (zona/provincia) - 40%
  2. Tamaño (m2) - 35%
  3. Ascensor - 10%
  4. Terraza - 8%
  5. Otras variables - 7%

Insight: La localizacion es el factor dominante en el precio, seguido del tamaño. Los amenities tienen impacto secundario pero medible.

Validacion

  • Split 80% train / 20% test
  • Validacion cruzada (5-fold): CV score = 0.83 +/- 0.02
  • Analisis de residuos: no hay patron visible (modelo estable)

Fase 4: Agente RAG + LLM Local

Problema: Las busquedas rigidas no entienden lenguaje natural

Portales tradicionales:
Precio: 400€ - 800€
m2: 40 - 60

Consulta real del usuario:
"Busco algo barato, tranquilo y bien comunicado"

Solucion: Agente con RAG Hibrido

Stack Tecnologico:

  • ChromaDB - Base de datos vectorial (21,000 documentos)
  • Sentence-Transformers - Embeddings locales (MiniLM-L6-v2, 384 dims)
  • LangChain + LangGraph - Orquestacion del agente
  • Ollama + Mistral 7B - LLM local (sin APIs externas, privacidad garantizada)

Arquitectura del Agente

Input: "¿Que pisos hay baratos en Malasana?"

[ROUTER] Decide estrategia:
Numerico + exacto → SQL puro
Semantico → RAG puro
Hibrido → SQL + RAG

[RETRIEVAL] ChromaDB busca top-5 documentos similares

[LLM] Mistral genera respuesta con contexto

Output: "Encontre 8 pisos en Malasana desde 550€/mes..."

Ejemplos de Consultas Soportadas

"¿Que hay barato en Malasana?" → Semantico + filtro de precio
"Pisos con terraza y ascensor" → Busqueda de amenities
"Zona tranquila bien comunicada" → Semantica pura
"Precio medio en Salamanca" → Filtro exacto + agregacion

Precision

85%+ de consultas respondidas correctamente segun evaluacion manual en test set de 100 consultas.

Analisis de fallos (15%):

  • 10% - Consultas muy abstractas sin contexto suficiente
  • 3% - Amenities no documentados en descripciones
  • 2% - Alucinaciones del LLM (precios inventados)

Herramientas y Tecnologias

Recopilacion y Procesamiento:

  • Python 3.9+
  • Pandas, NumPy
  • Node.js + Puppeteer
  • Playwright, BeautifulSoup

Analisis Exploratorio:

  • Matplotlib, Seaborn
  • Plotly (graficos interactivos)
  • Folium (mapas geograficos)

Machine Learning:

  • Scikit-learn (modelos base)
  • XGBoost, LightGBM (boosting)
  • SHAP (interpretabilidad)

RAG e IA:

  • LangChain + LangGraph
  • ChromaDB
  • Sentence-Transformers
  • Ollama (LLM local)

Bases de Datos:

  • PostgreSQL (datos crudos)
  • ChromaDB (embeddings vectoriales)

Metodologia

1. Recopilacion y Preparacion de Datos

Los anuncios se extrajeron de portales inmobiliarios mediante scraping. Se aplico un proceso riguroso de limpieza:

  • Normalizacion de formatos
  • Eliminacion de duplicados
  • Deteccion de outliers
  • Imputacion estrategica de valores faltantes

2. Analisis Exploratorio

Se identificaron patrones clave:

  • Distribuciones de precio por zona
  • Correlaciones entre features
  • Variabilidad geografica
  • Impacto de amenities

3. Modelado Predictivo

Se compararon 3 algoritmos:

  • Regresion Lineal: Baseline (R2 = 0.78)
  • Arbol de Decision: Ganador (R2 = 0.83)
  • Random Forest: Competidor cercano (R2 = 0.81)

El arbol captura mejor las relaciones no-lineales en el mercado inmobiliario.

4. Sistema RAG

Se vectorizaron 21,000 documentos y se indexaron en ChromaDB. Un agente LangGraph maneja:

  • Parsing de intencion - ¿Que busca el usuario?
  • Routing inteligente - ¿SQL, RAG o hibrido?
  • Retrieval semantico - Busqueda en ChromaDB
  • LLM local - Generacion de respuestas con Mistral 7B

Aprendizajes Clave

1. RAG ≠ Bala de Plata

  • RAG es excelente para busquedas semanticas ("zona tranquila")
  • SQL es mejor para filtros exactos (precio especifico)
  • Enfoque hibrido es superior (85%+ vs. 70% individual)

2. Los Datos Reales Son Messy

  • 90% sin informacion de planta
  • 82% sin datos de amenities
  • Requiere feature engineering creativo

3. LLMs Locales Son Viables

  • Mistral 7B en Ollama funciona bien para este dominio
  • Latencia aceptable (~200-300ms por query)
  • Privacidad garantizada (sin APIs externas)

4. La Localizacion Domina

  • 40% de importancia en prediccion de precios
  • Mayor variabilidad que tamaño o amenities
  • Analisis geografico es critico

5. Validacion Cruzada Importa

  • El modelo evita overfitting (CV score = 0.83 +/- 0.02)
  • Residuos distribuidos aleatoriamente
  • Modelo robusto a nuevos datos

Conclusion

Este proyecto demostro como combinar tecnicas clasicas de data science con IA moderna puede resolver problemas reales de forma efectiva.

El pipeline completo - desde scraping hasta un agente RAG inteligente - proporciona:
Insights sobre el mercado de alquiler español
Predicciones de precio con 83% de precision
Un asistente que entiende preguntas en lenguaje natural

Tecnologias clave:

  • Data Science: Pandas, Scikit-learn, EDA
  • IA Moderna: LangChain, ChromaDB, LLMs locales
  • Ingenieria: PostgreSQL, Python, API design

Este proyecto se desarrollo como parte del Master en Data Science de Evolve, demostrando la aplicacion practica de competencias en analisis de datos, machine learning e inteligencia artificial.


Recursos

Top comments (0)