DeepAR-Prognosenalgorithmus - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

DeepAR-Prognosenalgorithmus

Der Amazon SageMaker DeepAR Prognosenalgorithmus ist ein überwachter Lernalgorithmus zur Prognose von skalaren (eindimensionalen) Zeitreihen mithilfe von rekurrenten (rückgekoppelten) neuronalen Netzwerken (RNN). Bei klassischen Prognoseverfahren wie z. B. ARIMA (Autoregressive Integrated Moving Average) oder ETS (Exponential Smoothing) wird ein Modell für jede einzelne Zeitreihe verwendet. Mit diesem Modell wird dann die Zeitreihe in die Zukunft extrapoliert.

In vielen Anwendung haben Sie jedoch mehrere ähnliche Zeitreihen über eine Reihe abschnittsübergreifender Einheiten hinweg. Beispiel: Sie haben möglicherweise Zeitreihengruppierungen für unterschiedlichen Produktbedarf, Serverauslastung und Webseitenanforderungen. Für diese Art von Anwendung ist die Schulung eines einzigen Modells gemeinsam über alle Zeitreihen nützlich. DeepAR verwendet diesen Ansatz. Sobald das Dataset Hunderte verwandter Zeitreihen enthält, liefert die DeepAR-Methode bessere Ergebnisse als die Standardmethoden ARIMA und ETS. Sie können das geschulte Modell auch zum Generieren von Prognosen für neue Zeitreihen verwenden, die ähnlich sind wie diejenigen, mit denen es geschult wurde.

Der Schulungseingabe für den DeepAR-Algorithmus ist/sind eine oder vorzugsweise mehrere target-Zeitreihe(n), die durch den gleichen Prozess oder ähnliche Prozesse erzeugt wurde(n). Basierend auf diesem Eingangsdatensatz schult der Algorithmus ein Modell, das eine Approximation dieses/dieser Prozesses/Prozesse erlernt und daraus die Entwicklung der Ziel-Zeitreihe vorhersagt. Jede Ziel-Zeitreihe kann optional mit einem Vektor statischer (zeitunabhängiger) kategorischer Merkmale verknüpft werden, die vomcatund einen Vektor dynamischer (zeitabhängiger) Zeitreihen, die vomdynamic_featfield. SageMaker trainiert das DeepAR -Modell, indem Trainingsbeispiele aus den einzelnen Zielzeitreihen des Schulungsdatasets nach dem Zufallsprinzip ermittelt werden. Jedes Schulungsbeispiel besteht aus einem Paar benachbarter Kontext- und Prognosefenstern mit festen vordefinierten Längen. Um zu steuern, wie weit in die Vergangenheit das Netzwerk sehen kann, verwenden Sie den context_length-Hyperparameter. Um zu steuern, wie weit in die Zukunft Prognosen erstellt werden können, verwenden Sie den prediction_length-Hyperparameter. Weitere Informationen finden Sie unter So funktioniert der DeepAR-Algorithmus.

E/A-Schnittstelle für den DeepAR-Algorithmus

DeepAR unterstützt zwei Datenkanäle. Der erforderliche train-Kanal beschreibt das Schulungsdataset. Der optionale test-Kanal beschreibt ein Dataset, das der Algorithmus zur Bewertung der Modellgenauigkeit nach Schulungen verwendet. Sie können die Schulungs- und Testdatasets im JSON Lines-Format bereitstellen. Dateien können im gzip- oder Parquet-Dateiformat vorliegen.

Bei der Angabe der Pfade für die Schulungs- und Testdaten können Sie eine einzelne Datei oder ein Verzeichnis mit mehreren Dateien bereitstellen, die in Unterverzeichnissen gespeichert werden können. Wenn Sie ein Verzeichnis angeben, verwendet DeepAR alle Dateien im Verzeichnis als Eingabewerte für den entsprechenden Kanal, mit Ausnahme derjenigen, die mit einem Punkt (.) beginnen, und derjenigen mit der Bezeichnung SUCCESS. Auf diese Weise wird sichergestellt, dass Sie Ausgabeordner, die von Spark-Aufgaben erstellt wurden, direkt als Eingabekanäle für Ihre DeepAR-Schulungsaufträge verwenden können.

Standardmäßig bestimmt das DeepAR-Modell das Eingabeformat aus der Dateierweiterung (.json, .json.gz oder .parquet) im angegebenen Eingabepfad. Wenn der Pfad nicht mit einer dieser Erweiterungen endet, müssen Sie das Format im SDK für Python explizit angeben. Verwenden Sie den content_type-Parameter der s3_input-Klasse.

Die Datensätze in Ihren Eingabedateien sollten die folgenden Felder enthalten:

  • start— Eine Zeichenfolge mit dem FormatYYYY-MM-DD HH:MM:SSaus. Der Start-Zeitstempel darf keine Zeitzoneninformationen enthalten.

  • target— Ein Array von Gleitkommawerten oder ganzen Zahlen, die die Zeitreihe darstellen. Sie können fehlende Werte als null-Literale, als "NaN"-Zeichenfolgen in JSON oder als nan-Gleitkomma-Werte in Parquet codieren.

  • dynamic_feat(optional): Ein Array von Arrays mit Gleitkommawerten oder ganzen Zahlen, das den Vektor von benutzerdefinierten Feature-Zeitreihen (dynamische Features) darstellt. Wenn Sie dieses Feld festlegen, müssen alle Datensätze die gleiche Anzahl von inneren Arrays (die gleiche Anzahl von Funktionszeitreihen) besitzen. Darüber hinaus muss jedes innere Array die gleiche Länge wie die zugehörigetargetWert plus Länge des Kontextes. Fehlende Werte werden in den Funktionen nicht unterstützt. Wenn beispielsweise eine Ziel-Zeitreihe die Nachfrage verschiedener Produkte repräsentiert, kann ein zugehöriges dynamic_feat eine boolesche Zeitreihe sein, die angibt, ob eine Werbeaktion für das jeweilige Produkt zum Einsatz kam (1) oder nicht (0):

    {"start": ..., "target": [1, 5, 10, 2], "dynamic_feat": [[0, 1, 1, 0]]}
  • cat(optional): Ein Array kategorialer Features, mit dem die Gruppen kodiert werden können, zu denen der Datensatz gehört. Kategorische Funktionen müssen als 0-basierte Folge von positiven Ganzzahlen codiert werden. Beispiel: Die kategorische Domäne {R, G, B} kann als {0, 1, 2} codiert werden. Alle Werte von jeder kategorischen Domäne müssen im Schulungsdataset repräsentiert werden. Dies liegt daran, dass der DeepAR-Algorithmus Prognosen nur für Kategorien erstellen kann, die während der Schulung beobachtet wurden. Jede kategorische Funktion ist außerdem in einen Raum mit geringer Dimensionalität eingebettet, dessen Dimensionalität durch den embedding_dimension-Hyperparameter gesteuert wird. Weitere Informationen finden Sie unter DeepAR-Hyperparameter.

Wenn Sie eine JSON-Datei verwenden, muss diese im JSON Lines-Format vorliegen. Beispiel:

{"start": "2009-11-01 00:00:00", "target": [4.3, "NaN", 5.1, ...], "cat": [0, 1], "dynamic_feat": [[1.1, 1.2, 0.5, ...]]} {"start": "2012-01-30 00:00:00", "target": [1.0, -5.0, ...], "cat": [2, 3], "dynamic_feat": [[1.1, 2.05, ...]]} {"start": "1999-01-30 00:00:00", "target": [2.0, 1.0], "cat": [1, 4], "dynamic_feat": [[1.3, 0.4]]}

In diesem Beispiel verfügt jede Zeitreihe über zwei zugehörige kategorische Funktionen und eine Zeitreihenfunktion.

Bei Parquet verwenden Sie dieselben drei Felder als Spalten. Außerdem kann "start" vom Typ datetime sein. Sie können Parquet-Dateien mit gzip (gzip) oder mit der Snappy-Komprimierungsbibliothek (snappy) komprimieren.

Wird der Algorithmus ohne cat- und dynamic_feat-Felder geschult, lernt er ein „globales” Modell, d. h. ein Modell, das die spezifische Identität der Ziel-Zeitreihe zur Inferenzzeit ignoriert und nur von ihrer Form abhängig ist.

Wenn das Modell auf den für jede Zeitreihe zur Verfügung gestellten cat- und dynamic_feat-Funktionsdaten basiert, wird die Vorhersage wahrscheinlich durch die Art der Zeitreihe mit den entsprechenden cat-Funktionen beeinflusst. Wenn die target-Zeitreihe beispielsweise den Bedarf an Kleidungsstücken darstellt, können Sie einen zweidimensionalen cat-Vektor zuordnen, der die Art des Artikels (z. B. 0 = Schuhe, 1 = Kleidungsstück) in der ersten Komponente und die Farbe eines Artikels (z. B. 0 = Rot, 1 = Blau) in der zweiten Komponente kodiert. Ein Beispiel für eine Eingabe sähe wie folgt aus:

{ "start": ..., "target": ..., "cat": [0, 0], ... } # red shoes { "start": ..., "target": ..., "cat": [1, 1], ... } # blue dress

Zur Inferenzzeit können Sie Vorhersagen für Ziele mit cat-Werten anfordern, die Kombinationen der in den Schulungsdaten beobachteten cat-Werte sind, zum Beispiel:

{ "start": ..., "target": ..., "cat": [0, 1], ... } # blue shoes { "start": ..., "target": ..., "cat": [1, 0], ... } # red dress

Die folgenden Richtlinien gelten für Schulungsdaten:

  • Die Beginnzeit und Länge der Zeitreihen können sich unterscheiden. Im Marketing werden beispielsweise Produkte oft zu unterschiedlichen Terminen in einem Versandkatalog erfasst, sodass sich ihre Beginndaten naturgemäß unterscheiden. Alle Reihen müssen jedoch die gleiche Häufigkeit, Anzahl der kategorischen Funktionen sowie Anzahl der dynamischen Funktionen aufweisen.

  • Es erfolgt eine zufällige Wiedergabe der Schulungsdatei in Bezug auf die Position der Zeitreihen in der Datei. Anders ausgedrückt sollte die Reihenfolge der Zeitreihe in der Datei zufällig sein.

  • Stellen Sie sicher, dass Sie das start-Feld korrekt festlegen. Der Algorithmus verwendet den start-Zeitstempel zum Ableiten der internen Funktionen.

  • Wenn Sie kategorische Funktionen (cat) verwenden, müssen alle Zeitreihen die gleiche Anzahl von kategorischen Funktionen aufweisen. Wenn das Dataset das cat-Feld enthält, wird es vom Algorithmus verwendet und die Kardinalität der Gruppen aus dem Dataset wird extrahiert. Der Standardwert für cardinality ist "auto". Wenn das Dataset das cat-Feld enthält, Sie es aber nicht verwenden möchten, können Sie es deaktivieren, indem Sie cardinality auf "" festlegen. Wenn ein Modell mit einer cat-Funktion geschult wurde, müssen Sie sie als Inferenz einschließen.

  • Wenn Ihr Dataset das dynamic_feat-Feld enthält, wird es vom Algorithmus automatisch verwendet. Alle Zeitreihen müssen die gleiche Anzahl von Funktionszeitreihen besitzen. Die Zeitpunkte in jedem der Funktionszeitreihen entsprechen 1:1 den Zeitpunkten im Ziel. Darüber hinaus sollte der Eintrag im dynamic_feat-Feld die gleiche Länge aufweisen wie das target. Wenn das Dataset das dynamic_feat-Feld enthält, Sie es aber nicht verwenden möchten, deaktivieren Sie es, indem Sie num_dynamic_feat auf "" festlegen. Wenn das Modell mit dem dynamic_feat-Feld geschult wurde, müssen Sie dieses Feld als Inferenz bereitstellen. Darüber hinaus muss jede Funktion die Länge des angegebenen Ziels plus prediction_length haben. Mit anderen Worten: Sie müssen den Funktionswert in der Zukunft angeben.

Falls Sie optionale Testkanaldaten angeben, wertet der DeepAR-Algorithmus das geschulte Modell mit unterschiedlichen Genauigkeitsmetriken aus. Der Algorithmus berechnet die Wurzel des mittleren quadratischen Prognosefehlers (Root Mean Square Error, RMSE) für die Testdaten wie folgt:


                Formel: RMSE: Sqrt (1/nT (Sum [i, t (y-hat (y-hat (i, t) -y (i) ^2)))))))))))))

yi,tist der wahre Wert von Zeitreihenizu der Zeittaus.ŷi,tist die mittlere Vorhersage. Die Summe umfasst alle n Zeitreihen der Testdaten und die letzten "T" Zeitpunkte jeder Zeitreihe, wobei "Τ" dem Prognosehorizont entspricht. Die Länge des Prognosehorizonts legen Sie mit dem Hyperparameter prediction_length fest. Weitere Informationen finden Sie unter DeepAR-Hyperparameter.

Darüber hinaus wertet der Algorithmus die Genauigkeit der Prognosenverteilung anhand des gewichteten Quantilverlusts aus. Für ein Quantil des Bereichs [0, 1] wird der gewichtete Quantilverlust wie folgt definiert:


                Quantilverlust

qi,t(τ)ist das τ-Quantil der vom Modell prognostizierten Verteilung. Um anzugeben, für welche Quantile der Verlust berechnet werden soll, legen Sie den test_quantiles-Hyperparameter fest. Zusätzlich wird der Durchschnitt der vorgegebenen Quantilverluste im Rahmen der Schulungsprotokolle gemeldet. Weitere Informationen finden Sie unter DeepAR-Hyperparameter.

Für Inferenzen akzeptiert DeepAR das JSON-Format und die folgenden Felder:

  • "instances", das eine oder mehrere Zeitreihen im JSON Lines-Format umfasst

  • Ein "configuration"-Name, der die Parameter zur Generierung der Prognose enthält

Weitere Informationen finden Sie unter DeepAR-Inferenzformate.

Bewährte Methoden zur Nutzung des DeepAR-Algorithmus

Folgen Sie bei der Vorbereitung Ihrer Zeitreihendaten diesen bewährten Methoden, um bestmögliche Ergebnisse zu erzielen:

  • Stellen Sie immer die gesamten Zeitreihen für Schulungen, Tests und beim Aufrufen des Modells für Inferenz bereit, es sei denn, Sie teilen Ihr Dataset für Schulungen und Tests auf. Unabhängig davon, wie Sie context_length festlegen, sollten Sie die Zeitreihen nie unterteilen oder nur teilweise angeben. Das Modell verwendet Datenpunkte weiter zurück als durch den in context_length festgelegten Wert für die isolierte Wertefunktion angegeben.

  • Beim Optimieren eines DeepAR-Modells können Sie das Dataset aufteilen, um ein Schulungs- und ein Testdataset zu erstellen. In einer typischen Auswertung testen Sie das Modell in derselben Zeitreihe, die für die Schulung verwendet wird, aber für zukünftige prediction_length-Zeitpunkte, die unmittelbar auf den letzten während der Schulung sichtbaren Zeitpunkt folgen. Sie können Schulungs- und Testdatasets erstellen, die diese Kriterien erfüllen, indem Sie das gesamte Dataset (die vollständige Länge aller verfügbaren Zeitreihen) als Testdataset verwenden und die letzten prediction_length-Punkte aus jeder Zeitreihe für Schulungen entfernen. Während der Schulung sieht das Modell keine Zielwerte für Zeitpunkte, für die es während des Tests ausgewertet wird. Während des Tests hält der Algorithmus die letzten prediction_length-Punkte jeder Zeitreihe im Testdataset zurück und generiert eine Prognose. Anschließend vergleicht er die Prognose mit den einbehaltenen Werten. Sie können komplexere Auswertungen erstellen, indem Sie Zeitreihen mehrmals im Testdataset wiederholen, sie aber an verschiedenen Endpunkten abschneiden. Mit diesem Ansatz werden Genauigkeitsmetriken über mehrere Prognosen von verschiedenen Zeitpunkten gemittelt. Weitere Informationen finden Sie unter Optimieren eines DeepAR-Modells.

  • Vermeiden Sie die Verwendung von sehr großen Werten (>400) für die prediction_length, da das Modell dadurch langsamer und weniger genau wird. Wenn Sie Prognosen für einen Zeitpunkt weiter in der Zukunft erstellen wollen, sollten Sie Daten mit einer niedrigeren Häufigkeit aggregieren. Verwenden Sie z. B. 5min statt 1min.

  • Da Zeitdifferenzen verwendet werden, kann ein Modell in der Zeitreihe weiter zurück reichen als der für context_length angegebene Wert. Aus diesem Grund müssen Sie diesen Parameter nicht auf einen großen Wert festlegen. Wir empfehlen Ihnen, mit dem Wert, den Sie für prediction_length verwendet haben, zu beginnen.

  • Schulen Sie ein DeepAR-Modell am besten mit allen verfügbaren Zeitreihen. Auch wenn ein mit einer einzelnen Zeitreihe geschultes DeepAR-Modell gut funktionieren kann, liefern Standardprognosealgorithmen, wie ARIMA oder ETS, möglicherweise genauere Ergebnisse. Der DeepAR-Algorithmus liefert bessere Ergebnisse als die Standardmethoden, sobald das Dataset Hunderte verwandter Zeitreihen enthält. Derzeit erfordert DeepAR, dass die Gesamtanzahl der Beobachtungen, die in allen Schulungszeitreihen verfügbar sind, mindestens 300 beträgt.

