Análise Preditiva de Séries Temporais - Python



Este artigo, tem como objetivo a explanação do uso do método de previsão de séries temporais, o ARIMA, bem como abordagem de técnicas de limpeza de dados e visualização utilizando o Pyplot.

Neste kernel, usei fontes de dados múltiplas que são operações de bombardeio aéreo e condições climáticas na Segunda Guerra Mundial. Após esse ponto, usarei a sigla WW2 para a 2ª Guerra Mundial.
Começaremos com a descrição e a limpeza dos dados, depois visualizaremos nossos dados para os entender melhor.
Esses processos podem ser chamados de AED (Análise Exploratória de Dados). Depois disso, focaremos na previsão de séries temporais para prever quando as operações de bombardeio são realizadas. Para previsão de séries temporais, usaremos o método ARIMA.

As labels e todo o código está em inglês para uma universalização da linguagem.

Entendendo o ARIMA

Em estatística e econometria, particularmente em análise de séries temporais, um modelo auto-regressivo integrado de médias móveis (autoregressive integrated moving average ou ARIMA, na sigla em inglês) é uma generalização de um modelo auto-regressivo de médias móveis (ARMA). Ambos os modelos são ajustados aos dados da série temporal para entender melhor os dados ou para prever pontos futuros na série. Modelos ARIMA são aplicados em alguns casos em que os dados mostram evidências de não estacionariedade, em que um passo inicial de diferenciação (correspondente à parte "integrada" do modelo) pode ser aplicado uma ou mais vezes para eliminar a não estacionariedade.

 A parte auto-regressiva (AR) do modelo ARIMA indica que a variável evoluinte de interesse é regressada em seus próprios valores defasados, isto é, anteriores. A parte de média móvel (MA) indica que o erro de regressão é na verdade uma combinação linear dos termos de erro, cujos valores ocorreram contemporaneamente e em vários momentos no passado. A parte integrada (I) indica que os valores de dados foram substituídos com a diferença entre seus valores e os valores anteriores e este processo diferenciador pode ter sido realizado mais de uma vez. O propósito da cada uma destas características é fazer o modelo se ajustar aos dados da melhor forma possível.

Vamos ao código!!

O ambiente utilizado é o Python 3 que nativamente já vem com muitas bibliotecas de análise de dados uteis e já instaladas.



Os arquivos de dados de entrada estão disponíveis numa pasta que eu defini para tal, mas vocês devem colocar no código o caminho do respetivo diretório.


Para que possamos receber avisos durante a execução do código, importamos a biblioteca de warning nativa do Python


Carga de Dados

Como mencionei na introdução, usei várias fontes de dados.
Operações de bombardeio aéreo na Segunda Guerra Mundial: resumindo, esses dados incluem operações de bombardeio. Por exemplo, os EUA que usam a bomba do aeroporto de Ponte Olivo na Alemanha (Berlim) com aeronaves A36 em 1945.
Condições climáticas na Segunda Guerra Mundial: resumindo, condições climáticas durante a segunda guerra mundial. Por exemplo, de acordo com a estação meteorológica da cidade de George Town, a temperatura média é 23,88 em 01/07/1942.
Este conjunto de dados possui 2 subconjuntos:

  • O primeiro inclui localizações de estações meteorológicas como país, latitude e longitude. 
  • O segundo inclui temperaturas mínimas, máximas e médias medidas de estações meteorológicas


Entendendo os Dados

Descrição de dados
Explico apenas os recursos de dados que usaremos neste kernel.

