티스토리 뷰
캐글의 산탄데르 고객 만족 데이터 세트를 XGBoost와 LightGBM로 학습하여 예측해보겠습니다. 산탄데르 고객 만족 데이터 세트의 370개의 피처를 기반으로 고객의 만족 여부를 예측하면 됩니다. 산탄데르 은행이 캐글에 경연을 의뢰한 데이터로서, 피처 이름은 익명 처리되어 있습니다. 레이블의 이름은 TARGET이며 0은 만족, 1은 불만족을 나타냅니다.
레이블의 분포가 불균형한 데이터 세트이므로, 모델의 예측 성능은 ROC-AUC(ROC 영역의 넓이)로 평가하겠습니다.
데이터 세트를 불러왔습니다. 레이블 칼럼을 포함하여 총 371개의 피처가 있고, 데이터는 76020개가 있습니다.
각 피처의 타입과 Null 값의 개수를 확인하겠습니다. 모든 칼럼은 int 혹은 float 자료형으로 별도의 레이블 인코딩은 필요가 없습니다. 또한 결손값도 없음을 확인했습니다.
전체 레이블에서 만족, 불만족인 데이터의 비율이 어느정도인지 확인합시다. 0이 만족, 1이 불만족을 뜻합니다. 불만족 데이터는 전체 데이터의 4%로, 레이블의 분포가 매우 불균형함을 알 수 있습니다.
결손값이 아예 없다는 것은 꽤 의심스럽습니다. 피처별 통계량을 확인해봅시다. var3 피처의 min값이 -999999.0입니다. 이는 분명 결손값 또는 예외값을 -999999.0라는 값으로 변환한 것으로 의심됩니다. 또한, ID 피처는 레코드를 식별하기 위한 피처이므로 드랍해야합니다.
var3 피처를 value_counts() 메서드를 통해 더 자세히 들여다봅시다. -999999인 데이터가 116개나 있습니다. -999999는 다른 값에 비해 너무 편차가 심하므로, var3에 가장 많은 값인 2.0으로 변환하겠습니다.
var3 피처의 결손값을 2로 대체하기 위해 사용한 replace() 메서드를 기억합시다. ID 피처는 드랍했습니다. 피처 데이터와 레이블 데이터를 분리했습니다. 피처 데이터의 칼럼은 ID 칼럼과 레이블 칼럼을 제외하여 369개입니다.
학습 데이터와 테스트 데이터를 분리했습니다. 두 데이터 세트의 레이블 분포 비율이 비슷하게 추출되었는 지 확인하겠습니다. 학습 데이터와 테스트 데이터 모두 불만족 데이터의 비율이 4%정도로 비슷한 것이 확인되었습니다.
XGBoost 모델의 조기 중단 기능을 사용하기 위해, 검증 데이터 세트가 필요합니다. 학습 데이터를 다시 학습 데이터와 검증 데이터로 분리합시다. 비율은 7:3입니다.
XGBoost Classifier 객체로 바로 학습을 진행해봅시다. 모델의 성능 평가는 ROC-AUC이므로, fit() 메서드의 eval_metric 인자를 'auc'로 설정합니다. 학습 및 검증 데이터를 명시해주고 학습을 진행했습니다.
n_estimators 값을 500으로 설정했지만, 조기 중단 조건이 만족되어 235번째에서 학습이 종료되었습니다. 테스트 데이터에 대한 ROC-AUC 값을 약 0.84입니다.
하이퍼 파라미터 튜닝을 통해 모델의 예측 성능을 조금 더 끌어올려봅시다.
과적합 제어에 효과적인 하이퍼 파라미터를 중심으로 튜닝을 해봅시다. 먼저 딕셔너리에 파라미터의 명칭과 검색 공간을 명시합시다.
목적 함수를 정의합시다. 목적 함수는 3 Fold 교차 검증 과정에서 얻은 평균 -1 * ROC-AUC 값을 반환합니다. ROC-AUC는 높을수록 좋으므로, 최솟값을 도출하는 입력값을 찾는 HyperOpt 라이브러리의 특성을 반영했습니다. 교차 검증시 XGBoost의 조기 중단 기능을 사용하려면 직접 KFold 클래스를 이용해 직접 학습과 검증 데이터를 추출하여 교차 검증을 수행해야 합니다. 수행 시간을 줄이기 위해 n_estimators는 100으로 줄이고, early_stopping_rounds도 30으로 줄였습니다.
튜닝시 매우 긴 시간이 소요되므로, 튜닝 결과에 대해서는 따로 명시하지 않겠습니다. 일반적으로 앙상블 계열 알고리즘에서 하이퍼 파라미터 튜닝으로 성능이 급격히 개선되는 경우는 많지 않습니다. 앙상블 자체가 과적합이나 잡음에 기본적으로 뛰어나기 때문입니다.
XGBoost와 성능은 비슷하지만 학습 시간이 더 짧은 LightGBM으로 산탄데르 고객 만족 데이터 세트를 학습해봅시다.
별도의 하이퍼 파라미터 튜닝 없이 LightGBM Classifier 객체를 학습시켰습니다. 테스트 데이터에 대한 LightGBM 모델의 ROC-AUC 값은 약 0.83으로 XGBoost 모델보다는 낮음을 확인할 수 있습니다. XGBoost와 마찬가지로, 하이퍼 파라미터 튜닝에는 많은 시간이 소요되므로 해당 과정은 따로 기술하지 않겠습니다.
'파이썬 머신러닝 완벽 가이드' 카테고리의 다른 글
파이썬 머신러닝 완벽 가이드 : 스태킹 앙상블 (0) | 2023.05.07 |
---|---|
파이썬 머신러닝 완벽 가이드 : 캐글 신용카드 사기 검출 분류해보기 (0) | 2023.05.06 |
파이썬 머신러닝 완벽 가이드 : 베이지안 최적화 기반의 하이퍼 파라미터 튜닝 (0) | 2023.05.03 |
파이썬 머신러닝 완벽 가이드 : LightGBM (0) | 2023.05.03 |
파이썬 머신러닝 완벽 가이드 : XGBoost(eXtra Gradient Boost) (0) | 2023.05.03 |