Possiamo usare lasciare una deviazione media e standard per rivelare i valori anomali?


17

Supponiamo che io abbia normalmente distribuito dati. Per ogni elemento dei dati voglio verificare quante SD sono lontane dalla media. Potrebbe esserci un valore anomalo nei dati (probabilmente solo uno, ma potrebbe anche essere due o tre) o no, ma questo valore errato è fondamentalmente quello che sto cercando. Ha senso escludere temporaneamente l'elemento che sto osservando dal calcolo della media e della DS? Il mio pensiero è che se è vicino alla media, non ha alcun impatto. Se è un valore anomalo, potrebbe distorcere il calcolo della media e della DS e ridurre la probabilità che venga rilevato. Non sono uno statistico, quindi ogni aiuto è apprezzato!


7
Ha perfettamente senso ed è la base per molte tecniche di rilevamento anomalo. Ma piuttosto che inventare il tuo metodo, che potrebbe o non potrebbe funzionare (e quest'ultimo è molto più probabile anche con metodi recentemente inventati dagli statistici, motivo per cui hanno bisogno di uno studio attento), perché non usi uno che è stato teoricamente controllato e testato empiricamente?
whuber

Grazie per la segnalazione. Cercherò quelle tecniche e vedrò se funzionano bene sui miei dati!
Oliver,


.... E questa risposta per illustrare perché non si può fare affidamento su di trovare più di un singolo valore anomalo.
user603

Grandi pensieri sopra sull'idea di segnalare i valori anomali. Qualche tempo fa, avevo scritto un articolo sull'idea di filtri passa-perdita sulle anomalie di segnalazione. Spero che questo aiuti ad estendere l'idea presentata sopra. Link all'articolo: datascience.com/blog/python-anomaly-detection
Pramit

Risposte:


25

Potrebbe sembrare controintuitivo, ma usare l'approccio che descrivi non ha senso (per prendere le tue parole, preferirei scrivere "può portare a risultati molto diversi da quelli previsti") e non si dovrebbe mai farlo: i rischi di non funziona sono consequenziali e inoltre esiste un'alternativa più semplice, molto più sicura e meglio stabilita disponibile senza costi aggiuntivi.

Innanzitutto, è vero che se esiste un unico valore anomalo, alla fine lo troverai usando la procedura che suggerisci. Ma, in generale (quando potrebbe esserci più di un singolo valore anomalo nei dati), l'algoritmo che suggerisci si rompe completamente, nel senso che potenzialmente ti porta a rifiutare un buon punto dati come valore errato o a mantenere valori anomali come buoni punti dati con conseguenze potenzialmente catastrofiche.

Di seguito, faccio un semplice esempio numerico in cui la regola che proponi viene meno e quindi propongo un'alternativa molto più sicura e consolidata, ma prima spiegherò a) cosa c'è di sbagliato nel metodo che proponi eb) cosa preferisci di solito l'alternativa è.

In sostanza, non è possibile utilizzare la distanza di un'osservazione dalla media di una uscita e la deviazione standard dei dati per rilevare in modo affidabile valori anomali poiché le stime utilizzate (lasciare una media di uscita e deviazione standard) sono ancora suscettibili di essere trascinate verso il rimanente valori anomali: questo si chiama effetto di mascheramento.

In poche parole, un modo semplice per rilevare in modo affidabile valori anomali è utilizzare l'idea generale che hai suggerito (distanza dalla stima della posizione e della scala) ma sostituendo gli stimatori che hai usato (tralasciare una media, sd) con quelli robusti, ad esempio le stime progettato per essere molto meno suscettibile di essere influenzato da valori anomali.

Considera questo esempio, in cui aggiungo 3 valori anomali a 47 osservazioni autentiche tratte da un normale 0,1:

n    <- 50
set.seed(123)  # for reproducibility
x    <- round(rnorm(n,0,1), 1)
x[1] <- x[1]+1000
x[2] <- x[2]+10
x[3] <- x[3]+10

Il codice seguente calcola l'indice di periferia in base alla media della deviazione e alla deviazione standard (ad es. L'approccio suggerito).

out_1 <- rep(NA,n)
for(i in 1:n){  out_1[i] <- abs( x[i]-mean(x[-i]) )/sd(x[-i])  }

e questo codice produce la trama che vedi sotto.

plot(x, out_1, ylim=c(0,1), xlim=c(-3,20))
points(x[1:3], out_1[1:3], col="red", pch=16)

L'immagine 1 mostra il valore dell'indice di periferia in funzione del valore delle osservazioni (il più lontano degli outlier è al di fuori dell'intervallo di questo diagramma ma gli altri due sono mostrati come punti rossi). Come puoi vedere, ad eccezione di quello più estremo, un indice di periferia costruito come suggerisci non riuscirebbe a rivelare i valori anomali: infatti il ​​secondo e il terzo (più lieve) valori anomali ora hanno persino un valore (sul tuo indice di periferia) più piccolo di tuttile osservazioni autentiche! ... Sotto l'approccio da te suggerito, si terranno questi due estremi anomali nell'insieme delle osservazioni autentiche, portandoti a usare le 49 osservazioni rimanenti come se provenissero dallo stesso processo omogeneo, dandoti un finale stima della media e della sd basata su questi 49 punti dati di 0,45 e 2,32, una descrizione molto scadente diuna parte del campione!

image2

xiX

O(xi,X)=|ximed(X)|mad(X)

med(X)Xpazzo(X)

In R, questo secondo indice di periferia può essere calcolato come:

out_2 <- abs( x-median(x) )/mad(x)

e tracciato (come prima) usando:

plot(x, out_2, ylim=c(0,15), xlim=c(-3,20))
points(x[1:3], out_2[1:3], col="red", pch=16)

image2

L'immagine 2 mostra il valore di questo indice di periferia alternativo per lo stesso set di dati. Come puoi vedere, ora tutti e tre i valori anomali vengono chiaramente rivelati come tali. Inoltre, questa regola di rilevazione anomala ha alcune proprietà statistiche stabilite. Ciò porta, tra l'altro, a regole di interruzione utilizzabili. Ad esempio, se si può presumere che la parte autentica dei dati sia disegnata da una distribuzione simmetrica con un secondo momento finito, è possibile rifiutare tutti i punti di dati per i quali

|Xio-med(X)|pazzo(X)>3.5

come valori anomali. Nell'esempio sopra, l'applicazione di questa regola porterebbe a contrassegnare correttamente l'osservazione 1,2 e 3. Rifiutando queste, la media e la sd delle restanti osservazioni è ricettiva 0,021 e 0,93, una descrizione molto migliore della parte autentica del campione !


2
+1, nonostante la prima frase, che immediatamente contraddicono (proposta della OP fa ha senso, quando al massimo un valore erratico si presume, le tue preoccupazioni obiezione problemi con questa procedura quando questo presupposto viene violata).
whuber

1
Grazie. Nel frattempo ho eliminato il mio commento precedente, anticipando che diventerà obsoleto dopo le tue modifiche.
whuber

3
Il fenomeno in cui diversi valori anomali rendono cieco il rilevamento di un valore anomalo per ognuno di essi viene spesso chiamato mascheramento . Ciò può aiutare le persone a individuare ulteriori informazioni relative al problema.
Glen_b

1
@ user603 Bel lavoro creando uno scenario illustrativo ma penso che stai buttando via il bambino con l'acqua del bagno. La diagnostica della cancellazione della regressione non è perfetta ma sono ampiamente applicabili e hanno superato la prova del tempo. Prendere la mediana va bene, ma mi chiedo come estenderesti il ​​tuo approccio a modelli più complessi basati sulla verosimiglianza.
Ben Ogorek,

2
+6, Questa è una risposta davvero eccezionale - spiegata in modo chiaro e completo, illustrata con codice, figure e formule. Ho modificato leggermente la formattazione del codice per renderlo un po 'più facile da leggere. Se non ti piace, torna indietro con le mie scuse.
gung - Ripristina Monica
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.