EC2-Instance-Empfehlungen für den DeepAR-Algorithmus

Sie können DeepAR sowohl auf GPU- als auch auf CPU-Instances und in Einzel- und Multi-Maschinen-Umgebungen schulen. Es wird empfohlen, mit einer einzelnen CPU-Instance zu beginnen (z. B. ml.c4.2xlarge oder ml.c4.4xlarge) und nur zu GPU-Instances und mehreren Maschinen zu wechseln, wenn dies unbedingt erforderlich ist. Durch den Einsatz von GPUs und mehreren Maschinen lässt sich der Durchsatz nur für größere Modelle (mit vielen Zellen pro Layer und vielen Layers) und für große Mini-Stapelgrößen (z. B. größer als 512) verbessern.

Für Inferenzen unterstützt DeepAR nur CPU-Instances.

Durch Angeben großer Werte für context_length, prediction_length, num_cells, num_layers oder mini_batch_size können Modelle erstellt werden, die für Small Instances zu groß sind. Verwenden Sie in diesem Fall einen größeren Instance-Typ oder reduzieren Sie die Werte für diese Parameter. Dieses Problem tritt häufig beim Ausführen von Hyperparameter-Optimierungsaufträgen auf. Verwenden Sie in diesem Fall einen Instance-Typ, der für den Modelloptimierungsauftrag groß genug ist, und begrenzen Sie ggf. die oberen Werte der kritischen Parameter, um ein Fehlschlagen von Aufträgen zu vermeiden.

DeepAR-Beispiel-Notebooks

Ein Beispiel-Notebook, das zeigt, wie ein Zeitreihen-Dataset zur Schulung des SageMaker DeepAR -Algorithmus vorbereitet und das geschulte Modell zum Ausführen von Inferenzen bereitgestellt wird, finden Sie unterZeitreihenprognosen mit DeepAR - Synthetische DatensowieDeepAR Demo zum Stromdatensatz, die die erweiterten Funktionen von DeepAR auf einem realen Dataset veranschaulicht. Anweisungen zum Erstellen von und Zugreifen auf Jupyter-Notebook-Instances, die Sie verwenden können, um das Beispiel in SageMaker auszuführen, finden Sie unter.Verwenden von Amazon SageMaker Notebook-Instancesaus. Nach dem Erstellen und Öffnen einer Notebook-Instance wählen Sie die OptionSageMaker Beispielefinden Sie eine Liste aller SageMaker Beispiele. Zum Öffnen eines Notebooks wählen Sie die Registerkarte Use (Verwenden) und dann Create copy (Kopie erstellen) aus.