• Non ci sono risultati.

Fase di Apprendimento: Training

4.10 Prezzo spot dell’Oro

5.1.2 Fase di Apprendimento: Training

La fase di apprendimento consiste nella fase di stima vera e propria dei parametri del modello, cioè i pesi della rete neurale. Si è deciso di costruire quattro tipologie

di reti per stimare il PUN, diverse per numero e tipologia di variabili esplicative incluse:

1. variabili esogene, cioè prezzo del Brent, prezzo del WTI, prezzo del gas naturale, prezzo dell’oro e fattori atmosferici, tutte al tempo t. In totale 8 variabili esplicative. Il numero di nodi nello strato intermedio va da 1 a 10 quindi, in totale, per questa tipologia, sono state costruite 10 reti neurali. 2. variabili esogene al tempo t e al tempo t − 1, PUN ritardato dal tempo t − 1

al tempo t − 7, per tenere conto della stagionalità settimanale. In tutto 23 variabili esplicative. Il numero di nodi nello strato nascosto va da 1 a 15. 3. variabili esogene al tempo t e PUN ritardato dal tempo t − 1 al tempo t − 7.

In tutto 15 variabili esplicative. Il numero di nodi nello strato nascosto va da 1 a 12.

4. PUN ritardato dal tempo t− al tempo t − 7. In tutto 7 variabili esplicative. Il numero di nodi nello strato nascosto va da 1 a 7.

Il numero totale di reti stimate è, dunque, di 44 reti. Al fine di renderle con- frontabili l’una con l’altra in modo oggettivo, si è deciso di far variare solo il numero dei nodi inclusi nello strato intermedio, mantenendo però fissi tutti gli altri parametri, quali la funzione di attivazione, il metodo di stima, i valori di ini- zializzazione dei pesi, la soglia d’errore ammissibile tra un’iterazione e l’altra (th- reshold), e il numero di iterazioni totali ammesse per raggiungere la convergenza (stepmax).

Di seguito si riporta lo script utilizzato in R, con una spiegazione dei comandi utilizzati. A titolo esemplificativo, vengono indicati i comandi per la costruzione di una singola rete neurale appartenente alla tipologia 1 (PUN spiegato dalle sole variabili esogene), con un solo nodo nello strato intermedio. Per le altre reti i comandi si ripetono, con l’unica accortezza di modificare la tipologia di variabili esplicative inserite e il numero di nodi nello strato intermedio.

DATI_GIORNALIERI_STIMA <- read.table(“DATI_GIORNALIERI_STIMA .txt”,sep“\t”,na.strings=“N/A”,header=T)

Y=(DATI_GIORNALIERI_STIMA$PUN) X=DATI_GIORNALIERI_STIMA[,3:10]

Il comando read.table(“Nomefile.txt”) serve per importare tabelle di dati da diversi formati, ad esempio .txt o .csv. Si ricorda che il periodo campionario uti- lizzato per la fase di Training copre l’intervallo temporale dal 31 maggio 2004 al 17 giugno 2012, per un totale di 2940 dati. sep“\t” serve per comunicare a R che i dati presenti nel file solo separati l’uno dall’altro utilizzando il tasto Tab;

na.strings=“N/A” viene inserito per fare in modo che la rete, successivamente,

non consideri eventuali valori N/A; header=T indica a R che la prima riga del dataset contiene il nome delle variabili.

Il comando (DATI_GIORNALIERI_STIMA$PUN) estrae il vettore PUN dalla matrice DATI_GIORNALIERI_STIMA. Alternativamente era possibile anche uti- lizzare il comando Y=DATI_GIORNALIERI_STIMA[,2]. Operazione analoga è stata fatta per creare la matrice X.

Yr=embed(Y,8)

Il comando embed serve per creare una matrice composta dai valori ritardati da 1 a 7 del vettore Y, che saranno utilizzati come variabili esplicative in alcune reti. La matrice Yr ha così le seguenti dimensioni:

• 2933 righe, 7 in meno rispetto alle matrici viste precedentemente, sottratte per via dei ritardi considerati;

• 8 colonne, dove la prima corrisponde alla serie del PUN al tempo (t − 7), mentre l’ultima coincide con la serie al tempo t.

Mat=cbind(Yr,X[1:2933,])

Il comando cbind permette di unire due o più matrici, creandone una sola. Dato che il numero di righe della matrice Yr e X deve essere lo stesso, sono stati esclusi gli ultimi sette valori dalla matrice X.

MAT=Mat

medie=apply(Mat,2,mean,na.rm=T) stdev=apply(Mat,2,sd,na.rm=T) for (i in 1:16)

MAT[,i]=(MAT[,i]-medie[i])/stdev[i]

Questo gruppo di comandi è stato digitato per: rinominare la matrice Mat, calcolare la media (mean) e deviazione standard (sd) di ogni colonna (indicata con la cifra 2) della matrice MAT e, successivamente, standardizzare tutti i suoi valori tramite l’utilizzo di un ciclo for, impiegato per iterare una sequenza di istruzioni.

colnames(MAT)[8:16]=c(“PUN”“GAS”,“WTI”,“BRENT’,“Temp”,“Prec”, “Ven- to”,“Umid”,“Oro”)

Il commando colnames è utilizzato per nominare le colonne di una matrice quindi, nel caso specifico, le variabili che saranno date in pasto alla rete.

library(neuralnet)

Si richiama il pacchetto neuralnet utilizzando il comando library.

set.seed(22052015)

Il comando set.seed(ggmmaaaa), ripetuto all’inizio di ogni rete neurale, per- mette di mantenere lo stesso “seme”, cioè gli stessi valori casuali iniziali assegnati ai pesi, in modo da rendere confrontabili i risultati delle reti che, altrimenti, ad ogni rilancio, fornirebbero risultati diversi.

net1=neuralnet(PUN GAS+WTI+BRENT+Temp+Prec+Vento+Umid+Oro, da- ta=MAT,hidden=1,stepmax=500000)

Il commando neuralnet è digitato per addestrare la rete (fase di Training) e, quindi, per stimarne i pesi. In questa elaborazione si è deciso di mantenere tutti

i parametri fissati per default dagli autori del pacchetto, ad esclusione del nume- ro di iterazioni (stepmax) che è stato aumentato da 100000, valore di default, a 500000, poiché si è notato, tra le varie prove, che la convergenza veniva raggiun- ta, nella maggior parte dei casi e senza aumentare ulteriormente i tempi com- putazionali, con questo numero di iterazioni. Il pacchetto neurale dà la possibi- lità di variare diversi parametri per la costruzione e la stima della rete, l’elenco completo è disponibile al seguente link https://cran.r-project.org/..

./neuralnet/neuralnet.pdf.

result1=net1$net.result[[1]]*stdev[8]+medie[8]

Questo comando permette di creare un vettore in cui è possibile visualizzare i valori del PUN stimati dalla rete in questione, già post-elaborati.

Pesi1=net1$weights

Questo commando consente di raffigurare i pesi della rete.

test1=confidence.interval(net1)

cbind(test1[[1]][[1]][[1]],test1[[2]][[1]][[1]]) cbind(test1[[1]][[1]][[2]],test1[[2]][[1]][[2]])

Questo set di comandi permette, invece, di visualizzare e rappresentare in maniera agevole gli intervalli di confidenza dei pesi.

Documenti correlati