4 votos

Previsión con ARIMA (división de datos de entrenamiento y de prueba)

Tengo una serie temporal horaria de la ocupación media del aparcamiento con datos disponibles desde septiembre de 2017 hasta junio de 2018. Me gustaría utilizar el modelo ARIMA con regresores externos para elaborar una previsión para las próximas 24 horas. Los datos están disponibles aquí .

Los regresores externos que utilizo son: los días de la semana (1=lunes a 7=domingos), el tráfico medio y los términos de Fourier.

Esto es lo que he hecho hasta ahora:

1) He comprobado la frecuencia o frecuencias dominantes en mis datos utilizando el periodograma. El resultado fue 24 (como se esperaba) .

> library(forecast)
> out=periodogram(Parking$AvgOccupied)
> wmax=which.max(out$spec)
> freq=1/out$freq[wmax]
> 1/out$freq[wmax]
[1] 24.02402402

2) Dividir mis datos en datos de prueba y de entrenamiento. Aunque ya tengo los datos de la ocupación media de los aparcamientos para el mes de junio de 2018, los estoy utilizando como datos de prueba, ya que me gustaría comprobar la precisión de mi modelo con estos datos.

> Parking.Train=Parking[1:6552,] # From 01 Sep 2017 to 31 May 2018
> Parking.Test=Parking[6553:7272,] # From 01 Jun 2018 to 30 Jun 2018

3) Convertir los datos de entrenamiento en un ts objeto.

ParkingTS=ts(Parking.Train$AvgOccupied,
             frequency=24,
             start=c(as.Date("2017-09-01"))) 
ParkingTS1=ts(Parking.Test$AvgOccupied,
             frequency=24,
             start=c(as.Date("2018-06-01"))) 

4) Ajustar el modelo con los regresores externos ( este código es cortesía del Dr. Rob Hyndman ( https://robjhyndman.com/hyndsight/forecasting-weekly-data/ )

> bestfit=list(aicc=Inf)

> for(i in 1:11) {
 ParkingARIMA=auto.arima(ParkingTS,xreg=cbind(model.matrix(~Parking.Train$WeekDay)[,-1],
                   Parking.Train$AvgTrafficFlow,
                   forecast::fourier(ParkingTS, K=i)),seasonal=F) 
  if(ParkingARIMA$aicc < bestfit$aicc)
   {
     bestfit = ParkingARIMA
   }  else break;
 }

El modelo resultante es ARIMA(0,1,5) con 4 términos de Fourier.

5) Ahora quiero prever la media de ocupación de los aparcamientos para las próximas 24 horas utilizando los regresores de los datos de prueba. Utilizo el modelo obtenido en el paso 4 y los regresores de los datos de prueba (WeekDays y Traffic Flow) + Términos de Fourier de los datos de prueba y utilizarlos como entradas en el forecast() con la función h=24 . A continuación, calcule la precisión de la previsión utilizando la media de ocupación del aparcamiento en los datos de prueba.

> ParkingForecast=forecast(bestfit,xreg=cbind(model.matrix(~Parking.Test$WeekDay)[,-1],
                                             Parking.Test$AvgTrafficFlow,
                                             forecast::fourier(ParkingTS1, K=4)))
> acc=accuracy(ParkingForecast,Parking.Test$AvgOccupied)
> acc
               ME              RMSE         MAE          MPE         MAPE         MASE          ACF1
 Training set -0.005673853141 48.64258868 31.94747327 -1.531875066  8.176109728 0.5851921293 0.02495856147
 Test set     -6.410339968260 95.59476132 66.83084303 -5.812664624 17.743429782 1.2241620176            NA

PREGUNTAS:

i) ¿Es correcta esta estrategia de previsión? ¿O me he equivocado por completo?

ii) ¿Es correcto volver a estimar los términos de Fourier para los datos de prueba?

NB: Estoy haciendo lo anterior sólo como un experimento. Ya he modelado mis datos utilizando el auto.arima() con los regresores externos como los días de la semana y el flujo de tráfico (sin los términos de Fourier) para obtener un modelo arima estacional : ARIMA(3,0,3)(2,1,0)[24] con las siguientes medidas de precisión

> acc1
                     ME        RMSE         MAE          MPE         MAPE        MASE             ACF1
Training set  0.01681395761 52.63164320 32.35382066 -1.284216761  8.012784474 0.592635325 -0.0009199141052
Test set     -2.47801257238 98.98536617 61.30672355 -3.091655364 15.528942136 1.122974947               NA

4voto

icelava Puntos 548

Si lo he entendido bien, obtienes tus términos de Fourier a partir de datos que sólo están disponibles después de el período de prueba. Si se supone que se pueden utilizar estos datos, también se pueden observar los datos reales de aparcamiento y preverlos.

O, en otras palabras: no, sólo se puede utilizar previsto información futura. Por ejemplo, usted es capaz de predecir perfectamente el día de la semana de mañana, así que no hay problema en incluir el día de la semana. En cuanto a los datos del aparcamiento que quiere transformar de Fourier: para hacerse una idea de cómo funciona su algoritmo, tendrá que previsión y transformar de Fourier esa previsión.

Por último, es posible que también desee buscar modelos que capten multiestacionalidades directamente, como murciélagos o tbats .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X