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

GCR Features

Updated 2024.05.17

기능 개요

GCR의 pipelines

AI Contents의 pipeline은 기능 단위인 asset의 조합으로 이루어져 있습니다. Train pipeline은 5개의 assets, Inference pipeline은 4개의 assets로 구성되어 있습니다.

Train pipeline

	Input - Readiness - Graph - Train - Output

Inference pipeline

	Input - Readiness - Inference - Output

Input asset

사용자가 experimental_plan.yaml에 지정한 경로 내 파일을 읽어와 dataframe으로 만들어 줍니다.

Readiness asset

사용자가 GCR에 입력한 데이터가 GCR 모델링에 적합한지 검사합니다.

Graph asset

Tabular 데이터를 그래프로 변환하고 graph embedding을 수행합니다. 생성된 graph embeddings는 train/inference assets에서 학습과 추론에 사용됩니다.

Train asset

Graph asset의 결과물인 graph embeddings를 이용해 추론 모델을 학습합니다.

Inference asset

Graph asset의 결과물인 graph embeddings와 train asset에서 생성한 추론 모델을 이용해 추론 결과와 global/local XAI 결과를 생성합니다.

Output asset

Train/inference asset의 산출물들을 ALO 표준 위치에 저장합니다.



사용 팁

큰 데이터 사용시 메모리 최소화 방법 (메모리 부족에 의한 Mellerikat 등록 실패 회피 방법)

Graph-powered 머신러닝 모델에 기반한 GCR은 일반적인 분류/회귀 모델에 비해 메모리 요구량이 많아 같은 조건에서 대용량 입력 데이터를 처리할 때 메모리 부족 이슈가 발생할 수 있습니다. GCR은 이를 대비하여 아래와 같은 메모리 효율화 기법을 제공하므로, 이를 이용해 메모리 부족 이슈를 회피할 수 있습니다.

  1. Graph asset: Graph embeddings의 차원 수 줄이기
  • Graph embedidngs의 차원 수 (argument명 dimension)는 default값으로 32로 되어 있습니다. 이 값을 16, 8 등으로 줄이면 원본 데이터의 컬럼 하나가 각각 16개, 8개의 컬럼 (차원)의 벡터로 임베딩되므로 32 차원 벡터에 비해 메모리 사용량을 대폭 줄일 수 있습니다. 단, embeddings의 구분력 유지를 위해 8차원 미만은 추천하지 않습니다.
  1. Graph asset: Graph를 여러 조각으로 나누어 임베딩하기
  • GCR은 입력 데이터 전체를 한 번에 메모리에 올려 graph embedding하는 대신, 여러 조각으로 나누어 하나 씩 graph embedding함으로써 peak memory 요구량을 줄일 수 있는 방법을 제공합니다. 이는 num_partitions argument를 조절하여 설정할 수 있습니다. Default 값은 1로서 한 번에 전체 데이터를 메모리에 올려 embedding하는 것이고, 이를 2, 4, 8, 16, 32 등으로 높임으로써 그 만큼의 조각들로 나누어 graph embedding을 수행할 수 있습니다.
  • 단, partition 수가 증가할 수록 전체 데이터의 graph embedding 완료 시간이 길어지며, partition 수 증가에 따른 peak memory 감소 폭은 차차 줄어들기 때문에, memory 부족이 발생하지 않는 가장 작은 num_partitions 값을 적용하는 것이 가장 효율적입니다.

참고로, default 설정인 dimension 32, num_partitions 1로 25MB의 35개 컬럼과 91,844개의 행을 가진 입력 데이터를 graph embedding할 경우 peak memory는 약 11GB입니다. 한편, 약 55GB의 메모리를 가진 로컬 서버에서 288MB의 27개 컬럼과 986,406개의 행을 가진 입력 데이터를 graph embedding할 경우, dimension 8, num_partitions 16으로 약 1시간 정도에 가능했습니다.



기능 상세

Train pipeline: Input asset

Input asset은 experimental_plan.yaml에 지정한 사용자 데이터 경로의 모든 파일을 가져와 읽어 하나의 dataframe으로 만들어 줍니다. 사용자 데이터 경로는 experimental_plan.yaml의 load_train_data_path, load_inference_data_path에 입력합니다. 이때 데이터 경로는 파일 명을 제외한 폴더 경로여야 합니다. Train pipeline에서는 load_train_data_path 경로의 데이터를 불러옵니다.

external_path:
- load_train_data_path: ./solution/sample_data/train
- load_inference_data_path: ./solution/sample_data/test
- save_train_artifacts_path:
- save_inference_artifacts_path:
  • 사용자가 입력한 경로 하위에 폴더가 있는 경우, 해당 폴더 안의 데이터도 모두 읽어와 하나로 합칩니다.
  • 사용자가 입력한 경로 하위에 있는 모든 파일은 컬럼이 동일해야 합니다.
  • experimental_plan.yaml에 대한 자세한 설명과 input asset parameter에 대한 설명은 다음 가이드를 참고해 주세요 GCR Parameters

Train pipeline: Readiness asset

Readiness asset은 사용자가 학습/추론에 사용하는 데이터가 GCR 모델링에 적합한지 검사합니다. Graph-powered 머신러닝 모델로서 GCR은 입력에 결측치가 있거나 많은 수의 범주형 데이터가 있어도 별도의 전처리 없이 학습과 추론이 가능하므로 데이터 품질에 대한 요구 조건이 상대적으로 단순하고 가볍습니다. Readiness asset은 train pipeline과 inference pipeline마다 필요한 검사를 진행하며 각 pipeline 별로 검사하는 상세 항목은 아래와 같습니다.

검사 목록

  1. experimental_plan.yaml에 작성된 컬럼 명이 데이터 내에 존재하는지 검사

Readiness asset에서 사용자가 입력하는 컬럼명 항목은 아래와 같습니다. Readiness asset은 아래 arguments에 대해서 사용자가 dataframe에 있는 컬럼 명을 입력했는지 검사합니다. 각 arguments의 자세한 사용법은 GCR Parameters를 참고해주세요.

  • x_columns: 학습 대상 x 컬럼 명들. 비워 두면 y_column을 제외한 모든 컬럼들을 사용.
  • drop_columns: 학습 대상 컬럼에서 제외할 컬럼 명들. 비워 두면 아무 컬럼도 제외하지 않음.
  • y_column: 라벨 컬럼
  1. 라벨 컬럼 (y_column)에 결측치가 있는지 검사

Graph-powered 머신러닝 모델인 GCR은 x 컬럼들에 결측치가 있어도 별다른 조치 없이 학습과 추론이 가능합니다. 하지만, 지도학습 모델인 이상 라벨 컬럼에는 결측치가 있어서는 안됩니다.

Train pipeline: Graph asset

입력 데이터를 graph로 표현하고, 주어진 topology를 이용해 graph representation learning (graph embedding)을 실시하여 데이터에 숨겨진 유용한 정보들이 포함된 embedding vector들을 만들어 내는 asset으로서, graph-powered 머신러닝 모델인 GCR의 특장점을 제공하는 핵심 asset입니다.

GCR의 graph asset은 실용적인 graph data science를 위해 다음의 기능을 수행할 수 있도록 개발되었습니다.

Graph Embedding Algorithms

  • GCR이 기반하는 Pytorch BigGraph (PBG)의 graph embedding 방식은, 기본적으로 vector space 상에서 같은 edge를 공유하는 node들은 유사한 vector 값을 가지도록 만들고 그렇지 않은 node들은 유사하지 않은 vector 값을 가지도록 학습하는 것입니다.
  • PBG는 모든 nodes와 edges를 vector로 표현한 뒤, source node vector와 destination node vector 간의 유사성을 계산하는 scoring fuction을 정의하고, global loss function을 통해 graph 내의 모든 node들의 쌍에 대해서 scoring function의 값을 optimize합니다.

Graph Partitioning

  • GCR은, graph를 여러 partition들로 나누어 각각 embedding할 수 있는 PBG에 기반함으로써 10억개의 nodes와 1조개의 edges를 갖는 초 거대 graph도 현실적인 크기의 memory 조건 하에서 embedding할 수 있습니다.
  • Graph를 나누어 embedding하면서도 모든 nodes를 하나의 vector space 상에 align하기 위해, 1) source와 destination nodes를 서로 겹치지 않도록 나눈 뒤 2) partition들을 ‘inside-out’ 순서로 하나씩 embedding합니다.
  • 각 partition은 pre-trained nodes를 갖게 되며, 이들에 대해서는 fine tuning이 수행되는 셈으로, 현재 partition에서 볼 수 없는 sample들까지 고려한 node embedding이 가능합니다.

Inductive Learning

  • 학습과 추론을 동시에 수행하는 일반적인 Graph Embedding 방식과는 달리, GCR은 추론 속도를 높이고 resource를 줄이기 위해 Inductive Learning method가 적용돼 있습니다.
  • 그래프 임베딩은 train pipeline에서 한번만 수행되며, downstream task에서는 각 노드들의 임베딩을 신규 가상 노드에 연결하여 sub-graph 임베딩을 생성하기 때문에 그래프를 재학습 할 필요가 없습니다.

Train pipeline: Train asset

GCR의 train/Inference asset에는 총 2종의 모델이 내장되어 있습니다. GCR의 모델 리스트와 파라미터 세트는 아래와 같습니다

GCR 내장 모델

  • XGboost: 지원되는 GCR versions = v2.1.0, v3.1.0

    • num_boost_round: 10~1000 중 HPO에 의해 결정
    • eta: 0.01~0.2 중 HPO에 의해 결정
    • gamma: 0~5 중 HPO에 의해 결정
    • lambda: 0~5 중 HPO에 의해 결정
    • alpha: 0~5 중 HPO에 의해 결정
    • tree_method: hist
    • max_depth: 6
    • min_child_weight: 1
    • sampling_method: uniform
    • subsample: 1
    • colsample_bytree: 1
    • colsample_bylevel: 1
    • colsample_bynode: 1
    • scale_pos_weight: 1
    • base_score: 0.5
  • flexible dnn: 지원되는 GCR versions = v3.0.0, v3.1.0

    • dropout: 0.5
    • learning_rate: 0.0001
    • epochs: 10
    • batch_size: 64

HPO (Hyper-Parameter Optimization) 기능

GCR의 train asset은 Optuna HPO library를 이용해 stratified K-folds cross validation (CV)을 반복하며 최선의 모델 파라미터 셋을 결정한 뒤, 이 파라미터를 이용해 전체 train set에 대해 모델 학습을 실시합니다. GCR의 상세한 HPO 진행 방식은 아래와 같습니다. HPO에 대한 상세한 제어 방법은 GCR parameters page를 참고하시기 바랍니다.

  1. HPO를 위한 데이터 분할
    • Stratified cross-validation을 통해 train/validation set을 구분합니다. default는 3 fold cross-validation이 적용됩니다.
  2. 평가 metric을 기준으로 후보 모델 성능 비교
    • 평가 metric의 default 룰은 classification시 f1_score, regression시에는 rmse가 적용됩니다. 사용자는 평가 metric을 eval_metric argument를 통해 지정할 수 있습니다.
  3. 선정된 모델과 모델의 parameter setting으로 전체 학습 데이터 재 학습

Inference pipeline: Input asset

Train pipeline과 동일하게 동작하며 Inference pipeline에서는 load_train_data_path 경로의 데이터를 불러옵니다.

Inference pipeline: Readiness asset

검사 목록

  1. experimental_plan.yaml에 작성된 컬럼 명이 데이터 내에 존재하는지 검사

Readiness asset에서 사용자가 입력하는 컬럼명 항목은 아래와 같습니다. Readiness asset은 아래 arguments에 대해서 사용자가 입력 데이터에 있는 컬럼 명을 입력했는지 검사합니다. Train pipeline과는 달리 inference pipeline에서 호출될 때, y_column 즉, 라벨 컬럼이 데이터에 존재하는지와 결측치가 있는지는 검사 항목에서 제외됩니다. Readiness asset arguments의 자세한 사용법은 GCR Parameters를 참고해주세요.

  • x_columns: 추론 데이터 셋의 x 컬럼 명들. 비워 두면 모든 컬럼들을 사용.
  • drop_columns: 추론 데이터 셋의 x 컬럼에서 제외할 컬럼 명들. 비워 두면 아무 컬럼도 제외하지 않음.
  1. 학습 시와 예측 시 x 컬럼들이 동일한지 검사

Inference set의 x 컬럼들이 모델이 학습된 train set의 x 컬럼들과 일치하는 지 검사합니다. 컬럼들의 순서는 상관이 없으며, 모든 x 컬럼들이 빠짐 없이 존재하기만 하면 됩니다.

Inference pipeline: Inference asset

Inference asset은 train pipeline에서 학습된 모델을 이용해 추론 데이터 셋에 대한 분류/회귀 추론을 실시합니다. 이 때, 추론 데이터 셋의 샘플들은 추가적인 graph embedding 없이 train pipeline에서 graph asset에 의해 만들어진 x 컬럼들의 graph embeddings를 이용해 수치화된 후 모델의 추론을 위한 입력으로 제공됩니다. 이렇듯 GCR은, 새로운 추론 데이터 셋이 들어올 때 마다 모델의 재학습이 필요한 일반적인 그래프 데이터사이언스 ML모델들과는 달리 추론 시 재학습이 불필요한 inductive 모델로 개발되었기 때문에 신속한 추론 시간이 요구되는 과제들에 적용이 가능합니다.

XAI 기능 제공

GCR은 train set을 이용한 global XAI와 inferene set의 샘플 각각에 대한 local XAI를 제공합니다. 각 XAI 기능은 inference asset의 arguments인 global_xailocal_xai를 통해 enable/disable이 가능합니다.

XGboost 모델을 사용할 경우, global 및 local XAI 모두 LIME library를 이용해 제공되는데, 일반적인 머신러닝 모델과 달리 graph embeddings를 입력으로 하는 GCR의 xgboost 모델에 적용된 LIME 결과가 원본 입력 데이터의 컬럼명으로 표시될 수 있도록 특별히 제작된 Graph XAI wrapper가 이용됩니다. Graph XAI wrapper가 없다면, input perturbation 방식인 LIME을 적용 시 매 입력값 변경 마다 graph embedding, xgboost 모델 학습, xgboost 모델을 이용한 추론의 cycle이 반복되어야 하므로 XAI를 제공하는데 막대한 시간과 리소스가 요구됩니다. Graph XAI wrapper는 입력 데이터의 컬럼 별 graph embedding vector들을 aggregate하여 샘플을 표현하는 기법을 통해 단 1회의 graph embedding만으로 원본 데이터에 대한 XAI 결과를 얻을 수 있게 해 줌으로써, graph XAI를 수행하는 시간을 100배 이상 단축합니다.

Flexible DNN 모델을 사용할 경우, local XAI는 XGboost와 마찬가지로 LIME이 적용되며, 동일하게 Graph XAI wrapper를 통해 100배 이상 단축된 수행 시간을 제공합니다. Flexible DNN의 global XAI는 LIME을 사용하지 않으며, attention 기법과 유사한 방법을 통해 DNN 모델 학습 과정에서 자동으로 graph XAI가 계산되므로 더욱 빠른 수행 시간을 제공합니다.

Global XAI의 결과는 ALO의 main.py가 존재하는 work directory 하위의 train_artifacts/models/train/global_feature_importance.csv로 제공됩니다. 한편, local XAI의 결과는 추론 결과인 inference_artifacts/output/output.csv에 새로운 컬럼들로 병합되어 제공됩니다. 이 때, 추가되는 컬럼들의 형태는 아래와 같습니다. 이 기능은 현재 task가 classification인 경우에만 제공됩니다.

아래 예는, X1~X9의 컬럼들을 가지는 추론 데이터에 대해 binary classification을 수행하는 경우입니다.

각 샘플의 인덱스classificationResultlabel의 category 별 score들top 5 reasons (컬럼 명과 현재 샘플의 해당 컬럼 값)
000.77, 0.23X1=0.1, X3=0.7, X4='A', X5='S', X9=0.02
100.65, 0.35X3=0.6, X2=0.2, X1=0.7, X4='B', X8=0.01
210.83, 0.17X4='B', X5='P', X9=0.07, X7='S', X1=0.3

GCR Version: 3.0.0