brunch

You can make anything
by writing

C.S.Lewis

by 스토너 Aug 15. 2021

캐글 Kaggle 대회 데이터를 분석해보자 (2)

SMOTE 오버샘플링, train/test 분류






시간이 나면 분석했던 프로젝트 리뷰를 짬짬히 올려보려고 하고 있지만 

오랜만에 글을 올리는 것 같습니다.


구독자 분들께서 응원의 댓글도 남겨주시고 하여 더 힘이 나는 요즘입니다.


오늘은 캐글대회 SUV 구매 결정 예측 데이터 분석 두번째 시간입니다.


왼쪽 label 0에 비해 오른쪽 label 1 데이터량이 현저히 적다.



지난번에 SUV 타겟 변수인 label 0 (구매결정 안함)데이터 수와 label 1(구매결정 함) 데이터 수가 

비율이 5:5 가 아니라는 것을 확인했습니다. 


극단적으로 차이가 나지는 않지만 데이터 비율을 동일하게 맞춰서 

모델 훈련을 하면 좀 더 정확도 높은 모델을 만들 수 있습니다.


불균형적인 데이터량을 샘플링을 통해서 균등하게 맞춰주도록 하겠습니다.


샘플링은 언더샘플링과 오버샘플링이 있는데

언더 샘플링의 단점으로는 잠재적으로 정보 가치가 높은 데이터를 버리는 방식으로 유용한 데이터가 사라지는 위험이 있습니다.


오버샘플링은 동일한 데이터를 똑같이 복사해서 수만 늘리는 방식으로 오버피팅, 과적합 위험성이 있습니다.

언더샘플링과 오버샘플링 모두 ML을 돌려본 결과 오버샘플링이 ML정확도 0.01% 더 높게 나왔기 때문에


오버샘플링 방식으로 데이터를 학습시켰습니다.


오버 샘플링은 또 SMOTE 방식과 ADASYN 방식으로 나누어지는데요. 

두 방식으로 모두 샘플링을 해본 결과 SMOTE 방식이 좀 더 정확도가 올라갔기에 SMOTE 방식을 사용하기로 했습니다. 


알고리즘을 통한 오버샘플링(SMOTE)

출처 : https://towardsdatascience.com


오버샘플링은 지난 시간에 데이터 수가 상대적으로 부족한 label의 데이터 수를 상대 데이터 수와 비율이 맞게 임의의 데이터를 생성하는 것이라 설명드렸습니다. 


동일한 데이터를 똑같이 복사해서 수만 늘릴 때 과적합이 발생할 위험이 있지만 SMOTE 방식은 나름의 수학적 거리 계산을 바탕으로 샘플을 생성하여 과적합 발생 소지가 줄어듭니다. 


* 보통 과적합(Overfitting) 위험이라고 말하는 것은 지나치게 훈련데이터와 fitting이 된 모델로 다른 데이터를 넣었을 때 일반화하지 못하고 성능이 떨어지는 모델을 말합니다. 


데이터 수를 늘리는 생성 단계는 다음과 같습니다. 



- 소수 데이터 중 특정 벡터 (샘플)와 가장 가까운 이웃 사이의 차이를 계산한다.

- 이 차이에 0과 1사이의 난수를 곱한다.

- 두 개의 특정 기능 사이의 선분을 따라 임의의 점을 선택할 수 있다.



필요 함수를 정의하여 SMOTE 방식으로 label 1의 데이터 수를 늘리고 차트 시각화합니다. 

class = 0, n=257

class = 1, n=257

에서 알 수 있듯이 동일한 비율의 데이터로 비율을 맞췄습니다. 






Train / test data로 분류하기 


자 이제 데이터는 모두 준비 완료되었습니다. 


독립변수로 사용할 X(data)에는 Age(나이), EstimatedSalary(예상연봉), 정규화한 Gender_Female(여성), Gender_Male(남성) 성별 데이터를 입력합니다. 


타겟변수로 사용할 y(target)에는 방금 SMOTE 방식으로 오버샘플링한 구매 결정 여부 label 0와 1 데이터를 넣어주었습니다. 


독립변수와 종속변수(타겟)를 정의하였다면 그 다음 train데이터와 test 데이터로 나누어 봅니다. 

 

train 데이터와 test 데이터를 나누는 이유는 훈련 데이터(train data)로 모델을 훈련시킨 모델을 실제로 다른 데이터에 적용하였을 때 성능이 우수한지 평가하기 위해서입니다.


우리가 시험을 볼 때 공부한 문제가 100% 동일하게 시험에 나오지 않는 것처럼 성능을 평가할 시험문제는 훈련데이터와 달라야 합니다. 


이때 동일한 훈련데이터로 평가한다면 그 모델은 신뢰할 수 없을 것입니다. 모델 훈련을 하기 전 보통 7:3의 비율로 훈련/test 데이터를 나눕니다. 



train과 test 데이터를 나누었다면 적합한 모델을 찾는 데이터 마이닝 단계를 거칩니다. 


SUV Car 결정 구매 데이터셋은 이진 예측 분류 데이터셋으로 KNN, 로지스틱 회귀분석, 결정트리, XGboost 등 다양한 알고리즘을 적용할 수 있습니다. 


최적의 모델 알고리즘을 찾기위해서는 데이터 마이닝 단계를 거칩니다. 


전 어떤 알고리즘을 사용했을까요?^^


다음 시간에는 모델 훈련과 최적의 하이퍼 파라미터를 찾는 방법에 대해서 설명드리겠습니다. 





브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari