Algoritmi robusti per serie temporali multivariate
Identificazione di outlier: utilizzando una scelta tra le principali librerie disponibili, esiste un insieme di algoritmi in grado di comportarsi, su di un certo numero di dataset (con training senza anomalie), sempre relativamente “bene” rispetto agli altri?
Il problema
Nel nostro primo articolo sulle serie temporali multivariate, ci eravamo concentrati nello sviluppare Raker: un proof of concept multi-algoritmo e multi-modello per l'identificazione di outlier.
In questo secondo articolo, abbiamo cercato di dare una risposta alla seguente domanda:
utilizzando una scelta tra le principali librerie disponibili, esiste un insieme di algoritmi in grado di comportarsi, su di un certo numero di dataset (con training senza anomalie), sempre relativamente “bene” rispetto agli altri?
Eravamo interessati a trovare degli algoritmi “robusti”: su diversi dataset di prova, avremmo cercato quali riuscivano a piazzarsi sempre in un certo percentile superiore (il 10%) rispetto al gruppo scelto. L'idea era che algoritmi con questa versatilità potessero comportarsi mediamente bene su diversi tipi di dataset industriali.
La scelta del metro
Pur misurando comunque le tipiche metriche utilizzate nei problemi di classificazione, per poter stilare una classifica in questo “torneo di algoritmi” abbiamo utilizzato il Matthews correlation coefficient (MCC): oltre ad essere indicato per problemi sbilanciati e a fondere in un'unica equazione – a differenza delle metriche classiche – tutti gli elementi della matrice di confusione, ha il vantaggio di fornire dei valori continui compresi tra -1 e +1, legando il segno alla correlazione diretta o inversa nella predizione e consentendo, anche “a occhio”, di stilare un elenco ordinato.
I dataset utilizzati
Rivolgendoci principalmente al mondo industriale, i dataset che ci interessavano non erano semplici da trovare, dovendo per noi essere:
- di serie temporali multivariate;
- con anomalie annotate;
- con una lunghezza minima di diverse migliaia di campioni;
- un passo di campionamento noto;
- la provenienza da reali sistemi elettromeccanici, idraulici eccetera.
Dato questo insieme di requisiti, abbiamo trovato i seguenti dataset.
SKAB
SKAB (Skoltech Anomaly Benchmark) è reso pubblicamente disponibile dal Skolkovo Institute of Science and Technology (Russia) e contiene diversi sottodataset relativi ad esperimenti nei quali sono state indotte delle anomalie sull'impianto mostrato nella seguente immagine.
SWaT
SWaT (Secure Water Treatment) è un dataset creato dal iTrust (Centre for Research in Cyber Security) della Singapore University of Technology and Design. Non è pubblicamente disponibile: viene concesso su richiesta, con l'impegno a citarli e a informarli qualora si pubblicasse un articolo con dei risultati basati anche sul loro dataset. Anche in questo caso, si tratta di un impianto fisico (mostrato nell'immagine seguente) con anomalie indotte.
Esiste anche un video su YouTube con un tour virtuale dell'impianto.
Kaggle pump sensor data
Il pump sensor data di Kaggle è il più semplice dei tre ma verifica comunque i requisiti.
Preparazione dei dataset di training e testing
Per poter addestrare i modelli, relativamente ai tre macro-dataset (SKAB, SWaT e Kaggle):
- i dataset sono stati ripuliti (sono state rimosse le feature costanti o vuote);
- i dataset sono stati trasformati in modo che ciascu campione appartenesse a una di sole due classi (normale e anomalia) senza distinguere il tipo di anomalia;
- quando necessario, sono stati rimossi, all'interno dei tre macro-dataset, i dataset che presentavano intervalli di anomalie brevi o campioni mancanti;
- sono stati creati diversi training set e testing set, naturalmente sempre disgiunti: in particolare i training set sono stati costruiti in modo da non avere al proprio interno delle anomalie, cercando in questo modo di riprodurre una situazione tipica industriale, nella quale le anomalie spesso non vengono fornite per l'addestramento o sono molto rare (e non è percorribile la strada di indurle su impianti in produzione).
Librerie e algoritmi
Le librerie che abbiamo scelto di utilizzare sono le seguenti, indicando per ciascuna quali algoritmi sono stati provati sui precedenti dataset.
- Alibi Detect
- iforest (Isolation Forest)
- PyCaret
- iforest (Isolation Forest)
- knn (K-Nearest Neighbors Detector)
- lof (Local Outlier Factor)
- osvm (One-class SVM detector)
- PyOD (Python Outlier Detection)
- autoencoder (Autoencoder)
- iforest (Isolation Forest)
- knn (K-Nearest Neighbors Detector)
- osvm (One-class SVM detector)
- scikit-learn
- iforest (Isolation Forest)
- osvm (One-class SVM detector)
I vincitori
Degli 11 algoritmi precendenti, sui dataset scelti (che sono più di tre, considerando i molti sottodataset di SKAB), gli unici sempre presenti nel 10% superiore sono risultati i seguenti:
- PyOD autoencoder
- PyCaret iforest
- PyCaret osvm
Studi simili: ADBench
Pur essendo celebre, per questo articolo abbiamo scelto di non utilizzare ADBench perché fornisce pochi dataset industriali mediamente brevi. Per approfondimenti, si può leggere il loro articolo ADBench: Anomaly Detection Benchmark su OpenReview.
Conclusioni
Abbiamo risposto affermativamente alla domanda iniziale e possiamo dire che esistono alcuni algoritmi consistentemente migliori di altri in termini di versatilità nell'identificare le anomalie temporali per applicazioni industriali.
Abbiamo raccolto qui di seguito alcuni possibili sviluppi di questa piccola ricerca:
- verificare se questi algoritmi ”buoni“ diano predizioni correlate tra loro;
- estendere ad altri algoritmi e librerie l'analisi;
- includere nelle prove una scelta dei dataset più lunghi (e ”industriali“) di studi simili come ADBench.
Questo articolo è stato scritto a seguito dei risultati di una collaborazione con il Dott. Khaled Alamin.
--
Foto di copertina di Rachael Crowe su Unsplash