Rilevazione di anomalie di serie storiche con Python


10

Devo implementare il rilevamento di anomalie su diversi set di dati di serie storiche. Non l'ho mai fatto prima e speravo in qualche consiglio. Mi sento molto a mio agio con Python, quindi preferirei implementare la soluzione (la maggior parte del mio codice è Python per altre parti del mio lavoro).

Descrizione dei dati: sono i dati mensili delle serie temporali che hanno appena iniziato a essere raccolti negli ultimi 2 anni circa (ovvero solo 24-36 periodi di tempo). In sostanza, ci sono diverse metriche monitorate su base mensile per diversi clienti.

time_period    client    metric    score
01-2013        client1   metric1   100
02-2013        client1   metric1   119
01-2013        client2   metric1   50
02-2013        client2   metric2   500
...

Ecco cosa sto pensando: estrarre i dati in un dataframe (panda), quindi calcolare una media mobile di 6 mesi per ogni coppia cliente / metrica. Se il valore del periodo di tempo corrente supera una certa soglia in base alla media a 6 mesi, alza il flag. Il problema sembra piuttosto semplice. Voglio solo assicurarmi di adottare un approccio solido.

Qualche consiglio per approfondire un po 'questa idea sarebbe molto apprezzato. So che la domanda è un po 'astratta e mi scuso per quello.


Non conosco il pitone, ma questa domanda è piena di idee sugli approcci generali: stats.stackexchange.com/questions/26688/…
rapaio,

pypi.org/project/anomaly-detection È stato creato nella libreria per il rilevamento delle anomalie in Python, simile al rilevamento delle anomalie di Twitter. Poiché il codice di rilevamento delle anomalie di Twitter è in linguaggio R. Il tuo problema è un'anomalia contestuale. Anche il modello Auto.arima
saravanan saminathan il

Risposte:


1

Penso che un approccio simile al controllo statistico dei processi , con grafici di controllo ecc. Possa essere utile qui.


Leggerò questo Questo metodo è valido per le serie temporali con piccole quantità di dati (ovvero 24 mesi)?
Eric Miller,

finito di leggere la maggior parte. Secondo questo metodo, dovrei calcolare la 3a deviazione standard per le serie temporali e tracciare una linea su questi limiti. Se un valore supera mai questi limiti, segnalalo. Questo è un metodo che avevo considerato.
Eric Miller,

1

Ci sono molte opzioni per il rilevamento di anomalie, da una deviazione standard utilizzando la funzione di deviazione standard Pandas, a un metodo bayesiano e molti metodi di apprendimento automatico tra cui: clustering, SVM, processo gaussiano, reti neurali.

Dai un'occhiata a questo tutorial: https://www.datascience.com/blog/python-anomaly-detection

Da una prospettiva bayesiana raccomando il profeta di Facebook. Fornisce risultati molto avanzati senza la necessità di essere un esperto di serie storiche. Ha le opzioni per lavorare su mesi, giorni ecc. E "intervalli di incertezza" aiutano con le anomalie.

Infine, raccomando questo blog di Uber sull'uso di reti neurali (LSTM) per il rilevamento di anomalie, ha molte informazioni sui beni: https://eng.uber.com/neural-networks/


0

Se si è disposti a ritenere che il proprio set di dati sia normalmente distribuito, è possibile stimare i quantili di questa distribuzione e vedere se non rientra, ad esempio, il 95%, l'80%, ecc. Non ho molta familiarità con le librerie Python ma sono sicuro che ci sono già funzioni integrate per questo.


C'è una tendenza al rialzo per la maggior parte dei clienti. Non sono sicuro che potresti chiamare i dati in modo casuale.
Eric Miller,

2
Quindi no in questo caso. Credo che il metodo sotto di me e il tuo funzionerebbe bene in questa situazione. Ho fatto qualcosa di simile prima: prendere una media mobile del periodo X mobile, sottrarre il valore della metrica corrente dalla media mobile. Trova i limiti di deviazione standard (o usa un input soggettivo se ti capita di sapere in questo scenario) di questi residui e qualsiasi cosa sopra o sotto questi limiti può essere considerata un'anomalia. Questo metodo funzionerebbe bene se un cliente vedesse improvvisamente un aumento del punteggio.
Kevin Pei,
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.