Series temporales univariadas con LSTM apilado, BiLSTM y NeuralProphet: hacia la IA

Estás leyendo la publicación: Series temporales univariadas con LSTM apilado, BiLSTM y NeuralProphet: hacia la IA

Publicado originalmente en Hacia la IA, la empresa líder mundial en noticias y medios de IA y tecnología. Si está creando un producto o servicio relacionado con la IA, lo invitamos a considerar convertirse en patrocinador de la IA. En Hacia la IA, ayudamos a escalar las empresas emergentes de IA y tecnología. Permítanos ayudarlo a dar rienda suelta a su tecnología a las masas.

Aprendizaje profundo

Desarrollo de modelos de aprendizaje profundo LSTM, BiLSTM y NeuralProphet para series temporales de varios pasos

Tabla de contenido

Introducción

¿Le gustaría probar algo diferente a la regresión para resolver su problema de series de tiempo? Luego, esta publicación explotará series de tiempo mediante técnicas de aprendizaje profundo para lograr una mejor optimización y predicción para abordar el pronóstico utilizando una variable dependiente univariada como una sola serie de tiempo que varía con el tiempo. Predecir el mercado de valores es un potencial atractivo para los científicos de datos motivados por el desafío más que por el deseo de obtener ganancias financieras. Examinamos los altibajos diarios del mercado e imaginamos que debe haber un patrón en el que nuestro modelo supere el rendimiento para vencer el comercio de acciones.

Por lo tanto, el propósito principal de este artículo es; para implementar algoritmos de aprendizaje profundo, dos modelos secuenciales de redes neuronales recurrentes (RNN), como LSTM apiladas, LSTM bidireccional y NeuralProphet construido con PyTorch para predecir los precios de las acciones utilizando la previsión de series temporales basada en el aprendizaje profundo.

Supongamos que el lector tiene un conocimiento básico de las series temporales y los modelos de aprendizaje profundo. Sin embargo, explicaré brevemente algunos conceptos del artículo para refrescar algunas ideas sobre los fundamentos.

¿Qué es la Serie Temporal?

Definición de serie temporal:Una serie de tiempo es una secuencia de puntos de datos que ocurren en orden sucesivo durante un período de tiempo. Esto se puede contrastar con datos transversalesque captura un punto en el tiempo.

En aras de la simplicidad, una serie temporal es un grupo de observaciones de objetos a lo largo del tiempo que se miden cada minuto durante un precio de cierre diario para finanzas personales o procedimientos por hora durante todo el año. Ahora dividamos la serie temporal en dos partes: análisis y pronóstico.

El análisis de series de tiempo implica comprender diferentes aspectos de las características intrínsecas de las series para que pueda obtener mejor información para hacer predicciones significativas. Por otro lado, ajustar un modelo a datos pasados ​​y usarlo para predecir observaciones futuras es de lo que se trata el pronóstico de series de tiempo.

Qué es LSTM

Memoria a corto plazo a largo plazo (LSTM), una forma de memoria artificial Red neuronal recurrente (RNN), se puede utilizar para predecir valores de inventario basados ​​en datos históricos. Fue desarrollado para eliminar el problema de la dependencia a largo plazo y ayuda a evitar gradiente desapareciendo. Los LSTM son adecuados para modelar datos de secuencias, ya que mantienen un estado interno para realizar un seguimiento de los datos que ya se han visto. Las series temporales y el procesamiento del lenguaje natural son dos usos comunes en los LSTM, ya que tienen conexiones de retroalimentación; lo que significa que puede procesar no solo puntos de datos individuales, sino también secuencias de datos completas.

El LSTM consta de muchos bloques de memoria, como se muestra en la imagen, es un bloque completo. Dos estados se transfieren al siguiente bloque; estado de celda (almacena y carga información) y estado oculto (transporta información de eventos inmediatamente anteriores y sobrescribe). Los LSTM aprenden mediante un proceso conocido como puertas. Estas puertas pueden aprender qué información en la secuencia debe retenerse o descartarse. Como resultado, el LSTM contiene tres puertas: entrada, olvido y salida. Más detalles sobre LSTM desde aquí.

🔥 Recomendado:  10 trabajos de investigación que no debe perderse: hacia la IA

F= Olvidar la puerta

i= puerta de entrada

o= puerta de salida

C= estado de la celda

h= estado oculto

¿Qué es LSTM bidireccional?

La memoria bidireccional a largo y corto plazo (BiLSTM) es la técnica que permite que cualquier red neuronal almacene información de secuencia en ambos sentidos, ya sea hacia atrás o hacia adelante. Nuestra entrada se ejecuta de dos maneras en bidireccional, distinguiendo una BiLS™ de un LSTM estándar. Podemos tener el flujo de entrada en ambas direcciones; para almacenar información pasada y futura en cualquier paso de tiempo. Sin embargo, los LSTM normales permiten el flujo de entrada en una dirección (hacia adelante o hacia atrás).

¿Qué es NeuralProphet?

NeuralProphet, un nuevo conjunto de herramientas de pronóstico de series temporales de código abierto creado con PyTorch, se basa en redes neuronales. Es una versión mejorada de Prophet (procedimiento de pronóstico automático), una biblioteca de pronóstico que le permite utilizar modelos de aprendizaje profundo más avanzados y sofisticados para el pronóstico de series de tiempo con la influencia de Bibliotecas AR-Net (red neuronal autorregresiva).

NeuralProphet documentación

#Usar (!pip) si no se instaló
pip install neuralprophet #Live version (más funciones) si va a utilizar Jupyter
pip instalar neuralprophet[live]

GitHub – ourownstory/neural_prophet: NeuralProphet: un paquete de pronóstico simple

Comencemos con los datos de stock

1. Preparación de datos

En este proyecto se obtienen datos desde 2010-01-04 hasta 2021-11-02 para Apple Inc (AAPL) y exportado directamente de Yahoo Finanzas. El historial de precios de las acciones será de los últimos 11 años () ya que usamos redes neuronales, y cuantos más datos, mejor entrenamiento del modelo. Como se indicó, los modelos y herramientas descritos anteriormente se aplicarán a la “Fecha” del conjunto de datos como una serie temporal univariada.

2. Preprocesamiento de datos

# Usar colaboración cuadernos (recomendado) o jupyterlab, etc
importar pandas como pd
importar numpy como np
importar seaborn como sns
importar matplotlib.pyplot como plt
de matplotlib.pylab importar rcParams
desde fechahora fechahora de importación
advertencias de importación
advertencias.filterwarnings(‘ignorar’)
%matplotlib inline # Leer el archivo exportado como CSV.
datos = pd.read_csv(“AAPL.csv”)
print(data.head()) # Comprobar duplicado, nan, etc.
datos.duplicados().sum().any()
datos.isna().sum()
# Función para explorar y validar
def explorar(df):
print(f”Forma del conjunto de datos: {df.shape}”)
resumen = pd.DataFrame(df.dtypes,columns=[‘dtypes’])
resumen = resumen.reset_index()
resumen[‘Name’] = resumen[‘index’]
resumen = resumen[[‘Name’,’dtypes’]]
resumen[‘Missing’] = df.isnull().sum().valores
resumen[‘Uniques’] = df.nunique().valores
devolver resumen # llamada de función
explorar (datos)

Como puede ver, después de aplicar el , la “Fecha” es un tipo de objeto y debe cambiarse al formato DateTime como se muestra a continuación:

# convertir fecha de objeto a fecha y hora
datos[‘Date’] = pd.to_datetime(datos[‘Date’]infer_datetime_format=True) # imprimir información para verificar la conversión
datos=datos.set_index([‘Date’]) # establece la fecha como índice o rest_index()
datos.head()
imprimir(datos.info())
# Producción:
Columnas de datos (total 7 columnas):
# Columna Recuento no nulo Dtype
— —— ————– —–
0 Fecha 2980 fecha y hora no nula64[ns]
1 Open 2980 no nulo float64
2 Alto 2980 no nulo float64
3 Low 2980 non-null float64
4 Cerrar 2980 no nulo float64
5 cerrar 2980 no nulo float64
6 Volumen 2980 no nulo int64
# Columna Recuento no nulo Dtype
— —— ————– —–

Fase de implementación del modelo

1. LSTM apilado

Después de preprocesar los datos de stock, la función “Cerrar ajuste” será el valor objetivo. Debido a esto, “Adj Close” tiene en cuenta cualquier factor (divisiones, dividendos y ofertas de derechos) que puedan afectar el precio de las acciones después del cierre del mercado.

🔥 Recomendado:  Las mejores empresas canadienses de tecnología publicitaria [2023 Watchlist]

Luego, normalice los datos usando la función MinMaxScaler de aprender antes del ajuste del modelo, impulsará y elevará el rendimiento en las redes neuronales.

  • Vamos a sumergirnos en el código:

Ahora es el momento de construir el LSTM apilado (capas múltiples) con un parada temprana para evitar el sobreajuste si la pérdida de validación no se ha reducido después de un número de paciencia (sin mejora después del entrenamiento).

Nota: establecer una semilla aleatoria (resultados reproducibles) de TensorFlow si desea el mismo resultado cada vez que ejecute su modelo sin obtener resultados diferentes en cada ejecución, o guarde el modelo o sus pesos para el mejor entrenamiento para usarlo más adelante (más detalles sobre cómo almacenar y cargar modelos desde aquí).

# La siguiente figura de la característica real “Adj Close” de las acciones de Apple del conjunto de datos (el eje y es el precio de las acciones y el eje x es la fecha). data.set_index(‘Fecha’)[‘Adj Close’].plot(figsize=FIGURE_SIZE)

  • Visualización del resultado de LSTM apilado

2. LSTM bidireccional

Construyendo el Modelo LSTM bidireccional con la misma característica seleccionada (precio de cierre ajustado) del conjunto de datos Stacked LSTM.

Como se ve a continuación, se creó una capa de BiLSTM utilizando ReLU (Unidad lineal rectificada) función de activación. Sin embargo, si se aplica el optimizador RMSProp (Root Mean Square Propagation), producirá resultados casi similares a los del optimizador Adam (utilizado en la construcción de BiLSTM), y puede experimentar con todos ellos.

  • Visualización del resultado de BiLSTM

3. NeuralProphet

Finalmente, comencemos con NeuralProphet para modelar series temporales basadas en redes neuronales.

  • Instale e importe bibliotecas como se muestra en este ejemplo:

El objeto de ajuste del modelo NeuralProphet asume que los datos de la serie temporal tienen una columna de fecha denominada ds (fecha) y un valor de serie temporal que espera como y (predicho nombre de la columna- Adj Close). Siga el siguiente código:

Inicialice el modelo NeuralProphet con los hiperparámetros predeterminados. Y D frecuencia se utiliza como datos basados ​​en el precio de cierre ajustado diario.

Entrene el modelo con 1000 épocas (puede elegir sus épocas), lo que llevará unos minutos de espera, y NeuralProphet se entrena rápidamente para hacer predicciones.

Trazar el pronóstico con más componentes, pero lo que se mostrará como resultado es modelo. trama (pronóstico).

  • Visualizando el resultado de gNeuralProphet

En este código, NeuralProphet divide el conjunto de datos manualmente en entrenamiento y prueba para usar el 30 % de los datos del entrenamiento como datos de validación.

  • visualizando el resultado de NeuralProphet

Modelos Tlluvia y pérdida de validación

