Zeitachsenprognosen mit Vertex AI und BigQuery ML

1. Übersicht

In diesem Lab erfahren Sie, wie Sie mit TensorFlow ein Zeitreihenprognosemodell erstellen und diese Modelle dann mit dem 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 Zeitreihenprognosemodell erstellen
  • Mit TensorFlow und LSTM- und CNN-Architekturen ein Zeitreihenprognosemodell erstellen

2. Einführung in die Zeitreihenprognose

In diesem Codelab geht es darum, wie Sie Zeitreihenprognosetechniken mit der Google Cloud Platform anwenden. Es ist kein allgemeiner Kurs zur Zeitreihenprognose, aber eine kurze Einführung in die Konzepte kann für unsere Nutzer hilfreich sein.

Zeitreihendaten

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

85af6a1ff05c69f2.png

Komponenten

Eine Zeitreihe kann in Komponenten zerlegt werden:

  • Trend: Steigt oder fällt in einem einigermaßen vorhersagbaren Muster
  • Saisonal: Wiederholt sich über einen bestimmten Zeitraum, z. B. einen Tag, eine Woche, einen Monat oder eine Saison
  • Zufällig: Restliche Schwankungen

Es kann mehrere Saisonalitätsebenen geben. Beispielsweise kann in einem Callcenter ein Muster im Anrufvolumen an bestimmten Wochentagen sowie in bestimmten Monaten auftreten. Der Rest 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 gemacht werden. Dabei sind statistische Eigenschaften wie Mittelwert und Varianz über die Zeit konstant. Techniken wie Differenzierung und Trendbereinigung können auf Rohdaten angewendet werden, um sie stationärer zu machen.

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

ab82857e2e7d0b89.png

Nach dem Entfernen des linearen Trends sind die Daten besser für die Prognose geeignet, da sie jetzt einen konstanten Mittelwert haben.

c936381ab1095528.png

Zeitreihendaten für maschinelles Lernen verwenden

Wenn Sie Zeitreihendaten in einem Problem des maschinellen Lernens verwenden möchten, 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 Ziel 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 eine kurze Einführung in die Daten gegeben 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 neuesten TensorFlow Enterprise 2.x Notebook-Typ 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 in JupyterLab ein Python 3-Notebook:

58523671a252b95a.png

Schritt 3: Lab-Materialien herunterladen

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

Klonen Sie von dort aus 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:

  • Eine Abfrage erstellen, mit der Daten in einer Zeitreihe gruppiert werden
  • Fehlende Werte einfügen
  • Daten visualisieren
  • Zeitreihen in Trend- und Saisonkomponenten 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 nun ein klareres Bild der Daten haben, können Sie mit der Modellierung für maschinelles Lernen mit diesen Daten fortfahren.

55839e7bc0427915.png

5. Modell mit BigQuery-Zeitreihenprognose erstellen

In diesem Abschnitt führen Sie folgende Aufgaben aus:

  • Zeitreihen-Eingabedaten in eine BigQuery-Tabelle importieren
  • Mit der BQML-Syntax ein Zeitreihenmodell erstellen
  • Modellparameter und ‑genauigkeit bewerten
  • Mit dem Modell Prognosen erstellen

Schritt 1

Wir erstellen eine BigQuery-Tabelle mit den Rohdaten aus der CSV-Datei, die wir gerade untersucht 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 wählen Sie Herunterladen aus, um die Datei in Ihre lokale Umgebung herunterzuladen.

Schritt 2

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

Rufen Sie BigQuery in der Konsole auf (suchen Sie danach oder verwenden Sie diesen Link):

649e7ab1c44b75e8.png

Sie können die Tabelle einem neuen oder vorhandenen Dataset hinzufügen, in dem verwandte Tabellen gruppiert werden. Wenn Sie noch kein Dataset erstellt haben, klicken Sie links unten auf Ihr Projekt und dann rechts unten auf Dataset erstellen.

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 rechts unten auf Tabelle erstellen, um eine neue Tabelle zu erstellen.

ad47810d44cfb289.png

Wählen Sie für die Optionen zur Tabellenerstellung Folgendes aus:

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

213e4177e9e79544.png

Schritt 3

Jetzt können wir unser Modell erstellen. BigQuery ML bietet eine einfache Syntax ähnlich SQL, mit der Sie eine Vielzahl von Modelltypen erstellen können.

Fügen Sie diese Abfrage in den Abfrageeditor ein und 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, aber wir haben uns hier dafür entschieden, ein vorhandenes Modell mit demselben Namen zu ersetzen.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

Hier definieren wir die Modelloptionen, wobei die erste Option der Modelltyp ist. Wenn Sie „ARIMA“ auswählen, wird ein Zeitreihenprognosemodell erstellt.

TIME_SERIES_TIMESTAMP_COL=‘service_date'

Die Spalte mit den Datums-/Uhrzeitinformationen

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 niedriger 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, mit denen wir das Modell trainieren.

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

Schritt 4

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

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

Interpretieren wir die Ergebnisse. 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 sehen die Parameter „p“, „d“ und „q“ des ARIMA-Modells sowie die im Modell erkannte Saisonalität. In diesem Fall umfasst das beste Modell sowohl wöchentliche als auch jährliche Saisonalität.

5b5b1e129c70a340.png

Schritt 5

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

Fügen Sie Folgendes ein (und ersetzen Sie dabei bei Bedarf demo):

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

Mit dieser Abfrage werden einfach 7 Tage mit unserem Modell prognostiziert. Unten sehen Sie 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

Gut gemacht! 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 Features in ein Zeitreihenmodell einbeziehen
  • Informationen zu neuronalen Netzwerkarchitekturen für die Zeitreihenprognose: LSTM und CNN
  • 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 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 untersucht: LSTM, CNN und statistische Modelle. Für jedes Modell sehen Sie, wie es im Vergleich zu den Testdaten abschneidet:

a528df58f4e6d372.png

7. In der Cloud trainieren und Prognosen erstellen

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 beobachten
  • Mit dem Modell mit AI Platform Prediction Prognosen erstellen

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 Prognosen erstellt, alles in einem Workbench-Notebook. In diesem Abschnitt haben wir gezeigt, wie Sie das Python SDK für Vertex AI in Ihrem 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 geben keine detaillierte Anleitung, sondern nur einige Tipps (falls Sie sie möchten).

Ziel ist es, 311-Dienstanfragen der Stadt New York vorherzusagen. Diese Anfragen, die keine Notfälle betreffen, umfassen z. B. Beschwerden über Lärm oder Probleme mit der Straßenbeleuchtung.

Schritt 1

Sehen wir uns zuerst das Dataset an.

Rufen Sie zuerst das Dataset „311 Service Requests from the City of New York“ 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-UI Abfrage erstellen aus, um zu sehen, wie Sie auf das Dataset zugreifen. Beachten Sie, dass die SELECT-Anweisung eine Abfrage von bigquery-public-data.new_york_311.311_service_requests ausführt.

Schritt 2

Wir können loslegen. Nehmen Sie in diesem Abschnitt Änderungen am Notebook Explore and Visualize vor, um mit diesen Daten zu arbeiten.

Tipps

  • Duplizieren Sie das Notebook 01-explore.ipynb und arbeiten Sie damit.
  • Probieren Sie diese Abfrage aus, um die Daten zu 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()
  • Verwenden Sie diese Abfrage, um die Anzahl der Vorfälle nach Monat zu erhalten:
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 Features.
  • Ändern Sie gegebenenfalls den Dateinamen, in dem 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.

Tipps

  • Duplizieren Sie das Notebook 02-model.ipynb und arbeiten 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“ ändern (Code für Monatsbeginn ist „MS“)
  • Eingabeschritte: 12 (Rückblickzeitraum ist 12 Monate)
  • Ausgabeschritte: 3 (Prognose für 3 Monate)
  • Saisons: 12 (Saisonalität ist 12 Monate)
  • Ändern Sie den Namen der Eingabedatei, wenn Sie ihn im vorherigen Notebook geändert haben.
  • Wenn Sie die Abfrage Mitte des Monats ausführen, ist die monatliche Gesamtzahl für den letzten Monat viel niedriger als erwartet. Entfernen Sie für dieses Lab den letzten Monat aus dem Dataset mit: df = df[:-1]
  • In den Daten sind keine offensichtlichen Ausreißer zu sehen. Überspringen Sie diese Zellen oder kommentieren Sie sie aus.
  • Passen Sie die LSTM-Einheiten und CNN-Filter sowie die Kernelgröße für dieses neue Modell an.

9. Bereinigen

Wenn Sie dieses Notebook weiterhin verwenden möchten, sollten Sie es deaktivieren, wenn Sie es nicht verwenden. Wählen Sie in der Workbench-UI in der Cloud Console das Notebook aus und klicken Sie dann auf Beenden:

57213ef2edad9257.png

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

Rufen Sie im Navigationsmenü in der Cloud Console „Storage“ auf und löschen Sie beide Buckets, die Sie zum Speichern Ihrer Modellressourcen erstellt haben. **Achtung** : Führen Sie diesen Schritt nur aus, wenn Sie für dieses Lab neue Buckets erstellt haben.