Estacionariedade de Séries Temporais no Python: testes ADF e KPSS

Uma série é estacionária quando média, variância e autocovariância não mudam no tempo — condição para qualquer modelo de previsão. Neste tutorial em Python, coletamos seis séries econômicas brasileiras (Ibovespa, IPCA, câmbio, Selic e mais) e aplicamos os testes ADF e KPSS para decidir, com evidência, quais são estacionárias e quais precisam ser diferenciadas ou destendenciadas.

Uma série temporal é estacionária quando sua média, sua variância e sua autocovariância não mudam ao longo do tempo. Saber se uma série é estacionária é o primeiro passo antes de estimar qualquer modelo de previsão — e no Python você verifica isso com dois testes: o ADF (Augmented Dickey-Fuller) e o KPSS (Kwiatkowski-Phillips-Schmidt-Shin).

Neste tutorial mostramos, do conceito à prática, como testar a estacionariedade de séries econômicas brasileiras. Coletamos seis séries reais (Ibovespa, retornos da Ibovespa, IPCA, taxa de desocupação, câmbio e Selic), inspecionamos cada uma visualmente e aplicamos os dois testes para decidir, com evidência estatística, quais são estacionárias e quais precisam de tratamento.

Séries econômicas brasileiras mensais de 2012 a 2026 — Ibovespa, retornos, IPCA, desocupação, câmbio e Selic — usadas para testar estacionariedade no Python
Seis séries econômicas brasileiras mensais (2012–2026). Fontes: Banco Central do Brasil (SGS) e Yahoo Finance.

Só de olhar já dá para intuir muita coisa. O câmbio e o nível do Ibovespa sobem sem voltar ao ponto de partida (têm tendência); os retornos da Ibovespa e o IPCA oscilam em torno de um patamar fixo (parecem estacionários). Mas a inspeção visual não fecha a questão, e para decidir com segurança aplicamos os testes formais.

Quer reproduzir esta análise?

O script completo em Python (coleta as seis séries via API do Banco Central e do Yahoo Finance, gera o painel de gráficos e roda os testes ADF e KPSS em todas elas) vai para os assinantes do Boletim AM. Assine, é gratuito, e receba o código pronto para rodar no seu e-mail.

Assinar o Boletim AM e receber o código →

O que é estacionariedade e por que ela decide tudo

Uma série temporal é uma sequência de observações ordenadas no tempo: a taxa de desocupação de um mês depende da do mês anterior, e embaralhar os dados destruiria a informação que a ordem carrega. A estacionariedade descreve como as propriedades estatísticas dessa sequência se comportam ao longo do tempo.

Na prática, usamos a estacionariedade fraca: a série é estacionária se a média é constante em todos os instantes e se a autocovariância entre duas observações depende só da distância entre elas, não do momento em que ocorrem. A estacionariedade forte é mais rigorosa (exige que toda a distribuição seja invariante no tempo), mas raramente é necessária para modelar.

Quase todo modelo de série temporal pressupõe estacionariedade. Um ARIMA, uma regressão entre séries, um teste de causalidade: todos assumem estrutura estatística estável. Rodar esses modelos numa série não estacionária gera relação espúria, com coeficientes que parecem significativos mas só refletem duas tendências caminhando juntas por acaso.

Séries com tendência (um movimento persistente de alta ou baixa) ou sazonalidade (um padrão que se repete a cada período) não são estacionárias, porque fazem o valor esperado mudar conforme o momento. No extremo oposto está o ruído branco (white noise): uma série sem memória, de média zero e variância constante, que mantém sempre a mesma cara. A maioria das séries econômicas nasce entre esses dois extremos.

Raiz unitária: o que os testes procuram

A raiz unitária é a marca formal da não estacionariedade. Uma série tem raiz unitária quando choques do passado não se dissipam: eles se acumulam permanentemente no nível da série, empurrando média e variância ao longo do tempo. O passeio aleatório (random walk), em que o valor de hoje é o de ontem mais um choque, é o exemplo clássico.

Testar raiz unitária é, portanto, testar estacionariedade. E o método deste tutorial segue quatro etapas, todas em Python:

📥

1. Coletar
IPCA, desocupação, câmbio e Selic pela API do Banco Central; Ibovespa pelo Yahoo Finance.

🧹

2. Tratar
Alinhar as séries pelas datas numa única tabela mensal e calcular os retornos da Ibovespa.

👁️

3. Inspecionar
Plotar as seis séries em painéis para uma primeira leitura visual da tendência e do ruído.

🧪

4. Testar
Aplicar ADF e KPSS com a biblioteca statsmodels e cruzar os dois resultados.

Os dois testes: ADF e KPSS

Usamos dois testes porque eles se complementam: partem de hipóteses nulas opostas, e cruzar as respostas reduz a chance de conclusão errada.

Teste ADF (Augmented Dickey-Fuller)

O ADF tem como hipótese nula que a série contém raiz unitária (é não estacionária). A regra é direta: se o p-valor for menor que 0,05, rejeitamos a nula e concluímos que a série é estacionária. Aplicado ao IPCA, o teste devolve um p-valor praticamente igual a zero:

Teste ADF — IPCA Valor
Estatística de teste −7,144
p-valor 0,0000
Valor crítico (1%) −3,469
Valor crítico (5%) −2,879
Valor crítico (10%) −2,576

