- 머신러닝은 크게 prediction와 classification으로 나뉘어 집니다.
- 본 포스팅에서는 전처리 및 모델링 과정에서 정교한 classification 작업을 수행하기 위해 필요한 단계들을 설명합니다.
- 이는 gold standard는 아니므로 참고용으로 봐주시기 바랍니다.
전처리 단계
1차적인 변수 탐색
- 범주형 변수의 경우 2x2 table, odds ratio를 그려 변수의 영향력을 점검합니다.
- odds ratio가 10 이상이거나 지나치게 낮은 경우 해당 변수를 제거할 지 의논이 필요합니다.
- odds ratio가 지나치게 높거나 낮은 경우 sensitivity, specificity 값이 극단적인 경향을 띕니다.
- 연속형 변수의 경우 기초 통계량(mean, sd 등)과 histogram을 출력하여 변수의 영향력을 점검합니다.
2차적인 변수 탐색
- 연속형 변수들 간의 다중공선성을 VIF 지표로 점검하기 전에, 결측치를 제거 혹은 대체(imputation) 해줍니다.
- 결측치가 40%가 넘는 경우, 변수의 설명력이 없다고 판단하여 해당 변수를 제거합니다.
- imputation은 여러 기법이 있지만, test set 혹은 다른 data set이 들어왔을 때 동일한 지표를 보다 쉽게 적용하기 위해 간단한 기법을 사용합니다.
- 연속형 변수의 경우 median(mean보다 극단값의 영향을 덜 받습니다.), 범주형 변수의 경우 mode(최빈값)을 사용합니다.
- 결측치 대체 후 연속형 변수 간의 VIF 지수를 구한 후, VIF 지수가 10 이상이면 해당 변수를 제거합니다.
- VIF 기준으로 변수 제거할 때에는, 10이 넘는 변수들을 한 번에 제거하는 것이 아니라, 하나씩 제거하면서 추이를 관찰합니다.
- VIF cutoff는 주관적으로 결정할 수 있으나, 10이 넘는 변수는 무조건 제거하는 것이 좋습니다.
범주형 변수의 변환
- 범주형 변수의 경우 numerical type으로 변환해 주기 위해 one-hot encoding 등을 수행합니다.
- 머신러닝에서 one-hot encoding을 주로 사용하지만, 어떤 모델을 쓰냐에 따라 다중공선성의 우려가 있기 때문에 dummy encoding을 사용합니다.
- dummy encoding이란, category 중 하나를 reference로 두고 더미 변환하는 것을 의미합니다.
- 이때, reference category는 [0, 0, 0, ..., 0]의 값을 갖습니다.
- 즉, category = ['1','2','3','4']으로 주어져 있을 때 '1'을 reference로 둔다면, category = '1'은 컬럼에 포함되지 않고 나머지들만 컬럼에 포함됩니다.
- train set에서의 median, mode를 test set에도 동일하게 적용합니다.
정규화, 표준화 과정
- 연속형 변수에서 scale의 차이가 심할 경우 모델 설명력에 영향을 미칠 수 있기 때문에 정규화 또는 표준화 작업이 필요합니다.
- 주로 MinMaxScaler 혹은 Standardization 기법을 사용합니다.
- Standardization을 사용한다고 했을 때, train set에서의 mean, sd를 test set에도 동일하게 적용합니다.
변수 선택
- 머신러닝에서 feature의 개수가 많을수록 설명력은 높아지지만, overfitting의 문제가 발생할 수 있습니다.
- 이를 방지하기 위해 hyperparameter 최적화 전에 변수 선택 과정을 거칩니다.
- 변수 선택 방법으로는 여러 가지가 있으나, 여기서는 RFE (Recursice Feature Elimination)을 사용합니다.
- 이는 Backward elimination과 유사한 방법입니다.
- RFE 중에서도 RFE with 5-fold stratified cross-validation을 사용합니다.
- RFE with cv에 대한 성능(?) 지표로 한 개를 고를 수 있는데, 여기서는 AUROC score를 사용합니다.
- RFE with cv 결과 graph를 토대로 5개의 feature를 선정합니다.
Modeling 과정
- 앞선 전처리 단계를 모두 거친 후 Modeling 과정을 수행합니다.
- 머신러닝 모델로 XGboost, Randon Forest, Support Vector Machine, Logistic Regression, Multi-layer Perceptron을 사용합니다.
- 먼저 whole dataset을 3:1로 stratified split을 수행합니다.
- 3이 train set이고, 1이 test set입니다.
- train set에서 10-fold stratified cross validation을 수행합니다.
- 최적의 hyperparameter 조합을 찾기 위해서 입니다.
- 10-fold cv를 통해 train / val set으로 나뉘어집니다.
- train set을 표준화합니다.
- 표준화된 train data의 mean, sd를 갖고 val set을 표준화합니다.
- 10-fold cv를 통해 구한 성능에 평균을 취합니다.
- 이 평균치가 제일 높은 hyperparameter 조합을 저장합니다.
- 효율성을 높이기 위해 bayesian optimization을 사용합니다.
- 이외에도 grid search, random search 등을 사용할 수 있습니다.
- 전체 train data를 대상으로 다시 표준화를 실시합니다.
- 이렇게 표준화된 train data와 앞서 찾은 best hyperparameter 조합을 갖고 model을 적합시킵니다.
- train data의 mean, sd를 갖고 test data를 표준화합니다.
- a 모델에 test data를 넣고 performance metrics를 출력합니다.
- 1~3번 작업을 총 50번 반복합니다.
- subject selection bias를 피하고 모델의 robustness를 향상시키기 위함입니다.
- 50번의 performance metrics의 평균을 구합니다.
--> 이것이 저희 모델의 최종 성능이 됩니다.
- performance metrics로는, accuracy, precision, recall (sensiticity), F1-score, area under the receiver operating characteristic curve (AUC-ROC) 등이 사용됩니다.