Forecasting con Prophet.

Caso práctico prediciendo del consumo eléctrico en España.

Ángel RC
7 min readApr 24, 2020

Uno de nuestros mayores intereses es leer el futuro, saber qué va a suceder antes de que ocurra. Si somos capaces de predecir el futuro, podemos actuar en consecuencia y prepararnos para afrontarlo de la mejor manera posible.

En este post estudiaremos la demanda eléctrica por hora (medida en MW) en España desde diciembre de 2018 hasta mayo de 2019. Analizaremos los datos para tener un mejor conocimiento del comportamiento de la demanda española y haremos una predicción del consumo eléctrico futuro.

¿Qué vamos a hacer?

  1. Exploración de los datos.
  2. Medias móviles.
  3. Modelos disponibles.
  4. Prophet.
  5. Validación del modelo.
  6. Conclusión.

Exploración de los datos

PD: Para la visualización de series temporales es muy recomendable el uso de gráficas interactivas. Para más detalles, no dudes en mirar este magnífico post [1].

Dado que esto es un ejemplo, lo que haremos será separar nuestros datos en entrenamiento y test. A partir del 15 de mayo de 2019 será nuestro test dataset, el cual quedará al margen del análisis y solo se utilizará al final para validar las predicciones hechas a partir del train dataset.

Por tanto nuestros datos quedarán de la siguiente manera:

A simple vista vemos que hay momentos claros en los que el consumo eléctrico presenta una caída considerable, pero ya nos centraremos en eso más adelante. Para más detalles podemos hacer zoom sobre nuestros datos:

Zoom sobre la serie temporal

En la gráfica anterior hemos marcado con líneas negras el comienzo de cada lunes. Cada “montaña” corresponde al consumo en un día. Parece que la demanda electrica tiene una componente estacional semanal y otra diaria (esto se puede comprobar viendo las autocorrelaciones).

En la siguiente gráfica observamos que durante los días laborales hay una mayor demanda de eléctricidad, mientras que esta cae durante el fin de semana. Además, vemos que los propios días también presentan un patrón en su comportamiento. El consumo es mínimo durante las horas de madrugada hasta que empieza a subir a las 6:00 a medida que la gente se despierta, y se ve una mayor demanda entorno a las 10:00 y las 20:00.

Medias móviles

En el estudio de las series temporales, el uso de las medias móviles es uno de los principales recursos para filtrar el ruido y crear una curva suave a partir de una curva que de otra manera sería ruidosa. Esto nos ayuda a identificar un comportamiento más a largo plazo.

Las medias móviles visualizan el valor medio durante un período de tiempo especificado. Sin embargo, existen varios tipos de medias móviles en función de la importancia que se le asigna a cada valor.

Las más utilizadas son:

  • Media movil simple (SMA): Considera que todos los valores tienen la misma importancia y calcula la media aritmética para los n momentos previos.
  • Media Móvil Exponencial (EMA): Este método asigna una ponderación diferente a cada valor. Este cálculo favorece a los valores más recientes al otorgarles un peso mayor y reduciendo según se retrocede en el tiempo. Las principales diferencias respecto a la SMA son que los datos antiguos nunca salen de la media y que se puede calcular desde el principio, sin necesidad de tener n momentos previos.

Para más detalles sobre las medias móviles, por favor mira [2].

A continuación mostraremos las medias móviles simple y exponencial con una ventana temporal de 3 días.

En este caso parece que hemos tomado una ventana de tiempo demasiado pequeña y se conserva bastante ruido.

Esta vez usaremos una ventana temporal de 7 días. Ampliando esta ventana conseguiremos que las medias móviles nos muestren cómo evoluciona la demanda media.

Ahora sí que vemos un comportamiento a largo plazo mucho más informativo. Se pueden ver caídas llamativas del consumo eléctrico medio tanto a finales de diciembre como a mediados de abril y principios de mayo.

