Quando a física encontra as finanças: usando a IA para resolver a equação de Black-Scholes

Veja como usar Redes Neurais Baseadas em Física para resolver modelos financeiros usando Python.

Aviso : Este texto não constitui aconselhamento financeiro. Sou doutor em Engenharia Aeroespacial com forte enfoque em aprendizado de máquina; não sou consultor financeiro. Este artigo tem como único objetivo demonstrar o poder das redes neurais informadas pela física (PINNs) em um contexto financeiro.

Quando eu tinha 16 anos, me apaixonei pela física. O motivo era simples, mas poderoso: eu acreditava que a física era justa.

Eu nunca cometi um erro em um exercício porque a velocidade da luz mudou da noite para o dia, ou porque e x poderia de repente se tornar negativo. Todas as vezes que eu lia um artigo de física e pensava: "Isso não parece fazer sentido", descobria que era eu quem não estava entendendo.

Portanto, a física é sempre justa e, por essa razão, é sempre perfeita . A física demonstra essa perfeição e justiça por meio de seu conjunto de regras, conhecidas como equações diferenciais.

A equação diferencial mais simples que conheço é esta:

É muito simples: começamos aqui, x₀ = 0, no instante t = 0, e então nos movemos a uma velocidade constante de 5 m/s. Isso significa que, após um segundo, estamos a 5 metros (ou milhas, se preferir) do ponto de partida; após dois segundos, estamos a 10 metros do ponto de partida; após 43128 segundos… Acho que você entendeu.

Como já dissemos, está escrito em pedra: perfeito, perfeito e indiscutível. No entanto, imagine isso na vida real. Imagine que você está caminhando ou dirigindo um carro. Mesmo que você se esforce ao máximo para manter uma velocidade alvo, nunca conseguirá mantê-la de forma consistente. Sua mente vai divagar em certos momentos; você pode se distrair, pode parar em semáforos vermelhos e, muito provavelmente, uma combinação de tudo isso. Portanto, a equação diferencial simples que mencionamos anteriormente pode não ser suficiente. O que podemos fazer é tentar prever sua posição na equação diferencial, mas com a ajuda da inteligência artificial . Esse conceito é crucial na modelagem de sistemas complexos.

Essa ideia é aplicada em redes neurais informadas pela física (PINNs). Descreveremos isso com mais detalhes adiante, mas o conceito básico é que tentamos ajustar os dados ao que sabemos a partir da equação diferencial que descreve o fenômeno. Isso significa que forçamos nossa solução a satisfazer, de forma geral, o que esperamos da física. Sei que isso soa como mágica, mas prometo que ficará muito mais claro ao longo deste artigo.

Agora, a grande questão:

 

O que finanças tem a ver com física e redes neurais baseadas em física?

Bem, acontece que as equações diferenciais não são úteis apenas para quem se interessa pelas leis do universo natural; elas também podem ser úteis em modelos financeiros . Por exemplo, o modelo de Black-Scholes usa uma equação diferencial para determinar o preço de uma opção de compra, com certas premissas rigorosas, para obter uma carteira livre de risco.

O propósito desta introdução tão complexa era duplo:

  • Te confundi um pouco, então você pode continuar lendo :)
  • Fique curioso o suficiente para ver onde tudo isso vai dar.

Espero ter conseguido 😁. Se fizer isso, o restante do artigo seguirá estas etapas:

  1. Nós discutiremos Modelo Black-Scholes, suas suposições e sua equação diferencial
  2. Nós vamos falar sobre Redes neurais baseadas em física (PINNs), de onde veio e por que é útil
  3. Desenvolveremos nosso próprio algoritmo que treina PINN em Black-Scholes usando Python و Tocha و OOP.
  4. Mostraremos os resultados do nosso algoritmo.

Estou animado! Para o laboratório! 🧪

1. Modelo Black-Scholes: um olhar aprofundado

 

Se você tiver interesse em ler o artigo original do modelo de Black-Scholes, pode encontrá-lo aqui . Definitivamente vale a pena ler 🙂

Muito bem, agora precisamos entender o mundo das finanças em que estamos inseridos, quais são as variáveis ​​e quais as regras que o regem. Compreender os fundamentos das finanças e sua relação com o modelo de Black-Scholes é crucial.

Primeiramente, no campo das finanças, existe um instrumento poderoso chamado opção de compra (call option ). Uma opção de compra lhe dá o direito (mas não a obrigação) de comprar uma ação a um preço específico no futuro (digamos, daqui a um ano), que é chamado de preço de exercício (strike price ).

Agora, vamos pensar nisso por um momento, certo? Suponha que o preço das ações hoje seja de US$ 100. Vamos supor também que possuímos uma opção de compra com preço de exercício de US$ 100. Agora, suponha que dentro de um ano o preço das ações suba para US$ 150. Isso é incrível! Podemos usar essa opção de compra para comprar as ações e depois vendê-las de volta imediatamente! Acabamos de obter um lucro de US$ 150 - US$ 100 = US$ 50. Por outro lado, se o preço das ações cair para US$ 80 em um ano, não podemos fazer isso. Na verdade, é melhor não exercermos nosso direito de compra, para não perdermos dinheiro.

Portanto, ao analisarmos a situação, a ideia de comprar uma ação e vender uma opção parece perfeitamente equilibrada . O que quero dizer é que a aleatoriedade do preço de uma ação (o fato de ela subir e descer) pode ser mitigada ao se manter o número correto de opções. Isso se chama hedge delta e é uma estratégia fundamental de gestão de risco.

Com base em um conjunto de premissas, podemos derivar um preço justo para uma opção , a fim de obter uma carteira livre de risco . Esse conceito é fundamental para o modelo de Black-Scholes.

Não quero aborrecê-lo com todos os detalhes da derivação (francamente, não é difícil acompanhar o artigo original), mas a equação diferencial para o portfólio sem risco é esta:

Nome:

  • C é o preço da opção no momento t
  • sigma É a volatilidade das ações.
  • r É a taxa livre de risco.
  • t é o tempo (com t=0 agora e T na data final)
  • S é o preço atual das ações

A partir dessa equação, podemos derivar o preço justo de uma opção de compra para um portfólio sem risco. A equação é fechada e analítica e se parece com isso:

Mais:

onde N(x) é a função de distribuição cumulativa (CDF) da distribuição normal padrão, K é o preço de exercício e T é a data de expiração.

Por exemplo, este é um gráfico do preço da ação (x) versus a opção de compra (y) , de acordo com o modelo de Black-Scholes.

Isso parece ótimo, mas o que isso tem a ver com física e PINN? A equação parece ser analítica, então por que PINN? Por que inteligência artificial? Por que estou lendo isso? A resposta está abaixo 👇:

 

2. Redes Neurais Informadas pela Física

 

Se você se interessa por Redes Neurais Informadas pela Física (PINNs), pode conferir o artigo original aqui . Vale a pena ler. 🙂

A equação acima é analítica , mas, novamente, representa um preço justo em um cenário ideal. O que acontece se ignorarmos isso por um momento e tentarmos estimar o preço da opção com base no preço da ação e no tempo? Por exemplo, poderíamos usar uma rede neural feedforward e treiná-la usando retropropagação. Essa abordagem constitui a base do uso de redes neurais na precificação de opções.

Neste mecanismo de treinamento, minimizamos o erro:

L = |Estimated C - Real C|:

Isso é bom e é a abordagem de rede neural mais simples que você pode fazer. O problema aqui é que ignoramos completamente a equação de Black-Scholes. Então, existe outra maneira? Podemos mesclá-los?

Claro que podemos, se definirmos o erro como:

L = |Estimated C - Real C|+ PDE(C,S,t)

onde PDE(C,S,t) é:

Deve ser o mais próximo possível de 0:

