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

Analisando séries temporais no Python e esquecendo de vez o Excel

Séries temporais representam uma disciplina extremamente importante em diversas áreas, principalmente na economia e na ciência de dados. Mas, afinal, como lidar com esses dados que se apresentam ao longo do tempo? Neste exercício, demonstraremos como compreender uma série temporal e como o Python se destaca como uma das melhores ferramentas para analisar esse tipo de dado.

Cálculo do Retorno Econômico de uma Política Pública

Como podemos traduzir os efeitos de uma política pública para valores monetários? Essa é uma tarefa árdua que requer algumas premissas, entretanto, com métodos bem definidos, é possível obter estimativas precisas dos ganhos e os gastos de uma política pública.

Neste exercício, demonstramos tal método usando a política hipotética "Mãe Paranense”, um conjunto de ações que visam reduzir a mortalidade materna e infantil no estado. Usamos a linguagem R como ferramenta para analisar os dados.

Simplificando análises de dados manuais do Excel usando o Python

Tratar e analisar dados no Excel pode ser um verdadeiro caos, mesmo que você precise fazer coisas simples como cruzar duas tabelas de dados. Uma solução melhor é o uso de scripts em Python, que possibilitam a automação de tarefas repetitivas e manuais. Neste artigo mostramos um exemplo simples, comparando o Excel versus Python.

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.