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.
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.
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)
Nachdem der lineare Trend entfernt wurde, sind die Daten besser für Prognosen geeignet, da sie jetzt einen konstanten Mittelwert haben.
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.
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.
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:
Verwenden Sie die Standardoptionen und klicken Sie dann auf Erstellen. Nachdem die Instanz erstellt wurde, wählen Sie JupyterLab öffnen aus:
Erstellen Sie dann ein Python 3-Notebook in JupyterLab:
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.
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):
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.
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.
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.
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:
| Diese Anweisung erstellt das Modell. Es gibt Varianten dieser Anweisung, z.B. |
| Hier definieren wir die Modelloptionen, wobei die erste Option der Modelltyp ist. Durch Auswählen von ARIMA wird ein Zeitreihen-Prognosemodell erstellt. |
| Spalte mit Datums-/Uhrzeitinformationen |
| Die Datenspalte |
| 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. |
| 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.
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.
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:
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.
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
undts_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:
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.