Previsão de vários períodos com aprendizado de máquina


9

Recentemente, recapitulei meus conhecimentos sobre séries temporais e percebi que o aprendizado de máquina geralmente oferece apenas um passo à frente das previsões.

Com previsões um passo à frente, quero dizer previsões que, por exemplo, se tivermos dados horários, use os dados das 10h às 11h e 11h às 12h, etc.

insira a descrição da imagem aqui

Os métodos de aprendizado de máquina podem produzir previsões h-etapas à frente? Com previsões h-step-ahead, quero dizer que, por exemplo, assumindo dados por hora, usamos os dados das 10h para fazer uma previsão de 7-step-ahead para obter estimativas de 11,12,13,14,15,16,17 ' horas.

Foto de exemplo: insira a descrição da imagem aqui

Relacionado à minha pergunta principal, eu me pergunto:

  • Quais são as razões pelas quais não vejo ninguém usando o aprendizado de máquina para fazer previsões h-passo a frente?
  • Se existe um método que usa aprendizado de máquina, é mais ou menos preciso que o ARIMA?

Respostas:


7

(Parte disso é extraído de uma publicação anterior ) Antes de tudo, é necessário distinguir as duas maneiras diferentes de executar a previsão de séries temporais de várias etapas: Previsão recursiva e previsão direta:

  • n
  • nthn

Agora, para responder à sua pergunta principal:

Os métodos de aprendizado de máquina podem produzir previsões h-etapas à frente?

Sim, os métodos de ML podem e podem produzir previsões h-steps à frente usando previsões recursivas e diretas em várias etapas. Não apenas isso, mas para a previsão direta em várias etapas, eles são realmente mais adequados para a tarefa do que os modelos tradicionais como ARIMA ou Suavização exponencial. Observe, no entanto, que, para a previsão direta em várias etapas, é necessário especificar com antecedência as etapas h à frente para as quais você deseja prever e treinar seu modelo adequadamente, enquanto para a previsão recursiva você pode usar o modelo para qualquer número de etapas futuras que desejar. .

Além disso, Chevillon & Hendry argumentam que, em alguns casos, a previsão direta em várias etapas é mais precisa do que a previsão recursiva - o que implica que o ML seria mais preciso do que os métodos tradicionais.

Para suas outras perguntas:

  • Quais são as razões pelas quais não vejo ninguém usando o aprendizado de máquina para fazer previsões h-passo a frente?

Muitas pessoas estão usando o ML para previsão em várias etapas, especialmente usando redes neurais: o método nnetar de Hyndman disponível no pacote R Forecast, o pacote nnfor R da Kourentzes, o modelo DeepAR da Amazon e muitos outros.

O XGBoost também foi usado com sucesso em algumas competições de séries temporais do Kaggle.

Veja Bontempi et al. para uma discussão geral.

  • Se existe um método que usa aprendizado de máquina, é mais ou menos preciso que o ARIMA?

Essa é uma pergunta em aberto e, obviamente, depende dos dados e do aplicativo que se está prevendo.


1

Eu tenho jogado com séries temporais para detecção de anomalias nos últimos meses e posso compartilhar com você minha experiência.

A série temporal com a qual trabalho foi caracterizada por duas sazonalidades (diárias e semanais), nenhuma tendência e muitos picos durante o dia.

Fiz várias experiências e, em seguida, escolhi um modelo baseado em redes neurais LSTM, porque no meu caso ele superou o arima, mas é claro que, como tudo na estatística, não há uma solução geral.

Para prever mais de uma etapa no futuro com uma rede neural é bastante simples, você precisará gerar valores N em vez de um e essa saída N será comparada com as observações N reais.

Pela minha experiência, posso dizer-lhe que, usando um N baixo (digamos 1), o modelo usará estritamente alguns passos no tempo para prever o novo, sem realmente "aprender" a sazonalidade. Por outro lado, aumentando N também mutch, as sazonalidades são aprendidas, mas a precisão geral diminui.

Para os fins da minha análise, achei N = 4 (duas horas no futuro) um bom compromisso.


1

Para responder sua pergunta em um termo mais geral, é possível usar o aprendizado de máquina e prever previsões h-steps-ahead . A parte complicada é que você precisa remodelar seus dados em uma matriz na qual possui, para cada observação, o valor real da observação e os valores passados ​​da série temporal para um intervalo definido. Você precisará definir manualmente qual é o intervalo de dados que parece relevante para prever suas séries temporais, na verdade, como você configuraria um modelo ARIMA. A largura / horizonte da matriz é fundamental para prever corretamente o próximo valor obtido pela sua matriz. Se o seu horizonte for restrito, você poderá perder os efeitos da sazonalidade.

Depois de fazer isso, para prever as etapas h à frente, você precisará prever o primeiro valor seguinte com base em sua última observação. Você precisará armazenar a previsão como um "valor real", que será usado para prever o segundo próximo valor através de uma mudança de tempo , assim como um modelo ARIMA. Você precisará iterar o processo h vezes para obter seus h-passos à frente. Cada iteração dependerá da previsão anterior.

Um exemplo usando o código R seria o seguinte.

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)

Agora, obviamente, não há regras gerais para determinar se um modelo de série temporal ou um modelo de aprendizado de máquina são mais eficientes. O tempo computacional pode ser maior para os modelos de aprendizado de máquina, mas, por outro lado, você pode incluir qualquer tipo de recurso adicional para prever sua série temporal usando-os (por exemplo, não apenas recursos numéricos ou lógicos). O conselho geral seria testar os dois e escolher o modelo mais eficiente.


Embora você possa mencionar que o que você chama de mudança de tempo é realmente o que um arima padrão está fazendo. É por isso que as previsões de Arima tendem a ser muito lineares.
5 de

Sim, exatamente. Vou editar minha resposta para esclarecer esta etapa.
AshOfFire 17/05/19

11
Nos modelos de séries temporais, você também pode incluir recursos adicionais.
Tim

Correto, com o ARIMAX, mas eles precisam ser numéricos e os coeficientes adicionados não podem ser tão facilmente interpretados quanto os coeficientes usados ​​em um ARMA.
AshOfFire 17/05/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.