Salta al contenuto
Note per Studenti Anomaly detection

Anomaly detection

In questa pagina 9
In questa pagina 5

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 →). 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.

Da dove viene il 99,73%99{,}73\% (passaggi). Se X∼N(μ,σ2)X\sim N(\mu,\sigma^2) si standardizza Z=(X−μ)/σ∼N(0,1)Z=(X-\mu)/\sigma\sim N(0,1) (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) →, Funzioni di una variabile aleatoriaPer trovare la legge di Y = g(X) si calcola la FdD: F_Y(y) = P(g(X) ≤ y) = P(X ∈ g⁻¹((−∞, y])), poi si deriva; se g è strettamente monotona e derivabile vale la formula f_Y(y) = f_X(g⁻¹(y)) · |(g⁻¹)'(y)|; se g è costante a tratti Y è discreta; se g non è iniettiva (es. X²) si spezza l'evento.Funzioni di una variabile aleatoria →). L'evento ∣X−μ∣≤3σ|X-\mu|\le3\sigma equivale a ∣Z∣≤3|Z|\le3, quindi P(∣X−μ∣≤3σ)=Φ(3)−Φ(−3)=2Φ(3)−1P(|X-\mu|\le3\sigma)=\Phi(3)-\Phi(-3)=2\Phi(3)-1, usando la simmetria Φ(−3)=1−Φ(3)\Phi(-3)=1-\Phi(3) (Funzione di distribuzioneLa funzione di distribuzione (FdD) F_X(x) = P(X ≤ x) è definita per ogni v.a., è crescente, continua a destra, va da 0 a 1 e determina la legge; per una v.a. discreta è a gradini, con salti in corrispondenza dei valori e di altezza pari alla densità.Funzione di distribuzione →). Con Φ(3)=0,99865\Phi(3)=0{,}99865 si ha 2⋅0,99865−1=0,99732\cdot0{,}99865-1=0{,}9973. La probabilità di un falso allarme (punto normale fuori dai limiti) è 1−0,9973=0,00271-0{,}9973=0{,}0027, cioè in media 11 campione su 370370. Con A=2A=2 la copertura sarebbe 0,95450{,}9545 (11 falso allarme su 2222 campioni), con A=1A=1 solo 0,68270{,}6827: più AA è piccolo, più si rilevano anomalie vere ma più falsi allarmi si ricevono. Nell'esempio, la misura 5757 dista 57−502=3,5σ\frac{57-50}{2}=3{,}5\sigma: la probabilità di un valore così lontano per caso è 2(1−Φ(3,5))=0,00052(1-\Phi(3{,}5))=0{,}0005.

Grafico interattivo: Carta di controllo a tre sigma: la densità normale standard con l'area tra −3σ e +3σ (99,73% dei dati normali) e i limiti LCL e UCL; ciò che cade fuori (0,27%) è dichiarato anomalo

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}.

Perché proprio S−1S^{-1} (idea). Nel caso di una variabile T2=(x−xˉ)2/s2=z2T^2=(x-\bar x)^2/s^2=z^2 è il quadrato dello z-score (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 →): la distanza dalla media misurata in deviazioni standard. Con pp variabili la «deviazione standard» diventa la matrice di covarianza SS (Covarianza e coefficiente di correlazioneCov(X, Y) = E[(X − E X)(Y − E Y)] = E[XY] − E[X]E[Y] misura quanto X e Y variano insieme; è bilineare, Cov(X, X) = Var(X), Var(X + Y) = Var X + Var Y + 2Cov(X, Y); ρ = Cov / (σ_X σ_Y) sta in [−1, 1] e vale ±1 solo per legami lineari. Indipendenti ⇒ non correlate, ma non viceversa (tranne per i vettori gaussiani).Covarianza e coefficiente di correlazione →: sulla diagonale le varianze, fuori le covarianze), e dividere per s2s^2 diventa moltiplicare per l'inversa S−1S^{-1} (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 →). Se le variabili sono indipendenti con varianze sj2s_j^2, SS è diagonale e T2=∑j(xj−xˉj)2sj2T^2=\sum_j\frac{(x_j-\bar x_j)^2}{s_j^2}: la somma dei quadrati degli z-score, con ogni variabile pesata per la propria scala. Con correlazioni, S−1S^{-1} corregge anche per esse.

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.)

Perché l'ellisse è allungata lungo la diagonale (autovalori). La regione T2≤cT^2\le c è {x: xTS−1x≤c}\{x:\ x^TS^{-1}x\le c\}, un'ellisse i cui assi sono gli autovettori di SS (Autovalori e autovettoriUn autovettore è un vettore non nullo che una funzione lineare manda in un suo multiplo; si trovano gli autovalori come radici del polinomio caratteristico det(A − λI) e gli autovettori come nucleo di A − λI. Matrici simili hanno gli stessi autovalori.Autovalori e autovettori →, Teorema spettrale e forme quadraticheUna funzione lineare è simmetrica se f(v)·w = v·f(w); in una base ortonormale ha matrice simmetrica. Teorema spettrale: f è simmetrica se e solo se esiste una base ortonormale di autovettori, cioè A simmetrica ⇔ PᵀAP diagonale con P ortogonale. Applicato alle forme quadratiche, permette di scriverle come somma di quadrati con gli autovalori come coefficienti.Teorema spettrale e forme quadratiche →: SS è simmetrica, quindi gli autovettori sono ortogonali). Qui S=(10,80,81)S=\begin{pmatrix}1&0{,}8\\0{,}8&1\end{pmatrix}:

  1. equazione caratteristica det⁡(S−λI)=(1−λ)2−0,64=0\det(S-\lambda I)=(1-\lambda)^2-0{,}64=0, quindi 1−λ=±0,81-\lambda=\pm0{,}8 e λ1=1,8\lambda_1=1{,}8, λ2=0,2\lambda_2=0{,}2;
  2. autovettore di λ1=1,8\lambda_1=1{,}8: (S−1,8I)v=0(S-1{,}8I)v=0 dà −0,8v1+0,8v2=0-0{,}8v_1+0{,}8v_2=0, v=(1,1)/2v=(1,1)/\sqrt2 (la diagonale); per λ2=0,2\lambda_2=0{,}2: v=(1,−1)/2v=(1,-1)/\sqrt2 (l'antidiagonale);
  3. lungo un autovettore vv di SS con autovalore λ\lambda vale S−1v=v/λS^{-1}v=v/\lambda, quindi un punto x=d vx=d\,v ha T2=d2/λT^2=d^2/\lambda (distanza al quadrato divisa per la varianza in quella direzione). La semilunghezza dell'ellisse è allora d=cλd=\sqrt{c\lambda}: con c=5,991c=5{,}991, 5,991⋅1,8=3,28\sqrt{5{,}991\cdot1{,}8}=3{,}28 lungo la diagonale e 5,991⋅0,2=1,09\sqrt{5{,}991\cdot0{,}2}=1{,}09 lungo l'antidiagonale. Per i punti dell'esempio: (2,2)(2,2) sta sulla diagonale a distanza 8=2,83\sqrt8=2{,}83, T2=81,8=4,44T^2=\frac{8}{1{,}8}=4{,}44; (1,−1)(1,-1) sta sull'antidiagonale a distanza 2=1,41>1,09\sqrt2=1{,}41>1{,}09, T2=20,2=10T^2=\frac2{0{,}2}=10. Il grafico mostra gli assi dell'ellisse.

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.

Un esempio in una dimensione, con i numeri. Cinque valori {1,2,3,4,100}\{1,2,3,4,100\} e split uniforme tra il minimo e il massimo dei punti del nodo, cioè in [1,100][1,100] al primo passo (ampiezza 9999). Il punto 100100 è isolato al primo split se la soglia cade in (4,100)(4,100), che ha ampiezza 9696: probabilità 9699=0,97\frac{96}{99}=0{,}97 (Distribuzioni uniforme continua ed esponenzialeU(a, b) ha densità costante 1/(b − a) su [a, b], media (a + b)/2 e varianza (b − a)²/12; Exp(λ) ha densità λe^(−λx) per x ≥ 0, FdD 1 − e^(−λx), P(X > t) = e^(−λt), media 1/λ, varianza 1/λ², ed è l'unica legge continua senza memoria (versione continua della geometrica).Distribuzioni uniforme continua ed esponenziale →: la soglia ha densità uniforme, quindi la probabilità è la lunghezza dell'intervallo diviso per 9999). Il punto 11 si isola subito solo se la soglia cade in (1,2)(1,2): probabilità 199=0,01\frac1{99}=0{,}01. Su 20 00020\,000 simulazioni la profondità media (numero di split per isolare il punto) è 1,031{,}03 per il punto 100100, 2,802{,}80 per 11, 3,493{,}49 per 22, 3,493{,}49 per 33, 2,832{,}83 per 44: l'anomalia 100100 ha profondità circa tre volte più piccola di quelle dei punti centrali. Gli estremi della nube sono più facili da isolare dei punti centrali, ma il valore 100100, lontano dagli altri, lo è molto di più.

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 ricercaAlbero binario di ricerca come albero binario proprio con entry nei nodi interni e foglie vuote; inorder crescente; TreeSearch; get, put e remove (due casi, con predecessore inorder) in Theta(h); altezza fino a n-1; esempi di inserimenti; alberi aumentati con campi size e max e algoritmi di conteggio e interrogazione in O(h).Alberi binari 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. Perché proprio questa analogia: un isolation tree divide i dati con soglie casuali come un albero di ricerca costruito inserendo i punti in ordine casuale, e arrivare a una foglia corrisponde a cercare un valore che non c'è. Controlli sui valori piccoli: c(2)=2H(1)−2⋅12=2−1=1c(2)=2H(1)-\frac{2\cdot1}{2}=2-1=1 (con due punti serve un solo split); c(3)=2(1+12)−2⋅23=3−1,333=1,667c(3)=2\big(1+\frac12\big)-\frac{2\cdot2}3=3-1{,}333=1{,}667. La somma armonica H(m)=∑j=1m1jH(m)=\sum_{j=1}^m\frac1j cresce come ln⁡m\ln m (Serie notevoli - geometrica, telescopica, armonicaLe serie di cui si conosce il carattere e da usare come termine di paragone: geometrica (converge a 1/(1-q) se |q|<1), telescopiche (somma b_1 - lim b_n, come Mengoli), armonica generalizzata (1/n^alpha converge se e solo se alpha>1).Serie notevoli - geometrica, telescopica, armonica →): quindi c(n)≈2ln⁡nc(n)\approx2\ln n cresce lentamente, e per questo con soli 256256 punti per albero il cammino medio è circa 1010, non 256256. L'esponente −E/c(n)-E/c(n) e la base 22 servono a mettere lo score tra 00 e 11: E=c(n)E=c(n) dà 2−1=0,52^{-1}=0{,}5.

Costo. Ogni albero ha profondità al più ⌈log⁡2ψ⌉\lceil\log_2\psi\rceil (con ψ\psi punti nel campione, ψ=256\psi=256 quindi 88 livelli) e ogni livello tocca al più ψ\psi punti, quindi un albero costa O(ψlog⁡ψ)O(\psi\log\psi) e la foresta di tt alberi O(t ψlog⁡ψ)O(t\,\psi\log\psi) (Notazione asintoticaDefinizioni di O, Omega, Theta e o piccolo con le costanti c ed n0; esempi con costanti esplicite; proprietà (polinomi, esponenziali, logaritmi, somme, implicazioni tra notazioni); sommatorie notevoli; terminologia (logaritmica, lineare, polinomiale, esponenziale).Notazione asintotica →, Complessità in tempo e caso pessimoPerché lo studio sperimentale non basta; complessità al caso pessimo come massimo sul numero di operazioni tra le istanze di una data taglia; stima con limiti superiore e inferiore senza trovare l'istanza peggiore; esempi arrayMax, prefixAverages e InsertionSort; efficienza asintotica e limiti dell'analisi.Complessità in tempo e caso pessimo →): non dipende dal numero nn di punti del dataset, a differenza dei metodi basati su distanze come il 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 →), che costano O(n2)O(n^2) per confrontare tutte le coppie. La profondità log⁡2ψ\log_2\psi è quella di un albero binario bilanciato con ψ\psi foglie (Alberi binariAlbero binario e albero binario proprio; interfaccia; relazioni tra nodi, foglie e altezza (m = n-m+1, h+1 <= m <= 2^h, 2h+1 <= n <= 2^(h+1)-1) con dimostrazioni; visita inorder; parse tree e valutazione di espressioni; heightSum come esempio di calcolo di un'informazione più ricca.Alberi binari →).

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 o outlier). Un'osservazione che si discosta tanto dalle altre da far sospettare che sia generata da un meccanismo diverso (Hawkins). In un dataset gli outlier dovrebbero essere pochi. È un compito non supervisionato: si hanno solo gli ingressi xx, senza etichette.

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

