Otimização de investimentos com Inteligência Artificial
Utilizando paridade de risco hierárquica para montar uma carteira.
Texto escrito por: Lucas Leme Santos.
O código do projeto está no Google Colab
Otimizar é um conceito natural do ser humano. Queremos otimizar nosso tempo, nossa produtividade, nossa vida. E por que não: Otimizar nossos investimentos?
Otimização de investimentos é o processo de selecionar a melhor composição de carteira de ativos possível. Não existe carteira perfeita, mas a elaboração de estratégias que maximizem retornos a um dado risco é a prioridade dos investidores modernos. Embora essa ideia pareça simples, apenas na metade do século passado Harry Markowitz desenvolveu um algoritmo — A Fronteira Eficiente — que permite a otimização de investimentos.
O maior pressuposto desse algoritmo é que investidores são avessos a risco. Então, dada uma carteira com um certo nível de retorno esperado, a combinação dos ativos com o menor risco possível será a escolhida pelo investidor. Sob essa premissa, investidores só realizarão operações financeiras de alto risco se puderem esperar altíssimos ganhos.
A maldição da fronteira eficiente
Algoritmos de otimização como Markowitz são muito sensíveis a pequenas variações nas entradas do modelo, e esses pequenos erros podem resultar em grandes diferenças nas alocações de uma carteira ideal.
Um objeto fundamental para o encontro da fronteira eficiente é a matriz de covariâncias. Com ela é possível analisar as correlações entre todos os ativos e estimar o risco da carteira.
Matrizes de covariâncias são muito complexas para serem analisadas pois levam em conta toda a composição da carteira. Isso significa que erros na entrada do modelo acabam afetando o portfólio como um todo. Uma matriz de covariâncias também pode ser visualizada como um grafo totalmente conectado:
Para reduzir a complexidade do grafo o ideal é eliminar conexões entre ativos pouco correlacionados e focar apenas nas relações relevantes. Para isso pode-se utilizar uma estrutura topológica conhecida como árvore. Tal estrutura além de reduzir a interferência de erros de estimativa, melhora significativamente a interpretação do grafo.
Caso queira saber mais detalhes a respeito da maldição da fronteira eficiente leia o apêndice no fim do texto.
Hierarchical risk parity
O Hierarchical Risk Parity (HRP) é um algoritmo de otimização de portfólios desenvolvido por Marcos Lopez de Prado. Esse otimizador combina teoria de grafos e machine learning para construir uma carteira diversificada com soluções estáveis.
O HRP pode ser dividido em 3 grandes passos:
- Hierarchical Tree Clustering: Processo de agrupamento de ativos semelhantes utilizando inteligência artificial.
- Matrix Seriation: Reorganização de linhas e colunas da matriz de covariança.
- Recursive Bisection: Atribuição de pesos dos ativos.
Hierarchical Tree Clustering
Nesta etapa, iremos aplicar uma técnica de aprendizado não supervisionado que é a clusterização hierárquica. Esse tipo de algoritmo visa construir agrupamentos (clusters) segundo um métrica de semelhança entre os dados.
Para isso iremos realizar a aquisição dos preços históricos, para montar uma carteira para ser otimizada. Caso queira saber mais sobre aquisição e análise de dados financeiros, leia nosso texto:
A clusterização hierárquica será realizada sobre os retornos históricos do ativos da carteira. Para efetuar essa operação temos dois principais hiperparâmetros: método e métrica.
Método: Algoritmo utilizado para a clusterização, iremos utilizar ‘ward’ que computa os agrupamentos a partir de suas variâncias.
Métrica: Tipo de medida que avalia a semelhança entre os dados, iremos utilizar a distância euclidiana.
Apenas a partir dos retornos históricos, o algoritmo conseguiu identificar e segmentar diversos setores do mercado:
- Renda Fixa: Selic
- Fundos de investimentos: Constellation, ARX Income FIA.
- Setor bancário: Bradesco e Itaú
- Fundos imobiliários: HGLG11 e KNRI11
- Setor de telefonia: Tim e Vivo
Matrix Seriation
No artigo original, essa técnica é mencionada como Quasi-Diagonalization. Com a utilização de aprendizado não supervisionado essa técnica pode ser simplificada em um Matrix Seriation, que é um método estatístico de reordenação de matrizes.
O objetivo dessa etapa é preparar a matriz de covariâncias para a atribuição de pesos. Utilizando os clusters gerados na etapa anterior, podemos recombinar as linhas e colunas da matriz de covariância, a fim de que ativos semelhantes estejam posicionados proximos.
Recursive Bisection
Essa é a última e mais importante etapa do algoritmo, momento no qual os pesos serão atribuídos. A matriz de covariâncias gerada na etapa de Seriation é fundamental, pois ela será utilizada para realizar a iteração nos nós do grafo do dendograma. O algoritmo pode ser representado pelos seguintes passos:
1) Inicialização dos pesos
Todos os ativos recebem peso igual a 1.
2) Iteração entre os nós da árvore
Com a matriz de covariâncias, percorre-se a árvore selecionando os sub-clusters e sub-matrizes respectivos. O objetivo é realizar a diversificação de pesos entre ativos semelhantes.
Olhando o dendograma do passo 1 pode-se exemplificar um hipotético par de carteiras:
Carteira 1: Fundos de investimentos. Que são compostos por 2 ativos, ou seja, tem uma matriz de covariâncias V1, com dimensão 2 x 2.
Carteira 2: Setor bancário. Que também é composta por 2 ativos, resultando em uma matriz de covariâncias V2.
3) Atribuição de pesos pares
Com o objetivo de calcular o risco de cada cluster, iremos atribuir pesos temporários para os ativos do cluster. Dado que cada cluster tem uma matriz de covariâncias (Vi), podemos calcular os pesos da seguinte forma:
4) Determinação das volatilidades
A partir da fórmula clássica de volatilidade de um portfólio:
5) Aplicação do fator de peso absoluto
O fator de alocação funciona como uma fator de escala entre a sub-carteira e a carteira completa.
O fatores de alocação tem um valor entre 0 e 1.
O ativos presentes nas sub-carteiras, que foram inicializados com 1, terão seus valores atualizados pelos fatores de alocação.
6) Repetição dos passos 2 a 5 para todos os clusters gerados
Backtesting da otimização
E na prática? Como essa estratégia performaria no passado?
Essas são as perguntas que queremos responder com o backtesting. Vale ressaltar que rentabilidade passada, não é garantia de rentabilidade futura. Porém ao simular uma estratégia de investimento, podemos obter boas informações de como a estratégia performaria em diversos cenários. Além de analisar a performance, o backtesting é importante para comparação entre diferentes estratégias.
Em nosso backtesting, iremos comparar 3 otimizadores de investimento:
- Equal Weight: Alocação de carteira que atribui peso igual para todos os ativos.
- Markowitz: A Fronteira eficiente, algoritmo clássico de otimização.
- HRP: Hierarchical risk parity, otimizador que utiliza machine learning e teoria de grafos.
O princípio da estratégia aqui utilizada é simples: mensalmente rebalancear a carteira com os otimizadores citados acima.
Segundo o gráfico de rentabilidades, podemos perceber que o hierarchical risk parity teve a melhor performance. Os principais destaques estão no “bull market” de 2019, e no período pós crise da COVID-19 em 2020. Tais resultados não implicam que o hierarchical risk parity é melhor que o Markowitz. Mas sim, que em períodos conturbados, o HRP consegue processar melhor as informações do mercado.
Em períodos de grande volatilidade, os dados tendem a ter um menor grau de confiança. A fronteira eficiente por considerar a correlação entre todos os dados, com muito erros de estimativa, tende a convergir em uma solução não ótima. Fato que pode ser observado no período pós crise, momento no qual o Markowitz performou pior que os outras duas estratégias.
Conclusão
Nesse texto conseguimos estudar mais um algoritmo de otimização de investimentos, que é o HRP. Ele utiliza inteligência artificial e teoria de grafos para lidar com erros de estimativas dos dados de entrada. O HRP utiliza apenas dados do passado para otimizar sua carteira: e se adicionássemos previsões de dados com machine learning? Isso fica para um próximo Turing Talks…
Não deixe de acompanhar o Grupo Turing no Facebook, Linkedin, Instagram e nossos posts do Medium =)
Bons estudos e até a próxima!
Apêndice: A maldição da fronteira eficiente
Utilizando multiplicadores de Lagrange podemos expressar essa instabilidade: O objetivo e a restrição de uma otimização podem ser matematicamente definidos da seguinte maneira:
Calculando as condições de primeira ordem com derivadas parciais chegamos na seguinte solução para a otimização:
E o principal problema que podemos destacar é a necessidade da inversão da matriz de covariânças (V). Para exemplificar considere uma carteira com apenas 2 ativos:
A partir do determinante da matriz podemos perceber que quanto mais correlacionados são os ativos da carteira, maior é a chance da inversa ter valores extremos. E portanto as soluções da otimização não convergem. Para solucionar esse problema o HRP estima os pesos da carteira sem a necessidade de uma otimização clássica.