Prophet è un modello di previsione gestito da Meta. Per i dettagli dell'algoritmo, consulta il documento Prophet e la documentazione per saperne di più sulla libreria.
Come ARIMA_PLUS di BigQuery ML, Prophet tenta di scomporre ogni serie temporale in tendenze, stagioni e festività, producendo una previsione utilizzando l'aggregazione delle inferenze di questi modelli. Una differenza importante, tuttavia, è che BQML ARIMA+ utilizza ARIMA per modellare la componente di tendenza, mentre Prophet tenta di adattare una curva utilizzando un modello logistico o lineare a tratti.
Google Cloud offre una pipeline per l'addestramento di un modello Prophet e una pipeline per ottenere inferenze batch da un modello Prophet. Entrambe le pipeline sono istanze di Gemini Enterprise Agent Platform Pipelines di Google Cloud Pipeline Components (GCPC).
L'integrazione di Prophet con Agent Platform ti consente di:
- Utilizza le strategie di suddivisione dei dati e di definizione delle finestre di Agent Platform.
- Leggi i dati dalle tabelle BigQuery o dai file CSV archiviati in Cloud Storage. Agent Platform prevede che ogni riga abbia lo stesso formato di Agent Platform Forecasting.
Sebbene Prophet sia un modello multivariato, Agent Platform supporta solo una versione univariata.
Per scoprire di più sui service account utilizzati da questo flusso di lavoro, consulta Service account per i flussi di lavoro tabulari.
API Workflow
Questo flusso di lavoro utilizza le seguenti API:
- Agent Platform
- Dataflow
- BigQuery
- Cloud Storage
Addestra un modello con Prophet
Prophet è progettato per una singola serie temporale. Agent Platform aggrega i dati per ID serie temporale e addestra un modello Prophet per ogni serie temporale. La pipeline di addestramento del modello esegue l'ottimizzazione degli iperparametri utilizzando la ricerca a griglia e la logica di backtesting integrata di Prophet.
Per supportare più serie temporali, la pipeline utilizza un job di addestramento personalizzato e Dataflow di Agent Platform per addestrare più modelli Prophet in parallelo. Nel complesso, il numero di modelli addestrati è il prodotto del numero di serie temporali e del numero di prove di ottimizzazione degli iperparametri.
Il seguente codice campione mostra come eseguire una pipeline di addestramento del modello Prophet:
job = aiplatform.PipelineJob(
...
template_path=train_job_spec_path,
parameter_values=train_parameter_values,
...
)
job.run(service_account=SERVICE_ACCOUNT)
Il parametro facoltativo service_account in job.run() ti consente di impostare il account di servizio del servizio Gemini Enterprise Agent Platform Pipelines su un account a tua scelta.
La pipeline e i valori dei parametri sono definiti dalla seguente funzione.
(
train_job_spec_path,
train_parameter_values,
) = utils.get_prophet_train_pipeline_and_parameters(
...
)
Di seguito è riportato un sottoinsieme dei parametri get_prophet_train_pipeline_and_parameters:
| Nome parametro | Tipo | Definizione |
|---|---|---|
project |
Stringa | L'ID progetto. |
location |
Stringa | La tua regione. |
root_dir |
Stringa | Il percorso Cloud Storage in cui archiviare l'output. |
target_column |
Stringa | La colonna (valore) che vuoi che questo modello preveda. |
time_column |
Stringa | La colonna del tempo. Devi specificare una colonna temporale e deve avere un valore per ogni riga. La colonna Ora indica l'ora in cui è stata effettuata una determinata osservazione. |
time_series_identifier_column |
Stringa | La colonna identificatore serie temporale. Devi specificare una colonna identificatore serie temporale e deve avere un valore per ogni riga. I dati di addestramento per la previsione di solito includono più serie temporali e l'identificatore indica ad Agent Platform a quale serie temporale appartiene una determinata osservazione nei dati di addestramento. Tutte le righe di una determinata serie temporale hanno lo stesso valore nella colonna dell'identificatore della serie temporale. Alcuni identificatori di serie temporali comuni potrebbero essere l'ID prodotto, un ID negozio o una regione. È possibile addestrare un modello di previsione su una singola serie temporale, con un valore identico per tutte le righe nella colonna dell'identificatore della serie temporale. Tuttavia, Agent Platform è più adatta ai dati di addestramento che contengono due o più serie temporali. Per ottenere risultati ottimali, utilizza almeno 10 serie temporali per ogni colonna che utilizzi per addestrare il modello. |
data_granularity_unit |
Stringa | L'unità da utilizzare per la granularità dei dati di addestramento e per l'orizzonte di previsione e la finestra contestuale. Può essere minute, hour, day, week, month o year. Scopri come scegliere la granularità dei dati. |
data_source_csv_filenames |
Stringa | Un URI per un file CSV archiviato in Cloud Storage. |
data_source_bigquery_table_path |
Stringa | Un URI per una tabella BigQuery. |
forecast_horizon |
Numero intero | L'orizzonte di previsione determina per quanto lontano nel futuro il modello prevede il valore target per ogni riga di dati di inferenza. L'orizzonte di previsione è specificato in unità di granularità dei dati. Scopri di più. |
optimization_objective |
Stringa | Obiettivo di ottimizzazione per il modello. Scopri di più. |
max_num_trials |
Numero intero | Numero massimo di prove di ottimizzazione da eseguire per serie temporale. |
Parametri Dataflow
Di seguito è riportato un sottoinsieme di parametri get_prophet_train_pipeline_and_parameters per la personalizzazione di Dataflow:
| Nome parametro | Tipo | Definizione |
|---|---|---|
trainer_dataflow_machine_type |
Stringa | Il tipo di macchina Dataflow da utilizzare per l'addestramento. |
trainer_dataflow_max_num_workers |
Numero intero | Il numero massimo di worker Dataflow da utilizzare per l'addestramento. |
evaluation_dataflow_machine_type |
Stringa | Il tipo di macchina Dataflow da utilizzare per la valutazione. |
evaluation_dataflow_max_num_workers |
Numero intero | Il numero massimo di worker Dataflow da utilizzare per la valutazione. |
dataflow_service_account |
Stringa | Account di servizio personalizzato per eseguire i job Dataflow. Puoi configurare il job Dataflow in modo che utilizzi IP privati e una subnet VPC specifica. Questo parametro funge da override per il account di servizio worker Dataflow predefinito. |
Poiché i job di addestramento Prophet vengono eseguiti su Dataflow, si verifica un tempo di avvio iniziale di 5-7 minuti. Per ridurre l'ulteriore tempo di esecuzione, puoi fare lo scale up
o fare lo scale out. Ad esempio, per eseguire lo scale up, modifica il tipo di macchina da n1-standard-1 a e2-highcpu-8. Per fare lo scale out,
aumenta il numero di worker da 1 a 200.
Parametri di suddivisione dati
La pipeline di addestramento offre le seguenti opzioni per la suddivisione dei dati:
| Suddivisione dati | Descrizione | Parametri |
|---|---|---|
| Divisione predefinita | Agent Platform seleziona in modo casuale l'80% delle righe di dati per il set di addestramento, il 10% per il set di validazione e il 10% per il test set. Agent Platform utilizza la colonna Time (Ora) per determinare l'ordine cronologico delle righe di dati. | Nessuno |
| Suddivisione frazionaria | Agent Platform utilizza i valori che fornisci per partizionare i dati in set di addestramento, set di validazione e test set. Agent Platform utilizza la colonna Time (Ora) per determinare l'ordine cronologico delle righe di dati. |
|
| Divisione del timestamp | Agent Platform utilizza i valori training_fraction, validation_fraction e test_fraction per partizionare i dati nel set di addestramento, nel set di validazione e nel test set. Agent Platform utilizza la colonna timestamp_split_key per determinare l'ordine cronologico delle righe di dati. |
|
| Suddivisione manuale (predefinita) | Agent Platform suddivide i dati utilizzando i valori TRAIN, VALIDATE o TEST nella colonna predefined_split_key. |
|
Definisci i parametri di divisione dei dati in get_prophet_train_pipeline_and_parameters nel seguente modo:
| Nome parametro | Tipo | Definizione |
|---|---|---|
predefined_split_key |
Stringa | Il nome della colonna contenente i valori TRAIN, VALIDATE o TEST. Imposta questo valore se utilizzi una suddivisione manuale (predefinita). |
training_fraction |
Numero in virgola mobile | La percentuale di dati da assegnare al set di addestramento. Imposta questo valore se utilizzi una suddivisione delle frazioni o un timestamp. |
validation_fraction |
Numero in virgola mobile | La percentuale di dati da assegnare al set di validazione. Imposta questo valore se utilizzi una suddivisione delle frazioni o un timestamp. |
test_fraction |
Numero in virgola mobile | La percentuale di dati da assegnare al set di test. Imposta questo valore se utilizzi una suddivisione delle frazioni o un timestamp. |
timestamp_split_key |
Stringa | Il nome della colonna contenente i timestamp per la suddivisione dei dati. Imposta questo valore se utilizzi una suddivisione del timestamp. |
Parametri della finestra
Gemini Enterprise Agent Platform genera finestre di previsione dai dati di input utilizzando una strategia di finestra mobile. Se non imposti i parametri della finestra, Agent Platform utilizza
la strategia Conteggio con un valore massimo predefinito di 100,000,000. La pipeline di training
offre le seguenti strategie a finestra mobile:
| Strategia a finestra mobile | Descrizione | Parametri |
|---|---|---|
| Conteggio |
Il numero di finestre generate da Agent Platform non deve superare un massimo fornito dall'utente. Se il numero di righe nel set di dati di input è inferiore
al numero massimo di finestre, ogni riga viene utilizzata per generare una finestra.
In caso contrario, Agent Platform esegue un campionamento casuale per selezionare le righe.
Il valore predefinito per il numero massimo di finestre è 100,000,000.
Il numero massimo di finestre non può superare 100,000,000.
|
window_max_count |
| Intervallo con salto |
Agent Platform utilizza una riga di input ogni X per generare una finestra,
fino a un massimo di 100.000.000 di finestre. Questa opzione è utile per le inferenze stagionali o periodiche. Ad esempio, puoi limitare la previsione a un solo giorno della settimana impostando il valore della lunghezza passo su 7. Il valore può essere
compreso tra 1 e 1000.
|
window_stride_length |
| Colonna |
Puoi aggiungere una colonna ai dati di input in cui i valori sono
True o False. Agent Platform genera una finestra
per ogni riga di input in cui il valore della colonna è True. I valori di True e
False possono essere impostati in qualsiasi ordine, purché il conteggio totale delle righe di True
sia inferiore a 100,000,000. Sono preferibili i valori booleani, ma sono accettati anche i valori stringa. I valori delle stringhe non sono sensibili alle maiuscole.
|
window_column |
Definisci i parametri della finestra in get_prophet_train_pipeline_and_parameters nel seguente modo:
| Nome parametro | Tipo | Definizione |
|---|---|---|
window_column |
Stringa | Il nome della colonna con i valori True e False. |
window_stride_length |
Numero intero | Il valore della lunghezza passo. |
window_max_count |
Numero intero | Il numero massimo di finestre. |
Fare inferenze con Prophet
La pipeline di addestramento del modello per Prophet della piattaforma dell'agente crea un modello Prophet per ogni serie temporale nei dati. La pipeline di inferenza aggrega i dati di input per ID serie temporale e calcola le inferenze separatamente per ogni serie temporale. La pipeline disaggrega quindi i risultati dell'inferenza in modo che corrispondano al formato di Agent Platform Forecasting.
Il seguente codice campione mostra come eseguire una pipeline di inferenza Prophet:
job = aiplatform.PipelineJob(
...
template_path=prediction_job_spec_path,
parameter_values=prediction_parameter_values,
...
)
job.run(...)
La pipeline e i valori dei parametri sono definiti dalla seguente funzione.
(
prediction_job_spec_path,
prediction_parameter_values,
) = utils.get_prophet_prediction_pipeline_and_parameters(
...
)
Di seguito è riportato un sottoinsieme dei parametri get_prophet_prediction_pipeline_and_parameters:
| Nome parametro | Tipo | Definizione |
|---|---|---|
project |
Stringa | L'ID progetto. |
location |
Stringa | La tua regione. |
model_name |
Stringa | Il nome della risorsa Model. Formatta la stringa nel seguente modo: projects/{project}/locations/{location}/models/{model}. |
time_column |
Stringa | La colonna del tempo. Devi specificare una colonna temporale e deve avere un valore per ogni riga. La colonna Ora indica l'ora in cui è stata effettuata una determinata osservazione. |
time_series_identifier_column |
Stringa | La colonna identificatore serie temporale. Devi specificare una colonna identificatore serie temporale e deve avere un valore per ogni riga. I dati di addestramento per la previsione di solito includono più serie temporali e l'identificatore indica ad Agent Platform a quale serie temporale appartiene una determinata osservazione nei dati di addestramento. Tutte le righe di una determinata serie temporale hanno lo stesso valore nella colonna dell'identificatore della serie temporale. Alcuni identificatori di serie temporali comuni potrebbero essere l'ID prodotto, un ID negozio o una regione. È possibile addestrare un modello di previsione su una singola serie temporale, con un valore identico per tutte le righe nella colonna dell'identificatore della serie temporale. Tuttavia, Agent Platform è più adatta ai dati di addestramento che contengono due o più serie temporali. Per ottenere risultati ottimali, utilizza almeno 10 serie temporali per ogni colonna che utilizzi per addestrare il modello. |
target_column |
Stringa | La colonna (valore) che vuoi che questo modello preveda. |
data_source_csv_filenames |
Stringa | Un URI per un file CSV archiviato in Cloud Storage. |
data_source_bigquery_table_path |
Stringa | Un URI per una tabella BigQuery. |
bigquery_destination_uri |
Stringa | Un URI per il set di dati di destinazione selezionato. Se questo valore non è impostato, le risorse vengono create in un nuovo set di dati nel progetto. |
machine_type |
Stringa | Il tipo di macchina da utilizzare per l'inferenza batch. |
max_num_workers |
Numero intero | Il numero massimo di worker da utilizzare per l'inferenza batch. |