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

Inflação de Serviços vs. Desemprego

A teoria econômica convencional sugere a presença de um trade-off entre inflação e desemprego no curto prazo, comumente conhecido como a Curva de Phillips. Em

Modelo de previsão para grupos do IPCA

Neste artigo investigamos se a previsão desagregada da inflação é capaz de gerar previsões mais acuradas do que a previsão agregada. Utilizamos o Índice Nacional de Preços ao Consumidor Amplo (IPCA) como medida de interesse, aplicando um modelo simples e um modelo de passeio aleatório para comparação. Todo o processo pode ser feito de maneira automatizada utilizando a linguagem de programação R.

Text mining dos comunicados do FOMC: prevendo mudanças na política

Como quantificar sentimentos e emoções a partir de comunicados de política monetária? Neste exercício utilizamos os statements do FOMC para construir um índice de sentimentos, o que permite comparar a "narrativa" com a prática da política monetária, ou seja, mudanças da taxa de juros. Também avaliamos se tal índice é útil em prever mudanças de política através do teste de causalidade de Granger.

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.