Haciendo zoom de los datos sobre esos periodos vemos que las caídas coinciden con festivos muy señalados en España:

  • A finales de diciembre: Navidad y año nuevo.
  • A mediados de abril: Semana santa, siendo jueves santo y viernes santo los días 18 y 19 de abril.
  • Principios de mayo: El día primero de mayo, que en 2019 cayó en miércoles.

Modelos disponibles

Llegados a este punto, ya tenemos un amplio conocimiento de nuestra serie temporal, ahora es el momento de predecir. A la hora de predecir, tradicionalmente se han usado técnicas de autoregresión, tales como ARMA, ARIMA, SARIMA, TBATS, etc.

Posteriormente, con el auge del machine learning, se desarrolló una nueva metodología. Se puede convertir en un problema de aprendizaje supervisado mediante un poco de features engineering y entonces aplicar modelos de regresión como la regresión lineal o random forest. [3]

En este caso nos decantaremos por Prophet, una herramienta desarrollada por Facebook con el objetivo de hacer lo más fácil posible el análisis de series temporales. Permite encontrar automáticamente la estacionalidad, tendencia y ofrece parámetros fáciles de entender sin necesidad de tener un amplio conocimiento y experiencia con series temporales. Si te interesa como funciona y las matemáticas que hay detrás podrás verlo aquí.

Prophet

Prophet presenta un modelo aditivo con las siguientes componentes:

y(t) = g(t) + s(t) + h(t) + ϵₜ

Siendo:

  • g(t): Que modeliza la tendencia del modelo, la cual describe el comportamiento a largo plazo.
  • s(t): Que modeliza la estacionalidad del modelo mediante series de Fourier.
  • h(t): Que modeliza el efecto de las vacaciones o eventos que tienen impacto en nuestra serie (Black Friday, Navidad, etc)
  • ϵₜ: Que representa el término del error irreducible.

Ajustaremos el modelo con los datos de entrenamiento y veremos las componentes que el modelo es capaz de encontrar:

Componentes del modelo Prophet

Como se puede ver, en la tendencia se asemeja bastante a las medias móviles que obtuvimos anteriormente. En cuanto a las vacaciones vemos que el efecto de todos los festivos vistos supone un notable descenso del consumo eléctrico.

Recordemos que ya vimos al comienzo como se distribuia el consumo eléctrico a lo largo de las horas del día y a lo largo de los días de la semana. En cuanto a la estacionalidad diaria, concuerda con nuestro conocimiento previo, pero la gráfica de la estacionalidad semanal puede llevar a malentendidos. En el eje X se refiere a la hora 00:00 de cada día, no al día en sí mismo.

Validación del modelo

Ahora es el momento de ver como de bien funciona nuestro modelo. Para ello haremos un cross validation tal y como se describe en la documentación de Prophet [4].

Observaremos el porcentaje medio de error absoluto (MAPE) sobre el horizonte de predicción para determinar como de fiable esperamos que sea nuestra predicción. Usamos esta medida en lugar del error cuadrático medio (MSE) por su fácil interpretación.

Se aprecia como la precisión de las predicciones decrece a medida que se expande el horizonte de predicción. Vemos como el error para los primeros días es de un 6% y va aumentando hasta prácticamente llegar al 10%.

Ahora es el momento de predecir el consumo para nuestro test dataset y ver si el error se comporta tal y como esperamos.

Vemos como la predicción se ajusta bastante bien a nuestros datos, con un MAPE del 5%. Llegados a este punto, damos por concluido el análisis.

Podrás ver el código completo en mi GitHub.

Conclusión

A lo largo de este estudio hemos estudiado nuestra serie temporal y hemos utilizado Prophet para estimar la demanda futura, ya que hace que todo el proceso de predicción sea fácil e intuitivo y también da muchas opciones. Esto solo ha sido una pincelada del funcionamiento de Prophet, ya que para ver su verdadero potencial haría falta un conjunto de datos mayor ( con nuestro conjunto de datos ni siquiera se podía extraer una estacionalidad anual o utilizar la información de los festivos).

La versatilidad de Prophet permite pronosticar un gran número y una variedad de problemas de series temporales, por lo que se ha convertido en una herramienta muy a tener en cuenta.

--

--