Práctica de redes neuronales. Redes recurrentes y LSTM
1 Introducción
Las redes neuronales recurrentes y LSTM aprenden las correlaciones entre los datos de una serie temporal, y son capaces de hacer predicciones.
Las series de datos temporales suelen presentar una alta correlación en sus datos, además de otros posibles fenómenos como una tendencia a lo largo del tiempo, y sobre esa tendencia una estacionalidad (variación periódica).
En esta práctica vas a implementar una red neuronal recurrente y una red LSTM para predecir la variación del link:https://es.wikipedia.org/wiki/Eur%C3%ADbor[Euribor].
2 Duración de la práctica
A esta práctica le vamos a dedicar dos sesiones.
3 Objetivos de aprendizaje
- Examinar los datos de una serie temporal para detectar su tendencia y estacionalidad y autocorrelación.
- Crear una red neuronal recurrente para predecir la evolución del Euribor.
- Crear una red neuronal LSTM para predecir la evolución del Euribor.
- Valorar el rendimiento de ambas implementaciones.
4 Metodología
Vas a seguir una adaptación de los pasos que has visto en la presentación de teoría Proyectos de Aprendizaje Automático.
- Definir el problema y tener una imagen del conjunto.
- Obtener los datos.
- Explorar los datos para conocerlos mejor.
- Preparar los datos para que muestren los patrones.
- Crear un primera versión del modelo.
- Ajustar el modelo para obtener una solución.
- Presentar la solución.
- Crítica del trabajo y posibles mejoras.
5 Objetivo
Como primera tarea, vas a analizar la autocorrelación de los datos, si presentan algún tipo de tendencia y/o estacionalidad. Una vez que conozcas los datos vas a pasar a implementar un par de modelos que te permitan predecir el valor del Euribor.
Vas a implementar un modelo de red recurrente y otro de red LSTM para predecir la evolución del Euribor en los tres últimos años de la serie temporal (36 meses). Para ello vas
6 Tareas a realizar
Vas a seguir una adaptación del esquema que se presentó en el tema de Proyectos de Aprendizaje Automático.
6.1 Definir el problema y tener una imagen del conjunto
Describe, con tus propias palabras, cuál es la problema que se pretende resolver y cuál es su alcance.
6.2 Obtener los datos
Los datos los puedes descargar desde el github de la asignatura.
Es un fichero csv donde los valores de cada fila están separados por «;». Además, el separador de decimales es «,». Para leer los datos y convertirlos en un Dataframe puedes utilizar:
= pd.read_csv(ruta, decimal=",", sep=";") df
Cada dato tiene tres atributos: Año, Periodo y Euribor. El periodo se refiere al mes del año correspondiente.
6.3 Explorar los datos para conocerlos mejor
Primero, identifica si existe alguna tendencia en los datos. Para ello calcula un media deslizante sobre los datos:
"Promedio"] = df["Euribor"].rolling(12, center=True).mean() df[
Estudia la autocorrelación de los datos:
from statsmodels.graphics.tsaplots import plot_acf
="Autocorrelación de Euribor"); plot_acf(df, title
El valor de autocorrelación dependiendo del desplazamiento lo puedes calcular con:
# i es el «desplazamiento» df.autocorr(i)
6.4 Preparar lo datos para que muestren los patrones
Para preparar los datos la siguiente función te puede ser de utilidad:
def get_data(df, steps):
= []
dataX = []
dataY for i in range(len(df)-steps-1):
= df[i:(i+steps), 0]
a
dataX.append(a)+steps, 0])
dataY.append(df[ireturn np.array(dataX), np.array(dataY)
df es el Dataframe que contiene los datos del Euribor y steps es el tamaño de cada una de las secuencias que quieres generar.
6.5 Crear una primera versión del modelo
Crea primero una RNN con una única capa. Elige el número de neuronas dentro de la capa. Estudia la historia del entrenamiento para ver si hay sobreentrenamiento.
Amplia el modelo para añadir más capas recurrentes. No olvides activar el parámetro return_sequences=True en todas las capas recurrentes intermedias excepto en la última capa recurrente.
Crea una red LSTM con una única capa y procede como en el caso de la red recurrente.
De nuevo, amplia el modelo para añadir más capas LSTM. No olvides activar el parámetro return_sequences=True en todas las capas LSTM intermedias excepto en la última capa.
6.6 Ajustar el modelo para obtener una solución
En ambas redes, estudia como varía en error cuadrático medio entre los valores reales y las predicciones dependiendo de parámetros tales como el número de neuronas en cada capa, y el número de capas.
¿Se te ocurre algún otro tipo de capa que puedes incluir para intentar mejorar el modelo?
6.7 Presentar la solución
Presenta las principales conclusiones y respáldalas con los análisis que has realizado.
6.8 Critica del trabajo y posibles mejoras
A la luz de todos los resultados que has obtenido, ¿cómo podrías seguir mejorando tu modelo?
7 Entrega
El trabajo que debes entregar para su corrección es el libro de notas (fichero con extensión ipynb).
Súbelo a aulavirtual. No es necesario que los suban todos los miembros del equipo, basta con que lo suba uno de vosotros.