Cómo sembrar el estado de los LSTM para el pronóstico de series de tiempo en Python

Cómo sembrar el estado de los LSTM para el pronóstico de series de tiempo en Python

Las redes de memoria a corto y largo plazo, o LSTM, son un tipo poderoso de red neuronal recurrente capaz de aprender largas secuencias de observaciones.

Una promesa de los LSTM es que pueden ser efectivos en la predicción de series de tiempo, aunque se sabe que el método es difícil de configurar y utilizar para estos fines.

Una característica clave de los LSTM es que mantienen un estado interno que puede ayudar en el pronóstico. Esto plantea la cuestión de cuál es la mejor forma de sembrar el estado de un modelo LSTM adecuado antes de realizar un pronóstico.

En este tutorial, descubrirá cómo diseñar, ejecutar e interpretar los resultados de un experimento para explorar si es mejor sembrar el estado de un LSTM adecuado a partir del conjunto de datos de entrenamiento o no usar un estado anterior.

Después de completar este tutorial, sabrá:

  • Acerca de la pregunta abierta sobre cómo inicializar mejor el estado de un LSTM apto para la previsión.
  • Cómo desarrollar un conjunto de pruebas robusto para evaluar modelos LSTM en problemas de predicción de series de tiempo univariadas.
  • Cómo determinar si sembrar o no el estado de su LSTM antes de la previsión es una buena idea en su problema de previsión de series de tiempo.

Pon en marcha tu proyecto con mi nuevo libro Deep Learning for Time Series Forecasting, que incluye tutoriales paso a paso y el Código fuente de Python archivos para todos los ejemplos.

Empecemos.

  • Actualizado Abr / 2019: Se actualizó el enlace al conjunto de datos.
Cómo sembrar el estado de los LSTM para el pronóstico de series de tiempo en Python

Cómo sembrar el estado de los LSTM para el pronóstico de series de tiempo en Python
Foto de Tony Hisgett, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en 5 partes; son:

  1. Sembrando el estado de LSTM
  2. Conjunto de datos de ventas de champú
  3. Modelo LSTM y arnés de prueba
  4. Listado de código
  5. Resultados experimentales

Ambiente

Este tutorial asume que tiene un entorno Python SciPy instalado. Puede usar Python 2 o 3 con este ejemplo.

Debe tener instalado Keras (versión 2.0 o superior) con el backend de TensorFlow o Theano.

El tutorial también asume que tiene instalados scikit-learn, Pandas, NumPy y Matplotlib.

Si necesita ayuda para configurar su entorno Python, consulte esta publicación:

Sembrando el estado de LSTM

Al usar LSTM sin estado en Keras, tiene un control detallado sobre cuándo se borra el estado interno del modelo.

Esto se logra utilizando el model.reset_states () función.

Al entrenar un LSTM con estado, es importante borrar el estado del modelo entre épocas de entrenamiento. Esto es para que el estado acumulado durante el entrenamiento a lo largo de la época sea proporcional a la secuencia de observaciones en la época.

Dado que tenemos este control detallado, existe la duda de si inicializar o no el estado del LSTM antes de hacer un pronóstico y cómo hacerlo.

Las opciones son:

  • Restablezca el estado antes de la previsión.
  • Inicialice el estado con los conjuntos de datos de entrenamiento antes de la previsión.

Se supone que inicializar el estado del modelo utilizando los datos de entrenamiento sería superior, pero esto debe confirmarse con experimentación.

Además, puede haber varias formas de inicializar este estado; por ejemplo:

  • Completa una época de entrenamiento, incluidas las actualizaciones de peso. Por ejemplo, no reinicie al final de la última época de entrenamiento.
  • Complete una previsión de los datos de entrenamiento.

Generalmente, se cree que ambos enfoques serían algo equivalentes. Se prefiere el último de pronosticar el conjunto de datos de entrenamiento porque no requiere ninguna modificación en los pesos de la red y podría ser un procedimiento repetible para una red inmutable guardada en un archivo.

En este tutorial, consideraremos la diferencia entre:

  • Pronóstico de un conjunto de datos de prueba utilizando un LSTM de ajuste sin estado (por ejemplo, después de un reinicio).
  • Pronóstico de un conjunto de datos de prueba con un LSTM ajustado con estado después de haber pronosticado el conjunto de datos de entrenamiento.

A continuación, echemos un vistazo a un conjunto de datos de series de tiempo estándar que usaremos en este experimento.

Conjunto de datos de ventas de champú

Este conjunto de datos describe el número mensual de ventas de champú durante un período de 3 años.

Las unidades son un recuento de ventas y hay 36 observaciones. El conjunto de datos original se atribuye a Makridakis, Wheelwright y Hyndman (1998).

