O objetivo
deste artigo é trazer um entendimento sobre o que se trata o modelo GARCH e
apresentar uma aplicação em python deste modelo para a previsão de
volatilidade. Vamos começar compreendendo como o modelo surgiu e como se
destaca em comparação às outras formas de estimar a volatilidade. Em seguida,
vamos explicar as propriedades do modelo GARCH(1,1) que será utilizado em nossa
aplicação. Por fim, iremos demonstrar como montar a aplicação do modelo em
python.
A motivação
para este artigo foi a relevância que a volatilidade possui atualmente para os
estudos de previsão de riscos. Um dos momentos de reconhecimento da importância
de se mensurar o efeito da volatilidade ao longo do tempo na análise de riscos,
ocorreu quando Robert Engle recebeu o Prêmio Nobel de Economia em 2003, por
desenvolver um método estatístico para lidar com esta propriedade das séries
econômicas. A Academia Real Sueca de Ciências afirmou que:
“Os
modelos ARCH de Engle se tornaram ferramentas indispensáveis não apenas para
pesquisas, mas também para analistas do mercado financeiro, que os utilizam na
formação de ativos e na avaliação de risco de portfólio”.
Por que utilizar o Modelo GARCH para modelagem da volatilidade?
Uma mudança na variância ou volatilidade ao longo do tempo pode causar problemas na modelagem de séries temporais com métodos clássicos. Pois, um aspecto de uma série temporal que esses modelos não captam é uma alteração na variância ao longo do tempo, devido ao fato de que nesses modelos as observações recentes receberiam o mesmo peso que observações mais antigas, que claramente podem não possuir o mesmo impacto ao longo do tempo que uma vez tiveram.
É por isso que métodos de estimativa de volatilidade evoluíram para modelos que dão mais peso às informações recentes. Desses primeiros modelos se destacam a família de modelos GARCH, inicialmente proposto por Engle (1982), como ARCH, e generalizado por Bollerslev (1986). Esses métodos fornecem uma maneira de modelar uma mudança na variância de uma série temporal dependente do tempo.
A principal diferença entre eles seria o fato de que enquanto o modelo ARCH(q) demonstra que a variância condicional, ou volatilidade, σt2, em um determinado período, depende da magnitude de uma série de retornos ao quadrado (ou erros quadráticos), rt2, em “q” períodos anteriores, o modelo GARCH(p,q) vai além com componente adicional, sendo este a variância condicional em “p” períodos anteriores. A seguir a equação da variância condicional definida pelo modelo ARCH(q):
O
modelo GARCH (p,q) possui um termo autorregressivo, como em ARCH(q),
com a adição de um termo de média móvel. O termo autorregressivo (p) modela
a variância condicional dos erros quadráticos ou simplesmente modela a
variância condicional da série temporal ao quadrado, já a parte de média móvel
(q) modela a variação do processo. A seguir a equação da variância
condicional definida pelo modelo GARCH(p,q):
Outro motivo relevante para se usar o modelo GARCH, é que ele pode capturar a aglomeração da volatilidade, ou clusters de volatilidade, sofrida por séries financeiras. Os preços dos ativos são caracterizados por esse fenômeno, que se trata de períodos nos quais os preços exibem grandes variações para um longo período seguido por um período de tranquilidade comparativa.
Existem hoje muitas variantes do modelo GARCH, a maioria das quais fornece apenas melhorias marginais no modelo original. Entre essas extensões do modelo GARCH, estão o Integrated GARCH, Exponential GARCH ou EGARCH, GJR-GARCH e outras. A família de modelos GARCH é amplamente utilizada na prática para prever a volatilidade e os retornos do mercado financeiro.
O modelo
Para a maioria das séries financeiras, a utilização do modelo GARCH(1,1) já é suficiente para explicar sua volatilidade, desta forma, para a aplicação que será demonstrada mais a frente, utilizaremos este modelo. Para explicar o modelo, inicialmente consideramos rt como uma série de retornos, partindo disso o modelo GARCH(1.1) é definido como:
A equação acima demonstra que o modelo contém um termo defasado de retorno ao quadrado, rt-12, como em ARCH(1), mas também um termo defasado da variação condicional, σt-12, para determinar a variação condicional no período t, σt2.
O termo alfa, α, indica quanto o último retorno observado tem de influência sobre a variância condicional hoje, já o termo beta, β, indica quanto a volatilidade do período anterior deve influenciar a volatilidade hoje. Quanto maior o alfa maior o impacto imediato de choques nos dados da série temporal e quanto maior o beta maior a duração do impacto. Para a estimação dos parâmetros, é utilizado o método de máxima verossimilhança.
Uma propriedade este modelo é que todos os parâmetros não são negativos, ω, α, β ≥ 0. Para que o modelo seja estacionário, a soma dos parâmetros alfa e beta deve ser menor que um, α + β < 1.
Ômega, ω, pode ser a visto como seria a variação se as informações sobre variações passadas não estivessem sendo passadas para o modelo. Ômega também é definido como o produto de um termo gama, γ, e da variância incondicional ou variância de longo prazo, σLR. Enquanto ômega, alfa e beta são os parâmetros de volatilidade do modelo, gama pode ser chamado de parâmetro de assimetria do modelo.
A equação acima nos mostra que, para existir a variância incondicional de rt2, é necessário que α + β < 1, justificando a restrição de estacionariedade do modelo. É utilizada a expressão a seguir para se estimar um valor para a variância condicional em um período t+i, em outras palavras, está é a fórmula para prever a volatilidade dos próximos períodos.
Utilizaremos o log-retorno devido a suas propriedades
estatísticas, como a estacionariedade, para calcular os retornos da série
temporal.
A aplicação em Python
A estimação dos parâmetros e o cálculo para prever a volatilidade serão feitos a seguir, utilizaremos o ambiente do Google Colab e a cotação do dólar será o nosso objeto de estudo.
Inicialmente temos que instalar e importar os pacotes que iremos utilizar:
#Instalação e importação dos pacotes para os buscar os dados e as funções do modelo
!pip install quandl
!pip install arch
import quandl as qdl
from arch import arch_model
#Importação de bibliotecas matemáticas e de ciência de dados
import numpy as np
import pandas as pd
#Pré definição das configuração dos gráficos
import seaborn as sns
sns.set()
import matplotlib as mpl
mpl.rcParams[‘figure.figsize’] = (15, 5)
Utilizamos o pacote quandl para buscar os dados das cotações do dólar.
#Definição dos dados
dolar = qdl.get(‘BCB/1’, start_date = ‘2000-01-01’)
#Visualização do gráfico das cotações
dolar.rename(columns={“Value”: “USD”}, inplace=True)
dolar.plot()
#Visualização do gráfico dos retornos
dolar_ret = np.log(dolar/dolar.shift(1)).dropna()
dolar_ret.plot()
Para esta análise será necessário padronizar os retornos, subtraindo-os de sua média esperada e dividindo pelo seu desvio padrão.
#Padronização dos retornos
dolar_m = dolar_ret.values.mean()
dolar_dp = dolar_ret.values.std()
dolar_ret_p = (dolar_ret – dolar_m)/dolar_dp
Para estimar um modelo do tipo GARCH, selecionamos a função arch_model do pacote arch instalado anteriormente. A função arch_model pode especificar um modelo GARCH em vez do modelo ARCH se informamos o modelo de volatilidade a ser utilizado, especificando o seguinte argumento da função vol = ‘GARCH’, assim como os argumentos de defasagem p=1 e q=1 para determinar um modelo GARCH(1,1):
#Aplicação do Modelo GARCH(1,1) aos dados e vizualização dos resultados
garch_model = arch_model(dolar_ret_p, p=1, q=1, vol=‘GARCH’, dist=‘Normal’)
resultados = garch_model.fit(disp=‘off’)
print(resultados.summary())
#Previsão da volatilidade
resultados_forecast = resultados.forecast(horizon=5)
print(resultados_forecast.variance[-1:])
Cada coluna
“h.n” da saída da previsão corresponde a n d períodos a frente, neste caso n
dias a frente. A saída é alinhada para que a coluna “Date” represente os dados
finais usados para gerar a previsão, de modo que “h.1” na linha “2020-05-29”
seja a previsão da volatilidade condicional esperada de um dia à frente, feita
usando dados até 29 de meio de 2020.
O gráfico hedgehog a seguir mostra os métodos de previsão ao longo do período analisado.
As linhas laranja indicam as previsões em diferentes intervalos de tempo.
#Visualização do gráfico hedgehog
g_previsões = resultados.hedgehog_plot()
Python Guide for Introductory Econometrics for Finance | Ran Tao & Chris Brooks
Value at Risk: Managing Financial Risk | Philippe Jorion
GARCH Models in Python | Chelsea Yang
Forecast volatility with GARH(1,1) | https://youtu.be/oDXw0r0Oqmk
Quandl Data to Python | https://www.quandl.com/tools/python
Link para visualizar a programação no Google Colab
https://colab.research.google.com/drive/1cDbLT0vHapiaOqT1ACrTnGfWTqb16xm6?usp=sharing