Saltar al contenido

Bosque al azar para la previsión de series temporales

2 de noviembre de 2020

Bosque al azar es un popular y efectivo algoritmo de aprendizaje de máquinas de conjunto.

Se utiliza ampliamente para la clasificación y los problemas de modelización predictiva de regresión con conjuntos de datos estructurados (tabulares), por ejemplo, los datos tal como se ven en una hoja de cálculo o en una tabla de base de datos.

Random Forest también puede utilizarse para previsión de series temporalesaunque requiere que el conjunto de datos de la serie de tiempo se transforme primero en un problema de aprendizaje supervisado. También requiere el uso de una técnica especializada para evaluar el modelo llamada validación de avance, ya que la evaluación del modelo mediante la validación cruzada de pliegues k daría lugar a resultados sesgados de manera optimista.

En este tutorial, descubrirás cómo desarrollar un modelo de Bosque aleatorio para la previsión de series temporales.

Después de completar este tutorial, lo sabrás:

  • Random Forest es un conjunto de algoritmos de árboles de decisión que pueden ser utilizados para la clasificación y el modelado predictivo de regresión.
  • Los conjuntos de datos de series temporales pueden transformarse en aprendizaje supervisado mediante una representación de ventana deslizante.
  • Cómo encajar, evaluar y hacer predicciones con un modelo de regresión de Random Forest para la previsión de series temporales.

Empecemos.

Bosque al azar para la previsión de series temporales

Bosque al azar para la previsión de series temporales
Foto de IvyMike, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en tres partes; son:

  1. Conjunto de bosques al azar
  2. Preparación de datos de series de tiempo
  3. Bosque al azar para la serie de tiempo

Conjunto de bosques al azar

El bosque aleatorio es un conjunto de algoritmos de árboles de decisión.

Es una extensión de la agregación de bootstrap (embolsado) de los árboles de decisión y puede utilizarse para problemas de clasificación y regresión.

En el embolsado, se hacen varios árboles de decisión en los que cada árbol se crea a partir de una muestra diferente del conjunto de datos de entrenamiento. Una muestra de bootstrap es una muestra del conjunto de datos de capacitación en la que un ejemplo puede aparecer más de una vez en la muestra. Esto se denomina «muestreo con reemplazo”.

El embolsado es un algoritmo de conjunto efectivo ya que cada árbol de decisión se ajusta a un conjunto de datos de entrenamiento ligeramente diferente, y a su vez, tiene un rendimiento ligeramente diferente. A diferencia de los modelos normales de árboles de decisión, como los árboles de clasificación y regresión (CART), los árboles utilizados en el conjunto no se podan, por lo que se ajustan ligeramente al conjunto de datos de formación. Esto es deseable ya que ayuda a que cada árbol sea más diferente y tenga menos predicciones correlacionadas o errores de predicción.

Las predicciones de los árboles se promedian a través de todos los árboles de decisión, lo que da como resultado un mejor rendimiento que cualquier otro árbol del modelo.

Una predicción en un problema de regresión es el promedio de la predicción a través de los árboles del conjunto. Una predicción en un problema de clasificación es el voto mayoritario para la etiqueta de clase a través de los árboles del conjunto.

  • Regresión: La predicción es la predicción promedio a través de los árboles de decisión.
  • Clasificación: La predicción es la etiqueta de clase de voto mayoritario que se predice en los árboles de decisión.

El bosque aleatorio implica la construcción de un gran número de árboles de decisión a partir de muestras de bootstrap del conjunto de datos de entrenamiento, como el embolsado.

A diferencia del embolsado, el bosque aleatorio también implica la selección de un subconjunto de características de entrada (columnas o variables) en cada punto de división en la construcción de los árboles. Típicamente, la construcción de un árbol de decisión implica la evaluación del valor de cada variable de entrada en los datos para seleccionar un punto de división. Al reducir las características a un subconjunto aleatorio que se puede considerar en cada punto de división, se fuerza a que cada árbol de decisión del conjunto sea más diferente.

El efecto es que las predicciones y, a su vez, los errores de predicción de cada árbol del conjunto son más diferentes o menos correlacionados. Cuando se promedian las predicciones de estos árboles menos correlacionados para hacer una predicción, a menudo se obtiene un mejor rendimiento que el de los árboles de decisión empaquetados.

Para más información sobre el algoritmo del Bosque Aleatorio, vea el tutorial:

Preparación de datos de series de tiempo

Los datos de las series de tiempo pueden formularse como aprendizaje supervisado.

Dada una secuencia de números para un conjunto de datos de series temporales, podemos reestructurar los datos para que parezcan un problema de aprendizaje supervisado. Podemos hacer esto utilizando los pasos de tiempo anteriores como variables de entrada y utilizar el siguiente paso de tiempo como la variable de salida.

