Quando la fisica incontra la finanza: usare l'intelligenza artificiale per risolvere l'equazione di Black-Scholes
Ecco come utilizzare le reti neurali basate sulla fisica per risolvere modelli finanziari utilizzando Python.
DisclaimerQuesto non è un consiglio finanziario. Ho un dottorato di ricerca in Ingegneria aerospaziale con un forte focus sull'apprendimento automatico: io non sono Consulente finanziario. Il presente articolo ha il solo scopo di dimostrare la potenza delle reti neurali basate sulla fisica (PINN) in un contesto finanziario.
Quando avevo 16 anni mi sono innamorato della fisica. La ragione era semplice ma potente: credevo che la fisica ادلة.
Non ho mai commesso un errore in un esercizio perché la velocità della luce è cambiata durante la notte, o perché improvvisamente e potrebbe esserex Negativo Ogni volta che leggo un articolo di fisica e penso, "Questo non ha senso", Si scopre che Ero io che non capivo.
Quindi, la fisica è sempre giusta, ed è per questo che è sempre Perfetto. La fisica mostra questa perfezione e giustizia attraverso il suo insieme di regole, note come equazioni differenziali.

L'equazione differenziale più semplice che conosco è questa:

Molto semplice: iniziamo da qui, x0=0, al tempo t=0, ci muoviamo a una velocità costante di 5 m/s. Ciò significa che dopo 5 secondo ci troviamo a 10 metri (o miglia, se preferite) dall'origine; Dopo 43128 secondi siamo a XNUMX metri dall'origine; Dopo XNUMX secondi... penso che tu abbia capito.
Come diciamo, è scritto nella pietra: perfetto, perfetto e indiscutibile. Ma immaginate questa situazione nella vita reale. Immagina di essere a passeggio o in macchina. Anche se fai del tuo meglio per mantenere una velocità prefissata, non riuscirai mai a mantenerla costante. In certi momenti la tua mente correrà; Potresti distrarti, potresti fermarti al semaforo rosso e, molto probabilmente, potresti verificare una combinazione di quanto detto sopra. Quindi forse la semplice equazione differenziale di cui abbiamo parlato prima non è sufficiente. Quello che possiamo fare è provare a prevedere la tua posizione dall'equazione differenziale, Ma con aiuto Intelligenza artificiale. Questo concetto è molto importante nella modellazione di sistemi complessi.
Questa idea è applicata in Reti neurali basate sulla fisica (PINN). Lo descriveremo in dettaglio più avanti, ma l'idea è che stiamo cercando di abbinare ل I dati e ciò che sappiamo dall'equazione differenziale che descrive il fenomeno. Ciò significa che forziamo la nostra soluzione in modo che soddisfi in linea generale ciò che ci aspettiamo dalla fisica. So che sembra magia nera, ma vi prometto che nel corso dell'articolo diventerà più chiaro.
Ora, la grande domanda:
Cosa c'entra la finanza con la fisica e le reti neurali basate sulla fisica?
Ebbene, si scopre che le equazioni differenziali non sono utili solo a coloro che sono interessati alle leggi dell'universo naturale, ma possono anche essere utili in Modelli finanziari. Ad esempio, il modello utilizza Black-Scholes Un'equazione differenziale per determinare il prezzo di un'opzione call, con alcune ipotesi rigorose, per ottenere Portafoglio senza rischi.
Lo scopo di questa introduzione molto complessa era duplice:
- Confondetevi un po', così potrete continuare a leggere :)
- Siate abbastanza curiosi da scoprire dove sta andando tutto questo.
Spero di esserci riuscito 😁. In tal caso, il resto dell'articolo seguirà questi passaggi:
- Ne discuteremo Modello Black-Scholes, le sue ipotesi e la sua equazione differenziale
- Ne parleremo Reti neurali basate sulla fisica (PINN), da dove viene e perché è utile
- Svilupperemo il nostro algoritmo che addestra PINN su Black-Scholes utilizzando Python e Torcia e OOP.
- Mostreremo i risultati del nostro algoritmo.
Sono emozionato! Al laboratorio! 🧪
1. Modello Black-Scholes: uno sguardo approfondito
Se sei interessato a leggere il documento di ricerca originale sul modello Black-Scholes, puoi trovarlo qui. qui. Vale sicuramente la pena leggerlo :)
Bene, ora dobbiamo capire il mondo. التمويل Dove siamo, quali sono le variabili e quali sono le leggi che la governano. È fondamentale comprendere i principi fondamentali della finanza e la loro relazione con la teoria Black-Scholes.
Innanzitutto, nella finanza esiste uno strumento potente chiamato Cetriolo Opzione call. Un'opzione call ti dà il diritto (ma non l'obbligo) di acquistare un'azione a un certo prezzo in un futuro specificato (ad esempio tra un anno), che viene chiamato prezzo di esercizio. prezzo).
Ora, pensiamoci un attimo, va bene? Supponiamo che oggi il prezzo delle azioni sia di 100 $. Supponiamo anche di possedere un'opzione call con prezzo di esercizio di 100 $. Supponiamo ora che entro un anno il prezzo delle azioni salga a 150 dollari. È incredibile! Possiamo usare questa opzione call per acquistare le azioni e poi rivenderle immediatamente! Abbiamo appena realizzato un profitto di $ 150 - $ 100 = $ 50. D'altro canto, se il prezzo delle azioni scende a 80 dollari entro un anno, non potremo farlo. In realtà, è meglio non esercitare affatto il nostro diritto di acquisto, per non perdere soldi.
Quindi, ora che ci pensiamo, l'idea è acquistare una quota e vendita di opzioni Guarda Completamente integrato. Ciò che intendo dire è che la casualità del prezzo di un'azione (il fatto che salga e scenda) può effettivamente allevialo Mantenendo il numero corretto di opzioni. Questo è ciò che si chiama Copertura del delta. È una strategia fondamentale nella gestione del rischio.
Sulla base di una serie di ipotesi, possiamo derivare prezzo di opzione equo Per ottenere un portafoglio Senza rischi. Questo concetto è fondamentale per il modello Black-Scholes.
Non voglio annoiarvi con tutti i dettagli della derivazione (francamente, non è difficile da seguire nel documento originale), ma l'equazione differenziale per il portafoglio privo di rischio è questa:

