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

AD Features

Updated 2024.05.17

기능 개요

AD의 pipeline

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

Train pipeline

    Input - Readiness - Preprocess - Train

Inference pipeline

    Input - Readiness - Preprocess - Inference - Output

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

Input asset

Anomaly Detection은 학습할 때 이상탐지를 하고자 하는 x 컬럼이 포함된 tabular 형태의 데이터로 동작합니다. 따라서 input asset에서는 해당 csv 데이터를 읽고 다음 asset으로 전달하는 역할을 수행합니다. 위 도표에서 보듯 다음 asset인 Preprocess asset으로 전달됩니다.

Readiness asset

Readniess asset에서는 전처리와 학습 및 추론을 진행하기 전 데이터 입력과 설정 등이 조건에 맞게 되어 있는지를 체크하게 됩니다.

Preprocess asset

Anomaly Detection은 학습 혹은 추론이 진행되기 전 데이터를 전처리하는 과정을 먼저 거치게 되며 이 과정이 process asset에서 진행됩니다. 해당 과정에서는 각 포인트마다 빈 값 혹은 NaN과 같이 정상적이지 않은 포인트를 제거하거나 scaling을 하는 등을 과정이 진행됩니다.

Train asset

Anomaly Detection에서 train asset은 이상 탐지를 위한 최적의 파라미터를 찾아내는 과정을 수행합니다. 우선 preprocess asset을 거쳐서 전처리가 완료된 데이터를 전달 받습니다.그 후 실험계획서에 미리 작성한 설정에 맞게 데이터를 그룹별, 컬럼별로 나누게 됩니다. 나누어진 데이터마다 모델별로 인스턴스를 생성하고 bayesian optimization을 통해 모델 별로 최적을 파라미터들 찾아내는 과정을 진행합니다. 이 과정이 완료되고 나면 모델 별 성능과 학습 과정에서의 추론 결과를 저장합니다.만약 x 컬럼 별로 레이블이 존재하는 경우 unsupervised 기반의 metric이 아닌, f1 score, precision, recall을 직접 maximize 하도록 설정할 수 있습니다. 이 경우 모델 별 성능이 output csv에 같이 저장되고, 모델 별 성능을 비교한 plot 또한 저장됩니다.

Inference asset

inference asset에서는 input asset, preprocess asset을 거쳐 전달받은 inference 데이터를 읽고, 다시 그룹 별, 데이터 컬럼별로 나누게 됩니다. 나누어진 데이터마다 이전 학습 단계에서 저장한 모델들 중 선택된 모델들을 불러와서 이상 탐지를 진행하고 결과를 저장합니다.만약 레이블 컬럼이 존재하는 경우 모델 별 성능이 output csv에 같이 저장되고, 모델 별 성능을 비교한 plot 또한 저장됩니다. 운영을 위한 파일은 inference_summary.yaml도 저장됩니다.



사용 팁

데이터 csv 파일 준비하기

좀 더 효과적인 이상 탐지를 위해선 데이터 내에 빈 값 혹은 NaN 값 등이 존재해선 안됩니다. 만약 존재하는 경우 AD가 자동으로 해당 row를 제거하게 되지만 성능이 영향을 미칠 수 있으니 사전에 해당 데이터들을 적절히 조치한 후 데이터를 준비해주셔야 합니다.

그룹별 데이터 준비

AD는 포인트들을 그룹별로 묶어서 이상 탐지를 진행하는 기능을 지원합니다. 그러나 AD 알고리즘 특성 상 그룹마다 너무 적은 데이터가 존재하는 경우 성능이 저하될 수 있습니다. 이를 방지하기 위해선 그룹 별로 충분한 데이터가 있어야 합니다.

레이블이 존재하는 데이터 train

AD는 만약 레이블이 존재하는 경우 unsupervised 기반의 metric이 아닌, 레이블을 이용하여 f1 score, precision, recall을 직접 maximize 하도록 bayesian optimization을 진행하게 할 수 있습니다. 그러나 만약 이 경우 train 데이터에 abnormal 레이블에 속하는 데이터가 존재하지 않는 경우 bayesian optimization이 제대로 진행되지 않을 수 있습니다. 이를 방지 하기 위해선 unsupervised 기반의 metric을 사용하도록 설정하거나, train 시 정상, 비정상 레이블에 속하는 데이터가 모두 존재해야 합니다.

적절한 포인트간 시간 간격

AD는 point가 계측된 시간 간격이 불규칙하더라도 anomaly detection을 수행할 수 있습니다. 그러나 point 간 계측된 시간 간격이 불규칙한 경우 사용자가 추구하는 수준의 성능은 보장할 수 없습니다. 그러므로 사전에 규칙적인 시간 간격으로 계측된 데이터를 사용하는 경우 성능 향상이 이뤄질 가능성이 있습니다.



기능 상세

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

Train pipeline: Input asset

Read Ground Truth file

학습에 사용할 csv 파일을 불러 온 후 다음 asset으로 전달하는 역할을 합니다.

Train pipeline: Readiness asset

Readiness asset에서는 사용자가 사용하려는 학습/추론 데이터가 AD 컨텐츠에 적합한지 검사합니다.

Train pipeline: Preprocess asset

Preprocess asset에서는 사용자가 사용하는 학습/추론 데이터를 전처리하는 과정을 진행합니다. 전처리를 통해 사용자는 보다 성능 높은 결과물을 기대할 수 있습니다. 이 asset에서 진행되는 전처리 항목들은 아래와 같습니다.

  1. 결측치 처리(arguemnt: handling_missing)

    • 결측치가 존재하는 행을 처리합니다. argument 설정을 통해 결측치를 제거하거나, 제거하는 대신 최빈값, 평균값, 중앙값 등의 적절한 수치를 대신 채워 넣을 수 있습니다.
  2. 데이터 scaling (argument: handling_scaling)

    • 데이터에 따라 scaling을 진행해야 하는 경우가 존재합니다. 이 경우 argument 설정을 통해 standard scaler, minmax scaler, robust scaler, maxabs scaler, normalizer 를 이용하여 데이터를 scaling 할 수 있습니다. 데이터를 그룹별로 묶어 그룹마다 별도로 scaling 을 진행하는 것이 가능하기 때문에 만약 데이터 그룹별로 존재하며, 그룹별로 학습/추론을 해야하는 경우에도 대응이 가능합니다.
  3. 중복 시간 행 처리(argument : drop_duplicate_time)

    • 데이터 포인트는 각 포인트가 언제 계측 되었는 지를 나타내는 time column이 필요합니다. 경우에 따라 해당 time column 값이 중복되는 경우가 발생할 수 있는데, 만약 해당 argument를 True로 설정하면 중복 행 중 하나만 남기고 나머지 행들을 제거할 수 있습니다.

Train pipeline: Train asset

Split data by groupkey

input으로 들어온 데이터가 group별로 anomaly detection이 진행되고 싶은 경우 데이터들이 어느 group에 속하는 지를 명시해놓은 grpukey 컬럼을 통해 데이터가 groupkey 별로 나뉘게 됩니다. 만약 groupkey를 설정하지 않은 경우 모든 데이터 포인트가 하나의 그룹으로 설정되어 anomaly detection을 진행하게 됩니다.

Train by using multiple models

학습 시 지원되는 모델들 중 특정한 모델들을 지정하여 학습을 진행할 수도, 복수 개 혹은 모든 모델을 사용하여 학습을 진행 할 수도 있습니다. 전자의 경우 'train_models' argument에 dt(dynamicthreshold),sr(spectralresidual),stl_dt,stl_sr 중 학습에 사용하고 모델을 입력하면 됩니다. 복수 개의 모델을 사용하고 싶은 경우 원하는 모델들을 리스트 형태로 입력하면 됩니다. 만약 모든 모델을 사용하고 싶은 경우 단순히 'all'이라고 입력하면 모든 모델을 학습하는 데에 사용할 수 있습니다. 만약 복수 개의 모델을 사용하는 경우 제일 좋은 성능의 모델의 결과만 받고 싶을 수도, 모든 모델의 결과를 전부 받아 보고 싶을 수도 있습니다. 전자의 경우 return_all을 False로 하면 제일 score가 높게 나온 모델의 anomaly detection 결과만 train_result.csv에 저장이 되고, 만약 True로 할 시 학습에 사용된 모든 모델의 anomaly detection 결과가 저장되게 됩니다.

Bayesian optimization

통계 기반의 모델은 bayesian optimization을 통해 사용자가 직접 파라미터의 값을 설정하지 않더라도 자동으로 파라미터를 최적화 하여 좀 더 높은 성능을 추구할 수 있습니다. 모든 모델은 bayesian optimization을 지원하며, 별도의 설정을 하지 않는 경우 미리 설정된 bayesian optimization space 상에서 optimization을 진행하게 됩니다. optimization을 원치 않는 경우 해당 과정을 생략하고 사용자가 원하는 고정된 값으로 anomaly detection을 수행할 수도 있으며, 경우에 따라 특정 파라미터만 optimization에서 제외 시키고 나머지 파라미터만 bayesian optimization을 수행하게 할 수 있습니다. 전자의 경우 experimental_plan.yaml 에서 'hpo_repeat'의 값을 0으로 설정한 후 각 모델 별 파라미터에 고정된 값을 입력하면 되며, 후자의 경우 'hpo_repeat'의 값은 1 이상의 정수로 하되, 고정시키고 싶은 파라미터에만 사용자가 원하는 값을 입력하면 됩니다. 혹은 미리 설정된 space가 아니라 다른 범위에서 bayesian optizmization을 수행하게 하고 싶은 경우 해당 파라미터에 리스트 형태로 min 값, max 값, type을 입력하면 됩니다. 예를 들어 dynamicthreshold의 window_size를 300과 400 사이에서 bayesian optimization 하게 하고 싶은 경우 [300,400,'int']를 입력하면 됩니다. 이 과정이 모두 끝난 후 제일 성능이 높은 것으로 판단되는 최적의 파라미터 값으로 추론을 하게 됩니다. 이 과정은 컬럼 별 그룹 별로 별도로 진행되며 optimization이 끝난 후 각 컬럼, 각 그룹 마다 별도의 최적화된 모델이 저장되게 됩니다.

Various bayesian optimization metric

anomaly detection은 사전에 정의된, ok 데이터의 분포와 ng 데이터의 분포 사이의 거리를 이용한 metric을 통해 bayesian optimization을 진행하게 됩니다. 그러므로 별도의 label 컬럼이 존재하지 않아도 학습이 가능합니다. 그러나 경우에 따라 각 point 별 label이 담긴 컬럼이 존재하는 경우 기존의 metric 대신 precision, recall, f1 score 중 하나를 직접 maximize 하도록 bayesian optimization을 수행하게 할 수 있습니다. 이 경우 각 x 컬럼에 대응되는 label 컬럼들을 차례대로 담은 리스트를 readiness의 argument에 y_columns 라는 argument 명으로 추가하면 됩니다. ok 데이터의 분포와 ng 데이터의 분포 사이의 거리를 이용한 metric을 이용하고 싶은 경우 train asset의 argument 중 'objective_cal_metric'을 distance로 입력하면 되며, precision,recall 혹은 f1 score를 maximize 하고 싶은 경우 'objective_cal_metric'에 precision,recall 혹은 f1이라고 입력하면 됩니다.

Compare performance between models

point 별 label 컬럼이 존재하는 경우 학습에 사용된 모델 간 성능을 비교할 수 있게 됩니다. readiness asset의 argument에 y_columns라는 argument를 추가하고 이에 각 x 컬럼에 해당하는 label 컬럼을 차례대로 담은 리스트를 입력하면 됩니다. 그 후 학습을 하게 되면 자동으로 모델 별 confusion matrix와 모델 별로 preicisiion,recall과 f1 score을 비교한 plot들이 extra_output 폴더에 존재하는, x 컬럼 명으로 된 폴더의 하위 파일로 저장되게 됩니다.

Inference pipeline: Input asset

Read Inference file or generate it

추론을 하고자 하는 데이터가 담긴 csv 파일을 불러와 추론을 하기 위한 첫 준비를 진행하게 됩니다.

Inference pipeline: Inference asset

Inference by using model

추론하고자 하는 데이터가 이전 에셋을 통해 주어지게 되면 inference asset에서 저장된 모델을 통해 추론을 하게 됩니다. 이때 train asset에서 선택한 모델 중 가장 score가 높았던 모델을 사용하고 싶은 경우 model_select argument를 best 로 입력하면 됩니다. 혹은 학습 에 사용된 모델 중 특정 모델을 이용하여 추론하고 싶은 경우엔 해당 모델을 입력하면 됩니다. 예를 들어 학습 때 sr,stl_dt,stl_sr을 선택하였고, 이중 stl_dt를 이용하여 추론을 하고 싶은 경우 model_select에 stl_dt를 입력하면 됩니다. 만약 학습에 사용된 모델이 각각 anomaly detection한 결과를 전부 얻고 싶은 경우 'all'로 입력하면 됩니다.

Save outputs

추론 파이프라인에서의 산출물은 학습과 마찬가지 구성입니다. 만약 label 정보가 없는 경우 모델 간의 성능을 비교한 plot과 model 각각의 confusion matrix를 보여주는 plot은 저장되지 않습니다.

Inference pipeline: Output asset

infernece summary 수정

각 도메인의 Solution에 맞게 inference summary를 수정할 수 있습니다.



AD Version: 2.0.1