J'ai un script python qui crée une liste de listes de disponibilité du serveur et de données de performance, où chaque sous-liste (ou «ligne») contient les statistiques d'un cluster particulier. Par exemple, bien formaté, il ressemble à ceci:
------- ------------- ------------ ---------- -------------------
Cluster %Availability Requests/Sec Errors/Sec %Memory_Utilization
------- ------------- ------------ ---------- -------------------
ams-a 98.099 1012 678 91
bos-a 98.099 1111 12 91
bos-b 55.123 1513 576 22
lax-a 99.110 988 10 89
pdx-a 98.123 1121 11 90
ord-b 75.005 1301 123 100
sjc-a 99.020 1000 10 88
...(so on)...
Donc, sous forme de liste, cela pourrait ressembler à:
[[ams-a,98.099,1012,678,91],[bos-a,98.099,1111,12,91],...]
Ma question:
- Quelle est la meilleure façon de déterminer les valeurs aberrantes dans chaque colonne? Ou les valeurs aberrantes ne sont-elles pas nécessairement le meilleur moyen d'attaquer le problème de la découverte de la «méchanceté»?
Dans les données ci-dessus, je voudrais certainement en savoir plus sur bos-b et ord-b, ainsi que sur ams-a car son taux d'erreur est si élevé, mais les autres peuvent être ignorés. Selon la colonne, puisque plus haut n'est pas nécessairement pire, ni plus bas, j'essaie de trouver le moyen le plus efficace de le faire. On dirait que numpy est souvent mentionné pour ce genre de choses, mais je ne sais pas par où commencer même (malheureusement, je suis plus administrateur système que statisticien ...). Lorsque j'ai demandé à Stack Overflow, quelqu'un a mentionné l'utilisation de la fonction scoreatpercentile de numpy et a jeté quoi que ce soit au-dessus du 99e centile - cela semble-t-il une bonne idée?
(Transféré par stackoverflow, ici: /programming/4606288 )
Un moyen simple de trouver des serveurs anormaux serait de supposer qu'ils sont distribués de manière identique, d'estimer les paramètres de la population et de les trier selon leurs probabilités, en ordre croissant. Les probabilités de colonne seraient combinées soit avec leur produit, soit avec leur minimum (ou une autre norme T). Cela fonctionne assez bien tant que les valeurs aberrantes sont rares. Pour la détection des valeurs aberrantes elle-même, les paramètres de population stables sont généralement estimés de manière itérative en supprimant les valeurs aberrantes découvertes, mais ce n'est pas vital tant que vous inspectez manuellement la liste et évitez ainsi le seuillage.
Pour les probabilités, vous pouvez essayer Beta pour les proportions et Poisson pour les taux.
Comme l'a souligné David, la détection des valeurs aberrantes n'est pas tout à fait la même chose que l'analyse de fiabilité, qui signalerait tous les serveurs dépassant un certain seuil. De plus, certaines personnes aborderaient le problème à travers les fonctions de perte - définissant la douleur que vous ressentez lorsqu'un serveur est à 50% de disponibilité ou à un taux d'erreur de 500, puis les classent en fonction de cette douleur.
la source
L'identification d'un point de données donné en tant que valeur aberrante implique qu'il existe un processus ou modèle de génération de données dont les données devraient provenir. Il semble que vous ne soyez pas sûr de savoir quels sont ces modèles pour les métriques et les clusters donnés qui vous préoccupent. Voici donc ce que j'envisagerais d'explorer: les cartes de contrôle des processus statistiques .
L'idée ici serait de collecter le
-% Disponibilité
- Demandes / Sec
- Erreurs / Sec
-% Memory_Utilization
des métriques pour chacun de vos clusters. Pour chaque métrique, créez un sous-ensemble des données qui inclut uniquement des valeurs "raisonnables" ou contrôlées. Créez les graphiques pour chaque mesure en fonction de ces données sous contrôle. Ensuite, vous pouvez commencer à fournir des données en direct à votre code graphique et évaluer visuellement si les métriques sont en contrôle ou non.
Bien sûr, faire cela visuellement pour plusieurs métriques dans de nombreux clusters peut ne pas être possible, mais cela pourrait être un bon moyen de commencer à en apprendre davantage sur la dynamique à laquelle vous êtes confronté. Vous pouvez ensuite créer un service de notification pour les clusters avec des mesures qui deviennent incontrôlables. Dans ce sens, j'ai joué avec l'utilisation de réseaux de neurones pour classer automatiquement les modèles de tableau de contrôle comme étant OK par rapport à une certaine saveur hors de contrôle (par exemple,% de tendance à la baisse ou comportement cyclique en erreurs / s). Cela vous donne les avantages des graphiques de contrôle des processus statistiques (utilisés depuis longtemps dans les paramètres de fabrication), mais allège le fardeau d'avoir à passer beaucoup de temps à regarder les graphiques, car vous pouvez former un réseau de neurones à classer les modèles en fonction de votre interprétation experte.
Quant au code, il y a le paquet spc sur pypi mais je n'ai aucune expérience en l'utilisant. Mon exemple jouet d'utilisation de réseaux de neurones (Bayes naïfs aussi) peut être trouvé ici .
la source