J'essaie de faire une détection d'anomalie entre les séries temporelles # en utilisant Python et sklearn (mais d'autres suggestions de packages sont certainement les bienvenues!).
J'ai un ensemble de 10 séries chronologiques; chaque série chronologique se compose de données collectées à partir de la valeur de couple d'un pneu (donc 10 pneus au total) et les ensembles peuvent ne pas contenir le même nombre de points de données (la taille de l'ensemble diffère) . Chaque donnée de série chronologique est à peu près juste le pneu_id, l'horodatage et la valeur sig_ (valeur du signal ou du capteur). Des exemples de données pour une série chronologique ressemblent à ceci:
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
Maintenant, j'en ai 10, et 2 d'entre eux se comportent étrangement. Je comprends qu'il s'agit d'un problème de détection d'anomalie, mais la plupart des articles que j'ai lus en ligne détectent des points d'anomalie dans la même série temporelle (alias si à certains moments les valeurs de couple ne sont pas normales pour ce pneu).
Pour détecter quels 2 pneus se comportent anormalement, j'ai essayé d'utiliser la méthode de clustering, essentiellement le clustering k-means (car il n'est pas supervisé).
Pour préparer les données à alimenter dans le cluster k-means, pour chaque série chronologique (aka pour chaque pneu), j'ai calculé:
- Les 3 premiers ensembles de maximum local et de minimum local adjacents avec l'amplitude (différence) la plus élevée
- Valeur moyenne du couple
- Écart type des valeurs de couple
J'ai également défini le nombre de clusters à seulement 2, donc soit le cluster 1 ou 2.
Donc mon résultat final (après avoir assigné des clusters) ressemble à ceci:
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
Maintenant, j'ai une question de savoir quoi faire avec ce résultat ... donc chaque pneu a 3 lignes de données, car j'ai choisi les 3 premières paires de max / min locales avec les 3 plus grandes amplitudes, et cela signifie que chaque ligne peut être assignés à un cluster, et parfois ils sont affectés à différents clusters pour 1 pneu même. De plus, la taille du cluster est normalement supérieure à seulement 2.
Mes questions sont:
- Comment faire la détection d'anomalies sur un "ensemble de séries chronologiques" et pas seulement sur des points de données individuels?
- Mon approche est-elle raisonnable / logique? Si c'est le cas, comment puis-je nettoyer mon résultat pour obtenir ce que je veux? Et sinon, que puis-je faire pour m'améliorer?
la source