Previsione di serie temporali con Vertex AI e BigQuery ML

1. Panoramica

In questo lab imparerai a creare un modello di previsione di serie temporali con TensorFlow e, quindi, 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
  • Visualizza ed esplora i dati
  • Utilizzare BigQuery ML per creare un modello di previsione delle serie temporali
  • Creazione di un modello di previsione delle serie temporali con TensorFlow utilizzando le architetture LSTM e CNN

2. Introduzione alla previsione di serie temporali

Questo codelab è incentrato su come applicare tecniche di previsione delle serie temporali utilizzando Google Cloud. Non si tratta di un corso generico di previsione su una serie temporale, ma un breve tour dei concetti potrebbe essere utile ai 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 di serie temporali contiene sia l'ora sia almeno una variabile dipendente dal tempo.

85af6a1ff05c69f2.png

Componenti

Una serie temporale può essere scomposta in componenti:

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

La stagionalità può essere impostata su più livelli. Ad esempio, un call center potrebbe rilevare un andamento nel volume delle chiamate in determinati giorni della settimana e in determinati mesi. Il residuo potrebbe essere spiegato da altre variabili oltre al tempo.

6e8d45bbbbc388ec.png

Stationarità

Per ottenere risultati ottimali nelle previsioni, i dati delle serie temporali devono essere resi stazionari, in cui le proprietà statistiche, come media e varianza, sono costanti nel tempo. Tecniche come il differenziazione e il detrending possono essere applicate ai dati non elaborati per renderli più stazionari.

Ad esempio, il grafico sottostante della concentrazione di CO2 mostra un modello annuale ricorrente con una tendenza al rialzo. ( Fonte)

ab82857e2e7d0b89.png

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

c936381ab1095528.png

Utilizzo dei dati delle serie temporali per il machine learning

Per utilizzarli in un problema di machine learning, i dati delle serie temporali devono essere trasformati in modo da poter utilizzare i valori precedenti per prevedere quelli futuri. Questa tabella mostra un esempio di come vengono create le variabili ritardate per aiutare a prevedere il target.

d667a941dbd470f5.png

Ora che abbiamo esaminato alcuni aspetti fondamentali, iniziamo con l'esplorazione dei dati e le previsioni.

3. configura l'ambiente del blocco note

Dopo aver seguito una breve introduzione ai dati, impostiamo l'ambiente di sviluppo del modello.

Passaggio 1: abilita 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 blocco note. Quindi seleziona il tipo di blocco note TensorFlow Enterprise 2.x più recente senza GPU:

4e7b73eabf2bc061.png

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

18c9f3c462aafaee.png

Quindi, crea un blocco note Python 3 da JupyterLab:

58523671a252b95a.png

Passaggio 3: scarica i materiali del lab

Crea una nuova finestra 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. Esplora e visualizza i dati

In questa sezione imparerai a:

  • Crea una query che raggruppa i dati in una serie temporale
  • Inserisci i valori mancanti
  • Visualizza i dati
  • Scomponi le serie temporali in componenti stagionali e di tendenza

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 tutte le celle nel blocco note (Modifica > Cancella tutti gli output), modifica le impostazioni della regione, del progetto e del 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 passare alla modellazione del machine learning utilizzando questi dati.

55839e7bc0427915.png

5. Creare un modello con le previsioni di serie temporali di BigQuery

In questa sezione imparerai a:

  • Importa i dati di input delle serie temporali in una tabella BigQuery
  • Creare un modello di serie temporali utilizzando la sintassi BQML
  • Scopri come valutare i parametri e l'accuratezza del tuo modello
  • Previsione mediante il modello

Passaggio 1

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

Nella directory training-data-analyst/courses/ai-for-time-series/notebooks/data, fai clic con il tasto destro del mouse su cta_ridership.csv e scaricalo nel tuo ambiente locale.

Passaggio 2

Successivamente, caricheremo questi dati in una tabella BigQuery.

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

649e7ab1c44b75e8.png

Puoi aggiungere la tabella a un set di dati nuovo o esistente per raggruppare le tabelle correlate. Nel caso in cui tu non abbia già 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 tua scelta, ad esempio demo, accetta i valori predefiniti 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 Schema e parametri di input.

213e4177e9e79544.png

Passaggio 3

È arrivato il momento di creare il nostro modello. BigQuery ML fornisce una sintassi semplice, simile a SQL, che consente di creare un'ampia varietà 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 entrambe le posizioni:

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`

Esaminiamo gli elementi chiave della sintassi per comprendere meglio:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

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

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

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

TIME_SERIES_TIMESTAMP_COL=‘service_date'

La colonna con informazioni su data/ora

TIME_SERIES_DATA_COL=‘total_rides'

La colonna di dati

HOLIDAY_REGION=‘us'

Questo parametro facoltativo ci consente di includere festività nel modello. Poiché la nostra esplorazione dei dati nel passaggio precedente ha mostrato che il numero di passeggeri era più basso durante le festività e i dati provengono da Chicago, IL, Stati Uniti, stiamo includendo le festività degli Stati Uniti nel modello.

AS SELECT ... FROM ...

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

Esistono una serie di altre opzioni che puoi aggiungere alla query, ad esempio per definire una colonna se hai più serie temporali o scegliere se trovare automaticamente i parametri del modello ARIMA. Puoi trovare maggiori dettagli nel riferimento alla sintassi relativo all'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 viene visualizzato un modello candidato, con i relativi parametri e le statistiche di valutazione. I risultati vengono restituiti in ordine crescente di AIC, o criterio di informazione Akaike, che fornisce un indicatore relativo della qualità del modello. Di conseguenza, il modello nella prima riga ha l'AIC più basso ed è considerato il modello migliore.

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

5b5b1e129c70a340.png

Passaggio 5

Ora è tutto pronto per eseguire le previsioni con la funzione ML.FORECAST.

Incolla/digita il testo seguente (sostituendo demo se necessario):

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

Questa query prevede semplicemente 7 giorni utilizzando il nostro modello. Possiamo vedere le sette righe restituite di seguito. La previsione include anche un intervallo di confidenza, il cui valore predefinito è 0,95, ma è configurabile nella query.

b8a7f22657dc2d27.png

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

6. Creare un modello di previsione personalizzato

In questa sezione imparerai a:

  • Rimuovere i valori anomali dai dati
  • Eseguire una previsione in più passaggi
  • Includi caratteristiche aggiuntive in un modello di serie temporali
  • Scopri di più sulle architetture di rete neurale per le previsioni di serie temporali: LSTM e CNN
  • Scopri di più sui modelli statistici, tra cui Holt-Winters Exponential smoothing
  • 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 tutte le celle nel blocco note (Modifica > Cancella tutti gli output), modifica le impostazioni della regione, del progetto e del bucket in una delle prime celle, quindi esegui le celle una alla volta.

Passaggio 3

Nel blocco note hai ora esplorato diverse 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 tuo modello e monitora l'avanzamento del job con AI Platform Training
  • Effettua 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 tutte le celle nel blocco note (Modifica > Cancella tutti gli output), modifica le impostazioni della regione, del progetto e del bucket in una delle prime celle, quindi esegui le celle una alla volta.

Passaggio 3

Nella sezione precedente abbiamo addestrato un modello e lo abbiamo previsto, il tutto all'interno di un blocco note di Workbench. In questa sezione, abbiamo dimostrato come utilizzare l'SDK Python per Vertex AI dal tuo blocco note per utilizzare i servizi Vertex AI per l'addestramento e il deployment.

a3f6b5dc895a24fb.png

8. Sfida

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

Non forniremo istruzioni dettagliate, ma solo alcuni suggerimenti (se lo desideri).

L'obiettivo è prevedere 311 richieste di servizio dalla città di New York. Queste richieste non di emergenza includono reclami relativi al rumore, problemi con l'illuminazione stradale e così via.

Passaggio 1

Iniziamo comprendendo il set di dati.

Innanzitutto, accedi al set di dati Richieste di servizio 311 della città di New York.

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

  • Qual è il numero di 311 richieste relative a camion dei gelati?
  • In quali giorni si registra il maggior numero di 311 richieste relative alle parti?

Nella UI di BigQuery, seleziona Crea query per vedere come accedere al set di dati. Tieni presente che l'istruzione select sta eseguendo una 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 in modo che utilizzi questi dati.

Suggerimenti

  • Duplica il blocco note 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 il numero di 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 di colonna nella sezione delle costanti. Nella query precedente, la colonna di destinazione è y, mentre la colonna della data è ds. Non ci sono funzionalità aggiuntive.
  • Valuta la possibilità di cambiare 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 temporali con i dati mensili.

Suggerimenti:

  • Duplica il blocco note 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 tra 3 mesi in avanti)
  • Stagioni: 12 (la stagionalità è di 12 mesi)
  • Cambia il nome del file di input, se lo hai modificato nel blocco note precedente.
  • Se esegui la query a metà mese, il totale mensile per l'ultimo mese sarà molto inferiore al previsto. Ai fini di questo lab, rimuoviamo l'ultimo mese dal set di dati utilizzando: df = df[:-1]
  • I dati non sembrano avere anomalie evidenti, quindi salta o commenta queste celle.
  • Regola le unità LSTM, i filtri CNN e le dimensioni del kernel per questo nuovo modello.

9. Esegui la pulizia

Se desideri continuare a utilizzare questo blocco note, ti consigliamo di disattivarlo quando non lo usi. Dall'interfaccia utente di Workbench in Cloud Console, seleziona il blocco note, quindi seleziona Interrompi:

57213ef2edad9257.png

Se vuoi eliminare tutte le risorse che hai creato in questo lab, è sufficiente eliminare il blocco note del workbench anziché arrestarlo.

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