시계열 모델의 CREATE MODEL 문

시계열 모델의 CREATE MODEL

BigQuery에서 시계열 모델을 만들려면 BigQuery ML CREATE MODEL 문을 사용하고 MODEL_TYPE'ARIMA'로 지정합니다.

BigQuery ML 시계열 모델 특징

ARIMA는 BigQuery ML 시계열에 사용되는 핵심 알고리즘으로 간주됩니다. 하지만 모델 생성 파이프라인에 사용되는 유일한 모델은 아닙니다. 파이프라인은 대략적으로 단계 실행 순서에 따라 나열된 다음 구성요소들로 구성됩니다.

  • 누락 값, 중복된 타임스탬프, 급증 이상치를 포함하는 입력 시계열과 시계열 기록에서의 갑작스러운 수준 변화를 고려한 자동 삭제 조정
  • 공휴일 효과 조정
  • Loess를 사용한 계절성 및 트렌드 분해(STL) 알고리즘을 사용한 계절성 및 트렌드 분해
  • 이중 지수 평활(ETS) 알고리즘을 사용한 계절성 외삽
  • 자동 초매개변수 조정을 위한 ARIMA 모델 및 auto.ARIMA 알고리즘을 사용한 트렌드 모델링. auto.ARIMA에서는 십여 개의 후보 모델이 병렬로 학습 및 평가됩니다. 최적 모델은 Akaike 정보 기준(AIC)이 가장 낮습니다.

TIME_SERIES_ID_COL 옵션을 사용해서 여러 시계열이 동시에 예측될 때는 슬롯만 충분한 경우 여러 파이프라인이 병렬로 실행됩니다.

CREATE MODEL 구문

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL}
model_name
OPTIONS(MODEL_TYPE = 'ARIMA'
  [, TIME_SERIES_TIMESTAMP_COL = string_value ]
  [, TIME_SERIES_DATA_COL = string_value ]
  [, TIME_SERIES_ID_COL = string_value ]
  [, HORIZON = int64_value ]
  [, AUTO_ARIMA = { TRUE | FALSE } ]
  [, AUTO_ARIMA_MAX_ORDER = int64_value ]
  [, NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value) ]
  [, DATA_FREQUENCY = { 'AUTO_FREQUENCY' | 'HOURLY' | 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'QUARTERLY' | 'YEARLY' } ]
  [, INCLUDE_DRIFT = { TRUE | FALSE } ]
  [, HOLIDAY_REGION = { 'GLOBAL' | 'NA' | 'JAPAC' | 'EMEA' | 'LAC' | 'AE' | ... } ])
AS query_statement

CREATE MODEL

지정된 데이터 세트에 새 BigQuery ML 모델을 만듭니다. 모델 이름이 있으면 CREATE MODEL은 오류를 반환합니다.

CREATE MODEL IF NOT EXISTS

지정된 데이터 세트에 현재 모델이 없는 경우에만 새 BigQuery ML 모델을 만듭니다.

CREATE OR REPLACE MODEL

새 BigQuery ML 모델을 만들고 지정된 데이터 세트에 있는 기존 모델을 동일한 이름으로 바꿉니다.

model_name

model_name은 만들거나 교체하려는 BigQuery ML 모델의 이름입니다. 모델 이름은 데이터 세트별로 고유해야 합니다. 다른 모델이나 테이블에서 같은 이름을 사용할 수 없습니다. 모델 이름은 BigQuery 테이블과 같은 이름 지정 규칙을 따라야 합니다. 모델 이름에는 다음이 포함될 수 있습니다.

  • 최대 1,024자(영문 기준)
  • 문자(대소문자), 숫자, 밑줄

model_name은 대소문자를 구분하지 않습니다.

기본 프로젝트를 구성하지 않은 경우 백틱을 포함하여 다음 형식으로 모델 이름 앞에 프로젝트 ID를 붙입니다.

`[PROJECT_ID].[DATASET].[MODEL]`

예:

`myproject.mydataset.mymodel`

CREATE MODEL은 다음 옵션을 지원합니다.

MODEL_TYPE

구문

MODEL_TYPE = 'ARIMA'

설명

모델 유형을 지정합니다. 시계열 모델을 만들려면 model_type'ARIMA'로 설정합니다.

model_option_list

model_option_list에서 항상 필요한 옵션에는 model_type, time_series_timestamp_col, time_series_data_col이 포함됩니다. 다른 옵션은 특정 시나리오에서만 필요합니다. 아래에서 자세한 내용을 참조하세요.

시계열 모델에는 다음 옵션이 지원됩니다.

TIME_SERIES_TIMESTAMP_COL

구문

TIME_SERIES_TIMESTAMP_COL = string_value

설명

시계열 모델의 타임스탬프 열 이름입니다.

인수

string_value'STRING'입니다.

TIME_SERIES_DATA_COL

구문

TIME_SERIES_DATA_COL = string_value

설명

시계열 모델의 데이터 열 이름입니다.

인수

string_value'STRING'입니다.

TIME_SERIES_ID_COL

구문

TIME_SERIES_ID_COL = string_value

설명

시계열 모델의 ID 열 이름입니다. 이 열은 사용자가 단일 쿼리를 사용해서 여러 시계열을 접합하고 예측하려고 할 때 사용됩니다. 다른 ID는 다른 시계열을 나타냅니다.

인수

string_value'STRING'입니다.

HORIZON

구문

HORIZON = int64_value

설명

예측할 시점 수입니다. 한 번에 여러 시계열을 예측할 때 이 매개변수는 각 시계열에 적용됩니다.

인수

값은 INT64입니다. 기본값은 1,000입니다. 최댓값은 10,000입니다.

AUTO_ARIMA

구문

AUTO_ARIMA = { TRUE | FALSE }

설명

학습 과정에 auto.ARIMA가 사용되는지 여부입니다. true이면 학습 중 최적의 비계절성 주문(예: p, d, q 튜플)을 자동으로 찾아서 d가 1일 때 선형 드리프트 항을 포함할지 여부를 결정합니다. false이면 사용자가 쿼리에 non_seasonal_order를 지정해야 합니다. 여러 시계열을 동시에 예측할 때는 각 시계열에 대해 auto.ARIMA 알고리즘을 사용해야 합니다. 따라서 이 옵션을 false로 설정하면 안 됩니다.

인수

값은 BOOL입니다. 기본값은 TRUE입니다.

AUTO_ARIMA_MAX_ORDER

구문

AUTO_ARIMA_MAX_ORDER = int64_value

설명

비계절성 p와 q의 합의 최댓값입니다. auto.ARIMA 알고리즘에서 매개변수 검색 공간을 제어합니다. 현재 허용되는 값은 (2, 3, 4, 5)입니다. 참고로 각 값의 경우 비계절성 d가 0 또는 2로 결정되면 평가할 (6, 10, 15, 21) 후보 모델이 있습니다. 비계절성 d가 1로 결정되면 기존의 모든 후보 모델에 고려해야 할 추가 드리프트 항이 있으므로 평가할 후보 모델의 수는 두 배가 됩니다. AUTO_ARIMA가 false로 설정되면 이 옵션을 사용할 수 없습니다.

인수

값은 INT64입니다. 기본값은 5입니다. 최솟값은 2이고 최댓값은 5입니다.

NON_SEASONAL_ORDER

구문

NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value)

설명

ARIMA 모델에 대한 비계절성 p, d, q의 튜플입니다. 기본값은 없으며 모두 지정해야 합니다. 이 옵션을 사용하려면 auto_arima를 명시적으로 false로 지정해야 합니다. 현재까지 p 및 q는 [0, 1, 2, 3, 4, 5]로 제한되고 d는 [0, 1, 2]로 제한됩니다. 여러 시계열을 동시에 예측할 때는 각 시계열에 대해 auto.ARIMA 알고리즘을 사용해야 합니다. 따라서 이 옵션이 사용 중지됩니다.

인수

(int64_value, int64_value, int64_value)는 3개의 'INT64'의 튜플입니다.

DATA_FREQUENCY

구문

DATA_FREQUENCY = { 'AUTO_FREQUENCY' | 'HOURLY' | 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'QUARTERLY' | 'YEARLY' }

설명

입력 시계열의 데이터 빈도입니다. 지원되는 가장 세밀한 세분성은 'HOURLY'입니다. 한 번에 여러 시계열을 예측할 때는 이 인수가 모든 개별 시계열에 적용됩니다.

인수

다음 값을 허용합니다.

'AUTO_FREQUENCY': 학습 과정이 데이터 빈도를 자동으로 추론합니다. 아래 나열된 값들 중 하나일 수 있습니다.

'HOURLY': 시간별 시계열

'DAILY': 일별 시계열

'WEEKLY': 주별 시계열

'MONTHLY': 월별 시계열

'QUARTERLY': 분기별 시계열

'YEARLY': 연도별 시계열

기본값은 'AUTO_FREQUENCY'입니다.

INCLUDE_DRIFT

구문

INCLUDE_DRIFT = { TRUE | FALSE }

설명

ARIMA 모델에 선형 드리프트 항이 포함되어야 하는지 여부입니다. 드리프트 항은 비계절성 d가 1일 때 적용할 수 있습니다.

  • auto-arima가 false로 설정된 경우 이 인수는 기본적으로 false로 설정됩니다. 비계절성 d가 1일 때는 true로 설정될 수 있으며, 그렇지 않으면 잘못된 쿼리 오류를 반환합니다.

  • auto-arima가 true로 설정된 경우 선형 드리프트 항을 포함할지 여부를 자동으로 결정합니다. 따라서 이 옵션은 auto-ARIMA에 대해 사용 중지됩니다.

인수

값은 BOOL입니다. 기본값은 FALSE이며, auto_arima에 대해 사용 중지됩니다.

HOLIDAY_REGION

구문

HOLIDAY_REGION = { 'GLOBAL' | 'NA' | 'JAPAC' | 'EMEA' | 'LAC' | 'AE' | ... }

설명

모델링에 적용되는 공휴일 효과를 기준으로 하는 지리적 리전입니다. 기본적으로 공휴일 효과 모델링은 사용 중지됩니다. 이를 사용하려면 이 옵션을 사용해서 공휴일 리전을 지정합니다.

인수

다음 값을 허용합니다.

1단계: 전 세계

  • 'GLOBAL'

2단계: 대륙 리전

  • 'NA': 북미
  • 'JAPAC': 일본 및 아시아 태평양
  • 'EMEA': 유럽, 중동, 아프리카
  • 'LAC': 라틴 아메리카 및 카리브해

3단계: 국가/리전

  • 'AE': 아랍에미리트
  • 'AR': 아르헨티나
  • 'AT': 오스트리아
  • 'AU': 오스트레일리아
  • 'BE': 벨기에
  • 'BR': 브라질
  • 'CA': 캐나다
  • 'CH': 스위스
  • 'CL': 칠레
  • 'CN': 중국
  • 'CO': 콜롬비아
  • 'CZ': 체코
  • 'DE': 독일
  • 'DK': 덴마크
  • 'DZ': 알제리
  • 'EC': 에콰도르
  • 'EE': 에스토니아
  • 'EG': 이집트
  • 'ES': 스페인
  • 'FI': 핀란드
  • 'FR': 프랑스
  • 'GB': 영국
  • 'GR': 그리스
  • 'HK': 홍콩
  • 'HU': 헝가리
  • 'ID': 인도네시아
  • 'IE': 아일랜드
  • 'IL': 이스라엘
  • 'IN': 인도
  • 'IR': 이란
  • 'IT': 이탈리아
  • 'JP': 일본
  • 'KR': 대한민국
  • 'LV': 라트비아
  • 'MA': 모로코
  • 'MX': 멕시코
  • 'MY': 말레이시아
  • 'NG': 나이지리아
  • 'NL': 네덜란드
  • 'NO': 노르웨이
  • 'NZ': 뉴질랜드
  • 'PE': 페루
  • 'PH': 필리핀
  • 'PK': 파키스탄
  • 'PL': 폴란드
  • 'PT': 포르투갈
  • 'RO': 루마니아
  • 'RS': 세르비아
  • 'RU': 러시아
  • 'SA': 사우디아라비아
  • 'SE': 스웨덴
  • 'SG': 싱가포르
  • 'SI': 슬로베니아
  • 'SK': 슬로바키아
  • 'TH': 태국
  • 'TR': 터키
  • 'TW': 타이완
  • 'UA': 우크라이나
  • 'US': 미국
  • 'VE': 베네수엘라
  • 'VN': 베트남
  • 'ZA': 남아프리카공화국

query_statement

AS query_statement 절은 학습 데이터 생성에 사용되는 표준 SQL 쿼리를 지정합니다. query_statement 절에서 지원되는 SQL 구문에 대한 자세한 내용은 표준 SQL 쿼리 구문을 참조하세요.

시계열 모델의 경우 사용자가 단일 시계열 또는 여러 시계열을 예측하는지 여부에 따라 query_statement에 2개 또는 3개 열이 포함되어야 합니다. 두 경우 모두 time_series_timestamp_coltime_series_data_col이 필요합니다. 여러 시계열을 예측할 때는 추가 time_series_id_col이 필요합니다.

