Previsão multivariada de série temporal com LSTMs em Keras

Previsão multivariada de série temporal com LSTMs em Keras

As redes neurais, como as redes neurais recorrentes de Long Short-Term Memory (LSTM), são capazes de modelar problemas de forma quase contínua com várias variáveis ​​de entrada.

Este é um grande benefício na previsão de séries temporais, onde os métodos lineares clássicos podem ser difíceis de se adaptar a problemas de previsão multivariados ou de entrada múltipla.

Neste tutorial, você descobrirá como pode desenvolver um Modelo LSTM para previsão multivariada de série temporal com a biblioteca de aprendizado profundo Keras.

Depois de concluir este tutorial, você saberá:

  • Como transformar um conjunto de dados bruto em algo que possamos usar para previsão de séries temporais.
  • Como preparar dados e ajustar um LSTM para um problema de previsão de série temporal multivariada.
  • Como fazer uma previsão e redimensionar o resultado de volta às unidades originais.

Dê início ao seu projeto com meu novo livro Deep Learning for Time Series Forecasting, incluindo tutoriais passo a passo e a Código-fonte Python arquivos para todos os exemplos.

Vamos começar.

  • Atualização agosto / 2017: Corrigido um bug em que yhat era comparado a obs na etapa de tempo anterior ao calcular o RMSE final. Obrigado, Songbin Xu e David Righart.
  • Atualização outubro / 2017: Adicionado um novo exemplo que mostra como treinar em várias etapas de tempo anteriores devido à demanda popular.
  • Atualização setembro / 2018: Link atualizado para o conjunto de dados.
  • Atualização junho / 2020: Corrigidas importações ausentes para o exemplo de preparação de dados LSTM.

Visão geral do tutorial

Este tutorial é dividido em 4 partes; eles estão:

  1. Previsão de poluição do ar
  2. Preparação de dados básicos
  3. Modelo de previsão multivariável LSTM
    1. Preparação de dados LSTM
    2. Definir e ajustar o modelo
    3. Avalie o modelo
    4. Exemplo Completo
  4. Exemplo de treinar em vários passos de tempo de atraso

Ambiente Python

Este tutorial presume que você tenha um ambiente Python SciPy instalado. Eu recomendo que você use Python 3 com este tutorial.

Você deve ter o Keras (2.0 ou superior) instalado com o back-end TensorFlow ou Theano, Idealmente Keras 2.3 e TensorFlow 2.2 ou superior.

O tutorial também assume que você tem o scikit-learn, Pandas, NumPy e Matplotlib instalados.

Se precisar de ajuda com seu ambiente, veja esta postagem:

Precisa de ajuda com Deep Learning for Time Series?

Faça meu curso intensivo de e-mail gratuito de 7 dias agora (com código de exemplo).

Clique para se inscrever e também obter uma versão gratuita do Ebook em PDF do curso.

Baixe o seu mini-curso GRATUITO

1. Previsão de poluição do ar

Neste tutorial, usaremos o conjunto de dados de qualidade do ar.

Este é um conjunto de dados que informa sobre o clima e o nível de poluição a cada hora durante cinco anos na embaixada dos Estados Unidos em Pequim, China.

Os dados incluem a data e hora, a poluição chamada concentração de PM2.5 e as informações meteorológicas, incluindo ponto de orvalho, temperatura, pressão, direção do vento, velocidade do vento e o número cumulativo de horas de neve e chuva. A lista completa de recursos nos dados brutos é a seguinte:

  1. Não: número da linha
  2. ano: ano de dados nesta linha
  3. mês: mês de dados nesta linha
  4. dia: dia de dados nesta linha
  5. hora: hora de dados nesta linha
  6. pm2.5: Concentração de PM2,5
  7. DEWP: Ponto de condensação da água
  8. TEMP: Temperatura
  9. PRES: Pressão
  10. cbwd: Direção do vento combinada
  11. Iws: Velocidade do vento acumulada
  12. É: Horas acumuladas de neve
  13. Ir: Horas acumuladas de chuva

