Zeitachsenprognosen mit Vertex AI und BigQuery ML

1. Übersicht

In diesem Lab lernen Sie, wie Sie ein Zeitachsen-Prognosemodell mit TensorFlow erstellen und wie Sie diese Modelle dann mit Vertex AI bereitstellen.

Lerninhalte

Die folgenden Themen werden behandelt:

  • Daten so transformieren, dass sie in einem ML-Modell verwendet werden können
  • Daten visualisieren und untersuchen
  • BigQuery ML zum Erstellen eines Zeitachsen-Prognosemodells verwenden
  • Erstellen eines Zeitachsen-Prognosemodells mit TensorFlow unter Verwendung von LSTM- und CNN-Architekturen

2. Einführung in Zeitachsenprognosen

In diesem Codelab wird erläutert, wie Sie mithilfe der Google Cloud Platform Zeitreihenprognosetechniken anwenden. Es handelt sich nicht um einen allgemeinen Kurs zur Prognose von Zeitreihen, aber eine kurze Einführung in die Konzepte kann für unsere Nutzer hilfreich sein.

Zeitreihendaten

Was ist eine Zeitreihe? Es ist ein Dataset mit Daten, die in regelmäßigen Zeitintervallen aufgezeichnet werden. Ein Zeitreihen-Dataset enthält sowohl Zeit als auch mindestens eine zeitabhängige Variable.

85af6a1ff05c69f2.png

Komponenten

Eine Zeitachse kann in Komponenten zerlegt werden:

  • Trend: bewegt sich in einem hinreichend vorhersehbaren Muster nach oben oder unten
  • Saisonal: wird über einen bestimmten Zeitraum hinweg wiederholt, z. B. einen Tag, eine Woche, einen Monat oder eine Saison.
  • Zufall: Restschwankungen

Es kann mehrere Saisonschichten geben. Beispielsweise kann es bei einem Callcenter zu einem Muster beim Anrufvolumen an bestimmten Wochentagen und bestimmten Monaten kommen. Das Residuum lässt sich neben der Zeit möglicherweise durch andere Variablen erklären.

6e8d45bbbbc388ec.png

Stationarität

Für optimale Prognoseergebnisse sollten Zeitreihendaten statisch sein, wobei statistische Eigenschaften wie Mittelwert und Varianz im Zeitverlauf konstant sind. Techniken wie Differenzierung und Abwertung können auf Rohdaten angewendet werden, um sie unbeweglicher zu machen.

Das Diagramm unten für die CO2-Konzentration zeigt beispielsweise ein sich wiederholendes jährliches Muster mit einem Aufwärtstrend. ( Quelle)

ab82857e2e7d0b89.png

Nachdem der lineare Trend entfernt wurde, sind die Daten besser für Prognosen geeignet, da sie jetzt einen konstanten Mittelwert haben.

c936381ab1095528.png

Zeitachsendaten für maschinelles Lernen verwenden

Wenn Sie Zeitreihendaten für ein ML-Problem verwenden möchten, müssen sie transformiert werden, damit anhand vorheriger Werte zukünftige Werte vorhergesagt werden können. Diese Tabelle zeigt ein Beispiel dafür, wie verzögerte Variablen erstellt werden, um das Ziel vorherzusagen.

d667a941dbd470f5.png

Nachdem Sie nun einige Grundlagen kennengelernt haben, beginnen wir mit der Untersuchung von Daten und Prognosen.

3. Notebook-Umgebung einrichten

Nachdem wir nun eine kurze Einführung in die Daten erhalten haben, können wir unsere Modellentwicklungsumgebung einrichten.

Schritt 1: APIs aktivieren

Der BigQuery-Connector verwendet die BigQuery Storage API. Suchen Sie in der Konsole nach der BigQuery Storage API und aktivieren Sie die API, falls sie derzeit deaktiviert ist.

9895a2fd3cdf8f8c.png

Schritt 2: Vertex AI Workbench-Notebook erstellen

Rufen Sie in der Cloud Console den Bereich Vertex AI Workbench auf und klicken Sie auf Neues Notebook. Wählen Sie dann den neuesten Notebooktyp TensorFlow Enterprise 2.x ohne GPUs aus:

4e7b73eabf2bc061.png

Verwenden Sie die Standardoptionen und klicken Sie dann auf Erstellen. Nachdem die Instanz erstellt wurde, wählen Sie JupyterLab öffnen aus:

18c9f3c462aafaee.png

Erstellen Sie dann ein Python 3-Notebook in JupyterLab:

58523671a252b95a.png

Schritt 3: Lab-Materialien herunterladen

Erstellen Sie über die JupyterLab-Oberfläche ein neues Terminalfenster: Datei -> Neu -> Terminal.

Klonen Sie dort das Quellmaterial mit dem folgenden Befehl:

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. Daten untersuchen und visualisieren

In diesem Abschnitt führen Sie folgende Aufgaben aus:

  • Abfrage erstellen, die Daten in einer Zeitreihe gruppiert
  • Fehlende Werte ausfüllen
  • Daten visualisieren
  • Zeitreihen in Trend- und saisonale Komponenten zerlegen

Schritt 1

Rufen Sie in Vertex AI Workbench training-data-analyst/courses/ai-for-time-series/notebooks auf und öffnen Sie 01-explore.ipynb.

Schritt 2

Löschen Sie alle Zellen im Notebook („Bearbeiten“ > „Alle Ausgaben löschen“), ändern Sie die Regions-, Projekt- und Bucket-Einstellungen in einer der ersten Zellen und führen Sie dann die Zellen einzeln aus.

Schritt 3

In diesem Abschnitt haben Sie die Daten importiert und verschiedene Dimensionen davon visualisiert. Jetzt haben Sie ein klareres Bild der Daten und können nun mit der Modellierung für maschinelles Lernen auf der Grundlage dieser Daten fortfahren.

55839e7bc0427915.png

5. Modell mit BigQuery-Zeitachsenprognosen erstellen

In diesem Abschnitt führen Sie folgende Aufgaben aus:

  • Zeitreiheneingabedaten in eine BigQuery-Tabelle importieren
  • Zeitachsenmodell mit der BQML-Syntax erstellen
  • Modellparameter und -genauigkeit bewerten
  • Prognose mithilfe Ihres Modells

Schritt 1

Wir erstellen eine BigQuery-Tabelle mit den Rohdaten aus der CSV-Datei, die wir gerade kennengelernt haben. Laden Sie zuerst die CSV-Datei aus der Notebook-Umgebung herunter.

Klicken Sie im Verzeichnis training-data-analyst/courses/ai-for-time-series/notebooks/data mit der rechten Maustaste auf cta_ridership.csv und laden Sie die Datei in Ihre lokale Umgebung herunter.

Schritt 2

Als Nächstes laden wir diese Daten in eine BigQuery-Tabelle hoch.

Rufen Sie BigQuery in der Console auf (über die Suche oder über diesen Link):

649e7ab1c44b75e8.png

Sie können die Tabelle einem neuen oder vorhandenen Dataset hinzufügen, das ähnliche Tabellen gruppiert. Falls Sie noch kein Dataset erstellt haben, können Sie links unten auf Ihr Projekt klicken und dann rechts unten Dataset erstellen auswählen.

281b97020cd52f29.png

Wählen Sie einen Namen aus, z. B. demo, übernehmen Sie die Standardeinstellungen und fahren Sie fort.

Wählen Sie bei ausgewähltem Dataset rechts unten Tabelle erstellen aus, um eine neue Tabelle zu erstellen.

ad47810d44cfb289.png

Wählen Sie für die Optionen zum Erstellen von Tabellen Folgendes aus:

  • Tabelle erstellen aus: Hochladen
  • Datei auswählen: cta_ridership.csv
  • Tabellenname: cta_ridership
  • Schema: Klicken Sie das Kästchen an, damit Schema und Eingabeparameter automatisch erkannt werden.

213e4177e9e79544.png

Schritt 3

Jetzt ist es an der Zeit, unser Modell zu erstellen. BigQuery ML bietet eine ähnliche Syntax wie SQL, mit der Sie eine Vielzahl von Modelltypen erstellen können.

Fügen Sie im Abfrageeditor diese Abfrage ein oder geben Sie sie ein. Ersetzen Sie dabei bei Bedarf demo durch den Dataset-Namen an beiden Stellen:

CREATE OR REPLACE MODEL
  `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
    TIME_SERIES_TIMESTAMP_COL='service_date',
    TIME_SERIES_DATA_COL='total_rides',
    HOLIDAY_REGION='us') AS
SELECT
  service_date, total_rides
FROM
  `demo.cta_ridership`

Sehen wir uns zum Verständnis die wichtigsten Elemente der Syntax einmal an:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

Diese Anweisung erstellt das Modell. Es gibt Varianten dieser Anweisung, z.B. CREATE MODEL, aber wir haben uns entschieden, hier ein vorhandenes Modell mit demselben Namen zu ersetzen.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

Hier definieren wir die Modelloptionen, wobei die erste Option der Modelltyp ist. Durch Auswählen von ARIMA wird ein Zeitreihen-Prognosemodell erstellt.

TIME_SERIES_TIMESTAMP_COL=‘service_date'

Spalte mit Datums-/Uhrzeitinformationen

TIME_SERIES_DATA_COL=‘total_rides'

Die Datenspalte

HOLIDAY_REGION=‘us'

Mit diesem optionalen Parameter können Feiertage in das Modell aufgenommen werden. Da unsere Datenexploration im vorherigen Schritt gezeigt hat, dass die Fahrgastzahlen an Feiertagen geringer waren und die Daten aus Chicago, Illinois, USA, stammen, beziehen wir US-Feiertage in das Modell ein.

AS SELECT ... FROM ...

In diesem Abschnitt werden die Eingabedaten ausgewählt, die wir zum Trainieren des Modells verwenden.

Es gibt eine Reihe weiterer Optionen, die Sie der Abfrage hinzufügen können, z. B. das Definieren einer Spalte, wenn Sie mehrere Zeitreihen haben, oder die Auswahl, ob die ARIMA-Modellparameter automatisch erkannt werden sollen. Weitere Informationen finden Sie in der Syntaxreferenz zur CREATE MODEL-Anweisung für Zeitachsenmodelle.

Schritt 4

Sehen wir uns unser Modell genauer an. Führen Sie nach Abschluss des Trainings eine weitere Abfrage aus und ersetzen Sie bei Bedarf wieder demo:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

Interpretieren wir die Ergebnisse. In jeder Zeile sehen Sie ein mögliches Modell mit seinen Parametern und Bewertungsstatistiken. Die Ergebnisse werden in aufsteigender Reihenfolge nach AIC oder Akaike-Informationskriterium zurückgegeben, das einen relativen Indikator für die Modellqualität bietet. Das Modell in der ersten Zeile hat also den niedrigsten AIC und gilt als das beste Modell.

Sie sehen die Parameter „p“, „d“ und „q“ des ARIMA-Modells sowie die im Modell erkannte Saisonabhängigkeit. In diesem Fall umfasst das Top-Modell sowohl wöchentliche als auch jährliche saisonale Schwankungen.

5b5b1e129c70a340.png

Schritt 5

Jetzt können wir mit der Funktion ML.FORECAST eine Prognose durchführen.

Fügen Sie Folgendes ein (ersetzen Sie gegebenenfalls Demo):

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

Diese Abfrage prognostiziert mit unserem Modell einfach sieben Tage im Voraus. Unten werden die sieben Zeilen angezeigt. Die Prognose enthält auch ein Konfidenzintervall, das standardmäßig auf 0,95 eingestellt ist, aber in der Abfrage konfiguriert werden kann.

b8a7f22657dc2d27.png

Gut gemacht: Wir haben ein Zeitachsenmodell mit nur wenigen BQML-Abfragen erstellt.

6. Benutzerdefiniertes Prognosemodell erstellen

In diesem Abschnitt führen Sie folgende Aufgaben aus:

  • Ausreißer aus den Daten entfernen
  • Mehrstufige Prognosen durchführen
  • Zusätzliche Funktionen in ein Zeitreihenmodell aufnehmen
  • Informationen zu neuronalen Netzwerkarchitekturen für Zeitachsenprognosen: LSTM und CNN
  • Weitere Informationen zu statistischen Modellen, einschließlich der exponentiellen Glättung nach Holt-Winters
  • Ensemble-Modelle

Schritt 1

Rufen Sie in Vertex AI Workbench training-data-analyst/courses/ai-for-time-series/notebooks auf und öffnen Sie 02-model.ipynb.

Schritt 2

Löschen Sie alle Zellen im Notebook („Bearbeiten“ > „Alle Ausgaben löschen“), ändern Sie die Regions-, Projekt- und Bucket-Einstellungen in einer der ersten Zellen und führen Sie dann die Zellen einzeln aus.

Schritt 3

Im Notebook haben Sie nun mehrere Modellarchitekturen kennengelernt: LSTM, CNN und statistische Modelle. Sie können für jedes Modell sehen, wie es im Vergleich zu den Testdaten abschneidet:

a528df58f4e6d372.png

7. Training und Vorhersagen in der Cloud

In diesem Abschnitt führen Sie folgende Aufgaben aus:

  • Daten und Modelle für das Training in der Cloud vorbereiten
  • Modell trainieren und den Fortschritt des Jobs mit AI Platform Training überwachen
  • Vorhersagen mithilfe des Modells mit AI Platform Predictions treffen

Schritt 1

Rufen Sie in Vertex AI Workbench training-data-analyst/courses/ai-for-time-series/notebooks auf und öffnen Sie 03-cloud-training.ipynb.

Schritt 2

Löschen Sie alle Zellen im Notebook („Bearbeiten“ > „Alle Ausgaben löschen“), ändern Sie die Regions-, Projekt- und Bucket-Einstellungen in einer der ersten Zellen und führen Sie dann die Zellen einzeln aus.

Schritt 3

Im vorherigen Abschnitt haben wir ein Modell in einem Workbench-Notebook trainiert und damit vorhergesagt. In diesem Abschnitt wurde gezeigt, wie Sie das Python SDK für Vertex AI über Ihr Notebook verwenden, um Vertex AI-Dienste für Training und Bereitstellung zu nutzen.

a3f6b5dc895a24fb.png

8. Herausforderung

In diesem Abschnitt versuchen Sie, die gelernten Konzepte auf ein neues Dataset anzuwenden.

Wir werden keine ausführlichen Anweisungen zur Verfügung stellen, sondern nur einige Tipps (falls Sie sie benötigen!).

Das Ziel besteht darin, 311 Dienstanfragen aus der Stadt New York vorherzusagen. Zu diesen Anfragen, die nicht für Notfälle vorgesehen sind, gehören Lärmbeschwerden, Probleme mit Straßenbeleuchtung usw.

Schritt 1

Beginnen wir mit dem Verständnis des Datasets.

Rufen Sie zuerst das Dataset City of New York 311 Service Requests auf.

Um die Daten besser kennenzulernen, probieren Sie einige der Beispielabfragen aus, die in der Dataset-Beschreibung aufgeführt sind:

  • Wie hoch ist die Anzahl von 311-Anfragen für LKWs mit Speiseeis?
  • An welchen Tagen gehen die meisten 311-Anfragen im Zusammenhang mit Partys ein?

Wählen Sie in der BigQuery-Benutzeroberfläche Abfrage erstellen aus, um zu sehen, wie Sie auf das Dataset zugreifen. Beachten Sie, dass die select-Anweisung aus bigquery-public-data.new_york_311.311_service_requests abgefragt wird.

Schritt 2

Wir sind bereit, loszulegen. Nehmen Sie in diesem Abschnitt Änderungen am Notebook Erkunden und visualisieren vor, um mit diesen Daten zu arbeiten.

Hinweise

  • Duplizieren Sie das 01-explore.ipynb-Notebook und beginnen Sie damit.
  • Um die Daten zu untersuchen, führen Sie diese Abfrage aus:
from google.cloud import bigquery as bq

sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""

client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()

df.head()
  • Verwenden Sie diese Abfrage, um die Anzahl der Vorfälle nach Monat abzurufen:
SELECT
  COUNT(unique_key) as y,
  DATE_TRUNC(DATE(created_date), month) as ds  
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
  • Aktualisieren Sie die Spaltenvariablen im Abschnitt „Konstanten“. In der obigen Abfrage ist die Zielspalte y und die Datumsspalte ds. Es gibt keine zusätzlichen Funktionen.
  • Ändern Sie gegebenenfalls den Dateinamen, in den Sie die Daten für das nächste Lab exportieren.
  • Daten exportieren mit: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

Schritt 3

Erstellen wir nun ein Zeitachsenmodell mit den monatlichen Daten.

Hinweise:

  • Duplizieren Sie das 02-model.ipynb-Notebook und beginnen Sie damit.
  • Aktualisieren Sie die Dataset-Parameter:
  • Passen Sie die Parameter target_col und ts_col an das neue Dataset an.
  • Aktualisieren Sie die Modellparameter:
  • Häufigkeit in monatlich (Code für Monatsbeginn ist „MS“)
  • Eingabeschritte: 12 (Lookback-Window beträgt 12 Monate)
  • Ausgabeschritte: 3 (Vorhersage für 3 Monate in der Zukunft)
  • Staffeln: 12 (Saisonabhängigkeit beträgt 12 Monate)
  • Ändern Sie den Namen der Eingabedatei, wenn Sie ihn im vorherigen Notebook geändert haben.
  • Wenn Sie die Abfrage mitten im Monat ausführen, ist die monatliche Summe für den letzten Monat viel niedriger als erwartet. In diesem Lab entfernen wir also den letzten Monat aus dem Dataset mit: df = df[:-1]
  • Die Daten enthalten keine offensichtlichen Ausreißer, also überspringen oder kommentieren Sie diese Zellen aus.
  • Passen Sie die LSTM-Einheiten, die CNN-Filter und die Kernel-Größe für dieses neue Modell an.

9. Bereinigen

Wenn Sie dieses Notebook weiterverwenden möchten, empfehlen wir Ihnen, es bei Nichtgebrauch auszuschalten. Wählen Sie in der Workbench-UI in der Cloud Console das Notebook und dann Beenden aus:

57213ef2edad9257.png

Wenn Sie alle Ressourcen löschen möchten, die Sie in diesem Lab erstellt haben, löschen Sie einfach das Workbench-Notebook, statt es zu beenden.

Gehen Sie über das Navigationsmenü in der Cloud Console zu Storage und löschen Sie beide Buckets, die Sie zum Speichern Ihrer Modell-Assets erstellt haben. WARNUNG: Gehen Sie nur dann vor, wenn Sie nur für dieses Lab neue Buckets erstellt haben.