A cosa serve.

  • Preprocessing. Togliere errori o rumore ha senso. Togliere i casi difficili dal test set per migliorare le metriche è barare (fuga di informazione), e togliere gli outlier quando sono proprio ciò che interessa (frodi, guasti) annulla lo scopo. Conviene tenere traccia delle scelte.
  • Obiettivo finale: frodi, diagnostica industriale, cybersicurezza.
  • Monitoraggio in produzione: se compaiono outlier, non fidarsi della singola previsione o riaddestrare (MLOps).

Metodi semplici

Box plot. Outlier oltre 1,5×IQR1{,}5\times\mathrm{IQR} dai quartili (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 →).

Carta di controllo univariata. UCL=μx+Aσx\mathrm{UCL}=\mu_x+A\sigma_x e LCL=μx−Aσx\mathrm{LCL}=\mu_x-A\sigma_x. Con A=3A=3 e dati gaussiani (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 cade dentro.

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

Passaggi: con Z=(X−μ)/σ∼N(0,1)Z=(X-\mu)/\sigma\sim N(0,1), P(∣X−μ∣≤3σ)=2Φ(3)−1=0,9973P(|X-\mu|\le3\sigma)=2\Phi(3)-1=0{,}9973 (Funzione di distribuzioneLa funzione di distribuzione (FdD) F_X(x) = P(X ≤ x) è definita per ogni v.a., è crescente, continua a destra, va da 0 a 1 e determina la legge; per una v.a. discreta è a gradini, con salti in corrispondenza dei valori e di altezza pari alla densità.Funzione di distribuzione →). Il falso allarme ha probabilità 0,00270{,}0027, cioè circa 11 punto normale su 370370. Con A=1A=1 la copertura scende a 0,68270{,}6827: più AA è piccolo, più falsi allarmi.

Limite. Le carte univariate non vedono le anomalie multivariate, in cui ogni variabile è nella norma ma la combinazione no.

Statistica T2T^2 di Hotelling

Formula (Hotelling). Con media xˉ\bar x e covarianza campionaria SS: 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: tiene conto delle correlazioni. Anomalia se T2>UCL=χp, 1−α2T^2>\mathrm{UCL}=\chi^2_{p,\,1-\alpha} (dati gaussiani, con pp variabili).

Con una variabile T2=z2T^2=z^2; con SS diagonale T2=∑j(xj−xˉj)2/sj2T^2=\sum_j (x_j-\bar x_j)^2/s_j^2. Le correlazioni sono corrette dall'inversa S−1S^{-1} (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 →, Covarianza e coefficiente di correlazioneCov(X, Y) = E[(X − E X)(Y − E Y)] = E[XY] − E[X]E[Y] misura quanto X e Y variano insieme; è bilineare, Cov(X, X) = Var(X), Var(X + Y) = Var X + Var Y + 2Cov(X, Y); ρ = Cov / (σ_X σ_Y) sta in [−1, 1] e vale ±1 solo per legami lineari. Indipendenti ⇒ non correlate, ma non viceversa (tranne per i vettori gaussiani).Covarianza e coefficiente di correlazione →, 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 →).

Quantili del chi-quadro. χ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; χ3,0,952=7,815\chi^2_{3,0{,}95}=7{,}815.

Esempio bidimensionale. Varianze 11, covarianza 0,80{,}8: S=(10,80,81)S=\begin{pmatrix}1&0{,}8\\0{,}8&1\end{pmatrix}, det⁡S=0,36\det S=0{,}36, 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 x=(1,−1)x=(1,-1): T2=1+1,6+10,36=10>5,991T^2=\frac{1+1{,}6+1}{0{,}36}=10>5{,}991. È un outlier, anche se ogni coordinata è entro 1σ1\sigma, perché le due variabili sono molto correlate. Per x=(2,2)x=(2,2): T2=4,44T^2=4{,}44, dentro la regione.

Ellisse. La regione T2≤cT^2\le c è un'ellisse con assi lungo gli autovettori di SS (Autovalori e autovettoriUn autovettore è un vettore non nullo che una funzione lineare manda in un suo multiplo; si trovano gli autovalori come radici del polinomio caratteristico det(A − λI) e gli autovettori come nucleo di A − λI. Matrici simili hanno gli stessi autovalori.Autovalori e autovettori →, Teorema spettrale e forme quadraticheUna funzione lineare è simmetrica se f(v)·w = v·f(w); in una base ortonormale ha matrice simmetrica. Teorema spettrale: f è simmetrica se e solo se esiste una base ortonormale di autovettori, cioè A simmetrica ⇔ PᵀAP diagonale con P ortogonale. Applicato alle forme quadratiche, permette di scriverle come somma di quadrati con gli autovalori come coefficienti.Teorema spettrale e forme quadratiche →). Qui λ1=1,8\lambda_1=1{,}8 (diagonale) e λ2=0,2\lambda_2=0{,}2 (antidiagonale). Lungo un autovettore il punto d vd\,v ha T2=d2/λT^2=d^2/\lambda: la semilunghezza è cλ\sqrt{c\lambda}, cioè 3,283{,}28 lungo la diagonale e 1,091{,}09 lungo l'antidiagonale. Per questo (1,−1)(1,-1), a distanza 2=1,41\sqrt2=1{,}41 dall'origine sull'antidiagonale, è fuori.

Limite. Richiede dati gaussiani e unimodali: con più gruppi o forme non ellittiche molte anomalie restano non rilevate.

Isolation forest

Un metodo multivariato non supervisionato produce un anomaly score. L'isolation forest (Liu et al.) si basa sull'idea che un punto anomalo, lontano dagli altri, si separa con pochi split casuali, mentre un punto in zona densa ne richiede molti. Lo score è la media della profondità su molti alberi (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 →).

Esempio. Un inlier in mezzo ai dati richiede 44 split; un outlier isolato in un angolo, 11.

Albero di isolamento. A ogni nodo: feature casuale e valore casuale tra minimo e massimo del nodo. Ci si ferma con un solo punto, o alla profondità ⌈log⁡2n⌉\lceil\log_2 n\rceil, o se i punti sono uguali. La profondità della foglia misura quanto il punto è facile da isolare.

Esempio in una dimensione. {1,2,3,4,100}\{1,2,3,4,100\}, primo split in [1,100][1,100]. Il punto 100100 è isolato al primo passo con probabilità 9699=0,97\frac{96}{99}=0{,}97. Il punto 11 solo con probabilità 199=0,01\frac1{99}=0{,}01. Su 20 00020\,000 simulazioni la profondità media è 1,031{,}03 per 100100 e circa 3,53{,}5 per i punti centrali.

Passi.

  1. sottocampionare (per esempio 256256 punti);
  2. costruire un albero per sottocampione;
  3. ripetere per una foresta (tipicamente 100100 alberi);
  4. far scendere ogni punto in tutti gli alberi e registrare la profondità;
  5. calcolare lo score.

Formula (anomaly score). s(x,n)=2−E(h(x))/c(n)s(x,n)=2^{-E(h(x))/c(n)}, dove E(h(x))E(h(x)) è la profondità media su tutti gli alberi e c(n)=2H(n−1)−2(n−1)nc(n)=2H(n-1)-\frac{2(n-1)}{n}, con H(m)=∑i=1m1i≈ln⁡m+0,5772H(m)=\sum_{i=1}^m\frac1i\approx\ln m+0{,}5772.

c(n)c(n) è la lunghezza media di una ricerca senza successo in un albero binario di ricerca (Alberi binari di ricercaAlbero binario di ricerca come albero binario proprio con entry nei nodi interni e foglie vuote; inorder crescente; TreeSearch; get, put e remove (due casi, con predecessore inorder) in Theta(h); altezza fino a n-1; esempi di inserimenti; alberi aumentati con campi size e max e algoritmi di conteggio e interrogazione in O(h).Alberi binari di ricerca →) ed è un fattore di normalizzazione. Passaggi: HH cresce come ln⁡m\ln m (Serie notevoli - geometrica, telescopica, armonicaLe serie di cui si conosce il carattere e da usare come termine di paragone: geometrica (converge a 1/(1-q) se |q|<1), telescopiche (somma b_1 - lim b_n, come Mengoli), armonica generalizzata (1/n^alpha converge se e solo se alpha>1).Serie notevoli - geometrica, telescopica, armonica →). Controlli: c(2)=1c(2)=1, c(3)=1,667c(3)=1{,}667.

Esempio (n=256n=256). c(256)=10,25c(256)=10{,}25. Con E=10,25E=10{,}25 si ha s=0,5s=0{,}5 (punto normale); con E=4E=4 si ha s=0,763s=0{,}763; con E=12E=12 si ha s=0,444s=0{,}444. Lo score tende a 11 quando E→0E\to0 (anomalia certa) e a 00 in zone molto dense.

Soglia. Un punto è anomalo se s>τs>\tau. Un modo di ricavare τ\tau è la contaminazione, cioè la frazione attesa di outlier: τ\tau è il percentile 1−contaminazione1-\text{contaminazione} degli score di training. È una manopola tra falsi positivi e falsi negativi.

Esempio verificato. 200200 punti gaussiani in 2D più 55 punti lontani: i cammini medi degli outlier stanno tra 2,92{,}9 e 4,64{,}6 (contro 1313 per il punto centrale), i loro score tra 0,720{,}72 e 0,820{,}82, mentre il massimo tra i normali è 0,6150{,}615.

Profondità corretta. Se un albero si ferma con più punti nel nodo, si aggiunge c(nnodo)c(n_{\text{nodo}}) alla profondità.

Costo. Un albero costa O(ψlog⁡ψ)O(\psi\log\psi) con ψ\psi punti nel campione, quindi non dipende dal numero nn di punti del dataset (Notazione asintoticaDefinizioni di O, Omega, Theta e o piccolo con le costanti c ed n0; esempi con costanti esplicite; proprietà (polinomi, esponenziali, logaritmi, somme, implicazioni tra notazioni); sommatorie notevoli; terminologia (logaritmica, lineare, polinomiale, esponenziale).Notazione asintotica →), a differenza del k-NN.

Limite. Gli split paralleli agli assi lasciano zone vuote con score basso, dove un punto anomalo potrebbe non essere rilevato.

Altri approcci

Valutare senza etichette

Si possono usare: esperti di dominio che rivedono le prime NN anomalie; eventi noti (guasti, allarmi) come etichette parziali; anomalie sintetiche iniettate (per esempio punti a +7σ+7\sigma e +10σ+10\sigma) per vedere se vengono trovate.

Errori tipici:

  • togliere gli outlier per migliorare le metriche, o togliere proprio ciò che si cerca;
  • usare solo carte univariate e credere di coprire le anomalie multivariate;
  • usare T2T^2 con soglia chi-quadro su dati non gaussiani o multimodali;
  • dimenticare la normalizzazione con c(n)c(n), perché il numero di campioni cambia la scala dei cammini;
  • invertire il verso: score alto significa anomalia, cammino corto.

Esercizi su questo argomento

Teoria collegata