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

Como choques inflacionários afetam a previsão da Selic?

Como mensurar a importância de choques na inflação sobre o erro de previsão da taxa de juros? Neste exercício quantificamos esta pergunta sob a ótica de um modelo VAR, usando dados recentes da macroeconomia brasileira. Especificamente, estimamos a decomposição da variância dos erros de previsão do modelo, analisando choques na inflação da gasolina e sua importância sobre a variância dos erros de previsão da taxa Selic.

Modelo de previsão para o preço da gasolina

Neste exercício exploramos os dados públicos sobre o preço da gasolina no Brasil, sua composição, evolução temporal, políticas associadas e, por fim, construímos um modelo simples de previsão. Com um modelo em mãos, o analista pode cenarizar o comportamento futuro da série da forma como preferir. Todos os procedimentos foram feitos usando a linguagem de programação Python.

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.