A estatística (−7,14) é bem menor que o valor crítico a 1% (−3,47) e o p-valor é praticamente nulo. Rejeitamos a hipótese nula: pelo ADF, o IPCA é estacionário.

Teste KPSS (Kwiatkowski-Phillips-Schmidt-Shin)

O KPSS é o espelho do ADF: a hipótese nula é que a série é estacionária. A leitura, portanto, inverte. Se o p-valor for maior ou igual a 0,05, não rejeitamos a nula e concluímos que a série é estacionária. No IPCA:

Teste KPSS — IPCA Valor
Estatística de teste 0,123
p-valor 0,100
Valor crítico (5%) 0,463
Valor crítico (1%) 0,739

A estatística (0,123) é bem menor que o valor crítico a 5% (0,463) e o p-valor (0,10) está acima de 0,05. Não rejeitamos a hipótese nula: pelo KPSS, o IPCA também é estacionário. Os dois testes concordam — e é quando eles concordam que a conclusão é firme.

Como combinar os dois testes: os quatro cenários

Como as hipóteses são opostas, o cruzamento das duas respostas gera quatro cenários. Sempre aplique os dois testes e leia a combinação:

  • Ambos indicam não estacionária → a série não é estacionária.
  • Ambos indicam estacionária → a série é estacionária (o caso do IPCA).
  • KPSS diz estacionária, ADF diz não → a série é tendência-estacionária: basta remover a tendência (uma regressão contra o tempo) para torná-la estacionária.
  • KPSS diz não, ADF diz sim → a série é estacionária na diferença: basta diferenciá-la (subtrair de cada valor o anterior) para torná-la estacionária.

Os casos 3 e 4 não são becos sem saída — são receitas de tratamento. Eles dizem exatamente o que fazer para deixar a série pronta para modelagem.

O resultado nas seis séries brasileiras

Aplicando os dois testes a todas as séries, os quatro cenários aparecem nos dados reais:

Série ADF (p-valor) KPSS (p-valor) Veredito
Ibovespa (pontos) 0,9954 0,0100 Não estacionária
Retornos mensais da Ibovespa 0,0000 0,1000 Estacionária
IPCA (variação % mensal) 0,0000 0,1000 Estacionária
Taxa de desocupação (%) 0,5547 0,0744 Tendência-estacionária
Câmbio (R$/US$) 0,4800 0,0100 Não estacionária
Selic (% a.m.) 0,1546 0,1000 Tendência-estacionária

Testes ADF e KPSS nas seis séries. Fontes: BCB (SGS) e Yahoo Finance. Amostra: mar/2012–mai/2026.

  • Retornos da Ibovespa e IPCA são estacionários. Os dois testes concordam — prontos para modelar como estão.
  • Nível do Ibovespa e câmbio são não estacionários. A tendência é visível no gráfico e confirmada pelos testes: precisam ser diferenciados antes de qualquer modelo.
  • Desocupação e Selic são tendência-estacionárias. Caem no caso 3 — têm ciclos longos, mas oscilam em torno de uma trajetória removível. Basta retirar a tendência.

As ferramentas por trás

Logo do Python
Python — a linguagem que reúne coleta, tratamento, gráfico e teste estatístico num só fluxo. Aqui usamos statsmodels para os testes ADF e KPSS.
Logo do Banco Central do Brasil
Banco Central (SGS) — a fonte de IPCA, desocupação, câmbio e Selic, acessada pela biblioteca python-bcb. Os preços da Ibovespa vêm do yfinance (Yahoo Finance).

Considerações finais

Pular o teste de estacionariedade é o que enche uma análise de série temporal de armadilhas: modelos que ajustam bem no papel e erram feio fora da amostra. Com algumas dezenas de linhas de Python e dados públicos, você reproduz aqui o que até pouco tempo exigia software estatístico pago e conhecimento restrito: coletar séries reais, inspecioná-las e decidir, com evidência, quais precisam de tratamento antes de virar um modelo.

O Python é a ferramenta certa para isso porque reúne, num único ambiente, a coleta (via APIs do Banco Central e do Yahoo Finance), o tratamento dos dados e o teste estatístico. O mesmo caminho de sempre, de coletar a testar, se repete em quase todo problema de dados econômicos e financeiros. O que muda é quem usa e para quê:

  • Economistas: garantem que modelos de inflação, câmbio e atividade partem de séries tratadas, evitando regressões espúrias.
  • Analistas de dados: automatizam o diagnóstico de estacionariedade antes de qualquer previsão, em vez de decidir no olho.
  • Gestores e traders: distinguem uma série com memória (que pode reverter à média) de um passeio aleatório (que não), decisão central para estratégias quantitativas.
  • Profissionais de risco e atuária: validam premissas estatísticas de séries de perdas, juros e sinistros antes de modelá-las.

Dominar a linguagem dá acesso a todas essas frentes com uma ferramenta só.

Você viu como funciona; agora aprenda a construir

A Formação Do Zero à Análise de Dados Econômicos e Financeiros ensina a coletar, tratar, modelar e prever séries como as deste tutorial usando Python e inteligência artificial, mesmo para quem nunca programou. Quem quer acesso a todas as formações tem o AM Black, a assinatura anual.

Conheça a formação →Ver o AM Black →

Leia também:

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print
Análise Macro © 2011 / 2026

comercial@analisemacro.com.br – Rua Visconde de Pirajá, 414, Sala 718
Ipanema, Rio de Janeiro – RJ – CEP: 22410-002

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp