Salta al contenuto
Note per Studenti Anomaly detection

Anomaly detection

In questa pagina 9

Dopo l'apprendimento supervisionato si passa a quello non supervisionato: in questa nota il rilevamento di anomalie, nella successiva il clustering (Clustering e k-meansIl clustering raggruppa osservazioni simili senza etichette, come preprocessing (un modello per ogni cluster) o come obiettivo (segmentazione clienti, organizzazione di documenti). K-means: si sceglie $K$, si inizializzano $K$ centroidi, si alterna assegnazione di ogni punto al centroide più vicino e aggiornamento di ogni centroide alla media dei suoi punti, fino a convergenza; minimizza $\mathrm{MSE}{\text{within}}=\frac1N\sum_k\sum{x_i\in C_k}|x_i-\mu_k|^2$ ma solo fino a un minimo locale, quindi dipende dall'inizializzazione. Il numero di cluster si sceglie col metodo del gomito (la dispersione cala sempre, si cerca dove rallenta) o con la gap statistic $\mathrm{Gap}(K)=E[\log W_K^{ref}]-\log W_K$ (si prende il più piccolo $K$ con $\mathrm{Gap}(K)\ge\mathrm{Gap}(K+1)-s_{K+1}$). Il clustering gerarchico agglomerativo parte da un cluster per punto e fonde i due più vicini (linkage single, complete, average, Ward) costruendo un dendrogramma; quello divisivo parte da un solo cluster. Programma di Telecomunicazioni: clustering.Clustering e k-means →) (Lezione 19 · Apprendimento non supervisionato e anomaly detection, Lezione 21 · Laboratorio anomaly detection e clustering). Gli esercizi sono Esercizio - Statistica T2 di Hotelling e soglia chi quadro e Esercizio - Isolation forest da zero e anomalie sul dataset delle abitazioni.

Apprendimento non supervisionato

Si ricordi la differenza (Introduzione al machine learningIl machine learning (ML) è la parte dell'intelligenza artificiale che costruisce soluzioni a partire dai dati e non da regole scritte a mano: un modello matematico con parametri liberi viene addestrato su esempi storici e poi usato su dati nuovi. Si distingue tra apprendimento supervisionato (dati $(x,y)$, si impara la mappa $x\mapsto y$: regressione se $y$ è un numero, classificazione se è una categoria), non supervisionato (solo $x$, si cercano struttura e gruppi) e per rinforzo (stato, azione, ricompensa). Un progetto ML non è «plug and play»: segue le fasi problema, raccolta, pulizia, modellazione, rilascio, e va valutato su dati mai visti; senza dati non c'è modello, alcuni fenomeni sono imprevedibili, la generalizzazione fuori dal dominio di addestramento non è garantita.Introduzione al machine learning →): nell'apprendimento supervisionato i dati sono coppie (x,y)(x,y) e si impara la mappa x↦yx\mapsto y; nel non supervisionato si hanno solo gli ingressi xx, senza etichette, e il compito è scoprire la struttura o la distribuzione sottostante dei dati. Alcuni compiti non supervisionati: clustering (trovare gruppi), riduzione di dimensione (Analisi delle componenti principali (PCA)Con $p>3$ variabili non si può disegnare il dataset. La PCA (analisi delle componenti principali) lo proietta su pochi assi ortogonali, le componenti principali: dopo aver centrato (e di solito standardizzato) i dati, le direzioni sono gli autovettori della matrice di covarianza $S=\frac1{n-1}X_c^TX_c$ ordinati per autovalore $\lambda_1\ge\lambda_2\ge\dots$; $\lambda_k$ è la varianza lungo la componente $k$ e $\lambda_k/\sum\lambda_j$ la frazione spiegata (scree plot). Trovare la retta che minimizza le distanze dai punti equivale a massimizzare la varianza delle proiezioni (Pitagora). È lineare e conserva la struttura globale, non quella locale; t-SNE e UMAP sono alternative non lineari solo per visualizzare. Approfondimento: non nel programma di Telecomunicazioni.Analisi delle componenti principali (PCA) →), stima di densità, regole di associazione, topic modelling per testi, rilevamento di anomalie. Un compito non supervisionato può essere l'obiettivo finale del progetto o un passo di preprocessing.

