Previsione di serie temporali con Vertex AI e BigQuery ML

1. Panoramica

In questo lab imparerai a creare un modello di previsione delle serie temporali con TensorFlow e poi a eseguire il deployment di questi modelli con Vertex AI.

Cosa imparerai

Al termine del corso sarai in grado di:

  • Trasformare i dati in modo che possano essere utilizzati in un modello ML
  • Visualizzare ed esplorare i dati
  • Utilizza BigQuery ML per creare un modello di previsione delle serie temporali
  • Crea un modello di previsione delle serie temporali con TensorFlow utilizzando le architetture LSTM e CNN

2. Introduzione alla previsione delle serie temporali

Questo codelab si concentra su come applicare le tecniche di previsione delle serie temporali utilizzando Google Cloud Platform. Non è un corso generale di previsione delle serie temporali, ma una breve panoramica dei concetti può essere utile per i nostri utenti.

Dati delle serie temporali

Innanzitutto, che cos'è una serie temporale? Si tratta di un set di dati con dati registrati a intervalli di tempo regolari. Un set di dati delle serie temporali contiene sia il tempo sia almeno una variabile che dipende dal tempo.

85af6a1ff05c69f2.png

Componenti

Una serie temporale può essere scomposta in componenti:

  • Tendenza: si sposta verso l'alto o verso il basso secondo un modello ragionevolmente prevedibile
  • Stagionale: si ripete in un periodo specifico, ad esempio un giorno, una settimana, un mese, una stagione e così via.
  • Casuale: fluttuazioni residue

Possono esserci più livelli di stagionalità. Ad esempio, un call center potrebbe notare un pattern nel volume di chiamate in determinati giorni della settimana e in determinati mesi. Il residuo potrebbe essere spiegato da altre variabili oltre al tempo.

6e8d45bbbbc388ec.png

Stazionarietà

Per ottenere risultati ottimali nella previsione, i dati delle serie temporali devono essere stazionari, ovvero le proprietà statistiche come media e varianza devono essere costanti nel tempo. È possibile applicare tecniche come la differenziazione e l'eliminazione del trend ai dati non elaborati per renderli più stazionari.

Ad esempio, il grafico seguente della concentrazione di CO2 mostra un pattern annuale ripetuto con un trend in crescita. ( Fonte)

ab82857e2e7d0b89.png

Dopo aver rimosso la tendenza lineare, i dati sono più adatti alla previsione, in quanto ora hanno una media costante.

c936381ab1095528.png

Utilizzo dei dati di serie temporali per il machine learning

Per utilizzare i dati delle serie temporali in un problema di machine learning, è necessario trasformarli in modo che i valori precedenti possano essere utilizzati per prevedere i valori futuri. Questa tabella mostra un esempio di come vengono create le variabili ritardate per prevedere il target.

d667a941dbd470f5.png

Ora che abbiamo trattato alcuni concetti fondamentali, iniziamo a esplorare i dati e a fare previsioni.

3. Configura l'ambiente del blocco note

Ora che abbiamo esaminato una breve introduzione ai dati, configuriamo l'ambiente di sviluppo del modello.

Passaggio 1: attiva le API

Il connettore BigQuery utilizza l'API BigQuery Storage. Cerca l'API BigQuery Storage nella console e abilita l'API se è attualmente disabilitata.

9895a2fd3cdf8f8c.png

Passaggio 2: crea un blocco note Vertex AI Workbench

Vai alla sezione Vertex AI Workbench della console Cloud e fai clic su Nuovo notebook. Quindi, seleziona il tipo di notebook TensorFlow Enterprise 2.x più recente senza GPU:

4e7b73eabf2bc061.png

Utilizza le opzioni predefinite e poi fai clic su Crea. Una volta creata l'istanza, seleziona Apri JupyterLab:

18c9f3c462aafaee.png

Poi, crea un notebook Python 3 da JupyterLab:

58523671a252b95a.png

Passaggio 3: scarica i materiali del lab

Crea una nuova finestra del terminale dall'interfaccia JupyterLab: File -> Nuovo -> Terminale.

Da qui, clona il materiale di origine con questo comando:

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. Esplorare e visualizzare i dati

In questa sezione imparerai a:

  • Creare una query che raggruppa i dati in una serie temporale
  • Compila i valori mancanti
  • Visualizza i dati
  • Decomporre le serie temporali in componenti di tendenza e stagionali

Passaggio 1

In Vertex AI Workbench, vai a training-data-analyst/courses/ai-for-time-series/notebooks e apri 01-explore.ipynb.

Passaggio 2

Cancella il contenuto di tutte le celle del notebook (Modifica > Cancella tutti gli output), modifica le impostazioni di regione, progetto e bucket in una delle prime celle, quindi esegui le celle una alla volta.

Passaggio 3

In questa sezione hai importato i dati e visualizzato varie dimensioni. Ora che hai un quadro più chiaro dei dati, puoi procedere alla modellazione di machine learning utilizzando questi dati.

55839e7bc0427915.png

5. Crea un modello con la previsione delle serie temporali di BigQuery

In questa sezione imparerai a:

  • Importa i dati di input delle serie temporali in una tabella BigQuery
  • Crea un modello di serie temporale utilizzando la sintassi BQML
  • Scopri come valutare i parametri e l'accuratezza del modello
  • Fare previsioni utilizzando il modello

Passaggio 1

Creeremo una tabella BigQuery con i dati non elaborati del file CSV che abbiamo appena esplorato. Iniziamo scaricando il file CSV dall'ambiente notebook.

Dalla directory training-data-analyst/courses/ai-for-time-series/notebooks/data, fai clic con il tasto destro del mouse su cta_ridership.csv e seleziona Scarica per scaricarlo nell'ambiente locale.

Passaggio 2

Successivamente, caricheremo questi dati in una tabella BigQuery.

Vai a BigQuery nella console (cercando o utilizzando questo link):

649e7ab1c44b75e8.png

Puoi aggiungere la tabella a un nuovo dataset o a uno esistente, che raggruppa le tabelle correlate. Se non hai ancora creato un set di dati, puoi fare clic sul tuo progetto nell'angolo in basso a sinistra, quindi selezionare Crea set di dati nell'angolo in basso a destra.

281b97020cd52f29.png

Scegli un nome a tuo piacimento, ad esempio demo, accetta le impostazioni predefinite e continua.

Con il set di dati selezionato, seleziona Crea tabella nell'angolo in basso a destra per creare una nuova tabella.

ad47810d44cfb289.png

Per le opzioni di creazione della tabella, seleziona:

  • Crea tabella da: Caricamento
  • Seleziona file: cta_ridership.csv
  • Nome tabella: cta_ridership
  • Schema: seleziona la casella per rilevare automaticamente Parametri di schema e input

213e4177e9e79544.png

Passaggio 3

Ora è il momento di creare il modello. BigQuery ML fornisce una sintassi semplice simile a SQL che consente di creare un'ampia gamma di tipi di modelli.

Nell'editor di query, incolla/digita questa query, sostituendo demo, se necessario, con il nome del tuo set di dati in entrambi i punti:

CREATE OR REPLACE MODEL
  `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
    TIME_SERIES_TIMESTAMP_COL='service_date',
    TIME_SERIES_DATA_COL='total_rides',
    HOLIDAY_REGION='us') AS
SELECT
  service_date, total_rides
FROM
  `demo.cta_ridership`

Vediamo gli elementi chiave della sintassi per capire meglio:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

Questa istruzione crea il modello. Esistono varianti di questa istruzione, ad esempio CREATE MODEL, ma abbiamo scelto di sostituire un modello esistente con lo stesso nome.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

Qui definiamo le opzioni del modello, con la prima opzione che è il tipo di modello. Se selezioni ARIMA, verrà creato un modello di previsione di serie temporali.

TIME_SERIES_TIMESTAMP_COL=‘service_date'

La colonna con le informazioni su data e ora

TIME_SERIES_DATA_COL=‘total_rides'

Colonna di dati

HOLIDAY_REGION=‘us'

Questo parametro facoltativo ci consente di includere le festività nel modello. Poiché l'esplorazione dei dati nel passaggio precedente ha mostrato che il numero di passeggeri era inferiore nei giorni festivi e i dati provengono da Chicago, IL, USA, includiamo le festività statunitensi nel modello.

AS SELECT ... FROM ...

Questa sezione seleziona i dati di input che utilizzeremo per addestrare il modello.

Puoi aggiungere alla query una serie di altre opzioni, ad esempio definire una colonna se hai più serie temporali o scegliere se rilevare automaticamente i parametri del modello ARIMA. Puoi trovare maggiori dettagli nel riferimento alla sintassi dell'istruzione CREATE MODEL per i modelli di serie temporali.

Passaggio 4

Scopriamo di più sul nostro modello. Al termine dell'addestramento, eseguiamo un'altra query, sostituendo di nuovo demo, se necessario:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

Interpretiamo i risultati. In ogni riga vedrai un modello candidato, con i relativi parametri e statistiche di valutazione. I risultati vengono restituiti in ordine crescente di AIC o criterio informativo di Akaike, che fornisce un indicatore relativo della qualità del modello. Pertanto, il modello nella prima riga ha l'AIC più basso ed è considerato il migliore.

Potrai visualizzare i parametri p, d e q del modello ARIMA, nonché la stagionalità rilevata nel modello. In questo caso, il modello migliore include la stagionalità settimanale e annuale.

5b5b1e129c70a340.png

Passaggio 5

Ora siamo pronti per la previsione con la funzione ML.FORECAST.

Incolla/digita quanto segue (sostituendo demo se necessario):

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

Questa query prevede semplicemente i dati per 7 giorni utilizzando il nostro modello. Di seguito sono riportate le sette righe restituite. La previsione include anche un intervallo di confidenza, impostato per impostazione predefinita su 0,95, ma configurabile nella query.

b8a7f22657dc2d27.png

Ottimo lavoro: abbiamo creato un modello di serie temporale con poche query BQML.

6. Crea un modello di previsione personalizzato

In questa sezione imparerai a:

  • Rimuovere i valori anomali dai dati
  • Eseguire previsioni in più passaggi
  • Includere funzionalità aggiuntive in un modello di serie temporale
  • Scopri le architetture di rete neurale per la previsione delle serie temporali: LSTM e CNN
  • Scopri di più sui modelli statistici, tra cui il livellamento esponenziale di Holt-Winters
  • Modelli di insieme

Passaggio 1

In Vertex AI Workbench, vai a training-data-analyst/courses/ai-for-time-series/notebooks e apri 02-model.ipynb.

Passaggio 2

Cancella il contenuto di tutte le celle del notebook (Modifica > Cancella tutti gli output), modifica le impostazioni di regione, progetto e bucket in una delle prime celle, quindi esegui le celle una alla volta.

Passaggio 3

Nel blocco note hai esplorato più architetture di modelli: LSTM, CNN e modelli statistici. Per ogni modello, puoi vedere le prestazioni del modello rispetto ai dati di test:

a528df58f4e6d372.png

7. Addestramento e previsione nel cloud

In questa sezione imparerai a:

  • Preparare dati e modelli per l'addestramento nel cloud
  • Addestra il modello e monitora l'avanzamento del job con AI Platform Training
  • Eseguire previsioni utilizzando il modello con AI Platform Predictions

Passaggio 1

In Vertex AI Workbench, vai a training-data-analyst/courses/ai-for-time-series/notebooks e apri 03-cloud-training.ipynb.

Passaggio 2

Cancella il contenuto di tutte le celle del notebook (Modifica > Cancella tutti gli output), modifica le impostazioni di regione, progetto e bucket in una delle prime celle, quindi esegui le celle una alla volta.

Passaggio 3

Nella sezione precedente, abbiamo addestrato un modello e fatto previsioni con esso, il tutto all'interno di un blocco note di Workbench. In questa sezione abbiamo mostrato come utilizzare l'SDK Python per Vertex AI dal notebook per utilizzare i servizi Vertex AI per l'addestramento e il deployment.

a3f6b5dc895a24fb.png

8. La sfida

In questa sezione, proverai ad applicare i concetti appresi a un nuovo set di dati.

Non forniremo istruzioni dettagliate, solo alcuni suggerimenti (se li vuoi).

L'obiettivo è prevedere le richieste di assistenza al 311 del Comune di New York. Queste richieste non di emergenza includono reclami per rumore, problemi con l'illuminazione stradale e così via.

Passaggio 1

Iniziamo comprendendo il set di dati.

Per prima cosa, accedi al set di dati City of New York 311 Service Requests.

Per conoscere meglio i dati, prova alcune delle query di esempio elencate nella descrizione del set di dati:

  • Qual è il numero di richieste al 311 relative ai furgoni dei gelati?
  • In quali giorni vengono ricevute più richieste al 311 relative a feste?

Nell'interfaccia utente BigQuery, seleziona Crea query per scoprire come accedere al set di dati. Tieni presente che l'istruzione SELECT esegue query da bigquery-public-data.new_york_311.311_service_requests.

Passaggio 2

Siamo pronti per iniziare. In questa sezione, apporta modifiche al blocco note Esplora e visualizza per lavorare con questi dati.

Suggerimenti

  • Duplica il notebook 01-explore.ipynb e inizia a lavorarci.
  • Per esplorare i dati, prova questa query:
from google.cloud import bigquery as bq

sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""

client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()

df.head()
  • Per ottenere i conteggi degli incidenti per mese, utilizza questa query:
SELECT
  COUNT(unique_key) as y,
  DATE_TRUNC(DATE(created_date), month) as ds  
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
  • Aggiorna le variabili delle colonne nella sezione delle costanti. Nella query precedente, la colonna di destinazione è y e la colonna della data è ds. Non sono presenti funzionalità aggiuntive.
  • Prendi in considerazione la possibilità di modificare il nome del file in cui esporti i dati per il lab successivo.
  • Esporta i dati utilizzando: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

Passaggio 3

Ora creiamo un modello di serie temporale con i dati mensili.

Suggerimenti:

  • Duplica il notebook 02-model.ipynb e inizia a lavorarci.
  • Aggiorna i parametri del set di dati:
  • Aggiorna i parametri target_col e ts_col in modo che corrispondano al nuovo set di dati.
  • Aggiorna i parametri del modello:
  • Frequenza mensile (il codice per l'inizio del mese è "MS")
  • Passaggi di input: 12 (la finestra temporale è di 12 mesi)
  • Passaggi di output: 3 (previsione di 3 mesi)
  • Stagioni: 12 (la stagionalità è di 12 mesi)
  • Modifica il nome del file di input se lo hai modificato nel notebook precedente.
  • Se esegui la query a metà mese, il totale mensile per l'ultimo mese sarà molto inferiore al previsto. Quindi, ai fini di questo lab, rimuoviamo l'ultimo mese dal set di dati utilizzando: df = df[:-1]
  • Non sembrano esserci valori anomali evidenti nei dati, quindi salta o commenta queste celle.
  • Modifica le unità LSTM e i filtri CNN, nonché le dimensioni del kernel per questo nuovo modello.

9. Esegui la pulizia

Se vuoi continuare a utilizzare questo notebook, ti consigliamo di disattivarlo quando non lo usi. Dall'interfaccia utente di Workbench nella console Cloud, seleziona il notebook, quindi seleziona Interrompi:

57213ef2edad9257.png

Se vuoi eliminare tutte le risorse che hai creato in questo lab, elimina il notebook del workbench anziché arrestarlo.

Utilizzando il menu di navigazione nella console Cloud, vai a Storage ed elimina entrambi i bucket che hai creato per archiviare gli asset del modello (AVVISO: esegui questa operazione solo se hai creato nuovi bucket solo per questo lab).