Quali algoritmi o metodi possono essere utilizzati per rilevare un valore anomalo da questo set di dati?


8

Supponiamo che io sono un insieme di dati: Amount of money (100, 50, 150, 200, 35, 60 ,50, 20, 500). Ho cercato su Google il Web alla ricerca di tecniche che possono essere utilizzate per trovare un possibile valore anomalo in questo set di dati, ma sono diventato confuso.

La mia domanda è : quali algoritmi, tecniche o metodi possono essere utilizzati per rilevare possibili valori anomali in questo set di dati?

PS : considera che i dati non seguono una distribuzione normale. Grazie.


Come si riconosce un valore anomalo su questo piccolo set? Come faresti "a mano" su dati leggermente più grandi?
Laurent Duval,

Risposte:


5

È possibile utilizzare BoxPlot per analisi anomale. Ti mostrerei come farlo in Python:

Considera i tuoi dati come un array:

a = [100, 50, 150, 200, 35, 60 ,50, 20, 500]

Ora, usa Seaborn per tracciare il diagramma a scatole:

import seaborn as sn
sn.boxplot(a)

Quindi, otterrai una trama che assomiglia in qualche modo a questo:

inserisci qui la descrizione dell'immagine

Sembra che 500 sia l'unico valore anomalo per me. Ma tutto dipende dall'analisi e dal livello di tolleranza dell'analista o dello statistico e anche dall'affermazione del problema.

Puoi dare un'occhiata a una delle mie risposte su CrossValidated SE per ulteriori test.

E ci sono molte belle domande sugli outlier e sugli algoritmi e le tecniche per rilevarli.

Il mio preferito è la tecnica della distanza Mahalanobis .


Bene, grazie davvero una bella spiegazione. In questo caso posso applicare la tecnica della distanza Mahalanobis o funziona per dati multivariati?
Nation Chirara,

Puoi. Ma è troppo qualificato per i dati univariati. Solo un'analisi di Boxplot con un determinato valore di soglia dovrebbe fare il lavoro per questi dati.
Dawny33

5

Un modo di pensare al rilevamento anomalo è che stai creando un modello predittivo, quindi stai verificando se un punto rientra nell'intervallo delle previsioni. Da un punto di vista teorico dell'informazione, puoi vedere quanto ogni osservazione aumenta l'entropia del tuo modello.

Se stai trattando questi dati solo come una raccolta di numeri e non hai un modello proposto per come sono generati, potresti anche guardare la media. Se sei certo che i numeri non siano normalmente distribuiti, non puoi fare dichiarazioni su quanto sia 'lontano' un dato numero dalla media, ma puoi semplicemente guardarlo in termini assoluti.

Applicando questo, puoi prendere la media di tutti i numeri, quindi escludere ogni numero e prendere la media degli altri. Qualunque sia la media più diversa dalla media globale è il più grande outlier. Ecco un po 'di pitone:

def avg(a):
    return sum(a)/len(a)

l = [100, 50, 150, 200, 35, 60 ,50, 20, 500]
m = avg(l)
for idx in range(len(l)):
    print("outlier score of {0}: {1}".format(l[idx], abs(m - avg([elem for i, elem in enumerate(l) if i!=idx]))))
>>
outlier score of 100: 4
outlier score of 50: 10
outlier score of 150: 3
outlier score of 200: 9
outlier score of 35: 12
outlier score of 60: 9
outlier score of 50: 10
outlier score of 20: 14
outlier score of 500: 46 

Bene, grazie per la risposta. Sono certo che i numeri non sono normalmente distribuiti, il tuo metodo si applica ancora in quel contesto?
Nation Chirara,

Sì, esiste sempre un modello sottostante che implica previsioni sui dati. Se otteniamo un nuovo punto dati, possiamo fare un'ipotesi su quale sia quel valore. Se non abbiamo altre informazioni sul modello (è solo una raccolta di numeri), allora la migliore ipotesi è che sembrerà simile ai numeri che già abbiamo. Se si finisce con un modello specifico per i dati, è importante incorporarlo nella previsione. L'uso della media non implica che stiamo assumendo una distribuzione normale, ma altri modelli potrebbero usare qualcosa di diverso dalla media.
Tristan Reid,

Ciao. Di solito non trovo che sia una buona idea usare la media per dati distribuiti non normali. In effetti, ad esempio, molti test statistici non parametrici utilizzano la mediana anziché la media. Ma questa è solo un'opinione ...
Michael Hooreman,

Abbastanza giusto, ma penso che sia sicuro affermare che se ritieni che i tuoi dati siano distribuiti simmetricamente, la media è una buona idea, altrimenti la mediana è una misura migliore di un valore "tipico".
Tristan Reid,

3

Un approccio semplice sarebbe usare la stessa cosa usata per i grafici a scatola: via di 1,5 (mediana-q1) o 1,5 (q3-mediana) = anomalia.

Lo trovo utile in molti casi anche se non perfetto e forse troppo semplice.

Ha il vantaggio di non supporre la normalità.

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.