시계열 모델의 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_col
및 time_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
예시
다음 예시에서는 기본 프로젝트의 mydataset
에 mymodel
이라는 모델을 만듭니다.
단일 시계열 예측을 위한 시계열 모델 학습
이 예시에서는 시계열 모델을 만듭니다.
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`
다음 단계
- BigQuery ML에서 시계열 모델을 사용하는 가이드 진행하기: