3. Modeling
앞선 포스팅을 통해 데이터 내 분석 대상 피처를 선정하는 과정과, 데이터 전처리 과정을 나타냈다. 하지만 이번 프로젝트의 주제가 예측 모델을 개발하는 것이기 때문에 모델링에 굉장히 많은 공을 들였고, 다양한 시도를 해봤다.
3-1. 평가 지표
먼저, 모델링을 하는 과정에서 중요하게 생각한 핵심 지표는 F1-Score
와 ROC-AUC score
이다. 흔히 모델의 평가 지표로 사용되는 정확도(Accuracy) 같은 경우엔 불균형이 심한 데이터에서는 비중이 높은 클래스에 대한 예측만 하더라도 높은 수치가 나올 수 있기 때문에 부적합한 평가 지표라고 생각해 제외했다. 반면 정밀도(Precision)
과 재현율(Recall)
이 적절하게 조합되어서 사용되는 F1-score와 이진 분류의 예측 성능 측정에서 중요하게 사용되는 지표인 ROC-AUC score가 본 프로젝트의 평가 지표로 적합하다 판단했다. 두 평가 지표 모두 1에 가까울수록 성능이 좋은 것을 나타낸다.
3-2. 샘플링 기법 비교
전 포스팅에서 불균형이 심한 데이터에서 오버샘플링이 가장 일반적으로 사용되는 샘플링 기법이라고 하였다. 그러나 본 프로젝트의 데이터는 크기가 매우 큰 데이터이기 때문에 언더샘플링(Undersampling)
도 충분히 활용이 가능하다고 생각했고, 두 샘플링의 성능을 비교했다. 오버샘플링과 언더샘플링 중 가장 일반적인 SMOTE
와 NearMiss 1
을 사용했다. 분류 모델은 Decision Tree
, Logistic Regression
, XGBoost
, AdaBoost
, RandomForest
를 활용했다.
첫 번째 이미지에서의 F1 score와 두 번째 이미지에서의 ROC-AUC score를 기준으로 샘플링 성능을 비교했을 때, 오버샘플링이 확연히 성능이 좋은 것을 확인할 수 있다.
3-3. 단일 모델 성능 비교
앞선 샘플링 기법 비교를 통해 오버샘플링을 활용할 것을 결정했는데, 오버샘플링 내에도 다양한 기법들이 있어서 이를 비교했다. 활용한 오버샘플링 기법에는 SMOTE
, BorderlineSMOTE
, ADASYN
, SMOTETOMEK
, SMOTEENN
이 있다. 분류 모델은 CatBoost
와 LightGBM
을 새롭게 추가했고, Decision Tree와 AdaBoost를 제외했다.
3-4. 하이퍼 파라미터 튜닝
다음으론 GridSearchCV
를 활용한 하이퍼 파라미터 튜닝을 진행했다. 데이터의 개수가 오버샘플링 이후에 약 1,200만 개나 되기 때문에 GPU 가속이 가능한 부스팅 계열 모델을 통해 하이퍼 파라미터 튜닝을 진행했고, XGBoost와 LightGBM, CatBoost가 이에 해당한다. 그리고 추가적으로 Logistic Regression 모델에 대한 하이퍼 파라미터 튜닝도 진행했다. 결과는 다음과 같다.
- Logistic Regression
- C : 1
- Penalty : L2
- XGBoost
- learning_rate : 1
- max_depth : 10
- min_child_weight : 5
- LightGBM
- learning_rate : 0.2
- max_depth : -1
- min_child_samples : 15
- num_leaves : 80
- CatBoost
- depth : 6
- iterations : 1000
- 12_leaf_reg : 1e-19
- leaf_estimation_iterations : 10
최적 파라미터를 계산한 후, 이를 통해 예측 모델의 성능을 비교했다.
3-5. 복합 모델 구성
단일 모델들의 성능을 확인한 이후에, 이러한 단일 모델들을 여러 개 활용한 복합 모델 또한 구성해보았다. 여기서 활용된 방법은 하드 보팅(Hard Voting)
, 소프트 보팅(Soft Voting)
, 스태킹(Stacking)
이다. 각각의 개념을 간단하게 살펴보면, 하드 보팅의 경우 분류기들의 레이블 값 결정 확률들을 모두 더하고 이를 평균해서 이들 중 확률이 가장 높은 레이블 값을 최종 보팅 결괏값으로 선정한다. 소프트 보팅은 다수결 원칙과 유사하게 예측 결괏값들 중 다수의 분류기가 결정한 예측값을 최종 보팅 결괏값으로 선정한다. 마지막으로 스태킹이란 여러 가지 다른 모델의 예측 결과값을 다시 학습 데이터로 만들어 메타 모델로 재학습시켜 결과를 나타내는 방법을 말한다. 본 팀에선 메타 모델로 LightGBM을 활용했다. 복합 모델들의 성능은 최종 모델 선정 과정에서 확인할 수 있다.
4. 분석 결과
4-1. 최종 예측 모델 선정
먼저, 최종 예측 모델을 선정했다.
성능적인 측면으로만 봤을 땐 Random Forest 단일 모델의 성능이 가장 좋았다. F1-Score도 2등이었으며 ROC-AUC Score 또한 1등을 기록했다. 그러나 Random Forest 모델의 경우 데이터의 학습이나 파라미터 튜닝 등에서 GPU를 활용할 수 없어 매우 오랜 시간이 걸려 활용에 제한점이 있다. 따라서 성능도 우수하고, 데이터의 학습 및 파라미터 튜닝 속도에서 우세한 측면을 가지고 있는 Stacking(Meta Model : LightGBM) 모델을 최종 예측 모델로 선정하였다.
최종 예측 모델의 성능을 비교해보기 위해 오버샘플링을 하지 않은 원본 데이터에 하이퍼 파라미터 튜닝을 수행하지 않은 LightGBM 모델을 적용시킨 결과와 최종 예측 모델의 성능을 비교해보았다. 앞서 중요하지 않게 판단했던 Accuracy 측면에서는 소폭 하락한 모습이었지만 F1 Score가 대폭 상승하였고, Confusion Matrix를 확인해 본 결과 실제 86,600개의 1 class에 대하여 378개만 맞춘 것에 비해 최종 모델은 50,811개까지 맞추면서 성능이 대폭 향상한 것을 확인할 수 있다.
4-2. 프로젝트 결과
프로젝트 결과 다음과 같은 인사이트를 얻을 수 있었다.
- 대출 신청을 하는 사람들의 경우 신용 점수가 낮은 경우가 많다.
- 대출 금리가 낮을수록, 대출 한도가 높을수록 대출 신청까지 이어질 가능성이 높다.
- 총 기대출 금액보단 기대출 당 평균 기대출 금액이 대출 신청 여부 예측에 더 중요하게 작용한다.
- 대출 신청을 하는데 생각보다 나이는 중요하지 않게 작용한다.
5. 코멘트
- 불균형이 매우 심한(17:1)의 데이터셋을 처음 다뤄보는 경험이었다.
- 이렇게 불균형이 심한 데이터를 다룰 때는 Accuracy보단 F1 Score(Precision, Recall) 값이 더 중요한 평가 지표라는 것을 알았다.
- 오버샘플링에 다양한 기법들이 있었고, SMOTE, BorderSMOTE, ADASYN, SMOTETOMEK, SMOTEENN 기법을 사용해보면서 각 샘플링 별 성능 차이를 확인했다. 하지만 각 기법마다 구체적으로 어떤 원리로 오버샘플링이 진행되는지는 완전히 이해하지 못했다. 추가적인 공부가 필요하다.
- 데이터의 크기가 매우 크기 때문에 모델들의 학습이나 하이퍼 파라미터 튜닝 등을 진행하는데 GPU 환경이 필수적으로 필요했고, 연구실 서버를 통해 처음 제대로 GPU를 활용해보았다.
- 이론적으로만 알고 있었던 하드 보팅, 소프트 보팅, 스태킹 모델도 구현해서 사용해봤다. 확실히 어느 정도의 성능 향상이 있었다.
- 상당히 많은 피처가 있었는데, 이를 모두 활용하지 못하고 일부 피처만 사용할 수 밖에 없던 것이 매우 아쉽다. 처음에 타겟 피처와 상관성이 높은 피처가 없어서 피처를 선택하는 과정에서 많은 고민을 했다. 그래서 실제 어플을 사용해보면서 피처를 설정하는 방법을 선택했는데, 이를 충분한 EDA 과정을 통해 데이터를 파악하고, feature selection을 진행했으면 더 좋은 결과가 나왔을 것 같다.
- 논리적으로 각 피처마다의 결측치 처리 방법에 대해 고민하고, 이를 적용시켰다. 그 전에는 그저 평균값이나 중앙값 정도의 아이디어밖에 생각하지 못했는데, 이를 좀 더 실제 상황에서 고민하면서 결측치를 삭제하거나 다른 값으로 대체해볼 수 있었다.
- EDA를 깊게 진행하지 못했다. 아마 EDA를 더욱 넓은 범위에서 진행했으면 더 많은 인사이트를 발견하고, 이를 모델링에 적용했을텐데 그러지 못해 아쉽다.
- 모델링을 다양하게 진행해본 후 최종적인 모델을 선정하는 과정을 경험해봤다.
- 샘플링 기법 간 비교 / 단일 모델 성능 비교 / 하이퍼 파라미터 튜닝 / 복합 모델 비교
- 모델링에 많은 공을 들인 것에 비해 프로젝트의 결과가 너무 부실하다. 이는 결국 핀다 앱 자체에서 이용자들이 어플을 통해 대출 신청까지 이어가게끔 솔루션을 제공하기 위해 모델을 구성하는 것인데, EDA가 부족해 이에 대한 결론까지 도출해내는 데 어려움을 느꼈다.
- 프로젝트 경험이 부족하다는 것을 느꼈다. 전체적인 프로젝트의 진행 과정도 그렇고 기본적인 결측치 처리부터 이상치 처리 등에서 부족한 점을 많이 느꼈다. 간단한 프로젝트라도 큰 주제를 가지고 데이터를 통해 결론까지 도출해내는 경험을 더욱 쌓아야겠다.