Esta es una publicación larga, así que espero que puedan tener paciencia conmigo, y corríjanme donde estoy equivocado.
Mi objetivo es producir un pronóstico diario basado en 3 o 4 semanas de datos históricos.
Los datos son datos de 15 minutos de la carga local de una de las líneas de un transformador. Tengo problemas para encontrar el orden modelo de un proceso ARIMA estacional. Considere la serie de tiempo de demanda de electricidad:
Serie temporal original http://i.share.pho.to/80d86574_l.png
Cuando las primeras 3 semanas se toman como un subconjunto y se diferencian, se calculan los siguientes gráficos ACF / PACF:
Subconjunto http://i.share.pho.to/5c165aef_l.png
Primera diferencia http://i.share.pho.to/b7300cc2_l.png
Estacional y primera diferencia http://i.share.pho.to/570c5397_l.png
Esto parece que la serie es un poco estacionaria. Pero la estacionalidad también podría ser semanal (ver Semana de diferencia estacional y diferencias de segundo orden [aquí] http://share.pho.to/3owoq , ¿qué opinas?)
Así que concluyamos que el modelo toma la forma de:
Series: x
ARIMA(0,1,4)(0,1,1)[96]
Coefficients:
ma1 ma2 ma3 ma4 sma1
-0.2187 -0.2233 -0.0996 -0.0983 -0.9796
s.e. 0.0231 0.0234 0.0257 0.0251 0.0804
sigma^2 estimated as 364612: log likelihood=-15138.91
**AIC=30289.82 AICc=30289.87 BIC=30323.18**
Series: x
ARIMA(1,1,1)(2,0,2)[96]
Coefficients:
ar1 ma1 sar1 sar2 sma1 sma2
0.7607 -1.0010 0.4834 0.4979 -0.3369 -0.4168
s.e. 0.0163 0.0001 0.0033 0.0116 0.0216 0.0255
sigma^2 estimated as 406766: log likelihood=-15872.02
**AIC=31744.99 AICc=31745.05 BIC=31784.25**
Lo que significa que no se aplica diferenciación estacional. Aquí están los residuos de ambos modelos. La estadística de Ljung Box da un valor p muy pequeño, lo que indica que todavía hay algo de autocorrelación presente (? Corríjame si estoy equivocado).
Previsión
Por lo tanto, para determinar cuál es mejor, una prueba de precisión fuera de la muestra es la mejor. Entonces, para ambos modelos, se realiza un pronóstico con 24 horas de anticipación que se compara entre sí. Los resultados son: auto.arima http://i.share.pho.to/5d1dd934_l.png manual modelo http://i.share.pho.to/7ca69c97_l.png
Auto:
ME RMSE MAE MPE MAPE MASE ACF1 Theil's U
Training set -2.586653 606.3188 439.1367 -1.284165 7.599403 0.4914563 -0.01219792 NA
Test set -330.144797 896.6998 754.0080 -7.749675 13.268985 0.8438420 0.70219229 1.617834
Manual
ME RMSE MAE MPE MAPE MASE ACF1 Theil's U
Training set 2.456596e-03 589.1267 435.6571 -0.7815229 7.509774 0.4875621 -0.002034122 NA
Test set 2.878919e+02 919.7398 696.0593 3.4756363 10.317420 0.7789892 0.731013599 1.281764
Preguntas
Como puede pensar, este es un análisis de las primeras tres semanas de un conjunto de datos. Estoy luchando mentalmente con las siguientes preguntas:
- ¿Cómo selecciono el mejor modelo ARIMA (probando todos los diferentes pedidos y comprobando el mejor MASE / MAPE / MSE? Donde la selección de la medición del rendimiento puede ser una discusión en sí misma ...)
- Si genero un nuevo modelo y pronóstico para cada pronóstico de día nuevo (como en el pronóstico en línea), ¿debo tener en cuenta la tendencia anual y cómo? (como en un subconjunto tan pequeño, supongo que la tendencia es insignificante)
- ¿Esperaría que el orden del modelo permanezca igual en todo el conjunto de datos, es decir, al tomar otro subconjunto me dará el mismo modelo?
- ¿Cuál es una buena manera, dentro de este método, de hacer frente a las vacaciones? ¿O se necesita ARIMAX con muñecos de vacaciones externos para esto?
- ¿Necesito usar el enfoque de la serie de Fourier para probar modelos con los
seasonality=672
que se discutieron en períodos estacionales largos ? - Si es así, sería así
fit<-Arima(timeseries,order=c(0,1,4), xreg=fourier(1:n,4,672)
(donde la función fourier es como se define en la publicación del blog de Hyndman) - ¿Se incluyen los componentes iniciales P y Q con la serie de Fourier?
La mayoría del conocimiento teórico obtenido de FPP , ¡cosas geniales!
Antes de asesorar sobre el uso de suavizado exponencial o regresión lineal (dinámica), también se está trabajando para comparar.
Datos
https://www.dropbox.com/sh/mzx61sskya5ze6x/Zq3A7Q6htH/trafo.txt
Código
data<-read.csv("file", sep=";")
load<-data[,3]
Eliminé los pocos valores cero con los valores de la semana anterior
stepback<-672
load[is.na(load)] <- 0 # Assumed no 0's in first 672 values!
idx <- which(load == 0)
idx <- idx[which(idx>stepback)]
load[idx] <- load[idx-stepback]
ED<-ts(load,start=0, end=c(760,96),frequency=96)
x<-window(ED,start=0, end=c(20,96))
También es posible publicar un ejemplo reproducible, pero esto hará que la publicación sea aún más larga, pero posible si es necesario. Entonces, si hay algo que debo proporcionar, hágamelo saber.