| 

Predire il DrawDown – Un Modello di Machine Learning per Misurare il Rischio (Parte 3)

In questa terza parte presenteremo un algoritmo di Machine Learning, il quale sarà addestrato per realizzare un modello per predire il Massimo DrawDown di una generica serie storica.

In questo blog pubblico un articolo che ho scritto per partecipare al concorso “SIAT Technical Analyst of the Year 2021“. Vista la lunghezza e la quantità degli argomenti trattati, ho ritenuto utile dividerlo in quattro parti. In questa terza parte, vedremo come addestrare l’algoritmo e convalidare il nostro modello predittivo del massimo drawdown.

Cambiare Prospettiva con il Machine Learning

In una situazione tipica del trading algoritmico, il trader che si appresta a creare un Trading System codifica in un linguaggio di programmazione e in modo estremamente preciso le regole della sua strategia, come l’ingresso e l’uscita, gli eventuali filtri, la gestione della posizione, i parametri e i vincoli. Nel momento che il Trading System è implementato e messo in “live”, questo riceve il flusso dei dati che arrivano dal mercato, li rielabora in base alle regole scritte dal suo programmatore e restituisce i segnali di acquisto e di vendita.

Questo paradigma lascia al trader – programmatore la completa gestione del processo (figura 8), il quale dovrà scegliere in base alla propria esperienza e intuizione ogni regola di come funzionerà il Trading System. Le serie storiche portano un grande vantaggio al trader, che può effettuare dei backtest e verificare in modo oggettivo l’operatività passata, sperando che questa possa ripetersi nel futuro.

Figura 8: paradigma tradizionale di un Trading System

Con l’Intelligenza Artificiale e in particolare con il Machine Learning, il paradigma viene ribaltato. Una definizione efficace di Machine Learning è la seguente:

“Machine learning is the science (and art) of programming computers so they can learn from data”

tratta dal libro di Aurélien Géron “Hands-on Machine Learning with Scikit-Learn and TensorFlow”

Le regole del gioco non sono più definite dall’uomo ma è la macchina che impara da sola quali siano le migliori regole che legano i dati di ingresso e le risposte. Il nuovo paradigma si articola in due fasi ben distinte:

  • in una prima parte, chiamata fase di addestramento, quello che viene chiamato “Algoritmo di Machine Learning” prende sia i dati in ingresso sia le risposte e genera un modello che contiene le regole che legano input e output;
  • nella seconda parte, chiamata fase di inferenza, il modello è alimentato dai dati di ingresso e in base alle sue regole, genera la sua predizione.
Figura 9: paradigma di Machine Learning

Allo stesso modo del trader – programmatore che si “allena” con le serie storiche per trovare le regole del suo Trading System, la macchina si “addestra” sui dati e progetta il suo modello. Ma qual è il migliore tra i due paradigmi? La mente umana è ineguagliabile, una idea innovativa può sempre fare la differenza nella risoluzione di un problema, ma quando si tratta di elaborare numeri per tirare fuori altri numeri, la macchina è imbattibile e lo fa ad una velocità incredibile. Allora quale scegliere tra uno e l’altro? Dipende da quanti dati abbiamo a disposizione. Se disponiamo di molti dati, come numerose e profonde serie storiche, un algoritmo di Machine Learning riesce a sfruttarle al massimo e soprattutto in modo oggettivo. Se invece il mercato dove ci muoviamo ha poche informazioni o è di difficile accesso, o più semplicemente non ci sono ampie serie storiche, l’intuito del trader – programmatore è essenziale nella definizione del Trading System.

Figura 10: diagramma di flusso1

Tornando alla nostra ricerca del MDD, disporre di Serie Storiche sintetiche permette di spostare l’ago della bilancia verso il campo di azione del Machine Learning. Nella figura 10 possiamo vedere quale sia la sequenza degli eventi: dopo aver generato il dataset dei dati sintetici, i dati sono pre-processati e successivamente impiegati per addestrare l’algoritmo di Machine Learning, il quale produrrà il modello; per la valutazione finale, le predizioni del modello sono confrontate con il dataset dei dati reali.

Nei paragrafi seguenti andremo ad analizzare in dettaglio come lavorano i moduli di colore blu rappresentati in figura 10.

(1) La nomenclatura è stata lasciata in inglese per rispettare le convenzioni in uso.

Standardizzazione e Normalizzazione

Il nostro Dataset (tabella 4) è composto dalle due caratteristiche “media” e “deviazione standard” con valori nominali molto bassi, inferiore anche al millesimo, e dalla caratteristica “epoche” con valori superiori all’unità.

Capita spesso di avere caratteristiche con diversi ordini di grandezza. Queste ampie differenze di scala non sono ottimali per gli algoritmi di apprendimento, perché non sarebbero in grado di mettere tutte le caratteristiche sullo stesso livello di importanza, con il rischio che una caratteristica domini sulle altre e pertanto di ridurre le capacità di apprendimento, oltre a potenziali problemi sulla stabilità del calcolo numerico. La soluzione a questi inconvenienti sono le tecniche di ridimensionamento dei dati, le quali modificano le proporzioni delle caratteristiche del dataset per portarle alla stessa scala numerica.

La libreria SciKit-Learn fornisce la funzione StandardScaler, ampiamente usata per “standardizzare” la scala delle caratteristiche in fase di pre-elaborazione dati. La funzione StandardScaler restituisce delle nuove caratteristiche che hanno delle distribuzioni “standard”, con media uguale a zero, e normalizzate, deviazione standard uguale a uno, prodotte dalle originali applicando la formula:

zi = ( xi – X ) / Sx

il risultato sono delle nuove caratteristiche Z che hanno la stessa scala e insistono sullo stesso intervallo di valori.

Figura 11: standardizzazione e normalizzazione2

(2) Figura tratta dal sito https://www.lorenzogovoni.com/ridimensionamento-dei-dati/

Regressione Lineare Multivariata

Tra gli algoritmi di machine learning presi in esame, è stato scelto quello che si basa sulla Regressione Lineare Multivariata (RLM) che, come vedremo, fornisce un buon compromesso tra accuratezza e semplicità. Questo algoritmo è adatto quando la variabile dipendente ha un legame tendenzialmente lineare con le sue variabili indipendenti. La forma generale è riportata di seguito:

Con:

  • yi il valore del i-esimo componente della variabile dipendente,
  • βij è il coefficiente della regressione lineare,
  • xj è il valore del j-esimo componente della variabile indipendente,
  • εi è il valore residuo che dipende da termini non lineari

L’algoritmo utilizzato è il LinearRegression della libreria SciKit Learn, che ha una formulazione che lega il valore obiettivo ŷ e le variabili indipendenti con una combinazione lineare:

ŷ(β, x) = β0 + β1x1 + ··· + βMxM

Con ŷ = y – ε è il valore predetto dal modello. I valori dei coefficienti βi impiegati dal modello sono ricavati dai valori di osservazione xj(k) e y(k) del dataset, minimizzando la seguente funzione costo:

min||Xβ -y||22

in altri termini, il modello utilizza i dati che arrivano dal dataset e determina i coefficienti βi che minimizzano la somma dei quadrati dei residui ε(k).

L’algoritmo LinearRegression gestisce un solo valore ŷi, nel caso che la variabile dipendente abbia due o più valori è necessario creare e addestrare più modelli. Nel nostro caso abbiamo un solo obiettivo, il 90MDD, pertanto sarà necessario addestrare un unico algoritmo di LinearRegression.

Regressione Polinomiale

Nei problemi di Machine Learning, una pratica comune è prendere modelli di regressione lineare e adattarli su dataset che invece sono regolati da funzioni non lineari. Questo approccio permette di mantenere dei bassi costi computazionali tipici dei modelli lineari, ma di essere adattati ad un ampio spettro di problemi.

Il metodo maggiormente usato è prendere una regressione lineare ed estenderla costruendo nuove variabili indipendenti polinomiali. Per esempio, si potrebbe avere un modello lineare con solo due variabili simile a questo:

ŷ(β, x) = β0 + β1x1 + β2x2

Se i nostri dati di osservazione seguono una funzione parabolica, le variabili x1 e x2 possono essere ricombinate per creare dei nuovi termini di secondo grado:

ŷ(β, x) = β0 + β1x1 + β2x2 + β3 x1x2 + β4x12 + β5x22

Anche se non sembra, questo nuovo modello può essere gestito sempre come un modello lineare, se sostituiamo le variabili  con un nuovo set di variabili z, risulta molto più chiaro:

ŷ(β, z) = β0 + β1z1 + β2z2 + β3 z3 + β4z4 + β5z5

È possibile osservare come il nuovo modello rimanga lineare e come tale si possano utilizzare i metodi di addestramento di regressione lineare. Aver creato uno spazio con maggiori dimensioni fornisce al modello una buona flessibilità, così da adattarsi ad una grande gamma di dataset.

La libreria SciKit Learn è in grado di addestrare un algoritmo di regressione polinomiale, occupandosi di trasformare le variabili lasciando al programmatore solo la scelta del grado dei nuovi termini.

Conclusa la parte di raccolta e preparazione dei dati e la scelta dell’algoritmo di Machine Learning, nella quarta ed ultima parte creeremo finalmente il modello predittivo e analizzeremo i suoi risultati.



Se hai domande o curiosità da chiedermi, non esitare a scrivermi nel modulo qui in basso, oppure mi trovi su Facebook e su LinkedIn. Se vuoi rimanere sempre aggiornato e non perderti nessun articolo appena esce, iscriviti alla newsletter compilando il seguente modulo:

Se apprezzi i miei articoli e il progetto MP Investit, puoi sostenermi con un contributo libero tramite PayPal o con una ricompensa del browser Brave. Questo mi motiva e mi incentiva a produrre contenuti sempre migliori. Grazie!

Articoli simili

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *