다변수 시계열 예측 모델로 이상 감지 수행
이 튜토리얼에서는 다음 작업을 처리하는 방법을 보여줍니다.
ARIMA_PLUS_XREG
시계열 예측 모델을 만듭니다.- 모델에 대해
ML.DETECT_ANOMALIES
함수를 실행하여 시계열 데이터에서 이상을 감지합니다.
이 튜토리얼에서는 여러 미국 도시에서 수집된 일일 PM 2.5, 기온, 풍속 정보가 포함된 공개 epa_historical_air_quality
데이터 세트에서 다음 테이블을 사용합니다.
epa_historical_air_quality.pm25_nonfrm_daily_summary
epa_historical_air_quality.wind_daily_summary
epa_historical_air_quality.temperature_daily_summary
필수 권한
데이터 세트를 만들려면
bigquery.datasets.create
IAM 권한이 필요합니다.모델을 만들려면 다음 권한이 필요합니다.
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
추론을 실행하려면 다음 권한이 필요합니다.
bigquery.models.getData
bigquery.jobs.create
BigQuery에서 IAM 역할 및 권한에 대한 자세한 내용은 IAM 소개를 참조하세요.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
- BigQuery: You incur costs for the data you process in BigQuery.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
자세한 내용은 BigQuery 가격을 참조하세요.
시작하기 전에
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
데이터 세트 만들기
ML 모델을 저장할 BigQuery 데이터 세트를 만듭니다.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트 이름을 클릭합니다.
작업 보기 > 데이터 세트 만들기를 클릭합니다.
데이터 세트 만들기 페이지에서 다음을 수행합니다.
데이터 세트 ID에
bqml_tutorial
를 입력합니다.위치 유형에 대해 멀티 리전을 선택한 다음 US(미국 내 여러 리전)를 선택합니다.
공개 데이터 세트는
US
멀티 리전에 저장됩니다. 편의상 같은 위치에 데이터 세트를 저장합니다.- 나머지 기본 설정은 그대로 두고 데이터 세트 만들기를 클릭합니다.
bq
새 데이터 세트를 만들려면 --location
플래그와 함께 bq mk
명령어를 실행합니다. 사용할 수 있는 전체 파라미터 목록은 bq mk --dataset
명령어 참조를 확인하세요.
데이터 위치가
US
로 설정되고 설명이BigQuery ML tutorial dataset
인bqml_tutorial
데이터 세트를 만듭니다.bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
--dataset
플래그를 사용하는 대신 이 명령어는-d
단축키를 사용합니다.-d
와--dataset
를 생략하면 이 명령어는 기본적으로 데이터 세트를 만듭니다.데이터 세트가 생성되었는지 확인합니다.
bq ls
API
데이터 세트 리소스가 정의된 datasets.insert
메서드를 호출합니다.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
학습 데이터 준비
PM2.5, 온도, 풍속 데이터는 별도의 테이블에 있습니다.
이러한 공개 테이블의 데이터를 결합하여 학습 데이터의 bqml_tutorial.seattle_air_quality_daily
테이블을 만듭니다.
bqml_tutorial.seattle_air_quality_daily
에는 다음 열이 포함됩니다.
date
: 관측 날짜PM2.5
: 일일 평균 PM2.5 값wind_speed
: 일일 평균 풍속temperature
: 일일 최고 기온
새 테이블에는 2009년 8월 11일부터 2022년 1월 31일까지의 일일 데이터가 포함됩니다.
BigQuery 페이지로 이동합니다.
SQL 편집자 창에서 다음 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)
모델 만들기
bqml_tutorial.seattle_air_quality_daily
의 데이터를 학습 데이터로 사용하여 다변수 시계열 모델을 만듭니다.
BigQuery 페이지로 이동합니다.
SQL 편집자 창에서 다음 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`;
쿼리가 완료되는 데 몇 초 정도 걸리며 그 이후에는
arimax_model
모델이 탐색기 창의bqml_tutorial
데이터 세트에 표시됩니다.이 쿼리에서는
CREATE MODEL
문을 사용하여 모델을 만들므로 쿼리 결과가 없습니다.
이전 데이터에 이상 감지 수행
모델을 학습시키는 데 사용한 이전 데이터에서 이상 감지를 실행합니다.
BigQuery 페이지로 이동합니다.
SQL 편집자 창에서 다음 SQL 문을 실행합니다.
SELECT * FROM ML.DETECT_ANOMALIES ( MODEL `bqml_tutorial.arimax_model`, STRUCT(0.6 AS anomaly_prob_threshold) ) ORDER BY date ASC;
결과는 다음과 유사합니다.
+-------------------------+-------------+------------+--------------------+--------------------+---------------------+ | 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 | +-------------------------+-------------+------------+--------------------+--------------------+---------------------+
새 데이터에 이상 감지 수행
생성되는 새 데이터에서 이상 감지를 실행합니다.
BigQuery 페이지로 이동합니다.
SQL 편집자 창에서 다음 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) ] ) ) );
결과는 다음과 유사합니다.
+-------------------------+-------------+------------+--------------------+--------------------+---------------------+------------+------------+ | 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 | +-------------------------+-------------+------------+--------------------+--------------------+---------------------+-------------------------+
삭제
- In the Google Cloud 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.