Onlinevorhersagen für ein Prognosemodell abrufen

Vertex AI bietet zwei Optionen zum Projizieren zukünftiger Werte mit Ihrem trainierten Prognosemodell: Onlinevorhersagen und Batchvorhersagen.

Eine Onlinevorhersage ist eine synchrone Anfrage. Verwenden Sie Onlinevorhersagen, wenn Sie Anfragen als Reaktion auf Anwendungseingaben oder in Situationen stellen, in denen eine zeitnahe Inferenz erforderlich ist.

Eine Batch-Vorhersageanfrage ist eine asynchrone Anfrage. Verwenden Sie Batchvorhersagen, wenn Sie nicht sofort eine Antwort benötigen und akkumulierte Daten in einer einzigen Anfrage verarbeiten möchten.

Auf dieser Seite erfahren Sie, wie Sie zukünftige Werte mithilfe von Onlinevorhersagen projizieren. Informationen zum Projizieren von Werten mit Batchvorhersagen finden Sie unter Batch-Vorhersagen für ein Prognosemodell abrufen.

Sie müssen Ihr Modell auf einem Endpunkt bereitstellen, bevor Sie es für Vorhersagen verwenden können. Ein Endpunkt ist eine Reihe physischer Ressourcen.

Sie können eine Erklärung anstelle einer Vorhersage anfordern. Die Werte der lokalen Featurewichtigkeit der Erläuterung geben an, wie viel jedes Feature zum Vorhersageergebnis beigetragen hat. Eine konzeptionelle Übersicht finden Sie unter Feature-Attributionen für Prognosen.

Weitere Informationen zu den Preisen für Onlinevorhersagen finden Sie unter Preise für tabellarische Workflows.

Hinweise

Bevor Sie eine Anfrage für eine Onlinevorhersage stellen können, müssen Sie zuerst ein Modell trainieren.

Endpunkt erstellen oder auswählen

Verwenden Sie die Funktion aiplatform.Endpoint.create(), um einen Endpunkt zu erstellen. Wenn Sie bereits einen Endpunkt haben, wählen Sie ihn mit der Funktion aiplatform.Endpoint() aus.

Der folgende Code enthält ein Beispiel:

# Import required modules
from google.cloud import aiplatform
from google.cloud.aiplatform import models

PROJECT_ID = "PROJECT_ID"
REGION = "REGION"

# Initialize the Vertex SDK for Python for your project.
aiplatform.init(project=PROJECT_ID, location=REGION)
endpoint = aiplatform.Endpoint.create(display_name='ENDPOINT_NAME')

Ersetzen Sie Folgendes:

  • PROJECT_ID: Ihre Projekt-ID.
  • REGION: Die Region, in der Sie Vertex AI verwenden.
  • ENDPOINT_NAME: Anzeigename für den Endpunkt.

Trainiertes Modell auswählen

Verwenden Sie die Funktion aiplatform.Model(), um ein trainiertes Modell auszuwählen:

# Create reference to the model trained ahead of time.
model_obj = models.Model("TRAINED_MODEL_PATH")

Ersetzen Sie Folgendes:

  • TRAINED_MODEL_PATH: zum Beispiel projects/PROJECT_ID/locations/REGION/models/[TRAINED_MODEL_ID]

Modell für den Endpunkt bereitstellen

Verwenden Sie die Funktion deploy(), um das Modell für den Endpunkt bereitzustellen. Der folgende Code enthält ein Beispiel:

deployed_model = endpoint.deploy(
    model_obj,
    machine_type='MACHINE_TYPE',
    traffic_percentage=100,
    min_replica_count='MIN_REPLICA_COUNT',
    max_replica_count='MAX_REPLICA_COUNT',
    sync=True,
    deployed_model_display_name='DEPLOYED_MODEL_NAME',
)

Ersetzen Sie Folgendes:

  • MACHINE_TYPE: zum Beispiel n1-standard-8. Weitere Informationen zu Maschinentypen.
  • MIN_REPLICA_COUNT: Die minimale Anzahl von Knoten für diese Bereitstellung. Die Knotenzahl kann je nach der Vorhersagelast erhöht oder verringert werden, bis zur maximalen Anzahl von Knoten und niemals auf weniger als diese Anzahl von Knoten. Dieser Wert muss größer oder gleich 1 sein. Wenn die Variable min_replica_count nicht festgelegt ist, wird der Wert standardmäßig auf 1 gesetzt.
  • MAX_REPLICA_COUNT: Die maximale Anzahl von Knoten für diese Bereitstellung. Die Knotenzahl kann je nach der Vorhersagelast erhöht oder verringert werden, bis zu dieser Anzahl von Knoten und niemals auf weniger als die minimale Anzahl von Knoten. Wenn Sie die Variable max_replica_count nicht festlegen, wird die maximale Anzahl von Knoten auf den Wert von min_replica_count festgelegt.
  • DEPLOYED_MODEL_NAME: Ein Name für DeployedModel. Sie können auch den Anzeigenamen von Model für DeployedModel verwenden.

Die Bereitstellung des Modells kann etwa zehn Minuten dauern.

Onlinevorhersagen abrufen

Verwenden Sie zum Abrufen von Vorhersagen die Funktion predict() und geben Sie eine oder mehrere Eingabeinstanzen an. Der folgende Code zeigt ein Beispiel:

predictions = endpoint.predict(instances=[{...}, {...}])

Jede Eingabeinstanz ist ein Python-Wörterbuch mit demselben Schema, mit dem das Modell trainiert wurde. Sie muss ein Schlüssel/Wert-Paar verfügbar bei Prognose enthalten, das der Zeitspalte entspricht, und ein Schlüssel/Wert-Paar nicht verfügbar bei Prognose, das die Verlaufsdaten der Zielvorhersagespalte enthält. Vertex AI erwartet, dass jede Eingabeinstanz zu einer einzelnen Zeitachse gehört. Die Reihenfolge der Schlüssel/Wert-Paare in der Instanz ist nicht wichtig.

Die Eingabeinstanz unterliegt den folgenden Einschränkungen:

  • Die Schlüssel/Wert-Paare für bei der Prognose verfügbar müssen alle die gleiche Anzahl an Datenpunkten haben.
  • Die Schlüssel/Wert-Paare für nicht bei der Prognose verfügbar müssen alle die gleiche Anzahl an Datenpunkten haben.
  • Die Schlüssel/Wert-Paare für bei Prognose verfügbar müssen mindestens so viele Datenpunkte haben wie Schlüssel/Wert-Paare für nicht verfügbar bei Prognose.

Weitere Informationen zu den in der Prognose verwendeten Spaltentypen finden Sie unter Featuretyp und Verfügbarkeit bei der Prognose.

Der folgende Code zeigt einen Satz von zwei Eingabeinstanzen. Die Spalte Category enthält Attributdaten. Die Spalte Timestamp enthält Daten, die bei der Prognose verfügbar sind. Drei Punkte sind Kontextdaten und zwei Punkte Horizont-Daten. Die Spalte Sales enthält Daten, die für die Prognose nicht verfügbar sind. Alle drei Punkte sind Kontextdaten. Informationen zur Verwendung von Kontext und Horizont bei der Prognose finden Sie unter Prognosezeitraum, Kontextfenster und Prognosefenster.

instances=[
  {
    # Attribute
    "Category": "Electronics",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [490.50, 325.25, 647.00],
  },
  {
    # Attribute
    "Category": "Food",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [190.50, 395.25, 47.00],
  }
])

Für jede Instanz antwortet Vertex AI mit zwei Vorhersagen für Sales, die den beiden Zeitstempeln Horizont („2023-08-06“ und „2023-08-07“) entsprechen.

Für eine optimale Leistung müssen die Anzahl der Kontext-Datenpunkte und die Anzahl der Horizont-Datenpunkte in jeder Eingabeinstanz mit der Kontext- und Horizontlänge übereinstimmen, mit dem das Modell trainiert wurde. Wenn es eine Abweichung gibt, füllt oder kürzt Vertex AI die Instanz, um sie an die Größe des Modells anzupassen.

Wenn die Anzahl der Kontext-Datenpunkte in Ihrer Eingabeinstanz kleiner oder größer ist als die Anzahl der Kontext-Datenpunkte, die für das Modelltraining verwendet werden, muss die Anzahl der Punkte für alle bei der Prognose verfügbaren Schlüssel/Wert-Paare und alle bei der Prognose nicht verfügbaren Schlüssel/Wert-Paare gleich sein.

Nehmen wir als Beispiel ein Modell an, das mit vier Tagen Kontext-Daten und zwei Tagen mit Horizont-Daten trainiert wurde. Sie können eine Vorhersageanfrage mit Kontext-Daten von nur drei Tagen stellen. In diesem Fall enthalten die nicht bei Prognosen verfügbaren Schlüssel/Wert-Paare drei Werte. Die Schlüssel/Wert-Paare für bei Prognose verfügbar müssen fünf Werte enthalten.

Ausgabe der Onlinevorhersage

Vertex AI stellt die Ausgabe der Onlinevorhersage im Feld value bereit:

{
  'value': [...]
}

Die Länge der Vorhersageantwort hängt vom Horizont ab, der beim Modelltraining verwendet wird, und vom Horizont der Eingabeinstanz. Die Länge der Vorhersageantwort ist der kleinste dieser beiden Werte.

Betrachten Sie hierzu folgende Beispiele:

  • Sie trainieren ein Modell mit context = 15 und horizon = 50. Ihre Eingabeinstanz hat context = 15 und horizon = 20. Die Vorhersageantwort hat eine Länge von 20.
  • Sie trainieren ein Modell mit context = 15 und horizon = 50. Ihre Eingabeinstanz hat context = 15 und horizon = 100. Die Vorhersageantwort hat eine Länge von 50.

Ausgabe der Onlinevorhersage für TFT-Modelle

Bei Modellen, die mit dem Temporal Fusion Transformer (TFT) trainiert wurden, bietet Vertex AI neben den Vorhersagen im Feld value auch die TFT-Interpretierbarkeit tft_feature_importance an:

{
  "tft_feature_importance": {
    "attribute_weights": [...],
    "attribute_columns": [...],
    "context_columns": [...],
    "context_weights": [...],
    "horizon_weights": [...],
    "horizon_columns": [...]
  },
  "value": [...]
}
  • attribute_columns: Prognosefunktionen, die zeitunabhängig sind.
  • attribute_weights: Die mit jeder der attribute_columns verknüpften Gewichtungen.
  • context_columns: Prognosefeatures, deren Kontextfensterwerte als Eingaben für den LSTM-Encoder (TFT Long Short-Term Memory) dienen.
  • context_weights: Die Featurewichtigkeit, die mit jedem der context_columns für die vorhergesagte Instanz verknüpft ist.
  • horizon_columns: Prognosefeatures, deren Prognosehorizont-Werte als Eingaben für den TFT-Long-Term-Memory-Decoder (LSTM)-Decoder dienen.
  • horizon_weights: Die Featurewichtigkeit, die mit jedem der horizon_columns für die vorhergesagte Instanz verknüpft ist.

Ausgabe der Onlinevorhersage für Modelle mit Quantilverlustoptimierung

Für Modelle, die für den Quantilverlust optimiert sind, bietet Vertex AI die folgende Ausgabe der Onlinevorhersage:

{
  "value": [...],
  "quantile_values": [...],
  "quantile_predictions": [...]
}
  • value: Wenn Ihre Gruppe von Quantilen den Median enthält, ist value der Vorhersagewert am Median. Andernfalls ist value der Vorhersagewert im niedrigsten Quantil der Gruppe. Wenn Ihr Quantilsatz beispielsweise [0.1, 0.5, 0.9] ist, ist value die Vorhersage für das Quantil 0.5. Wenn der Quantilsatz [0.1, 0.9] lautet, ist value die Vorhersage für das Quantil 0.1.
  • quantile_values: Die Werte der Quantile, die während des Modelltrainings festgelegt werden.
  • quantile_predictions: Die Vorhersagewerte, die quantile_values zugeordnet sind.

