Demorou, mas finalmente cheguei no tema time series forecasting! Neste artigo veremos as principais nomenclaturas usadas neste campo do aprendizado de máquina e como preparar nossos dados para realizar a previsão de séries temporais. Aqui o tempo é quem manda. Prepare-se para se surpreender com os recursos do Python.

Séries temporais

Série temporal é um conjunto de observações coletadas sequencialmente em um determinado espaço de tempo. Este espaço de tempo geralmente é descrito da seguinte forma:

  • t = instante atual
  • t-n = instante n anterior a t, também conhecido como lag time
  • t+n instante n posterior a t, também conhecido como forecast time

O ato de descrever séries temporais (encontrar padrões, tendências e relações nos dados ao longo do tempo) refere-se à tarefa de time series analysis. Já o ato de prever séries temporais refere-se ao termo time series forecasting.

Jason Brownlee descreve em seu livro Discover Time Series With Python que as séries temporais podem ser decompostas em algumas partes:

  • Level (nível): O valor base da série se ela fosse uma linha reta
    Toda série temporal têm nível
  • Trend (tendência): O comportamento (opcional) positivo ou negativo da série ao longo do tempo, demonstrando sua tendência.
    Nem toda série temporal apresenta uma tendência
  • Seasonality (sazonalidade): A existência (opcional) de comportamentos específicos ao longo da série
    Nem toda série temporal possui sazonalidade
  • Noise (erro): A variação (opcional) existente na série que não pode ser explicada pelo modelo.
    Embora opcional, é esperado que a maioria das séries temporais tenham erros que não podem ser explicados.

Em seu livro também são descritas as principais preocupações para se trabalhar com time series forecasting, como a quantidade de dados disponível, período de tempo em que as previsões serão feitas (curto, médio ou longo), atualização das predições conforme o tempo (t+n) é alcançado, valores ausentes, outliers e a frequência temporal existente nos dados (muitas vezes pode ser necessário gerar amostras para ajustar as frequências).

Organizando os dados para previsão de séries temporais

Time series forecasting faz parte da aprendizagem de máquina supervisionada, logo podemos dizer que nossa variável de interesse Y está em função da nossa variável explicativa X:

Y=f(X)

As bases de modelagem para este tipo de caso costumam ter a seguinte estrutura:

X (índice IBOVESPA) Y (dólar)
45.000 3,1
47.000 2,9
44.000 3,2
42.000 3,3

Dizemos que Y está em função de X porque as mudanças em X explicam o valor de Y. Neste exemplo, podemos ver uma correlação negativa entre o índice IBOVESPA e o valor do dólar: quanto maior o índice da bolsa, menor o valor do dólar.

No entanto, os casos de time series forecasting adicionam um novo componente à análise: o tempo. As bases de dados iniciais para este tipo de problema costumam ter a seguinte estrutura:

Tempo Y
01/Jan 100
02/Jan 120
03/Jan 150
04/Jan 200

Neste caso nós também queremos prever o valor de Y, no entanto, utilizaremos a sequência histórica dos próprios valores de Y para prever seu próximo valor. Neste caso, nossa base de dados poderia ser transformada da seguinte forma:

X Y
? 100
100 120
120 150
150 200
200 ?

Provavelmente excluiremos a primeira e a última linha desta base de dados para treinar o modelo, já que não temos todos os valores preenchidos para estas observações. Esta técnica empregada para transformar esta base de dados é conhecida como sliding window. Quando existe mais de uma variável em nossa base, dizemos que se trata de um caso de uma previsão de séries temporais multi variada.

Os termos técnicos usados para criar as variáveis

Também é importante dizer que a base de dados que nós criamos possui apenas uma “step” (passo) à frente para fazer as previsões (one-step forecast). Mas também podemos trabalhar com mais de uma “step” (multi-step forecast), como apresentado na base de dados abaixo:

X1 X2 Y
? 100 120
100 120 150
120 150 200
150 200 ?
20 ? ?

Tome nota:

  • Nesta base de dados, as variáveis X1 e X2 são conhecidas como lag features, pois referem-se à steps anteriores a t (t-2 e t-1, respectivamente).
  • Também podemos extrair estatísticas das variáveis X1 e X2, como média, valor mínimo e valor máximo. Este tipo de variável é denominada rolling features 
  • Similar às rolling features, podemos criar um outro grupo de variáveis em nossa base de modelagem conhecida como expanding features. Estas variáveis também extraem estatísticas como média, valores mínimo e máximo, porém não se restringem às lag features (neste caso X1 e X2 representando apenas os tempos t-2 e t-1), mas sim a todos os dados observados até o instante t, ou seja, t-1, t-2, t-3, t-n
  • Por fim, é possível extrair informações da própria variável de tempo t. Por exemplo, para t = 25/Dez, podemos extrair informações como mês = dezembro, feriado = sim, estação = verão. Estas variáveis são conhecidas como date time features.

Você pode consultar o material prático de referência neste link. Ainda não vamos criar nenhum modelo de forecasting…por enquanto vamos apenas focar na engenharia da base de modelagem.

Caso queira conhecer o material de Jason Brownlee, acesse neste link.

Espero que tenham tido uma boa jornada tanto quanto eu tive!

Abraços.
Weslley Moura

 

Anúncios