MODELO ML RANDOM FOREST Y XGBOOST
Aquí mostramos el proceso completo, desde la preparación de datos hasta la evaluación de cuatro modelos distintos, con códigos y gráficos claros.
5/8/20243 min read
Random Forest es un algoritmo de aprendizaje supervisado que combina múltiples árboles de decisión para mejorar la precisión de las predicciones. Cada árbol en el bosque produce una predicción, y la salida final del modelo es el promedio (en regresión) o la votación mayoritaria (en clasificación) de todas las predicciones individuales. Este enfoque reduce el sobreajuste y mejora la capacidad de generalización del modelo.
Este bloque configura el entorno para construir un modelo explicativo basado solo en variables exógenas, es decir, aquellas que influyen en el fenómeno pero no dependen de la variable objetivo. Importa librerías esenciales para procesar datos (numpy, pandas) y entrenar modelos (RandomForestRegressor, XGBRegressor), además de herramientas para imputar valores faltantes y evaluar el rendimiento. Finalmente, verifica si XGBoost está instalado; si no, muestra una advertencia y utiliza Random Forest como modelo base.
Este bloque define cuáles son las variables exógenas que se usarán en el modelo. Primero, se especifica la variable objetivo (TARGET), que en este caso corresponde a tourist_arrivals_dyadic, es decir, las llegadas de turistas entre pares de países. Luego, se crea una lista con todas las variables explicativas posibles: factores económicos (PIB, tipo de cambio, IPC, CPI), estructurales (distancia, idioma, religión), climáticos, digitales (Google Trends, SCI) y contextuales (terrorismo, precio de commodities). Finalmente, el código filtra esa lista para quedarse solo con las columnas que realmente existen en el dataset (df) y las imprime, asegurando que el modelo trabaje solo con las variables disponibles.
Este bloque realiza una limpieza básica de datos para preparar el dataset antes del modelado. Primero, define una función llamada to_number() que convierte valores con símbolos como $, % o comas en números reales, eliminando caracteres que podrían impedir el análisis. Luego, aplica esta función a todas las columnas exógenas y a la variable objetivo, transformando los datos que estén en formato texto.
Después, se crea un nuevo DataFrame (df_exo) que contiene solo las variables necesarias y elimina las filas donde la variable objetivo tenga valores nulos. Finalmente, se reemplazan los valores faltantes en las variables exógenas utilizando la mediana, asegurando que el modelo pueda entrenarse sin errores por datos incompletos.
Este bloque realiza la división temporal del conjunto de datos para entrenar y evaluar el modelo. Se establece el año 2018 como punto de corte: todos los registros anteriores se usan para entrenar el modelo y los posteriores para probar su capacidad de predicción. Luego, se separan las variables independientes (X_train, X_test) y la variable objetivo (y_train, y_test).
Finalmente, el código imprime el tamaño de cada conjunto y los rangos de años incluidos, permitiendo verificar que la partición respete la secuencia temporal y que el modelo aprenda únicamente a partir de datos del pasado, simulando un escenario predictivo realista.
Este bloque se encarga del entrenamiento y evaluación de los modelos Random Forest y XGBoost usando solo variables exógenas. Primero, define un preprocesador (ColumnTransformer) que rellena los valores faltantes con la mediana. Luego, crea la función eval_model(), que construye un pipeline que combina el preprocesamiento con el modelo, lo entrena con los datos de entrenamiento y calcula métricas clave de desempeño: MAE, RMSE y R².
Después, entrena un Random Forest con 400 árboles y, si XGBoost está disponible, también entrena un XGBoost Regressor con parámetros optimizados para mejorar la precisión. Finalmente, imprime los resultados de ambos, permitiendo comparar su capacidad predictiva solo con información exógena.
Este bloque genera una tabla comparativa de desempeño entre los modelos Random Forest y XGBoost entrenados con variables exógenas. Primero, crea un diccionario (results) donde se almacenarán las métricas de cada modelo. Luego, entrena nuevamente ambos modelos dentro de un pipeline con el preprocesamiento incluido y calcula tres métricas: MAE, RMSE y R², que miden el error absoluto medio, el error cuadrático medio y el grado de ajuste del modelo, respectivamente.
Finalmente, compila los resultados en un DataFrame para facilitar la comparación, redondea los valores para una lectura más clara y muestra una tabla resumen. Este bloque permite identificar cuál modelo logra un mejor desempeño explicativo con las variables externas utilizadas.