Dove:
Cè il prezzo dell'opzione al tempo tsigmaÈ la volatilità del titolo.rÈ il tasso privo di rischi.tè il tempo (con t=0 adesso e T alla data di fine)Sè il prezzo attuale delle azioni
Da questa equazione possiamo ricavare il prezzo equo di un'opzione call per un portafoglio privo di rischi. L'equazione è chiusa e analitica e si presenta così:

con:

dove N(x) è la funzione di distribuzione cumulativa (CDF) della distribuzione normale standard, K è il prezzo di esercizio e T è la data di scadenza.
Ad esempio, questo è un grafico. Prezzo delle azioni (x) Di fronte Opzione call (y), secondo il modello Black-Scholes.

Tutto ciò sembra fantastico, ma cosa c'entra con la fisica e la PINN? L'equazione sembra essere analitica, quindi perché PINN? Perché l'intelligenza artificiale? Perché sto leggendo questo? La risposta è qui sotto 👇:
2. Reti neurali basate sulla fisica
Se sei interessato alle reti neurali informate dalla fisica (PINN), puoi dare un'occhiata all'articolo originale. qui. Di nuovo, vale la pena leggerlo. :)
Ora, l'equazione sopra AnaliticoMa, ripeto, questa è l'equazione per un prezzo equo in uno scenario ideale. Cosa succede se ignoriamo questo aspetto per un momento e proviamo a indovinare il prezzo dell'opzione in base al prezzo delle azioni e al tempo? Ad esempio, possiamo utilizzare una rete neurale Feed Forward e addestrarla tramite backpropagation. Questo approccio costituisce la base dell'utilizzo delle reti neurali nella determinazione del prezzo delle opzioni.
In questo meccanismo di addestramento, minimizziamo l'errore:
L = |Estimated C - Real C|:

Questo è un buon metodo ed è l'approccio più semplice che si possa adottare con le reti neurali. Il problema qui è che ignoriamo completamente l'equazione di Black-Scholes. Quindi, esiste un altro modo? Possiamo unirli?
Certamente, possiamo farlo se impostiamo l'errore come segue:
L = |Estimated C - Real C|+ PDE(C,S,t)
dove PDE(C,S,t) è:

Dovrebbe essere il più vicino possibile a 0:

Ma la domanda rimane. Perché questa è “migliore” della semplice equazione Black-Scholes? Perché non utilizziamo semplicemente l'equazione differenziale? Beh, perché a volte nella vita risolvere un'equazione differenziale non garantisce di trovare la soluzione "vera". Di solito la fisica approssima le cose, e lo fa in un modo che può creare una differenza tra ciò che ci aspettiamo e ciò che vediamo. Ecco perché le reti neurali basate sulla fisica (PINN) sono uno strumento così straordinario e meraviglioso: si cerca di far corrispondere la fisica, ma si è rigorosi sul fatto che i risultati debbano corrispondere a ciò che si "vede" dal proprio set di dati. Ciò che contraddistingue questo approccio è l'integrazione tra modello fisico e dati sperimentali.
Nel nostro caso, potrebbe essere che per ottenere un portafoglio privo di rischi, scopriamo che il modello teorico di Black-Scholes non corrisponde perfettamente ai dati di mercato rumorosi, distorti o incompleti che osserviamo. Forse la volatilità non è costante. Forse il mercato non è efficiente. Forse i presupposti su cui si basa l'equazione non reggono. È qui che un approccio come PINN può rivelarsi utile. Non solo troviamo una soluzione che soddisfa l'equazione Black-Scholes, ma ci "fidiamo" anche di ciò che vediamo dai dati. Ciò consente di avere un modello più flessibile e adattabile alle reali condizioni di mercato.
Ok, basta con la teoria. Cominciamo a programmare. 👨💻
3. Applicazione pratica utilizzando Python
È possibile trovare il codice completo, insieme a un ottimo file README.md, un eccellente notebook e un codice boilerplate estremamente chiaro. qui. Questo codice è progettato specificamente per risolvere l'equazione di Black-Scholes utilizzando reti neurali PINN, un metodo avanzato nel campo della modellazione finanziaria.
Nota: questa parte sarà un po' impegnativa (molto codice) e se non siete interessati al software potete passare direttamente al capitolo successivo. Vi mostrerò i risultati in modo più semplice :)
Grazie mille per essere arrivato fin qui ❤️
Vediamo come possiamo implementarlo. Vediamo ora come applicare questa tecnica alla risoluzione delle equazioni di Black-Scholes, concentrandoci sugli aspetti pratici e dettagliati.
3.1 File Config.json
L'intero codice può essere eseguito utilizzando un file di configurazione molto semplice, che ho chiamato config.json.
Puoi posizionarlo dove vuoi, come vedremo più avanti.
Questo file è essenziale perché definisce tutti i parametri che regolano la simulazione, la generazione dei dati e l'addestramento del modello. Lasciatemi spiegare brevemente cosa rappresenta ogni valore:
K: Prezzo di esecuzione – Il prezzo al quale l’opzione ti dà il diritto di acquistare l’azione in futuro.T: Tempo fino alla data di scadenza, in anni. permessoT = 1.0Ciò significa che l'opzione scade tra un'unità (ad esempio, un anno) da adesso.r: tasso di interesse privo di rischio Utilizzato per attualizzare i valori futuri. Questo è il tasso di interesse che specifichiamo nella nostra simulazione.sigma: لب Il titolo azionario, che determina quanto è difficile prevederne il prezzo o quanto è "rischioso". Anche questo è un parametro di simulazione.N_data: numero punti dati sintetici che vogliamo creare per la formazione. Questo determinerà anche la dimensione del modello.min_Semax_S: intervallo di prezzo delle azioni Che vogliamo campionare quando creiamo dati sintetici. Il nostro prezzo minimo e massimo delle azioni.bias: Offset opzionale aggiunto ai prezzi delle opzioni, per simulare uno spostamento sistematico nei dati. Ciò viene fatto per creare un contrasto tra il mondo reale e i dati Black-Scholes.noise_variance: livello di rumore Aggiunto ai prezzi delle opzioni per simulare la misurazione o il rumore di mercato. Questo parametro è stato aggiunto per lo stesso motivo di prima.epochs: numero ripetizioni su cui verrà addestrato il modello.lr: tasso di apprendimento Per il benefattore. Controlla la velocità con cui il modello viene aggiornato durante l'addestramento.log_interval:Il numero di volte (in termini di età) che vogliamo Stampa i record Per monitorare i progressi dell'allenamento.
Ciascuno di questi parametri gioca un ruolo specifico: alcuni modellano il mondo finanziario che simuliamo, mentre altri controllano il modo in cui la nostra rete neurale interagisce con quel mondo. Piccole modifiche possono dare origine a comportamenti completamente diversi, rendendo questo file tanto potente quanto sensibile. La modifica dei valori di questo file JSON cambierà radicalmente l'output del codice.
3.2 main.py (file main.py)
Vediamo ora come il resto del codice utilizza questa configurazione nella pratica.
La parte principale del nostro codice proviene da principale.pyPer addestrare la tua rete PINN utilizzando Torch, black_scholes.py.
Questo è il file main.py:
Quindi, quello che puoi fare è:
- Crea il tuo file config.json
- eseguire il comando
python main.py --config config.json
Il file main.py è utilizzato da molti altri file.
3.3 black_scholes.py e i suoi helper
L'applicazione del modello Black-Scholes si trova all'interno del file. black_scholes.py:
Questo file può essere utilizzato per creare, addestrare, esportare e prevedere il modello.
La funzione utilizza anche alcuni file di supporto, quali data.py, loss.py e model.py.
All'interno del file è presente un modello Torch. modello.py:
Il generatore di dati (in termini di file di configurazione) si trova all'interno del file. dati.py:
La funzione di perdita integrata che include il valore di asimmetria è perdita.py. Questa funzione è necessaria per migliorare la precisione del modello.
4. Risultati
Bene, quando eseguiamo main.py, la nostra rete neurale feedforward (FFNN) viene addestrata e otteniamo quanto segue:

