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:
- Nós discutiremos Modelo Black-Scholes, suas suposições e sua equação diferencial
- Nós vamos falar sobre Redes neurais baseadas em física (PINNs), de onde veio e por que é útil
- Desenvolveremos nosso próprio algoritmo que treina PINN em Black-Scholes usando Python و Tocha و OOP.
- 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 tsigmaÉ 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ãoT = 1.0Isso 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 é:
- Crie seu próprio arquivo config.json
- 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:
- Jogando com muitos parâmetros localizado em config.json
- 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:
- Começamos com física., e como suas leis, escritas como equações diferenciais, são justas, bonitas e (geralmente) previsíveis.
- Mudamos para finançasE conhecemos o Modelo Black-Scholes, uma equação diferencial que visa precificar opções de forma livre de risco.
- 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.
- 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.
- 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.