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 Zeitreihe 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 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, an dem die Ausgabe gespeichert werden soll. |
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 zu trainieren, wobei alle Zeilen in der Spalte für die Zeitachsenkennzeichnung denselben Wert haben. 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 |
Ganzzahl | 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 |
Ganzzahl | Maximale Anzahl von Optimierungstests pro Zeitreihe. |
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 |
Ganzzahl | Die maximale Anzahl an Dataflow-Workern, die für das Training verwendet werden sollen. |
evaluation_dataflow_machine_type |
String | Der Dataflow-Maschinentyp, der für die Bewertung verwendet werden soll. |
evaluation_dataflow_max_num_workers |
Ganzzahl | 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 Standarddienstkonto des Dataflow-Workers. |
Da Prophet-Trainingsjobs in Dataflow ausgeführt werden, gibt es eine anfängliche Anlaufzeit von 5 bis 7 Minuten. Sie können die zusätzliche Laufzeit reduzieren, indem Sie die Anzahl der Knoten erhöhen oder verringern. Wenn Sie beispielsweise skalieren möchten, können Sie 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 Zeitspalte, um die chronologische Reihenfolge der Datenzeilen zu bestimmen. | Keine |
Bruchteilaufteilung | Vertex AI verwendet Werte, die Sie angeben, um Ihre Daten in die Datasets "Training", "Validierung" und "Test" zu partitionieren. Vertex AI verwendet die Zeitspalte, um die chronologische Reihenfolge der Datenzeilen zu bestimmen. |
|
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. |
|
Manuelle (vordefinierte) Aufteilung | Vertex AI teilt die Daten mithilfe der Werte TRAIN, VALIDATE oder TEST in der predefined_split_key -Spalte auf. |
|
Sie definieren die Parameter für die Datenaufteilung 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 |
Float | 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 |
Float | 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 |
Float | 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 mit den Zeitstempeln für die Datenaufteilung. 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 Strategie "Anzahl" mit einem Höchstwert von 100,000,000
. Die Trainingspipeline bietet folgende Strategien für rollierende Fenster:
Strategie mit rollierendem Zeitfenster | 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, aber auch Stringwerte sind zulässig. 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 |
Ganzzahl | Der Wert der Schrittlänge. |
window_max_count |
Ganzzahl | 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 zu trainieren, wobei alle Zeilen in der Spalte für die Zeitachsenkennzeichnung denselben Wert haben. 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 für die Batchvorhersage zu verwendende Maschinentyp. |
max_num_workers |
Ganzzahl | Die maximale Anzahl der Worker, die für die Batchvorhersage verwendet werden sollen. |