El curva de aprendizaje es solo un gráfico que muestra el progreso de la experiencia de un indicador particular de aprendizaje durante el entrenamiento. Para evaluar el rendimiento del modelo en la predicción, mire el número de épocas en cada modelo con su pérdida.

Nota: OVerfitting y underfitting son comunes, pero las cantidades excesivas deben controlarse con estrategias como la deserción para garantizar generalización. Por lo tanto, el objetivo es minimizar la pérdida de validación tanto como sea posible hasta que alcance un buen ajuste con la pérdida del tren. Todos los modelos implementados en esta publicación utilizaron un parada anticipada para evitar el sobreajuste.

  • Tren LSTM apilado y pérdida de validación:

RMSE (Error cuadrático medio) métricas de rendimiento:
Datos del tren: 20.75, Datos de prueba: 80.098

🔥 Recomendado:  Cómo retirar de Binance a una cuenta bancaria

Los puntos de fluctuación al final del pérdida de validación puede ser un punto donde el aprendizaje puede detenerse. Porque la experiencia después de este punto puede mostrar las complejidades del sobreajuste.

  • Pérdida de validación y tren BiLSTM:

RMSE métricas de rendimiento: Datos del tren: 20.288, Datos de prueba: 87.739

El gráfico muestra cómo pérdida de validación creció, luego cayó repentinamente de niveles grandes a pequeños por debajo de 0.05 a lo largo de tres épocas. La función de activación de ReLU se usa para manejar el problema de gradiente de desaparición/explosión y podría deberse a la alta pulsación en el entrenamiento BiLSTM.

  • Tren de NeuralProphet y pérdida de validación:

RMSE métricas de rendimiento: Datos del tren: 1.16, Datos de prueba: 31.8

El tren y la pérdida de validación están mejorando, pero hay una brecha entre ellos, lo que implica que se comportan de manera diferente a los conjuntos de datos de varias distribuciones.

Conclusión

Como podemos ver, nuestros modelos funcionaron admirablemente. Puede seguir con precisión la mayoría de los saltos/caídas inesperados desde 2010 hasta 2021; sin embargo, puede mejorar el rendimiento jugando con los hiperparámetros y ajustando aún más. Varias otras acciones pueden ayudar a ajustar los hiperparámetros, como cambiar la cantidad de capas ocultas, la cantidad de neuronas, la tasa de aprendizaje, la función de activación y la configuración del optimizador. Pero, estos quedaron para otra discusión.

Espero que haya ganado algo al llegar tan lejos en la comprensión de la previsión de series temporales mediante el aprendizaje profundo con la implementación de modelos Stacked LSTM y BiLSTM en Tensorflow, así como al explorar la biblioteca de modelado NeuralProphet. Por lo tanto, los modelos presentados aquí se pueden usar para una variedad de escenarios de predicción de series de tiempo adicionales donde puede especificar datos multivariados como un tensor 3D.

Si tiene algún comentario o pregunta, por favor publíquelo a continuación. Se puede acceder a todo el cuaderno de Jupyter para este proyecto con EDA (Análisis exploratorio de datos), visualización, transformación a la forma original después del entrenamiento, métricas de rendimiento, previsión futura y más, en mi repositorio de GitHub.

GitHub – A-safarji/Time-series-deep-learning: desarrollo de modelos de aprendizaje profundo LSTM, BiLSTM y NeuralProphet para la previsión de series temporales de varios pasos del precio de las acciones.

?

Referencia

Cai C, Tao Y, Zhu T, Deng Z. Pronóstico de carga a corto plazo basado en la red neuronal LSTM bidireccional de aprendizaje profundo. . https://doi.org/10.3390/app11178129


Serie temporal univariante con LSTM apilado, BiLSTM y NeuralProphet se publicó originalmente en Towards AI en Medium, donde las personas continúan la conversación destacando y respondiendo a esta historia.

Publicado a través de Hacia la IA