Como fazer com que o LSTM preveja várias etapas de tempo à frente?


9

Estou tentando usar um LSTM para previsão de séries temporais. Os dados são transmitidos uma vez por minuto, mas eu gostaria de prever uma hora à frente. Existem duas maneiras de pensar sobre isso:

  1. Agrupe os dados em dados horários, considerando a média a cada período de 60 minutos como um ponto de dados.
  2. Para cada (X, y)par de dados de treinamento, Xseja a série temporal de t - 120até t - 60e yseja a série temporal de t - 60até t. Force o LSTM a prever 60 timesteps à frente e use y[-1]como a previsão.

Existem práticas recomendadas para fazer isso?


O que é LSTM? Modelo de séries temporais de mínimos quadrados, talvez?
— Michael R. Chernick

2
Você precisa de 60 previsões, ou apenas a última? Se você precisar apenas do último, basta alimentar o valor de y = t + 60 para treinar. Não acho que seja crítico (para LSTM) que o valor que você está prevendo seja o próximo sequencialmente. Portanto, se você quiser previsões mais detalhadas, apenas treine dessa maneira.
— Photocall

usar multi-passo previsão com os dados por minutos que você tem com valor lag apropriado
— Satyajit Maitra

Respostas:


6

Existem diferentes abordagens

  • Estratégia recursiva

    • um modelo muitos-para-um

      prediction(t+1) = model(obs(t-1), obs(t-2), ..., obs(t-n))
      prediction(t+2) = model(prediction(t+1), obs(t-1), ..., obs(t-n)) 
      
  • Estratégia direta

    • vários modelos muitos-para-um

      prediction(t+1) = model1(obs(t-1), obs(t-2), ..., obs(t-n))
      prediction(t+2) = model2(obs(t-2), obs(t-3), ..., obs(t-n))`
      
  • Estratégia de saída múltipla

    • um modelo muitos-para-muitos

      prediction(t+1), prediction(t+2) = model(obs(t-1), obs(t-2), ..., obs(t-n))`
      
  • Estratégias híbridas

    • combine duas ou mais estratégias acima

Referência: Previsão de séries temporais em várias etapas


3

De https://machinelearningmastery.com/multi-step-time-series-forecasting-long-short-term-memory-networks-python/

train = [[t-120,t-199...t,t+1...t+60],[...],[...]]

# fit an LSTM network to training data
def fit_lstm(train, n_lag, n_seq, n_batch, nb_epoch, n_neurons):
    # reshape training into [samples, timesteps, features]
    X, y = train[:, 0:n_lag], train[:, n_lag:]
    X = X.reshape(X.shape[0], 1, X.shape[1])
    # design network
    model = Sequential()
    model.add(LSTM(n_neurons, batch_input_shape=(n_batch, X.shape[1], X.shape[2]), stateful=True))
    model.add(Dense(y.shape[1]))
    model.compile(loss='mean_squared_error', optimizer='adam')
    # fit network
    for i in range(nb_epoch):
        model.fit(X, y, epochs=1, batch_size=n_batch, verbose=0, shuffle=False)
        model.reset_states()
    return model

Não tenho certeza do que você está buscando. Você responde à pergunta ou faz uma nova pergunta. Você pode apenas excluir sua última frase.
— Ferdi

removed "Você já encontrou uma abordagem que funcionou para você?" , Mas sim, eu sou muito curioso sobre como esse cara passou desde que eu estou trabalhando em uma tarefa muito semelhante
— user4446237

Obrigado pela sua edição. Se você está superinteressado, pode começar uma recompensa assim que tiver 75 rep. Não conheço outra maneira de atrair interesse pela questão.
— Ferdi
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.