forecast

시계열 데이터의 추세를 분석하여 미래 값을 예측합니다. 주기가 있는 데이터는 STL 분해(Seasonal and Trend decomposition using Loess)를 사용하여 추세, 계절성, 잔차 성분으로 분리한 후 추세 성분을 기반으로 예측 값을 산출하며, 입력 레코드에는 예측 기댓값과의 편차에 기반한 이상 스코어를 함께 부여합니다.

명령어 속성

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

문법

forecast [count=INT] [period=INT] [predictor={ets|linear|loess|constant}] [normalize=BOOL] [accumulate=BOOL] [confidence=DOUBLE] [seed=INT] [time=STR] [method={stl|linear}] [alpha=DOUBLE] FIELD [by FIELD, ...]

옵션

count=INT
예측할 레코드 수. 1 이상의 자연수여야 합니다. (기본값: 5)
period=INT
시계열 데이터의 주기 길이. 지정하는 경우 3 이상의 자연수여야 합니다. 지정하지 않으면 스펙트럴 밀도 추정(Spectral Density Estimation)을 사용하여 자동으로 주기를 계산하며, 계산된 주기가 2 미만이면 비주기적 데이터로 판단하여 단순 선형 회귀를 적용합니다.
predictor={ets|linear|loess|constant}
method=stl(기본값)로 주기적 데이터를 분해했을 때, 추세 성분을 예측하는 방법 (기본값: ets)
  • ets: 지수 평활법(Exponential Smoothing)
  • linear: 선형 회귀
  • loess: LOESS(국소 가중 산점도 평활법)
  • constant: 추세 성분의 평균값을 상수로 사용합니다. 뚜렷한 추세가 없는 시계열에 적합합니다.

이전 버전에서 사용하던 smoother 옵션 이름은 predictor의 별칭으로 계속 인식됩니다. method=linear이거나 비주기적 데이터로 판단된 경우에는 이 옵션이 적용되지 않습니다.

normalize=BOOL
Box-Cox 변환 적용 여부. true로 설정하면 비선형적으로 증가하는 추세를 보정합니다. 추가 연산으로 인한 성능 영향이 있을 수 있습니다. (기본값: false)
accumulate=BOOL
신뢰 구간 누적 여부. true로 설정하면 예측 시점이 멀어질수록 신뢰 구간이 넓어집니다. (기본값: true)
confidence=DOUBLE
상한·하한 구간과 이상 스코어 계산에 사용하는 신뢰 구간 백분율. 0 이상 100 미만의 실수여야 합니다. (기본값: 95)
seed=INT
난수 시드 값. 동일한 입력에 대해 동일한 결과를 재현하려면 시드 값을 지정합니다.
time=STR
시간 필드 이름. 시계열 데이터의 시간 간격을 계산하는 데 사용합니다. (기본값: _time)
method={stl|linear}
시계열 분해 알고리즘 (기본값: stl). 계산된(또는 지정된) 주기가 2 미만인 비주기적 데이터에는 이 옵션과 무관하게 단순 선형 회귀가 적용됩니다.
  • stl: STL 분해를 사용하여 추세·계절성·잔차 성분으로 분리한 후, predictor 옵션에 따라 추세 성분을 예측합니다.
  • linear: 주기별 평균값(계절성)과 선형 회귀(추세)를 결합하여 예측합니다. 이 방식에서는 predictor 옵션이 적용되지 않습니다.
alpha=DOUBLE
이상 스코어(_score) 계산에 사용하는 감쇠 계수. 0 이상 1 이하의 실수여야 합니다. 각 레코드의 이상 스코어는 이전 레코드의 _score 값 * alpha + 현재 레코드의 확률 기반 스코어로 누적 계산됩니다. (기본값: 0.6)

대상

FIELD
예측 대상 시계열 데이터가 포함된 필드
[by FIELD, ...]
그룹 필드. by 절을 지정하면 그룹 필드 값이 같은 레코드별로 독립적으로 예측합니다. 쉼표(,)로 구분하여 여러 필드를 지정할 수 있습니다.

입력 필드

필드타입필수 여부설명
FIELD수치필수예측 대상 시계열 값. 파티션의 첫 레코드에서 이 필드 값이 null이면 해당 파티션의 예측을 건너뜁니다.
time 필드날짜필수시계열 데이터의 시간 값. 마지막 두 레코드의 시간 간격을 기반으로 예측 시간을 산출합니다.
by 필드모든 타입선택그룹 기준 필드

출력 필드

필드타입설명
_trend64비트 실수입력 레코드의 추세(trend) 성분 값. normalize=true인 경우 Box-Cox 역변환을 적용한 값입니다.
_expected64비트 실수입력 레코드의 예측 기댓값(추세와 계절성을 반영). _upper/_lower/_score 계산의 기준값입니다.
_score64비트 실수입력 레코드의 이상 스코어. 실제 값과 _expected의 차이가 클수록 커지며, alpha 옵션에 따라 이전 레코드의 스코어를 누적 반영합니다.
_upper64비트 실수신뢰 구간 상한 값. 입력 레코드는 _expected, 예측 레코드는 _future를 기준으로 계산합니다.
_lower64비트 실수신뢰 구간 하한 값. 입력 레코드는 _expected, 예측 레코드는 _future를 기준으로 계산합니다.
_future64비트 실수예측 레코드의 예측 값
_forecast_error문자열입력 레코드에 대해 예측을 수행할 수 없는 경우의 원인 메시지. 이 필드가 있는 레코드는 _trend 등 나머지 예측 관련 필드가 채워지지 않습니다.