Che cos'è un'anomalia

Definizione (anomalia o outlier). «Un outlier è un'osservazione che si discosta così tanto dalle altre da destare il sospetto di essere stata generata da un meccanismo diverso» (Hawkins, 1980). In un dataset, per definizione, gli outlier dovrebbero essere pochi.

Esempio. Un sensore di temperatura che segna 20002000 gradi invece di 200200 per un guasto del sensore.

Perché rilevare le anomalie

  1. Preprocessing (pulizia). Gli outlier possono essere errori di inserimento o di misura che distorcono i risultati; toglierli può migliorare molto le prestazioni. Va fatto con attenzione, perché togliere i dati «difficili» migliora sempre le metriche.
  2. Obiettivo finale. In molti ambiti il rilevamento è l'obiettivo: frodi, diagnostica di produzione industriale, cybersicurezza, transazioni nel marketing digitale.
  3. Monitoraggio di una soluzione in produzione. Un modello distribuito va controllato: i dati devono rimanere coerenti con quelli dell'addestramento. Se compaiono outlier, si può non fidarsi della singola previsione o riaddestrare (principi di MLOps).

Metodi semplici

Box plot. Gli outlier sono i punti oltre i «baffi», cioè oltre 1,5×IQR1{,}5\times\mathrm{IQR} da Q1Q_1 e Q3Q_3 (Correlazione e visualizzazione dei datiLa correlazione di Pearson $r=\sum(X_i-\bar X)(Y_i-\bar Y)/\big(\sqrt{\sum(X_i-\bar X)^2}\sqrt{\sum(Y_i-\bar Y)^2}\big)\in[-1,1]$ misura la relazione lineare tra due variabili (covarianza divisa per le deviazioni standard); correlazione non implica causalità. Serve a capire quali variabili contano per il target e a eliminare quelle quasi duplicate (|r| molto alto). Gli indicatori di sintesi non bastano (quartetto di Anscombe, Datasaurus): vanno affiancati ai grafici: istogramma, KDE, box plot, violin plot, heatmap di correlazione, scatter plot e matrice di scatter plot.Correlazione e visualizzazione dei dati →, Statistica per il machine learningI dati di un problema ML si organizzano nella matrice di progetto $X$ ($n$ osservazioni, $p$ variabili). La statistica serve a capirli, ripulirli e prepararli: i momenti (media $\mu$, varianza $\sigma^2$, asimmetria, curtosi), i quartili con lo scarto interquartile $\mathrm{IQR}=Q_3-Q_1$ (all'esame senza interpolazione), la moda per i dati categorici. Con queste quantità si imputano i dati mancanti (media o mediana), si eliminano le variabili costanti e si standardizza con lo z-score $z=(x-\mu)/\sigma$, usando sempre media e deviazione standard del solo training set.Statistica per il machine learning →).

Carte di controllo univariate. Molto usate in industria per il monitoraggio on-line. Una carta di controllo è il grafico nel tempo di una variabile (o di un indicatore di processo, KPI) con una linea centrale (la media attesa del processo) e due soglie, il limite di controllo superiore (UCL) e inferiore (LCL), che definiscono l'intervallo «normale»: UCL=μx+A σx,LCL=μx−A σx,\mathrm{UCL}=\mu_x+A\,\sigma_x,\qquad\mathrm{LCL}=\mu_x-A\,\sigma_x, con μx,σx\mu_x,\sigma_x media e deviazione standard stimate. Con A=3A=3 («tre sigma») e una variabile gaussiana (Distribuzione gaussiana (normale)N(μ, σ²) ha densità e^(−(x−μ)²/(2σ²)) / √(2πσ²), a campana centrata in μ con larghezza σ; media μ, varianza σ²; si standardizza con Z = (X − μ)/σ ~ N(0, 1) e si calcola P(X ≤ x) = Φ((x − μ)/σ), con Φ(−z) = 1 − Φ(z); aX + b è ancora gaussiana, N(aμ + b, a²σ²).Distribuzione gaussiana (normale) →) il 99,73%99{,}73\% dei dati è «inlier» (cioè P(∣X−μ∣≤3σ)=0,9973P(|X-\mu|\le3\sigma)=0{,}9973).

Esempio. μ=50\mu=50, σ=2\sigma=2: UCL=56\mathrm{UCL}=56, LCL=44\mathrm{LCL}=44; la misura 5757 è un'anomalia.

Problemi. Con molte variabili servono molte carte: la complessità del monitoraggio cresce, c'è sovraccarico cognitivo e falsi allarmi. E soprattutto le carte univariate non vedono le anomalie multivariate, in cui ogni variabile è nella norma ma la combinazione no.

Statistica T2T^2 di Hotelling

Definizione (statistica T2T^2 di Hotelling). Per pp variabili, con media campionaria xˉ\bar x e matrice di covarianza S=1n−1∑i(xi−xˉ)(xi−xˉ)TS=\frac1{n-1}\sum_i(x_i-\bar x)(x_i-\bar x)^T: T2(x)=(x−xˉ)T S−1 (x−xˉ).T^2(x)=(x-\bar x)^T\,S^{-1}\,(x-\bar x). È uno z-score multivariato: misura quanto un'osservazione è lontana dalla media tenendo conto delle correlazioni. Un punto è un outlier multivariato se T2>UCLT^2>\mathrm{UCL}.

Per dati gaussiani, T2T^2 segue una distribuzione chi-quadro con pp gradi di libertà (Vettori gaussianiX = (X₁, ..., Xₙ) è un vettore gaussiano N(m, Σ) se ogni combinazione lineare a·X è gaussiana (equivalentemente X = m + AZ con Z gaussiane standard indipendenti); se Σ è invertibile ha densità exp(−½(x−m)ᵀΣ⁻¹(x−m)) / √((2π)ⁿ det Σ). Proprietà chiave: AX + b ~ N(Am + b, AΣAᵀ), le marginali sono gaussiane e componenti non correlate sono indipendenti.Vettori gaussiani →; il chi-quadro è un caso della Distribuzione gammaΓ(α, λ) ha densità λ^α x^(α−1) e^(−λx) / Γ(α) per x > 0, dove Γ(α) = ∫ x^(α−1) e^(−x) dx è la funzione Gamma (Γ(n) = (n − 1)!, Γ(1/2) = √π); media α/λ, varianza α/λ²; Γ(1, λ) = Exp(λ), e la somma di n esponenziali Exp(λ) indipendenti è Γ(n, λ), il tempo d'attesa dell'n-esimo evento.Distribuzione gamma →), e UCL=χp, 1−α2,\mathrm{UCL}=\chi^2_{p,\,1-\alpha}, dove pp è il numero di variabili e α\alpha quanto si vuole essere severi (valori tipici 0,050{,}05 o 0,010{,}01): è il quantile di livello 1−α1-\alpha del chi-quadro, che si legge su tabelle.

Esempio. Quantili: per p=1p=1 e α=0,05\alpha=0{,}05, χ2=3,841\chi^2=3{,}841 (uguale a 1,9621{,}96^2); per p=2p=2: 5,9915{,}991 (α=0,05\alpha=0{,}05) e 9,2109{,}210 (α=0,01\alpha=0{,}01); per p=3p=3: 7,8157{,}815. Caso univariato: con media xˉ\bar x e varianza s2s^2 la statistica è (x−xˉ)2/s2(x-\bar x)^2/s^2: nel laboratorio, per 100100 valori da N(0,1)N(0,1) il punto x=5x=5 ha T2≈24T^2\approx24, ben oltre 3,8413{,}841: anomalo.

Esempio bidimensionale. Si abbiano due variabili con media (0,0)(0,0), varianze 11 e covarianza 0,80{,}8: S=(10,80,81)S=\begin{pmatrix}1&0{,}8\\0{,}8&1\end{pmatrix}. L'inversa (Matrice inversaL'inversa di una matrice quadrata A è la matrice A⁻¹ con A A⁻¹ = A⁻¹ A = I; esiste se e solo se rango(A) = n e si calcola con Gauss-Jordan riducendo (A | I) fino a (I | A⁻¹).Matrice inversa →) ha determinante 1−0,64=0,361-0{,}64=0{,}36 e vale S−1=10,36(1−0,8−0,81)S^{-1}=\frac1{0{,}36}\begin{pmatrix}1&-0{,}8\\-0{,}8&1\end{pmatrix}. Per il punto x=(1,−1)x=(1,-1) si ha xTS−1x=10,36(1⋅1+2⋅(−0,8)⋅1⋅(−1)+1⋅1)=1+1,6+10,36=10x^TS^{-1}x=\frac1{0{,}36}\big(1\cdot1+2\cdot(-0{,}8)\cdot1\cdot(-1)+1\cdot1\big)=\frac{1+1{,}6+1}{0{,}36}=10. Poiché 10>5,99110>5{,}991 il punto è un outlier, anche se ciascuna coordinata, presa da sola, vale ±1\pm1 cioè è entro una deviazione standard: le due variabili sono molto correlate e vederle di segno opposto è insolito. La distanza euclidea normale darebbe invece xTx=2x^Tx=2.

Grafico interattivo: Con correlazione 0,8 e varianze 1, la regione «normale» T² ≤ 5,99 (α = 0,05) è un'ellisse allungata lungo la diagonale: il punto (1, −1) è fuori (T² = 10) anche se ogni coordinata è entro 1σ; il punto (2, 2) è dentro (T² = 4,4) anche se ogni coordinata è a 2σ

(Per x=(2,2)x=(2,2): 4−1,6⋅4+40,36=1,60,36=4,44\frac{4-1{,}6\cdot4+4}{0{,}36}=\frac{1{,}6}{0{,}36}=4{,}44.)

Limiti. Le variabili reali sono raramente gaussiane e raramente unimodali (con un solo picco): nei dati industriali reali spesso molte anomalie restano non rilevate perché la nube ha più gruppi o forme non ellittiche.

Rilevamento multivariato non supervisionato

I metodi multivariati non supervisionati producono un anomaly score: un unico indicatore quantitativo del grado di «anomalia» di un sistema con molte variabili. Vantaggi: (1) non servono dati etichettati; (2) si possono considerare decine o centinaia di variabili insieme; (3) non serve che i dati siano gaussiani o unimodali. Famiglie di metodi (per dati tabellari, per esempio nella libreria PyOD): basati sulla densità (LOF, DBSCAN), sulla distanza (k-NN, Classificazione e k-nearest neighborsNella classificazione l'uscita $y$ è una categoria (con $C$ classi; $C=2$ è il caso binario). Il classificatore più semplice è il k-nearest neighbors: una nuova osservazione prende la classe più frequente (voto di maggioranza) tra i suoi $k$ vicini più prossimi nel training, con distanza euclidea $\sqrt{\sum(A_i-B_i)^2}$ o di Manhattan $\sum|A_i-B_i|$ (per la regressione si fa la media dei vicini). $k$ è un iperparametro: $k$ piccolo dà bordi frastagliati e overfitting, $k$ grande underfitting. È un metodo basato su istanze e «pigro» (nessun addestramento, costo alla predizione), sensibile a scala e feature irrilevanti e alla maledizione della dimensionalità; gli ingressi categorici si codificano con one-hot. Approfondimento: non nel programma di Telecomunicazioni.Classificazione e k-nearest neighbors →), sul clustering (CBLOF), su reti neurali (autoencoder, Autoencoderapprofondimento: non nel programma di Telecomunicazioni. Un autoencoder è una rete non supervisionata che impara a ricostruire il proprio ingresso passando per un collo di bottiglia: encoder $z=e(x)$ (dimensione bassa), decoder $\hat x=d(z)$, loss $|x-d(e(x))|^2$. Con attivazioni lineari equivale alla PCA; con non linearità impara rappresentazioni latenti più ricche (ipotesi del manifold). Varianti: sparse (penalità $\ell_1$ sulle attivazioni), denoising (ingresso corrotto, bersaglio pulito), convolutivi (inpainting). Anomaly detection: si addestra su dati normali e si segnala come anomalo ciò che ha errore di ricostruzione sopra una soglia. VAE: l'encoder produce media e deviazione standard di una gaussiana, il campione si ottiene con il trucco di riparametrizzazione $z=\mu+\sigma\odot\zeta$, $\zeta\sim\mathcal N(0,I)$, e la loss è errore di ricostruzione più KL verso $\mathcal N(0,I)$, con $KL=\frac12\sum(\mu^2+\sigma^2-1-\ln\sigma^2)$; il $\beta$-VAE pesa il KL con $\beta>1$ per rappresentazioni disaccoppiate. Cenno ai GAN.Autoencoder →), e l'isolation forest.

Isolation forest

L'isolation forest (Liu et al.) è un algoritmo efficiente che supera altri metodi in molti ambiti. Si basa su un procedimento di partizione (che costruisce gli isolation tree) e sull'idea che outlier e inlier siano influenzati in modo diverso: un punto anomalo, lontano dagli altri, viene separato con pochi split casuali; un punto in una zona densa ne richiede molti. È un metodo ensemble (Metodi ensemble - bagging, random forest e boostingUn albero da solo ha varianza alta; un ensemble combina molti modelli deboli. Bagging: ogni albero è addestrato su un campione bootstrap (n estrazioni con rimpiazzo, circa il 63% di campioni distinti) e si vota o si fa la media: riduce la varianza, perché la media di $T$ stimatori con varianza $\sigma^2$ e correlazione $\rho$ ha varianza $\rho\sigma^2+(1-\rho)\sigma^2/T$. Random forest = bagging + a ogni split solo $\sqrt p$ feature casuali (alberi meno correlati); l'importanza di una feature è la somma delle riduzioni di Gini pesate sui nodi in cui è usata. Boosting: alberi in sequenza, ciascuno corregge gli errori dei precedenti, e si riduce il bias. Gradient boosting: $F\leftarrow F+\eta h$ con $h$ albero sui residui (gradiente negativo della perdita), $\eta$ piccolo; AdaBoost: stump e pesi sui campioni sbagliati; XGBoost: similarity score $\frac{(\sum r)^2}{N+\lambda}$, gain, potatura con $\gamma$, output $\frac{\sum r}{N+\lambda}$. Programma di Telecomunicazioni: Random Forests; boosting come approfondimento.Metodi ensemble - bagging, random forest e boosting →): lo score è la media della profondità su molti alberi.

Esempio (dalle slide). Isolare un inlier in mezzo ai dati richiede 4 split; isolare un outlier isolato in un angolo, 1 solo.

L'albero di isolamento

Si costruisce un albero binario in modo ricorsivo su un sottoinsieme dei dati:

  • a ogni nodo si sceglie a caso una feature e a caso un valore di split tra il minimo e il massimo di quella feature nei dati del nodo;
  • si ferma quando il nodo ha un solo punto, oppure si raggiunge la profondità massima (di solito ⌈log⁡2n⌉\lceil\log_2n\rceil con nn la dimensione del campione), oppure tutti i punti sono uguali.

Ogni cammino dalla radice a una foglia isola un punto: la profondità della foglia, cioè il numero di split necessari, misura quanto il punto è facile da isolare.

Perché tanta casualità. L'obiettivo non è apprendere un modello preciso ma separare le anomalie dal resto in fretta. (1) Le anomalie sono rare e molto diverse: gli split casuali le isolano presto (a poca profondità). (2) Non servono split «buoni» come nei decision tree (Gini, entropia): conta solo quanti split servono per isolare un punto, quindi il caso va bene, anzi è ideale. (3) Mediare su molti alberi con split casuali diversi rende la stima robusta. La scelta casuale della feature evita bias ed esplora tutte le dimensioni; quella casuale del valore semplifica e accelera.

Passi dell'algoritmo

  1. Sottocampionare: da tutto il dataset si estrae a caso un sottoinsieme (per esempio 256256 punti): riduce il costo e migliora la generalizzazione.
  2. Costruire un albero per ciascun sottocampione con le regole sopra.
  3. Ripetere per costruire una foresta (tipicamente 100100 alberi), ciascuno su un campione diverso.
  4. Calcolare le lunghezze dei cammini: ogni punto del dataset originale è fatto scendere in tutti gli alberi e si registra la profondità raggiunta.
  5. Calcolare l'anomaly score. Per il punto xx, con E(h(x))E(h(x)) la lunghezza media del cammino su tutti gli alberi:

    s(x,n)=2−E(h(x))/c(n),c(n)=2H(n−1)−2(n−1)n,H(m)=1+12+13+⋯+1m  (≈ln⁡m+0,5772).s(x,n)=2^{-E(h(x))/c(n)},\qquad c(n)=2H(n-1)-\frac{2(n-1)}{n},\qquad H(m)=1+\frac12+\frac13+\dots+\frac1m\ \ (\approx\ln m+0{,}5772). c(n)c(n) è la lunghezza media di una ricerca senza successo in un albero binario di ricerca con nn nodi: è la lunghezza attesa di un cammino in un albero con nn punti e serve a normalizzare, perché un cammino breve in un dataset piccolo non è uguale a uno breve in un dataset grande.

Esempio. Con n=256n=256: c(256)=2H(255)−2⋅255256=12,241−1,992=10,25c(256)=2H(255)-\frac{2\cdot255}{256}=12{,}241-1{,}992=10{,}25. Se un punto ha cammino medio E=10,25=c(n)E=10{,}25=c(n) (cioè «medio»), s=2−1=0,5s=2^{-1}=0{,}5. Per E=4E=4: s=2−4/10,25=0,763s=2^{-4/10{,}25}=0{,}763 (quasi anomalo); per E=10E=10: 0,5080{,}508; per E=12E=12: 0,4440{,}444. In generale: s→1s\to1 se E→0E\to0 (isolato subito: anomalia certa), s≈0,5s\approx0{,}5 se E≈c(n)E\approx c(n) (punto «normale»), s→0s\to0 se EE è molto maggiore di c(n)c(n) (in zone molto dense).

Grafico interattivo: Anomaly score s = 2^(−E/c(n)) in funzione della lunghezza media del cammino E, con n = 256 (c = 10,25): cammini brevi danno score vicino a 1 (anomalie), E = c(n) dà 0,5

  1. Soglia. Un punto è dichiarato anomalo se s>τs>\tau. Un modo per ricavare τ\tau è la contaminazione: una proporzione (tra 00 e 0,50{,}5, di solito) che indica la frazione attesa di outlier nel dataset. La soglia è il percentile 1−contaminazione1-\text{contaminazione} degli score di training: con contaminazione 0,010{,}01 il 1%1\% dei punti con score più alto è dichiarato anomalo. La contaminazione è una manopola tra falsi positivi (punti normali dichiarati anomali) e falsi negativi (anomalie non segnalate).

Esempio (verificato con un'implementazione da zero). 200200 punti gaussiani standard in 2D più 55 punti molto lontani ((5,5)(5,5), (−6,4)(-6,4), (6,−5)(6,-5), (0,7)(0,7), (−5,−6)(-5,-6)). Con 100100 alberi e profondità massima 88 i cammini medi dei cinque punti iniettati valgono tra 2,92{,}9 e 4,64{,}6 (contro 1313 per il punto mediano), e i loro score 0,720{,}72-0,820{,}82 superano quello di ogni punto normale (massimo 0,6150{,}615, mediana 0,400{,}40): i cinque punti sono i primi cinque nella classifica.

Correzione della profondità. Se si ferma un albero alla profondità massima con più punti nel nodo, la profondità si corregge sommando c(numero di punti nel nodo)c(\text{numero di punti nel nodo}): d←d+c(nnodo)d\leftarrow d+c(n_{\text{nodo}}). Il nodo con un solo punto ha c(1)=0c(1)=0. (Nel notebook, per comodità, H(m)H(m) è approssimata con ln⁡m+γ\ln m+\gamma, γ=0,5772\gamma=0{,}5772: per n=256n=256 dà 10,24510{,}245 invece di 10,24910{,}249, per piccoli nn è meno precisa: c(3)=1,667c(3)=1{,}667 esatta e 1,2071{,}207 approssimata, e per n=2n=2 si pone c=1c=1.)

Esempi e limiti

Nel laboratorio, sul dataset delle abitazioni della California con due variabili (MedInc, AveRooms), la foresta da zero segnala i punti con valori estremi. Per valutare senza etichette si possono iniettare anomalie sintetiche (per esempio punti a +7σ+7\sigma e +10σ+10\sigma dalla media) e vedere se vengono trovate. Un limite («bias» dell'isolation forest): lo score può essere incoerente con i dati, perché gli split casuali paralleli agli assi lasciano zone vuote, anche lontane dai cluster, con score basso (cioè «normali»), dove un punto anomalo non verrebbe rilevato. Nelle prove d'esame è stata proposta una variante «meno casuale» (per esempio non riusare una feature già usata nel ramo): non ci si aspetta che migliori, perché la casualità è un punto di forza dell'algoritmo.

Altri approcci

Valutare un sistema non supervisionato

È il vero svantaggio dei metodi non supervisionati: senza etichette, valutare è difficile. Se non si hanno etichette si cercano etichette approssimate: (i) chiedere a esperti di dominio di rivedere le prime NN anomalie segnalate: hanno senso? (ii) usare eventi noti (guasti, allarmi, anomalie nei log) come etichette parziali; (iii) iniezione sintetica: aggiungere anomalie note (rumore, punti fuori distribuzione) e controllare se il modello le trova.

Codice

python
import numpy as np
from scipy.stats import chi2

class HotellingT2:
    def __init__(self, alpha=0.05): self.alpha = alpha
    def fit(self, X):
        self.mean = X.mean(axis=0)
        self.inv_cov = np.linalg.inv(np.cov(X, rowvar=False))
    def t2(self, X):
        d = X - self.mean
        return np.einsum("ij,jk,ik->i", d, self.inv_cov, d)       # (x-m)^T S^-1 (x-m) per riga
    def predict(self, X):
        return self.t2(X) > chi2.ppf(1 - self.alpha, df=X.shape[1])   # True = anomalo

# isolation forest: from sklearn.ensemble import IsolationForest; IsolationForest(contamination=0.01).fit(X)
# nel laboratorio e nell'esame lo si implementa da zero (albero con split casuali, c(n), soglia a percentile)

Errori tipici

  • Togliere gli outlier per migliorare le metriche, o togliere proprio ciò che si vuole trovare.
  • Applicare le carte di controllo variabile per variabile e credere di coprire le anomalie multivariate.
  • Usare T2T^2 con soglia chi-quadro su dati non gaussiani o multimodali.
  • Dimenticare di normalizzare con c(n)c(n): il numero di campioni cambia la scala dei cammini.
  • Scambiare il verso: score alto (cammino corto) = anomalia.
  • Interpretare la contaminazione come una proprietà dei dati noti: è una scelta che regola il compromesso tra falsi positivi e falsi negativi.

Versione ripasso

Definizione. Anomalia (outlier): osservazione che si discosta tanto dalle altre da far pensare a un meccanismo generatore diverso; dovrebbe essere rara. Non supervisionato: solo xx, nessuna etichetta.

Usi. Preprocessing (togliere errori/rumore ha senso; togliere casi difficili per migliorare le metriche o gli outlier che interessano è barare), obiettivo finale (frodi, guasti, cybersicurezza), monitoraggio in produzione (MLOps).

Semplici. Box plot (1,5 IQR1{,}5\,\mathrm{IQR}). Carta di controllo: UCL/LCL=μ±Aσ\mathrm{UCL/LCL}=\mu\pm A\sigma, A=3⇒99,73%A=3\Rightarrow99{,}73\% per dati gaussiani; non vede anomalie multivariate.

Formula (Hotelling). T2(x)=(x−xˉ)TS−1(x−xˉ)T^2(x)=(x-\bar x)^TS^{-1}(x-\bar x), z-score multivariato; anomalia se T2>UCL=χp,1−α2T^2>\mathrm{UCL}=\chi^2_{p,1-\alpha} (dati gaussiani).

Esempio. S=(10,80,81)S=\begin{pmatrix}1&0{,}8\\0{,}8&1\end{pmatrix}, x=(1,−1)x=(1,-1): T2=1+1,6+10,36=10>χ2,0,952=5,991T^2=\frac{1+1{,}6+1}{0{,}36}=10>\chi^2_{2,0{,}95}=5{,}991: outlier anche se ogni coordinata è entro 1σ1\sigma. Quantili: χ1,0,952=3,841\chi^2_{1,0{,}95}=3{,}841; χ2,0,952=5,991\chi^2_{2,0{,}95}=5{,}991; χ2,0,992=9,210\chi^2_{2,0{,}99}=9{,}210. Limite: dati non gaussiani/unimodali.

Isolation forest. Albero: feature e valore di split casuali fra min e max, fino a un punto o alla profondità massima (⌈log⁡2n⌉\lceil\log_2n\rceil); sottocampioni (es. 256256), ≈100\approx100 alberi. Le anomalie sono isolate con pochi split (cammini brevi).

Formula (anomaly score). s(x,n)=2−E(h(x))/c(n)s(x,n)=2^{-E(h(x))/c(n)}, c(n)=2H(n−1)−2(n−1)nc(n)=2H(n-1)-\frac{2(n-1)}{n}, H(m)=∑i=1m1i≈ln⁡m+0,5772H(m)=\sum_{i=1}^m\frac1i\approx\ln m+0{,}5772 (cc = lunghezza media di una ricerca senza successo in un BST).

Esempio. n=256n=256: c=10,25c=10{,}25; E=c→s=0,5E=c\to s=0{,}5; E=4→0,763E=4\to0{,}763; E=12→0,444E=12\to0{,}444. s→1s\to1 per E→0E\to0.

Soglia: contaminazione = frazione attesa di outlier ⇒τ\Rightarrow\tau = percentile 1−1-contaminazione degli score di training (manopola falsi positivi/negativi). Profondità corretta: d+c(nnodo)d+c(n_{\text{nodo}}).

Altri. PCA non adatta (le anomalie contribuiscono poco alla varianza); osPCA; DIFFI (XAI per iForest, locale e globale, senza etichette). Valutare senza etichette: esperti sulle top-NN, eventi noti come etichette parziali, anomalie sintetiche iniettate.

Errori tipici: togliere gli outlier per migliorare le metriche; solo carte univariate; T2T^2 su dati non gaussiani; score alto = anomalia (non il contrario); scordare c(n)c(n).

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata