tecnica di rilevamento delle anomalie consigliato per una semplice, lo scenario unidimensionale?

StackOverflow https://stackoverflow.com/questions/2303510

  •  21-09-2019
  •  | 
  •  

Domanda

Ho uno scenario in cui ho diverse migliaia di istanze di dati. I dati stessi è rappresentato come un singolo valore intero. Voglio essere in grado di rilevare quando un'istanza è un outlier estremo.

Ad esempio, con i seguenti dati esempio:

a = 10
b = 14
c = 25
d = 467
e = 12

d è chiaramente un'anomalia, e mi vorrebbe per eseguire un'azione specifica sulla base di questo.

Sono stato tentato di provare solo un uso la mia conoscenza del dominio particolare per rilevare anomalie. Ad esempio, capire una distanza dal valore medio che è utile, e controllare che, sulla base di euristiche. Tuttavia, penso che sia probabilmente meglio se indago più generali, robuste tecniche di rilevamento delle anomalie, che hanno un po 'di teoria che sta dietro di loro.

Dal momento che la mia conoscenza della matematica è limitato, spero di trovare una tecnica che è semplice, come l'utilizzo di deviazione standard. Speriamo che la natura single-dimensionato dei dati renderà questo un problema abbastanza comune, ma se è richiesto ulteriori informazioni per lo scenario si prega di lasciare un commento e mi darà più informazioni.


Modifica:. Pensato che vorrei aggiungere ulteriori informazioni sui dati e quello che ho provato nel caso in cui si fa una risposta più corretta di un altro

I valori sono tutti positivi e non zero. Mi aspetto che i valori formeranno una distribuzione normale. Questa aspettativa si basa su un'intuizione del dominio piuttosto che attraverso l'analisi, se questa non è una brutta cosa da assumere, per favore fatemelo sapere. In termini di clustering, a meno che non ci sia anche algoritmi standard per scegliere un valore K, avrei trovato difficoltà a fornire questo valore per un algoritmo k-Means.

L'azione voglio prendere per un outlier / anomalia è di presentarlo per l'utente, e raccomandare che il punto di dati è sostanzialmente rimosso dal set di dati (non voglio entrare in al modo in cui avrebbero fatto, ma ha senso per il mio dominio), quindi non sarà utilizzato come input per un'altra funzione.

Finora ho provato a tre-sigma, e il test outlier IQR sul mio set di dati limitati. IQR bandiere valori che non sono abbastanza estreme, a tre-sigma sottolinea esempi che meglio adattarsi con la mia intuizione del dominio.


Informazioni su algoritmi, le tecniche o link a risorse per imparare su questo scenario specifico sono risposte valide e di benvenuto.

Che cosa è una tecnica di rilevamento delle anomalie consigliato per una semplice, i dati monodimensionali?

È stato utile?

Soluzione

Controlla la regola tre-sigma :

mu  = mean of the data
std = standard deviation of the data
IF abs(x-mu) > 3*std  THEN  x is outlier

Un metodo alternativo è il IQR prova outlier :

Q25 = 25th_percentile
Q75 = 75th_percentile
IQR = Q75 - Q25         // inter-quartile range
IF (x < Q25 - 1.5*IQR) OR (Q75 + 1.5*IQR < x) THEN  x is a mild outlier
IF (x < Q25 - 3.0*IQR) OR (Q75 + 3.0*IQR < x) THEN  x is an extreme outlier

Questo test è di solito impiegato da trame Box (indicato con i baffi):

boxplot


Modifica

Per il vostro caso (semplici dati univariati 1D), penso che la mia prima risposta è adatto. Questo, tuttavia, non si applica ai dati multivariati.

@smaclell suggerito utilizzando K-means per trovare i valori anomali. Oltre al fatto che è soprattutto un algoritmo di clustering (non proprio una tecnica di rilevamento di valori erratici), il problema con k-means è che richiede conoscere in anticipo un buon valore per il numero di cluster K.

Una tecnica più adatta è la rel="nofollow noreferrer"> DBSCAN

dbscan_clustering

DBSCAN richiede due parametri: epsilon e minPoints. Si inizia con un punto arbitrario che non è stato visitato. E poi trova tutti i punti vicini a breve distanza epsilon del punto di partenza.

Se il numero di vicini è maggiore o uguale a minPoints, è formato un cluster. Il punto di partenza ei suoi vicini sono aggiunti a questo gruppo e il punto di partenza è contrassegnato come visitato. L'algoritmo quindi ripete il processo di valutazione per tutti i vicini in modo ricorsivo.

Se il numero di vicini di casa è inferiore minPoints, il punto è contrassegnato come rumore .

Se un cluster è completamente espanso (tutti i punti alla portata sono visitati) allora l'algoritmo procede per scorrere i rimanenti punti visitati fino al loro esaurimento.

Infine l'insieme di tutti i punti contrassegnati come rumore si intendono valori anomali .

Altri suggerimenti

Ci sono una varietà di tecniche di clustering si potrebbe usare per cercare di identificare le tendenze centrali all'interno dei dati. Un tale algoritmo che abbiamo usato pesantemente nel mio corso di pattern recognition era K-Means . Ciò consentirebbe di identificare se ci sono più di un set di dati correlati, come ad esempio un distribuzione bimodale . Ciò richiede di avere qualche conoscenza di quanti cluster ad aspettare, ma è abbastanza efficiente e facile da implementare.

Dopo aver ottenuto i mezzi si potrebbe quindi cercare di scoprire se un qualsiasi punto è lontano da qualsiasi dei mezzi. È possibile definire 'lontano' come vuoi, ma mi sento di raccomandare i suggerimenti di @Amro come un buon punto di partenza.

Per una discussione più approfondita di algoritmi di clustering si riferiscono alla wikipedia ingresso sul raggruppamento .

Sia regola dei tre-sigma e il test IQR sono spesso utilizzati, e ci sono un paio di semplici algoritmi per rilevare anomalie.

The three-sigma rule is correct
mu  = mean of the data
std = standard deviation of the data
IF abs(x-mu) > 3*std  THEN  x is outlier

Il test IQR dovrebbe essere:

Q25 = 25th_percentile
Q75 = 75th_percentile
IQR = Q75 - Q25         // inter-quartile range
If x >  Q75  + 1.5 * IQR or  x   < Q25 - 1.5 * IQR THEN  x is a mild outlier
If x >  Q75  + 3.0 * IQR or  x   < Q25 – 3.0 * IQR THEN  x is a extreme outlier
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top