Previsione con Prophet

Prophet è un modello di previsione gestito da Meta. Consulta il documento di Prophet per i dettagli sull'algoritmo e la documentazione per ulteriori informazioni sulla libreria.

Come ARIMA_PLUS di BigQuery ML, Prophet tenta di decomporre ogni serie temporale in tendenze, stagioni e festività, producendo una previsione utilizzando l'aggregazione delle previsioni di questi modelli. 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 predizioni collettive da un modello Prophet. Entrambe le pipeline sono istanze di Vertex AI Pipelines di Google Cloud Pipeline Components (GCPC).

L'integrazione di Prophet con Vertex AI ti consente di:

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 una singola serie temporale. Vertex AI aggrega i dati in base all'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 Vertex AI per addestrare più modelli Prophet in parallelo. In generale, 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 l'account di servizio Vertex AI 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 di 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 vuoi che il modello preveda.
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 ora indica l'ora in cui è stata effettuata una determinata osservazione.
time_series_identifier_column Stringa La colonna dell'identificatore della serie temporale. Devi specificare una colonna identificatore della serie temporale e deve avere 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 comuni delle serie temporali 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, l'orizzonte di previsione e la finestra di contesto. 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 deve fare la previsione del 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 Scopo di ottimizzazione del 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 Account di servizio personalizzato per eseguire i job Dataflow. Il job Dataflow può essere configurato per utilizzare IP privati e una subnet VPC specifica. Questo parametro funge da override per l'account di servizio worker Dataflow predefinito.

Poiché i job di addestramento di Prophet vengono eseguiti su Dataflow, è previsto un tempo di avvio iniziale di 5-7 minuti. Per ridurre il tempo di esecuzione aggiuntivo, puoi eseguire il scaling up o il scaling out. Ad esempio, per aumentare le dimensioni, puoi cambiare il tipo di macchina da n1-standard-1 a e2-highcpu-8. Per eseguire l'escaling, puoi aumentare il numero di worker da 1 a 200.

Parametri di suddivisione dei 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 Ora per determinare l'ordine cronologico delle righe di dati. Nessuno
Suddivisione in frazioni Vertex AI utilizza i valori che fornisci per partizionare i 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.
  • training_fraction
  • validation_fraction
  • test_fraction
Suddivisione del 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.
  • training_fraction
  • validation_fraction
  • test_fraction
  • timestamp_split_key
Suddivisione manuale (predefinita) Vertex AI suddivide i dati utilizzando i valori TRAIN, VALIDATE o TEST nella colonna predefined_split_key.
  • predefined_split_key

Definisci i parametri di suddivisione dei dati in get_prophet_train_pipeline_and_parameters come segue:

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 in frazioni o una suddivisione in base al timestamp.
timestamp_split_key Stringa Il nome della colonna contenente i timestamp per la suddivisione dei dati. Imposta questo valore se utilizzi una suddivisione in base al timestamp.

Parametri finestra

Vertex AI genera finestre di previsione dai dati di input utilizzando una strategia di finestra scorrevole. Se non imposti i parametri della finestra, Vertex AI utilizza la strategia Conteggio con un valore massimo predefinito di 100,000,000. La pipeline di addestramento offre le seguenti strategie per le finestre temporali continue:

Strategia per le finestre temporali continue Descrizione Parametri
Conteggio Il numero di finestre generate da Vertex AI non deve superare un 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 riga di input ogni X per generare una finestra, fino a un massimo di 100.000.000 di finestre. Questa opzione è utile per le previsioni stagionali o 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. I valori True e False possono essere impostati in qualsiasi ordine, purché il conteggio totale delle True righe 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 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 dei modelli per Prophet di Vertex AI crea un modello Prophet per ogni serie temporale nei dati. La pipeline di previsione aggrega i dati di input in base all'ID serie temporale e calcola le previsioni separatamente per ogni serie temporale. La pipeline poi disaggregata i risultati della previsione in modo da farli corrispondere al formato di Vertex AI Forecasting.

Il seguente codice campione 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 di 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 ora indica l'ora in cui è stata effettuata una determinata osservazione.
time_series_identifier_column Stringa La colonna dell'identificatore della serie temporale. Devi specificare una colonna identificatore della serie temporale e deve avere 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 comuni delle serie temporali 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 vuoi che il 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 desiderato. 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 la previsione batch.
max_num_workers Numero intero Il numero massimo di worker da utilizzare per la previsione batch.