Des outils pour la détection automatique d'anomalies sur une table SQL?

10

J'ai une grande table SQL qui est essentiellement un journal. Les données sont assez complexes et j'essaie de trouver un moyen d'identifier les anomalies sans que je comprenne toutes les données. J'ai trouvé beaucoup d'outils pour la détection d'anomalies, mais la plupart d'entre eux nécessitent un "intermédiaire", c'est-à-dire Elastic Search, Splunk, etc.

Quelqu'un connaît-il un outil qui peut s'exécuter sur une table SQL qui construit une base de référence et alerte automatiquement les anomalies?

Cela peut sembler paresseux, mais j'ai passé des dizaines d'heures à écrire des scripts de rapport individuels au fur et à mesure que j'apprends ce que signifie chaque type d'événement et quels autres champs vont avec chaque événement et je ne me sens pas plus proche de pouvoir alerter sur de vrais problèmes dans un manière significative. Le tableau comporte 41 colonnes et vient d'atteindre 500 millions de lignes (3 ans de données).

L'avocat du diable
la source
Pas vraiment, mais TRIER par chaque colonne et regarder les valeurs minimales et maximales, et définir des alertes pour les valeurs ridicules pourrait être utile.
Barry Carter
Dans le cas où il ne doit pas être super sophistiqué, vous pouvez utiliser la régression linéaire de la fenêtre mobile mlinreg et identifier ainsi les écarts importants.
Diego

Réponses:

3

Si vous souhaitez aborder cela dans une perspective SQL, je peux identifier les variables de classification qui provoquent un comportement différent. Effectuez ensuite quelque chose comme le suivant sur un certain nombre de variables d'analyse.

SELECT ClassificationVar1, 
    ClassificationVar2, 
    MIN(AnalysisVar1) as Min_AnalysisVar1, 
    MAX(AnalysisVar1) as Max_AnalysisVar1, 
    MEAN(AnalysisVar1) as Mean_AnalysiVar1, 
    STDEV(AnalysisVar1) as Std_AnalysisVar1,
    MIN(AnalysisVar2) as Min_AnalysisVar2, 
    MAX(AnalysisVar2) as Max_AnalysisVar2, 
    MEAN(AnalysisVar2) as Mean_AnalysiVar2, 
    STDEV(AnalysisVar2) as Std_AnalysisVar2,
    etc.
    FROM YourDataFile
GROUP BY ClassificationVar1, ClassificationVar2
ORDER BY ClassificationVar1, ClassificationVar2

J'exécuterais cela comme un exercice ponctuel sur, disons, la dernière année de données, puis du point de vue de la vitesse, je l'exécuterais aussi régulièrement que nécessaire, pour signaler des données exceptionnelles.

Une meilleure approche, peut-être, qui signifie l'apprentissage de nouvelles technologies est une solution HDFS / Spark puis PIG / Python / R. Mais HDFS / Spark ont ​​des solutions qui sortent de la boîte pour faire une analyse de journal. 500 millions d'enregistrements sont probablement à l'origine de problèmes de performances avec SQL, même avec le partitionnement des tables et l'indexation des colonnes.

Marcus D
la source
J'aurais dû noter qu'il s'agit techniquement d'Intersystems Caché. Il expose toutes les classes sous forme de tables SQL. C'est comme ça que je fais tous mes reportages, par souci de raison.
Devil's Advocate
3

Si vous avez besoin de code SQL qui exécute diverses méthodes de détection de valeurs aberrantes sur n'importe quelle table arbitraire, consultez ma série d'articles et d'exemples de codeorienté vers SQL Server. Je fournis un code préliminaire pour les tests de Grubb, les scores Z et les scores Z modifiés, la plage interquartile, le test Q de Dixon, GESD, le test Tietjen-Moore, le critère Pierce, le critère Chauvenet, le test Tau modifié de Thompson, Cook's Distance, Mahalanobis Distance, loi de Benford et divers tracés visuels. Veuillez noter que je suis un amateur à ce sujet et que c'est un peu de mon ancien code, donc je suis sûr que des corrections seront nécessaires; cela fournit au moins un point de départ pour que vous puissiez exécuter ces tests sur n'importe quelle table de base de données pour laquelle vous avez des autorisations. Il est également en T-SQL, vous devrez donc ajuster le code pour PL / SQL ou toute autre marque de SQL que vous utilisez, si vous êtes sur une autre plate-forme comme Oracle ou MySql. Cela devrait cependant vous aider à démarrer. Il suffit de résoudre les problèmes et de définir les procédures stockées pour qu'elles s'exécutent périodiquement et vous êtes prêt à partir. Faites-moi savoir si vous avez des commentaires sur les routines, je cherche toujours à améliorer mon écriture SQL.

SQLServerSteve
la source