Como criar janelas móveis de séries temporais usando o Python

O que são Janelas Móveis?

Em séries temporais, nada é estático. Uma correlação pode existir apenas em um período específico, e uma média pode variar de um dia para outro. O conceito de janelas móveis consiste em aplicar funções a um subconjunto de dados com largura fixa (ou variável), deslocando a janela ao longo do tempo.

Para obter o código e o tutorial deste exercício faça parte do Clube AM e receba toda semana os códigos em R/Python, vídeos, tutoriais e suporte completo para dúvidas.

Como Funciona?

Lembre-se: uma série temporal é um conjunto de observações ordenadas no tempo, com uma frequência específica. O IPCA, por exemplo, é um índice de inflação medido mensalmente no Brasil, ou seja, suas observações ocorrem a cada mês.

Transformações de séries temporais são comuns. O IPCA, por exemplo, pode ser analisado como um índice simples ou convertido em variação mensal e interanual. Um cálculo importante é a variação acumulada em 12 meses, que considera os últimos 12 valores, removendo o mais antigo conforme uma nova observação entra. Esse é um exemplo clássico de janela móvel.

Outro exemplo é a média móvel de 200 dias, amplamente usada em finanças. Ela calcula a média dos preços de uma ação nos últimos 200 dias úteis, ajudando a identificar tendências de longo prazo.

Para que Servem as Janelas Móveis?

As janelas móveis são úteis para diversos propósitos, como:

  • Identificar a tendência central ao longo do tempo (média, mediana)
  • Medir a volatilidade (desvio-padrão, variância)
  • Detectar mudanças de tendência (médias móveis rápidas vs. lentas)
  • Analisar a relação entre duas séries temporais (covariância, correlação)

Tipos de Janelas Móveis

Existem diferentes formas de lidar com janelas móveis, sendo as duas mais comuns:

Janelas Móveis Cumulativas:

Acumulam os valores ao longo do tempo, expandindo a janela conforme novas observações são adicionadas.

Janelas Móveis Expandidas

Janelas Móveis Constantes:

Mantêm um tamanho fixo, removendo a observação mais antiga à medida que uma nova entra.

Janelas Móveis Fixas

A partir desses tipos de janelas móveis, podemos aplicar diversas funções estatísticas e cálculos, como a inflação acumulada em 12 meses. Agora, veremos como implementar janelas móveis no Python com exemplos do mercado financeiro.

Cálculos com Janelas Móveis

Vamos calcular a seguinte métrica:

  • Correlação móvel dos retornos (variações percentuais) dos preços de fechamento de ações brasileiras.

Para isso, utilizaremos a biblioteca pytimetk, que facilita a aplicação de janelas móveis em séries temporais. Nos próximos passos, veremos como implementar o cálculo na prática.

Passos para Calcular a Correlação Móvel no Python

Para aplicar janelas móveis no mercado financeiro, seguimos os seguintes passos:


1. Importação dos Dados de Preços de Fechamento

Os dados financeiros podem ser obtidos de fontes como openbb ou yfinance. Esses dados geralmente vêm no formato OHLCV (Open, High, Low, Close, Volume) e podem incluir um preço ajustado (corrigido para desdobramentos). Neste tutorial importamos dados dos tickers VALE3, MGLU3 e ^BVSP (Ibovespa).


2. Tratamento dos Dados

Para calcular janelas móveis com pytimetk, organizamos os dados com três propriedades essenciais:

  • Timestamp: Frequência diária, horária, etc.
  • Valor: Preço ou retorno do ativo.
  • Grupos: Símbolos das ações.

Além disso, é necessário calcular os retornos percentuais dos preços de fechamento antes de aplicar as janelas móveis.


3. Criação das Janelas Móveis

Utilizamos a função tk.augment_expanding_apply() e tk.augment_rolling_apply() do pytimetk para calcular a Correlação móvel entre os retornos das ações. A primeira computa a janela móvel cumulativa, enquanto a segunda calcula a janela móvel fixa.


4. Visualização dos Dados

Após o cálculo das métricas, geramos gráficos para entender o comportamento das séries ao longo do tempo.


Nos próximos passos, implementamos cada etapa no código.

1. Importação dos Dados de Preços de Fechamento

<class 'pandas.core.frame.DataFrame'>: 3675 rows of 8 columns
Date:       datetime64[ns]    [Timestamp('2020-01-02 00:00:00'), Timesta ...
Ticker:     object            ['MGLU3.SA', 'VALE3.SA', '^BVSP', 'MGLU3.S ...
Adj Close:  float64           [115.01505279541016, 32.831024169921875, 1 ...
Close:      float64           [115.34874725341797, 54.33000183105469, 11 ...
High:       float64           [115.34874725341797, 54.439998626708984, 1 ...
Low:        float64           [111.5606918334961, 53.75, 115649.0, 112.9 ...
Open:       float64           [112.94029235839844, 53.97999954223633, 11 ...
Volume:     int64             [3164766, 17509700, 5162700, 2858647, 1728 ...

2. Tratamento dos Dados

Calculamos a variação percentual da coluna de preço de fechamento (pct_change()) com o DataFrame no formato wide. Essa variação percentual mensal é os que chamamos de retorno.

Ticker Date MGLU3.SA VALE3.SA ^BVSP
1 2020-01-03 -0.008920 -0.007362 -0.007304
2 2020-01-06 0.000818 -0.005934 -0.007043
3 2020-01-07 -0.002861 0.007275 -0.001848
4 2020-01-08 0.030744 0.000185 -0.003557
5 2020-01-09 0.035594 -0.013146 -0.002581

E para os dados em formato long:

Date Ticker returns
0 2020-01-03 MGLU3.SA -0.008920
1 2020-01-06 MGLU3.SA 0.000818
2 2020-01-07 MGLU3.SA -0.002861
3 2020-01-08 MGLU3.SA 0.030744
4 2020-01-09 MGLU3.SA 0.035594

3. Criação das Janelas Móveis

Correlação Móvel

A correlação móvel calcula a correlação entre duas séries temporais dentro de uma janela deslizante de tamanho especificado, movendo-se um período por vez. Na análise de ações, isso é frequentemente utilizado para avaliar:

  • Diversificação: Ajuda a identificar como diferentes ações se movem em relação umas às outras, auxiliando na construção de um portfólio diversificado.
  • Dependência do Mercado: Mede o grau de correlação de uma ação ou setor com um índice de mercado mais amplo.
  • Gestão de Riscos: Permite identificar mudanças na estrutura de correlação ao longo do tempo, algo essencial para a avaliação e o gerenciamento de riscos.

Por exemplo, se a correlação móvel entre duas ações começa a aumentar, isso pode indicar que elas estão sendo influenciadas por fatores ou condições de mercado semelhantes.

Vamos aplicar a correlação móvel no Python. O primeiro passo será criar um DataFrame para aplicar o cálculo. Consiste em ter duas colunas de retornos e grupos em formato long, e para isso, juntamos com o dataframe em formato wide.

Date Ticker returns comp returns_comp
0 2020-01-03 MGLU3.SA -0.008920 MGLU3.SA -0.008920
1 2020-01-06 MGLU3.SA 0.000818 MGLU3.SA 0.000818
2 2020-01-07 MGLU3.SA -0.002861 MGLU3.SA -0.002861
3 2020-01-08 MGLU3.SA 0.030744 MGLU3.SA 0.030744
4 2020-01-09 MGLU3.SA 0.035594 MGLU3.SA 0.035594

Agora, calculamos as correlações móveis utilizando tk.augment_expanding_apply() para janelas expansivas e tk.augment_rolling_apply() para janelas fixas, agrupando os dados por Ticker com groupby.

Como temos dados diários (dias úteis), vamos computar a correlação móvel em 66 dias úteis (3 meses).

Janela Expandida

Date Ticker returns comp returns_comp expanding_corr
0 2020-01-03 MGLU3.SA -0.008920 MGLU3.SA -0.008920 NaN
1 2020-01-06 MGLU3.SA 0.000818 MGLU3.SA 0.000818 NaN
2 2020-01-07 MGLU3.SA -0.002861 MGLU3.SA -0.002861 NaN
3 2020-01-08 MGLU3.SA 0.030744 MGLU3.SA 0.030744 NaN
4 2020-01-09 MGLU3.SA 0.035594 MGLU3.SA 0.035594 NaN

Janelas Móveis Expandidas da Correlação entre retornos de ações

Janela Fixa

Date Ticker returns comp returns_comp rolling_corr_win_66
0 2020-01-03 MGLU3.SA -0.008920 MGLU3.SA -0.008920 NaN
1 2020-01-06 MGLU3.SA 0.000818 MGLU3.SA 0.000818 NaN
2 2020-01-07 MGLU3.SA -0.002861 MGLU3.SA -0.002861 NaN
3 2020-01-08 MGLU3.SA 0.030744 MGLU3.SA 0.030744 NaN
4 2020-01-09 MGLU3.SA 0.035594 MGLU3.SA 0.035594 NaN

 

Janelas Móveis Fixas da Correlação entre retornos de ações

Considerações

Neste tutorial aprendemos, através do framework do pytimetk a como computar janelas móveis utilizando como exemplo a correlação entre ações de empresas brasileiras.

Quer aprender mais?

Conheça nossa Formação do Zero à Análise de Dados Econômicos e Financeiros usando Python e Inteligência Artificial. Aprenda do ZERO a coletar, tratar, construir modelos e apresentar dados econômicos e financeiros com o uso de Python e IA.

Referencias

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

O que são Agentes de IA?

O que é um agente e como ele funciona? Como agentes tomam decisões usando racioncínio e planejamento? Neste artigo, nosso objetivo é investigar estas questões para construir um conhecimento fundamental sobre AI agents.

As diferentes formas de avaliar o erro de um modelo de previsão

Existem tantas siglas para métricas de desempenho de modelos preditivos que é fácil se perder na sopa de letrinhas. Neste artigo, fornecemos uma visão geral das principais métricas para avaliar e comparar modelos de regressão e classificação, usando exemplos com dados em Python.

Previsão do CPI usando text mining

Exploramos neste exercício, de forma similar a Ferreira (2022), a utilidade de tópicos latentes extraídos dos comunicados do FOMC, por um modelo LDA, na previsão da inflação norte-americana, medida pelo CPI. O objetivo é comparar um modelo econométrico simples, tal como um AR-GAP de Faust e Wright (2013), em especificações com e sem os fatores textuais.

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.