Estacionaridade em Séries temporais e sua implicação no Mercado de Ações
Em meus estudos, tenho me aprofundado em conceitos fundamentais de séries temporais, essenciais para análises financeiras robustas. Um dos conceitos-chave é a estacionaridade dos dados.
O que é estacionaridade?
Uma série temporal é dita estacionária se suas propriedades estatísticas, como média e variância, não mudarem ao longo do tempo. Em termos simples, uma série temporal estacionária tem um comportamento previsível e não apresenta tendências ou sazonalidades.
Tipos de estacionaridade
2. Estacionaridade Estrita:
Por que a estacionáridade é importante?
A estacionaridade é crucial para modelagem de séries temporais porque muitos modelos estatísticos como ARIMA e GARCH assumem que as séries temporais são estacionárias. Modelos preditivos funcionam melhor com séries estacionárias, pois suas propriedades estatísticas são constantes ao longo do tempo, tornando as previsões mais confiáveis.
Aplicações ao mercado
No mercado de ações, os preços frequentemente exibem comportamentos não estacionários devido a tendencias de longo prazo e volatilidade variável. Entretanto, ao modelar retornos de ações (a diferença percentual no preço de fechamento de um dia para outro), podemos frequentemente transformar a série em estacionária
Exemplo em python
Vamos criar uma série temporal com dados sínteticos e verificar sua estacionaridade e transformá-la em uma série estacionária. Para isso vamos utilizar o código a seguir:
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
# Gerando uma série temporal não estacionária com tendência
np.random.seed(42)
n = 1000
time = np.arange(n)
trend = 0.05 * time
y_non_stationary = trend + np.random.normal(0, 1, n)
# Plotando a série temporal não estacionária
plt.figure(figsize=(12, 6))
plt.plot(time, y_non_stationary, label='Série Não Estacionária')
plt.title('Série Temporal com Tendência')
plt.xlabel('Tempo')
plt.ylabel('Valor')
plt.legend()
plt.show()
# Testando a estacionaridade com o teste de Dickey-Fuller aumentado (ADF)
result = adfuller(y_non_stationary)
print(f'Estatística ADF: {result[0]}')
print(f'P-valor: {result[1]}')
Com isso obtemos o gráfico a seguir:
E também os seguintes dados:
O teste ADF é usado para verificar a presença de uma raiz unitária na série temporal. A presença de uma raiz unitária indica que a série temporal não é estacionária
Recomendados pelo LinkedIn
Hipóteses do teste ADF
Hipótese Nula(H0): A série temporal tem uma razi unitária (não é estacionártia).
Hipótese Alternativa (HA): A série temporal não tem um raiz unitária (é estacionária)
Interpretação do p-valor
P-valor Alto(geralmente maior que 0.05): Não rejeitamos a hipótese nula. Isso significa que não temos evidências suficientes para concluir que a série e estácionária. Portanto, aceitamos que a série tem uma raiz unitária e não é estacionária
P-valor Baixo (geralmente menor que 0.05): Rejeitamos a hipótese nula. isso significa que temos evidências suficientes para concluir que a série é estacionária:
Interpretação do p-valor: O valor de 0.9178 é maior que 0.05, o que indica que não rejeitamos a hipótese nula. Portanto, aceitamos que a série tem uma raiz unitária e não é estacionária.
Estatística ADF: A estatística ADF de -0,3521 é maior que os valores críticos para os níveis de significância comuns (por exemplo, -3,42; -2,86;-2,57 para 1%, 5% e 10%, repesctivamente), o que também sugere que não podemos rejeitar a hipótese nula.
Conclusão
Os resultados do teste ADF indicam que a série temporal original não é estacionária. Isso é consistente com a visualização da série temporal, que mostra uma tendência clara ao longo do tempo.
Próximo passo
Para lidarmos com a não estacionáridade, aplicamos a diferenciação, que é uma técnica comum para transformar séries temporais não estacionárias em estacionárias. Após a diferenciação podemos repetir o teste ADF para verificar se a série transformada é estacionária. Para isso usaremos o código a seguir:
y_stationary = np.diff(y_non_stationary)
# Plotando a série temporal estacionária
plt.figure(figsize=(12, 6))
plt.plot(time[1:], y_stationary, label='Série Estacionária')
plt.title('Série Temporal Estacionária (Após Diferenciação)')
plt.xlabel('Tempo')
plt.ylabel('Valor')
plt.legend()
plt.show()
# Testando a estacionaridade novamente com o teste ADF
result = adfuller(y_stationary)
print(f'Estatística ADF: {result[0]}')
print(f'P-valor: {result[1]}')
Com o código acima obtemos o seguinte gráfico:
E repetindo o teste ADF obtemos os seguintes resultados:
Conclusão
P-valor: O p-valor de 4.855088788145436e-21 (aproximadamente 0) é menor que 0.05, o que indica que rejeitamos a hipótese nula. Portanto, temos evidências suficientes para concluir que a série temporal diferenciada é estacionária
Estatísica ADF: A estatística ADF de -11.4863 é menor que os valores críticos para os níveis de significância comuns (por exemplo, -3,43; -2,86;-2.67 para 1%, 5% e 10% respectivamente), o que também sugere que podemos rejeitar a hipótese nula
Ou seja, os resultados do teste ADF para a série temporal diferenciada indicam que a série é estacionária. Isso é consistente com a aplicação da diferenciação que é uma técnica comum para transformar séries temporais não estacionárias em estacionárias como já mencionadado.
Para finalizar
Entender e aplicar o cocneito de estacionaridade é fundamental para análises de séries temporais e previsões financeiras eficazes. Transformar séries não estacionárias em estacionárias permite utilizar modelos preditivos com maior precisão, proporcionando inisghts valiosos no mercado de ações.
Espero que tenham gostado do artigo, pois eu estou realmente adorando estudar esse conteúdo envolvendo o mercado financeiro.