Der Umgang mit Daten aus der realen in der Zeitreihenprognose¶
Zeitreihendaten aus der realen Welt sind oft unvollkommen und enthalten fehlende, doppelte oder nicht aufeinander abgestimmte Zeitschritte. Die ML-Funktionen für Prognosen und Anomalieerkennung enthalten diese Vorverarbeitungs-Features, damit Sie Ihre realen Daten nutzen können, um ein Modell zu trainieren, das nützliche Vorhersagen macht:
Sie können eine Häufigkeit der Ereignisse angeben, um die Häufigkeit zu überschreiben, die das Modell automatisch ableitet.
Das Modell kann Daten bei fehlenden Zeitschritten ableiten und mehrere Werte innerhalb eines Zeitschritts aggregieren. Sie können für jedes Feature oder jede Art von Feature angeben, wie die Aggregation erfolgen soll, oder dies automatisch von der Funktion ML erledigen lassen.
Mit diesen Funktionen können Sie ein nützliches Modell trainieren, selbst wenn Ihre Trainingsdaten allgemeine Konsistenzprobleme aufweisen. Im Allgemeinen gilt: Je konsistenter Ihre Daten sind, desto genauer wird Ihr Prognosemodell sein. Eine relativ geringe Anzahl solcher Anpassungen beeinträchtigt die Präzision des Modells jedoch nicht merklich.
Häufigkeit der Ereignisse festlegen¶
Beim Training eines Modells wird die Häufigkeit der Zeitschritte in Ihren Trainingsdaten mithilfe von Heuristiken abgeleitet, die in seltenen Fällen die falsche Häufigkeit auswählen. Um dieses Risiko zu vermeiden oder eine falsche Schlussfolgerung zu korrigieren, können Sie optional die gewünschte Häufigkeit beim Start des Trainings mit dem Parameter CONFIG_OBJECT frequency
angeben. Dieser Parameter gibt einen Zeitraum in einer ähnlichen Form wie '1 day'
oder '2 weeks'
an.
Die Intervallangabe muss in einfache Anführungszeichen gesetzt werden, da es sich um eine Zeichenfolge handelt.
Unterstützte Intervalle sind Sekunden, Minuten, Stunden, Tage, Wochen, Monate, Quartale und Jahre.
Verwenden Sie die vollständigen Intervallnamen. Plurale sind akzeptabel. („Sekunde“ oder „Sekunden“, nicht „sek“).
Das folgende Beispiel zeigt, wie Sie ein Prognosemodell mit einer Häufigkeit von einem Tag trainieren.
CREATE SNOWFLAKE.ML.FORECAST model1(
INPUT_DATA => TABLE(v1),
TIMESTAMP_COLNAME => 'date',
TARGET_COLNAME => 'sales',
CONFIG_OBJECT => {'frequency': '1 day'}
);
Wenn Sie keine Ereignishäufigkeit angeben, wird beim Trainingsprozess die am besten passende Ereignishäufigkeit ermittelt.
Auffüllen von Werten für fehlende Zeitschritte¶
Ein Zeitstempel, der keinen Zielwert hat, verwendet:
Null, wenn die Aggregationsverhaltensweise der Zielwerts SUM ist (siehe Verarbeiten mehrerer Werte in einem Zeitschritt)
Lineare Interpolation aus nahegelegenen Werten in allen anderen Fällen
Fehlende Feature-Werte werden nicht aufgefüllt, sondern durch NULL-Werte ersetzt. Beim Modelltraining werden diese ignoriert.
Verarbeiten mehrerer Werte in einem Zeitschritt¶
Wenn es in einem Zeitschritt mehrere Ereignisse gibt, kann die Vorverarbeitung deren Werte auf verschiedene Weise aggregieren. Wenn die Häufigkeit der Ereignisse zum Beispiel stündlich ist, können Werte, die außerhalb der stündlichen Kadenz auftreten, gemittelt werden, um einen Wert für den nächstgelegenen kanonischen stündlichen Zeitstempel zu erhalten.
Die folgende Tabelle fasst die verfügbaren Aggregationsverhaltensweisen zusammen.
Art von Wert |
Verfügbare Verhaltensweisen |
Standardverhalten |
---|---|---|
Numerisch |
|
MEAN |
Kategorisch (Zeichenfolge oder boolesch) |
|
MODE |
Tipp
Verwenden Sie die Methode SUM für Zähldaten, wie z. B. die Anzahl der verkauften Artikel. MEAN ist für die meisten anderen numerischen Werte geeignet.
Alle Verhaltensweisen ignorieren die NULL-Werte und gelten für den Zeitraum, der interpoliert oder aggregiert wird. Zum Beispiel ist die SUM der Werte in einem stündlichen Rhythmus die Summe der Werte innerhalb der Stunde, die auf dem kanonischen Zeitstempel basiert.
Sie können die Standardverhaltensweise für eine Spalte auf zwei Arten außer Kraft setzen:
Nach Art des Wertes (Ziel, numerisch oder kategorial)
Nach dem exakten Spaltennamen
Wenn Sie die Verhaltensweisen auf beide Arten überschreiben, hat die Überschreibung des Spaltennamens Vorrang.
Überschreiben nach Art des Wertes¶
Stellen Sie die folgenden Optionen im Parameter CONFIG_OBJECT der Funktion ein, um bestimmte Arten von Werten zu überschreiben: kategorial, numerisch und Ziel. Die Verhaltensweisen sind wie zuvor definiert.
Option |
Mögliche Werte: |
---|---|
|
MODE, FIRST, LAST |
|
MEAN, MEDIAN, MODE, MIN, MAX, SUM, FIRST, LAST |
|
MEAN, MEDIAN, MODE, MIN, MAX, SUM, FIRST, LAST |
Bemerkung
Wenn aggregation_target
nicht angegeben ist, verwendet die Ziel-Aggregation die Verhaltensweise, die ggf. durch aggregate_numeric
angegeben ist. Andernfalls wird der Standardwert, MEAN, verwendet.
Das folgende Beispiel zeigt, wie Sie die Verhaltensweisen für kategoriale und numerische Features festlegen.
CREATE SNOWFLAKE.ML.FORECAST model1(
INPUT_DATA => TABLE(v1),
TIMESTAMP_COLNAME => 'date',
TARGET_COLNAME => 'sales',
CONFIG_OBJECT => {
'frequency': '1 day',
'aggregation_categorical': 'MODE',
'aggregation_numeric': 'MEDIAN'}
);
Tipp
Sie sollten alle diese Werte angeben, auch wenn Sie die Standardwerte verwenden. Auf diese Weise müssen Sie nicht wissen, was das Standardverhalten ist, um zu verstehen, was die Anweisung tut, und wenn Sie das Verhalten später ändern möchten, müssen Sie nicht den Namen des Parameters nachschlagen.
Überschreiben nach Spaltenname¶
Die Option aggregation_column
in CONFIG_OBJECT ist ein Objekt, das Verhaltensweisen den Spaltennamen zuordnet. Diese Verhaltensweisen haben Vorrang vor allen Verhaltensweisen, die mit den oben beschriebenen Parametern festgelegt wurden.
Bemerkung
Das Aggregationsverhalten des Zielwertes kann nicht über den Spaltennamen angegeben werden. Verwenden Sie stattdessen die Option aggregation_target
.
Vorgeschlagene Änderung: Die folgende SQL-Anweisung gibt beispielsweise die Verhaltensweise der Aggregation für zwei verschiedene Spalten unter Verwendung der Option aggregation_column
an.
CREATE SNOWFLAKE.ML.FORECAST model1(
INPUT_DATA => TABLE(v1),
TIMESTAMP_COLNAME => 'date',
TARGET_COLNAME => 'sales',
CONFIG_OBJECT => {
'frequency': '1 day',
'aggregation_target': 'MEDIAN',
'aggregation_column': {
'temperature': 'MEDIAN',
'employee_id': 'FIRST'
}
}
);