forecast

시계열 데이터의 추세를 분석하여 미래 값을 예측합니다. STL 분해(Seasonal and Trend decomposition using Loess)를 사용하여 시계열 데이터를 추세, 계절성, 잔차 성분으로 분리한 후, 추세 성분을 기반으로 예측 값과 신뢰 구간을 산출합니다.

명령어 속성

항목설명
명령어 유형가공 쿼리
필요 권한없음
라이선스 사용량해당 없음
병렬 실행미지원
분산 실행수집 노드에서 실행 (mapper)

문법

forecast [period=INT] [count=INT] [smoother={linear|loess|ets}] [normalize=BOOL] [accumulate=BOOL] [confidence=INT] [seed=INT] [time=STR] FIELD [by FIELD, ...]

옵션

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 필드모든 타입선택그룹 기준 필드

출력 필드

필드타입설명
_trend64비트 실수입력 레코드의 추세 성분 값
_future64비트 실수예측 레코드의 예측 값
_upper64비트 실수예측 레코드의 신뢰 구간 상한 값
_lower64비트 실수예측 레코드의 신뢰 구간 하한 값

오류 코드

파싱 오류
오류 코드메시지설명
40502forecast 명령의 그룹 필드가 누락되었습니다.by 절 뒤에 그룹 필드를 지정하지 않은 경우
40503forecast 명령의 대상 필드가 누락되었습니다.예측 대상 필드를 지정하지 않은 경우
40804머신러닝 라이선스가 필요합니다.머신러닝 라이선스가 없는 경우
런타임 오류

해당 사항 없음

설명

forecast 명령어는 모든 입력 레코드를 수집한 후 시계열 예측을 수행합니다. 입력 레코드에는 추세 성분 값을 _trend 필드에 할당하여 그대로 출력하고, 예측 레코드는 _future, _upper, _lower 필드를 포함하여 입력 레코드 뒤에 추가합니다.

주기(period) 값이 2 이상이면 STL 분해를 사용하여 시계열 데이터를 추세, 계절성, 잔차 성분으로 분리한 후, smoother 옵션에 따라 추세 성분을 평활화하고 계절성을 반영하여 예측합니다. 주기가 2 미만이면 비주기적 데이터로 판단하여 단순 선형 회귀로 예측합니다.

time 옵션으로 지정한 시간 필드의 마지막 두 레코드 간격을 기반으로 예측 레코드의 시간 값을 산출합니다. timechart 명령어 등으로 시간 간격이 일정한 데이터를 준비한 후 사용하는 것을 권장합니다.

입력 데이터는 파티션별로 5건 이상 있어야 하며, period 값의 2배보다 입력 데이터 수가 많아야 합니다. 조건을 충족하지 않으면 입력 레코드를 그대로 출력합니다.

by 절을 사용하면 그룹 필드 값이 같은 레코드별로 독립적으로 예측합니다. 그룹별 정렬을 위해 내부적으로 임시 파일을 사용할 수 있습니다.

사용 예

이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.

  1. 시계열 데이터의 예측 값 출력

    table WEB_APACHE_SAMPLE
    | timechart span=1h count
    | forecast count
    

    웹 접근 로그를 1시간 단위로 집계한 후, count 필드의 시계열 예측 값 5건을 출력합니다.

  2. 주기와 예측 수 지정

    table WEB_APACHE_SAMPLE
    | timechart span=1h sum(bytes) as traffic
    | forecast period=24 count=12 traffic
    

    주기를 24(일간 패턴)로 지정하고, 향후 12건의 예측 데이터를 출력합니다.

  3. 시간 필드와 시드 값 지정

    table WEB_APACHE_SAMPLE
    | timechart span=1h count
    | forecast period=24 time=_time seed=1234 count
    

    주기를 24(일간 패턴)로 지정하고, 시드 값을 1234로 고정하여 동일한 입력에 대해 재현 가능한 결과를 출력합니다.

  4. 그룹별 예측

    table WEB_APACHE_SAMPLE
    | timechart span=1h count by method
    | forecast count=10 count by method
    

    method 필드 값이 같은 그룹별로 독립적으로 count 필드의 예측 값을 10건씩 출력합니다.

  5. Box-Cox 변환 적용

    table WEB_APACHE_SAMPLE
    | timechart span=1h sum(bytes) as traffic
    | forecast period=24 normalize=true traffic
    

    비선형적으로 증가하는 추세를 보정하기 위해 Box-Cox 변환을 적용하여 예측합니다.

호환성

forecast 명령어는 소나 4.0 이전 버전부터 제공되었습니다.