Generare previsioni online per un modello di previsione

Vertex AI offre due opzioni per proiettare i valori futuri utilizzando il modello di previsione addestrato: previsioni online e previsioni batch.

Una previsione online è una richiesta sincrona. Utilizza le previsioni online quando effettui richieste in risposta all'input dell'applicazione o in altre situazioni in cui hai bisogno di un'inferenza tempestiva.

Una richiesta di previsione batch è una richiesta asincrona. Utilizza le previsioni batch quando non hai bisogno di una risposta immediata e vuoi elaborare i dati accumulati tramite una singola richiesta.

Questa pagina mostra come proiettare i valori futuri utilizzando le previsioni online. Per imparare a proiettare i valori utilizzando le previsioni batch, consulta Ottenere previsioni batch per un modello di previsione.

Devi eseguire il deployment del modello in un endpoint prima di poterlo utilizzare per le previsioni. Un endpoint è un insieme di risorse fisiche.

Puoi richiedere una spiegazione anziché una previsione. I valori di importanza delle caratteristiche locali della spiegazione indicano in che misura ciascuna caratteristica ha contribuito al risultato della previsione. Per una panoramica concettuale, consulta Attribuzioni delle caratteristiche per le previsioni.

Per informazioni sui prezzi delle previsioni online, consulta Prezzi per i flussi di lavoro tabulari.

Prima di iniziare

Prima di poter effettuare una richiesta di previsione online, devi prima addestrare un modello.

Crea o seleziona un endpoint

Utilizza la funzione aiplatform.Endpoint.create() per creare un endpoint. Se hai già un endpoint, utilizza la funzione aiplatform.Endpoint() per selezionarlo.

Il seguente codice fornisce un esempio:

# 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')

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo progetto.
  • REGION: la regione in cui utilizzi Vertex AI.
  • ENDPOINT_NAME: nome visualizzato per l'endpoint.

Seleziona un modello addestrato

Utilizza la funzione aiplatform.Model() per selezionare un modello addestrato:

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

Sostituisci quanto segue:

  • TRAINED_MODEL_PATH: ad esempio, projects/PROJECT_ID/locations/REGION/models/[TRAINED_MODEL_ID]

Esegui il deployment del modello nell'endpoint

Utilizza la funzione deploy() per eseguire il deployment del modello nell'endpoint. Il seguente codice fornisce un esempio:

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',
)

Sostituisci quanto segue:

  • MACHINE_TYPE: ad esempio, n1-standard-8. Scopri di più sui tipi di macchine.
  • MIN_REPLICA_COUNT: il numero minimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base al carico della previsione fino al numero massimo di nodi e mai inferiore a questo numero di nodi. Questo valore deve essere maggiore o uguale a 1. Se la variabile min_replica_count non è impostata, il valore predefinito è 1.
  • MAX_REPLICA_COUNT: il numero massimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base al carico della previsione fino a questo numero di nodi e mai inferiore al numero minimo di nodi. Se non imposti la variabile max_replica_count, il numero massimo di nodi viene impostato sul valore di min_replica_count.
  • DEPLOYED_MODEL_NAME: un nome per il DeployedModel. Puoi utilizzare il nome visualizzato del Model anche per il DeployedModel.

Il deployment del modello potrebbe richiedere circa dieci minuti.

Ricevere previsioni online

Per ottenere le previsioni, utilizza la funzione predict() e fornisci una o più istanze di input. Il seguente codice mostra un esempio:

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

Ogni istanza di input è un dizionario Python con lo stesso schema su cui è stato addestrato il modello. Deve contenere una coppia chiave-valore disponibile per la previsione che corrisponde alla colonna di tempo e una coppia chiave-valore non disponibile per la previsione che contiene i valori storici della colonna di previsione scelta come target. Vertex AI si aspetta che ogni istanza di input appartenga a una singola serie temporale. L'ordine delle coppie chiave-valore nell'istanza non è importante.

L'istanza di input è soggetta ai seguenti vincoli:

  • Le coppie chiave-valore disponibile al momento della previsione devono avere tutte lo stesso numero di punti dati.
  • Le coppie chiave-valore non disponibili per la previsione devono avere tutte lo stesso numero di punti dati.
  • Le coppie chiave-valore disponibili in base alla previsione devono avere almeno un numero di punti dati uguale a quello delle coppie chiave-valore non disponibili in base alla previsione.

Per scoprire di più sui tipi di colonne utilizzati nella previsione, consulta Tipo di funzionalità e disponibilità al momento della previsione.

Il seguente codice mostra un insieme di due istanze di input. La colonna Category contiene i dati degli attributi. La colonna Timestamp contiene i dati disponibili al momento della previsione. Tre punti sono dati di contesto e due punti sono dati di orizzonte. La colonna Sales contiene dati non disponibili al momento della previsione. Tutti e tre i punti sono dati di contesto. Per scoprire come vengono utilizzati il contesto e l'orizzonte nella previsione, consulta Orizzonte di previsione, finestra di contesto e finestra di previsione.

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],
  }
])

Per ogni istanza, Vertex AI risponde con due previsioni per Sales, corrispondente ai due timestamp orizzonte ("2023-08-06" e "2023-08-07").

Per un rendimento ottimale, il numero di punti dati contesto e il numero di punti dati orizzonte in ogni istanza di input devono corrispondere alle lunghezze del contesto e dell'orizzonte con cui è stato addestrato il modello. In caso di mancata corrispondenza, Vertex AI aggiunge o tronca l'istanza in modo che corrisponda alle dimensioni del modello.

Se il numero di punti dati contestuale nell'istanza di input è inferiore o superiore al numero di punti dati contestuale utilizzati per l'addestramento del modello, assicurati che questo numero di punti sia coerente in tutte le coppie chiave-valore disponibili per la previsione e in tutte le coppie chiave-valore non disponibili per la previsione.

Ad esempio, prendi in considerazione un modello addestrato con dati di contesto di quattro giorni e dati di orizzonte di due giorni. Puoi effettuare una richiesta di previsione con solo tre giorni di dati di contesto. In questo caso, le coppie chiave-valore unavailable at forecast contengono tre valori. Le coppie chiave-valore Disponibile al momento della previsione devono contenere cinque valori.

Output della previsione online

Vertex AI fornisce l'output della previsione online nel campo value:

{
  'value': [...]
}

La lunghezza della risposta di previsione dipende dall'orizzonte utilizzato nell'addestramento del modello e dall'orizzonte dell'istanza di input. La lunghezza della risposta della previsione è il più piccolo di questi due valori.

Considera gli esempi seguenti:

  • Addestra un modello con context = 15 e horizon = 50. L'istanza di input ha context = 15 e horizon = 20. La risposta della previsione ha una lunghezza di 20.
  • Addestra un modello con context = 15 e horizon = 50. L'istanza di input ha context = 15 e horizon = 100. La risposta della previsione ha una lunghezza di 50.

Output della previsione online per i modelli TFT

Per i modelli addestrati con Trasformatore di fusione temporale (TFT), Vertex AI fornisce l'interpretabilità TFT tft_feature_importance in aggiunta alle previsioni nel campo value:

{
  "tft_feature_importance": {
    "attribute_weights": [...],
    "attribute_columns": [...],
    "context_columns": [...],
    "context_weights": [...],
    "horizon_weights": [...],
    "horizon_columns": [...]
  },
  "value": [...]
}
  • attribute_columns: caratteristiche di previsione invariate nel tempo.
  • attribute_weights: i pesi associati a ciascuno dei attribute_columns.
  • context_columns: caratteristiche di previsione i cui valori della finestra di contesto vengono utilizzati come input per l'encoder TFT Long Short-Term Memory (LSTM).
  • context_weights: i pesi dell'importanza delle caratteristiche associati a ciascuno dei context_columns per l'istanza prevista.
  • horizon_columns: caratteristiche di previsione i cui valori di orizzonte di previsione fungono da input per il decodificatore LSTM (Long Short-Term Memory) di TFT.
  • horizon_weights: i pesi dell'importanza delle caratteristiche associati a ciascuno dei horizon_columns per l'istanza prevista.

Output della previsione online per i modelli ottimizzati per la perdita quantile

Per i modelli ottimizzati per la perdita quantile, Vertex AI fornisce il seguente output di previsione online:

{
  "value": [...],
  "quantile_values": [...],
  "quantile_predictions": [...]
}
  • value: se l'insieme di quantili include la mediana, value è il valore di previsione alla mediana. In caso contrario, value è il valore di previsione al quantile più basso nell'insieme. Ad esempio, se l'insieme di quantili è [0.1, 0.5, 0.9], value è la previsione per il quantile 0.5. Se il tuo insieme di quantili è [0.1, 0.9], value è la previsione per il quantile 0.1.
  • quantile_values: i valori delle quantili, che vengono impostati durante l'addestramento del modello.
  • quantile_predictions: i valori di previsione associati a quantile_values.

Prendi ad esempio un modello in cui la colonna di destinazione è il valore delle vendite. I valori del quantile sono definiti come [0.1, 0.5, 0.9]. Vertex AI restituisce le seguenti previsioni dei quantili: [4484, 5615, 6853]. Qui, l'insieme di quantili include la mediana, quindi value è la previsione per il quantile 0.5 (5615). Le previsioni dei quantili possono essere interpretate come segue:

  • P(valore vendite < 4484) = 10%
  • P(valore vendite < 5615) = 50%
  • P(valore vendite < 6853) = 90%

Output della previsione online per i modelli con inferenza probabilistica

Se il modello utilizza l'inferenza probabilistica, il campo value contiene il minimizzatore dell'obiettivo di ottimizzazione. Ad esempio, se lo scopo dell'ottimizzazione è minimize-rmse, il campo value contiene il valore medio. Se è minimize-mae, il campo value contiene il valore mediano.

Se il modello utilizza l'inferenza probabilistica con quantili, Vertex AI fornisce valori e previsioni dei quantili oltre al minimo dell'obiettivo di ottimizzazione. I valori del quantile vengono impostati durante l'addestramento del modello. Le predizioni quantili sono i valori di previsione associati ai valori quantili.

Ricevere spiegazioni online

Per ottenere spiegazioni, utilizza la funzione explain() e fornisci una o più istanze di input. Il seguente codice mostra un esempio:

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

Il formato delle istanze di input è lo stesso per le previsioni online e le spiegazioni online. Per scoprire di più, consulta Ottenere previsioni online.

Per una panoramica concettuale delle attribuzioni delle caratteristiche, consulta Attribuzioni delle caratteristiche per le previsioni.

Output della spiegazione online

Il seguente codice mostra come puoi visualizzare i risultati della spiegazione:

# 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))

I risultati della spiegazione hanno il seguente formato:

{
  "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"
    },
    ...
  ]
}

Il numero di elementi attributions dipende dall'orizzonte utilizzato nell'addestramento del modello e dall'orizzonte dell'istanza di input. Il numero di elementi è il meno grande di questi due valori.

Il campo featureAttributions in un elemento attributions contiene un valore per ogni colonna del set di dati di input. Vertex AI genera spiegazioni per tutti i tipi di funzionalità: attributo, disponibile per la previsione e non disponibile per la previsione. Per scoprire di più sui campi di un elemento attributions, consulta Attribuzione.

Elimina l'endpoint

Utilizza le funzioni undeploy_all() e delete() per eliminare l'endpoint. Il seguente codice mostra un esempio:

endpoint.undeploy_all()
endpoint.delete()

Passaggi successivi