몇주를 안했더니 말하는 감자가 되었다..... ADsP준비하면서 비슷한 용어들도 나와서 그나마 감을 다시 잡는데에는 시간이 얼마 안걸린것 같기도...
- 지도 학습: 데이터 분석의 목적이 명확하게 정의된 형태의 특정 필드 값을 구하는 것-> 분석하고 지식을 도출하는 것이 목적
- 분류: 속성값이 범주형-> 데이터의 실체가 어디에 속하는지 예측(그룹은 각각의 특성으로 정의되어있다.)
그래서 오늘 할 분류 실습은, 신용카드 데이터를 사용해서 신용카드 사기 검출을 분류하는 실습
->성능 평가 결과 로지스틱 회귀와 LightGBM 모델 모두 변환 전과 후를 비교
신용 사기 검출
https://www.kaggle.com/mlg-ulb/creditcardfraud/version/3
Credit Card Fraud Detection
Anonymized credit card transactions labeled as fraudulent or genuine
www.kaggle.com
타이타닉보다 훨씬 현실적인 것 같은 느낌이 든다
1. 데이터 뜯어보기 2. 학습용/테스트용 데이터 나누기 3. 데이터 전처리 후 모델 학습/예측/평가 3-1. 데이터 분포도 변환 3-2. 이상치 데이터 제거 3-3. SMOTE 오버 샘플링 4. 결과 |
1. 데이터 뜯어보기
근데 여기서 문제점, Class 값을 보면 데이터가 상당히 불균형함을 확인할 수 있다. (0: 정상 트랜잭션/1: 사기 트랜잭션) 여기서 전체 데이터의 약 0.172%만이 레이블 값이 1이다. (사기와 같은 이상현상은 전체 데이터에서 차지하는 비중이 매우 적을 수 밖에 없다)
언더 샘플링과 오버 샘플링의 이해
예측 성능의 문제: 레이블이 불균형한 분포를 가진 데이터 세트를 학습시킬 때 이상 레이블을 가지는 데이터 건수는 매우 적기 때문에 제대로 다양한 유형을 학습하지 못한다. 반면에 정상 레이블을 가지는 데이터 건수는 매우 많기 때문에 일방적으로 정상 레이블로 치우친 학습을 수행해서 제대로된 이상 데이터 검출이 어려워진다.
=> 지도학습에서 극도로 불균형한 레이블 값 분포로 인한 문제점을 해결하기 위해서는 적절한 학습데이터 확보가 필요
- 언더 샘플링: 많은 데이터 세트를 적은 데이터 세트 수준으로 감소시키는 방식(정상:이상=10,000:100-> 정상을 100건으로) 이렇게 학습을 수행하면 과도하게 정상 레이블로 학습/예측하는 부작용을 개선할 수 있지만, 너무 많은 정상 레이블 데이터를 감소시켜 정상 레이블의 경우 오히려 제대로 된 학습을 할 수 없다는 단점이 있어 잘 적용하지 않는다.
- 오버 샘플링: 이상 데이터와 같은 적은 데이터 세트를 아주 약간만 변형해서 증식하는 방법. (동일한 데이터를 단순히 증식하면 과적합이 되기 때문) 대표적으로 SMOTE(Synthetic Minority Over-sampling Technique) 방법이 있는데, 이는 적은 데이터 세트에 있는 개별 데이터들의 K Nearest Neighbor 를 찾아서 이 데이터와 K개 이웃들의 차이를 일정 값으로 만들어 기존 데이터와 약간 차이가 나는 새로운 데이터를 생성하는 방식이다.
2. 학습용/테스트용 데이터 나누기
데이터를 뜯어봤으니 학습과 예측을 위해 데이터를 학습용과 테스트용으로 나눠야 한다.
이때, 불균형한 데이터이기 때문에 Stratified 방식으로 나눠야 Class의 분포가 균등하게 나눠질 수 있습니다.
->데이터의 원본을 유지한 채로 데이터를 전처리하고 나누기 위해 get_preprocessed_df 와 get_train_test_dataset 함수를 만들어 진행
학습 데이터 레이블의 경우 1값이 약 0.172, 테스트 데이터 레이블의 경우 1값이 약 0.173%-> 학습데이터랑 테스트 데이터랑 큰 차이없이 분할되었다.
3. 데이터 전처리 후 모델 학습/예측/평가
예측 성능 평가도 하고,(정확도, 정밀도, 재현율, F1, AUC)
각 데이터 전처리 하고 모델의 예측 성능 평가를 매번 할 것이기 때문에 get_model_train_eval() 함수를 만들었음
모델은 분류에 대표적으로 쓰이는 로지스틱 회귀 모델과 최근 캐글에서 인기있는 앙상블 방법인 LightGBM 모델을 사용
위의 방법으로모델을 학습한 뒤 별도의 테스트 데이터 세트에서 예측 평가를 수행
3-1. 데이터 분포도 변환
데이터 세트에서 Amount 피처의 값이 한쪽에 쏠려있는 상당히 불균형한 분포를 가지고 있었기 때문에
① 정규화
: 데이터 세트에서 Amount 피처의 값이 한쪽에 쏠려있는 상당히 불균형한 분포를 가지고 있었기 때문에 이러한 분포를 StandardScaler를 통해 정규 분포 형태로 변환해서 평가해보고,
② 로그 변환
3-2. 이상치 데이터 제거
이상치 데이터란 전체 데이터의 패턴에서 벗어난 이상 값을 가진 데이터
->머신러닝 모델의 성능을 저하시킬 가능성이 높다
->이상치를 찾는 방법 중 대표적인 방법은 IQR 방법입니다.(경영통계에서도 ADsP에서도 등장..)
이상치 데이터를 제거하기 위해 먼저 어떤 피처의 이상치 데이터를 제거할 것인지가 필요
target값과 가장 상관성이 높은 피처들을 위주로 이상치를 제거하는 것이 좋다
(밑에)피처들의 상관도를 히트맵임!
맨 아래줄을 보면 Class와 다른 피처들의 상관관계를 볼 수가 있는데 음의 상관관계가 가장 높은 피처인 V14(-0.3)와 V17(-0.33)에 대해서 이상치를 검출하고 제거해보자
->8296, 8615, 9035, 9252 번 Index가 이상치로 추출되었다.
이상치 제거 후 로지스틱 회귀의 경우 재현율이 0.6014 에서 0.6712 로, LightGBM의 경우 0.7635 에서 0.8288 로 크게 증가했다.
3-3. SMOTE 오버 샘플링
SMOTE를 적용할 때에는 반드시 학습 데이터 세트만 오버 샘플링해야한다.(검증 데이터 세트나 테스트 세트를 오버 샘플링하면 결국 원본데이터가 아니라서 의미가 없다)
-먼저, 로지스틱 회귀모델
-LightGBM모델
4. 결과
추가로, SMOTE 오버 샘플링은 로지스틱 회귀 정밀도 0.0540, 재현율 0.9247, ROC-AUC 0.9737/ LightGBM은 정밀도 0.9323, 재현율 0.8493, ROC-AUC 0.9789가 나왔다는 것.
'cs,코딩,알고리즘 > <파이썬 머신러닝 완벽 가이드>스터디' 카테고리의 다른 글
회귀(Regression) (0) | 2021.11.16 |
---|---|
사이킷런 Linear Regression_보스턴 주택 가격 예측 (0) | 2021.11.15 |
분류 머신러닝 알고리즘-결정트리(시각화와 과적합) (0) | 2021.10.04 |
지도학습 분류 모델 평가지표 (0) | 2021.09.27 |
피마 인디언 당뇨병 예측 (0) | 2021.09.25 |