Previsione gerarchica di serie temporali

Questo tutorial insegna come generare una serie temporale gerarchica. In questo tutorial, creerai due modelli di serie temporali utilizzando gli stessi dati, uno dei quali utilizza la previsione gerarchica e l'altro no. Ciò ti consente di confrontare i risultati restituiti dai modelli.

Userai i dati di iowa_liquor.sales.sales per addestrare i modelli in questo tutorial. Questo set di dati contiene informazioni su oltre 1 milione di liquori venduti in diversi negozi che utilizzano i dati pubblici sulle vendite di liquori dell'Iowa.

Prima di seguire questo tutorial, dovresti acquisire familiarità con la previsione di più serie temporali. Per un'introduzione a questo argomento, completa il tutorial Previsioni di più serie temporali dai dati di Google Analytics.

Autorizzazioni richieste

  • Per creare il set di dati, devi disporre dell'autorizzazione IAM bigquery.datasets.create.
  • Per creare la risorsa di connessione, devi disporre delle seguenti autorizzazioni:

    • bigquery.connections.create
    • bigquery.connections.get
  • Per creare il modello, devi disporre delle seguenti autorizzazioni:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:

    • bigquery.models.getData
    • bigquery.jobs.create

Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.

Obiettivi

In questo tutorial utilizzerai quanto segue:

  • Dichiarazione CREATE MODEL: per creare un modello di serie temporale e un modello gerarchico di serie temporali.
  • Funzione ML.FORECAST: per prevedere le vendite totali giornaliere.

Costi

Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:

  • BigQuery
  • BigQuery ML

Per ulteriori informazioni sui costi di BigQuery, consulta la pagina Prezzi di BigQuery.

Per ulteriori informazioni sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Attiva l'API BigQuery.

    Abilita l'API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Attiva l'API BigQuery.

    Abilita l'API

crea un set di dati

Crea un set di dati BigQuery per archiviare il tuo modello ML:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai alla pagina di BigQuery

  2. Nel riquadro Explorer, fai clic sul nome del tuo progetto.

  3. Fai clic su Visualizza azioni > Crea set di dati.

    Crea il set di dati.

  4. Nella pagina Crea set di dati, segui questi passaggi:

    • In ID set di dati, inserisci bqml_tutorial.

    • Per Tipo di località, seleziona Più regioni e poi Stati Uniti (più regioni negli Stati Uniti).

      I set di dati pubblici vengono archiviati in US più regioni. Per semplicità, archivia il tuo set di dati nella stessa località.

    • Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.

      Pagina Crea set di dati.

Riconciliazione gerarchica

Le previsioni di serie temporali possono spesso essere suddivise o aggregate in base a diverse dimensioni di interesse. e sono note come serie temporali gerarchiche. Ad esempio, i dati di un censimento che indicano la popolazione totale per stato possono essere suddivisi per città e codice postale. Al contrario, possiamo aggregare questi dati per ogni paese o continente.

Esistono diverse tecniche per generare e riconciliare previsioni gerarchiche. Prendi il seguente esempio, che mostra una struttura gerarchica semplificata per la vendita di liquori nello stato dell'Iowa:

Serie temporali gerarchiche.

Il livello più basso indica il livello del negozio, seguito dal livello del codice postale, dalla città, dalla contea e infine dallo stato. L'obiettivo delle previsioni gerarchiche è garantire che tutte le previsioni di ciascun livello debbano essere riconciliate. Ad esempio, alla luce della figura precedente, ciò significa che la somma delle previsioni per Clive e Des Moines deve corrispondere a quella di Polk. Analogamente, le previsioni di Polk, Linn e Scott dovrebbero sommarsi alle previsioni per l'Iowa.

Esistono un paio di tecniche comuni che puoi utilizzare per generare previsioni riconciliate per ogni livello. Una tecnica è nota come approccio bottom-up. Con questo approccio, le previsioni vengono generate al livello inferiore della gerarchia prima di essere sommate agli altri livelli. Riprendendo l'esempio precedente, le previsioni per ciascun negozio vengono utilizzate per creare modelli di previsione per gli altri livelli (prima per codice postale, poi per città e così via).

crea un modello di serie temporali

In primo luogo, crea un modello di serie temporali utilizzando i dati sulle vendite di liquori in Iowa.

La seguente query GoogleSQL crea un modello che prevede il numero totale giornaliero di bottiglie vendute nel 2015 nelle contee di Polk, Linn e Scott. L'istruzione CREATE MODEL crea e addestra un modello denominato bqml_tutorial.liquor_forecast.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast`
  OPTIONS (
    MODEL_TYPE = 'ARIMA_PLUS',
    TIME_SERIES_TIMESTAMP_COL = 'date',
    TIME_SERIES_DATA_COL = 'total_bottles_sold',
    TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
    HOLIDAY_REGION = 'US')
AS
SELECT
  store_number,
  zip_code,
  city,
  county,
  date,
  SUM(bottles_sold) AS total_bottles_sold
FROM
  `bigquery-public-data.iowa_liquor_sales.sales`
WHERE
  date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
  AND county IN ('POLK', 'LINN', 'SCOTT')
GROUP BY store_number, date, city, zip_code, county;

La clausola OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica che stai creando un modello di serie temporali basato su ARIMA. Per impostazione predefinita, auto_arima=TRUE, quindi l'algoritmo auto.ARIMA ottimizza automaticamente gli iperparametri nei modelli ARIMA_PLUS. L'algoritmo adatta decine di modelli candidati e sceglie quello migliore con il criterio delle informazioni Akaike (AIC) più basso. Impostando l'opzione holiday_region su US, è possibile creare modelli più precisi per i periodi delle festività degli Stati Uniti se esistono modelli relativi alle festività degli Stati Uniti nella serie temporale.

Esegui la query CREATE MODEL per creare e addestrare il modello:

  1. Nella console Google Cloud, fai clic sul pulsante Esegui una query in BigQuery.

  2. Inserisci la seguente query GoogleSQL nell'editor query.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast`
  OPTIONS (
    MODEL_TYPE = 'ARIMA_PLUS',
    TIME_SERIES_TIMESTAMP_COL = 'date',
    TIME_SERIES_DATA_COL = 'total_bottles_sold',
    TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
    HOLIDAY_REGION = 'US')
AS
SELECT
  store_number,
  zip_code,
  city,
  county,
  date,
  SUM(bottles_sold) AS total_bottles_sold
FROM
  `bigquery-public-data.iowa_liquor_sales.sales`
WHERE
  date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
  AND county IN ('POLK', 'LINN', 'SCOTT')
GROUP BY store_number, date, city, zip_code, county;
  1. Fai clic su Esegui.

    Il completamento della query richiede circa 37 secondi, dopodiché il modello (liquor_forecast) viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzione CREATE MODEL per creare un modello, non ci sono risultati della query.

Esaminare i risultati del modello di serie temporali

Dopo aver creato il modello, puoi utilizzare la funzione ML.FORECAST per vedere i risultati della previsione.

Esegui la funzione ML.FORECAST sul modello liquor_forecast specificandolo nella clausola FROM.

Per impostazione predefinita, questa query restituisce le previsioni per tutte le serie temporali univoche presenti nei dati, identificate dalle colonne store_number, zip_code, city e county.

Per eseguire la query ML.FORECAST, segui questi passaggi:

  1. Nella console Google Cloud, fai clic sul pulsante Esegui una query in BigQuery.

  2. Inserisci la seguente query GoogleSQL nell'editor query.

#standardSQL
SELECT *
FROM
  ML.FORECAST(
    MODEL `bqml_tutorial.liquor_forecast`,
    STRUCT(20 AS horizon, 0.8 AS confidence_level))
ORDER BY store_number, county, city, zip_code, forecast_timestamp
  1. Fai clic su Esegui.

    L'esecuzione della query dovrebbe richiedere circa 5 secondi. Dopo l'esecuzione della query, l'output mostra i seguenti risultati.

    Esempio di serie temporale.

    Osserva come viene visualizzata la previsione per la prima serie temporale (store_number=2190, zip_code=50314, città=DES MOINES, contea=POLK). Se esamini più in dettaglio le altre righe, noterai le previsioni per gli altri gruppi.

    In generale, le previsioni vengono generate per ogni serie temporale univoca. Per generare previsioni per livelli aggregati, ad esempio per uno specifico paese, è necessario generare una previsione gerarchica.

Creare un modello di serie temporali con previsioni gerarchiche

Crea una previsione gerarchica delle serie temporali, utilizzando i dati sulle vendite di liquori dell'Iowa.

La seguente query GoogleSQL crea un modello che genera previsioni gerarchiche per il numero totale giornaliero di bottiglie vendute nel 2015 nelle contee di Polk, Linn e Scott. L'istruzione CREATE MODEL crea e addestra un modello denominato bqml_tutorial.liquor_forecast_hierarchical.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast_hierarchical`
  OPTIONS (
    MODEL_TYPE = 'ARIMA_PLUS',
    TIME_SERIES_TIMESTAMP_COL = 'date',
    TIME_SERIES_DATA_COL = 'total_bottles_sold',
    TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
    HIERARCHICAL_TIME_SERIES_COLS = ['zip_code', 'store_number'],
    HOLIDAY_REGION = 'US')
