Nicola Matarese

7 min

Machine Learning nel Trading usando NEURAL NETWORK-PROPHET

"Produrre previsioni di alta qualità non è un problema facile né per le macchine né per la maggior parte degli analisti. Abbiamo osservato due temi principali nella pratica della creazione di una varietà di previsioni aziendali: Le tecniche di previsione completamente automatiche possono essere fragili e sono spesso troppo inflessibili per incorporare ipotesi o euristiche utili. Gli analisti che possono produrre previsioni di alta qualità sono abbastanza rari perché la
 
previsione è un'abilità specializzata nella scienza dei dati che richiede una notevole esperienza. "

Dal sito web di Facebook Prophet. In questo progetto utilizzeremo l’algoritmo Neural Prophet per la previsione del cross EUR/CHF. Per la trattazione dell’argomento si farà uso del software di programmazione Python in ambiente Jupiter Notebook.

Machine Learning nel Trading usando NEURAL NETWORK-PROPHET


 
Un mondo di profeti

Quando nel mio primo articolo Introduzione al Machine Leanring per il Trading, inizio di questa avventura divulgativa, abbiamo voluto introdurre i concetti di previsione abbiamo fatto riferimento, con approccio provocatorio, a coloro che soprattutto nel passato pretendevano di prevedere il future basandosi su presunte doti magiche, segno di benevolenza divina, che gli permetteva di affermarsi nelle società del tempo incutendo rispetto e timore. Con il tempo e con il progresso scientifico si è dimostrato che tali poteri paranormali previsionali erano fallimentari per almeno due motivi.

Uno, erano statisticamente non affidabili, razionalmente non giustificabili e
 
pertanto instabili, due, allorquando validi, erano dimostrati tali da una predisposizione mentale che rendeva quelle previsioni vere o verosimili. Fare previsioni significa considerare tutte le caratteristiche (nello spazio e nel tempo) di un fenomeno passato, assegnare ad ognuna di esse un peso di influenza, combinarle tra loro e contestualizzarle ed adattarle in una nuova circostanza.


 
Posso prevedere con certezza pressochè assoluta che domani avremo un alba e un tramonto, abbastanza accurata se la giornata sarà piovosa, nuvolosa o soleggiata, un po’ meno se devo prevedere dove trovare parcheggio in centro città (tanto piu’ se non conosco la zona). Le previsione é imprescindibile dall’esperienza passata, ma la stessa non ne è garanzia di accuratezza. Come nei teoremi matematici potremmo dire che, a meno di essere sicuro di aver considerato tutte (ma proprio tutte) le variabili, l’esperienza passata è condizione necessaria ma non sufficiente per la bontà della previsione.


 
Questo é vero a tutti i livelli, dai nostri comportamenti di fronte a determinate situazioni di cui abbiamo esperienza, alle strategie geopolitiche che prendono spunto dalla storiografia, dalle analisi e previsioni di vendita di un attività commerciale, al classico esempio noto a tutti gli studiosi di machine learning sulla potenziale solvibilità di un cliente bancario. Quando parliamo di previsioni di prezzo e andamento di un prodotto finanziario tentiamo di dare una interpretazione di come quel fenomeno, già prodotto risultante di previsoni fatte nel passato (il mercato), possa evolversi sulla base di pattern storici. Un problema fondamentale é quello di determinare quale é il migliore intervallo temporale tra il presente e il passato per elaborare la previsione, e fino a quando.

Se per esempio il trader graficista vuole una previsione giornaliera, deve considerare l’andamento dell’ultimo mese, dell’ultima settimana o dell’ultimo anno?
 

Machine Learning nel Trading usando NEURAL NETWORK-PROPHET


 
FACEBOOK PROPHET

Facebook ha sviluppato il software previsionale Prophet disponibile per applicazioni sia in Python che in R. Fornisce parametri intuitivi che sono facili da modulare per cui anche chi non ha una profonda esperienza nei modelli di previsione in serie temporali può usarlo per generare previsioni significative per una vasta varietà di problemi.


 
Un modello di regressione su modelli che presentano carattere stagionale particolarmente robusto in caso di dati mancanti, spostamenti di tendenza, e nella gestione degli outlier.
 
Prophet utilizza un modello di serie temporale scomponibile in tre elementi principali del modello:


 
tendenza, stagionalità e interruzioni, combinati nella seguente equazione:
 

