SUV 차량 구매 결정 예측 분석
최근 사내에서 수입자동차 브랜드 고객의 구매 데이터를 가지고 재구매 고객을 분류 예측하는 머신러닝 (인공지능)모델링 프로젝트를 준비 중에 있습니다.
본격적으로 프로젝트에 들어가기에 앞서 분류 예측 머신러닝 알고리즘을 공부해보고자 주말, 평일 가리지 않고 트리계열 알고리즘(결정트리, 랜덤포레스트, Gradient Boosting, Xgboost, Light gbm) 모델 공부 삼매경에 빠졌었네요.
공부한 내용은 써먹어야 잊지 않죠? 글로벌한 데이터 분석 경진대회 사이트인 캐글의 데이터 셋을 가지고 연습해보기로 했습니다.
SUV 차량을 구매하기로 결정한 400명의 고객 데이터셋입니다.
각 feature 수는 많지 않습니다.
User ID (고객식별 ID)
Gender (성별)
Estimated Income (예상 연봉)
Purchase Decision (0 = No; 1 = Yes) (SUV 구매 결정 여부)
데이터 셋은 아래 링크를 통해서 다운 받을 수 있습니다.
https://www.kaggle.com/arnabdata/suv-purchase-decision
위 데이터셋을 가지고 결정트리, 랜덤포레스트, Xgboost 등의 모델을 사용하여 SUV구매 결정 고객을 분류 예측하였습니다. 데이터셋이 작기 때문인지 3개 모델의 성능은 큰 차이가 나지 않았지만 그 중에서 그나마 가장 성능이 우수했던 Random Fores, Xgboost 모델을 적용한 과정을 소개하려고 합니다.
분류 예측 알고리즘은 트리 계열 말고도 KNN, 로지스틱 회귀분석, RNN 신경망 등의 다양한 모델을 사용할 수 있는데도 트리 계열로 적용했던 이유는 상위 캐글러들이 가장 많이 사용하기로 유명한 Xgboost의 성능을 같은 트리 계열 알고리즘과 비교하여 직접 경험해보고 싶었기 때문입니다.
그럼 먼저 라이브러리를 import 해볼까요
다운받은 폴더에서 Suv data를 불러옵니다.
데이터의 최소, 최댓값과 4분위수를 확인합니다.
50%가 중앙값이라고 볼 때 Age는 최소 18~60세 중에서 평균나이 37세, EstimatedSalary(예상 연봉)은 7만달러입니다.
Gender(성별) Column은 Male, Female로 범주형 변수입니다.
머신러닝을 돌리기 위해서는 수치형 변수로 변환해야 합니다.
원핫인코딩, 더미변수화 등 수치형 변수로 바꾸기 위해서는 다양한 방법이 있습니다.
한개의 Column에 0과 1로 분류하는 방법이
쓸 데 없는 열을 늘리는 것보다 나을 것 같습니다만,
Gender Column에 여성이면 1, 남성이면 1로 표현하는 더미화 함수를 적용했습니다.
모든 칼럼에 적용하면 모든 열이 기하급수적으로 늘어나면서 데이터셋 볼륨이 늘어날 수 있으므로
Gender에만 적용해야 합니다.
사실 데이터 전처리 단계에서는 각 칼럼별 데이터 분포의 비대칭도 확인, 중복, 이상치 탐색 및 제거, 결측치 처리, 파생변수 추가 등의 다양한 단계를 거쳐야 합니다만
SUV 구매 결정 고객 데이터 군은 중복, 이상치, 결측치가 없는 Clean한 데이터로 이미 Prepared data라고 볼 수 있습니다.
전 간단히 각 feature들의 분포가 비대칭적인지 확인만 해보았습니다.
대표적으로 age Column의 데이터 분포를 살펴보았을 때
고루 분포되어 있는 정규분포 모양인 것을 확인할 수 있습니다.
다른 데이터들도 특별한 비대칭적인 모양은 없었습니다.
다만 설명변수를 제외한 종속변수인 target data는 구매 결정을 하지 않은 고객 (0)이 구매결정한 고객(1)보다 좀 더 많은 것을 알 수 있습니다.
타겟 변수가 이처럼 0 과 1이진 분류로 나뉘어진 상태에서는 오버/언더 샘플링을 통해 불균형화된 데이터를 고르게 분포하는 형태로 변환을 해주어야 합니다.
전에 교통사고 데이터를 분석한 적이 있는데 사고가 난 것(1)과 사고가 나지 않은 (0) 데이터의 불균형도가 매우 심해서 모델링을 할 때 애먹었던 적이 있습니다.
데이터 수가 적은 값으로 큰값을 무조건 줄이는 언더샘플링(단점: 정보 손실 발생)과 데이터 수가 큰 값으로 적은 값을 복사하여 늘리는 오버샘플링(단점: 일반화가 현저히 떨어지는 과적합 발생) 등의 방법이 있습니다.
만 데이터를 무작정 줄이거나 복사하는 여러 방법을 사용한 결과
알고리즘을 통한 오버샘플링 (SMOTE) 방식이 제일 모델 성능이 우수했습니다.
(0.91% -> 0.92%로 0.01%의 성능 차이입니다.)
알고리즘을 통한 오버샘플링 (SMOTE) 방식은 다음에 이어서 소개하도록 하겠습니다.