Come residente della regione Abruzzo, una delle piu’ pericolose da un punto
di vista sismico, e dopo aver vissuto il terremoto dell’Irpinia degli anni
ottanta ho sperimentato sulla mia pelle la pericolosita’ di questo evento naturale che puo’ fare molti
morti se ci trova impreparati.
Se si riuscisse a prevedere quando avverra’ un terremoto,
il popolo potrebbe prendere azioni preventive e si potrebbero salvare cosi
potenzialmente molte vite. Con l’avvento del Machine Learning negli anni ottanta, i sismologi erano molto ottimisti e
pensavano che prima o poi si sarebbe risolto il problema. Negli anni successivi
purtroppo i sismologi hanno imparato che prevedere i terremoti e’ molto piu’
complicato di quanto pensavano a parte qualche dubbio risultato di scienza
scadente come quello relativo al terremoto dell’Aquila o quelli riportati nel
bel libro di Nate Silver “ The signal and the noise”.
Le onde generate da un terremoto sono composte da due tipi
di onde: p-waves (onde di compressione) che viaggiano ad alta velocita’ e
quindi meno dannose e le s-waves (onde di traslazione) che arrivano qualche secondo dopo
le p-vawes e che generano i danni maggiori.
Rispetto agli anni ottanta il Machine Learning ha fatto molti passi avanti e c’e’ stato anche un aumento significativo dei dati raccolti sul campo e nei diversi laboratori del mondo; questo ha portato una nuova ventata di speranza di poter arrivare prima o poi alla previsione di questi eventi disastrosi.
In questo post cerco di descrivere proprio l’uso del machine learning nella
modellizzazione di un set di dati pubblicati dai Laboratori di Los Alamos, ottenuti grazie ad un esperimento che cerca di mimare i
terremoti reali.
L’esperimento e’ stato realizzato utilizzando due presse idrauliche applicate a due lastre
di acciaio con in mezzo uno strato granulare che allo stesso tempo viene spinto
lentamente verso il basso. Dei sensori acustici catturano il suono generato
dall’attrito del sistema generando in output un segnale digitale continuo (vedi
immagine di seguito). Questo esperimento e’ una buona simulazione del movimento
delle placche tettoniche vicino ad una linea di faglia, producendo dei terremoti
ad un tasso relativamente consistente.
Il terremoto è un intenso scuotimento della superficie
terrestre dovuto a un improvviso slittamento delle rocce nella crosta terrestre
o a faglie vicino all'interfaccia tra le placche tettoniche. Il primo terremoto
di cui si abbia notizia e’ quello verificatosi in Cina nel 1177 a.C. Il primo sismoscopio fu quello
inventato dal filosofo cinese Chang Heng nel 132 d.C. Sebbene oggi il
monitoraggio e la registrazione dei terremoti e’ un qualche cosa di ben
sviluppato, non siamo ancora in grado di prevederli né di comprenderne la causa
esatta. I terremoti tuttavia e le loro conseguenze sono tra gli eventi che di
più hanno cambiato la vita nella storia dell'umanità. Le attività sismiche e le
conseguenze dei disastri sono state la causa maggiore di perdite di vite umane rispetto a tutti gli
altri rischi naturali messi insieme negli ultimi due decenni, in quantro molti
paesi si trovano in zone sismicamente
attive. L'approccio descritto in questo post combina il machine learning con
metodi tipici delle serie temporali per stabilire l'insieme di caratteristiche statistiche più
adatte alla previsione del cosiddetto time to fail (TTF - il tempo rimanente
prima di un sisma). Il database messo a disposizione dai Laboratori di Los
Alamos consiste di due colonne e circa 630 milioni di righe. Le due colonne del database hanno il seguente
significato:
· acoustic_data: il segnale acustico registrato in laboratorio durante l’esperimento;
· time to failure TTF: il tempo rimanente in secondi prima che ci sia un terremoto.
Qui di seguito alcune righe del database in oggetto visualizzate con il software JMP Pro della SAS con cui verranno effettuate tutte le analisi successive.
Nei due grafici seguenti viene riportato
l’andamento del segnale acustico e il time to fail TTF dell’intero esperimento.
Ci sono 16 terremoti in totale con time to fail che vanno da circa 16 sec a
pochi secondi.
Allo scopo di alleggerire il lavoro
della CPU del mio PC ho considerato solo lo 0.025% dell’intero database
campionato in modo casuale per non perdere l’informazione principale contenuto
in esso. Evidenziati in nero due terremoti, l’ottavo e undicesimo della sequenza
con i dati ridotti.
I dati acustici mostrano oscillazioni complesse con ampiezza variabile.
Subito prima di ogni terremoto si verifica un aumento dell'ampiezza dei dati
acustici. Grandi ampiezze si ottengono comunque anche in momenti diversi nel
tempo e non sempre esattamente prima di un sisma. Questo lo possiamo vedere nel
seguente grafico che riporta il segnale acustico dell’ottavo terremoto; le
ampie oscillazioni visibili prima del sisma non avvengono proprio all'ultimo
momento. Ci sono treni di oscillazioni intense che precedono il terremoto
principale e altri con picchi più piccoli che lo seguono. Quindi, dopo alcune
piccole oscillazioni, si verifica il terremoto.
Qui lo zoom sulla
parte finale dell’ottavo terremoto. Come si diceva le oscillazioni dopo l’evento
sismico sono molto piccole.
Stessa cosa prima del
terremoto indicato qui di seguito con una freccia: si notano molti segnali con
picchi bassi prima dell’evento sismico. Questi picchi sono il risultato di
eventi di micro fratture che possono essere utilizzati per predire il Time to
fail (TTF). In generale piu’ il TTF e’
corto e piu’ i picchi acustici sono frequenti. Le caratteristiche statistiche
del segnale acustico quindi possono essere utilizzate come predittori per il
modello di machine learning che andremo a sviluppare.
La varianza del
segnale acustico e’ la feature piu’ importante anche se altri parametri
statistici come la kurtosis e la skewness non possono essere trascurati. Qui di
seguito l’analisi temporale dell’ottavo terremoto eseguita con il modulo di
time series di JMP Pro.
Si vede chiaramente
che quando il tempo di fallimento tendo a zero (ci approssimiamo quindi all’evento
sismico) c’e’ un aumento della variabilita’ del segnale acustico.
Ovviamente per
la costruzione di un modello predittivo non e’ possibile usare il solo segnale
acustico fornito dal laboratorio di Los Alamos. Bisogna costruire delle nuove
feature a partire dal dato acustico. Quest’attivita’ va sotto il nome di
feature engineering. Si tratta di costruire delle nuove colonne (predittori)
che possano aiutare l’algoritmo a fare le sue predizioni. Essendo il segnale
una serie temporale possiamo usare la tecnica della moving window. In parole
semplici a partire da un segnale se ne costruisce un altro calcolando una
particolare statistica all’interno di una finestra di dimensione fissata e che
si muove rigidamente di uno step alla volta. Supponiamo di avere i seguenti
valori: 1 2 3 4 5. Possiamo pensare di costruire una finestra di dimensione 3.
Partendo da 1 la finestra ingloba i valori 2, 3 e 4. Nell’ipotesi che siamo
interessati alla media il valore sara’ (1+2+3+4)/4=2.5. Poi la finestra viene
spostata di 1 e i valori al suo interno saranno: 2 3 4 5. Ricalcoliamo la media
che questa volta sara’ 3.5 e cosi via. La finestra a partire da un certo valore
della serie puo’ prevedere sia un certo numero di dati prima che dopo.
Sono state
costruite un totale di 18 caratteristiche statistiche. Dieci di queste sono il massimo, minimo, media,
mediana, deviazione standard, varianza, curtosi, moda, range e range interquartile. Le restanti otto caratteristiche sono
i percentili a diversi valori: 1%, 5%, 10%, 25%, 75%, 90%, 95% e 99%.
Di seguito i
grafici di alcune feature statistiche riportate in funzione del TTF per l’ottavo
terremoto. E’ evidente come alcune caratteristiche correlino con il TTF, come
per esempio la standard deviation, skewness e kurtosis.
Nel grafico seguente viene riportato l’andamento della varianza per gli ultimi quattro terremoti contenuti nel database. Si vede come per questi c’e’ un trend a crescere della varianza del segnale acustico quanto il TTF si avvicina a zero (terremoto). Comunque da notare che alcune volte sono presenti delle spikes anche prima che avvenga il terremoto. In effetti dobbiamo pensare che durante il movimento delle placche terrestri iniziano a formarsi delle micro fratture nella crosta terreste la cui lunghezza determina l’intensita’ delle spikes. Col procedere dello slittamento si creeranno sempre piu’ microfratture fino a quando non si formera’ la frattura principale che potra’ essere lunga anche diversi chilometri. E’ un vero e proprio effetto domino.
L’algoritmo di machine learning che si e’ deciso di usare e’ il Random
Forest. Vediamo un attimo di cosa si tratta. Definito
Bootstrap Aggregation (o Bagging in breve), è un metodo cosiddetto ensemble. Si tratta cioe’ di una
tecnica che combina le previsioni di più algoritmi di apprendimento automatico
per fare previsioni più accurate rispetto a qualsiasi singolo modello. Il bagging rientra nella categoria
dell’apprendimento Ensemble e il nome deriva dalla combinazione Bootstrap e
Aggregation. Il bootstrap indica il campionamento casuale con rimpiazzo del
dataset iniziale. Se come modello individuale si decide di usare un decision
tree
allora l’algoritmo prende il nome di Random Forest. Ciò significa che una
foresta casuale combina molti alberi decisionali in un unico modello.
Individualmente, le previsioni fatte dagli alberi decisionali potrebbero non
essere accurate, ma combinate insieme, le previsioni saranno in media più
vicine al target. Il risultato finale restituito da un algoritmo di Random
Forest altro non è che la media del risultato numerico restituito dai diversi
alberi nel caso di un problema di regressione, o la classe restituita dal
maggior numero di alberi nel caso di problemi di classificazione.
Prima di
iniziare la modellizzazione si e’ provveduto alla creazione delle nuove
features. Per la dimensione della finestra usata per la costruzione delle
moving statistics sono stati scelti diversi valori come indicato di seguito:
Window size: 20, 50, 100, 150, 300, 500
Le prestazioni della Random Forest hanno mostrato una sensibile dipendenza dall’estensione della finestra temporale come riportato dalle tabelle statistiche create in JMP per diversi modelli di RF.
L’R2, una delle possibili metriche
utilizzate per misurare la bonta’ di un algoritmo mostra un chiaro trend a
crescere all’aumentare della dimensione della finestra temporale considerata
per la costruzione delle engineering features. Per le analisi mostrate di
seguito si e’ scelto una dimensione della finestra di +/-1000.
Cosi facendo si e’ ottenuto un R2 di circa 96% avendo utilizzato 100 decison tree nella foresta, un minimum split per albero pari a 10 e un numero di termini non superiore a 20.
Eliminando i dati dell’after shock le prestazioni della random forest migliorano ulteriormente dando un R2 del 98% e come predittori piu’ importanti quelli riportati nella tabella seguente.
Qui viene
riportata la sequenza del segnale acustico per i 16 terremoti del database
iniziale.
Utilizzando una parte dei dati mai vista dal modello di Random Forest abbiamo eseguito la validazione dell’algoritmo necessaria per capire se il modello creato sta overfittando i dati. L’R2 medio ottenuto e’ di circa il 75% con una MAE di 2.18. Quest’ultimo indica il mean average error, cioe’ la somma del valore assoluto dei residui diviso il numero totale del campione. Come aspettato rispetto al data set usato come training le performance del modello sono inferiori. In questo caso abbiamo una differenza di circa il 22%. In definitiva il modello ha un Bias del 2% e una Variance del 22% che e’ decisamente ancora alta. In genere per ridurre la varianza ci sono diversi opzioni tra cui:
1. . aumentare la dimensione del campione
2. riduzione della complessita’ del modello
Comunque anche
se il risultato del test set non e’ stato dei migliori le informazioni ottenute
sono comunque valide. L’utilita’ dell’applicazione del machine learning nella
previsione del TTF dei Labmoti (terremoti generati in laboratorio) infatti sta
nella possibilita’ di identificare dei segnali sconosciuti che possono portare
a nuove conoscenze sulla fisica delle faglie. Cosa che e’ chiaramente
deducibile anche dai risultati ottenuti nel nostro caso, che fanno vedere come le intensita’ dei precursori
sismici possono essere cosi basse che spesso potrebbero non essere registrate o
addirittura non identificate. In passato infatti questi segnali scambiati per
rumore venivano eliminati di proposito introducendo cosi un bias umano che
invece nel machine learning e’ stato superato. Anche se il lavoro da fare
rimane ancora tanto nella previsione dei terremoti della crosta terrestre di
sicuro il ruolo del machine learning sara’ sempre piu’ importante e stimolante.