In diesem Artikel gehen wir auf gängige Konzepte ein, die in der Timeseries Insights API verwendet werden, und versuchen, eine intuitive Erklärung dafür zu liefern, was sie bedeuten.
Ereignis
Ein Ereignis ist ein Datenpunkt und der Roheingabewert, mit dem die Timeseries Insights API arbeitet. Konzeptionell steht es entweder für eine Aktion, die von einem Akteur ausgeführt wird (z.B. eine Transaktion durch einen Kunden oder die Veröffentlichung eines Nachrichtenartikels), oder für eine Beobachtung (z.B. die Messwerte eines Temperatursensors oder die CPU-Auslastung eines Computers).
Ein Ereignis enthält Folgendes:
- Eine Reihe von Werten aus verschiedenen Dimensionen, die Eigenschaften darstellen, die das Ereignis beschreiben, z. B. Labels oder numerische Messwerte.
- Ein Zeitstempel, der angibt, wann das Ereignis aufgetreten ist. Dieser Zeitstempel wird verwendet, wenn Ereignisse zu einer Zeitreihe zusammengefasst werden.
- Eine Gruppen-ID.
Dimension
Eine Dimension stellt einen Property-Typ für die Ereignisse in einem Datensatz und den Wertebereich dar, der zulässig ist. Eine Dimension kann Folgendes sein:
- Kategorisch. Eine Ereigniseigenschaft für diese Dimension kann einen der begrenzten/endlichen Werte enthalten, in der Regel Strings. Beispiele: Land oder Name des Verlags in einem Datensatz mit Nachrichtenartikeln, Name des Geräts in einem Datensatz mit Produktionsüberwachungsdaten.
- Numerisch. Ein Messwert 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 Datensatzes ausgeführt.
Gruppe
Ereignisse können gruppiert werden, indem dieselbe Gruppen-ID angegeben wird (siehe Event.groupId
). Die Gruppe ähnelt einer „Sitzung“ von Internetaktivitäten.
In den meisten Fällen wird jedem Ereignis eine eindeutige Gruppen-ID zugewiesen. Beispiele für Anwendungsfälle von Gruppen-IDs:
- Eine Ereignis-ID für dasselbe Ereignis (mit denselben oder ähnlichen Zeitstempeln) aus mehreren Ereignis-Einträgen, insbesondere wenn unterschiedliche Eigenschaften desselben Ereignisses aus verschiedenen Quellen stammen und vor dem Eintrag in das System nicht zusammengeführt wurden. Beispielsweise können mehrere Sensoren, die dasselbe Gerät überwachen, jeweils einen separaten Ereignisdatensatz generieren.
- Eine Sitzungs-ID für eine Sammlung verwandter Ereignisse (in der Regel mit Zeitstempeln innerhalb eines kurzen Zeitraums). Ein Beispiel sind Aktivitäten aus einer Sitzung im Webbrowser. Ein weiteres Beispiel sind Logeinträge von einer Taxifahrt.
- Eine Nutzerkonto-ID, damit alle Ereignis-Einträge mit derselben Gruppen-ID demselben Nutzer zugewiesen werden.
Der Zweck der Gruppe besteht darin, Korrelationen zwischen (Dimensionen von) Ereignissen aus derselben Gruppe zu berechnen. Wenn Ihr Datensatz beispielsweise Monitoringdaten (z. B. CPU, RAM usw.) enthält, kann eine Gruppe alle Monitoringdaten eines Prozesses enthalten. So können wir feststellen, ob ein Anstieg der CPU-Auslastung mit einem anderen Ereignis zusammenhängt, z. B. mit einer Aktualisierung der Binärversion zu einem früheren Zeitpunkt.
Wenn Sie sich nicht sicher sind oder diese Art von Korrelationen nicht berechnen möchten, sollte jedes Ereignis eine global eindeutige Gruppen-ID haben. Wenn Sie groupId
weglassen, hat das einen ähnlichen Effekt. Es wird dann eine interne groupId
basierend auf dem Inhalt und dem Zeitstempel generiert.
Slice
Ein Ausschnitt ist die Teilmenge aller Ereignisse aus einem Datensatz, die bestimmte Werte für einige Dimensionen haben. Bei einer kategorischen Dimension ist der angegebene Wert ein einzelner fester Wert. Bei einer numerischen Dimension ist der angegebene Wert ein Bereich.
Angenommen, Sie haben einen Datensatz mit den Verkäufen eines internationalen Einzelhändlers. Jedes Ereignis ist ein Verkauf mit den folgenden kategorischen 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 solche Segmente sind: alle Verkäufe eines bestimmten Produkts, alle Verkäufe in einem bestimmten Land für alle Produkte eines bestimmten Unternehmens.
Zeitreihe
Die Zeitreihen, mit denen wir arbeiten, sind diskret und bestehen aus Punkten in gleichen Zeitintervallen. Die Länge der Zeitintervalle zwischen aufeinanderfolgenden Zeitreihenpunkten wird als Granularität der Zeitreihe bezeichnet.
Eine Zeitreihe wird so berechnet:
- Für einen bestimmten Ausschnitt werden alle Ereignisse im Zeitintervall [
detectionTime - TimeseriesParams.forecastHistory
,detectionTime + granularity
] erfasst. - Gruppieren Sie diese Ereignisse anhand ihres Zeitstempels und ihrer Detaillierung. Ein Ereignis E wird einem Punkt zugewiesen, der um T beginnt, wenn
E.eventTime
im Zeitintervall [T
,T + granularity
] liegt. - Die Ereignisse werden für jeden Punkt in der Zeitreihe basierend auf der angegebenen numerischen Dimension als Messwert (
TimeseriesParams.metric
) zusammengefasst, der den Wert für diese Punkte darstellt. Die Aggregation kann durch Zählen (wenn keinmetric
angegeben ist, in der Regel wenn alle Dimensionen des Ereignisses kategorisch sind), Addition oder Mittelung (wennmetric
angegeben ist) erfolgen.
Zeitreihenpunkt
Jedem Zeitreihenpunkt sind eine Zeit und ein Wert zugeordnet.
time ist ein Intervall mit der Länge granularity
, wobei time
der Startzeitpunkt ist.
Wenn Messwert (TimeseriesParams.metric
) angegeben ist, muss es sich um eine numerische Dimension handeln. Der value
des Punkts wird mithilfe von TimeseriesParams.metricAggregationMethod
aus den Dimensionswerten in der Dimension metric
aller Ereignisse innerhalb des Zeitraums aggregiert.
Wenn kein Messwert angegeben ist, ist das value
des Punkts die Anzahl der Ereignisse im Zeitintervall.
Vorhersage
Vorhersage zukünftiger Werte für eine bestimmte Zeitreihe. Für die Prognose wird der Anfang der Zeitreihe als Trainingsdaten verwendet, um ein Modell zu erstellen.
Horizon
Wir prognostizieren die Werte einer Zeitreihe ab dem Erkennungszeitpunkt bis zum Zeithorizont (im Feld ForecastParams.horizonTime
angegeben).
Dieses Feld gibt uns intuitiv an, wie weit in die Zukunft wir eine Prognose treffen sollten. Bei der Klassifizierung eines Ausschnitts als Anomalie sind wir zwar hauptsächlich am Wert des Erkennungspunkts interessiert, erlauben aber die Prognose zusätzlicher Punkte, da diese für Nutzer nützlich sein können.
Erkennungszeit und Erkennungspunkt
Der Zeitpunkt der Erkennung (QueryDataSetRequest.detectionTime
) ist der Zeitpunkt, zu dem wir nach potenziellen Anomalien suchen.
Der Erkennungspunkt ist der Zeitreihenpunkt zum Zeitpunkt der Erkennung.
Erwartete Abweichung
Je nach Stabilität und Vorhersagbarkeit einer Zeitreihe können wir mehr oder weniger sicher sein, dass unsere Prognose zutrifft. Das Konfidenzniveau wird im Feld EvaluatedSlice.expectedDeviation
angegeben. Hier wird festgelegt, welche absolute Abweichung vom für die Erkennungszeit prognostizierten Wert zulässig ist.
Anomalie
Ein Stichprobenbereich kann als Anomalie betrachtet werden, wenn die Abweichung zwischen den prognostizierten und den tatsächlichen Werten während des Zeitraums der Erkennung höher ist als erwartet.
Wie weit die tatsächliche Abweichung von der erwarteten Abweichung abweicht, wird als Anomalie-Score bezeichnet:
Anomalie-Wert = (tatsächlicher Erkennungspunkt – prognostizierter Erkennungspunkt) ÷ erwartete Abweichung
Im Allgemeinen spiegeln Werte unter 1,0 Schwankungen wider, die angesichts der bisherigen Entwicklung des Ausschnitts üblich sind. Werte über 1,0 sollten dagegen Aufmerksamkeit erregen, wobei höhere Werte auf schwerwiegendere Anomalien hinweisen.
Geräuschgrenzwert
Der Anomaliewert, wie oben definiert, gibt an, wie statistisch signifikant eine Abweichung vom Normalwert ist. In vielen Fällen ist diese Abweichung jedoch nicht wichtig, da die Änderung des absoluten Werts möglicherweise nicht von Interesse ist.
Wenn beispielsweise alle Werte einer Zeitreihe gleichmäßig im Bereich (9.9, 10.1) verteilt sind, beträgt expectedDeviation
etwa 0, 1. Wenn detectionPointForecast
10.0 und detectionPointActual
10.3 ist, ist anomalyScore
3.0.
Wenn für Sie Änderungen mit einem höheren absoluten Wert wichtiger sind, können Sie mit dem Geräuschgrenzwert Segmente mit Änderungen unter diesem Grenzwert bestrafen, indem Sie den Anomaliewert senken:
Anomalie-Bewertung = (tatsächlicher Erkennungspunkt – prognostizierter Erkennungspunkt) ÷ (erwartete Abweichung + noiseThreshold)
Nächste Schritte
- Folgen Sie der Anleitung unter Einrichtung für vollständigen Zugriff, um ein eigenes Projekt zu erstellen.
- Detailliertere Anleitung
- Weitere Informationen zur REST API