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 dimin_replica_count
. - DEPLOYED_MODEL_NAME: un nome per il
DeployedModel
. Puoi utilizzare il nome visualizzato delModel
anche per ilDeployedModel
.
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
ehorizon
=50
. L'istanza di input hacontext
=15
ehorizon
=20
. La risposta della previsione ha una lunghezza di20
. - Addestra un modello con
context
=15
ehorizon
=50
. L'istanza di input hacontext
=15
ehorizon
=100
. La risposta della previsione ha una lunghezza di50
.
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 deiattribute_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 deicontext_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 deihorizon_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 quantile0.5
. Se il tuo insieme di quantili è[0.1, 0.9]
,value
è la previsione per il quantile0.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
- Scopri di più sui prezzi per le previsioni online.