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 keinmetric
angegeben ist, in der Regel wenn alle Dimensionen des Ereignisses kategorial sind), Addition oder Durchschnitt (wennmetric
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
- Folgen Sie der Anleitung unter Einrichtung für vollständigen Zugriff, um Ihr eigenes Projekt zu erstellen.
- Eine ausführlichere Anleitung
- Weitere Informationen zur REST API