Modelo Prophet de Facebook
Pronóstico aplicado al tipo de cambio USD/HNL
Prophet
Presentaremos la implementación de Facebook Prophet, así como sus principales hiperparámetros ajustados para generar el modelo predictivo, dicho modelo lo implementaremos para predecir el tipo de cambio de Honduras versus el dólar EE.UU (USD/HNL), considerando que esto será unicamente para conocer el funcionamiento del modelo, no para justificar que es el mejor modelo para realizar dicha tarea.
Desripción General del Modelo
Facebook Prophet es un modelo y una biblioteca que proporciona
características tanto de modelos lineales generalizados (MLG) como se
modelos aditivos (MA), principalmente extendiendo el MLG mediante el uso
de funciones de suavizado no lineal. Fue especificado por Taylor
y Letham en 2017.
Prophet es un software de código abierto lanzado por el equipo Core
Data Science de Facebook. Está disponible para su descarga en CRAN y
PyPl. En esta ocasión usaremos el lenguaje R para implementar el
modelo.
Prophet funciona mejor con series temporales que tienen fuertes
efectos estacionales y varias temporadas de datos históricos. Prophet es
resistente a los datos faltantes y los cambios en la tendencia, y por lo
general maneja bien los valores atípicos. Prophet esta diseñado
especificamente para la predicción de series temporales de
negocios
Su modeo aditivo que consta de cuatro componentes:
\[y(t) = g(t) + s(t) + h(t) + \epsilon_{t}\] donde,
- \(g(t)\): Representa la tendencia y el objetivo es capturar la tendencia de la serie. Por ejemplo, es probable que la cantidad de vistas de anuncios de Facebook aumente con el tiempo a medida que más personas se unan a la red. Pero, ¿cuál sería la función exacta del aumento?
- \(s(t)\): Es el componente de Estacionalidad. El número de anuncios también puede depender de la temporada. Por ejemplo, en el hemisferio norte durante los meses de verano, es probable que las personas pasen más tiempo al aire libre y menos tiempo frente a sus computadoras. Tales fluctuaciones estacionales pueden ser muy diferentes para diferentes series temporales de negocios. El segundo componente es, por lo tanto, una función que modela las tendencias estacionales.
- \(h(t)\): representa los efectos de
las vacaciones. Usamos la información para días festivos que tienen
claro impacto en la mayoría de las series temporales comerciales. Tenga
en cuenta que las vacaciones varían entre años, países, etc. y, por lo
tanto la información debe proporcionarse explícitamente al modelo.
- \(\epsilon_{t}\): es el término de error.Representa fluctuaciones aleatorias que el modelo no puede explicar. Como de costumbre, se supone que \(\epsilon_{t}\) sigue una distribución normal \(N(0,\sigma^2)\) con media cero y varianza desconocida \(\sigma\) que debe derivarse de los datos.
Hiperparámetros
Hay varios parámetros personalizables en la implementación de Facebook Prophet revisar, siendo los principales:
- Puntos de cambio: que definen los cambios de tendencia. Estos pueden ser encontrados por el propio algoritmo o también pueden ser definidos y ajustados por el analista.
- Estacionalidad: que definen las funciones periódicas que pueden afectar a la serie temporal. De forma predeterminada, Prophet considera la estacionalidad anual, semanal y diaria e intenta encontrar tendencias que representen esos efectos periódicos en los datos.
- Días festivos: los días especiales (días festivos o cualquier otro evento recurrente) también pueden ser modelados por el modelo aditiv
En R, se usa la API de ajuste de modelo normal. Proporcionamos una función prophet que realiza el ajuste y devuelve un objeto modelo. Posteriormente usted puede llamar a la función predict y plot en este objeto modelo.
Datos y preparación
Los datos que utilizaremos los encontramos en Yahoo! Finance. Así como Python tiene una paquete para importar datos directamente de Yahoo Finance, R también cuenta con sus paquetes particulares que nos permitiran realizar una tarea similar. Necesitamos los siguientes dos paquetes:
library(TTR)
library(quantmod)Si aún no los tienes instalados sugiero los instales usando install.packages(‘TTR’) . Ahora podemos obtener los datos de yahoo usando getSymbols. Tenga en cuenta que auto.assign=False significa que queremos que getSymbols devuelva los datos.
df <- getSymbols('HNL=X',src='yahoo',
from= "2010-01-01",
to="2022-12-20",
auto.assign=FALSE)from = “2010-01-01” y to = “2022-12-20” me ayudan a indicar desde que fecha quiero empezar a tomar mis datos y hasta que fecha quiero tener esos datos.
Ahora, conozcamos nuestros datos
head(df) ## HNL=X.Open HNL=X.High HNL=X.Low HNL=X.Close HNL=X.Volume
## 2010-01-04 18.690 18.691 18.517 18.518 0
## 2010-01-05 18.550 18.550 18.550 18.550 0
## 2010-01-06 18.572 18.645 18.544 18.545 0
## 2010-01-07 18.451 18.550 18.451 18.539 0
## 2010-01-08 18.556 18.556 18.556 18.556 0
## 2010-01-11 18.550 18.550 18.550 18.550 0
## HNL=X.Adjusted
## 2010-01-04 18.518
## 2010-01-05 18.550
## 2010-01-06 18.545
## 2010-01-07 18.539
## 2010-01-08 18.556
## 2010-01-11 18.550
De estos datos únicamente usaremos el valor de cierre (HNL=X.Close) de manera diaria del Lempira Hondureño contra el dólar, para enfocarnos solo esos datos, primero convertimeremos nuestro conjunto de datos df en un dataframe, dado que inicialmente es un objeto de tipo ‘xts’, para realizar dicha tarea, consideremos la siguiente función:
xts_to_datframe<-function(data_xts){
df_t<-data.frame(fecha=(index(data_xts)),
value=coredata(data_xts))
colnames(df_t)<-c("ds", "y")
df_t
}Tiene que tener cuidado con el nombramiento de sus columnas, dado que prophet reconoce únicamente marcos de datos con columnas ds y y, que contiene la fecha y el valor numérico respectivamente. Dicho esto pasemos a transformar los datos de df que están como objeto ‘xts’ a objeto ‘dataframe’ por medio de la función que creamos anteriormente,
HNL <- xts_to_datframe(df$`HNL=X.Close`)
class(HNL)## [1] "data.frame"
Como podemos observar, ahora si ya tenemos nuestro DataFrame, y estamos listos para comenzar a crear nuestro modelo.
Implementación del Modelo
Primero visualicemos nuestros datos
library(tidyverse)
HNL %>% ggplot(aes(x = ds, y = y))+
geom_line()+
theme_minimal()+
labs(title = 'Datos Historicos del Tipo de Cambio del USD/HNL',
subtitle = '2010 - 2022',
x = 'Año',
y = 'HNL',
caption = 'Elaboración propia con datos de yahoo finance')library(prophet)
m <- prophet(HNL,daily.seasonality = TRUE)
future <- make_future_dataframe(m,periods = 3,freq = 'day')
tail(future)## ds
## 3380 2022-12-16
## 3381 2022-12-19
## 3382 2022-12-20
## 3383 2022-12-21
## 3384 2022-12-22
## 3385 2022-12-23
forecast <- predict(m, future)
dyplot.prophet(m, forecast)De la figura previa,
- Los puntos negros representan medidas reales
- La linea azul el pronóstico de Prophet
- La banda azul representa el intervalo de incertidumbre
Desglose de un Pronóstico
Si bien el pronóstico arroja muchas cosas, podemos centrarnos en algunas como:
- ds fecha que se pronostica
- yhat predicción para el valor ‘y’ (tipo de cambio) ese día
- yhat_lower valor esperado más bajo para el rango del valor y previsto de ese día
- yhat_upper valor esperado más alto para el rango de valor y previsto de ese día
Entonces, con tail() podemos ver la salida de los últimos días de pronosticados los cuales son, 21, 22 y 23 de diciembre 2022.
tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')])## ds yhat yhat_lower yhat_upper
## 3380 2022-12-16 24.10920 23.42643 24.84440
## 3381 2022-12-19 24.04468 23.31561 24.76044
## 3382 2022-12-20 24.11068 23.36524 24.84679
## 3383 2022-12-21 24.08748 23.37888 24.85863
## 3384 2022-12-22 24.12625 23.37438 24.84936
## 3385 2022-12-23 24.13427 23.34603 24.87478
Segú los datos, nuestro modelo nos ve obteniendo para el día 21 de
diciembre entre 23.34854 (yhat_lower) y 24.90296 (yhat_upper) lempiras
por un dólar de EE.UU.
Para entender el pronóstico más detalladamente, podemos graficar sus componentes con;
prophet_plot_components(m,forecast)Parece que los inicios de abril fue nuestro mejor tipo de cambio, sin
embargo, se ve un comportamiento creciente a finales de abril y mayo,
luego se ve un comportamiento constante, pero siempre en alza.
Recuerda que el fin de este artículo,no es abogar por el uso indiscriminado de Prophet como el mejor modelo para pronosticar el tipo de cambio hondureño vs el dólar. Espero hayas conocido las generalidades de Prophet, y su utilidad en el ambito predictivo.