Prevedere una singola serie temporale con un modello multivariato


Questo tutorial ti insegna a utilizzare un modello di serie temporali multivariate per prevedere il valore futuro per una determinata colonna, in base al valore storico di più funzionalità di input.

Questo tutorial prevede una singola serie temporale. I valori previsti vengono calcolati una volta per ogni punto temporale nei dati di input.

Questo tutorial utilizza i dati del bigquery-public-data.epa_historical_air_quality set di dati pubblico. Questo set di dati contiene informazioni giornaliere su particolato (PM2,5), temperatura e velocità del vento raccolte in più città degli Stati Uniti.

Obiettivi

Questo tutorial ti guida nella realizzazione delle seguenti attività:

  • Creazione di un modello di serie temporali per prevedere i valori di PM2,5 utilizzando l'istruzione CREATE MODEL.
  • Valutazione delle informazioni sull'analisi ARIMA (media mobile integrata autoregressiva) nel modello utilizzando la funzione ML.ARIMA_EVALUATE.
  • Controllare i coefficienti del modello utilizzando la funzione ML.ARIMA_COEFFICIENTS.
  • Recuperare i valori PM2,5 previsti dal modello utilizzando la funzione ML.FORECAST.
  • Valutare l'accuratezza del modello utilizzando la funzione ML.EVALUATE.
  • Recupero dei componenti della serie temporale, come stagionalità, tendenza e attribuzioni delle funzionalità, utilizzando la funzione ML.EXPLAIN_FORECAST. Puoi esaminare questi componenti delle serie temporali per spiegare i valori previsti.

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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

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

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. BigQuery viene attivato automaticamente nei nuovi progetti. Per attivare BigQuery in un progetto preesistente, vai a

    Enable the BigQuery API.

    Enable the API

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 saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.

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 BigQuery

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

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

    Crea il set di dati.

  4. Nella pagina Crea set di dati:

    • 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 sono archiviati nella US multiregione. Per semplicità, archivia il set di dati nella stessa posizione.

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

      Pagina Crea set di dati.

Crea una tabella di dati di input

Crea una tabella di dati da utilizzare per addestrare e valutare il modello. Questa tabella combina le colonne di diverse tabelle nel set di dati bigquery-public-data.epa_historical_air_quality per fornire dati meteorologici giornalieri. Crea anche le seguenti colonne da utilizzare come variabili di input per il modello:

  • date: la data dell'osservazione
  • pm25 il valore medio di PM2,5 per ogni giorno
  • wind_speed: la velocità media del vento per ogni giorno
  • temperature: la temperatura più alta per ogni giorno

Nella seguente query GoogleSQL, la clausola FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary indica che stai eseguendo query sulle tabelle *_daily_summary nel set di dati epa_historical_air_quality. Queste tabelle sono tabelle partizionate.

Per creare la tabella di dati di input:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    CREATE TABLE `bqml_tutorial.seattle_air_quality_daily`
    AS
    WITH
      pm25_daily AS (
        SELECT
          avg(arithmetic_mean) AS pm25, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary`
        WHERE
          city_name = 'Seattle'
          AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass'
        GROUP BY date_local
      ),
      wind_speed_daily AS (
        SELECT
          avg(arithmetic_mean) AS wind_speed, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.wind_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant'
        GROUP BY date_local
      ),
      temperature_daily AS (
        SELECT
          avg(first_max_value) AS temperature, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature'
        GROUP BY date_local
      )
    SELECT
      pm25_daily.date AS date, pm25, wind_speed, temperature
    FROM pm25_daily
    JOIN wind_speed_daily USING (date)
    JOIN temperature_daily USING (date);

Visualizzare i dati di input

Prima di creare il modello, puoi visualizzare facoltativamente i dati delle serie temporali di input per avere un'idea della distribuzione. Puoi farlo utilizzando Looker Studio.

Per visualizzare i dati delle serie temporali:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    SELECT
      *
    FROM
      `bqml_tutorial.seattle_air_quality_daily`;
  3. Al termine della query, fai clic su Esplora i dati > Esplora con Looker Studio. Looker Studio si apre in una nuova scheda. Completa i seguenti passaggi nella nuova scheda.

  4. In Looker Studio, fai clic su Inserisci > Grafico delle serie temporali.

  5. Nel riquadro Grafico, scegli la scheda Configurazione.

  6. Nella sezione Metrica, aggiungi i campi pm25, temperature e wind_speed e rimuovi la metrica predefinita Conteggio record. Il grafico risultante è simile al seguente:

    Grafico che mostra il meteo nel tempo.

    Dal grafico si evince che la serie temporale di input presenta un andamento stagionale settimanale.

Crea il modello delle serie temporali

Crea un modello di serie temporali per prevedere i valori delle particelle inquinanti, come rappresentato dalla colonna pm25, utilizzando i valori delle colonne pm25, wind_speed e temperature come variabili di input. Addestra il modello con i dati sulla qualità dell'aria della tabellabqml_tutorial.seattle_air_quality_daily, selezionando i dati raccolti tra il 1° gennaio 2012 e il 31 dicembre 2020.

Nella seguente query, la clausola OPTIONS(model_type='ARIMA_PLUS_XREG', time_series_timestamp_col='date', ...) indica che stai creando un modello ARIMA con regressori esterni. L'opzione auto_arima del statement CREATE MODEL è impostata per impostazione predefinita su TRUE, pertanto l'algoritmo auto.ARIMA ottimizza automaticamente gli iperparametri nel modello. L'algoritmo adatta dozzine di modelli candidati e sceglie il migliore, ovvero quello con il criterio di informazione di Akaike (AIC) più basso. L'opzione data_frequency delle istruzioni CREATE MODEL è impostata per impostazione predefinita su AUTO_FREQUENCY, pertanto il processo di addestramento deduce automaticamente la frequenza dei dati della serie temporale di input. L'opzione decompose_time_series del comando CREATE MODEL ha per impostazione predefinita il valore TRUE, in modo che le informazioni sui dati delle serie temporali vengano restituite quando valuti il modello nel passaggio successivo.

Per creare il modello:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    CREATE OR REPLACE
      MODEL
        `bqml_tutorial.seattle_pm25_xreg_model`
      OPTIONS (
        MODEL_TYPE = 'ARIMA_PLUS_XREG',
        time_series_timestamp_col = 'date',  # Identifies the column that contains time points
        time_series_data_col = 'pm25')       # Identifies the column to forecast
    AS
    SELECT
      date,                                  # The column that contains time points
      pm25,                                  # The column to forecast
      temperature,                           # Temperature input to use in forecasting
      wind_speed                             # Wind speed input to use in forecasting
    FROM
      `bqml_tutorial.seattle_air_quality_daily`
    WHERE
      date
      BETWEEN DATE('2012-01-01')
      AND DATE('2020-12-31');

    Il completamento della query richiede circa 20 secondi, dopodiché il seattle_pm25_xreg_model modello viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzione CREATE MODEL per creare un modello, non vengono visualizzati i risultati della query.

Valutare i modelli candidati

Valuta i modelli di serie temporali utilizzando la funzione ML.ARIMA_EVALUATE. La funzione ML.ARIMA_EVALUATE mostra le metriche di valutazione di tutti i modelli candidati valutati durante il processo di ottimizzazione automatica degli iperparametri.

Per valutare il modello:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

    I risultati dovrebbero essere simili ai seguenti:

    Metriche di valutazione per il modello di serie temporali.

    Le colonne di output non_seasonal_p, non_seasonal_d, non_seasonal_q e has_drift definiscono un modello ARIMA nella pipeline di addestramento. Le colonne di output log_likelihood, AIC e variance sono pertinenti alla procedura di adattamento del modello ARIMA.

    L'algoritmo auto.ARIMA utilizza il test KPSS per determinare il valore migliore per non_seasonal_d, che in questo caso è 1. Quando non_seasonal_d è 1, l'algoritmo auto.ARIMA addestra in parallelo 42 diversi modelli ARIMA candidati. In questo esempio, tutti e 42 i modelli candidati sono validi, pertanto l'output contiene 42 righe, una per ogni modello ARIMA candidato. Se alcuni modelli non sono validi, vengono esclusi dall'output. Questi modelli candidati vengono restituito in ordine crescente in base all'AIC. Il modello nella prima riga ha il valore AIC più basso ed è considerato il migliore. Il modello migliore viene salvato come modello finale e viene utilizzato quando chiami funzioni come ML.FORECAST sul modello.

    La colonna seasonal_periods contiene informazioni sul pattern stagionale identificato nei dati delle serie temporali. Non ha nulla a che fare con la modellazione ARIMA, pertanto ha lo stesso valore in tutte le righe di output. Mostra un andamento settimanale, in linea con i risultati che hai visualizzato se hai scelto di visualizzare i dati di input.

    Le colonne has_holiday_effect, has_spikes_and_dips e has_step_changes forniscono informazioni sui dati delle serie temporali di input e non sono correlate alla modellazione ARIMA. Queste colonne vengono restituite perché il valore dell'opzione decompose_time_series nell'istruzione CREATE MODEL è TRUE. Queste colonne hanno anche gli stessi valori in tutte le righe di output.

    La colonna error_message mostra eventuali errori che si sono verificati durante la procedura di aggiustamentoauto.ARIMA. Un possibile motivo di errore si verifica quando le colonne selezionate non_seasonal_p, non_seasonal_d, non_seasonal_q e has_drift non sono in grado di stabilizzare la serie temporale. Per recuperare il messaggio di errore di tutti i modelli candidati, imposta l'opzione show_all_candidate_models su TRUE quando crei il modello.

    Per ulteriori informazioni sulle colonne di output, consulta la funzione ML.ARIMA_EVALUATE.

Ispeziona i coefficienti del modello

Controlla i coefficienti del modello di serie temporali utilizzando la funzione ML.ARIMA_COEFFICIENTS.

Per recuperare i coefficienti del modello:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

    I risultati dovrebbero essere simili ai seguenti:

    Coefficienti per il modello di serie temporali.

    La colonna di output ar_coefficients mostra i coefficienti del modello della parte autoregressiva (AR) del modello ARIMA. Analogamente, la colonna di output ma_coefficients mostra i coefficienti del modello della parte media mobile (MA) del modello ARIMA. Entrambe le colonne contengono valori di array, le cui lunghezze sono uguali rispettivamente a non_seasonal_p e non_seasonal_q. Nell'output della funzione ML.ARIMA_EVALUATE hai visto che il modello migliore ha un valore non_seasonal_p pari a 0 e un valore non_seasonal_q pari a 5. Pertanto, nell'output ML.ARIMA_COEFFICIENTS, il valore ar_coefficients è un array vuoto e il valore ma_coefficients è un array di 5 elementi. Il valore intercept_or_drift è il termine costante nel modello ARIMA.

    Le colonne di output processed_input, weight e category_weights mostrano i coefficienti per ogni caratteristica e l'intercetta nel modello di regressione lineare. Se la caratteristica è numerica, il peso si trova nella colonna weight. Se la caratteristica è di tipo categorico, il valore category_weights è un array di valori struct, in cui ogni valore struct contiene il nome e il peso di una determinata categoria.

    Per ulteriori informazioni sulle colonne di output, consulta la funzione ML.ARIMA_COEFFICIENTS.

Utilizza il modello per prevedere i dati

Prevedi i valori futuri delle serie temporali utilizzando la funzione ML.FORECAST.

Nella seguente query GoogleSQL, la clausola STRUCT(30 AS horizon, 0.8 AS confidence_level) indica che la query prevede 30 punti di tempo futuri e genera un intervallo di previsione con un livello di confidenza dell'80%.

Per prevedere i dati con il modello:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    SELECT
      *
    FROM
      ML.FORECAST(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

    I risultati dovrebbero essere simili ai seguenti:

    Risultati previsti dal modello di serie temporali.

    Le righe di output sono in ordine cronologico in base al valore della colonna forecast_timestamp. Nella previsione delle serie temporali, l'intervallo di previsione, rappresentato dai valori delle colonne prediction_interval_lower_bound e prediction_interval_upper_bound, è importante quanto il valore della colonna forecast_value. Il valore forecast_value è il punto medio dell'intervallo di previsione. L'intervallo di previsione dipende dai valori delle colonne standard_error e confidence_level.

    Per ulteriori informazioni sulle colonne di output, consulta la funzione ML.FORECAST.

Valutare l'accuratezza delle previsioni

Valuta l'accuratezza delle previsioni del modello utilizzando la funzione ML.EVALUATE.

Nella seguente query GoogleSQL, il secondo statement SELECT fornisce ai dati le funzionalità future, che vengono utilizzate per prevedere i valori futuri da confrontare con i dati effettivi.

Per valutare l'accuratezza del modello:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    SELECT
      *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        (
          SELECT
            date,
            pm25,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ),
        STRUCT(
          TRUE AS perform_aggregation,
          30 AS horizon));

    I risultati dovrebbero essere simili ai seguenti:

    Metriche di valutazione per il modello.

    Per ulteriori informazioni sulle colonne di output, consulta la funzione ML.EVALUATE.

Spiega i risultati della previsione

Puoi ottenere le metriche di spiegabilità oltre ai dati di previsione utilizzando la funzione ML.EXPLAIN_FORECAST. La funzione ML.EXPLAIN_FORECAST prevede i valori futuri delle serie temporali e restituisce anche tutti i componenti distinti della serie temporale.

Analogamente alla funzione ML.FORECAST, la clausola STRUCT(30 AS horizon, 0.8 AS confidence_level) utilizzata nella funzione ML.EXPLAIN_FORECAST indica che la query prevede 30 punti di tempo futuri e genera un intervallo di previsione con un livello di confidenza dell'80%.

Per spiegare i risultati del modello:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    SELECT
      *
    FROM
      ML.EXPLAIN_FORECAST(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

    I risultati dovrebbero essere simili ai seguenti:

    Le prime nove colonne di output dei dati di previsione e delle spiegazioni delle previsioni. Le colonne di output dalla decima alla diciassettesima dei dati di previsione e delle spiegazioni delle previsioni. Le ultime sei colonne di output dei dati di previsione e delle spiegazioni delle previsioni.

    Le righe di output sono ordinate in ordine cronologico in base al valore della colonna time_series_timestamp.

    Per ulteriori informazioni sulle colonne di output, consulta la funzione ML.EXPLAIN_FORECAST.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  • Puoi eliminare il progetto che hai creato.
  • In alternativa, puoi conservare il progetto ed eliminare il set di dati.

Eliminare 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 BigQuery

  2. Nella barra 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, conferma il comando di eliminazione digitando il nome del set di dati (bqml_tutorial) e poi fai clic su Elimina.

Elimina il progetto

Per eliminare il progetto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi