Como dessazonalizar uma série temporal no Python

Sazonalidade é definida como mudanças na série que são sempre fixas e o seu período de ocorrência é conhecido. É muito comum a aparição  desse padrão em séries econômicas e financeiras. No post de hoje, iremos mostrar os métodos para decompor uma série temporal com o Python.

Uma série temporal é definida como uma série de dados ou observações registradas em intervalos de tempos regulares (discretos) ou irregulares (contínuos). Em geral, definimos uma série temporal em sua forma discreta, com dados em intervalos bem definidos. A frequência de uma série pode ser em horas, dias, semanas, meses, trimestre ou anos.

Como uma série temporal é por observações no tempo, diversas variáveis econômicas e financeiras são partes desta área. O PIB de um país mede o crescimento econômico ao longo de trimestres ou anos. A inflação é medida em formato mensal. O preço de uma ação é observado no período de dias úteis ou mesmo de forma contínua no intra-diário.

Uma série temporal pode exibir uma variedade de padrões, e é comum separar a série em diferentes componentes, cada uma representando esse padrão. Esses componentes são:

Tendência (trend)

A tendência existe quando há um termo que mede inclinação da série, seja de forma crescente ou decrescente. É possível observar a tendência de forma linear, entretanto, é possível referi-la como ponto de mudança da série, de um ponto crescente para um decrescente

Sazonal (Seasonal)

Um padrão sazonal ocorre quando uma série temporal é afetada por efeitos sazonais como por exemplo a hora de um dia, dias semanas ou meses do ano. A sazonalidade de uma série é sempre fixa e o seu período de ocorrência é conhecido.

Ciclo (cyclic)

Um ciclo ocorre quando a série exibe subidas e quedas que não são fixas a uma frequência. Essas flutuações podem ocorrer por condições econômicas, conhecidas como ciclo econômico.

Série Temporal

Considerando uma série temporal com as observações ${Z_{t}, t = 1, ... , N}$ uma decomposição desses pontos no tempo consiste em escrever  Z_t como a soma ou multiplicação dos três componentes não observáveis acima - tendência, sazonalidade e ciclo.

Considere que T é o componente de tendência, S o componente de sazonalidade e R o termo residual.

Série Temporal Aditiva

Uma série aditiva é mais apropriada se a magnitude do componente sazonal ou a variação da tendência-ciclo, não varia com o nível do tempo da série.

 Z_t = T_t + S_t + R_t

Série Temporal Multiplicativa

Uma série multiplicativa é mais apropriada caso a variação do componente sazonal ou a variação da tendência-ciclo varia de forma proporcional ao nível da série temporal.

 $Z_t = T_t x S_t x R_t$

Decomposição

Agora que entendemos os componentes de uma série temporal, podemos passar a entender como podemos lidar com eles, principalmente o componente sazonal.

Como exemplo, iremos aplicar na série de concessão de crédito total, importada do Banco Central. Antes de dessazonalizar, iremos deflacionar a série.

Concessões Totais de Crédito

Observe no gráfico como fica claro entender os períodos de sazonalidade. Há claramente picos e declínios em períodos fixos da série. Ao lidarmos com essa série, seja para análise ou para modelagem, é necessário levarmos em conta esse aspecto.

Método Naive

O primeiro método é a possibilidade de extrair o componente sazonal da série por meio do método de médias móveis. Esse método é conhecido como "naive" e é o mais simples. É possível utiliza-lo com o método seasonal_decompose da biblioteca statsmodels.

Com o seasonal_decompose é possível escolher tanto o método multiplicativo, quanto o aditivo. O resultado será um objeto de classe statsmodels.tsa.seasonal.DecomposeResult, do qual será possível extrair os resultados com os atributos. Podemos utilizar .seasonal (para obter os valores sazonais) ou .resid, para obter o resultado da série sem a sazonalidade e a da tendência.

É possível visualizar os valores por meio do .plot()

STL

Outro método de decomposição útil para retirar a sazonalidade é o método STL, que utiliza o LOESS (regressão local) através do método STL do módulo statsmodels.tsa.seasonal. Utilizamos a função em conjunto com .fit() para obter seus valores.

x13-Arima Seats

Outro método mais robusto para extrair a sazonalidade de uma série é o x13-Arima Seats, criado pelo US Census Bureau. É possível utilizar o x13-Arima Seats no Python através do módulo statsmodels.tsa.x13.x13_arima_analysis, entretanto, é necessário instalar o programa do x13 e especificar a pasta do arquivo na função do módulo para a sua utilização, portanto, deixaremos para abordar esse método em outro post.

____________________________________

Quer saber mais?

Veja mais no nosso curso de Análise de Séries Temporais e no nossos cursos de Macroeconomia Aplicada.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise de impacto fiscal sobre o dolár com Python

Usamos uma cesta de 12 moedas para construir um cenário contrafactual da taxa de câmbio após o último anúncio de pacote fiscal, com base em modelagem Bayesiana. No período, o dolár depreciou quase 5% e passou os R$ 6,15, enquanto que na ausência da intervenção a moeda deveria estar cotada em R$ 5,78.

Resultado IBC-br - Outubro/2024

A Análise Macro apresenta os resultados da IBC-br de Outubro de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

Resultado PMC - Outubro/2024

A Análise Macro apresenta os resultados da PMC de Outubro de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.