Mas a questão ainda permanece. Por que isso é “melhor” do que a simples equação de Black-Scholes? Por que não usamos simplesmente a equação diferencial? Bem, porque às vezes, na vida, resolver uma equação diferencial não garante a solução "verdadeira". A física geralmente aproxima as coisas e o faz de uma forma que pode criar uma diferença entre o que esperamos e o que vemos. É por isso que as redes neurais informadas pela física (PINNs) são uma ferramenta tão incrível e maravilhosa: você tenta corresponder à física, mas é rigoroso quanto ao fato de que os resultados devem corresponder ao que você "vê" no seu conjunto de dados. Essa integração do modelo físico e dos dados experimentais é o que distingue essa abordagem.

No nosso caso, pode ser que, para obter um portfólio livre de risco, descubramos que o modelo teórico de Black-Scholes não corresponde perfeitamente aos dados de mercado ruidosos, tendenciosos ou incompletos que observamos. Talvez a volatilidade não seja constante. Talvez o mercado não seja eficiente. Talvez as suposições por trás da equação não se sustentem. É aqui que uma abordagem como o PINN pode ser útil. Não apenas encontramos uma solução que satisfaz a equação de Black-Scholes, mas também “confiamos” no que vemos nos dados. Isso permite um modelo mais flexível e adaptável às condições reais do mercado.

Ok, chega de teoria. Vamos programar. 👨‍💻

 

3. Aplicação prática usando Python

Você pode encontrar o código completo, juntamente com um excelente arquivo README.md, uma planilha incrível e um código de benchmark muito claro, aqui . Este código foi projetado especificamente para resolver a equação de Black-Scholes usando redes neurais PINN, uma técnica avançada na área de modelagem financeira.

Observação: esta parte será um pouco intensiva (muito código) e, se você não estiver interessado em software, sinta-se à vontade para pular para o próximo capítulo. Vou mostrar os resultados de uma forma mais fácil :)

Muito obrigado por chegar até aqui ❤️
Vamos ver como podemos implementar isso. Vamos agora revisar como aplicar essa técnica para resolver equações de Black-Scholes, focando nos aspectos práticos e detalhados.

3.1 Arquivo Config.json

Todo o código pode ser executado usando um arquivo de configuração muito simples, que nomeei config.json.

Você pode colocá-lo em qualquer lugar que quiser, como veremos mais tarde.

Este arquivo é essencial, pois define todos os parâmetros que regem nossa simulação, geração de dados e treinamento do modelo. Deixe-me explicar rapidamente o que cada valor representa:

  • K: Preço de execução – O preço pelo qual a opção lhe dá o direito de comprar a ação no futuro.
  • T: Tempo até a data de vencimento, em anos. permissão T = 1.0 Isso significa que a opção expira em uma unidade (por exemplo, um ano) a partir de agora.
  • r: taxa de juros livre de risco Usado para descontar valores futuros. Esta é a taxa de juros que especificamos em nossa simulação.
  • sigma: flutuação O estoque, que determina o quão difícil é prever o preço do estoque ou o quão "arriscado" ele é. Novamente, este é um parâmetro de simulação.
  • N_data: número pontos de dados sintéticos que queremos criar para treinamento. Isso também determinará o tamanho do padrão.
  • min_S و max_S: Faixa de preço das ações Que queremos amostrar ao criar dados sintéticos. Nosso preço mínimo e máximo de ações.
  • bias: Compensação opcional adicionada aos preços das opções, para simular uma mudança sistemática nos dados. Isso é feito para criar um contraste entre o mundo real e os dados de Black-Scholes.
  • noise_variance: nível de ruído Adicionado aos preços das opções para simular ruído de medição ou de mercado. Este parâmetro é adicionado pelo mesmo motivo de antes.
  • epochs: número repetições no qual o modelo será treinado.
  • lr: taxa de aprendizagem Para o benfeitor. Isso controla a rapidez com que o modelo é atualizado durante o treinamento.
  • log_interval:O número de vezes (em termos de idades) que queremos Registros de impressão Para monitorar o progresso do treinamento.

Cada um desses parâmetros desempenha um papel específico, com alguns moldando o mundo financeiro que simulamos, enquanto outros controlam como nossa rede neural interage com esse mundo. Pequenas modificações aqui podem resultar em um comportamento completamente diferente, tornando este arquivo poderoso e sensível. Alterar os valores deste arquivo JSON mudará radicalmente a saída do seu código.

3.2 main.py (arquivo main.py)

Agora, vamos ver como o resto do código usa essa configuração na prática.

A parte principal do nosso código vem de main.py , para treinar sua rede PINN usando Torch, e black_scholes.py.

Este é o arquivo main.py:

Então, o que você pode fazer é:

  1. Crie seu próprio arquivo config.json
  2. comando de execução python main.py --config config.json

O arquivo main.py é usado por muitos outros arquivos.

3.3 black_scholes.py e seus plugins

A aplicação do modelo de Black-Scholes está localizada no arquivo black_scholes.py :

Este arquivo pode ser usado para construir, treinar, exportar e prever o modelo.
A função também usa alguns arquivos auxiliares, como data.py, loss.py e model.py.
Há um modelo do Torch dentro do arquivo. modelo.py:

O construtor de dados (considerando o arquivo de configuração) está localizado dentro do arquivo data.py :

A função de perda integrada que inclui o valor de assimetria é o arquivo loss.py. Essa função é essencial para melhorar a precisão do modelo.

4. Resultados

Bem, quando executamos main.py, nossa rede neural feedforward (FFNN) é treinada e obtemos o seguinte:

Como você pode ver, o erro do modelo não é exatamente 0, mas a equação PDE do modelo é muito menor que os dados. Isso significa que o modelo (naturalmente) força fortemente nossas previsões para satisfazer as equações diferenciais. É exatamente isso que dissemos antes: melhoramos o desempenho em termos dos dados que temos e em termos do modelo Black-Scholes.

Podemos observar, qualitativamente, uma alta correspondência entre o conjunto de dados do mundo real ruidoso + tendencioso (bastante realista) e a rede PINN.

Estes são os resultados quando t = 0, e o preço das ações muda com a opção de compra em um valor fixo de t. Muito legal, não é? Mas ainda não acabou! Você pode explorar os resultados usando o código acima de duas maneiras:

  1. Jogando com muitos parâmetros localizado em config.json
  2. Ver previsões em t> 0

Eu escuto! :)

5. Conclusões

Muito obrigado por vir aqui. Sério, essa foi uma longa jornada 😅
Veja o que abordamos neste artigo:

  1. Começamos com física., e como suas leis, escritas como equações diferenciais, são justas, bonitas e (geralmente) previsíveis.
  2. Mudamos para finançasE conhecemos o Modelo Black-Scholes, uma equação diferencial que visa precificar opções de forma livre de risco.
  3. Exploramos redes neurais informadas pela física (PINNs)., um tipo de rede neural que não apenas ajusta os dados, mas respeita a equação diferencial subjacente. PINNs são uma ferramenta poderosa para modelar sistemas complexos.
  4. Fizemos tudo em Python.Usando PyTorch e um banco de dados de benchmark limpo que permite ajustar parâmetros, gerar dados sintéticos e treinar seus próprios PINNs para resolver a equação de Black-Scholes.
  5. Fotografamos os resultados. Vimos como a rede aprendeu a corresponder não apenas aos dados ruidosos, mas também ao comportamento esperado da equação de Black-Scholes.

Sei que absorver tudo isso de uma vez não é fácil. Em algumas partes, fui necessariamente breve, talvez até mais conciso do que o necessário. No entanto, se você quiser uma compreensão mais clara, dê uma olhada na pasta do GitHub. Mesmo que você não tenha interesse no software, há um arquivo README.md bem explicado e um exemplo simples, o BlackScholesModel.ipynb , que detalha o projeto passo a passo.

 

Comentários estão fechados.