forecast
시계열 데이터의 추세를 분석하여 미래 값을 예측합니다. STL 분해(Seasonal and Trend decomposition using Loess)를 사용하여 시계열 데이터를 추세, 계절성, 잔차 성분으로 분리한 후, 추세 성분을 기반으로 예측 값과 신뢰 구간을 산출합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 없음 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 미지원 |
| 분산 실행 | 수집 노드에서 실행 (mapper) |
문법
옵션
period=INT- 시계열 데이터의 주기 길이. 지정하지 않으면 스펙트럴 밀도 추정(Spectral Density Estimation)을 사용하여 자동으로 주기를 계산합니다. 주기가 2 미만이면 비주기적 데이터로 판단하여 단순 선형 회귀를 적용합니다.
count=INT- 예측할 레코드 수 (기본값:
5) smoother={linear|loess|ets}- 추세 성분의 평활화 방법 (기본값:
ets)
linear: 선형 회귀loess: LOESS(국소 가중 산점도 평활법)ets: 지수 평활법
normalize=BOOL- Box-Cox 변환 적용 여부.
true로 설정하면 비선형적으로 증가하는 추세를 보정합니다. 추가 연산으로 인한 성능 영향이 있을 수 있습니다. (기본값:false) accumulate=BOOL- 신뢰 구간 누적 여부.
true로 설정하면 예측 시점이 멀어질수록 신뢰 구간이 넓어집니다. (기본값:true) confidence=INT- 신뢰 구간 백분율 (기본값:
95) seed=INT- 난수 시드 값. 동일한 입력에 대해 동일한 결과를 재현하려면 시드 값을 지정합니다.
time=STR- 시간 필드 이름. 시계열 데이터의 시간 간격을 계산하는 데 사용합니다. (기본값:
_time)
대상
FIELD- 예측 대상 시계열 데이터가 포함된 필드
[by FIELD, ...]- 그룹 필드.
by절을 지정하면 그룹 필드 값이 같은 레코드별로 독립적으로 예측합니다. 쉼표(,)로 구분하여 여러 필드를 지정할 수 있습니다.
입력 필드
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
| FIELD | 수치 | 필수 | 예측 대상 시계열 값. null이면 해당 파티션의 예측을 건너뜁니다. |
| time 필드 | 날짜 | 필수 | 시계열 데이터의 시간 값. 마지막 두 레코드의 시간 간격을 기반으로 예측 시간을 산출합니다. |
| by 필드 | 모든 타입 | 선택 | 그룹 기준 필드 |
출력 필드
| 필드 | 타입 | 설명 |
|---|---|---|
| _trend | 64비트 실수 | 입력 레코드의 추세 성분 값 |
| _future | 64비트 실수 | 예측 레코드의 예측 값 |
| _upper | 64비트 실수 | 예측 레코드의 신뢰 구간 상한 값 |
| _lower | 64비트 실수 | 예측 레코드의 신뢰 구간 하한 값 |
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 40502 | forecast 명령의 그룹 필드가 누락되었습니다. | by 절 뒤에 그룹 필드를 지정하지 않은 경우 |
| 40503 | forecast 명령의 대상 필드가 누락되었습니다. | 예측 대상 필드를 지정하지 않은 경우 |
| 40804 | 머신러닝 라이선스가 필요합니다. | 머신러닝 라이선스가 없는 경우 |
런타임 오류
해당 사항 없음
설명
forecast 명령어는 모든 입력 레코드를 수집한 후 시계열 예측을 수행합니다. 입력 레코드에는 추세 성분 값을 _trend 필드에 할당하여 그대로 출력하고, 예측 레코드는 _future, _upper, _lower 필드를 포함하여 입력 레코드 뒤에 추가합니다.
주기(period) 값이 2 이상이면 STL 분해를 사용하여 시계열 데이터를 추세, 계절성, 잔차 성분으로 분리한 후, smoother 옵션에 따라 추세 성분을 평활화하고 계절성을 반영하여 예측합니다. 주기가 2 미만이면 비주기적 데이터로 판단하여 단순 선형 회귀로 예측합니다.
time 옵션으로 지정한 시간 필드의 마지막 두 레코드 간격을 기반으로 예측 레코드의 시간 값을 산출합니다. timechart 명령어 등으로 시간 간격이 일정한 데이터를 준비한 후 사용하는 것을 권장합니다.
입력 데이터는 파티션별로 5건 이상 있어야 하며, period 값의 2배보다 입력 데이터 수가 많아야 합니다. 조건을 충족하지 않으면 입력 레코드를 그대로 출력합니다.
by 절을 사용하면 그룹 필드 값이 같은 레코드별로 독립적으로 예측합니다. 그룹별 정렬을 위해 내부적으로 임시 파일을 사용할 수 있습니다.
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
-
시계열 데이터의 예측 값 출력
table WEB_APACHE_SAMPLE | timechart span=1h count | forecast count웹 접근 로그를 1시간 단위로 집계한 후,
count필드의 시계열 예측 값 5건을 출력합니다. -
주기와 예측 수 지정
table WEB_APACHE_SAMPLE | timechart span=1h sum(bytes) as traffic | forecast period=24 count=12 traffic주기를 24(일간 패턴)로 지정하고, 향후 12건의 예측 데이터를 출력합니다.
-
시간 필드와 시드 값 지정
table WEB_APACHE_SAMPLE | timechart span=1h count | forecast period=24 time=_time seed=1234 count주기를 24(일간 패턴)로 지정하고, 시드 값을 1234로 고정하여 동일한 입력에 대해 재현 가능한 결과를 출력합니다.
-
그룹별 예측
table WEB_APACHE_SAMPLE | timechart span=1h count by method | forecast count=10 count by methodmethod필드 값이 같은 그룹별로 독립적으로count필드의 예측 값을 10건씩 출력합니다. -
Box-Cox 변환 적용
table WEB_APACHE_SAMPLE | timechart span=1h sum(bytes) as traffic | forecast period=24 normalize=true traffic비선형적으로 증가하는 추세를 보정하기 위해 Box-Cox 변환을 적용하여 예측합니다.
호환성
forecast 명령어는 소나 4.0 이전 버전부터 제공되었습니다.