4.12 - Proyecto final: predicción de la demanda energética con Redes LSTM

Lección 12 de la sección “Redes Recurrentes y LSTM” del curso Fundamentos de Deep Learning con Python.

Introducción

En la lección anterior vimos cómo realizar el análisis de sentimientos con Redes LSTM, y entendimos de forma práctica como implementar esta arquitectura haciendo uso de Python y la librería Keras.

En este proyecto final de la sección veremos cómo hacer uso de las Redes LSTM para realizar predicciones sobre series de tiempo, en particular sobre el comportamiento de la demanda de energía eléctrica en una región de Estados Unidos.

Contenido exclusivo suscriptores

Suscríbete y accede al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

¿Qué es una serie de tiempo?

Es una secuencia de datos numéricos organizados cronológicamente. Estos datos usualmente se obtienen a intervalos regulares (cada mes, cada día, cada hora, cada segundo, etc.).

En este proyecto veremos precisamente cómo hacer uso de las Redes LSTM para generar predicciones sobre series de tiempo.

El problema a resolver

Lo que queremos es crear un modelo capaz de aprender el patrón de comportamiento en una serie de tiempo (la demanda de Energía Eléctrica en una región de Estados Unidos) y que posteriormente logre predecir cómo se comportará esta demanda en un futuro cercano.

El set de datos

El dataset proviene de una empresa distribuidora de Energía Eléctrica en Estados Unidos (PJM Interconnection LLC), y contiene el comportamiento histórico de la demanda (en MegaWatts) entre los años 2004 y 2018 para la ciudad de Dayton (Ohio). Los registros se realizaron con una periodicidad de 1 hora.

Para leerlo haremos uso de la librería Pandas, mientras que haciendo uso de Matplotlib podremos explorar este set de datos.

Sets de entrenamiento y prueba

Como entrada al modelo usaremos bloques de 200 datos consecutivos (X_train)y el modelo deberá aprender a predecir el dato 201 de la secuencia (Y_train).

Para realizar la partición tomaremos el primer 90% de los registros, con lo cual conformaremos el set de entrenamiento, mientras que el 10% restante corresponderá al set de prueba.

Para preparar estos sets de datos haremos uso de Numpy en combinación con la librería Scikit-Learn.

Creación y entrenamiento del modelo

Implementaremos una Red LSTM con una capa de entrada de 200 neuronas (el mismo tamaño de cada secuencia a procesar), 128 unidades (el tamaño de la celda de memoria y del estado oculto) y una neurona de salida con activación lineal, que corresponderá al valor del consumo energético predicho por la red.

Para el entrenamiento usaremos un tamaño de lote de 256 y un total de 20 iteraciones, así como el algoritmo RMSprop visto anteriormente.

Predicción

Generaremos las predicciones de manera iterativa. Es decir, con los primeros 200 datos de entrada el modelo predecirá el dato 201. Posteriormente añadiremos esta predicción a los datos de entrada del 2 al 200, y generaremos la predicción 202, y así sucesivamente. Para ello usaremos el método predict.

En este caso podemos ver que las predicciones son muy buenas para aproximadamente las primeras 20 horas, después de lo cual los errores en la predicción son acumulativos, lo que reduce el desempeño del modelo.

Podríamos probar ajustando algunos hiperparámetros para lograr mejorar el desempeño de la predicción más allá de las 20 horas. Sin embargo es importante tener en cuenta que en una tarea de predicción sobre series de tiempo siempre tendremos esta limitante presente, pues al usar la predicción anterior (que contiene un error) y retroalimentarla al modelo lo que haremos será progresivamente acumular los errores en la predicción. Es por esto que, dependiendo de la aplicación, periódicamente debemos re-introducir datos reales al modelo, para reducir este error en predicciones posteriores.

Contenido exclusivo suscriptores

Recuerda suscribirte para acceder al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Conclusión

Muy bien, acabamos de implementar una Red LSTM capaz de generar predicciones bastante buenas durante las primeras 20 horas. Y con esto hemos puesto en práctica todo lo aprendido hasta el momento acerca de las Redes Recurrentes y en particular de las Redes LSTM.

Sin embargo, a pesar del potencial que hemos visto en estas aplicaciones prácticas, estas arquitecturas también tienen varias desventajas que limitan su aplicación al procesamiento de secuencias cada vez más complejas.

Por esta razón, en la próxima lección hablaremos en detalle de estas ventajas y limitaciones de estas Redes Neuronales Recurrentes.

Ver todas las lecciones de este curso