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. A per scoprire come proiettare i valori utilizzando le previsioni batch, consulta Ottieni 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. Le impostazioni locali I valori di importanza delle caratteristiche indicano in che misura ciascuna caratteristica ha contribuito al risultato della previsione. Per una panoramica concettuale, vedi Attribuzioni delle caratteristiche per la previsione.

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

Utilizzare 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 progetto.
  • REGION: la regione in cui stai utilizzando 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

Utilizzare la funzione deploy() 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: 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 meno di 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 conteggio dei nodi può essere aumentato o diminuito in base alla previsione fino a questo numero di nodi e mai meno del numero minimo di nodi. Se non imposti la variabile max_replica_count, il valore massimo di nodi è impostato sul valore di min_replica_count.
  • DEPLOYED_MODEL_NAME: un nome per DeployedModel. Puoi utilizzare il nome visualizzato del Model anche per il DeployedModel.

Il deployment del modello potrebbe richiedere circa dieci minuti.

Ottenere 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 al momento della previsione che corrisponde alla colonna data e a una coppia chiave-valore non disponibile al momento della previsione che contiene i valori storici della colonna di 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 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 ulteriori informazioni sui tipi di colonne utilizzati per le previsioni, 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 disponibili al momento della previsione. Tre punti sono i dati di contesto e due punti sono dati dell'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 di contesto e il numero di punti dati orizzonte in ogni istanza di input deve corrispondere al 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, considera un modello addestrato con quattro giorni di contesto e due giorni di dati orizzontali. Puoi effettuare una richiesta di previsione con solo tre giorni di dati di contesto. In questo caso, il valore non disponibile al momento della previsione le coppie chiave-valore contengono tre valori. La coppia 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 della previsione dipende dall'orizzonte utilizzato nel modello e sull'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. Il tuo input l'istanza ha context = 15 e horizon = 100. La risposta della previsione ha una lunghezza di 50.

Output previsione online per modelli TFT

Per i modelli addestrati con Trasformatore di fusione temporale (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 invariato nel tempo.
  • attribute_weights: i pesi associati a ciascuno degli elementi 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 di importanza delle caratteristiche associati a ciascuno dei context_columns per l'istanza prevista.
  • horizon_columns: funzionalità di previsione la cui orizzonte di previsione vengono utilizzati come input per il decoder TFT Long-Term Memory (LSTM).
  • 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 il valore mediana, value è il valore della previsione nel punto mediano. 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 le tue insieme di quantili è [0.1, 0.9], value è il 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 in considerazione, ad esempio, un modello in cui la colonna target rappresenta il valore delle vendite. I valori del quantile sono definiti come [0.1, 0.5, 0.9]. Vertex AI restituisce seguenti previsioni dei quantili: [4484, 5615, 6853]. Qui, l'insieme dei quantili include la mediana, pertanto 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 delle vendite < 6853) = 90%

Output della 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 la tua ottimizzazione l'obiettivo è minimize-rmse, il campo value contiene il valore medio. Se è minimize-mae, il campo value contiene la mediana valore.

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

Ricevi 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 saperne di più, consulta la sezione Ricevere 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 nel modello e sull'orizzonte dell'istanza di input. Il numero di elementi è il meno elevato 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

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

endpoint.undeploy_all()
endpoint.delete()

Passaggi successivi