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 di ML
  • Visualizzare ed esplorare i dati
  • Utilizzare BigQuery ML per creare un modello di previsione delle serie temporali
  • Creare 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 la piattaforma Google Cloud. Non è un corso generale sulla previsione delle serie temporali, ma una breve panoramica dei concetti può essere utile per i nostri utenti.

Dati di serie temporali

Innanzitutto, cos'è una serie temporale? È un set di dati con dati registrati a intervalli di tempo regolari. Un set di dati di 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 in un pattern 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 esistere più livelli di stagionalità. Ad esempio, un call center potrebbe vedere un pattern 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

Stazionarietà

Per ottenere risultati ottimali nella previsione, i dati di serie temporali devono essere resi stazionari, in cui le proprietà statistiche come la media e la varianza sono costanti nel tempo. Per rendere i dati non elaborati più stazionari, è possibile applicare tecniche come la differenziazione e la rimozione della tendenza.

Ad esempio, il grafico seguente della concentrazione di CO2 mostra un pattern annuale ripetuto con una tendenza al rialzo. ( 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 di 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 aiutare a prevedere la destinazione.

d667a941dbd470f5.png

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

3. Configurare 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 attivala se è attualmente disattivata.

9895a2fd3cdf8f8c.png

Passaggio 2: crea un blocco note Vertex AI Workbench

Accedi alla sezione Vertex AI Workbench della console Cloud e fai clic su Nuovo notebook. Seleziona quindi 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 del terminale dall'interfaccia di 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:

  • Creare una query che raggruppa i dati in una serie temporale
  • Inserire i valori mancanti
  • Visualizzare i dati
  • Scomporre 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'immagine più chiara 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:

  • Importare i dati di input delle serie temporali in una tabella BigQuery
  • Creare un modello di serie temporali utilizzando la sintassi BQML
  • Scoprire 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 del blocco note.

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 scaricalo nel tuo ambiente locale.

Passaggio 2

A questo punto, 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, 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 datinell'angolo in basso a destra.

281b97020cd52f29.png

Scegli un nome a tua scelta, 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 della tabella: cta_ridership
  • Schema: seleziona la casella per rilevare automaticamente Schema e parametri di input

213e4177e9e79544.png

Passaggio 3

È 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 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`

Esaminiamo gli elementi chiave della sintassi per la comprensione:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

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

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

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

TIME_SERIES_TIMESTAMP_COL=‘service_date'

La colonna con le informazioni su data/ora

TIME_SERIES_DATA_COL=‘total_rides'

La colonna dei dati

HOLIDAY_REGION=‘us'

Questo parametro facoltativo ci consente di includere le festività nel modello. Poiché la nostra esplorazione dei dati nel passaggio precedente ha mostrato che il numero di passeggeri era inferiore durante le festività e i dati provengono da Chicago, Illinois, USA, includiamo le festività statunitensi 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 definire una colonna se hai più serie temporali o scegliere se scoprire 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. Una volta completato l'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 di informazione 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 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à settimanale e annuale.

5b5b1e129c70a340.png

Passaggio 5

Ora siamo pronti a fare previsioni con la ML.FORECAST funzione.

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 7 giorni utilizzando il nostro modello. Di seguito possiamo vedere le sette righe restituite. La previsione include anche un intervallo di affidabilità, impostato per impostazione predefinita su 0,95, ma configurabile nella query.

b8a7f22657dc2d27.png

Ottimo lavoro: abbiamo creato un modello di serie temporali 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 temporali
  • Scoprire le architetture di rete neurale per la previsione delle serie temporali: LSTM e CNN
  • Scoprire i modelli statistici, inclusa la levigatura 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. Addestra e prevedi nel cloud

In questa sezione imparerai a:

  • Preparare i dati e i modelli per l'addestramento nel cloud
  • Addestrare il modello e monitorare l'avanzamento del job con AI Platform Training
  • Fare 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, tutto all'interno di un blocco note Workbench. In questa sezione abbiamo mostrato come utilizzare l' SDK Python per Vertex AI dal blocco note 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 il rumore, problemi con i lampioni stradali e così via.

Passaggio 1

Iniziamo a comprendere il set di dati.

Innanzitutto, accedi al set di dati delle richieste di assistenza al 311 del comune di New York 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 si ricevono più richieste al 311 relative alle feste?

Nell'interfaccia utente di BigQuery, seleziona Crea query per scoprire come accedere al set di dati. Tieni presente che l'istruzione select esegue 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 per lavorare con 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 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.
  • Valuta la possibilità di modificare il nome del file in cui esporti i dati per il prossimo lab.
  • 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 (prevedi 3 mesi in avanti)
  • Stagioni: 12 (la stagionalità è di 12 mesi)
  • Modifica 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. Pertanto, 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 e 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 blocco note, quindi seleziona Interrompi:

57213ef2edad9257.png

Se vuoi eliminare tutte le risorse che hai creato in questo lab, elimina semplicemente il blocco note di Workbench anziché interromperlo.

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 (ATTENZIONE: esegui questa operazione solo se hai creato nuovi bucket solo per questo lab).