본문으로 건너뛰기
버전: docs v25.02

FCST Features

Updated 2024.05.05

기능 개요

FCST의 pipeline

AI Contents의 pipeline은 기능 단위인 asset의 조합으로 이루어져 있습니다. FCST은 총 5가지 asset의 조합으로 pipeline이 구성되어 있습니다.  

Train pipeline

	Input - Readiness - Preprocess - Train

Inference pipeline

	Input - Readiness - Preprocess - Inference- Output

각 단계는 asset으로 구분됩니다.   각 단계는 asset으로 구분됩니다.

Input asset

train과 inference 데이터 load하기 Forecasting은 학습 시에 time_column과 y_column이 필수적으로 필요하며, x_covariates, static_covariates, groupkey_column 등은 선택적으로 사용될 수 있는 tableau 형태의 데이터 구조에서 작동합니다. Input asset에서는 train set을 읽어 다음 asset으로 전달하는 역할을 수행합니다. 만약 예측하고자 하는 구간이 train set의 마지막 시점 이후라면, inference 단계에서는 train 단계와 동일하게 설정하면 됩니다.

Readiness asset

train과 inference 데이터의 검증을 수행합니다. 데이터의 정합성을 확인하고, 필요한 경우 데이터를 수정하거나 보완합니다. 예를 들어, 시계열 데이터의 경우 시간 format이 올바르게 설정되었는지, 중복된 시간 값이 없는지 등을 확인합니다.

Preprocess asset

readiness asset을 통해 검증받은 train 또는 inference 데이터를 전달받고 시계열 데이터의 특성을 고려한 결측치 처리, 이상치 제거, 스케일링 등이 이루어집니다. 또한, 시계열 데이터의 정상성 검정 등을 통해 모델에 적합한 형태로 데이터를 변환하기도 합니다.

Train asset

Forecasting에서 train asset은 많은 역할을 수행합니다. 우선 preprocess asset을 통해 전처리된 train 데이터를 전달받고 실험계획서에 미리 작성한 모델명과 모델 파라미터에 맞게 모델을 생성하고 학습을 진행합니다. 학습이 완료되고 나면 학습 모델과 모델 성능 결과를 저장합니다.

Inference asset

inference asset에서는 input asset에서 전달받은 inference 데이터를 기반으로 데이터를 읽습니다. 이전 학습 단계에서 저장한 최적의 모델을 불러와서 예측을 수행하고 결과를 저장합니다. 운영을 위한 파일은 inference_summary.yaml도 저장되고 추론값은 output에 저장됩니다.

Output asset

inference 결과를 불러와서 과제에 적합한 형태로 저장합니다.



사용 팁

모델 선택하기

현재 지원되는 모델은 nbeats 입니다. nbeats는 다양한 복잡한 비선형 패턴을 잘 학습하며, 이를 바탕으로 정확한 예측을 수행할 수 있습니다. 어떤 데이터에 대해서도 안정적인 학습과 추론이 가능하며, interpretable 모드가 제공되어 모델의 예측을 이해하는 XAI에 활용할 수 있습니다.

Validation 수행하기

experimental_plan.yaml의 train asset에서 do_Validation값을 True로 설정하면 아래 도표와 같이 cv_numbers의 입력값에 따라 cross validation을 수행합니다. Expanding Window 방식을 사용하여 가능한 모든 과거 데이터를 활용하는 validation 방법을 채택하였습니다. 이 방법은 가능한 모든 과거 데이터를 활용하기 때문에 데이터 활용성과 모델의 안정성을 기반으로 성능을 평가하는데 유용합니다.

|cv_numbers| number of validation| 1st validation | 2nd validation | 3rd validation | ... |---|---| |1| 1 | train 데이터( : - forecast_period), validation 데이터(- forecast_period : ) | | |...| |2| 2 | train 데이터( : - forecast_period), validation 데이터(- forecast_period : ) | train 데이터( : -2 x forecast_period),validation 데이터(-2 x forecast_period : -1 x forecast_period)| |...| |3| 3| train 데이터( : - forecast_period), validation 데이터(- forecast_period : ) | train 데이터( : -2 x forecast_period),validation 데이터(-2 x forecast_period : -1 x forecast_period) |train 데이터( : -3 x forecast_period), validation 데이터(-3 x forecast_period : -2 x forecast_period)|...| |...|...|...|...|...|...|

Hyper-parameters

최적화 현재 지원되는 최적화 알고리즘 중 하나는 Optuna입니다. Optuna는 TPE(Tree-structured Parzen Estimator) 알고리즘을 사용하여 최적화를 수행합니다. 초기 단계에서는 랜덤한 포인트 몇 개를 샘플링하여 모델을 구축하고, 이를 바탕으로 최적화를 진행합니다. TPE 알고리즘은 최적화 과정이 진행됨에 따라 모델의 성능이 제한될 수 있지만, 빠른 수렴이 가능한 장점이 있습니다.

전처리 취사선택

다양한 시나리오와 데이터에 따라 필요한 전처리 기능을 유연하게 선택할 수 있습니다. 사용자는 복잡한 전처리 과정을 깊이 이해하지 않아도 데이터 분석에 집중할 수 있어 업무 효율성이 높아집니다.


 


기능 상세

Forecasting의 다양한 기능을 활용하기 위한 상세 설명입니다.

Train pipeline: Input asset

Load train dataset file

input asset에 입력된 train/inference 경로를 통해 데이터를 로드합니다.

Train pipeline: Readiness asset

Readiness asset에 입력된 값과 로드한 데이터 간의 정합성을 확인하고, 중복을 제거하며, 시간 형식을 통일하는 등 시계열 알고리즘이 동작하는데 필요한 기본 사항들을 사전에 점검하고 문제가 발생하면 에러를 발생시킵니다. 검사 후 readiness 활용 값은 "./train_artifacts/models/readiness/readiness_config.json"에 저장됩니다.

column consistency

데이터셋의 컬럼이 yaml의 column parameters와 일치하는지 검사합니다. yaml에 작성된 컬럼(필수: time_column, y_column, 선택: x_covariates, static_covariates, groupkey_column)이 데이터셋의 컬럼에 존재하지 않는 경우 에러 발생합니다.

check time column format

time 컬럼의 형식 확인합니다. yaml에 time_column, time_format이 작성되어 있지 않거나 time_format에 오류가 있어서 time_column이 입력된 time_format으로 변환되지 않을 때 에러 발생합니다.

check y column format

y 컬럼의 형식 확인합니다. y 컬럼이 float로 변환할 수 없는 형식일 때 에러 발생합니다.

check duplicated timeseries

중복된 time indices가 존재하는지 확인합니다. unique_key_columns(=하나의 timeseries인 경우 time_column, 다수의 timeseries인 경우 group_key+time_column) 기준으로 중복된 열이 있을 경우, 마지막 열만 남기고 나머지는 삭제합니다.

check static_covariate consistency

같은 group_key 안에 있는 static covariates가 일관성을 유지하는지 확인합니다. 에러 발생 없이 static_cov_unify_method에 따라 static covariates를 통일시킵니다.

check timeseries length

Deep Learning 모델을 생성하기 위해 필요한 최소한의 시계열 길이 확인합니다. unique_key_columns 기준으로 각각의 group들의 총 시계열 길이가 input_chunk_length + 3 * forecast_periods 보다 작은 group들이 전체 group의 20% 이상일 때 에러 발생합니다.

Train pipeline: Preprocess asset

Readiness check 이후 데이터는 bizpreprocess asset을 통해 추가적인 전처리를 수행할 수 있습니다. 이는 알고리즘을 동작시키는데 필수적인 전처리는 아니지만, 사용자의 시나리오 또는 다른 목적에 따라 전처리를 기능별로 선택할 수 있습니다. 기능 별 설명은 다음 표를 참조해 주세요. 전처리 후 bizpreprocess에 활용된 config, scaler, categorical encoder는 "./train_artifacts/models/readiness/"에 저장됩니다.

normalizing_method

minmax 또는 z-norm을 활용하여 데이터를 정규화 합니다.시계열 데이터가 서로 다른 스케일을가지고 있거나 정규 분포와 거리가 멀 때 사용하는 것을 추천합니다.

linear_interpolation

그룹별로 시계열 데이터 중간에 결측치가 있는 경우 linear interpolation을 통해 보간합니다.데이터의 결측치를 채우기 위해 사용해야 합니다.

global_padding_interpolation

그룹별로 최소 시간 인덱스와 최대 시간 인덱스로 길이를 맞춰주고, 공백으로 채워진 경우 global_padding_method를 참조하여 padding을 진행합니다. 다수의 timeseries를 가지고 있고 각각의 timeseries 길이가 다를 때, inference 시작 시점을 통일하기 위해서 필요한 작업입니다.

