Calculando matriz de transição para as decisões do COPOM em Python

milton-rocha
5 min readJul 20, 2022

--

Creio que muitos já devem ter ouvido falar sobre as matrizes de transição, cadeias de Markov ou algo que o valha. Já é bem disseminado e descrito por diversos autores o que significa, utilizarei aqui duas definições apresentadas por Blume et. al. (2004), primeiro, a definição de um processo estocástico e, posteriormente, a definição do Processo de Markov. Adicionalmente, compartilharei a definição de estado atrator, que se provará necessária.

“Um processo estocástico é uma regra que dá a probabilidade com que o sistema (ou um indivíduo deste sistema) estará no estado i no período n+1, sabendo as probabilidades com que esteve nos vários estados em períodos anteriores” — Blume et. al. (2004) p.617

“Um processo estocástico é denominado Processo de Markov se a probabilidade com que o sistema está no estado i no período n+1 depende somente do estado em que o sistema esteve no período n; para processos de Markov, só interessa o passado imediato” — Blume et. al. (2004) p.617

“A análise é um pouco diferente se a matriz de Markov subjacente não é regular. Por exemplo, se existir um estado i tal que m_ij = 1, de modo que uma vez que o sistema alcança o estado i ele nunca mais o abandona, dizemos que tal estado i é um estado atrator” — Blume et. al. (2004) p.618

Resumindo, um processo estocástico trata da probabilidade de transição de um sistema ou indivíduo, para outro estado, dado uma sequência de estados com probabilidades individuais, que foi visto anteriormente. O Processo de Markov nada mais é do que um processo estocástico particular no qual o estado seguinte depende tão somente do estado anterior.

COPOM e o Processo de Markov

Existe um paper local que analisa as propriedades das reuniões do COPOM e a possibilidade de suas decisões poderem ser descritas por um Processo de Markov, ou seja, as decisões dependem, essencialmente, somente da última decisão, e não do caminho completo das decisões até aquele instante.

Refiro-me aqui ao paper “Impacto das Reuniões do Copom no Preço de Opções de Índice de Taxas de Juros (IDI)”, escrito por Silva e Takarabe (2015), no, já extinto (uma pena), Resenha da Bolsa, publicado em Agosto/2015.

Como é discutido no paper, utilizando como base outro paper famoso, Genaro e Avellaneda (2013), as reuniões do COPOM de fato parecem ter uma parte relevante da informação contida na decisão imediatamente anterior à de análise, ou seja, a decisão de COPOM(t) é o que mais impacta na decisão de COPOM(t+1).

Tal fato é justificado por dois pontos essenciais:

(1) No Brasil, existe persistência das decisões de política monetária, ou seja, em caso de alta anterior, bem provavelmente a próxima reunião será uma alta

(2) Não existe forte relação entre DI Over e decisões do COPOM, ao se construir um modelo com decisão do COPOM em função do DI

Recomendo fortemente a leitura do paper até o seu modelo de precificação de opções de IDI com base na metodologia por Markov, além de interessantíssimo demonstra precisão muito boa.

Descrevendo brevemente o mecanismo

Aqui não farei uma revisão de processos de Markov, entretanto recomendo um resumo espetacular consolidado por um professor da Universidade de Auckland, disponível neste link. E, também, uma excelente aula fornecida pelo Outspoken Market no Youtube.

A matriz de transição que abordarei aqui terá a soma de suas linhas com valor igual a 1 (100%), ou seja, será a transposição da apresentada no paper de Silva e Takarabe (2015).

A sua composição, portanto, será visualizada como:

1. Matriz de transição

Desta forma, nas linhas serão apresentadas as decisões em t (ou, equivalentemente, t-1) e nas colunas serão apresentadas as decisões em t + 1 (t).

Exemplo: Para o caso da probabilidade P(d_1, d_2), a probabilidade se refere à transição do estado d_1 (atual, t) para o estado d_2 (posterior, t+1).

Buscando os dados

Primeiramente é essencial conseguir compilar os dados de decisões do COPOM de forma que seja possível ter uma tabela com todas as decisões de forma automática e que esteja sempre atualizada com as últimas decisões do comitê. O mecanismo aqui escolhido é o de request via api do BCB, com resposta em json e posterior tratamento.

As reuniões estão distribuídas da mais nova para a mais antiga, ou seja, em ordem inversa de cronologia de decisão. Desta forma, as decisões sempre serão a subtração do elemento na linha i pela linha i-1, de forma que a linha de baixo sempre será a taxa base, se comparado com a linha i.

Neste código disponibilizo como única variável a data de filtro, que nada mais é do que uma data de corte para a análise dos dados, por padrão escolho 01/01/2010 como sendo o corte, pois reduz a possibilidade de decisões somente ao range [-100bps;+150bps].

Construindo o modelo

O modelo, portanto, irá se utilizar dos valores presentes na coluna ‘Decisão (bps)’ que o último código gera, para calcular as probabilidades de cada par de decisões e, consequentemente, a matriz de transição para o COPOM.

Matriz de transição utilizando-se de dados de decisões à partir de 2010

Nota-se que nesta matriz não existe nenhum estado trator, ou seja, em que a probabilidade de ocorrência é de 100% no par. Entretanto, caso seja utilizado algum outro filtro de datas, estados atratores aparecerão, principalmente caso sejam considerados momentos do começo dos anos 2000, em que decisões de magnitudes extremas foram presenciadas.

Heatmap da matriz de transição

Funcionalidade

Implementei no modelo uma funcionalidade interessante, caso o usuário tenha criado o objeto TransitionMatrixCOPOM (obj), existem duas formas de visualização da matriz de transição:

  • obj._transition_matrix : retornará as colunas e índices como valores, em string, das decisões do COPOM
  • obj.transition_matrix : retornará as colunas e índices como nome de decisão, caso > 0, Alta {X} bps, caso = 0, Manutenção, caso < 0, Corte {X} bps.

Outra função interessante é a obj.probability_pair(‘decisão_1, decisão_2’). Esta função retorna a probabilidade de ocorrência de um par, em formato de string e fornecido com uma vírgula separando os dados.

Além disso, o usuário poderá calcular a probabilidade de execução de um caminho específico de juros inserindo estes valores na função obj.path_probability([decisão_1, decisão_2, …, decisão_3]).

O cálculo será feito mediante aplicação de potência na matriz de transição pelo número indicado de passos que foram dados, posteriormente a função irá ver qual a probabilidade de transição para a decisão final dado o estado inicial.

Referências Bibliográficas

Simon, C. P., Blume, L., & Doering, C. I. (2004). Matemática para economistas. Bookman.

Silva e Takarabe (2015). Impacto das Reuniões do Copom no Preço de Opções de Índice de Taxas de Juros (IDI). Resenha da Bolsa Ago/2015

Guerra, Leandro. Introdução — Cadeias de Markov (Markov Chains) — Outspoken Market. Disponível no Youtube, no canal Outspoken Market

--

--