오류 코드

파싱 오류
오류 코드메시지설명
40501forecast 명령의 period 값은 3 이상의 자연수여야 합니다.period 값이 3 미만이거나 숫자가 아닌 경우
40502forecast 명령의 그룹 필드가 누락되었습니다.by 절 뒤에 그룹 필드를 지정하지 않은 경우
40503forecast 명령의 대상 필드가 누락되었습니다.예측 대상 필드를 지정하지 않은 경우
40504머신러닝 라이센스가 필요합니다.머신러닝 라이선스가 없는 경우
40505forecast 명령의 method 값이 올바르지 않습니다. 유효값은 stl, linear 입니다.method 값이 stl, linear가 아닌 경우
40506forecast 명령의 count 값은 1 이상의 자연수여야 합니다.count 값이 1 미만이거나 숫자가 아닌 경우
40507forecast 명령의 predictor 값이 올바르지 않습니다. 유효값은 ets, linear, loess, constant 입니다.predictor(또는 smoother) 값이 네 값 중 하나가 아닌 경우
40510forecast 명령의 confidence 값은 0~100 사이의 실수여야 합니다.confidence 값이 0 미만이거나 100 이상이거나 숫자가 아닌 경우
40511forecast 명령의 seed 값은 자연수여야 합니다.seed 값이 숫자가 아닌 경우
40512forecast 명령의 alpha 값은 0~1 사이의 실수여야 합니다.alpha 값이 0 미만이거나 1을 초과하거나 숫자가 아닌 경우
런타임 오류
오류 코드메시지설명
-cannot sort forecast item for query [id]by 절 사용 중 그룹 정렬용 임시 파일 처리에 실패한 경우. 쿼리가 오류로 중단됩니다.

설명

forecast 명령어는 모든 입력 레코드를 수집한 후 시계열 예측을 수행합니다. 입력 레코드에는 추세 성분(_trend), 예측 기댓값(_expected), 신뢰 구간(_upper, _lower), 이상 스코어(_score)를 추가하여 그대로 출력하고, 예측 레코드는 _future, _upper, _lower 필드를 포함하여 입력 레코드 뒤에 count 옵션 개수만큼 추가합니다.

주기(period) 값이 2 이상이면 method 옵션에 따라 STL 분해(stl, 기본값) 또는 주기별 평균과 선형 회귀를 결합한 방식(linear)으로 추세·계절성을 분리하여 예측합니다. predictor 옵션은 method=stl일 때만 적용되며, 추세 성분을 어떤 방법으로 예측할지 결정합니다. 주기가 2 미만이면 비주기적 데이터로 판단하여 method·predictor 옵션과 무관하게 단순 선형 회귀로 예측합니다.

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

입력 데이터는 다음 조건을 모두 충족해야 정상적으로 예측을 수행하며, 그렇지 않으면 원본 레코드에 _forecast_error 필드를 추가하여 그대로 출력합니다.

  • 파티션별로 5건 이상의 레코드가 있어야 합니다.
  • 파티션의 첫 레코드에서 예측 대상 필드 값이 null이 아니어야 합니다.
  • period 옵션을 지정한 경우, 입력 데이터 수가 period 값의 2배 이상이어야 합니다.
  • time 옵션으로 지정한 시간 필드 값이 파티션의 마지막 두 레코드에 존재하고 날짜 타입이어야 합니다(이 두 레코드의 간격으로 예측 시간 값을 계산하기 때문입니다).

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

사용 예

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

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

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

    웹 접근 로그를 1시간 단위로 집계한 후, count 필드의 시계열 예측 값 5건과 각 입력 레코드의 이상 스코어(_score)를 출력합니다.

  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 변환을 적용하여 예측합니다.

  6. 추세가 없는 시계열에 상수형 예측자 사용

    table WEB_APACHE_SAMPLE
    | timechart span=1h count
    | forecast period=24 predictor=constant alpha=0.8 count
    

    뚜렷한 추세가 없는 시계열에 상수형 예측자(predictor=constant)를 사용하고, 이상 스코어 누적 비중(alpha)을 0.8로 높여 직전 스코어의 영향을 더 크게 반영합니다.

변경 이력

대상도입 릴리스
forecast 명령어소나 4.0 이전 버전
predictor·method·alpha 옵션4.0.2609.0
_expected·_score·_forecast_error 출력 필드4.0.2609.0
입력 레코드에 _upper/_lower 신뢰 구간 부여4.0.2609.0 (이전에는 예측 레코드에만 부여)
period·count·confidence·seed·alpha 값 검증(오류 코드 40501, 40505-40507, 40510-40512)4.0.2609.0
머신러닝 라이선스 오류 코드가 40804에서 40504로 변경4.0.2609.0 (4.0.2511.3 이하와 5.0 계열은 40804)