TCR Input and Artifacts
데이터 준비
학습 데이터 준비
기본적으로 TCR 사용을 위해서 학습에 사용할 컬럼(x 컬럼)과 라벨 컬럼(y 컬럼)이 있는 tabular 데이터를 준비해야 합니다. 현재는 .csv
파일 포맷만 사용 가능합니다.
학습 데이터셋 예시
x_0 | x_1 | ... | x_9 | y |
---|---|---|---|---|
value | value | ... | value | class |
... | ... | ... | ... | ... |
Input data directory 구조 예시
- ALO를 사용하기 위해서는 train과 inference 파일이 분리되어야 합니다. 아래와 같이 학습에 사용할 데이터와 추론에 사용할 데이터를 구분해주세요.
- 하나의 폴더 아래 있는 모든 파일을 input asset에서 취합해 하나의 dataframe으로 만든 후 모델링에 사용됩니다. (경로 밑 하위 폴더 안에 있는 파일도 합쳐집니다.)
- 하나의 폴더 안에 있는 데이터의 컬럼은 모두 동일해야 합니다.
./{train_folder}/
└ train_data1.csv
└ train_data2.csv
└ train_data3.csv
./{inference_folder}/
└ inference_data1.csv
└ inference_data2.csv
└ inference_data3.csv
데이터 요구사항
필수 요구사항
입력 데이터는 다음 조건을 반드시 만족하여야 합니다.
index | item | spec. |
---|---|---|
1 | y 컬럼의 개수 | 1개 |
2 | y 컬럼의 class(라벨) 개수 | 2개 이상 |
추가 요구사항
최소한의 성능을 보장하기 위한 조건입니다. 하기 조건이 만족되지 않아도 알고리즘은 돌아가지만 성능은 보장하기 어렵습니다.
index | item | spec. | 비고 |
---|---|---|---|
1 | 최소한의 학습 데이터 수를 충족해야 한다. | classification: class 별 30개 이상 / regression: 100개 이상 | default 값을 user argument인 min_rows로 조정 가능하나, 모델 성능 확보를 위해 default 값 이상의 데이터 사용을 권장합니다. |
2 | 추론 시 categorical 데이터에 학습에 사용하지 않은 데이터가 들어오지 않는다. | Yes | 현재 user argument ignore_new_category로 해당 action을 조절할 수 있으나, 해당 현상 발생 시 retrain을 권장합니다. |
산출물
학습/추론을 실행하면 아래와 같은 산출물이 생성됩니다.
Train pipeline
./alo/train_artifacts/
└ log/pipeline.log
└ models/train/
└ best_model.pkl
└ model_selection.json
└ model_selection.csv
└ ...
└ output/
└ output.csv
└ extra_output
└ readiness
└ report.csv
└ train
└ eval_result.csv
└ summary_plot.png (shapley value 출력 기능 사용 시)
Inference pipeline
./alo/inference_artifacts/
└ log/pipeline.log
└ output/inference/
└ output.csv
└ extra_output
└ readiness/
└ report.csv
└ inference/
└ eval_result.csv (y라벨이 있는 경우)
└ summary_plot.png (shapley value 출력 기능 사용 시)
└ score/
└ inference_summary.yaml
각 산출물에 대한 상세 설명은 다음과 같습니다.
pipeline.log
Pipeline의 asset별 TCR log가 기록됩니다. 아래는 pipeline.log의 readiness asset 로그 예시입니다. 로그 파일 내용을 확인하면 각 asset별로 적용한 방법론 등을 확인할 수 있습니다.
# TCR의 sample_data/train_titanic의 titanic 데이터의 readiness asset 실행 결과 입니다.
...
[2024-04-09 01:53:46,045|USER|INFO|readiness.py(654)|save_info()] Pclass 컬럼이 numeric 컬럼으로 분류됩니다.
[2024-04-09 01:53:46,055|USER|WARNING|readiness.py(657)|save_warning()] 컬럼 Name의 unique 데이터 수가 50를 넘어 x_columns에서 제외합니다.
[2024-04-09 01:53:46,063|USER|INFO|readiness.py(654)|save_info()] Sex 컬럼이 categorical 컬럼으로 분류됩니다.
[2024-04-09 01:53:46,072|USER|INFO|readiness.py(654)|save_info()] Age 컬럼이 numeric 컬럼으로 분류됩니다.
[2024-04-09 01:53:46,081|USER|INFO|readiness.py(654)|save_info()] SibSp 컬럼이 numeric 컬럼으로 분류됩니다.
[2024-04-09 01:53:46,089|USER|INFO|readiness.py(654)|save_info()] Parch 컬럼이 numeric 컬럼으로 분류됩니다.
[2024-04-09 01:53:46,099|USER|WARNING|readiness.py(657)|save_warning()] 컬럼 Ticket의 unique 데이터 수가 50를 넘어 x_columns에서 제외합니다.
[2024-04-09 01:53:46,107|USER|INFO|readiness.py(654)|save_info()] Fare 컬럼이 numeric 컬럼으로 분류됩니다.
[2024-04-09 01:53:46,116|USER|WARNING|readiness.py(657)|save_warning()] 컬럼 Cabin의 unique 데이터 수가 50를 넘어 x_columns에서 제외합니다.
[2024-04-09 01:53:46,126|USER|INFO|readiness.py(654)|save_info()] Embarked 컬럼이 categorical 컬럼으로 분류됩니다.
[2024-04-09 01:53:46,135|USER|INFO|readiness.py(654)|save_info()] 학습 컬럼 중 ['Sex', 'Embarked'] 컬럼이 categorical 컬럼으로 분류되었습니다.
[2024-04-09 01:53:46,144|USER|INFO|readiness.py(654)|save_info()] 학습 컬럼 중 ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare'] 컬럼이 numeric 컬럼으로 분류되었습니다.
[2024-04-09 01:53:46,153|USER|INFO|readiness.py(654)|save_info()] Survived 컬럼이 categorical 컬럼으로 분류됩니다.
...
best_model.pkl
HPO를 통해 선정된 best parameter로 전체 학습 데이터에 대해 학습한 모델 파일 입니다.
model_selection.json
HPO 관련 정보가 담겨있습니다. 세부 항목은 아래와 같습니다.
- best_model_info: HPO로 선정 된 best 모델과 parameter
- data_split: HPO시 적용한 data split 방법
- evaluation_metric: 평가 metric
- target_label: HPO 기준이 되는 y 클래스
- x_columns: 학습 대상 x 컬럼
- model_score: HPO의 모델 후보. 모델 명과 parameter가 기입 됨
model_selection.csv
model_selection.json을 보기 편하도록 csv로 바꾸었습니다. model_selection.json과 내용은 동일합니다.
output.csv
output.csv는 train/inference 결과 모델의 데이터 예측 값, 분류 확률 등이 기재되어있습니다.
- origin_index 컬럼: 사용자가 입력한 dataframe의 index입니다.
- prep_{x 컬럼}: preprocess asset에서 전처리 한 x 컬럼입니다. x 컬럼 수 만큼 컬럼이 생성됩니다.
- TCR-shap_{x 컬럼}: shapley value 기능을 사용할 경우 생성됩니다. 학습 데이터의 shapley value 값이 있습니다. x 컬럼 수 만큼 컬럼이 생성됩니다.
- TCR-prob_{y 컬럼 class 명}: 모델이 y 컬럼의 특정 class로 분류 할 확률을 의미합니다. y 컬럼의 class 수 만큼 컬럼이 생성됩니다.
- TCR-pred_{y 컬럼}: 모델의 prediction 결과입니다.
report.csv
readiness asset의 결과물로 데이터에 대한 정보를 요약한 표 입니다. report.csv의 첫 row는 전체 데이터에 대한 정보를 의미합니다. ignore_new_category: True일 때 inference에 학습에 사용하지 않은 category 데이터가 들어올 경우, 'new-categories' 컬럼이 생성됩니다.
- varname 컬럼: 변수 이름입니다.
- role 컬럼: 학습에 사용한 컬럼들을 표기합니다.
- dtype: 데이터의 타입을 표기합니다.
- TCR-column-type: 데이터의 유형을 표기합니다. (categorical/numeric)
- categorical-info: categorical 컬럼 내 category 정보를 표기합니다.
- cardinality: categorical 컬럼의 unique 값 입니다.
- numeric-info-min, max, mean, median: numeric 컬럼의 통계량 입니다.
- missing-values-num: 결측치 개수입니다.
- missing-values-ratio: 결측 비율 입니다.
- new-categories(inference, ignore_new_category: True): 학습에 사용하지 않은 카테고리 데이터를 표기합니다.
eval_result.csv
eval_result.csv에는 class 별 평가 metric이 기록되어있습니다. inference 시에는 y컬럼이 존재하는 경우에만 동작합니다.
- label 컬럼: y컬럼의 label 값이 기록되어있습니다.
- Accuracy 컬럼: accuracy score가 기록되어있습니다. (모든 label 공통)
- F1-Score 컬럼: 라벨 별 F1 score가 기록되어있습니다.
- Recall 컬럼: 라벨 별 recall 값이 기록되어있습니다.
- Precision 컬럼: 라벨 별 precision 값이 기록되어있습니다.
summary_plot.png
shapley value 기능을 사용할 경우 생성되는 shapley value 요약 plot입니다.
- 각 x 컬럼의 데이터가 y 컬럼의 class에 얼마나 많은 영향을 미쳤는지 나타냅니다.
- shapley value에 절대값을 씌워 평균 내 영향도를 계산합니다.
train_summary.yaml
train_summary.yaml은 Edge Conductor에서 UI로 보여지는 yaml 파일입니다. ALO의 save_summary API를 사용하여 생성했습니다. 자세한 사항은 ALO API: save_summary가이드를 확인해주세요. train pipeline 결과 생성되는 train_summary.yaml에는 아래와 같은 정보가 담겨있습니다.
- Classification
- result: Binary/Multi 인지 구별합니다. ('Binary-Classification' / 'Multi-Classification')
- score: entropy를 활용한 confidence score입니다.
- note: score에 대한 설명입니다. 'Confidence Score (The closer to 1, the better the predictive performance of the model)'
- probability: {}
- Regression
- result: 'regression'
- score: R2(결정계수) 입니다.
- note: 계산된 score에 대한 결과 해석입니다.
- 결정 계수 score < 0
- WARNING!! R2 < 0: R2 had returned minus value. Reconsider your model or data
- 결정 계수 score = 1
- WARNING!! R2 = 1: The model may be overfitted to the training data. Reconsider your data
- 0 < 결정 계수 score < 1
- The independent variables(x_columns) you used and the model account for about {score}% of the data
- 결정 계수 score < 0
- probability: {}
inference_summary.yaml
- Classification
- Inference data 개수가 1개 일 때
- result: inference data 판정 결과(라벨)
- ex) result: OK
- score: entropy를 활용한 confidence score입니다.
- note: score에 대한 설명입니다. 'Confidence Score (The closer to 1, the better the predictive performance of the model)'
- probability: {라벨: 모델의 라벨 분류 probability} 값이 기입됩니다.
- ex) {NG: 0.2, OK: 0.8}
- result: inference data 판정 결과(라벨)
- Inference data 개수가 2개 이상일 때
- train_summary.yaml과 동일합니다.
- Regression 지원하지 않습니다. 문구는 아래와 같습니다.
- result: 'regression'
- score: 0
- note: 'Not supported - 24/03/12'
- probability: {}
TCR Version: 2.2.1