De modo a estabelecer benchmarks comuns para a área, este projeto reproduz duas arquiteturas consideradas relevantes para a área e um algoritmo de treinamento específico que alcança bons resultados na modelagem utilizada pelo ambiente de simulação. Essas reproduções farão parte do FinRL quando o processo de revisão for finalizado.
Arquiteturas
A primeira arquitetura reproduzida faz uso de convoluções para retirar padrões das diversas séries temporais contidas no estado do agente, que é uma matriz de dimensões (f, n, t), sendo f o número de features, n o número de ações e t o tamanho da série temporal. Note que as restrições do vetor portfólio são satisfeitas pelo uso da função softmax.
A imagem acima foi retirada deste trabalho.
A segunda arquitetura é uma melhoria da primeira ao utilizar as ideias de redes neurais do tipo inception, em que convoluções com kernels de diferentes tamanho fazem o agente aprender trends do mercado de curto a longo prazo. O estado é análogo ao caso do EIIE, mas utilizou-se uma notação diferente: (f, m, n).
A imagem acima foi retirada deste trabalho.
Algoritmo
O algoritmo reproduzido é classificado como policy gradient, ou seja, um algoritmo que encontra a melhor política de ações do agente (que precisa ser uma rede neural) por meio das experiências com o ambiente de simulação. Nesse algoritmo, tem-se o propósito de se maximizar uma função-objetivo, que neste caso, é calculada pelo lucro do agente em certo período e, dessa forma, espera-se que o agente possa obter ganhos em alguns cenários mas não seja bem preparado para lidar com situações voláteis.
A imagem a seguir mostra os detalhes de como o algoritmo funciona. Este algoritmo foi uma adaptação do algoritmo introduzido neste trabalho e mais detalhes sobre ele podem ser encontrados na monografia deste projeto.
Instalação
Estas arquiteturas e algoritmos serão integrados ao FinRL, de modo que bastará instalar o FinRL para ter acesso a estes recursos. Mas como essa integração ainda está em processo de revisão, uma forma de acessar essas ferramentas é instalar esta versão modificada do FinRL mantida por mim, que já contém os recursos.
Clone o repositório da versao modificado do FinRL.
Acesse o repositório local clonado.
Rode o comando pip install . para instalar a biblioteca.
Esta versão modificada do FinRL inclui também o ambiente de simulação desenvolvido.
Utilização
Ambiente de simulação
É necessário que o algoritmo tenha acesso a um ambiente de simulação como o desenvolvido neste trabalho. O ambiente utilizado pode ser qualquer um, desde que possua a mesma interface baseada no Gymnasium. Caso queira utilizar o POE como ambiente de simulação, basta importá-lo e fazer algo como:
Para entender mais o que significa esta instanciação, acesse este link.
Instanciação do modelo
A instanciação do modelo segue o padrão do FinRL. Nesse padrão, os parâmetros do algoritmo são definidos por meio de um dicionário de keyword arguments. As chaves desse dicionário devem ter o mesmo nome dos parâmetros que existem no construtor da classe do algoritmo que se deseja utilizar.
Definidos os parâmetros, é possível instanciar o modela por meio da função get_model passando o nome "pg", sigla de policy gradient. Veja o exemplo abaixo.
É possível modificar também parâmetros da arquitetura usando um outro dicionário, da seguinte forma:
Treinando e testando
Para treinar o modelo, basta utilizar a função DRLAgent.train_model. E para testar o ambiente, utilizamos a função DRLAgent.DRL_validation. Veja o exemplo abaixo, em que um agente é treinado em um ambiente de treino e testado em um ambiente de testes.
Ao final de cada episódio, métricas de desempenho serão exibidas na tela e o treinamento poderá ser acompanhado.