Come si può vedere, l'errore del modello non è esattamente 0, ma l'equazione PDE del modello è molto più piccola dei dati. Ciò significa che il modello (naturalmente) forza fortemente le nostre previsioni per soddisfare le equazioni differenziali. È esattamente quello che abbiamo detto prima: miglioriamo le prestazioni in termini di dati in nostro possesso e in termini del modello Black-Scholes.
Possiamo osservare, qualitativamente, un'elevata corrispondenza tra il set di dati reale rumoroso e distorto (abbastanza realistico) e la rete PINN.

Questi sono i risultati quando t = 0 e il prezzo delle azioni cambia con l'opzione call a un valore fisso di t. Davvero interessante, non è vero? Ma non è ancora finita! È possibile esplorare i risultati utilizzando il codice sopra riportato in due modi:
- Giocando con molti parametri situato in config.json
- Visualizza le previsioni su t> 0
Ti ascolto! :)
5. Conclusioni
Grazie mille per essere venuto qui. Davvero, è stato un lungo viaggio 😅
Ecco cosa abbiamo trattato in questo articolo:
- Abbiamo iniziato con la fisica.e come le sue leggi, scritte come equazioni differenziali, siano giuste, belle e (solitamente) prevedibili.
- Siamo passati alla finanzaE abbiamo incontrato il modello Black-Scholes, un'equazione differenziale che mira a determinare il prezzo delle opzioni in modo privo di rischi.
- Abbiamo esplorato le reti neurali basate sulla fisica (PINN)., un tipo di rete neurale che non si limita ad adattare i dati, ma rispetta anche l'equazione differenziale sottostante. Le PINN sono uno strumento potente per la modellazione di sistemi complessi.
- Abbiamo fatto tutto in Python.Utilizzando PyTorch e un database di benchmark pulito, è possibile modificare i parametri, generare dati sintetici e addestrare i propri PINN per risolvere l'equazione di Black-Scholes.
- Abbiamo fotografato i risultati. Abbiamo visto come la rete ha imparato ad adattare non solo i dati rumorosi, ma anche il comportamento previsto dall'equazione di Black-Scholes.
So che non è facile assimilare tutto questo in una volta. In alcuni ambiti sono stato necessariamente breve, forse più breve del necessario. Tuttavia, se vuoi vedere le cose in modo più chiaro, dai un'occhiata a: Cartella GitHub. Anche se non sei interessato al software, c'è un file README.md chiaro e un modello semplice. esempio/BlackScholesModel.ipynb Il progetto viene spiegato passo dopo passo.
I commenti sono chiusi.