Podemos usar esses dados e enquadrar um problema de previsão onde, dadas as condições meteorológicas e a poluição das horas anteriores, prevemos a poluição na hora seguinte.

Este conjunto de dados pode ser usado para enquadrar outros problemas de previsão.
Você tem boas ideias? Deixe-me saber nos comentários abaixo.

Você pode baixar o conjunto de dados do UCI Machine Learning Repository.

Atualizar, Espelhei o conjunto de dados aqui porque UCI se tornou não confiável:

Baixe o conjunto de dados e coloque-o em seu diretório de trabalho atual com o nome de arquivo “raw.csv“.

2. Preparação de dados básicos

Os dados não estão prontos para uso. Devemos prepará-lo primeiro.

Abaixo estão as primeiras linhas do conjunto de dados bruto.

O primeiro passo é consolidar as informações de data e hora em uma única data e hora para que possamos usá-las como um índice no Pandas.

Uma verificação rápida revela valores de NA para pm2,5 para as primeiras 24 horas. Teremos, portanto, de remover a primeira linha de dados. Existem também alguns valores "NA" dispersos posteriormente no conjunto de dados; podemos marcá-los com 0 valores por enquanto.

O script abaixo carrega o conjunto de dados bruto e analisa as informações de data e hora como o índice Pandas DataFrame. A coluna “Não” é eliminada e, em seguida, nomes mais claros são especificados para cada coluna. Finalmente, os valores NA são substituídos por valores “0” e as primeiras 24 horas são removidas.

A coluna “Não” é eliminada e, em seguida, nomes mais claros são especificados para cada coluna. Finalmente, os valores NA são substituídos por valores “0” e as primeiras 24 horas são removidas.

Executar o exemplo imprime as primeiras 5 linhas do conjunto de dados transformado e salva o conjunto de dados em “poluição.csv“.

Agora que temos os dados de uma forma fácil de usar, podemos criar um gráfico rápido de cada série e ver o que temos.

O código abaixo carrega o novo “poluição.csv”Arquivo e plota cada série como uma subtrama separada, exceto dir velocidade do vento, que é categórica.

Executar o exemplo cria um gráfico com 7 subparcelas mostrando os 5 anos de dados para cada variável.

Gráficos de linhas de séries temporais de poluição do ar

Gráficos de linhas de séries temporais de poluição do ar

3. Modelo de previsão LSTM multivariado

Nesta seção, ajustaremos um LSTM para o problema.

Preparação de dados LSTM

A primeira etapa é preparar o conjunto de dados de poluição para o LSTM.

Isso envolve enquadrar o conjunto de dados como um problema de aprendizado supervisionado e normalizar as variáveis ​​de entrada.

Vamos enquadrar o problema de aprendizado supervisionado como a previsão da poluição na hora atual

Esta formulação é direta e apenas para esta demonstração. Algumas formulações alternativas que você pode explorar incluem:

  • Preveja a poluição na próxima hora com base nas condições meteorológicas e na poluição das últimas 24 horas.
  • Preveja a poluição para a próxima hora conforme descrito acima e dadas as condições climáticas “esperadas” para a próxima hora.

Podemos transformar o conjunto de dados usando o series_to_supervised () função desenvolvida na postagem do blog:

Primeiro, o “poluição.csv”Conjunto de dados é carregado. O recurso de direção do vento é codificado por rótulo (codificado por inteiro). Isso poderia ser codificado ainda mais no futuro, se você estiver interessado em explorá-lo.

Em seguida, todos os recursos são normalizados e o conjunto de dados é transformado em um problema de aprendizado supervisionado. As variáveis ​​meteorológicas para a hora a ser prevista

A lista completa de códigos é fornecida abaixo.

Você também pode estar interessado em