Bombardeio aéreo Descrição dos dados:
  • Data da Missão: Data da Missão
  • Teatro de Operações: região em que operações militares ativas estão em andamento; "o exército estava em campo aguardando ação"; Exemplo: "ele serviu no Vietnã por três anos"
  • País: País que faz missão ou operação como EUA
  • Força Aérea: Nome ou ID da unidade da Força Aérea como 5AF
  • Série de aeronaves: modelo ou tipo de aeronave como B24
  • Indicativo: Antes do ataque à bomba, mensagem, código, anúncio ou sintonia transmitida por rádio.
  • Base de decolagem: nome do aeroporto de decolagem como o Ponte Olivo Airfield
  • Local da decolagem: região da decolagem Sicília
  • Latitude de decolagem: latitude da região de decolagem
  • Longitude de decolagem: Longitude da região de decolagem
  • País de destino: país de destino como a Alemanha
  • Segmentar cidade: segmente cidade como Berlim
  • Tipo de destino: tipo de destino como área da cidade
  • Indústria-alvo: alvo industy como cidade ou urbano
  • Prioridade de destino: segmente como 1 (a maioria)
  • Latitude do alvo: latitude do alvo
  • Longitude alvo: Longitude alvo

Descrição dos dados da condição climática: Localização da estação meteorológica:
  • WBAN: Número da estação meteorológica
  • NAME: nome da estação meteorológica
  • ID DO ESTADO / PAÍS: acrônimo de países
  • Latitude: latitude da estação meteorológica
  • Longitude: Longitude da estação meteorológica

Clima:
  • STA: número da estação meteorológica (WBAN)
  • Data: Data da medição da temperatura
  • MeanTemp: temperatura média

Limpeza de Dados

Os dados do bombardeio aéreo incluem muito valor de NaN. Em vez de usá-los, ignoro alguns valores de NaN. Ele não apenas remove a incerteza, mas também facilita o processo de visualização
  • Ignorar países que são NaN
  • Ignorar se a longitude alvo for NaN
  • Ignorar se a longitude da decolagem for NaN
  • Descartar recursos não utilizados

Os dados da condição climática não precisam de limpeza. De acordo com a análise e visualização exploratória de dados, escolhi um determinado local para examinar mais profundamente. No entanto, vou colocar as variáveis de dados no que uso apenas.


Visualização de Dados

Vou começar com noções básicas de visualização que compreendem dados

  • Quantos países quais ataques
  • Principais países-alvo
  • As 10 melhores séries de aeronaves
  • Localizações base da decolagem (países de Attacjk)
  • Locais de destino
  • Caminhos de bombardeio
  • Teatro de Operações
  • Localizações das estações meteorológicas


Arenonave mais utilizada é o A36 Agora vamos visualizar as bases dos países que atacam
No plot abaixo, a cor azul chama a atenção, são os EUA e a cor vermelha é a Grã-Bretanha


Verificando os ataques


Plot dos ataques por País


Ok, agora vou visualizar os trajetos de bombardeio de que país a partir do qual decolam a bomba e quais países e cidades.



Plot dos trajetos



Como você pode ver pelos caminhos dos bombardeios, a maior parte do ataque é realizada no teatro de operações do Mediterrâneo.

Teatro de Operações:

  • ETO: Teatro Europeu de Operação
  • PTO: Teatro de Operações do Pacífico
  • MTO: Teatro de Operações Mediterrâneo
  • CBI: China-Burma-India Theater of Operations
  • EAST AFRICA: East Africa Theater of Operations


Plot usando Pyplot


As localizações das estações meteorológicas estão abaixo


Plot usando o Pyplot




  • Vamos concentrar a guerra nos EUA e na BURMA
  • Nesta guerra, os EUA bombardearam BURMA (cidade de KATHA) de 1942 a 1945.
  • A estação meteorológica mais próxima a esta guerra é BINDUKURI e possui registro de temperatura de 1943 a 1945.
  • Agora vamos visualizar essa situação. Porém, antes da visualização, precisamos criar objetos de data e data e hora.


Plot usando o Pyplot




  • Como você pode ver, temos medições de temperatura de 1943 a 1945.
  • A temperatura oscila entre 12 e 32 graus.
  • A temperatura dos meses de inverno é mais fria que a temperatura dos meses de verão.


Plot com Pyplot



  • Linha verde é a temperatura média medida em Bindukuri.
  • Marcadores azuis são datas de bombardeio e temperatura de data de bombardeio.
  • Como pode ser visto no cenário, os EUA bombardeiam a altas temperaturas.
  • A questão é que podemos prever o tempo futuro e, de acordo com essa previsão, podemos saber se o bombardeio será realizado ou não.
  • Para responder a essa pergunta, vamos começar pela previsão de séries temporais.

Previsão de séries temporais com ARIMA


  • Vamos usar o método mais utilizado ARIMA
  • ARIMA : AutoRegressive Integrated Moving Average - Explicarei em seguida

O caminho que seguiremos:
  • O que é série temporal?
  • Estacionariedade de uma série temporal
  • Tornar uma série temporal estacionária?
  • Previsão de uma série temporal

O que são séries temporais?


  • A série temporal é uma coleção de pontos de dados coletados em intervalos de tempo constantes.
  • Depende do tempo.
  • A maioria das séries temporais tem algum tipo de tendência de sazonalidade. Por exemplo, se vendermos sorvete, provavelmente haverá vendas mais altas no verão. Portanto, esta série temporal apresenta tendências de sazonalidade.
  • Outro exemplo, vamos pensar que cortamos uma vez todos os dias durante 1 ano. Como você acha, não haverá um cenário como o número seis que aparece principalmente na temporada de verão ou o número cinco aparece principalmente em janeiro. Portanto, essa série cronológica não apresenta tendências de sazonalidade.

Estacionariedade de uma série temporal


  • Existem três critérios básicos para uma série temporal compreender se é uma série estacionária ou não.
  • As propriedades estatísticas das séries temporais, como média e variância, devem permanecer constantes ao longo do tempo para chamar séries temporais como estacionárias.
  • Média constante
  • Variação constante
  • Autocovariância que não depende do tempo. Autocovariância é covariância entre séries temporais e séries temporais defasadas.
  • Permite visualizar e verificar a tendência de sazonalidade de nossas séries temporais.



  • Como você pode ver no gráfico acima, nossas séries temporais apresentam variações sazonais. No verão, a temperatura média é mais alta e no inverno a temperatura média é mais baixa a cada ano.
  • Agora vamos verificar estacionário de séries temporais. Podemos verificar a estacionariedade usando os seguintes métodos:
 - Plotting Rolling Statistics: Temos uma janela, digamos que o tamanho da janela é 6 e, em seguida, encontramos a média e a variação do rolamento para verificar estacionário.
 - Teste Dickey-Fuller: Os resultados do teste incluem uma estatística de teste e alguns valores críticos para os níveis de confiança das diferenças. Se a estatística do teste for menor que o valor crítico, podemos dizer que as séries temporais são estacionárias.



  • Nosso primeiro critério para estacionário é a média constante. Portanto, falhamos porque a média não é constante, como você pode ver no gráfico (linha preta) acima. (não estacionário)
  • O segundo é a variação constante. Parece constante. (sim estacionário) O terceiro é que, se a estatística do teste for menor que o valor crítico, podemos dizer que a série temporal é estacionária. Vamos olhar: test statistic = -1.4 and critical values = {'1%': -3.439229783394421, '5%': -2.86545894814762, '10%': -2.5688568756191392}. Test statistic is bigger than the critical values. (no stationary)          
  • Como resultado, temos certeza de que nossa série temporal não é estacionária.
  • Vamos deixar séries temporais estacionárias na próxima parte.

Tornar uma série temporal estacionária?


  • Como mencionamos anteriormente, há duas razões por trás da não estacionariedade das séries temporais

          - Tendência: média variável ao longo do tempo. Precisamos de média constante para séries                     estacionárias.
          - Sazonalidade: variações em horário específico. Precisamos de variações constantes para                      séries estacionárias

  • Primeiro resolva o problema de tendência (média constante)

         - O método mais popular é a média móvel.
         - Média móvel: temos janelas que levam a média ao longo da amostra 'n' passada. 'n' é o                          tamanho da janela.


  • Critérios médios constantes: a média parece constante, como você pode ver no gráfico (linha preta) acima. (é estacionário)
  • O segundo é a variação constante. Parece constante. (é estacionário)
  • A estatística do teste é menor que os valores críticos de 1%, portanto, podemos dizer com 99% de confiança que se trata de uma série estacionária. (é estacionário)
  • Atingimos séries temporais estacionárias. No entanto, vamos analisar mais um método para evitar tendência e sazonalidade.
  • Método de diferenciação: é um dos métodos mais comuns. A ideia é que tenham diferença entre séries temporais e séries temporais alteradas.



  • Critérios médios constantes: a média parece constante, como você pode ver no gráfico (linha preta) acima. (é estacionário)
  • O segundo é a variação constante. Parece constante. (é estacionário)
  • A estatística do teste é menor que os valores críticos de 1%, portanto, podemos dizer com 99% de confiança que se trata de uma série estacionária. (é estacionário)

Previsão de uma série temporal


  • Aprendemos dois métodos diferentes, que são métodos móveis de média e diferenciação, para evitar problemas de tendência e sazonalidade
  • Para previsão (previsão), usaremos as séries temporais ts_diff resultantes do método de diferenciação. Não há razão para eu apenas escolher.
  • O método de previsão também é o ARIMA, que é a média móvel integrada auto-regressiva.
  • AR: Auto-regressivo (p): os termos de AR são apenas defasagens na variável dependente. Por exemplo, digamos que p seja 3, usaremos x (t-1), x (t-2) e x (t-3) para prever x (t)
  • I: Integrado (d): Esse é o número de diferenças não sazonais. Por exemplo, no nosso caso, consideramos a diferença de primeira ordem. Então passamos essa variável e colocamos d = 0
  • MA: Médias Móveis (q): os termos MA são erros de previsão atrasados ​​na equação de previsão.
  • (p, d, q) são parâmetros do modelo ARIMA.
  • Para escolher os parâmetros p, d, q, usaremos dois gráficos diferentes.
  • Função de autocorrelação (ACF): Medição da correlação entre séries temporais e versão atrasada das séries temporais.
  • Função de autocorrelação parcial (PACF): mede a correlação entre as séries temporais e a versão defasada das séries temporais, mas após eliminar as variações já explicadas pelas comparações intermediárias.



  • Duas linhas pontilhadas são os intervalos de confiança. Usamos essas linhas para determinar os valores de 'p' e 'q'
  • Escolhendo p: o valor do atraso no qual o gráfico PACF cruza o intervalo de confiança superior pela primeira vez. p = 1.
  • Escolhendo q: o valor do atraso no qual o gráfico ACF cruza o intervalo de confiança superior pela primeira vez. q = 1.
  • Agora vamos usar (1,0,1) como parâmetros dos modelos ARIMA e prever
  • ARIMA: da biblioteca de estatísticas
  • datetime: vamos usá-lo índices de início e de fim do método de previsão


Plot usando Pyplot


Vamos prever e visualizar todo o caminho e encontrar o erro médio quadrático


Conclusão


  • Neste tutorial, é pretendido falar sobre o ARIMA e fazer algumas visualizações antes dele.
  • Aprendemos como fazer gráficos de mapas com pyplot.
  • Aprendemos como fazer previsões de séries temporais.

Se você tiver alguma dúvida, aconselhamento ou feedback, ficarei muito feliz em ouvi-lo.

Todo o script está disponível em :
https://github.com/NelsonZyon/Data-Science/blob/master/Analise_Preditiva_de_Series_Temporais_Python

O notebook pode ser acessado e compilado no meu Kaggle:
https://www.kaggle.com/nelsonpereira/an-lise-preditiva-de-series-temporais-python/notebook

Os Dados estão disponíveis em:
https://drive.google.com/open?id=1NK1hr9JOq4I7guDT48m26pHgwxneAT5B

Não esqueça de interagir com o blog, comentando no artigo.


Referências:


Time Series Prediction
ARIMA






Comentários

Postagens mais visitadas deste blog

Tutorial de Machine Learning com Python - Iniciantes - Parte 1

Regressão Múltipla com R

Tutorial de Machine Learning com Python - Iniciantes - Parte 2