AS
SELECT
  store_number,
  zip_code,
  city,
  county,
  date,
  SUM(bottles_sold) AS total_bottles_sold
FROM
  `bigquery-public-data.iowa_liquor_sales.sales`
WHERE
  date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
  AND county IN ('POLK', 'LINN', 'SCOTT')
GROUP BY store_number, date, city, zip_code, county;

Il parametro HIERARCHICAL_TIME_SERIES_COLS indica che viene creata una previsione gerarchica basata su un insieme di colonne. Ognuna di queste colonne viene raggruppata e aggregata. Ad esempio, dalla query precedente, questo significa che il campo store_number viene aggregato in modo da mostrare le previsioni per ogni county, city e zip_code. Separatamente, anche zip_code e store_number vengono raggruppati in modo da mostrare le previsioni per ogni county e city. L'ordine delle colonne è importante perché definisce la struttura della gerarchia.

Esegui la query CREATE MODEL per creare e addestrare il modello:

  1. Nella console Google Cloud, fai clic sul pulsante Esegui una query in BigQuery.

  2. Inserisci la seguente query GoogleSQL nell'editor query.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast_hierarchical`
  OPTIONS (
    MODEL_TYPE = 'ARIMA_PLUS',
    TIME_SERIES_TIMESTAMP_COL = 'date',
    TIME_SERIES_DATA_COL = 'total_bottles_sold',
    TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
    HIERARCHICAL_TIME_SERIES_COLS = ['zip_code', 'store_number'],
    HOLIDAY_REGION = 'US')
AS
SELECT
  store_number,
  zip_code,
  city,
  county,
  date,
  SUM(bottles_sold) AS total_bottles_sold
FROM
  `bigquery-public-data.iowa_liquor_sales.sales`
WHERE
  date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
  AND county IN ('POLK', 'LINN', 'SCOTT')
GROUP BY store_number, date, city, zip_code, county;
  1. Fai clic su Esegui.

    Il completamento della query richiede circa 45 secondi, dopodiché il modello (bqml_tutorial.liquor_forecast_hierarchical) viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzione CREATE MODEL per creare un modello, non ci sono risultati della query.

Esaminare i risultati del modello di serie temporale gerarchico

  1. Nella console Google Cloud, fai clic sul pulsante Esegui una query in BigQuery.

  2. Inserisci la seguente query GoogleSQL nell'editor query.

    #standardSQL
    SELECT
    *
    FROM
    ML.FORECAST(
      MODEL `bqml_tutorial.liquor_forecast_hierarchical`,
      STRUCT(30 AS horizon, 0.8 AS confidence_level))
    WHERE city = 'LECLAIRE'
    ORDER BY county, city, zip_code, store_number, forecast_timestamp
    
  3. Fai clic su Esegui.

    L'esecuzione della query dovrebbe richiedere circa 5 secondi. Dopo l'esecuzione della query, l'output mostra i seguenti risultati.

    Esempio di serie temporali gerarchiche.

    Nota come viene visualizzata la previsione aggregata per la città di LeClaire (store_number=NULL, zip_code=NULL, city=LECLAIRE, County=SCOTT). Se esamini più in dettaglio le altre righe, noterai le previsioni per gli altri gruppi secondari. Ad esempio, l'immagine seguente mostra le previsioni aggregate per il codice postale 52753 (store_number=NULL, zip_code=52753, city=LECLAIRE, contea=SCOTT):

    Esempio di serie temporali gerarchiche.

Elimina il set di dati

L'eliminazione del progetto rimuove tutti i set di dati e tutte le tabelle nel progetto. Se preferisci riutilizzare il progetto, puoi eliminare il set di dati creato in questo tutorial:

  1. Se necessario, apri la pagina BigQuery nella console Google Cloud.

    Vai alla pagina di BigQuery

  2. Nel menu di navigazione, fai clic sul set di dati bqml_tutorial che hai creato.

  3. Fai clic su Elimina set di dati sul lato destro della finestra. Questa azione elimina il set di dati, la tabella e tutti i dati.

  4. Nella finestra di dialogo Elimina set di dati, digita il nome del set di dati (bqml_tutorial) per confermare il comando di eliminazione, quindi fai clic su Elimina.

Elimina il progetto

Per eliminare il progetto:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi