데분 미니프로젝트 - 신약개발을 위한 화합물 독성 예측
나의 첫 데이터분석 미니 프로젝트!
SKALA 데이터분석 과정이 끝나서 신약개발을 위한 화합물 독성 예측이라는 주제로 미니프로젝트를 진행했다.
프로젝트는 조원들과 함께 화합물 데이터를 가지고 EDA를 하는 1일차와 개인별로 독성 예측 모델링을 진행한 2일차로 나눠 진행됐다.
1. EDA
내가 이해한 EDA는 데이터를 여러가지 방법으로 시각화하고 분석하며 해당 데이터를 이해하고, 데이터 모델링을 할때 도움이 될 수 있는 데이터를 뽑아가는 과정이라고 생각한다.
여기서 gpt에게 물어본 EDA
데이터를 분석하기 전 단계에서 데이터의 구조, 특징, 패턴, 이상치, 분포 등을 직관적으로 파악하기 위해 사용하는 기법
2. Modeling
1단계 : 데이터 구성 전략 수립
3가지 실험용 feature 조합을 만들었다.
- numeric : 수치형 데이터만 사용
- selected : 수치형 + 상관계수와 p-value를 통해 선택한 fingerprint 데이터
- pca : 수치형 + pca로 압축한 fingerprint 데이터
2단계 : 데이터 분할 및 전처리
- 학습/검증/테스트 데이터를 8:1:1로 분할
- 스케일링 (StandardScaler)
- 전처리된 데이터셋 저장
3단계: 모델 선택 및 학습 단계
앞서 구성한 3가지 feature 세트를 기반으로 머신러닝 모델을 학습한다.
- Logistic Regression
- Random Forest
- XGBoost
- MLPClassifier
- LightGBM
평가지표로는 아래를 사용했고, 수업에서는 F1-score를 기반으로 순위를 매겼다.
- Accuracy
- Precision
- Recall
- F1-score
- ROC-AUC
4단계 : 모델 평가
이 사진으로 알 수 있듯이 F1-score가 가장 높은 모델은 혼자만 0.8을 넘는 LightGBM + pca 조합이었고, pca 제외 feature에서는 Random Forest 모델을 사용했을 때가 성능이 가장 좋았다.
나는 전반적으로 평균 성능이 좋은 LGBM 모델을 선택했다.
여담이지만, 반에서 순위권에 들던 사람들 대부분 RF나 XGBoost를 사용했고, pca 같은 차원 축소 방식 대신 label이 모두 0/1인 것들만 제거한 전체 컬럼을 데이터로 넣었었다. 아무래도 사람으로 인해 창출한 데이터가 아니라 “화합물” 데이터라는 점이 데이터를 굳이 축소하지 않아도 되는 이유였던 것 같다. 이런건 도메인 지식과 경험에서 나오는 것 같다. 데이터 분석에서 왜 도메인 이해가 중요한지도 알 수 있었다. (이렇게 또 하나 배웠다!)
5단계 : 하이퍼파라미터 튜닝
하이퍼파라미터는 사람이 직접 설정할 수 있는 파라미터를 의미한다.
튜닝할 대상
- 모델 : LGBM
- 데이터 : pca feature set
- 목표 지표 : ROC-AUC (모델의 전체적인 분류 성능)
튜닝 방법
GridSearchCV를 사용해서 하이퍼파라미터 튜닝을 수행했고, Stratified K-Fold 검증 방식을 사용했다.
3 x 3 x 3 x 2 x 2 x 2 = 216 조합으로 훈련을 진행했다. 뭣도 모르고 216번으로 진행해서 무려 49분이나 튜닝이 실행됐다..;; (무지성으로 조합하는 바람에 막판에 시간이 진짜 부족했다..)
📌 Best Params: {‘colsample_bytree’: 0.7, ‘learning_rate’: 0.05, ‘max_depth’: 10, ‘min_child_samples’: 20, ‘num_leaves’: 63, ‘subsample’: 0.7}
이렇게 Best 파라미터를 찾아줬다!
6단계 : 모델 재학습
그 뒤, 하이퍼파라미터를 최종 모델에 다시 넣고 다시 한 번 모델 학습을 진행했다.
🎯 단일 모델 Test 결과
Accuracy : 0.7712574850299401
Precision: 0.764
Recall : 0.8395604395604396
F1 Score : 0.8
ROC-AUC : 0.8577241179872759
🎯 최종 모델 Test 결과 (튜닝):
Accuracy : 0.7689
Precision : 0.7453
Recall : 0.8747
F1 Score : 0.8049
ROC-AUC : 0.8631
우리의 평가지표인 F1 Score가 미미하지만 조금 오른 모습을 볼 수 있다.
+) 추가 : 모델 해석
모델링을 진행하며, Permutation Importance와 SHAP 해석 방식을 적용해봤다.
Permutation Importance
- 그래프로 나온 바가 높을수록 중요도가 높고, 낮을수록 중요도가 낮다.
- 이 결과를 기반으로 각 컬럼이 중요한 지 그 여부를 알 수 있다.
- 다시 말해, 변수들의 중요도 순위는 알 수 있어도, 왜 중요한지 직관적인 해석은 어렵다.
SHAP
- feature가 양성/음성 예측에 어떤 방향으로 기여했는지까지 볼 수 있다.
경험과 관련 지식이 더 필요하겠지만, 미약하게나마 모델을 해석해보는 경험을 할 수 있었다.
SKALA 과정을 통해 데이터분석에 대해 처음 배웠는데, 데이터분석의 매력을 알게 된 시간이었다.
수업만 들었을 때는 EDA를 어떤 식으로 진행하는지 감이 잘 안 왔는데, 실제로 프로젝트를 진행하며 EDA의 과정과 중요성, 데이터를 바라보는 시각을 기르고,
수업에서 배웠던 모델링 개념들을 직접 사용하며 더 재밌게 공부할 수 있었다.
물론 처음에는 데이터분석에 대한 감이 안 잡혀서 삽질도 많이 하고, 똑같은 작업을 이중으로 반복하기도 했지만, 시행착오를 겪으며 데이터 모델링 방식에 대해 더 생각해보는 시간이었던 것 같다.
(물론 아직 부족하다)
데이터분석! 생각보다 재밌는데?!