y(t)= g(t) + s(t) + h(t) + εt

  1. g(t): curva di crescita lineare o logistica per modellare i cambiamenti non periodici nelle serie temporali

  2. s(t): cambiamenti periodici (es. stagionalità settimanale/annuale)

  3. h(t): effetti delle interruzioni (per esempio week end e vacanze)

  4. εt: il termine di errore tiene conto di qualsiasi cambiamento insolito non contemplato dal modello.


 
Usando il tempo come regressore, Prophet inquadra il problema della previsione come un esercizio di adattamento della curva piuttosto che guardare esplicitamente la dipendenza basata sul tempo di ogni osservazione all'interno di una serie temporale. Prophet e la sua evoluzione Neural Prophet vengono considerati come il ponte di collegamento tra le pure tecniche di analisi delle serie temporali e il deep learning (Figura 1)

Rappresentazione dell’ecosistema delle tecniche previsionali

NEURAL PROPHET su EUR/CHF

Seguendo il solito principio di costruzione di un codice di machine learning​ ( se ti interessa ne ho parlato dettagliatamente in un articolo ), partiamo con l’importazione delle librerie di gestione tabelle e grafica :


 
digita i seguenti comandi sul terminale per scaricare le librerie necessarie

Se hai python < 3

pip install yfinance
 
pip install neuralprophet

Se hai python >= 3

pip3 install yfinance
 
pip3 install neuralprophet

Se stai usando google Colab

!pip install yfinance
 
!pip install neuralprophet

Ora crea un nuovo file e iniziamo a scrivere codice.

import pandas_datareader.data as web
 
import pandas as pd
 
import matplotlib.pyplot as plt
 
import numpy as np


 
STEP 1 – IMPORTAZIONE E LETTURA DATI

Procediamo con l’impostazione delle funzioni che ci permettono di leggere I valori del cross Euro – Franco Svizzero con ticker EURCHF=X che vogliamo analizzare :

from datetime import datetime
 

 
start = datetime (2015,3,8)
 
end= datetime (2022,3,8)
 
data = yf.download(tickers = EURCHF, start=start, end=end)


 
Che da l’output Figura 2
 

Mostra il data set temporale nell'intervallo di tempo selezionato dei valori del Ticker EURCHF


 

 

 
STEP 2 – ELABORAZIONE, TRASFORMAZIONE E ORGANIZZAZIONE DATI

In questa fase trasformiamo I dati in maniera tale che gli stessi possano essere gestiti
 
dall’algoritmo neuralprophet che utilizzeremo.
 

closecolumn=data.iloc[:,3]
 
closecolumn


 
L’ultima riga di codice ci darà la possibilità di visualizzare la nuova struttura dati (Figura 3)

mostra i valori di chiusura giornaliera, che sarà oggetto di elaborazione


 
e il suo andamento grafico con le funzioni di plotting (Figura 4)

Ottenuta dalla funzione di plotting del codice python rappresenta il grafico del Close Price EURCHF


 
Per utilizzare NeuralProphet dobbiamo operare una ulteriore trasformazione del nostro
 
dataframe eseguendo le seguenti linee di codice :
 

neuralproheptdataset = closecolumn.reset_index()
 
dataprophet = neuralprophetdataset.rename(columns = {“Date”:”ds”, “Close”:”y”})
 
dataprophet


 
Che restituisce l’output (F5)

Dataset trasformato per l'elaborazione con Neural Prophet


 

 

 
STEP 3 – DEFINIZIONE DEL MODELLO

Importiamo la libreria che ci permetterà di implementare neuralprophet ed eseguire le operazioni per esso necessarie con le seguenti istruzioni
 

from neuralprophet import NeuralProphet


 
STEP 4 – ADDESTRAMENTO DEL MODELLO

Con NeuralProphet l’addestramento del modello viene compiuto con le semplici line di codice che seguono dove indichiamo I nostri parametri (tra gli altri notiamo il periodo in cui vogliamo la previsione con n_forecast = periodo previsionale di 30 giorni),
 

m = NeuralProphet(
 

 
n_forecasts=30,
 

 
n_lags=60,
 

 
n_changepoints=50,
 

 
yearly_seasonality=True,
 

 
weekly_seasonality=False,
 

 
daily_seasonality=False,
 

 
batch_size=64,
 

 
epochs=100,
 

 
learning_rate=1.0,
 

 
)


 

 

 
STEP 5 – VALUTAZIONE AFFIDABILITA’ DEL MODELLO

Come sempre dobbiamo valutare la bontà del nostro modello e capire quando dopo diverse
 
iterazioni di addestramento i valori convergono e diventano stabili per iterazioni successive
 

metrics = m.fit(dataprophet, freq="D")
 
metrics

