Ottenere previsioni online per un modello di previsione

Vertex AI offre due opzioni per prevedere i valori futuri utilizzando un 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 è necessaria 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 utilizzando un'unica richiesta.

Questa pagina mostra come proiettare valori futuri utilizzando le previsioni online. Per informazioni su come proiettare valori utilizzando previsioni batch, consulta Generare previsioni batch per un modello di previsione.

Devi eseguire il deployment del modello su 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 il contributo di ogni funzionalità al risultato della previsione. Per una panoramica concettuale, consulta Attribuzioni delle funzionalità per le previsioni.

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

Prima di iniziare

Prima di poter effettuare una richiesta di previsione online, devi 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 codice seguente 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 dell'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 codice seguente 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 macchina.
  • MIN_REPLICA_COUNT: il numero minimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base alle esigenze del 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 alle esigenze del carico della previsione, fino a raggiungere 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 è impostato sul valore di min_replica_count.
  • DEPLOYED_MODEL_NAME: un nome per DeployedModel. Puoi utilizzare il nome visualizzato di Model anche per DeployedModel.

Il deployment del modello potrebbe richiedere circa dieci minuti.

Ricevi previsioni online

Per ottenere previsioni, utilizza la funzione predict() e fornisci una o più istanze di input. Il codice seguente 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 al momento della previsione corrispondente alla colonna dell'ora e una coppia chiave-valore non disponibile al momento della previsione contenente i valori storici della colonna della previsione scelta come target. Vertex AI prevede 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 disponibili al momento della previsione devono avere tutte lo stesso numero di punti dati.
  • Le coppie chiave-valore Non disponibile al momento della previsione devono avere tutte lo stesso numero di punti dati.
  • Le coppie chiave-valore disponibile al momento della previsione devono avere un numero di punti dati pari almeno a quello delle coppie chiave-valore non disponibile nella previsione.

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

Il codice seguente mostra un insieme di due istanze di input. La colonna Category contiene 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 orizzonti. La colonna Sales contiene dati che non sono disponibili al momento della previsione. Tutti e tre i punti sono dati di contesto. Per informazioni su come contesto e orizzonte vengono utilizzati nelle previsioni, 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, corrispondenti ai due timestamp horizon ("2023-08-06" e "2023-08-07").

Per prestazioni ottimali, il numero di punti dati contesto e il numero di punti dati orizzonte in ogni istanza di input devono corrispondere al contesto e alle lunghezze dell'orizzonte con cui il modello è stato addestrato. In caso di mancata corrispondenza, Vertex AI inserisce o tronca l'istanza in base alle dimensioni del modello.

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

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

Output della previsione online

Vertex AI fornisce un'output di previsione online nel campo value:

{
  'value': [...]
}

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

Considera i seguenti esempi:

  • Addestra un modello con context = 15 e horizon = 50. L'istanza di input ha context = 15 e horizon = 20. La risposta alla 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 alla previsione ha una lunghezza di 50.

Output di previsione online per modelli TFT

Per i modelli addestrati con il trasformatore Temporal Fusion (TFT), Vertex AI fornisce l'interpretabilità TFT tft_feature_importance oltre alle previsioni nel campo value:

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

Output di previsione online per modelli ottimizzati per la perdita di quantili

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

{
  "value": [...],
  "quantile_values": [...],
  "quantile_predictions": [...]
}
  • value: se il tuo insieme di quantili include la mediana, value è il valore di previsione alla mediana. In caso contrario, value è il valore della previsione al quantile più basso nel set. Ad esempio, se il tuo 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 dei quantili, che vengono impostati durante l'addestramento del modello.
  • quantile_predictions: i valori di previsione associati a quantile_values.

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

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

Output di previsione online per modelli con inferenza probabilistica

Se il modello utilizza l'inferenza probabilistica, il campo value contiene il minimizzatore dell'obiettivo di ottimizzazione. Ad esempio, se l'obiettivo di 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 i quantili, Vertex AI fornisce valori e previsioni per i quantili oltre a ridurre al minimo l'obiettivo di ottimizzazione. I valori quantili vengono impostati durante l'addestramento del modello. Le previsioni quantili sono i valori di previsione associati ai valori dei quantili.

Ricevere spiegazioni online

Per ottenere le spiegazioni, utilizza la funzione explain() e fornisci una o più istanze di input. Il codice seguente 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 l'articolo Ottenere previsioni online.

Per una panoramica concettuale delle attribuzioni delle caratteristiche, consulta Attribuzioni delle funzionalità per la previsione.

Output della spiegazione online

Il codice seguente mostra come 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 da quello dell'istanza di input. Il numero di elementi è il minimo di questi due valori.

Il campo featureAttributions in un elemento attributions contiene un valore per ciascuna delle colonne nel set di dati di input. Vertex AI genera spiegazioni per tutti i tipi di caratteristiche: attributo, disponibile al momento della previsione e non disponibile al momento della previsione. Per scoprire di più sui campi di un elemento attributions, consulta la sezione Attribuzione.

Elimina l'endpoint

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

endpoint.undeploy_all()
endpoint.delete()

Passaggi successivi