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:
- Localizacion (zona/provincia) - 40%
- Tamaño (m2) - 35%
- Ascensor - 10%
- Terraza - 8%
- 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
- GitHub: https://github.com/TuUsuario/Proyecto-Final-DataScience-Evolve-CarlosBarrientos
- Documentacion tecnica: ARQUITECTURA.md, METODOLOGIA.md
- Dataset: 21,000+ anuncios de alquiler en España
Top comments (0)