Konzepte

In diesem Artikel gehen wir auf allgemeine Konzepte ein, mit denen wir in der Timeseries Insights API arbeiten, und versuchen, deren Bedeutung auf intuitive Weise zu erläutern.

Ereignis

Ein Ereignis ist ein Datenpunkt und die Rohdaten, mit denen die Timeseries Insights API arbeitet. Konzeptionell stellt sie entweder eine Aktion dar, die von einem Agenten ausgeführt wird (z.B. eine Transaktion eines Kunden oder die Veröffentlichung eines Nachrichtenartikels) oder eine Beobachtung (z.B. die Messwerte eines Temperatursensors oder die CPU-Nutzung auf einem Computer).

Ein Ereignis enthält:

  • Eine Reihe von Werten über verschiedene Dimensionen hinweg, die Attribute darstellen, die das Ereignis beschreiben, z. B. Labels oder numerische Messungen.
  • Ein Zeitstempel, der den Zeitpunkt darstellt, zu dem das Ereignis aufgetreten ist. Dieser Zeitstempel wird beim Zusammenfassen von Ereignissen zu einer Zeitachse verwendet.
  • Eine group-ID.

Dimension

Eine Dimension stellt einen Attributtyp für die Ereignisse in einem Dataset sowie die Domain der möglichen Werte dar. Eine Dimension kann Folgendes sein:

  • Kategorial. Eine Ereigniseigenschaft für diese Dimension kann einen von begrenzten/endlichen Werten enthalten, in der Regel Strings. Beispiele: Land- oder Verlagsname in einem Dataset mit Nachrichtenartikeln, der Computername in einem Dataset mit Produktionsüberwachungsdaten.
  • Numerisch. Eine Messung oder eine allgemeine numerische Eigenschaft für ein Ereignis. Beispiele: Anzahl der Seitenaufrufe für Nachrichtenartikel, CPU-Auslastung oder Anzahl der Fehler bei Produktionsüberwachungsdaten.

Dataset

Ein Dataset ist eine Sammlung von Ereignissen mit einem eindeutigen Namen innerhalb eines Projekts. Abfragen werden innerhalb desselben Datasets ausgeführt.

Gruppe

Ereignisse können durch Angabe derselben Gruppen-ID gruppiert werden (siehe Event.groupId). Die Gruppe ähnelt einer „Sitzung“ von Internetaktivitäten.

Üblicherweise erhält jeder Ereigniseintrag eine eindeutige Gruppen-ID. Zu den Anwendungsfällen für Gruppen-IDs gehören unter anderem:

  • Eine Ereignis-ID für dasselbe Ereignis (mit demselben oder ähnlichen Zeitstempeln) aus mehreren Ereigniseinträgen. Dies gilt insbesondere, wenn verschiedene Attribute desselben Ereignisses aus verschiedenen Quellen stammen und vor dem Eintreten in das System nicht zusammengeführt wurden. So können beispielsweise mehrere Sensoren, die dasselbe Gerät überwachen, jeweils einen separaten Ereigniseintrag erstellen.
  • Eine Sitzungs-ID für eine Sammlung verwandter Ereignisse (normalerweise mit Zeitstempeln innerhalb eines kurzen Zeitraums). Ein Beispiel sind Aktivitäten aus einer Browsersitzung. Ein weiteres Beispiel sind Logeinträge einer Taxifahrt.
  • Eine Nutzerkonto-ID, sodass alle Ereigniseinträge mit derselben Gruppen-ID zum selben Nutzer gehören.

Der Zweck der Gruppe besteht darin, Korrelationen zwischen Ereignissen (Dimensionen) aus derselben Gruppe zu berechnen. Wenn Ihr Dataset beispielsweise Monitoringdaten wie CPU, RAM usw. enthält, könnte eine Gruppe alle Monitoringdaten aus einem Prozess enthalten. Auf diese Weise könnten wir schließlich feststellen, dass ein Anstieg der CPU mit einem anderen Ereignis korreliert, z. B. mit einem Update der Binärversion zu einem früheren Zeitpunkt.

Wenn Sie sich nicht sicher sind oder kein Interesse an der Berechnung dieser Arten von Korrelationen haben, sollte jedes Ereignis eine global eindeutige Gruppen-ID haben. Das Weglassen von groupId hat einen ähnlichen Effekt und eine interne groupId wird anhand des Inhalts und des Zeitstempels generiert.

Slice

Ein Segment ist die Teilmenge aller Ereignisse aus einem Dataset, die bestimmte Werte in einigen Dimensionen haben. Bei einer kategorialen Dimension ist der angegebene Wert ein einzelner fester Wert. Bei einer numerischen Dimension ist der angegebene Wert ein Bereich.

Angenommen, wir haben ein Dataset mit den Verkäufen eines internationalen Einzelhändlers und jedes Ereignis ist ein Verkauf mit folgenden kategorialen Dimensionen: das Land, in dem der Verkauf stattgefunden hat, der Name des Produkts und der Name des Unternehmens, das das Produkt hergestellt hat. Beispiele für Segmente sind in diesem Fall alle Verkäufe eines bestimmten Produkts, alle Verkäufe eines bestimmten Landes für alle Produkte eines bestimmten Unternehmens.

Zeitreihe

Die Zeitreihen, mit denen wir arbeiten, haben eine diskrete Zeit, die sich aus Punkten in gleichen Zeitintervallen zusammensetzt. Die Länge der Zeitintervalle zwischen aufeinanderfolgenden Zeitachsenpunkten wird als Granularität der Zeitachse bezeichnet.

So wird eine Zeitreihe berechnet:

  • Erfassen Sie für ein bestimmtes Slice alle Ereignisse im Zeitintervall [detectionTime - TimeseriesParams.forecastHistory, detectionTime + granularity].
  • Gruppieren Sie diese Ereignisse nach Zeitstempel und Detaillierungsgrad. Ein Ereignis E wird einem Punkt zugewiesen, der zum Zeitpunkt T beginnt, wenn sich E.eventTime im Zeitintervall [T, T + granularity] befindet.
  • Fassen Sie für jeden Punkt in der Zeitachse die Ereignisse basierend auf der angegebenen numerischen Dimension als Messwert (TimeseriesParams.metric) zusammen, der den Wert für diese Punkte darstellt. Die Aggregation erfolgt durch Zählen (wenn kein metric angegeben ist, in der Regel wenn alle Dimensionen des Ereignisses kategorial sind), Addition oder Durchschnitt (wenn metric angegeben ist).

Zeitreihenpunkt

Jedem Zeitachsenpunkt ist eine Zeit und ein Wert zugeordnet.

Die time ist eigentlich ein Intervall der Länge granularity mit time als Startzeit.

Wenn metric (TimeseriesParams.metric) angegeben ist, muss es sich um eine numerische Dimension handeln. Der value des Punkts wird mit TimeseriesParams.metricAggregationMethod aus den Dimensionswerten in der Dimension metric aller Ereignisse innerhalb des internen Zeitraums aggregiert.

Wenn kein Messwert angegeben ist, ist der value des Punkts die Anzahl der Ereignisse innerhalb des Zeitintervalls.

Vorhersage

Prozess der Vorhersage von zukünftigen Werten für eine bestimmte Zeitreihe. Bei der Prognose wird der Anfang der Zeitachse als Trainingsdaten verwendet, um ein Modell zu erstellen.

Horizont

Wir prognostizieren die Werte einer Zeitachse ab der Erkennungszeit bis zum Zeithorizont (im Feld ForecastParams.horizonTime angegeben).

Intuitiv gibt dieses Feld an, wie viel in Zukunft wir vorhersagen sollen. Obwohl uns vor allem der Wert des Erkennungspunkts bei der Klassifizierung eines Segments als Anomalie wichtig ist, lassen wir zu, dass zusätzliche Punkte prognostiziert werden, da sie dem Nutzer nützliche Informationen liefern können.

Erkennungszeit und Erkennungspunkt

Die Erkennungszeit (angegeben durch QueryDataSetRequest.detectionTime) ist der Zeitpunkt, zu dem wir auf potenzielle Anomalien analysieren.

Der Erkennungspunkt ist der Zeitreihenpunkt zum Zeitpunkt der Erkennung.

Erwartete Abweichung

Je nach Stabilität und Vorhersagbarkeit einer Zeitachse können wir in unserer Prognose weniger oder mehr Vertrauen haben. Das Konfidenzniveau wird im Feld EvaluatedSlice.expectedDeviation wiedergegeben. Es gibt eine akzeptable absolute Abweichung von dem Wert an, den wir für die Erkennungszeit prognostiziert haben.

Anomalie

Ein Slice kann als Anomalie betrachtet werden, wenn die Abweichung zwischen den prognostizierten und den tatsächlichen Werten während der Erkennungszeit größer ist als von uns erwartet.

Wie weit die tatsächliche Abweichung von der erwarteten Abweichung entfernt ist, wird als Anomaliewert bezeichnet:

anomalyScore = (detectionPointTatsächlich – detectPointPredict) / Erwartungsabweichung

Im Allgemeinen spiegeln Werte unter 1,0 Abweichungen wider, die in Bezug auf den Verlauf des Slice üblich sind, während Werte über 1,0 Aufmerksamkeit erfordern sollten, während höhere Punktzahlen schwerwiegendere Anomalien darstellen.

Rauschgrenzwert

Der zuvor definierte Anomaliewert zeigt, wie statistisch signifikant eine Abweichung vom Normalbereich ist. In vielen Fällen ist diese Abweichung jedoch möglicherweise nicht wichtig, da die Änderung des absoluten Werts möglicherweise nicht von Interesse ist.

Wenn beispielsweise alle Werte einer Zeitachse gleichmäßig im Bereich (9.9, 10.1) verteilt sind, ist expectedDeviation ~0, 1. Wenn detectionPointForecast den Wert 10.0 und detectionPointActual den Wert 10.3 hat, ist anomalyScore 3.0.

Wenn Änderungen, die im absoluten Wert größer sind, für Sie wichtiger sind, bietet der Rauschgrenzwert eine Möglichkeit, Segmente mit Änderungen unter diesem Grenzwert zu benachteiligen, indem Sie den Anomaliewert abschwächen:

anomalyScore = (detectionPointEffective – DetectionPoint Forecast) / (expectedDeviation + noiseThreshold)

Nächste Schritte