Esegui il rilevamento di anomalie con un modello di previsione delle serie temporali multivariate

Questo tutorial mostra come svolgere le seguenti attività:

Questo tutorial utilizza le seguenti tabelle del set di dati pubblicoepa_historical_air_quality, che contiene informazioni giornaliere su PM 2, 5, temperatura e velocità del vento raccolte in più città degli Stati Uniti:

Autorizzazioni obbligatorie

  • Per creare il set di dati, devi disporre dell'autorizzazione IAM bigquery.datasets.create.

  • Per creare il modello, devi disporre delle seguenti autorizzazioni:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • 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.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

  • BigQuery: You incur costs for the data you process in BigQuery.

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi Google Cloud utenti potrebbero avere diritto a una prova gratuita.

Per ulteriori informazioni, vedi Prezzi di BigQuery.

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. Enable the BigQuery API.

    Enable the API

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

    Go to project selector

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

  7. Enable the BigQuery API.

    Enable the API

Crea un set di dati

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

Console

  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.

    L'opzione di menu Crea 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 tuo set di dati nella stessa posizione.

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

    La pagina Crea set di dati con i valori inseriti.

bq

Per creare un nuovo set di dati, utilizza il comando bq mk con il flag --location. Per un elenco completo dei possibili parametri, consulta la documentazione di riferimento del comando bq mk --dataset.

  1. Crea un set di dati denominato bqml_tutorial con la posizione dei dati impostata su US e una descrizione di BigQuery ML tutorial dataset:

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    Anziché utilizzare il flag --dataset, il comando utilizza la scorciatoia -d. Se ometti -d e --dataset, il comando crea per impostazione predefinita un set di dati.

  2. Verifica che il set di dati sia stato creato:

    bq ls

API

Chiama il metodo datasets.insert con una risorsa set di dati definita.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

prepara i dati di addestramento

I dati PM2, 5, temperatura e velocità del vento sono in tabelle separate. Crea la tabella bqml_tutorial.seattle_air_quality_daily dei dati di addestramento combinando i dati di queste tabelle pubbliche. bqml_tutorial.seattle_air_quality_daily contiene le seguenti colonne:

  • date: la data dell'osservazione
  • PM2.5: 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

La nuova tabella contiene i dati giornalieri dal 11 agosto 2009 al 31 gennaio 2022.

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro dell'editor SQL, esegui il seguente statement SQL:

    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)

Crea il modello

Crea un modello di serie temporali multivariate utilizzando i dati di bqml_tutorial.seattle_air_quality_daily come dati di addestramento.

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro dell'editor SQL, esegui il seguente statement SQL:

    CREATE OR REPLACE MODEL `bqml_tutorial.arimax_model`
      OPTIONS (
        model_type = 'ARIMA_PLUS_XREG',
        auto_arima=TRUE,
        time_series_data_col = 'temperature',
        time_series_timestamp_col = 'date'
        )
    AS
    SELECT
      *
    FROM
      `bqml_tutorial.seattle_air_quality_daily`;

    Il completamento della query richiede alcuni secondi, dopodiché il modelloarimax_model viene visualizzato nel set di dati bqml_tutorial nel riquadro Esplorazione.

    Poiché la query utilizza un'istruzione CREATE MODEL per creare un modello, non esistono risultati della query.

Eseguire il rilevamento delle anomalie sui dati storici

Esegui il rilevamento delle anomalie sui dati storici utilizzati per addestrare il modello.

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro dell'editor SQL, esegui il seguente statement SQL:

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
       MODEL `bqml_tutorial.arimax_model`,
       STRUCT(0.6 AS anomaly_prob_threshold)
      )
    ORDER BY
      date ASC;

    I risultati sono simili ai seguenti:

    +-------------------------+-------------+------------+--------------------+--------------------+---------------------+
    | date                    | temperature | is_anomaly | lower_bound        | upper_bound        | anomaly_probability |
    +--------------------------------------------------------------------------------------------------------------------+
    | 2009-08-11 00:00:00 UTC | 70.1        | false      | 67.65880237416745  | 72.541197625832538 | 0                   |
    +--------------------------------------------------------------------------------------------------------------------+
    | 2009-08-12 00:00:00 UTC | 73.4        | false      | 71.715603233887791 | 76.597998485552878 | 0.20589853827304627 |
    +--------------------------------------------------------------------------------------------------------------------+
    | 2009-08-13 00:00:00 UTC | 64.6        | true       | 67.741606808079425 | 72.624002059744512 | 0.94627126678202522 |
    +-------------------------+-------------+------------+--------------------+--------------------+---------------------+
    

Eseguire il rilevamento delle anomalie sui nuovi dati

Esegui il rilevamento delle anomalie sui nuovi dati generati.

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro dell'editor SQL, esegui il seguente statement SQL:

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
       MODEL `bqml_tutorial.arimax_model`,
       STRUCT(0.6 AS anomaly_prob_threshold),
       (
         SELECT
           *
         FROM
           UNNEST(
             [
               STRUCT<date TIMESTAMP, pm25 FLOAT64, wind_speed FLOAT64, temperature FLOAT64>
               ('2023-02-01 00:00:00 UTC', 8.8166665, 1.6525, 44.0),
               ('2023-02-02 00:00:00 UTC', 11.8354165, 1.558333, 40.5),
               ('2023-02-03 00:00:00 UTC', 10.1395835, 1.6895835, 46.5),
               ('2023-02-04 00:00:00 UTC', 11.439583500000001, 2.0854165, 45.0),
               ('2023-02-05 00:00:00 UTC', 9.7208335, 1.7083335, 46.0),
               ('2023-02-06 00:00:00 UTC', 13.3020835, 2.23125, 43.5),
               ('2023-02-07 00:00:00 UTC', 5.7229165, 2.377083, 47.5),
               ('2023-02-08 00:00:00 UTC', 7.6291665, 2.24375, 44.5),
               ('2023-02-09 00:00:00 UTC', 8.5208335, 2.2541665, 40.5),
               ('2023-02-10 00:00:00 UTC', 9.9086955, 7.333335, 39.5)
             ]
           )
         )
       );

    I risultati sono simili ai seguenti:

    +-------------------------+-------------+------------+--------------------+--------------------+---------------------+------------+------------+
    | date                    | temperature | is_anomaly | lower_bound        | upper_bound        | anomaly_probability | pm25       | wind_speed |
    +----------------------------------------------------------------------------------------------------------------------------------------------+
    | 2023-02-01 00:00:00 UTC | 44.0        | true       | 36.917405956304407 | 41.79980120796948  | 0.890904731626234   | 8.8166665  | 1.6525     |
    +----------------------------------------------------------------------------------------------------------------------------------------------+
    | 2023-02-02 00:00:00 UTC | 40.5        | false      | 34.622436643607685 | 40.884690866417984 | 0.53985850962605064 | 11.8354165 | 1.558333   |
    +--------------------------------------------------------------------------------------------------------------------+-------------------------+
    | 2023-02-03 00:00:00 UTC | 46.5        | true       | 33.769587937313183 | 40.7478502941026   | 0.97434506593220793 | 10.1395835 | 1.6895835  |
    +-------------------------+-------------+------------+--------------------+--------------------+---------------------+-------------------------+
    

Esegui la pulizia

  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.