1. Planteo del Problema


1.1 Venta de Casas

Se parte de una base de datos extraído mediante scrapping por Gonzalo Pérez. Esta base contiene información sobre la venta de casas en Uruguay recolectada de Mercado Libre y del Gallito, en los años 2023 y 2025.


1.2 Objetivo del Proyecto

El objetivo que nos planteamos es conseguir un modelo que logre predecir el precio de las casas. Esto es relevante por varios motivos:

  1. Si una persona intentara vender su casa, podría usar este modelo como guía para marcar el precio.

  2. Nos permite ver qué casas están sobre-valuadas o infra-valuadas determinando oportunidades de compra o de corrección de precios.

  3. Nos permite ver qué variables son las más relevantes al momento de determinar el precio de una propiedad.

  4. En caso de que el modelo no arroje buenos resultados podria ser un símbolo de que existan variables relavantes que no estarían siendo contempladas.


1.3 Diccionario de Datos

Datos Iniciales

2. Importando las librerías necesarias

3. Cargando la Base de Datos

3.1 Observación de la Base:

Observaciones

Vemos que hay duplicados por ARTICLE_ID que sean no nulos, asi que procederemos a quedarnos con las ultimas ingresadas luego de convertir las fechas en formato datetime.

3.2 Eliminación de Variables

Teniendo en cuenta que hay muchas variables que no son de nuestra utilidad para el modelo que queremos realizar, procederemos a borrarlas previo al análisis exploratorio.

Justificación de por qué se eliminan estas variables:

4. Resumen de Datos

4.1 ¿Qué tipo de datos hay?

Observaciones sobre los tipos de variables:

Nos quedamos con 22 variables, de las cuales:

4.2 Orígenes de los Datos y Modificaciones:

Estas son:

  1. NEIGHBORHOOD y ADDRESS_CITY_NAME
  2. PROCESS_DATE y PROCESS_DATE.1
  3. CONDITION e ITEM_CONDITION

Procedemos a mergear dicha información en la primer columna, y borramos todas las segundas columnas.

Ahora que tenemos las fechas en PROCESS_DATE, nos quedamos con las mas recientes para los duplicados por ARTICLE_ID

4.3 Chequeo de Datos Faltantes

Observaciones sobre Datos Faltantes:

Variable "Address State":

Veamos ahora, de los nulos que quedan si podemos deducir algunos mas incluso

Usando una IA podemos proceder a deducir cuales son los departamentos en cada uno de los casos restantes. Para esto se realizó prompt engineering, explicando el rol y el objetivo. Luego se realizó una verificación de los casos para chequear que fueran correctos.

Bien, ahora vemos que pudimos imputar todos los valores de ADDRESS_STATE. Pasamos de un 94% a un 0%. Ahora que resolvimos los datos nulos, estamos prontos para seguir con los siguientes pasos.

Variables "Process Date" y "Price":

De las variables que nos quedan, identificamos que tenemos que convertir: PROCESS_DATE en formato fecha, price en float. Vemos que algunos precios tienen "." en el mismo, asi que tenemos que eliminar esos "." de alli para poder convertirlos.

Ahora cada variable tiene el tipo que esperamos que tenga. Sin embargo, hay un tema que aún tenemos que resolver: El tipo de moneda utilizado. Para ello, vamos a definir un objeto que mapee cuál era el precio del dólar en el momento que se procesó dicha información y vamos a convertir todo a esa moneda. Luego, podremos eliminar la columna CURRENCY_ID.

Variable "PRICE" y solucionando el problema del tipo de cambio:

Vemos que las fechas van desde marzo del 2023 hasta marzo del 2025, teniendo más de 80 registros. Buscaremos un promedio mensual para realizar la converción.

Dado que tenemos los meses y años únicos, podemos definir un diccionario con las tasas de cambio aproximadas de UYU a USD para cada mes y año presente en los datos.

Advertencia: Estas tasas de cambio son aproximadas.

Como se puede ver incluso la que tiene el valor más alto en pesos uruguayos parece tener un valor irreal. Lo que debe estar sucediendo es que los usuarios se equivocan(o dejan la que viene por defecto) al seleccionar la moneda. Pero seguiremos analizando estos casos.

Es imposible que existan casas en el entorno de los 500 dólares. Lo que suponemos es que los usuarios seleccionan el tipo de moneda de forma incorrecta. A modo de ejemplo, la casa mas barata que se observa (16.500 \$U) suponemos que en realidad corresponde a 16.500 \$USD. Lo que haremos será asumir que todos los valores en realidad son en \$USD

4.4 Resumen estadístico

Observación del resumen estadístico:

Hay algunas cosas que nos llaman la atención:

Eliminación de Erroes en Variable "PRICE":

4.5 Chequeo de Datos Duplicados

Luego de haber realizado una gran limpieza preliminar de la base, vamos a chequear si tenemos datos duplicados.

Eliminación de Variables: Parte 2

Si bien algunas observaciones son del 2025, decidimos dejarlas ya que no ha habido grandes cambios del tipo de cambio. Pero si quisieramos ser mas precisos deberíamos hacer un análisis del tipo de cambio e inflación.

Observaciones:

La distribución de datos ahora quedó determinado de la siguiente forma:

Dataset Paralelo:

En este momento creamos una copia del dataset actual, ya que algunos de los cambios que aplicaremos a continuacón no sirven para todos los modelos. Para los modelos lineales en conveniente que las variables categóricas tengan pocas categorías debido a que cada una va a ser leída ocmo una nueva variable por el modelo y el tener categorías con muy pocas observaciones aumenta la multicolinearidad, complejizando la interpretabilidad del modelo. Por otro lado en modelos como random forest o catboost, estas modificaciones implican pérdidad de información que afectan negativamente el poder predictivo. Por este motivo trabajaremos con dos datasets con distintos tratamientos.

Variable "CONDITION":

5. Análisis de Datos Exploratorio - Visualizaciones

5.1 Análisis Univariado:

Distribución de las variables continuas:

En las siguientes visualizaciones, decidimos quitar el 10% de los datos de la derecha para las variables: COVERED_AREA', 'PRICE' , 'ROOMS', 'GARAGE', ya que observamos que teniamos muchisimos outliers y se nos dificultaba la visualizaciión.

Procedemos a eliminar algunos outliers de las variables:

Dicho esto, hay algunos outliers que nos llaman mucho la atención:

5.2 Análisis Bivariado:

6. Modelo de Regresión Lineal:

6.1 Preparación de la Base

6.2 Modelos

6.3 Transformaciones logarítmicas

6.4 Importancia relativa de las variables

7. Modelo Gradient Boosting

Ya que de las 10 variables explicativas 6 son categóricas, procedemos a utilizar el modelo CatBoost.

7.1 Preparación de la Base

7.2 Modelo CatBoost

7.3 Importancia Relativa de las Variables

7.4 Optimización con Optuna

7.5 Catboost con optuna para Maldonado

7.6 Catboost con optuna para Montevideo

7.6 Catboost con optuna para Canelones

7. Conclusiones

Estos fueron los resultados finales:

Modelo MAPE
Regresión Lineal (RL) 39.9%
CatBoost 33.8%
CatBoost + Optuna 32.0%
CatBoost + Optuna (Montevideo) 25.0%
CatBoost + Optuna (Maldonado) 37.0%