Tutorial do modelo autorregressivo vetorial em Python
Autores: Bruno Golfette e Maisa Kely de Melo
Objetivos do arquivo:
- Compreender a fórmula do vetor autorregressivo
- Verificar se as séries influenciam-se mutuamente usando o Teste de Granger
- Aprender o procedimento para construir um modelo VAR no Python
- Aprender a determinar a ordem do modelo VAR
- Interpretar os resultados do modelo VAR
- Voltar os valores previstos para a escala original da série temporal
Modelo autorregressivo vetorial (VAR) é um algoritmo de previsão usado quando duas ou mais séries influenciam-se mutuamente. Na prática, é um modelo de regressão que trata todas as variáveis como endógenas e permite que cada uma delas dependam de p valores de lags passados, esses valores são da própria série e das outras séries.
Os requerimentos básicos para usar o VAR são:
- Haver pelo menos duas séries
- As série devem influenciar uma na outra
- As séries devem ser estacionárias
Matematicamente
Um modelo autorregressivo vetorial de ordem p é um processo que pode ser representado como:
- yt é um vetor Nx1 que contém N variáveis endógenas
- variáveis endógenas são determinadas dentro do modelo → representam a saída do modelo
- a0 é um vetor Nx1 de constantes
- A1,A2,…,Ap são matrizes pNxN de coeficientes autorregressivos
- ut é um vetor Nx1 que representa um ruído branco
Passo a passo para construir o modelo VAR:
- Analisar as características da série
- Verificar se as séries influenciam uma a outra
- Verificar se as séries são estacionárias
- Se as séries não forem estacionárias, torná-las estacionárias
- Encontrar a ordem do VAR (p)
- Separar a base de dados em: treinamento e teste
- Treinar o modelo
- Fazer as previsões
- Fazer uma transformação para voltar as previsões à escala original
- Plotar as previsões versus os dados reais
- Analisar os resultados obtidos
Pacotes necessários
Base de dados
Neste artigo usamos preços de fechamentos diários de cinco ativos da B3 para o período 04/01/2016 a 31/01/2018
Ativos utilizados:
- MRVE3: MRV Engenharia
- ENBR3: Energias BR
- CMIG4: Cemig
- EQTL3: Equatorial Energia
- LREN3: Lojas Renner
PASSO 1: Visualização das séries temporais
Observação
- As séries temporais indicam algum tipo de relação entre os dados.
- A forma linear do gráfico de lags sugere que o VAR é mesmo a melhor escolha.
PASSO 2: Teste de Causation usando o teste de Granger
Este teste responde à pergunta:
As séries influenciam uma a outra?
- Teste de causalidade de Granger verifica todas as possíveis combinações das séries temporais.
- As linhas são as variáveis resposta.
- As colunas são os preditores.
- Os valores na tabela são os p-valores.
- Hipótese Nula: os coeficientes dos valores correspondentes passados são zero (X não influencia Y)
- p-valores menores que 0.05 (nível de significância) implicam que a Hipótese Nula pode ser rejeitada.
- data: Dataframe em pandas contendo as séries temporais
- variables: Lista contendo os nomes das variáveis das séries temporais (nome dos ativos)
Como ler os resultados acima?
- Considere o valor 0.0006 (linha 1, coluna 5).
- Este é o p-valor que analisa se MRVE3 influencia LREN3.
- Como 0.0006<0.05, segue que rejeita-se a Hipótese Nula, ou seja, é verdade que MRVE3 influencia LREN3.
- Este influenciar está relacionado com ter alta correlação.
- O ideal é que todos os p-valores sejam menores que 0.05, porque neste caso, a série é totalmente correlacionada e isto é ideal para o modelo VAR.
PASSO 3: Teste de Cointegração de Johansen
O teste de cointegração de Johansen verifica se as séries são cointegradas.
- Duas séries xt e yt podem ser passeios aleatórios.
- Mas a combinação linear entre elas xt-cyt pode não ser um passeio aleatório.
- Quando esta situação acontece:
- xt-cyt é previsível
- xt e yt são ditas ser cointegradas.
- Por isso, cointegração implica que xt e yt compartilham tendências estocásticas semelhantes.
- Como sua diferença é estacionária, elas nunca divergem muito uma da outra.
- Isso significa que elas comovimentarão no longo prazo, pois a combinação linear delas é reversível a média.
- Esta é uma premissa básica utilizada pelo VAR.
Interpretando o Teste de Johansen
Hipótese Nula: As séries temporais são não cointegradas
Hipótese Alternativa: A hipótese nula é falsa
Rejeita-se a hipótese nula quando a estatística do teste for maior que o valor crítico.
Como no nosso teste todos os valores para as estatísticas do teste foram menores que o valor crítico, ao nível de significância de 5% não é possível rejeitar a hipótese nula.
Portanto, as séries temporais são cointegradas.
PASSO 4: Separação dos dados em:
- Dados de treinamento
- Dados de teste
PASSO 5: Teste de Adfuller
Verifica se cada série é estacionária
Essa verificação é realizada pelo teste Augmented Dickey-Fuller Test (ADF Test)
- Note que todas as séries são não estacionárias.
- Então é preciso realizar a primeira diferença em todas as séries
Aplica o teste de Adfuller novamente para verificar se as séries se tornaram estacionárias
- Todas as séries são estacionárias após a primeira diferença.
- Se alguma ainda não fosse estacionária, como o modelo VAR trabalha sempre com séries numéricas de um mesmo tamanho, se fosse feita a diferenciação apenas das séries não estacionárias, a base de dados ficaria com um tamanho diferente.
- Então, aconselha-se fazer a diferenciação da série de dados completa, até todas as séries serem estacionárias.
PASSO 6: Selecionando a ordem do modelo
- Para selecionar a ordem do modelo, faz-se o teste considerando ordens do modelo que variam de 1 a 9.
- A ordem ideal para o modelo é dada pelo valor do Lag Order que apresenta o menor valor do AIC.
Conclusão:
- Menor AIC: -12.5
- Correspondente a: Lag order = 1
- Portanto a ordem utilizada para o VAR será 1.
PASSO 7: Treinando o VAR com a ordem selecionada
PASSO 8: Teste de Durbin Watson
- O teste de Durbin Watson permite analisar se há alguma correlação deixada nos resíduos.
- Caso haja alguma correlação residual, isso significa que algum padrão das séries temporais ainda não foi explicado pelo modelo.
- Neste caso, os procedimentos adequados são:
- aumentar a ordem do modelo;
- induzir mais preditores no modelo;
- usar um algoritmo que diferente do VAR
Para interpretar os valores
- Os valores desta estatística podem variar entre 0 e 4.
- Quanto mais próximo de 2, significa que não há correlação entre os erros da série.
- Mais próximo de 0 significa que a correlação é positiva.
- Mais próximo de 4 significa que a correlação é negativa.
Conclusão do teste de Durbin Watson
- Como todas as estatísticas foram próximas a 2, não há correlação entre os erros da série
PASSO 9: Fazendo a previsão usando o VAR
- Para fazer a previsão é necessário forcener ao modelo VAR observações dos dados passados.
- A quantidade de dias passados é definida pelo número lag order, isto é, a quantidade de dias passados é dada pela ordem do modelo.
- Isto ocorre porque os termos do VAR model são definidos de acordo com os lags.
Dados de entrada para a previsão
Como a ordem do modelo é 1, será usado apenas um dia de dados passados, no caso, o dia mais recente da base de dados estacionária.
Fazendo as previsões
- Lembre-se que para tornar a série temporária estacionária, foi necessário fazer uma diferenciação.
- Ao realizar esta diferenciação, há uma alteração da escala original da série. * Para que possa ser realizada a comparação das previsões obtidas pelo VAR com os dados do teste, é necessário voltar as previsões para a escala original.
- Então, você precisa desfazer a diferenciação a quantidade de vezes que você fez a diferenciação.
- Neste caso, é necessário uma vez.
PASSO 10: Transformando as previsões para a escala original
- Pronto! Agora as previsões estão na escala original.
- Vamos fazer a comparação.
PASSO 11: Plota Previsões x Dados reais
PASSO 12: Analisando os resultados obtidos
PASSO 13: Parâmetros do modelo
Abaixo são obtidas:
- A matriz A1 que é a matriz de coeficientes que define o modelo VAR de ordem 1
- A matriz de covariância dos erros dos modelo
- Para cada dia de previsão, há uma matriz de covariância
Conclusão
Neste arquivo fizemos previsões de cinco ativos negociados na B3 utilizando um modelo VAR. Verificamos todas as hipóteses necessárias para aplicar o modelo VAR e as alterações que devem ser feitas quando as séries históricas não atendem aos requesitos. Fizemos a inversão para a escala original dos dados e plotamos as previsões versus os dados reais. Por fim, analisamos as medidas estatísticas dos valores previstos. Esperamos que este material tenha sido útil para você conseguir fazer suas próprias previsões.
Referências
https://www.machinelearningplus.com/time-series/vector-autoregression-examples-python/
https://www.sciencedirect.com/topics/economics-econometrics-and-finance/var-model
https://s3.amazonaws.com/assets.datacamp.com/production/course_4267/slides/chapter5.pdf
https://blog.quantinsti.com/johansen-test-cointegration-building-stationary-portfolio/
Download .ipynb
Para fazer o download do tutorial completo (incluindo base de dados), clique no link abaixo:
https://github.com/maisakmelo/Tutorial-modelo-autorregressivo-vetorial.git
Esperamos ter contribuído…