Realizar a detecção de anomalias com um modelo de previsão de série temporal multivariável
Este tutorial mostra como fazer as seguintes tarefas:
- Crie um
modelo de previsão de série temporal
ARIMA_PLUS_XREG. - Detecte anomalias nos dados da série temporal executando a
função
ML.DETECT_ANOMALIESno modelo.
Neste tutorial, usamos as seguintes tabelas do conjunto de dados público epa_historical_air_quality, que contém informações diárias de PM2,5, temperatura e velocidade do vento coletadas de várias cidades dos EUA:
epa_historical_air_quality.pm25_nonfrm_daily_summaryepa_historical_air_quality.wind_daily_summaryepa_historical_air_quality.temperature_daily_summary
Permissões necessárias
Para criar o conjunto de dados, é preciso ter a permissão de IAM
bigquery.datasets.create.Para criar o modelo, você precisa das seguintes permissões:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Para executar a inferência, você precisa das seguintes permissões:
bigquery.models.getDatabigquery.jobs.create
Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Introdução ao IAM.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Cloud de Confiance by S3NS:
- BigQuery: You incur costs for the data you process in BigQuery.
Para saber mais, acesse a página Preços do BigQuery.
Antes de começar
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
-
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. No console do Cloud de Confiance , acesse a página BigQuery.
No painel Explorer, clique no nome do seu projeto.
Clique em Ver ações > Criar conjunto de dados.
Na página Criar conjunto de dados, faça o seguinte:
Para o código do conjunto de dados, insira
bqml_tutorial.Em Tipo de local, selecione Multirregião e EUA (várias regiões nos Estados Unidos).
Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.
Crie um conjunto de dados chamado
bqml_tutorialcom o local dos dados definido comoUSe uma descrição deBigQuery ML tutorial dataset:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Em vez de usar a flag
--dataset, o comando usa o atalho-d. Se você omitir-de--dataset, o comando vai criar um conjunto de dados por padrão.Confirme se o conjunto de dados foi criado:
bq lsdate: a data da observação.PM2.5: o valor médio de PM2,5 para cada diawind_speed: a velocidade média do vento para cada diatemperature: a temperatura mais alta de cada diaAcessar a página do BigQuery.
No painel Editor SQL, execute a seguinte instrução 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)
Acessar a página do BigQuery.
No painel Editor SQL, execute a seguinte instrução 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` WHERE date < "2023-02-01";
A consulta leva alguns segundos para ser concluída. Depois disso, o modelo
arimax_modelaparece no conjunto de dadosbqml_tutoriale pode ser acessado no painel Explorer.Como a consulta usa uma instrução
CREATE MODELpara criar um modelo, não há resultados de consulta.Acessar a página do BigQuery.
No painel Editor SQL, execute a seguinte instrução SQL:
SELECT * FROM ML.DETECT_ANOMALIES ( MODEL `bqml_tutorial.arimax_model`, STRUCT(0.6 AS anomaly_prob_threshold) ) ORDER BY date ASC;
Os resultados são semelhantes aos seguintes:
+-------------------------+-------------+------------+--------------------+--------------------+---------------------+ | date | temperature | is_anomaly | lower_bound | upper_bound | anomaly_probability | +--------------------------------------------------------------------------------------------------------------------+ | 2009-08-11 00:00:00 UTC | 70.1 | false | 67.647370742988727 | 72.552629257011262 | 0 | +--------------------------------------------------------------------------------------------------------------------+ | 2009-08-12 00:00:00 UTC | 73.4 | false | 71.7035428351283 | 76.608801349150838 | 0.20478819992561115 | +--------------------------------------------------------------------------------------------------------------------+ | 2009-08-13 00:00:00 UTC | 64.6 | true | 67.740408724826068 | 72.6456672388486 | 0.945588334903206 | +-------------------------+-------------+------------+--------------------+--------------------+---------------------+
Acessar a página do BigQuery.
No painel Editor SQL, execute a seguinte instrução 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) ] ) ) );
Os resultados são semelhantes aos seguintes:
+-------------------------+-------------+------------+--------------------+--------------------+---------------------+------------+------------+ | date | temperature | is_anomaly | lower_bound | upper_bound | anomaly_probability | pm25 | wind_speed | +----------------------------------------------------------------------------------------------------------------------------------------------+ | 2023-02-01 00:00:00 UTC | 44.0 | true | 36.89918003713138 | 41.8044385511539 | 0.88975675709801583 | 8.8166665 | 1.6525 | +----------------------------------------------------------------------------------------------------------------------------------------------+ | 2023-02-02 00:00:00 UTC | 40.5 | false | 34.439946284051572 | 40.672021330796483 | 0.57358239699845348 | 11.8354165 | 1.558333 | +--------------------------------------------------------------------------------------------------------------------+-------------------------+ | 2023-02-03 00:00:00 UTC | 46.5 | true | 33.615139992931191 | 40.501364463964549 | 0.97902867696346974 | 10.1395835 | 1.6895835 | +-------------------------+-------------+------------+--------------------+--------------------+---------------------+-------------------------+
- In the Cloud de Confiance console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar seu modelo de ML.
Console
bq
Para criar um novo conjunto de dados, utilize o
comando bq mk
com a sinalização --location. Para obter uma lista completa de parâmetros, consulte a
referência
comando bq mk --dataset.
API
Chame o método datasets.insert com um recurso de conjunto de dados definido.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.
Preparar os dados de treinamento
Os dados de PM 2.5, temperatura e velocidade do vento estão em tabelas separadas.
Crie a tabela bqml_tutorial.seattle_air_quality_daily de dados de treinamento combinando os dados nessas tabelas públicas.
bqml_tutorial.seattle_air_quality_daily contém as seguintes colunas:
A nova tabela tem dados diários de 11 de agosto de 2009 a 31 de janeiro de 2022.
Criar o modelo
Crie um modelo de série temporal multivariável usando os dados de bqml_tutorial.seattle_air_quality_daily como dados de treinamento.
Realizar detecção de anomalias em dados históricos
Execute a detecção de anomalias nos dados históricos usados para treinar o modelo.
Realizar detecção de anomalias em dados novos
Execute a detecção de anomalias nos novos dados gerados.