Hintergrund
Ich arbeite im Network Operations Center. Wir überwachen Computersysteme und deren Leistung. Eine der wichtigsten zu überwachenden Messgrößen ist die Anzahl der Besucher / Kunden, die derzeit mit unseren Servern verbunden sind. Um dies sichtbar zu machen, sammeln wir (Ops-Team) Metriken wie Zeitreihendaten und zeichnen Diagramme. Graphite ermöglicht es uns, es hat eine ziemlich umfangreiche API, die ich verwende, um ein Warnsystem zu erstellen, um unser Team zu benachrichtigen, wenn plötzliche Stürze (meistens) und andere Änderungen auftreten. Im Moment habe ich einen statischen Schwellenwert festgelegt, der auf dem Durchschnittswert basiert, aber aufgrund der unterschiedlichen Belastung während des Tages und der Woche (Saisonalitätsfaktor) nicht sehr gut funktioniert (es gibt viele Fehlalarme).
Es sieht ungefähr so aus:
Die tatsächlichen Daten (ein Beispiel für eine Metrik, 15 Minuten Zeitspanne; die erste Zahl ist die Anzahl der Benutzer, die zweite Zeitmarke):
[{"target": "metric_name", "datapoints": [[175562.0, 1431803460], [176125.0, 1431803520], [176125.0, 1431803580], [175710.0, 1431803640], [175710.0, 1431803700], [175733.0, 1431803760], [175733.0, 1431803820], [175839.0, 1431803880], [175839.0, 1431803940], [175245.0, 1431804000], [175217.0, 1431804060], [175629.0, 1431804120], [175104.0, 1431804180], [175104.0, 1431804240], [175505.0, 1431804300]]}]
Was ich versuche zu erreichen
Ich habe ein Python-Skript erstellt, das die letzten Datenpunkte empfängt, sie mit dem historischen Durchschnitt vergleicht und bei plötzlichen Änderungen oder Stürzen benachrichtigt. Aufgrund der Saisonabhängigkeit funktioniert der "statische" Schwellenwert nicht gut und das Skript generiert falsch-positive Warnungen. Ich möchte einen Alarmierungsalgorithmus präziser gestalten und zum Funktionieren bringen, ohne den Alarmierungsschwellenwert ständig anzupassen.
Welchen Rat ich brauche und was ich entdeckt habe
Durch Googeln habe ich herausgefunden, dass ich nach Algorithmen zum maschinellen Lernen für die Erkennung von Anomalien suche (unbeaufsichtigte). Weitere Untersuchungen ergaben, dass es Unmengen davon gibt und es sehr schwer zu verstehen ist, welche davon in meinem Fall anwendbar ist. Aufgrund meiner begrenzten Mathematikkenntnisse kann ich keine anspruchsvollen wissenschaftlichen Arbeiten lesen und suche für Anfänger auf diesem Gebiet etwas Einfaches.
Ich mag Python und kenne mich ein bisschen mit R aus, daher freue ich mich über Beispiele für diese Sprachen. Bitte empfehlen Sie ein gutes Buch oder einen guten Artikel, um mein Problem zu lösen. Vielen Dank für Ihre Zeit und entschuldigen Sie mich für diese lange Beschreibung
Nützliche Links
Ähnliche Fragen:
- Zeitreihen- und Anomalieerkennung
- Zeitreihen-Anomalieerkennung mit Python
- Zeitreihenanomalien
- Algorithmen zur Erkennung von Zeitreihenanomalien
- Anwendung von Wavelets auf zeitreihenbasierte Anomalieerkennungsalgorithmen
- Welchen Algorithmus soll ich verwenden?
Externe Ressourcen:
auto.arima
Funktion aus dem hervorragenden forecast
Paket von R fortlaufend regelmäßige Vorhersagen erstellte (siehe jstatsoft.org/v27/i03/paper ). Sie können die Vertrauensstufen einstellen level
, indem Sie den Parameter anpassen , z data.model <- auto.arima(data.zoo, ic = c("bic")); data.prediction.warningLimits <- forecast(data.model, h=1, level=0.99)
.