Prophet è un modello di previsione gestito da Meta. Leggi l'articolo su Prophet per i dettagli dell'algoritmo e la documentazione per saperne di più sulla libreria.
Come BigQuery ML ARIMA_PLUS, Prophet cerca di scomporre ogni serie temporale in tendenze, stagioni e festività, generando una previsione utilizzando l'aggregazione dei dati per le previsioni. Tuttavia, una differenza importante è che BQML ARIMA+ utilizza ARIMA per modellare il componente di tendenza, mentre Prophet tenta di adattare una curva utilizzando un modello lineare o logistico a pezzi.
Google Cloud offre una pipeline per l'addestramento di un modello Prophet e una pipeline per ottenere previsioni in batch da un modello Prophet. Entrambe le pipeline sono istanze Vertex AI Pipelines da Componenti della pipeline di Google Cloud (GCPC).
L'integrazione di Prophet con Vertex AI ti consente di:
- Utilizza Vertex AI la suddivisione dei dati e strategie di windowing.
- Leggi i dati dalle tabelle BigQuery o dai file CSV archiviati in Cloud Storage. Vertex AI si aspetta che ogni riga abbia lo stesso formato di Vertex AI Forecasting.
Sebbene Prophet sia un modello multivariato, Vertex AI supporta solo una versione univariata.
Per informazioni sugli account di servizio utilizzati da questo flusso di lavoro, consulta Account di servizio per i flussi di lavoro tabulari.
API di flusso di lavoro
Questo flusso di lavoro utilizza le seguenti API:
- Vertex AI
- Dataflow
- BigQuery
- Cloud Storage
Addestrare un modello con Prophet
Prophet è progettato per un'unica serie temporale. Dati aggregati di Vertex AI 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 una Job di addestramento personalizzato Vertex AI e Dataflow per addestrare più modelli Prophet in parallelo. Nel complesso, il numero di modelli addestrato è il prodotto del numero di serie temporali e del numero di prove di ottimizzazione degli iperparametri.
Il seguente codice di esempio 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 l'account di servizio Vertex AI Pipelines su un account a tua scelta.
I valori della pipeline e 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 | Il tuo ID progetto. |
location |
Stringa | La tua regione. |
root_dir |
Stringa | La posizione di Cloud Storage in cui archiviare l'output. |
target_column |
Stringa | La colonna (valore) che deve essere prevista da questo modello. |
time_column |
Stringa | La colonna della data e dell'ora. Devi specificare una colonna della data/dell'ora che deve avere un valore per ogni riga. La colonna data/ora indica il momento in cui è stata effettuata una determinata osservazione. |
time_series_identifier_column |
Stringa | La colonna dell'identificatore della serie temporale. Devi specificare una colonna per l'identificatore della serie temporale che deve contenere un valore per ogni riga. I dati di addestramento per le previsioni di solito includono più serie temporali e l'identificatore indica a Vertex AI 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, l'ID negozio o una regione. È possibile addestrare un modello di previsione su una singola serie temporale, con un valore identico per tutte le righe della colonna dell'identificatore della serie temporale. Tuttavia, Vertex AI è più adatto per i dati di addestramento che contengono due o più serie temporali. Per risultati ottimali, utilizza almeno 10 serie temporali per ogni colonna utilizzata per addestrare il modello. |
data_granularity_unit |
Stringa | L'unità da utilizzare per la granularità dei dati di addestramento, nonché 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 quanto nel futuro il modello prevede il valore target per ogni riga di dati di previsione. 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 temporali. |
Parametri di 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 | Service account personalizzato per eseguire i job Dataflow. Il job Dataflow può essere configurato per utilizzare IP privati e una sottorete VPC specifica. Questo parametro funge da override per l'account di servizio worker Dataflow predefinito. |
Poiché i job di addestramento Prophet vengono eseguiti su Dataflow,
è di 5-7 minuti. Per ridurre il tempo di esecuzione aggiuntivo, puoi eseguire il scaling up o il scaling out. Ad esempio, per fare lo scale up, puoi modificare
tipo di macchina da n1-standard-1
a e2-highcpu-8
. Per fare lo scale out, devi
può aumentare il numero di worker da 1
a 200
.
Parametri di suddivisione dati
La pipeline di addestramento offre le seguenti opzioni per suddividere i dati:
Suddivisione dati | Descrizione | Parametri |
---|---|---|
Suddivisione predefinita | Vertex AI seleziona in modo casuale l'80% delle righe di dati per il set di addestramento, il 10% per il set di convalida e il 10% per il set di test. Vertex AI utilizza la colonna Data/Ora per determinare l'ordine cronologico delle righe di dati. | Nessuno |
Suddivisione in frazione | Vertex AI utilizza i valori da te forniti per eseguire il partizionamento dei dati nel set di addestramento, nel set di convalida e nel set di test. Vertex AI utilizza la colonna Ora per determinare l'ordine cronologico delle righe di dati. |
|
Suddivisione timestamp | Vertex AI utilizza i valori training_fraction , validation_fraction e test_fraction per partizionare i dati nel set di addestramento, nel set di convalida e nel set di test. Vertex AI utilizza la colonna timestamp_split_key per determinare l'ordine cronologico delle righe di dati. |
|
Suddivisione manuale (predefinita) | Vertex AI suddivide i dati utilizzando i valori TRAIN, VALIDATE o TEST nella colonna predefined_split_key . |
|
Puoi definire i parametri di suddivisione 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 in frazioni o una suddivisione in base al timestamp. |
validation_fraction |
Numero in virgola mobile | La percentuale di dati da assegnare al set di convalida. Imposta questo valore se utilizzi una suddivisione in frazioni o una suddivisione in base al timestamp. |
test_fraction |
Numero in virgola mobile | La percentuale di dati da assegnare al set di test. Imposta questo valore se utilizzi una suddivisione di frazione 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 timestamp. |
Parametri finestra
Vertex AI genera finestre di previsione dai dati di input utilizzando una strategia di finestra scorrevole. Se non vengono impostati i parametri della finestra, Vertex AI utilizza
la strategia di conteggio con un valore massimo predefinito di 100,000,000
. La formazione
la pipeline offre le seguenti strategie di finestra temporale continua:
Strategia per le finestre temporali continue | Descrizione | Parametri |
---|---|---|
Conteggio |
Il numero di finestre generate da Vertex AI non deve superare un
il valore 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, Vertex AI 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 |
Vertex AI utilizza una su ogni X righe di input per generare una finestra,
fino a un massimo di 100.000.000 di finestre. Questa opzione è utile per i segmenti di pubblico
previsioni periodiche. Ad esempio, puoi limitare le previsioni a un solo giorno della settimana impostando il valore della lunghezza del passo su 7 . Il valore può essere
tra 1 e 1000 .
|
window_stride_length |
Colonna |
Puoi aggiungere una colonna ai dati di input in cui i valori sono
True o False . Vertex AI genera una finestra
per ogni riga di input in cui il valore della colonna è True . Le True e
I valori di False possono essere impostati in qualsiasi ordine, purché il conteggio totale sia pari a True
righe è inferiore a 100,000,000 . Sono preferibili i valori booleani, mentre
e i relativi valori. I valori delle stringhe non sono sensibili alle maiuscole.
|
window_column |
Definisci i parametri della finestra in get_prophet_train_pipeline_and_parameters
come segue:
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 del passo. |
window_max_count |
Numero intero | Il numero massimo di finestre. |
Fai previsioni con Prophet
La pipeline di addestramento del modello per Prophet di Vertex AI crea un modello Prophet per ogni serie temporale nei dati. La pipeline di previsione aggrega i dati di input per ID serie temporale e calcola le previsioni separatamente per ogni serie temporale. La pipeline disaggrega quindi i risultati della previsione corrispondono al formato delle previsioni di Vertex AI.
Il seguente codice di esempio mostra come eseguire una pipeline di previsione di 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 | Il tuo ID progetto. |
location |
Stringa | La tua regione. |
model_name |
Stringa | Il nome della risorsa Model. Formatta la stringa come segue: projects/{project}/locations/{location}/models/{model} . |
time_column |
Stringa | La colonna della data e dell'ora. Devi specificare una colonna della data/dell'ora che deve avere un valore per ogni riga. La colonna data/ora indica il momento in cui è stata effettuata una determinata osservazione. |
time_series_identifier_column |
Stringa | La colonna dell'identificatore della serie temporale. Devi specificare una colonna per l'identificatore della serie temporale che deve contenere un valore per ogni riga. I dati di addestramento per le previsioni di solito includono più serie temporali e l'identificatore indica a Vertex AI 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, l'ID negozio o una regione. È possibile addestrare un modello di previsione su una singola serie temporale, con un valore identico per tutte le righe della colonna dell'identificatore della serie temporale. Tuttavia, Vertex AI è più adatto per i dati di addestramento che contengono due o più serie temporali. Per risultati ottimali, utilizza almeno 10 serie temporali per ogni colonna utilizzata per addestrare il modello. |
target_column |
Stringa | La colonna (valore) che deve essere prevista da questo modello. |
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 del set di dati di destinazione desiderato. Se questo valore non viene impostato, le risorse vengono create in un nuovo set di dati nel progetto. |
machine_type |
Stringa | Il tipo di macchina da utilizzare per la previsione batch. |
max_num_workers |
Numero intero | Il numero massimo di worker da utilizzare per la previsione batch. |