Zeitachsenprognosen mit Vertex AI und BigQuery ML

1. Übersicht

In diesem Lab lernen Sie, wie Sie mit TensorFlow ein Zeitreihenprognosemodell erstellen und 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
  • Mit BigQuery ML ein Modell für Prognosen von Zeitreihen erstellen
  • Ein Zeitreihen-Vorhersagemodell mit TensorFlow unter Verwendung von LSTM- und CNN-Architekturen erstellen

2. Einführung in Zeitreihenprognosen

In diesem Codelab geht es darum, wie Sie Zeitreihenprognosetechniken mit der Google Cloud Platform anwenden. Es handelt sich nicht um einen allgemeinen Kurs zur Zeitreihenvorhersage, aber eine kurze Einführung in die Konzepte kann für unsere Nutzer hilfreich sein.

Zeitachsendaten

Was ist eine Zeitreihe? Es handelt sich um ein Dataset mit Daten, die in regelmäßigen Zeitintervallen aufgezeichnet wurden. Ein Zeitreihendataset enthält sowohl die Zeit als auch mindestens eine von der Zeit abhängige Variable.

85af6a1ff05c69f2.png

Komponenten

Eine Zeitreihe kann in Komponenten zerlegt werden:

  • Trend: Auf- oder Abwärtsbewegung in einem einigermaßen vorhersehbaren Muster
  • Saisonal: Wiederholt sich über einen bestimmten Zeitraum, z. B. einen Tag, eine Woche, einen Monat oder eine Jahreszeit.
  • Zufällig: Restschwankungen

Es kann mehrere Saisonalitätsebenen geben. Ein Callcenter stellt beispielsweise möglicherweise ein Muster beim Anrufvolumen an bestimmten Wochentagen und in bestimmten Monaten fest. Der Residual kann möglicherweise durch andere Variablen als die Zeit erklärt werden.

6e8d45bbbbc388ec.png

Stationarität

Um die besten Ergebnisse bei der Prognose zu erzielen, sollten Zeitreihendaten stationär sein. Das bedeutet, dass statistische Eigenschaften wie Mittelwert und Varianz im Zeitverlauf konstant sind. Techniken wie Differenzierung und Trendbereinigung können auf Rohdaten angewendet werden, um sie stationärer zu machen.

Das folgende Diagramm der CO2-Konzentration zeigt beispielsweise ein sich wiederholendes jährliches Muster mit einem Aufwärtstrend. ( Quelle)

ab82857e2e7d0b89.png

Nach dem Entfernen des linearen Trends eignen sich die Daten besser für Prognosen, da sie jetzt einen konstanten Mittelwert haben.

c936381ab1095528.png

Zeitachsendaten für maschinelles Lernen verwenden

Damit Zeitreihendaten in einem Machine-Learning-Problem verwendet werden können, müssen sie so transformiert werden, dass frühere Werte zur Vorhersage zukünftiger Werte verwendet werden können. In dieser Tabelle sehen Sie ein Beispiel dafür, wie verzögerte Variablen erstellt werden, um das Zielvorhaben vorherzusagen.

d667a941dbd470f5.png

Nachdem wir nun einige Grundlagen behandelt haben, können wir mit der Datenanalyse und ‑prognose beginnen.

3. Notebook-Umgebung einrichten

Nachdem wir uns die Daten kurz angesehen haben, richten wir nun unsere Umgebung für die Modellentwicklung ein.

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 sie, 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 aktuellen Notebook-Typ TensorFlow Enterprise 2.x ohne GPUs aus:

4e7b73eabf2bc061.png

Übernehmen Sie die Standardoptionen und klicken Sie auf Erstellen. Nachdem die Instanz erstellt wurde, klicken Sie auf JupyterLab öffnen:

18c9f3c462aafaee.png

Erstellen Sie dann ein Python 3-Notebook in JupyterLab:

58523671a252b95a.png

Schritt 3: Labormaterialien herunterladen

Erstellen Sie über die JupyterLab-Benutzeroberfläche ein neues Terminalfenster: „File“ -> „New“ -> „Terminal“ (Datei -> Neu -> Terminal).

Klonen Sie das Quellmaterial mit diesem Befehl:

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

4. Daten analysieren und visualisieren

In diesem Abschnitt führen Sie folgende Aufgaben aus:

  • Abfrage erstellen, mit der Daten in einer Zeitreihe gruppiert werden
  • Fehlende Werte einfügen
  • 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 Einstellungen für Region, Projekt und Bucket in einer der ersten Zellen und führen Sie die Zellen dann einzeln aus.

Schritt 3

In diesem Abschnitt haben Sie die Daten importiert und verschiedene Dimensionen visualisiert. Nachdem Sie sich einen besseren Überblick über die Daten verschafft haben, können Sie mit dem Machine-Learning-Modellieren mit diesen Daten fortfahren.

55839e7bc0427915.png

