Pronosticar varios períodos con aprendizaje automático


9

Recientemente recapitulé mi conocimiento de la Serie temporal y me di cuenta de que el aprendizaje automático en su mayoría solo da pronósticos un paso por delante.

Con pronósticos de un paso adelante me refiero a pronósticos que, por ejemplo, si tenemos datos por hora, utilizamos los datos desde las 10 a.m. para pronosticar las 11 a.m. y las 11 a.m. para las 12 a.m., etc.

ingrese la descripción de la imagen aquí

¿Pueden los métodos de aprendizaje automático producir pronósticos h-steps-ahead? Con los pronósticos h-step-ahead quiero decir que, por ejemplo, suponiendo datos por hora, usamos los datos de las 10am para hacer un pronóstico de 7 pasos adelante para obtener estimaciones para 11,12,13,14,15,16,17 ' en punto.

Foto de ejemplo: ingrese la descripción de la imagen aquí

En relación con mi pregunta principal, me pregunto:

  • ¿Cuáles son las razones por las que no veo a nadie que esté usando el aprendizaje automático para hacer pronósticos h-step-ahead?
  • Si hay un método que utiliza el aprendizaje automático, ¿es más o menos preciso que ARIMA?

Respuestas:


7

(Parte de esto está tomado de una publicación anterior mía ) En primer lugar, debe distinguir las dos formas diferentes de realizar pronósticos de series de tiempo de varios pasos: pronóstico recursivo y pronóstico directo:

  • norte
  • nortethnorte

Ahora para responder a su pregunta principal:

¿Pueden los métodos de aprendizaje automático producir pronósticos h-steps-ahead?

Sí, los métodos de ML pueden, y pueden producir un pronóstico h-steps ahead utilizando pronósticos recursivos y directos de varios pasos. No solo eso, sino que para el pronóstico directo de varios pasos, en realidad son más adecuados para la tarea que los modelos tradicionales como ARIMA o Exponencial suavizado. Sin embargo, tenga en cuenta que para el pronóstico directo de varios pasos, debe especificar de antemano los pasos h para los que desea pronosticar y entrenar su modelo en consecuencia, mientras que para el pronóstico recursivo puede usar su modelo para cualquier cantidad de pasos futuros que desee .

Además, Chevillon y Hendry sostienen que en algunos casos el pronóstico directo de varios pasos es más preciso que el pronóstico recursivo, lo que implica que el LD sería más preciso que los métodos tradicionales.

Para sus otras preguntas:

  • ¿Cuáles son las razones por las que no veo a nadie que esté usando el aprendizaje automático para hacer pronósticos h-step-ahead?

Muchas personas están usando ML para el pronóstico de múltiples pasos, especialmente usando redes neuronales: el método nnetar de Hyndman disponible en el paquete R Forecast, el paquete Kourentzes 'nnfor R, el modelo DeepAR de Amazon y muchos otros.

XGBoost también se ha utilizado con éxito en algunas competiciones de series temporales de Kaggle.

Ver Bontempi et al. para una discusión general

  • Si hay un método que utiliza el aprendizaje automático, ¿es más o menos preciso que ARIMA?

Esa es una pregunta abierta, y obviamente depende de los datos y la aplicación que se pronostica.


1

He estado jugando con series de tiempo para la detección de anomalías en los últimos meses y puedo compartir con ustedes mi experiencia.

La serie de tiempo con la que he estado trabajando se caracterizó por dos estacionalidades (diaria y semanal), sin tendencia y muchos picos durante el día.

Hice varios experimentos y luego elegí un modelo basado en redes neuronales LSTM porque en mi caso superó a Arima, pero por supuesto, como todo en estadística, no hay una solución general.

Para predecir más de un paso de tiempo en el futuro con una red neuronal es bastante simple, necesitará generar N valores en lugar de uno y esa N producción se comparará con las N observaciones reales.

Según mi experiencia, puedo decirle que al usar un N bajo (digamos 1), el modelo usará estrictamente pocos pasos de tiempo en el pasado para predecir el nuevo, sin realmente "aprender" la estacionalidad. Por otro lado, al aumentar N demasiado mutch, las estacionalidades se aprenden pero la precisión general disminuye.

Para el propósito de mi análisis, encontré que N = 4 (2 horas en el futuro) es un buen compromiso.


1

Para responder a su pregunta en un término más general, es posible utilizar el aprendizaje automático y predecir pronósticos h-steps-ahead . La parte difícil es que tiene que remodelar sus datos en una matriz en la que tiene, para cada observación, el valor real de la observación y los valores pasados ​​de las series de tiempo para un rango definido. Tendrá que definir manualmente cuál es el rango de datos que parecen relevantes para predecir sus series de tiempo, de hecho, ya que configuraría un modelo ARIMA. El ancho / horizonte de la matriz es crítico para predecir correctamente el siguiente valor tomado por su matriz. Si su horizonte está restringido, puede perderse los efectos de estacionalidad.

Una vez que haya hecho eso, para predecir h-steps-ahead, deberá predecir el primer valor siguiente en función de su última observación. Luego tendrá que almacenar la predicción como un "valor real", que se utilizará para predecir el segundo valor siguiente a través de un cambio de tiempo , al igual que un modelo ARIMA. Tendrá que repetir el proceso h veces para obtener sus pasos h adelante. Cada iteración dependerá de la predicción previa.

Un ejemplo usando el código R sería el siguiente.

library(forecast)
library(randomForest)

# create a daily pattern with random variations
myts <- ts(rep(c(5,6,7,8,11,13,14,15,16,15,14,17,13,12,15,13,12,12,11,10,9,8,7,6), 10)*runif(120,0.8,1.2), freq = 24)
myts_forecast <- forecast(myts, h = 24) # predict the time-series using ets + stl techniques
pred1 <- c(myts, myts_forecast1$mean) # store the prediction

# transform these observations into a matrix with the last 24 past values
idx <- c(1:24)
designmat <- data.frame(lapply(idx, function(x) myts[x:(215+x)])) # create a design matrix
colnames(designmat) <- c(paste0("x_",as.character(c(1:23))),"y")

# create a random forest model and predict iteratively each value
rfModel <- randomForest(y ~., designmat)
for (i in 1:24){
  designvec <- data.frame(c(designmat[nrow(designmat), 2:24], 0))
  colnames(designvec) <- colnames(designmat)
  designvec$y <- predict(rfModel, designvec)
  designmat <- rbind(designmat, designvec)
}
pred2 <- designmat$y

#plot to compare predictions
plot(pred1, type = "l")
lines(y = pred2[216:240], x = c(240:264), col = 2)

Ahora, obviamente, no hay reglas generales para determinar si un modelo de serie temporal o un modelo de aprendizaje automático son más eficientes. El tiempo computacional puede ser mayor para los modelos de aprendizaje automático, pero, por otro lado, puede incluir cualquier tipo de características adicionales para predecir su serie temporal utilizando (por ejemplo, no solo características numéricas o lógicas). El consejo general sería probar ambos y elegir el modelo más eficiente.


Aunque es posible que desee mencionar que lo que llama cambio de tiempo es en realidad lo que está haciendo una arima estándar. Es por eso que las predicciones de Arima tienden a ser muy lineales.
5 de

Sí exactamente. Editaré mi respuesta para aclarar este paso.
AshOfFire

1
En los modelos de series temporales también puede incluir características adicionales.
Tim

Correcto, con ARIMAX, pero deben ser numéricos, y los coeficientes agregados no pueden interpretarse tan fácilmente como los coeficientes utilizados en un ARMA.
AshOfFire
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.