Ich habe ein Python-Skript, das eine Liste von Listen mit Server-Verfügbarkeits- und Leistungsdaten erstellt, wobei jede Unterliste (oder 'Zeile') die Statistiken eines bestimmten Clusters enthält. Zum Beispiel sieht es gut formatiert so aus:
------- ------------- ------------ ---------- -------------------
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)...
In Listenform könnte es also so aussehen:
[[ams-a,98.099,1012,678,91],[bos-a,98.099,1111,12,91],...]
Meine Frage:
- Wie lassen sich die Ausreißer in jeder Spalte am besten ermitteln? Oder sind Ausreißer nicht unbedingt der beste Weg, um das Problem der Suche nach „Schlechtigkeit“ anzugehen?
In den obigen Daten möchte ich auf jeden Fall etwas über bos-b und ord-b sowie ams-a wissen, da die Fehlerrate so hoch ist, aber die anderen können verworfen werden. Je nach Spalte versuche ich, den effizientesten Weg zu finden, da höher nicht unbedingt schlechter oder niedriger ist. Scheint, als würde Numpy für diese Art von Sachen oft erwähnt, aber ich bin mir nicht sicher, wo ich damit anfangen soll (leider bin ich mehr Systemadministrator als Statistiker ...). Als ich bei Stack Overflow nachfragte, erwähnte jemand, dass er die Scoreatpercentile-Funktion von numpy verwendet und etwas über das 99. Perzentil hinauswirft - scheint das eine gute Idee zu sein?
(Cross-Posting von stackoverflow hier: /programming/4606288 )
Eine einfache Möglichkeit, anomale Server zu finden, besteht darin, anzunehmen, dass sie identisch verteilt sind, die Populationsparameter zu schätzen und sie nach aufsteigenden Wahrscheinlichkeiten zu sortieren. Spaltenwahrscheinlichkeiten würden entweder mit ihrem Produkt oder ihrem Minimum (oder einer anderen T-Norm) kombiniert. Dies funktioniert ziemlich gut, solange Ausreißer selten sind. Für die Erkennung von Ausreißern selbst werden stabile Populationsparameter normalerweise iterativ geschätzt, indem erkannte Ausreißer gelöscht werden. Dies ist jedoch nicht unbedingt erforderlich, solange Sie die Liste manuell überprüfen und dadurch Schwellenwerte vermeiden.
Für die Wahrscheinlichkeiten könnten Sie Beta für die Proportionen und Poisson für die Raten versuchen.
Wie David hervorhob, ist die Ausreißererkennung nicht ganz dasselbe wie die Zuverlässigkeitsanalyse, bei der alle Server gekennzeichnet werden, die einen bestimmten Schwellenwert überschreiten. Darüber hinaus würden sich einige Leute dem Problem durch Verlustfunktionen nähern - indem sie den Schmerz definieren, den Sie empfinden, wenn ein Server eine Verfügbarkeit von 50% oder eine Fehlerrate von 500 aufweist, und ihn dann nach diesem Schmerz einstufen.
quelle
Das Identifizieren eines bestimmten Datenpunkts als Ausreißer impliziert, dass es einen Datenerzeugungsprozess oder ein Datenmodell gibt, von dem die Daten voraussichtlich stammen. Es hört sich so an, als wären Sie sich nicht sicher, welche Modelle für die angegebenen Metriken und Cluster geeignet sind, um die Sie sich Sorgen machen. Hier ist also, was ich untersuchen möchte: statistische Prozesskontrolldiagramme .
Die Idee hier wäre, die
-% Verfügbarkeit
- Anforderungen / Sek
- Fehler / Sek
-% Memory_Utilization zu sammeln
Metriken für jeden Ihrer Cluster. Erstellen Sie für jede Metrik eine Teilmenge der Daten, die nur Werte enthält, die "angemessen" sind oder die Kontrolle haben. Erstellen Sie die Diagramme für jede Metrik basierend auf diesen Kontrolldaten. Anschließend können Sie Live-Daten in Ihren Diagrammcode einspeisen und visuell beurteilen, ob die Metriken die Kontrolle haben oder nicht.
Natürlich ist es möglicherweise nicht möglich, dies visuell für mehrere Metriken in vielen Clustern durchzuführen, aber dies könnte ein guter Weg sein, um mehr über die Dynamik zu erfahren, mit der Sie konfrontiert sind. Anschließend können Sie einen Benachrichtigungsdienst für Cluster mit Metriken erstellen, die außer Kontrolle geraten. In diesem Sinne habe ich mit der Verwendung neuronaler Netze gespielt, um Kontrolldiagrammmuster automatisch als OK gegenüber einer bestimmten Art von außer Kontrolle geratenen Verhaltensweisen zu klassifizieren (z. B.% Verfügbarkeitstrend nach unten oder zyklisches Verhalten in Fehlern / Sek.). Auf diese Weise erhalten Sie die Vorteile statistischer Prozesssteuerungsdiagramme (die seit langem in Fertigungseinstellungen verwendet werden), müssen jedoch nicht mehr viel Zeit damit verbringen, Diagramme tatsächlich zu betrachten, da Sie ein neuronales Netzwerk trainieren können, um Muster anhand Ihrer Experteninterpretation zu klassifizieren.
Was den Code betrifft , gibt es das SPC-Paket auf Pypi, aber ich habe keine Erfahrung damit. Mein Spielzeugbeispiel für die Verwendung neuronaler Netze (auch naive Bayes) finden Sie hier .
quelle