기본 데이터 형태 확인
Train
train의 경우, int형 데이터 및 float형 데이터 -> 즉, 수치형 데이터만 존재
결측치는 없는 것으로 확인
수치로 알 수 있듯, 정상 거래 데이터에 비해 사기 거래 데이터는 현저히 적음
머신러닝 모델에서는 극도로 불균형한 레이블 값 분포는 좋은 성능을 내기 어려움 -> 오버 샘플링으로 보완
왜?
정상 범주에 속하는 데이터 1의 경우 그 수가 많지만, 사기 거래 데이터인 0인 경우 적게 분포하고 있음을 확인 가능
본격적인 모델 학습을 위해 데이터 세트를 분리!
get_train_test_dataset()
학습 데이터 세트 및 테스트 데이터 세트 레이블 값 비율 확인(백분율)
로지스틱 회귀
첫 로지스틱 회귀 결과
첫 모델 학습 결과 정리
- 모든 지표가 LightGBM > 랜덤 포레스트 > 로지스틱 회귀 순!
- LightGBM이 불균형 데이터에서 가장 사용하기 좋은 모델임을 증명함
첫 모델 학습 결과를 앙상블로 확인
- Voting Classifier를 사용해서 앙상블을 구성하고, ROC-AUC를 출력
- 앙상블 모델의 ROC-AUC : 0.9334
Amount 피쳐
로지스틱 회귀
standardScaler로 Amount를 정규분포 형태로 변환
로지스틱 회귀, 랜덤 포레스트, LightGBM 재수행
주의 사항 : 학습 데이터 세트만 오버 샘플링 해야 함!
데이터 증식 및 Class의 0과 1 값이 동일하게 설정
로지스틱 회귀
분류 결정 임곗값에 따른 정밀도와 재현율 곡선으로 문제 확인
랜덤 포레스트
LightGBM
로지스틱 회귀
랜덤 포레스트
트리 개수, 트리의 max_depth, min_samples_split를 이용한 튜닝 진행
이렇게 했음에도 불구하고 시간이 과도하게 오래 소요되는 문제가 있어 임의의 값으로 진행
LightGBM
시간이 오래걸리는 문제가 있기 때문에 RandomizedSearchCV를 이용해 탐색!
리프 노드의 경우, 너무 많으면 과적합이 발생할 수 있으니, 적당하게 설정!
학습률도 비슷.
트리 개수와 max_depth도 지정
로지스틱 회귀
랜덤 포레스트
LightGBM
결과 분석
앙상블 결과 비교(ROC-AUC)
대체적으로 약 0.93에서 약 0.94까지 성능 지표를 올린 것으로 결론
최종 결과 분석