El siguiente ejemplo carga y crea un gráfico del conjunto de datos cargado.

Al ejecutar el ejemplo, se carga el conjunto de datos como una serie Pandas e imprime las primeras 5 filas.

A continuación, se crea un gráfico de líneas de la serie que muestra una clara tendencia creciente.

Gráfico de línea del conjunto de datos de ventas de champú

Gráfico de línea del conjunto de datos de ventas de champú

A continuación, veremos la configuración de LSTM y el arnés de prueba utilizado en el experimento.

¿Necesita ayuda con Deep Learning para series temporales?

Realice ahora mi curso intensivo gratuito de 7 días por correo electrónico (con código de muestra).

Haga clic para registrarse y obtener también una versión gratuita en formato PDF del curso.

Descarga tu minicurso GRATIS

Modelo LSTM y arnés de prueba

División de datos

Dividiremos el conjunto de datos de Shampoo Sales en dos partes: una formación y un conjunto de prueba.

Los primeros dos años de datos se tomarán para el conjunto de datos de entrenamiento y el año restante de datos se utilizará para el conjunto de prueba.

Los modelos se desarrollarán utilizando el conjunto de datos de entrenamiento y harán predicciones sobre el conjunto de datos de prueba.

Evaluación del modelo

Se utilizará un escenario de pronóstico continuo, también llamado validación del modelo de avance.

Cada paso de tiempo del conjunto de datos de prueba se recorrerá uno a la vez. Se utilizará un modelo para hacer un pronóstico para el paso de tiempo, luego se tomará el valor esperado real del conjunto de prueba y se pondrá a disposición del modelo para el pronóstico en el próximo paso de tiempo.

Esto imita un escenario del mundo real en el que las nuevas observaciones de ventas de champú estarían disponibles cada mes y se utilizarían en el pronóstico del mes siguiente.

Esto será simulado por la estructura del tren y los conjuntos de datos de prueba. Haremos todos los pronósticos en un solo método.

Se recopilarán todos los pronósticos del conjunto de datos de prueba y se calculará una puntuación de error para resumir la habilidad del modelo. Se utilizará el error cuadrático medio (RMSE), ya que castiga los errores grandes y da como resultado una puntuación en las mismas unidades que los datos de pronóstico, es decir, las ventas mensuales de champú.

Preparación de datos

Antes de que podamos ajustar un modelo LSTM al conjunto de datos, debemos transformar los datos.

Las siguientes tres transformaciones de datos se realizan en el conjunto de datos antes de ajustar un modelo y hacer un pronóstico.

  1. Transforme los datos de la serie temporal para que sean estacionarios. Específicamente un retraso = 1 diferenciar para eliminar la tendencia creciente en los datos.
  2. Transformar la serie temporal en un problema de aprendizaje supervisado. Específicamente, la organización de datos en patrones de entrada y salida donde la observación en el paso de tiempo anterior se usa como entrada para pronosticar la observación en el paso de tiempo actual.
  3. Transforma las observaciones para tener una escala específica. Específicamente, para cambiar la escala de los datos a valores entre -1 y 1 para cumplir con la función de activación de tangente hiperbólica predeterminada del modelo LSTM.

Modelo LSTM

Se utilizará una configuración de modelo LSTM que sea hábil pero desajustada.

Esto significa que el modelo se ajustará a los datos y podrá realizar pronósticos significativos, pero no será el modelo óptimo para el conjunto de datos.

La topología de la red consta de 1 entrada, una capa oculta con 4 unidades y una capa de salida con 1 valor de salida.

El modelo se ajustará para 3.000 épocas con un tamaño de lote de 4. El conjunto de datos de entrenamiento se reducirá a 20 observaciones después de la preparación de los datos. Esto es para que el tamaño del lote se divida uniformemente en el conjunto de datos de entrenamiento y el conjunto de datos de prueba (un requisito).

Carrera experimental

Cada escenario se ejecutará 30 veces.

Esto significa que se crearán y evaluarán 30 modelos para cada escenario. El RMSE de cada ejecución se recopilará proporcionando una población de resultados que se pueden resumir utilizando estadísticas descriptivas como la media y la desviación estándar.

Esto es necesario porque las redes neuronales como LSTM están influenciadas por sus condiciones iniciales (por ejemplo, sus pesos aleatorios iniciales).

Los resultados medios para cada escenario nos permitirán interpretar el comportamiento promedio de cada escenario y cómo se comparan.

Analicemos los resultados.

Listado de código

Los comportamientos modulares clave se separaron en funciones para facilitar la lectura y la capacidad de prueba, en caso de que desee reutilizar esta configuración experimental.

Los detalles de los escenarios se describen en el experimentar() función.

La lista completa de códigos se proporciona a continuación.

También te puede interesar