Sto cercando di rilevare alcune anomalie tra le serie storiche # usando Python e sklearn (ma altri suggerimenti di pacchetti sono sicuramente benvenuti!).
Ho un set di 10 serie storiche; ogni serie temporale è costituita dai dati raccolti dal valore di coppia di uno pneumatico (quindi 10 pneumatici in totale) e gli insiemi potrebbero non contenere lo stesso numero di punti dati (le dimensioni dell'insieme differiscono) . I dati di ogni serie temporale sono praticamente solo il tire_id, il timestamp e il sig_value (valore dal segnale o dal sensore). I dati di esempio per una serie storica si presentano così:
tire_id timestamp sig_value
tire_1 23:06.1 12.75
tire_1 23:07.5 0
tire_1 23:09.0 -10.5
Ora ne ho 10 e 2 si comportano in modo strano. Capisco che si tratta di un problema di rilevamento di anomalie, ma la maggior parte degli articoli che leggo online rileva punti di anomalia all'interno della stessa serie temporale (ovvero se in alcuni punti i valori di coppia non sono normali per quello pneumatico).
Per rilevare quali 2 pneumatici si comportano in modo anomalo, ho provato a utilizzare il metodo di clustering, fondamentalmente k-significa clustering (poiché non è supervisionato).
Per preparare i dati da inserire nel clustering k-means, per ogni serie temporale (ovvero per ogni pneumatico), ho calcolato:
- Le prime 3 serie di massimo locale adiacente e minimo locale con ampiezza massima (differenza)
- Media del valore della coppia
- Deviazione standard dei valori di coppia
Ho anche impostato il numero di cluster su solo 2, quindi cluster 1 o 2.
Quindi il mio risultato finale (dopo aver assegnato i cluster) è simile al seguente:
amplitude local maxima local minima sig_value_std \
tire_0 558.50 437.75 -120.75 77.538645
tire_0 532.75 433.75 -99.00 77.538645
tire_0 526.25 438.00 -88.25 77.538645
tire_1 552.50 -116.50 436.00 71.125912
tire_1 542.75 439.25 -103.50 71.125912
sig_value_average cluster
tire_0 12.816990 0
tire_0 12.816990 0
tire_0 12.816990 0
tire_1 11.588038 1
tire_1 11.588038 0
Ora ho una domanda su cosa fare con questo risultato ... quindi ogni pneumatico ha 3 file di dati, dato che ho scelto le prime 3 coppie di max / min locali con 3 ampiezze maggiori, e ciò significa che ogni riga può essere assegnato a un cluster, e talvolta sono assegnati a cluster diversi per 1 pneumatico anche. Inoltre, la dimensione del cluster è normalmente maggiore di solo 2.
Le mie domande sono:
- Come fare il rilevamento di anomalie su "serie di serie temporali" non solo su singoli punti dati?
- Il mio approccio è ragionevole / logico? Se lo è, come posso ripulire il mio risultato per ottenere quello che voglio? E se no, cosa posso fare per migliorare?