Prognosen mit Prophet

Prophet ist ein von Meta verwaltetes Prognosemodell. Weitere Informationen zu Algorithmen finden Sie im Prophet-Artikel. In der Dokumentation finden Sie weitere Informationen zur Bibliothek.

Wie BigQuery ML ARIMA_PLUS versucht Prophet, jede Zeitreihe in Trends, Jahreszeiten und Feiertage zu unterteilen, um aus der Aggregation der Vorhersagen dieser Modelle eine Prognose zu erstellen. Ein wichtiger Unterschied ist, dass BQML ARIMA+ die Trendkomponente mit ARIMA modelliert, während Prophet versucht, eine Kurve in einem abschnittsweise logistischen oder linearen Modell anzupassen.

Google Cloud bietet eine Pipeline zum Trainieren eines Prophet-Modells und eine Pipeline zum Abrufen von Batchvorhersagen aus einem BigQuery Prophet-Modell. Beide Pipelines sind Instanzen von Vertex AI Pipelines aus den Google Cloud-Pipeline-Komponenten (GCPC).

Die Einbindung von Prophet in Vertex AI bedeutet, dass Sie Folgendes tun können:

  • Sie können die Datenaufteilung und Windowing-Strategien von Vertex AI nutzen.
  • Sie können Daten aus BigQuery-Tabellen oder CSV-Dateien lesen, die in Cloud Storage gespeichert sind. Vertex AI erwartet, dass jede Zeile das Format hat, das auch für Vertex AI Forecasting verwendet wird.

Obwohl Prophet ein multivariates Modell ist, unterstützt Vertex AI nur eine univariate Version.

Weitere Informationen zu den von diesem Workflow verwendeten Dienstkonten finden Sie unter Dienstkonten für tabellarische Workflows.

Workflow-APIs

Dieser Workflow verwendet folgende APIs:

  • Vertex AI
  • Dataflow
  • BigQuery
  • Cloud Storage

Modell mit Prophet trainieren

Prophet ist für eine einzelne Zeitachse konzipiert. Vertex AI aggregiert Daten nach Zeitachsen-ID und trainiert ein Prophet-Modell pro Zeitachse. Die Modelltrainings-Pipeline führt die Hyperparameter-Abstimmung mit Grid-Suche und der integrierten Backtesting-Logik von Prophet durch.

Zur Unterstützung mehrerer Zeitachsen verwendet die Pipeline einen benutzerdefinierten Vertex AI-Trainingsjob und Dataflow, um mehrere Prophet-Modelle parallel zu trainieren. Insgesamt ist die Anzahl der trainierten Modelle das Produkt aus der Anzahl der Zeitachsen und der Anzahl der Hyperparameter-Abstimmungstests.

Der folgende Beispielcode zeigt, wie eine Prophet-Modelltrainings-Pipeline ausgeführt werden kann:

job = aiplatform.PipelineJob(
    ...
    template_path=train_job_spec_path,
    parameter_values=train_parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

Mit dem optionalen Parameter service_account in job.run() können Sie das Vertex AI Pipelines-Dienstkonto auf ein Konto Ihrer Wahl festlegen.

Die Pipeline und die Parameterwerte werden durch die folgende Funktion definiert.

(
    train_job_spec_path,
    train_parameter_values,
) = utils.get_prophet_train_pipeline_and_parameters(
    ...
)

Im Folgenden finden Sie einen Teil der get_prophet_train_pipeline_and_parameters-Parameter:

Parametername Typ Definition
project String Ihre Projekt-ID.
location String Ihre Region.
root_dir String Der Cloud Storage-Speicherort zum Speichern der Ausgabe.
target_column String Die Spalte (Wert), für die das Modell Vorhersagen treffen soll.
time_column String Spalte "Time" (Zeit). Sie müssen eine Zeitspalte angeben, die für jede Zeile einen Wert enthält. Die Zeitspalte gibt den Zeitpunkt an, zu dem eine bestimmte Beobachtung erfolgt ist.
time_series_identifier_column String Die Spalte der Zeitachsenkennzeichnung. Sie müssen eine Spalte für die Zeitachsenkennzeichnung angeben. Diese muss für jede Zeile einen Wert enthalten. Die Prognose von Trainingsdaten enthält normalerweise mehrere Zeitachsen. Die Kennzeichnung teilt Vertex AI mit, zu welcher Zeitachse eine bestimmte Beobachtung in den Trainingsdaten gehört. Alle Zeilen in einer bestimmten Zeitachse haben denselben Wert in der Zeitachsenkennzeichnungsspalte. Einige gängige Zeitachsenkennzeichnungen können die Produkt-ID, eine Geschäfts-ID oder eine Region sein. Es ist möglich, ein Prognosemodell für eine einzelne Zeitachse mit einem identischen Wert für alle Zeilen in der Zeitachsenkennzeichnungsspalte zu trainieren. Vertex AI eignet sich jedoch besser für Trainingsdaten, die zwei oder mehr Zeitachsen enthalten. Die besten Ergebnisse erzielen Sie, wenn Sie für jede Spalte, die Sie zum Trainieren des Modells verwenden, mindestens 10 Zeitachsen verwenden.
data_granularity_unit String Die Einheit, die für die Granularität Ihrer Trainingsdaten, den Prognosezeitraum und das Kontextfenster verwendet werden soll. Kann minute, hour, day, week, month oder year sein. Weitere Informationen zum Auswählen des Daten-Detaillierungsgrads
data_source_csv_filenames String Ein URI für eine in Cloud Storage gespeicherte CSV-Datei.
data_source_bigquery_table_path String Ein URI für eine BigQuery-Tabelle.
forecast_horizon Integer Der Prognosezeitraum bestimmt, wie weit das Modell den Zielwert für jede Zeile mit Vorhersagedaten prognostiziert. Der Prognosezeitraum wird in Einheiten von Datengranularität angegeben. Weitere Informationen
optimization_objective String Optimierungsziel für das Modell. Weitere Informationen
max_num_trials Integer Maximale Anzahl der Abstimmungstests, die pro Zeitreihe ausgeführt werden sollen.

Dataflow-Parameter

Im Folgenden finden Sie ein Unterset der get_prophet_train_pipeline_and_parameters-Parameter für die Dataflow-Anpassung:

Parametername Typ Definition
trainer_dataflow_machine_type String Der Dataflow-Maschinentyp, der für das Training verwendet werden soll.
trainer_dataflow_max_num_workers Integer Die maximale Anzahl an Dataflow-Workern, die für das Training verwendet werden sollen.
evaluation_dataflow_machine_type String Der Dataflow-Maschinentyp für die Bewertung.
evaluation_dataflow_max_num_workers Integer Die maximale Anzahl an Dataflow-Workern, die für die Bewertung verwendet werden sollen.
dataflow_service_account String Benutzerdefiniertes Dienstkonto zum Ausführen von Dataflow-Jobs. Der Dataflow-Job kann so konfiguriert werden, dass private IP-Adressen und ein bestimmtes VPC-Subnetz verwendet werden. Dieser Parameter dient als Überschreibung für das standardmäßige Dataflow-Worker-Dienstkonto.

Da Prophet-Trainingsjobs in Dataflow ausgeführt werden, gibt es eine anfängliche Anlaufzeit von 5 bis 7 Minuten. Um zusätzliche Laufzeit zu reduzieren, können Sie hoch- oder horizontal skalieren. Zum Hochskalieren können Sie beispielsweise den Maschinentyp von n1-standard-1 in e2-highcpu-8 ändern. Zum horizontalen Skalieren können Sie die Anzahl der Worker von 1 auf 200 erhöhen.

Parameter für die Datenaufteilung

Die Trainingspipeline bietet folgende Optionen zum Aufteilen Ihrer Daten:

Datenaufteilung Beschreibung Parameter
Standardaufteilung Vertex AI wählt nach dem Zufallsprinzip 80 % Ihrer Datenzeilen für das Trainings-Dataset, 10 % für das Validierungs-Dataset und 10 % für das Test-Dataset aus. Vertex AI verwendet die Spalte „Zeit“, um die chronologische Reihenfolge der Datenzeilen zu bestimmen.
Aufteilung der Teile Vertex AI verwendet Werte, die Sie angeben, um Ihre Daten in die Datasets "Training", "Validierung" und "Test" zu partitionieren. Vertex AI verwendet die Spalte „Zeit“, um die chronologische Reihenfolge der Datenzeilen zu bestimmen.
  • training_fraction
  • validation_fraction
  • test_fraction
Zeitstempelaufteilung Vertex AI verwendet die Werte training_fraction, validation_fraction und test_fraction, um Ihre Daten in die Datasets "Training", "Validierung" und "Test" zu partitionieren. Vertex AI verwendet die Spalte timestamp_split_key, um die chronologische Reihenfolge der Datenzeilen zu bestimmen.
  • training_fraction
  • validation_fraction
  • test_fraction
  • timestamp_split_key
Manuelle (vordefinierte) Aufteilung Vertex AI teilt die Daten mithilfe der Werte TRAIN, VALIDATE oder TEST in der predefined_split_key-Spalte auf.
  • predefined_split_key

Sie definieren die Datenaufteilungsparameter in get_prophet_train_pipeline_and_parameters so:

Parametername Typ Definition
predefined_split_key String Der Name der Spalte, die die Werte TRAIN, VALIDATE oder TEST enthält. Legen Sie diesen Wert fest, wenn Sie eine manuelle (vordefinierte) Aufteilung verwenden.
training_fraction Gleitkommazahl Der Prozentsatz der Daten, die dem Trainingsset zugewiesen werden sollen. Legen Sie diesen Wert fest, wenn Sie eine Bruchwert- oder eine Zeitstempelaufteilung verwenden.
validation_fraction Gleitkommazahl Der Prozentsatz der Daten, die dem Validierungsset zugewiesen werden sollen. Legen Sie diesen Wert fest, wenn Sie eine Bruchwert- oder eine Zeitstempelaufteilung verwenden.
test_fraction Gleitkommazahl Der Prozentsatz der Daten, die dem Testset zugewiesen werden sollen. Legen Sie diesen Wert fest, wenn Sie eine Bruchwert- oder eine Zeitstempelaufteilung verwenden.
timestamp_split_key String Der Name der Spalte, die die Zeitstempel für die Datenaufteilung enthält. Legen Sie diesen Wert fest, wenn Sie eine Zeitstempelaufteilung verwenden.

Fensterparameter

Vertex AI generiert anhand einer rollierenden Fensterstrategie Prognosefenster aus den Eingabedaten. Wenn Sie die Fensterparameter nicht festlegen, verwendet Vertex AI die Count-Strategie mit dem Standardwert 100,000,000. Die Trainingspipeline bietet folgende Strategien für rollierende Fenster:

Rollierende Fensterstrategie Beschreibung Parameter
Anzahl Die Anzahl der von Vertex AI generierten Fenster darf das vom Nutzer bereitgestellte Maximum nicht überschreiten. Wenn die Anzahl der Zeilen im Eingabe-Dataset kleiner als die maximale Anzahl der Fenster ist, wird jede Zeile zum Generieren eines Fensters verwendet. Andernfalls führt Vertex AI eine zufällige Stichprobe zur Auswahl der Zeilen durch. Der Standardwert für die maximale Anzahl an Zeitfenstern ist 100,000,000. Die maximale Anzahl von Fenstern darf 100,000,000 nicht überschreiten. window_max_count
Schritt Vertex AI verwendet eine von jeder X-Eingabezeile, um ein Fenster zu generieren. Die Maximalzahl ist 100.000.000 Fenster. Diese Option ist für saisonale oder regelmäßige Vorhersagen nützlich. Sie können beispielsweise die Prognose auf einen einzelnen Wochentag beschränken. Dazu setzen Sie den Wert der Schrittlänge auf 7. Der Wert kann im Bereich von 1 bis 1000 liegen. window_stride_length
Spalte Sie können Ihren Eingabedaten eine Spalte hinzufügen, in der die Werte entweder True oder False sind. Vertex AI generiert ein Fenster für jede Eingabezeile, in der der Wert der Spalte True ist. Die Werte True und False können in beliebiger Reihenfolge festgelegt werden, solange die Gesamtzahl der True-Zeilen unter 100,000,000 liegt. Boolesche Werte werden bevorzugt, Stringwerte werden jedoch auch akzeptiert. Bei den Stringwerten wird nicht zwischen Groß- und Kleinschreibung unterschieden. window_column

Sie definieren die Fensterparameter in get_prophet_train_pipeline_and_parameters so:

Parametername Typ Definition
window_column String Der Name der Spalte mit den True- und False-Werten.
window_stride_length Integer Der Wert der Schrittlänge.
window_max_count Integer Die maximale Anzahl an Fenstern.

Vorhersagen mit Prophet machen

Die Vertex AI-Modelltrainings-Pipeline für Prophet erstellt ein Prophet-Modell für jede Zeitachse in den Daten. Die Vorhersagepipeline fasst Eingabedaten nach Zeitachsen-ID zusammen und berechnet die Vorhersagen pro Zeitachse separat. Die Pipeline teilt die Vorhersageergebnisse dann entsprechend dem Vertex AI Forecasting-Format auf.

Der folgende Beispielcode zeigt, wie Sie eine Prophet-Prediction-Pipeline ausführen können:

job = aiplatform.PipelineJob(
    ...
    template_path=prediction_job_spec_path,
    parameter_values=prediction_parameter_values,
    ...
)
job.run(...)

Die Pipeline und die Parameterwerte werden durch die folgende Funktion definiert.

(
    prediction_job_spec_path,
    prediction_parameter_values,
) = utils.get_prophet_prediction_pipeline_and_parameters(
    ...
)

Im Folgenden finden Sie einen Teil der get_prophet_prediction_pipeline_and_parameters-Parameter:

Parametername Typ Definition
project String Ihre Projekt-ID.
location String Ihre Region.
model_name String Der Name der Modellressource. Formatieren Sie den String so: projects/{project}/locations/{location}/models/{model}.
time_column String Spalte "Time" (Zeit). Sie müssen eine Zeitspalte angeben, die für jede Zeile einen Wert enthält. Die Zeitspalte gibt den Zeitpunkt an, zu dem eine bestimmte Beobachtung erfolgt ist.
time_series_identifier_column String Die Spalte der Zeitachsenkennzeichnung. Sie müssen eine Spalte für die Zeitachsenkennzeichnung angeben. Diese muss für jede Zeile einen Wert enthalten. Die Prognose von Trainingsdaten enthält normalerweise mehrere Zeitachsen. Die Kennzeichnung teilt Vertex AI mit, zu welcher Zeitachse eine bestimmte Beobachtung in den Trainingsdaten gehört. Alle Zeilen in einer bestimmten Zeitachse haben denselben Wert in der Zeitachsenkennzeichnungsspalte. Einige gängige Zeitachsenkennzeichnungen können die Produkt-ID, eine Geschäfts-ID oder eine Region sein. Es ist möglich, ein Prognosemodell für eine einzelne Zeitachse mit einem identischen Wert für alle Zeilen in der Zeitachsenkennzeichnungsspalte zu trainieren. Vertex AI eignet sich jedoch besser für Trainingsdaten, die zwei oder mehr Zeitachsen enthalten. Die besten Ergebnisse erzielen Sie, wenn Sie für jede Spalte, die Sie zum Trainieren des Modells verwenden, mindestens 10 Zeitachsen verwenden.
target_column String Die Spalte (Wert), für die das Modell Vorhersagen treffen soll.
data_source_csv_filenames String Ein URI für eine in Cloud Storage gespeicherte CSV-Datei.
data_source_bigquery_table_path String Ein URI für eine BigQuery-Tabelle.
bigquery_destination_uri String Ein URI für das gewünschte Ziel-Dataset. Wenn dieser Wert nicht festgelegt ist, werden Ressourcen in einem neuen Dataset im Projekt erstellt.
machine_type String Der Maschinentyp für die Batchvorhersage.
max_num_workers Integer Die maximale Anzahl an Workern, die für die Batchvorhersage verwendet werden sollen.