Prognostizierte Werte für ein ARIMA_PLUS-Zeitachsenmodell beschränken
In dieser Anleitung erfahren Sie, wie Sie mithilfe von Limits die prognostizierten Ergebnisse eingrenzen, die von einem ARIMA_PLUS
-Zeitachsenmodell zurückgegeben werden. In dieser Anleitung erstellen Sie zwei Zeitachsenmodelle, die dieselben Daten nutzen. Ein Modell verwendet Limits und ein Modell verwendet keine Limits. So können Sie die von den Modellen zurückgegebenen Ergebnisse vergleichen und den Unterschied verstehen, den die Angabe von Limits bewirkt.
Sie verwenden die new_york.citibike_trips
-Daten zum Trainieren der Modelle in dieser Anleitung. Dieser Datensatz enthält Informationen zu Citi Bike-Fahrten in New York City.
Bevor Sie diese Anleitung durcharbeiten, sollten Sie mit den Prognosen für einzelne Zeitachsen vertraut sein. Eine Einführung in dieses Thema finden Sie in der Anleitung Prognosen für einzelne Zeitachsen für Google Analytics-Daten durchführen.
Erforderliche Berechtigungen
Sie benötigen die IAM-Berechtigung
bigquery.datasets.create
, um das Dataset zu erstellen.Zum Erstellen des Modells benötigen Sie die folgenden Berechtigungen:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:
bigquery.models.getData
bigquery.jobs.create
Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.
Ziele
In dieser Anleitung verwenden Sie Folgendes:
- Die
CREATE MODEL
-Anweisung zum Erstellen eines Zeitachsenmodells. - Die
ML.FORECAST
-Funktion zur Prognose der täglichen Gesamtbesuche.
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloudverwendet, darunter:
- BigQuery
- BigQuery ML
Weitere Informationen zu den Kosten von BigQuery finden Sie auf der Seite BigQuery-Preise.
Weitere Informationen zu den Kosten für BigQuery ML finden Sie unter BigQuery ML-Preise.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.
Klicken Sie auf
Aktionen ansehen > Dataset erstellen.Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:
Geben Sie unter Dataset-ID
bqml_tutorial
ein.Wählen Sie als Standorttyp die Option Mehrere Regionen und dann USA (mehrere Regionen in den USA) aus.
Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.
Erstellen Sie ein Dataset mit dem Namen
bqml_tutorial
, wobei der Datenspeicherort aufUS
und die Beschreibung aufBigQuery ML tutorial dataset
festgelegt ist:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Anstelle des Flags
--dataset
verwendet der Befehl die verkürzte Form-d
. Wenn Sie-d
und--dataset
auslassen, wird standardmäßig ein Dataset erstellt.Prüfen Sie, ob das Dataset erstellt wurde:
bq ls
Klicken Sie in der Google Cloud -Console auf die Schaltfläche Neue Abfrage erstellen.
Geben Sie im Abfrageeditor die folgende GoogleSQL-Abfrage ein.
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips GROUP BY date
Klicken Sie auf Ausführen. Die Abfrageergebnisse sehen in etwa so aus:
Verwenden Sie die Google Cloud Console, um die Zeitachsendaten grafisch darzustellen. Klicken Sie im Bereich Abfrageergebnisse auf den Tab Visualisierung. Wählen Sie im Bereich Visualisierungskonfiguration für Visualisierungstyp die Option Balkendiagramm aus:
Klicken Sie in der Google Cloud -Console auf die Schaltfläche Neue Abfrage erstellen.
Geben Sie im Abfrageeditor die folgende GoogleSQL-Abfrage ein.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Klicken Sie auf Ausführen.
Die Abfrage dauert ungefähr 80 Sekunden. Anschließend können Sie auf das Modell (
nyc_citibike_arima_model
) zugreifen. Da die Abfrage eineCREATE MODEL
-Anweisung zum Erstellen eines Modells verwendet, gibt es keine Abfrageergebnisse.Klicken Sie in der Google Cloud -Console auf die Schaltfläche Neue Abfrage erstellen.
Geben Sie im Abfrageeditor die folgende GoogleSQL-Abfrage ein.
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id
Klicken Sie auf Ausführen. Die Abfrageergebnisse sehen in etwa so aus:
Verwenden Sie die Google Cloud Console, um die Zeitachsendaten grafisch darzustellen. Klicken Sie im Bereich Abfrageergebnisse auf den Tab Visualisierung:
Klicken Sie in der Google Cloud -Console auf die Schaltfläche Neue Abfrage erstellen.
Geben Sie im Abfrageeditor die folgende GoogleSQL-Abfrage ein.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Klicken Sie auf Ausführen.
Die Abfrage dauert ungefähr 100 Sekunden. Anschließend können Sie auf das Modell (
nyc_citibike_arima_model_with_limits
) zugreifen. Da die Abfrage eineCREATE MODEL
-Anweisung zum Erstellen eines Modells verwendet, gibt es keine Abfrageergebnisse.Klicken Sie in der Google Cloud -Console auf die Schaltfläche Neue Abfrage erstellen.
Geben Sie im Abfrageeditor die folgende GoogleSQL-Abfrage ein.
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id
Klicken Sie auf Ausführen.
Verwenden Sie die Google Cloud Console, um die Zeitachsendaten grafisch darzustellen. Klicken Sie im Bereich Abfrageergebnisse auf den Tab Visualisierung:
Rufen Sie, falls erforderlich, die Seite „BigQuery“ in derGoogle Cloud Console auf.
Wählen Sie im Navigationsbereich das Dataset bqml_tutorial aus, das Sie erstellt haben.
Klicken Sie rechts im Fenster auf Delete dataset (Dataset löschen). Dadurch werden das Dataset, die Tabelle und alle Daten gelöscht.
Bestätigen Sie im Dialogfeld Dataset löschen den Löschbefehl. Geben Sie dazu den Namen des Datasets (
bqml_tutorial
) ein und klicken Sie auf Löschen.- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- Prognosen für mehrere Zeitachsen mit einer einzigen Abfrage für „NYC Citi Bike“-Fahrten durchführen
- Erfahren Sie, wie Sie ARIMA_PLUS beschleunigen, um eine Million Zeitachsen innerhalb von Stunden zu prognostizieren.
- Mehr über das maschinelle Lernen im Machine Learning Crash Course erfahren
- Eine Übersicht über BigQuery ML finden Sie unter Einführung in BigQuery ML.
- Weitere Informationen zur Google Cloud Console finden Sie unter Google Cloud Console verwenden.
Dataset erstellen
Erstellen Sie ein BigQuery-Dataset zum Speichern Ihres ML-Modells.
Console
bq
Wenn Sie ein neues Dataset erstellen möchten, verwenden Sie den Befehl bq mk
mit dem Flag --location
. Eine vollständige Liste der möglichen Parameter finden Sie in der bq mk --dataset
-Befehlsreferenz.
API
Rufen Sie die Methode datasets.insert
mit einer definierten Dataset-Ressource auf.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Die zu prognostizierenden Zeitachsen visualisieren
Schauen Sie sich Ihre Eingabezeitachse genau an, bevor Sie das Modell erstellen.
SQL
In der folgenden Abfrage gibt die FROM bigquery-public-data.new_york.citibike_trips
-Klausel an, dass Sie die Tabelle citibike_trips
im Dataset new_york
abfragen.
In der SELECT
-Anweisung verwendet die Abfrage die EXTRACT
-Funktion, um die Datumsinformationen aus der Spalte starttime
zu extrahieren. Die Abfrage verwendet die COUNT(*)
-Klausel, um die Gesamtzahl der Citi Bike-Touren pro Tag abzurufen.
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips GROUP BY date
Die Abfrage führen Sie so aus:
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Im folgenden Beispiel gibt bigquery-public-data.new_york.citibike_trips
an, dass Sie die Tabelle citibike_trips
im Dataset new_york
abfragen.
Das Ergebnis sieht etwa so aus:
Zeitachsenmodell erstellen
Erstellen Sie ein Zeitachsenmodell mit den Daten der NYC Citi Bike-Fahrten.
Die folgende GoogleSQL-Abfrage erstellt ein Modell, das die täglichen Gesamtreisen prognostiziert. Die CREATE MODEL
-Anweisung erstellt und trainiert ein Modell mit dem Namen bqml_tutorial.nyc_citibike_arima_model
.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Die OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
-Anweisung gibt an, dass Sie ein ARIMA-basiertes Zeitachsenmodell erstellen. Standardmäßig wird auto_arima=TRUE
verwendet, sodass der auto.ARIMA
-Algorithmus die Hyperparameter in ARIMA_PLUS
-Modellen automatisch abstimmt. Der Algorithmus passt Dutzende von Kandidatenmodellen an und wählt das beste Modell mit dem niedrigsten Akaike-Informationskriterium (AIC) aus.
Da der Standardwert data_frequency='AUTO_FREQUENCY'
ist, leitet der Trainingsprozess außerdem automatisch die Datenhäufigkeit der Eingabezeitachse ab. Die CREATE MODEL
-Anweisung verwendet standardmäßig decompose_time_series=TRUE
, sodass sowohl der Verlauf als auch die Prognoseteile der Zeitachse im Modell gespeichert werden. Wenn Sie den Parameter time_series_id_col = 'start_station_id'
festlegen, werden mit dem Modell mehrere Zeitachsen mit einer einzigen Abfrage auf Grundlage von start_station_id
angepasst und prognostiziert. Anhand dieser Informationen können Sie die Prognose der Zeitachsen besser verstehen, indem Sie die separaten Zeitachsenkomponenten wie beispielsweise saisonale Zeiträume abrufen.
Führen Sie die CREATE MODEL
-Abfrage aus, um Ihr Modell zu erstellen und zu trainieren:
Zeitachsen prognostizieren und die Ergebnisse visualisieren
Sie können erklären, wie die Zeitreihe prognostiziert wird, indem Sie alle Teilzeitkomponenten-Komponenten wie Saisonalität und Trend mithilfe der Funktion ML.FORECAST
visualisieren.
Gehen Sie hierzu folgendermaßen vor:
Das Diagramm zeigt, dass die prognostizierten Werte für die tägliche Gesamtzahl der Citi Bike-Fahrten bei start_station_id=79
negativ sind. Dies ist nicht hilfreich. Durch die Verwendung eines Modells mit Limits werden die prognostizierten Daten stattdessen verbessert.
Zeitachsenmodell mit Limits erstellen
Mit den Daten von NYC Citi Bike-Fahrten ein Zeitachsenmodell mit Limits erstellen.
Die folgende GoogleSQL-Abfrage erstellt ein Modell, das die täglichen Gesamtreisen prognostiziert. Die CREATE MODEL
-Anweisung erstellt und trainiert ein Modell mit dem Namen bqml_tutorial.nyc_citibike_arima_model_with_limits
.
Der Hauptunterschied zwischen diesem und dem zuvor erstellten Modell ist die Ergänzung der Option forecast_limit_lower_bound=0
. Mit dieser Option prognostiziert das Modell nur Werte größer als 0, basierend auf den Werten in der Spalte, die durch das Argument time_series_data_col
angegeben wird, in diesem Fall num_trips
.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Führen Sie die CREATE MODEL
-Abfrage aus, um Ihr Modell zu erstellen und zu trainieren:
Zeitachsen mithilfe des Modells mit Limits prognostizieren
Das ARIMA PLUS-Modell erkennt, dass die Gesamtzahl der Citi Bike-Touren bei start_station_id=79
pro Tag sinkt. Zukünftige Prognosewerte folgen diesem Trend und geben relativ kleinere Prognosezahlen in der Zukunft an. Das Diagramm zeigt, dass die prognostizierten Werte für die Gesamtzahl der Citi Bike-Touren bei start_station_id=79
positiv sind. Dies ist nützlicher. Das Modell mit Limits erkennt, dass die tägliche Gesamtzahl der Citi Bike-Fahrten bei start_station_id=79
abnimmt, aber weiterhin aussagekräftige Prognosewerte liefert.
Wie in dieser Anleitung gezeigt, können Sie mit den Optionen forecast_limit_lower_bound
und forecast_limit_upper_bound
aussagekräftigere Prognosewerte als in diesem Beispiel abrufen, z. B. bei der Prognose von Aktienkursen oder zukünftigen Verkaufszahlen.
Dataset löschen
Wenn Sie Ihr Projekt löschen, werden alle Datasets und Tabellen entfernt. Wenn Sie das Projekt wieder verwenden möchten, können Sie das in dieser Anleitung erstellte Dataset löschen:
Projekt löschen
So löschen Sie das Projekt: