Bienvenido, les saluda Luis y esta vez les traigo este nuevo post.
Índice
Pronóstico de series de tiempo y profetas
Este es un seguimiento de un artículo anterior que ilustra el pronóstico de series de tiempo con Python, mediante el cual se construyó un modelo Prophet para pronosticar el número de pasajeros aéreos usando Python. Los datos en cuestión se obtuvieron de San Francisco Open Data.
En este ejemplo, se realizará el mismo análisis, pero utilizando R.
Antecedentes
El conjunto de datos se obtiene del Informe del Aeropuerto Internacional de San Francisco sobre estadísticas mensuales de tráfico de pasajeros por aerolínea, que está disponible en data.world (Fuente original: San Francisco Open Data) como se indica en la sección de Referencias a continuación.
Específicamente, números de pasajeros ajustados para la aerolínea KLM (enplaned) se filtran como la serie de tiempo para el análisis del período Mayo de 2005 a marzo de 2016.
El propósito de usar Prophet es:
- Identificar patrones estacionales en los datos.
- Modele «puntos de cambio» – o períodos de cambio estructural significativo en los datos.
- Pronostique el número futuro de pasajeros aéreos utilizando parámetros estacionales y de puntos de cambio.
En este sentido, Prophet puede producir resultados superiores a los modelos de series de tiempo más tradicionales como ARIMA al identificar rupturas estructurales en una serie de tiempo y hacer pronósticos teniendo en cuenta los puntos de cambio y los patrones de estacionalidad.
Construcción del modelo
Para permitir que Prophet analice los datos en cuestión, uno debe asegurarse de que esté en el formato adecuado, es decir, una columna titulada ds para la fecha, y y para los valores de la serie temporal.
Se carga la biblioteca profeta y se importan los datos relevantes.
library(prophet) mydata<-read.csv("klm.csv") ds<-mydata$Date[1:115] y<-mydata$Adjusted.Passenger.Count[1:115] train<-data.frame(ds,y) train
El modelo Prophet que se define en este caso detectará los patrones estacionales automáticamente. Sin embargo, también nos gustaría indicar los puntos de cambio relevantes en el modelo.
Se especifican cuatro puntos de cambio de la siguiente manera:
m <- prophet(train, n.changepoints = 4) m
A continuación, se ilustran los puntos de cambio identificados:
$changepoints [1] "2007-06-01 GMT" "2009-04-01 GMT" "2011-03-01 GMT" [4] "2013-02-01 GMT"
Luego, el modelo se utiliza para predecir 14 meses adelante, con las predicciones en comparación con el conjunto de prueba (valores reales).
future <- make_future_dataframe(m, periods = 14, freq = 'month') tail(future) forecast <- predict(m, future) tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')]) plot(m, forecast) + add_changepoints_to_plot(m)
Aquí hay una gráfica de los intervalos de los puntos de cambio:
Aquí hay un gráfico de la tendencia y los componentes anuales:
prophet_plot_components(m, forecast)
Podemos ver que el número de pasajeros es mayor en la primavera y el verano en general, con un menor número de pasajeros durante los meses de invierno.
Además, vemos que, si bien el número de pasajeros aéreos experimentó un fuerte aumento en la tendencia hasta 2010, los números comenzaron a ver una disminución lenta pero constante después de ese punto.
Utilizando la Métrica biblioteca, el error cuadrático medio se puede calcular y luego comparar con el valor medio mensual:
> ds<-mydata$Date[116:129] > y<-mydata$Adjusted.Passenger.Count[116:129] > > test<-data.frame(ds,y) > test ds y 1 2015-02-01 5012 2 2015-03-01 6327 3 2015-04-01 10831 4 2015-05-01 11745 5 2015-06-01 11633 6 2015-07-01 10562 7 2015-08-01 11510 8 2015-09-01 11669 9 2015-10-01 10221 10 2015-11-01 7366 11 2015-12-01 7321 12 2016-01-01 5930 13 2016-02-01 5338 14 2016-03-01 7726 > > library(Metrics) > rmse(forecast$yhat[116:129],test$y) [1] 587.1803 > > mean(test$y) [1] 8799.357
El RMSE de 587 es relativamente bajo en comparación con la media mensual de 8.799. Esto indica que nuestro modelo Prophet hace un buen trabajo al pronosticar el número de pasajeros aéreos.
Sin embargo, es notable que los puntos de cambio que se seleccionaron en R son ligeramente diferentes a los de Python. Específicamente, R identificó uno de los puntos de cambio como Abril de 2009, pero Python identificó el punto de cambio como Mayo de 2009 en lugar.
¿Qué pasa si definimos manualmente los puntos de cambio en R con mayo de 2009? ¿Mejorará esto la precisión del modelo de pronóstico?
m <- prophet(train, changepoints=c("2007-06-01", "2009-05-01", "2011-03-01", "2013-02-01"))
Estos son los resultados de la previsión:
> ds<-mydata$Date[116:129] > y<-mydata$Adjusted.Passenger.Count[116:129] > > test<-data.frame(ds,y) > test ds y 1 2015-02-01 5012 2 2015-03-01 6327 3 2015-04-01 10831 4 2015-05-01 11745 5 2015-06-01 11633 6 2015-07-01 10562 7 2015-08-01 11510 8 2015-09-01 11669 9 2015-10-01 10221 10 2015-11-01 7366 11 2015-12-01 7321 12 2016-01-01 5930 13 2016-02-01 5338 14 2016-03-01 7726 > > library(Metrics) > rmse(forecast$yhat[116:129],test$y) [1] 496.1832 > > mean(test$y) [1] 8799.357
Ahora vemos que el RMSE ha disminuido aún más a 496 y sigue siendo bastante bajo en comparación con la media mensual de 8,799. Esto indica que la configuración manual de los puntos de cambio ha dado como resultado una mayor precisión de pronóstico.
Conclusión
En este ejemplo, ha visto cómo ejecutar un modelo Prophet en R.
Específicamente, este artículo ha examinado:
- Cómo formatear correctamente una serie de tiempo para su análisis con Prophet.
- Configuración automática y manual de puntos de cambio.
- Cómo medir la precisión del pronóstico con la biblioteca de Métricas.
Muchas gracias por leer, y cualquier pregunta o comentario es muy apreciado. Puede encontrar el repositorio de GitHub con el script de código R relevante y el conjunto de datos a continuación, así como otras referencias relevantes.
Descargo de responsabilidad: este artículo está escrito «tal cual» y sin garantía. Fue escrito con la intención de proporcionar una descripción general de los conceptos de la ciencia de datos y no debe interpretarse como asesoramiento profesional de ninguna manera.
Referencias
- cran-r-project.org: profeta
- world: Air Traffic Passenger Data (Fuente original: San Francisco Open Data )
- github.io
- GitHub: facebook / profeta
- GitHub: MGCodesandStats / air-persons-time-series.
Gracias por leer.
Añadir comentario