Path: blob/main/tp2/7506R_TP2_GRUPO09_ENTREGA_N1(nlp).ipynb
91 views
Configuración inicial
Importamos las bibliotecas necesarias para el análisis.
Funciones útiles.
Definimos funciones que se van a utilizar.
Importamos los datasets ya preprocesados.
Importamos y hacemos un head del dataset con las descripciones para ver qué forma tiene.
Unimos el dataset preprocesado con el que contiene las descripciones.
Normalizamos las descripciones para que sea más fácil realizar el análisis.
Definimos una lista de palabras que no son relevantes a la hora de elegir aspectos, y creamos un diccionario que contiene todas las palabras de las descripciones con sus frecuencias, para ver cuáles podemos tomar como aspectos.
Tomamos las 50 palabras más frecuentes como aspectos relevantes de las descripciones.
Buscamos frases que contengan los aspectos encontrados siguiendo reglas simples de regex. Tomamos como aspectos las más frecuentes y las guardamos en un diccionario.
Nos quedamos con las frases que se encuentran en más del 1,5% de las descripciones del dataset.
Una vez generada la lista de aspectos (palabras + frases) los agregamos al dataset como columnas nuevas.
XGBoost
Entrenamos dos modelos XGBoost: uno utilizando los hiperparámetros obtenidos en el primer trabajo y otro con hiperparámetros optimizados para el nuevo dataset.
La idea es generar modelos de regresión que puedan predecir el precio de la propiedad.
Primero construimos el target y adaptamos el dataset.
Parámetros del TP1
Entrenamos al primer modelo e imprimimos sus métricas de test y de train.
Vemos cómo es la performance con los datos de train. Performa demasiado bien, por lo que podría haber overfitting.
Ahora analizamos con los datos de test.
Las métricas también son muy buenas, por lo que si bien puede haber un poco de overfitting el modelo está prediciendo bien los resultados.
En el TP1 los resultados habían sido:
El error (mse) de test es: 1194394914.1879835
El error (rmse) de test es: 34560.0190131311
El score R2 es: 0.8875645071859526
por lo que vemos una mejora. Sin embargo, buscamos un nuevo modelo con los hiperparámetros optimizados a ver si mejoran aún más los resultados y podemos reducir el overfitting.
Nuevos hiperparámetros
Entrenamos al segundo modelo, esta vez realizando un randomized search para obtener los mejores hiperparámetros.
Entrenamos al modelo con la mejor métrica.
Analizamos su performance con los datos de train.
Nuevamente, vemos que performa demasiado bien, por lo que podría haber overfitting.
Analizamos cómo performa con los datos de test.
Sigue teniendo muy buenos resultados, similares a los obtenidos con el modelo anterior.
Conclusiones
El dataset con aspectos tiene una mejor performance que sin, pero la mejora no es demasiado significativa ya que sin eso ya se obtenían buenos resultados.
El método explorado de Regex resultó ser útil para encontrar de forma rápida frases comunes relacionadas al dominio, pero resultó lento y difícil hallar las mejores reglas que generaban el mejor rendimiento ya que primero era necesario familiarizarnos mucho con el dominio y el dataset.
En los modelos entrenados se puede observar un poco de overfitting, pero incluso optimizando los hiperparámetros esto no mejora. Sin embargo, como los resultados con los datos de test también son muy buenos podemos suponer que el modelo se adapta muy bien a los datos.