지원되는 입력

CREATE MODEL 문은 시계열 입력 열에 대해 다음 데이터 유형을 지원합니다.

시계열 모델 입력에 지원되는 데이터 유형

BigQuery ML은 시계열 모델의 입력 열에 대해 여러 가지 표준 SQL 데이터 유형을 지원합니다. 각 열에 지원되는 데이터 유형은 다음과 같습니다.

Time series input column Supported types
time_series_timestamp_col TIMESTAMP
DATE
DATETIME
time_series_data_col INT64
NUMERIC
BIGNUMERIC
FLOAT64
time_series_id_col STRING
INT64

알려진 제한사항

시계열 모델의 CREATE MODEL 문은 다음 규칙을 준수해야 합니다.

  • time_series_id 열은 NULL 값을 포함할 수 없습니다. 이 열에 NULL 값이 포함된 경우 쿼리가 실패합니다.
  • 입력 시계열의 최대 길이는 1,000,000입니다. 여러 시계열을 동시에 예측할 때는 각 시계열에 제한이 적용됩니다.
  • ID 열을 사용해서 동시에 예측할 수 있는 최대 시계열 수는 100,000입니다.
  • ID 열을 사용해서 여러 시계열을 동시에 예측할 때 모델 접합을 실패하는 잘못된 시계열은 무시되고 평가 및 예측 결과에 표시되지 않습니다. 예시는 단일 포인트 시계열입니다.
  • horizon을 사용하여 지정되는 최대 예측 시점은 10,000입니다.
  • 지원되는 가장 세밀한 데이터 빈도는 '시간별'입니다.
  • 공휴일 효과 모델링은 약 5년 정도만 유효합니다.
  • BigQuery ML 학습 옵션 warm_start는 시계열 모델에서 지원되지 않습니다.

장기 실행 쿼리를 방지하는 이유 및 방법

ID 열을 사용하여 여러 시계열을 동시에 예측하면 장기 실행 쿼리로 이어질 수 있습니다.

  • ID 열을 사용하여 여러 시계열을 동시에 예측할 때는 슬롯 용량으로 인해 완전히 병렬로 예측되지 않습니다. 따라서 예측할 시계열이 많으면 쿼리를 완료하는 데 시간이 매우 오래 걸릴 수 있습니다. 쿼리 런타임은 슬롯 용량, 시계열 속성(예: 길이), 자동으로 결정된 non_seasonal_d에 따라 달라집니다. 예측할 시계열이 많은 경우(예: 100,000개), 먼저 소규모 시계열 배치(예: 1,000개)를 예측해서 쿼리 시간이 얼마나 걸리는지 확인하는 것이 좋습니다. 그러면 전체 시계열을 예측하는 데 걸리는 시간을 대략적으로 예상할 수 있습니다.
  • auto_arima_max_order 옵션을 사용하여 쿼리 런타임과 예측 정확성의 균형을 맞출 수 있습니다. 예를 들어 이 옵션에 기본값 5 대신 4를 사용하면 쿼리 런타임이 최소 30%까지 감소할 수 있습니다. 하지만 일부 시계열에서 예측 정확성이 약간 떨어질 수 있습니다.
  • 하나의 장기 실행 쿼리를 방지하려면 BigQuery 스크립팅을 사용할 수도 있습니다.

CREATE MODEL 예시

다음 예시에서는 기본 프로젝트의 mydatasetmymodel이라는 모델을 만듭니다.

단일 시계열 예측을 위한 시계열 모델 학습

이 예시에서는 시계열 모델을 만듭니다.

CREATE MODEL `project_id.mydataset.mymodel`
 OPTIONS(MODEL_TYPE='ARIMA',
         time_series_timestamp_col='date'
         time_series_data_col='transaction') AS
SELECT
  date,
  transaction
FROM
  `mydataset.mytable`

동시에 여러 시계열을 위한 여러 시계열 모델 학습

이 예시에서는 각 입력 시계열에 대해 하나씩 여러 시계열 모델을 만듭니다.

CREATE MODEL `project_id.mydataset.mymodel`
 OPTIONS(MODEL_TYPE='ARIMA',
         time_series_timestamp_col='date'
         time_series_data_col='transaction',
         time_series_id_col='company_name') AS
SELECT
  date,
  transaction,
  company_name
FROM
  `mydataset.mytable`

다음 단계