In Figura 6 vediamo il riassunto delle metriche.

Output del codice python con i parametric di affidabilità del modello


 
Di cui possiamo vedere anche una rappresentazione grafica (F7)

Ottenuta dalla funzione di plotting del codice python dei dati di affidabilità.


 

 
STEP 6 - PREVISIONE

Avendo costruito il modello ed avendo appurato la sua precisione, se accettabile, procediamo con la previsione futura, a 30 giorno dopo l’ultima data disponibile nel nostro dataset chiamato dataprophet e cioé 7 marzo 2022.
 

future = m.make_future_dataframe(dataprophet, periods=30, n_historic_predictions=len(roughdata))
 

 
#noi dobbiamo specificare il numero di GIORNI da prevedere
 

 
prediction = m.predict(future)


 
in questo modo, operando alcune trasformazioni e lanciando la funzione di plotting abbiamo il grafico in F8.

Ottenuta dalla funzione di plotting che rappresenta l'andamento dei valori reali con quelli simulati


 

 
possiamo a questo punto azzardare anche una previsione a 100 giorni semplicemente cambiando il parametro n_forecast ottenenendo con la stessa serie di istruzioni per il plotting da Figura 9
 

Ottenuta dalla funzione di plotting che rappresenta l'andamento dei valori reali con quelli simulati


 
che zoommato da il grafico di Figura 10.
 

Ottenuta dalla funzione di plotting che rappresenta l'andamento dei valori reali con quelli simulati


 

 
Conclusioni

A proposito di futuro, si pensa che in 50 anni le capacità di calcolo delle macchine siano grado di emulare il ragionamento umano; é chiamata AGI, Artificial General Intelligence. C’é chi pensa ad essa come un opportunità, altri come una minaccia. La macchina dovrebbe in teoria sosituire l’uomo nelle cose “complesse” che la macchina riesce a fare bene e meglio (calcoli, gestione dei dati) ma quando lo sostituisce nelle attività comuni (la guida di un autoveicolo) o semplici (servire il caffè, fare il check in in hotel, passare l’aspirapolvere) entriamo in un discorso che affronta una tematica socio culturale simile a quella che ci viene raccontata dei tempi della rivoluzione industriale.

Come ricollocheremo gli addetti (presumiamo non altamente qualificati) che oggi sono impiegati in quei settori?

Per la risposta a questa domanda credo neanche la macchina piu’ avanzata possa aiutarci.
 
Anzi quando entriamo nel campo della fantasia e creatività forse siamo ancora superiori e ancora per un po’ irraggiungibili. Come umani, siamo meno dipendenti da dati di input strutturati rispetto alla macchina perchè abbiamo immaginazione, abbiamo ispirazione, abbiamo sensazioni. Non confondiamo la capacità di progredire con la semplice capacità di fare previsione. Ricordiamo che alla base dell’intelligenza artificiale c’é l’idea di trovare dei pattern storici semplicemente sulla base di un enorme quantità di dati passati. In passato facevamo previsioni dopo aver compreso il fenomeno oggetto di studio ma le stesse non erano accurate quanto quelle che facciamo oggi con AI.

D’altra parte possiamo affermare che l’algoritmo pur analizzando bene i dati e le correlazioni, non comprende in maniera intelligente e consapevolmente quello che sta facendo. Un sistema a guida autonoma riesce a decidere razionalmente, sulla base della sua codifica se in una situazione di pericolo deve proteggere i suoi passeggeri, il bambino che attraversa la strada.

E se oltre al passeggero, il bambino ci fosse anche un ladro che scappa? Chi codifica il livello di priorità e in base a quale criterio?

C’é un grande dibattito sull’etica dei sistemi AI e sulla responsabilità dei vari
 
attori, a partire dai softwaristi agli utilizzatori, fino a quella dello stesso sistema.
 

Per chi fosse interessato ad ottenere il codice completo e strutturato per un plug and play in

ambiente Jupiter Notebook, richiedetelo pure all’autore all’indirizzo email

nicola.matarese73@gmail.com.
 

 
NON PERDERTI I PROSSIMI ARTICOLI


Nicola Matarese classe 1973, ha conseguito una laurea magistrale in ingegneria meccanica ed ha ricoperto ruoli manageriali all’interno di realtà industriali in ambito aerospazio e difesa.

E’ appassionato di trading e opera sui mercati dal 2001. Da qualche anno lavora a sistemi di trading supportati da teorie sui Big Data e Intelligenza Artificiale.

Collegati o manda un messaggio a Nicola Matarese su LINKEDIN