Betrachten Sie beispielsweise ein Modell, in dem die Zielspalte den Verkaufswert enthält. Quantilwerte sind als [0.1, 0.5, 0.9] definiert. Vertex AI gibt die folgenden Quantilvorhersagen zurück: [4484, 5615, 6853]. Hier enthält der Quantilsatz den Medianwert, sodass value die Vorhersage für das Quantil 0.5 (5615) ist. Die Quantilvorhersagen können so interpretiert werden:

  • P(Verkaufswert < 4.484) = 10 %
  • P(Verkaufswert < 5.615) = 50 %
  • P(Verkaufswert < 6853) = 90 %

Ausgabe der Onlinevorhersage für Modelle mit probabilistischer Inferenz

Wenn Ihr Modell die probabilistische Inferenz verwendet, enthält das Feld value den Minimierer des Optimierungsziels. Wenn Ihr Optimierungsziel beispielsweise minimize-rmse ist, enthält das Feld value den Mittelwert. Ist es minimize-mae, enthält das Feld value den Medianwert.

Wenn Ihr Modell die probabilistische Inferenz mit Quantilen verwendet, stellt Vertex AI zusätzlich zum Minimierer des Optimierungsziels Quantilwerte und Vorhersagen bereit. Quantilwerte werden während des Modelltrainings festgelegt. Quantilvorhersagen sind die Vorhersagewerte, die den Quantilwerten zugeordnet sind.

Online-Erläuterungen abrufen

Verwenden Sie zum Abrufen von Erläuterungen die Funktion explain() und geben Sie eine oder mehrere Eingabeinstanzen an. Der folgende Code zeigt ein Beispiel:

explanations = endpoint.explain(instances=[{...}, {...}])

Das Format der Eingabeinstanzen ist für Onlinevorhersagen und Onlineerläuterungen identisch. Weitere Informationen finden Sie unter Onlinevorhersagen abrufen.

Eine konzeptionelle Übersicht über Feature-Attributionen finden Sie unter Feature-Attributionen für Prognosen.

Ausgabe der Onlineerläuterung

Der folgende Code zeigt, wie Sie die Erläuterungsergebnisse ausgeben können:

# Import required modules
import json
from google.protobuf import json_format

def explanation_to_dict(explanation):
  """Converts the explanation proto to a human-friendly json."""
  return json.loads(json_format.MessageToJson(explanation._pb))

for response in explanations.explanations:
  print(explanation_to_dict(response))

Die Erläuterungsergebnisse haben das folgende Format:

{
  "attributions": [
    {
      "baselineOutputValue": 1.4194682836532593,
      "instanceOutputValue": 2.152980089187622,
      "featureAttributions": {
        ...
        "store_id": [
          0.007947325706481934
        ],
        ...
        "dept_id": [
          5.960464477539062e-08
        ],
        "item_id": [
          0.1100526452064514
        ],
        "date": [
          0.8525647521018982
        ],
        ...
        "sales": [
          0.0
        ]
      },
      "outputIndex": [
        2
      ],
      "approximationError": 0.01433318599207033,
      "outputName": "value"
    },
    ...
  ]
}

Die Anzahl der attributions-Elemente hängt vom Horizont ab, der beim Modelltraining verwendet wird, und vom Horizont der Eingabeinstanz. Die Anzahl der Elemente ist der kleinste dieser beiden Werte.

Das Feld featureAttributions in einem attributions-Element enthält einen Wert für jede Spalte im Eingabe-Dataset. Vertex AI generiert Erläuterungen für alle Arten von Features: Attribute, bei Prognose verfügbar und bei Prognose nicht verfügbar. Weitere Informationen zu den Feldern eines attributions-Elements finden Sie unter Attribution.

Endpunkt löschen

Verwenden Sie die Funktionen undeploy_all() und delete(), um den Endpunkt zu löschen. Der folgende Code zeigt ein Beispiel:

endpoint.undeploy_all()
endpoint.delete()

Nächste Schritte