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.
Isenção de responsabilidadeIsto não é um conselho financeiro. Tenho doutorado em Engenharia Aeroespacial com forte foco em aprendizado de máquina: eu 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. A razão era simples, mas poderosa: eu acreditava que a física feira.
Nunca cometi um erro em um exercício porque a velocidade da luz mudou durante a noite, ou porque de repente ela poderia serx Negativo Toda vez que leio um artigo de física e penso, “Isso não faz sentido,” Acontece que Eu era quem não entendia.
Então, a física é sempre justa, e é por isso que é sempre perfeito. A física demonstra essa perfeição e justiça por meio de seu conjunto de regras, conhecido como equações diferenciais.

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

Muito simples: começamos aqui, x0=0, no instante t=0, então nos movemos a uma velocidade constante de 5 m/s. Isso significa que após 5 segundo, estamos a 10 metros (ou milhas, se preferir) da origem; Após 43128 segundos, estamos a XNUMX metros da origem; Depois de XNUMX segundos... Acho que você entendeu.
Como dizemos, está escrito em pedra: perfeito, perfeito e incontestável. Mas imagine isso na vida real. Imagine que você está caminhando ou dirigindo. Mesmo que você tente ao máximo atingir uma velocidade alvo, você nunca conseguirá mantê-la constante. Sua mente irá disparar em certas partes; Você pode se distrair, parar em sinais vermelhos e provavelmente uma combinação das opções acima. Então talvez a equação diferencial simples que mencionamos anteriormente não seja suficiente. O que podemos fazer é tentar prever sua posição a partir da equação diferencial, Mas Com ajuda Inteligência artificial. Este conceito é muito importante na modelagem de sistemas complexos.
Essa ideia é aplicada em Redes Neurais Informadas por Física (PINN). Descreveremos isso em detalhes mais tarde, mas a ideia é que estamos tentando combinar quem quer que seja Os dados e o que sabemos da equação diferencial que descreve o fenômeno. Isso significa que forçamos nossa solução a satisfazer, de modo geral, o que esperamos da física. Sei que isso parece magia negra, mas prometo que ficará 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 aqueles interessados nas leis do universo natural, mas também podem ser úteis em Modelos financeiros. Por exemplo, o modelo utiliza Black-Scholes Uma equação diferencial para determinar o preço de uma opção de compra, com certas suposições estritas, para obter Portfólio sem 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ê estiver interessado em ler o artigo de pesquisa original sobre o modelo Black-Scholes, você pode encontrá-lo aqui. aqui. Definitivamente vale a pena ler :)
Ok, agora temos que entender o mundo. التمويل Onde estamos, quais são as variáveis e quais são as leis que as regem. Entender os princípios básicos das finanças e sua relação com a Lei Black-Scholes é crucial.
Primeiro, em finanças, existe uma ferramenta poderosa chamada Pepino Opção de compra. Uma opção de compra lhe dá o direito (mas não a obrigação) de comprar uma ação a um determinado preço em um futuro específico (digamos, daqui a um ano), que é chamado de preço de exercício. preço).
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.
Então, agora que pensamos nisso, a ideia é comprar uma ação و venda de opção Veja Totalmente integrado. O que quero dizer é que a aleatoriedade do preço de uma ação (o fato de que ela sobe e desce) pode realmente alivie Mantendo o número correto de opções. Isso é o que se chama Cobertura delta. É uma estratégia fundamental na gestão de riscos.
Com base num conjunto de suposições, podemos derivar preço justo da opção Para conseguir uma carteira Sem risco. Este conceito é fundamental para o modelo 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. Preço das ações (x) مقابل Opção de compra (y), segundo o modelo 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ê estiver interessado em Redes Neurais Informadas por Física (PINNs), pode conferir o artigo original. aqui. Mais uma vez, vale a pena ler. :)
Agora, a equação acima AnalíticoMas, novamente, esta é a equação para um preço justo em um cenário ideal. O que acontece se ignorarmos isso por um momento e tentarmos adivinhar o preço da opção com base no preço da ação e no tempo? Por exemplo, podemos usar uma Rede Neural Feed Forward e treiná-la por meio de retropropagação. Essa abordagem forma 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, junto com um ótimo arquivo README.md, um excelente notebook e um código clichê superclaro. aqui. Este código foi projetado especificamente para resolver a equação de Black-Scholes usando redes neurais PINN, um método avançado no campo da 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 chamei de 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 principal.pyPara treinar sua rede PINN usando o Torch, 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
O aplicativo do modelo Black-Scholes está localizado 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 gerador de dados (em termos do arquivo de configuração) está localizado dentro do arquivo. dados.py:
A função de perda integrada que inclui o valor de assimetria é perda.py. Esta função é necessária 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.
Eu sei que não é fácil assimilar tudo isso de uma vez. Em algumas áreas, fui necessariamente breve, talvez mais baixo do que o necessário. No entanto, se você quiser ver as coisas de uma forma mais clara, novamente, dê uma olhada em: Pasta do GitHub. Mesmo que você não esteja interessado em software, há um arquivo README.md claro e um modelo simples. exemplo/BlackScholesModel.ipynb O projeto é explicado passo a passo.
Comentários estão fechados.