global_padding_method

padding 하는 방법으로 "zero"를 입력하면 0으로 padding, "mean"을 입력하면 그룹별 평균값으로 padding, "same"을 입력하면 그룹별 가장 이른 값과 가장 최근 값으로 양 쪽의 결측치를 각각 padding 해줍니다. global_padding_interpolation을 수행 시 데이터의 특성에 맞게 padding method를 선택합니다.

global_time_index_begin

최소 시간 인덱스를 입력할 수 있으며, 공란인 경우 모든 그룹 내 최소 시간 인덱스로 자동 입력합니다. global_padding_interpolation을 수행 시 그룹 내 최소 시점을 임의로 지정하고 싶을 때 설정이 필요합니다.

global_time_index_end

최대 시간 인덱스를 입력할 수 있으며, 공란인 경우 모든 그룹 내 최대 시간 인덱스로 자동 입력합니다. global_padding_interpolation을 수행 시 그룹 내 최대 시점을 임의로 지정하고 싶을 때 설정이 필요합니다.

outlier_smoothing

그룹 별 x covariates의 outlier를 isolationforest 방법으로 탐지하고, 이를 이전 시점의 값으로 대체합니다. x covariate의 값들이 불규칙적일때 사용합니다.

isolationforest_contamination

isolationforest 모델의 parameter로 전체 시계열 중에서 ouliter의 비중을 의미합니다. 보통 0 ~ 0.3 사이의 값을 많이 사용합니다.

Train pipeline: Train asset

Fit model on training data

bizpreprocess asset을 통과한 데이터는 train asset에 입력된 parameters를 기반으로 학습/검증 데이터셋에 학습을 진행합니다. do_validation이 False일 경우 자동으로 full_train이 선택되어 전체 train set 대해 학습하고, do_validation이 True일 경우 optimize_parametersfull_train 두 가지 기능의 선택권이 생깁니다. 검증 데이터셋에 대해 sample을 계산 후 산출된 성능에 대한 요약 정보는 "./train_artifacts/output/"에 저장됩니다.(현재 smape 기반) 'optimize_parameters'를 통해 최적화 대상이 되는 parameter 들은 다음과 같습니다: num_stacks, num_blocks, num_layers, layer_widths, drop_out Optuna를 통해 최적화 수행 후 다른 parameter들과 함께 "./train_artifacts/models/train/train_config.json"에 저장됩니다. 이는 곧 train에 사용 될 값이기도 합니다.

do_validationoptimize_parametersfull_trainsequence of the train asset
FalseFalseTruetrain set 학습
TrueFalseFalsecross validation > score 산출
TrueTrueFalsecross validation > Hyper-parameter optimization > parameters update > score 산출
TrueTrueTruecross validation > Hyper-parameter optimization > parameters update > score 산출 > train set 학습

Train and save model

train set을 train asset에 주어진 parameters를 기반으로 학습하고 config와 model 파일은 "/.train_artifacts/models/readiness/"에 저장됩니다. 자세히보기: Forecasting 데이터 구조  

Inference pipeline: input asset

Load Inference dataset file

input asset을 통해 추론에 사용할 데이터 파일을 로드합니다. readiness와 preprocess는 Train pipeline을 통해 저장된 기존 값들을 사용하여 진행됩니다.

Inference pipeline: Readiness asset

Train pipeline의 Readiness asset에 입력된 값과 로드한 데이터 간의 정합성을 확인하고, 중복을 제거하며, 시간 형식을 통일하는 등 시계열 알고리즘이 동작하는데 필요한 기본 사항들을 사전에 점검하고 문제가 발생하면 에러를 발생시킵니다.

Inference pipeline: Preprocess asset

Readiness check 이후 데이터는 bizpreprocess asset을 통해 추가적인 전처리를 수행할 수 있습니다. 이 때 파라미터는 Train pipeline에서 상속됩니다.

Inference pipeline: Inference asset

Train pipeline에서 학습된 모델을 불러와 주어진 데이터에 대해 미래 시점을 예측합니다.

Inference pipeline: Output asset

Inference pipeline: Save outputs

추론 파이프라인에서의 산출물로 {model_name}_prediction_result.csv가 저장됩니다.  


Forecasting Version: 2.1.0