5. Modell mit BigQuery Time Series Forecasting erstellen

In diesem Abschnitt führen Sie folgende Aufgaben aus:

  • Zeitreihen-Eingabedaten in eine BigQuery-Tabelle importieren
  • Zeitachsenmodell mit BQML-Syntax erstellen
  • Modellparameter und ‑genauigkeit bewerten
  • Prognosen mit dem Modell erstellen

Schritt 1

Wir erstellen eine BigQuery-Tabelle mit den Rohdaten aus der CSV-Datei, die wir gerade untersucht haben. Laden wir 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. Suchen Sie dazu nach BigQuery oder verwenden Sie diesen Link:

649e7ab1c44b75e8.png

Sie können die Tabelle einem neuen oder vorhandenen Dataset hinzufügen, in dem ähnliche Tabellen gruppiert werden. 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 Ihrer Wahl aus, z. B. demo, übernehmen Sie die Standardeinstellungen und fahren Sie fort.

Wählen Sie das Dataset aus und klicken Sie dann unten rechts auf Tabelle erstellen, um eine neue Tabelle zu erstellen.

ad47810d44cfb289.png

Wählen Sie für die Optionen zum Erstellen der Tabelle Folgendes aus:

  • Tabelle erstellen aus: Upload
  • Datei auswählen: cta_ridership.csv
  • Tabellenname: cta_ridership
  • Schema: Klicken Sie auf das Kästchen, um Schema und Eingabeparameter automatisch zu erkennen.

213e4177e9e79544.png

Schritt 3

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

Fügen Sie diese Abfrage in den Abfrageeditor ein oder geben Sie sie ein. Ersetzen Sie demo bei Bedarf an beiden Stellen durch den Namen Ihres Datasets:

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 die wichtigsten Elemente der Syntax an:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

Mit dieser Anweisung wird das Modell erstellt. Es gibt Varianten dieser Anweisung, z. B. CREATE MODEL. Wir haben uns jedoch dafür entschieden, ein vorhandenes Modell mit demselben Namen zu ersetzen.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

Hier definieren wir die Modelloptionen. Die erste Option ist der Modelltyp. Wenn Sie ARIMA auswählen, wird ein Zeitreihen-Prognosemodell erstellt.

TIME_SERIES_TIMESTAMP_COL=‘service_date'

Die Spalte mit Datums- und Zeitinformationen

TIME_SERIES_DATA_COL=‘total_rides'

Die Datenspalte

HOLIDAY_REGION=‘us'

Mit diesem optionalen Parameter können wir Feiertage in das Modell einbeziehen. Da unsere Datenanalyse im vorherigen Schritt gezeigt hat, dass die Fahrgastzahlen an Feiertagen geringer waren, und die Daten aus Chicago, Illinois, USA stammen, berücksichtigen wir US-Feiertage im Modell.

AS SELECT ... FROM ...

In diesem Abschnitt werden die Eingabedaten ausgewählt, mit denen das Modell trainiert wird.

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

Schritt 4

Sehen wir uns das Modell genauer an. Nachdem das Training abgeschlossen ist, führen wir eine weitere Abfrage aus. Ersetzen Sie dabei bei Bedarf wieder demo:

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

Sehen wir uns die Ergebnisse an. In jeder Zeile sehen Sie ein Kandidatenmodell mit seinen Parametern und Bewertungsstatistiken. Die Ergebnisse werden in aufsteigender Reihenfolge des AIC (Akaike-Informationskriterium) zurückgegeben, das einen relativen Indikator für die Modellqualität darstellt. Das Modell in der ersten Zeile hat also den niedrigsten AIC und gilt als bestes Modell.

Sie können die Parameter „p“, „d“ und „q“ des ARIMA-Modells sowie die im Modell erkannte Saisonalität sehen. In diesem Fall berücksichtigt das beste Modell sowohl die wöchentliche als auch die jährliche Saisonalität.

5b5b1e129c70a340.png

Schritt 5

Jetzt können wir mit der Funktion ML.FORECAST Prognosen erstellen.

Fügen Sie Folgendes ein oder geben Sie es ein (ersetzen Sie demo bei Bedarf):

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

Bei dieser Abfrage werden mit unserem Modell einfach die nächsten 7 Tage vorhergesagt. Unten sehen wir die sieben zurückgegebenen Zeilen. Die Prognose enthält auch ein Konfidenzintervall, das standardmäßig auf 0,95 festgelegt ist, aber in der Abfrage konfiguriert werden kann.

b8a7f22657dc2d27.png

Wir haben mit nur wenigen BQML-Abfragen ein Zeitreihenmodell erstellt.

6. Benutzerdefiniertes Prognosemodell erstellen

In diesem Abschnitt führen Sie folgende Aufgaben aus:

  • Ausreißer aus den Daten entfernen
  • Mehrstufige Prognosen erstellen
  • Zusätzliche Merkmale in ein Zeitreihenmodell einbeziehen
  • Informationen zu neuronalen Netzwerkarchitekturen für die Zeitreihenvorhersage: LSTM und CNN
  • Informationen zu statistischen Modellen, einschließlich Holt-Winters-Verfahren
  • 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 Einstellungen für Region, Projekt und Bucket in einer der ersten Zellen und führen Sie die Zellen dann einzeln aus.

Schritt 3

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

a528df58f4e6d372.png

7. In der Cloud trainieren und vorhersagen

In diesem Abschnitt führen Sie folgende Aufgaben aus:

  • Daten und Modelle für das Training in der Cloud vorbereiten
  • Modell mit AI Platform Training trainieren und den Fortschritt des Jobs überwachen
  • Vorhersagen mit dem Modell in AI Platform Prediction 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 Einstellungen für Region, Projekt und Bucket in einer der ersten Zellen und führen Sie die Zellen dann einzeln aus.

Schritt 3

Im vorherigen Abschnitt haben wir ein Modell trainiert und damit Vorhersagen getroffen – alles in einem Workbench-Notebook. In diesem Abschnitt haben wir gezeigt, wie Sie das Python SDK für Vertex AI aus Ihrem Notebook verwenden, um Vertex AI-Dienste für Training und Bereitstellung zu nutzen.

a3f6b5dc895a24fb.png

8. Herausforderung

In diesem Abschnitt wenden Sie die gelernten Konzepte auf einen neuen Datensatz an.

Wir geben keine detaillierte Anleitung, sondern nur einige Hinweise (falls gewünscht).

Ziel ist es, 311-Dienstanfragen der Stadt New York vorherzusagen. Zu diesen Anfragen, die keine Notfälle sind, gehören z. B. Lärmbeschwerden oder Probleme mit der Straßenbeleuchtung.

Schritt 1

Sehen wir uns zuerst das Dataset an.

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

Um die Daten besser kennenzulernen, können Sie einige der Beispielabfragen ausprobieren, 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 können. Beachten Sie, dass die SELECT-Anweisung Daten aus bigquery-public-data.new_york_311.311_service_requests abfragt.

Schritt 2

Wir sind bereit. In diesem Abschnitt nehmen Sie Änderungen am Notebook Explore and Visualize vor, damit es mit diesen Daten funktioniert.

Hinweise

  • Duplizieren Sie das Notebook 01-explore.ipynb und beginnen Sie damit.
  • Mit dieser Abfrage können Sie die Daten untersuchen:
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()
  • Mit dieser Abfrage erhalten Sie die Anzahl der Vorfälle nach Monat:
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 den Dateinamen, in den Sie die Daten für das nächste Lab exportieren.
  • Exportieren Sie die Daten mit: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

Schritt 3

Erstellen wir nun ein Zeitreihenmodell mit den monatlichen Daten.

Hinweise:

  • Duplizieren Sie das Notebook 02-model.ipynb und beginnen Sie damit.
  • Aktualisieren Sie die Dataset-Parameter:
  • Aktualisieren Sie die Parameter target_col und ts_col entsprechend Ihrem neuen Dataset.
  • Aktualisieren Sie die Modellparameter:
  • Häufigkeit auf monatlich festlegen (Code für Monatsbeginn ist „MS“)
  • Eingabeschritte: 12 (Lookback-Window: 12 Monate)
  • Ausgabeschritte: 3 (Vorhersage für 3 Monate)
  • Saisons: 12 (Saisonalität beträgt 12 Monate)
  • Ändern Sie den Namen der Eingabedatei, wenn Sie ihn im vorherigen Notebook geändert haben.
  • Wenn Sie die Abfrage in der Mitte des Monats ausführen, ist die monatliche Gesamtsumme für den letzten Monat viel niedriger als erwartet. Für dieses Lab entfernen wir den letzten Monat aus dem Datensatz mit: df = df[:-1]
  • Es gibt keine offensichtlichen Ausreißer in den Daten. Überspringen Sie diese Zellen oder kommentieren Sie sie aus.
  • Passen Sie die LSTM-Einheiten, CNN-Filter und die Kernelgröße für dieses neue Modell an.

9. Bereinigen

Wenn Sie dieses Notebook weiterhin verwenden möchten, empfehlen wir, es auszuschalten, wenn Sie es nicht verwenden. Wählen Sie in der Workbench-Benutzeroberfläche in der Cloud Console das Notebook und dann Beenden aus:

57213ef2edad9257.png

Wenn Sie alle in diesem Lab erstellten Ressourcen löschen möchten, löschen Sie einfach das Workbench-Notebook, anstatt es zu beenden.

Rufen Sie in der Cloud Console über das Navigationsmenü „Storage“ auf und löschen Sie die beiden Buckets, die Sie zum Speichern Ihrer Modell-Assets erstellt haben. ACHTUNG: Führen Sie diesen Schritt nur aus, wenn Sie für dieses Lab neue Buckets erstellt haben.