Project/2022 빅콘테스트

[2022 빅콘테스트] 앱 사용성 데이터를 통한 대출신청 예측분석 - Modeling

문세희 2023. 2. 19. 23:59

  모델에 넣고 성능을 확인하기 전, 상관계수를 분석하고 히트맵으로 시각화하는 과정을 통해 변수 간 상관관계를 분석하였다. 

변수 간 상관관계가 높은 것이 있으면, PCA(차원축소)를 진행해 주어야 한다.

이산형 변수의 상관관계 히트맵
연속형 변수의 상관관계 히트맵

  서로간의 상관관계가 높게 나온 변수들이 없으므로 PCA(차원축소)는 진행하지 않고 분석을 진행하였다. 모델 선택에 있어서 트리 기반 앙상블 모델인 XGBoost 모델과 LightGBM 모델을 놓고 고민하였다.

 

LightGBM과 XGBoost 모델의 구동방식, 특징비교

  두 모델 모두 앙상블 학습으로 여러 개의 트리를 결합하여 분석하는 모델이다. 이전 개인회생여부와 개인회생납입여부의 결측치를 예측할 때 user_spec데이터를 train data로 사용하였을 경우 XGBoost 가 더 나은 성능을 보여준 바가 있다. 하지만 그때와는 달리 user_spec 과 loan_result 데이터를 결합한 merge 데이터의 갯수는 1000만개 정도로, 이전과 다루는 데이터의 갯수 차이가 많이 났다. XGBoost는 데이터의 갯수가 많아지면 학습시간이 매우 길어지는 것과 하이퍼 파라미터 수정이 어렵다는 단점을 가지고 있기 때문에, LightGBM 모델을 선택하게 되었다.

 

LightGBM을 사용하더라도, 데이터의 피쳐와 수가 많았기 때문에 여전히 하이퍼 파라미터의 수정이 어렵다는 점이 존재하였다. 따라서 최적의 파라미터를 찾아 모델의 성능을 높이기 위해 베이지안 최적화 기법을 사용하였다. 

 

Hyper Opt는 베이지안 최적화에 기반해 목적함수를 최대/최소로 하는 최적해를 찾는 기법이다. 데이터의 갯수가 많았기 때문에, 초기에는 탐색 범위를 설정한 뒤, n_estimators를 100으로 설정하여 최적해를 탐색하였고, 찾은 최적의 파라미터로 다시 범위를 좁혀 수정하여 n_estimators를 1000으로 설정하여 다시 최적해를 찾는 방법을 선택하였다. 

베이지안 최적화를 이용해 찾은 하이퍼파라미터이다.

from sklearn.model_selection import train_test_split

train_input, test_input, train_target, test_target = train_test_split(train_data, target_data, test_size = 0.3, random_state= 42)

from lightgbm import LGBMClassifier
from lightgbm import plot_importance
lgbm = LGBMClassifier(n_estimaters =1000 ,colsample_bytree= 0.7980401165961793, learning_rate= 0.1995359539634458, max_depth= 14, min_child_weight= 100.0)

lgbm.fit(train_input, train_target)

print(lgbm.score(train_input, train_target))
print(lgbm.score(test_input, test_target))

lgbm_pred = lgbm.predict((test_input))

from sklearn.metrics import classification_report

print(classification_report(test_target ,lgbm_pred))

0.83이라는 f1 score을 얻을 수 있었다!