Concretemos esto con un ejemplo. Imaginemos que tenemos una serie temporal como la siguiente:

Podemos reestructurar este conjunto de datos de series temporales como un problema de aprendizaje supervisado utilizando el valor en el paso de tiempo anterior para predecir el valor en el siguiente paso de tiempo.

Reorganizando el conjunto de datos de las series de tiempo de esta manera, los datos se verían de la siguiente manera:

Obsérvese que la columna de tiempo se ha eliminado y que algunas filas de datos son inutilizables para entrenar un modelo, como la primera y la última.

Esta representación se llama ventana corrediza, ya que la ventana de entradas y salidas esperadas se desplaza hacia adelante a través del tiempo para crear nuevas «muestras» para un modelo de aprendizaje supervisado.

Para más información sobre el enfoque de la ventana corrediza para la preparación de datos de previsión de series temporales, véase el tutorial:

Podemos usar la función shift() en Pandas para crear automáticamente nuevos encuadres de problemas de series temporales dada la longitud deseada de las secuencias de entrada y salida.

Esta sería una herramienta útil ya que nos permitiría explorar diferentes encuadres de un problema de series temporales con algoritmos de aprendizaje de máquinas para ver cuál podría resultar en modelos de mejor rendimiento.

La función que se indica a continuación tomará una serie temporal como una serie temporal de la matriz NumPy con una o más columnas y la transformará en un problema de aprendizaje supervisado con el número especificado de entradas y salidas.

Podemos usar esta función para preparar un conjunto de datos de series de tiempo para Random Forest.

Para más información sobre el desarrollo paso a paso de esta función, véase el tutorial:

Una vez preparado el conjunto de datos, debemos ser cuidadosos en la forma en que se utiliza para ajustar y evaluar un modelo.

Por ejemplo, no sería válido ajustar el modelo con datos del futuro y hacer que prediga el pasado. El modelo debe entrenarse en el pasado y predecir el futuro.

Esto significa que los métodos que aleatorizan el conjunto de datos durante la evaluación, como la validación cruzada del pliegue k, no pueden utilizarse. En su lugar, debemos utilizar una técnica llamada validación a pie de página.

En la validación del avance, el conjunto de datos se divide primero en trenes y conjuntos de pruebas seleccionando un punto de corte, por ejemplo, todos los datos excepto los últimos 12 meses se utilizan para el entrenamiento y los últimos 12 meses para las pruebas.

Si estamos interesados en hacer un pronóstico de un paso, por ejemplo un mes, entonces podemos evaluar el modelo entrenando en el conjunto de datos de entrenamiento y prediciendo el primer paso en el conjunto de datos de la prueba. Podemos entonces añadir la observación real del conjunto de pruebas al conjunto de datos de entrenamiento, reajustar el modelo, y luego hacer que el modelo prediga el segundo paso en el conjunto de datos de la prueba.

La repetición de este proceso para todo el conjunto de datos de la prueba dará una predicción de un paso para todo el conjunto de datos de la prueba a partir de la cual se puede calcular una medida de error para evaluar la habilidad del modelo.

Para más información sobre la validación de la marcha adelante, vea el tutorial:

La función que se indica a continuación realiza la validación de la marcha adelante.

Se necesita toda la versión de aprendizaje supervisado del conjunto de datos de la serie de tiempo y el número de filas para usar como argumento el conjunto de pruebas.

Luego pasa por el conjunto de pruebas, llamando al random_forest_forecast() para hacer un pronóstico de un solo paso. Se calcula una medida de error y se devuelven los detalles para su análisis.

El train_test_split() se llama a la función de dividir el conjunto de datos en trenes y conjuntos de pruebas.

Podemos definir esta función a continuación.

Podemos usar la clase RandomForestRegressor para hacer un pronóstico de un paso.

El random_forest_forecast() La función que se indica a continuación implementa esto, tomando el conjunto de datos de entrenamiento y la fila de entrada de prueba como entrada, ajustando un modelo y haciendo una predicción de un paso.

Ahora que sabemos cómo preparar datos de series de tiempo para pronosticar y evaluar un modelo de Bosque al azar, a continuación podemos ver cómo usar Bosque al azar en un conjunto de datos reales.

Bosque al azar para la serie de tiempo

En esta sección, exploraremos cómo utilizar el regresor Random Forest para la predicción de series temporales.

Recomendado:  Cómo AWS pretende democratizar el aprendizaje automático con servicios en la nube

Utilizaremos un conjunto de datos estándar de series temporales univariadas con la intención de utilizar el modelo para hacer un pronóstico de un solo paso.

Puede utilizar el código de esta sección como punto de partida de su propio proyecto y adaptarlo fácilmente para entradas multivariadas, previsiones multivariadas y previsiones de varios pasos.

Usaremos el conjunto de datos de los nacimientos femeninos diarios, es decir, los nacimientos mensuales a lo largo de tres años.

Puede descargar el conjunto de datos desde aquí, colóquelo en su directorio de trabajo actual con el nombre de archivo «daily-total-female-births.csv“.

Las primeras líneas del conjunto de datos se ven como sigue:

Primero, carguemos y tracemos el conjunto de datos.

El ejemplo completo figura a continuación.

Ejecutando el ejemplo se crea un gráfico de líneas del conjunto de datos.

Podemos ver que no hay una tendencia obvia o estacionalidad.

Gráfica de línea de nacimientos mensuales Conjunto de datos de series temporales

Gráfica de línea de nacimientos mensuales Conjunto de datos de series temporales

Un modelo de persistencia puede lograr un MAE de alrededor de 6,7 nacimientos al predecir los últimos 12 meses. Esto proporciona una línea de base en el rendimiento por encima de la cual un modelo puede considerarse hábil.

A continuación, podemos evaluar el modelo de Bosque Aleatorio en el conjunto de datos al hacer pronósticos de un solo paso para los últimos 12 meses de datos.

Utilizaremos sólo los seis pasos de tiempo anteriores como entrada al modelo y a los hiperparámetros del modelo por defecto, excepto que utilizaremos 1.000 árboles en el conjunto (para evitar el subaprendizaje).

El ejemplo completo figura a continuación.

Recomendado:  La nueva plataforma de inteligencia artificial de KB Lancaster Securities genera información valiosa sobre los datos para mejorar la construcción de la cartera

La ejecución del ejemplo reporta los valores esperados y pronosticados para cada paso del conjunto de pruebas, luego el MAE para todos los valores pronosticados.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

Podemos ver que el modelo funciona mejor que un modelo de persistencia, logrando un MAE de unos 5,9 nacimientos, en comparación con 6,7 nacimientos.

¿Puedes hacerlo mejor?

Puedes probar diferentes hiperparámetros de Bosque Aleatorio y números de pasos de tiempo como entrada para ver si puedes conseguir un mejor rendimiento. Comparte tus resultados en los siguientes comentarios.

Se crea una gráfica lineal que compara la serie de valores esperados y los valores predichos para los últimos 12 meses del conjunto de datos.

Esto da una interpretación geométrica de lo bien que el modelo funcionó en el conjunto de pruebas.

Gráfica de líneas de nacimientos esperados vs. Predichos usando bosque aleatorio

Gráfica de líneas de nacimientos esperados vs. Predichos usando bosque aleatorio

Una vez que se elige una configuración final del modelo de Bosque Aleatorio, se puede finalizar el modelo y utilizarlo para hacer una predicción sobre nuevos datos.

Esto se llama una predicción fuera de muestra, por ejemplo, predecir más allá del conjunto de datos de entrenamiento. Esto es idéntico a hacer una predicción durante la evaluación del modelo, ya que siempre queremos evaluar un modelo utilizando el mismo procedimiento que esperamos utilizar cuando el modelo se utiliza para hacer predicciones sobre nuevos datos.

El ejemplo que se muestra a continuación demuestra el ajuste de un modelo final de Bosque Aleatorio en todos los datos disponibles y la realización de una predicción de un paso más allá del final del conjunto de datos.

La ejecución del ejemplo se ajusta a un modelo de Random Forest en todos los datos disponibles.

Se prepara una nueva fila de entradas utilizando los últimos seis meses de datos conocidos y se predice el siguiente mes después del final del conjunto de datos.

Más lecturas

Esta sección proporciona más recursos sobre el tema si desea profundizar en él.

Tutoriales

APIs

Resumen

En este tutorial, descubriste cómo desarrollar un modelo de Bosque Aleatorio para el pronóstico de series temporales.

Específicamente, aprendiste:

  • Random Forest es un conjunto de algoritmos de árboles de decisión que pueden ser utilizados para la clasificación y el modelado predictivo de regresión.
  • Los conjuntos de datos de series temporales pueden transformarse en aprendizaje supervisado mediante una representación de ventana deslizante.
  • Cómo encajar, evaluar y hacer predicciones con un modelo de regresión de Random Forest para la previsión de series temporales.

¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.

¿Quieres desarrollar pronósticos de series de tiempo con Python?

Introducción a la predicción de series temporales con pitón

Desarrolle sus propios pronósticos en minutos

…con sólo unas pocas líneas de código pitón…

Descubre cómo en mi nuevo Ebook:
Introducción a la predicción de series temporales con pitón

Cubre Tutoriales de auto-estudio y proyectos integrales en temas como:
Carga de datos, visualización, modelado, ajuste de algoritmos, y mucho más…

Por fin traer el pronóstico de las series de tiempo a
Sus propios proyectos

Sáltese los académicos. Sólo los resultados.

Ver lo que hay dentro