본문 바로가기

Project/Kaggle

[Kaggle] 통신사 고객 이탈 예측 - 코드 및 결과 분석

2. 코드 분석 및 결과 분석

2-1. 코드분석

전체 코드는 아래 깃허브를 참고해 주세요.

https://github.com/sanghwi-git/predict_churn/blob/master/Final%20handling.ipynb

 

sanghwi-git/predict_churn

Contribute to sanghwi-git/predict_churn development by creating an account on GitHub.

github.com

 

과정

  1. 데이터 전처리
    1. 데이터 로드
    2. 결측치 처리
    3. 타입 변경하기
    4. 이탈 =1/ 이탈하지 않음=0 : 이탈율 확인을 위함
  2. 탐색적 자료 분석(EDA)
    1. 특성별 빈도수 파악
    2. 특성별 이탈율 파악
      1. 카테고리형
      2. 연속형
    3. 상관관계 행렬
    4. EDA 결과 분석
  3. 특성 공학(Feature Engineering)
    1. 연속형 변수의 스케일링 - MinMaxScaler()
    2. 원 핫 인코딩
  4. 모델링 
    1. 로지스틱 회귀
    2. 의사결정 나무(Decision Tree)
    3. XGBoost
    4. LightGBM
    5. Catboost

 

 

2-2. 결과 분석

GridSearch 의 scoring 기준을 f1.5 score로 한 결과값입니다.

평가 지표들과 관련해서는 모델 평가하기 - 정확도만 높으면 좋은 모델? 포스팅을 참고해주세요.

그럼 여기서 무엇이 좋은 모델일까요?

 

 

모델 성능을 판단하기 이전에, 재현율과 정밀도 중 어떤 지표가 더 중요한지 파악해 보겠습니다.

 

고객 이탈 예측의 오류에는 두 가지가 있습니다.

첫 번째로는 '이탈할 사람을 이탈하지 않을 것이라고 잘못 예측' 하는 경우와

두 번째로는 '이탈하지 않을 사람을 이탈할 것이라고 잘못 예측' 하는 경우 입니다.

 

회사의 측면에서 봤을때 두 번째 오류보다 첫 번째 오류에 대한 수정이 더 중요하다고 생각할 것입니다. 

첫 번째 경우에는 고객이 이탈해버리게 되지만, 두 번째 경우에는 예산을 불필요하게 더 사용했을 뿐이기 때문이죠!

 

첫 번째 오류는 낮은 재현율에 따른 손해이고, 두 번째 오류는 낮은 정밀도에 따른 손해인 점을 고려하면

'재현율을 높이는 것에 더 집중하겠다'고 할 수 있습니다.

 

따라서 F1.5 score 혹은 F2 score가 가장 높은 XGBoost 알고리즘을 선택하겠습니다.

 

 


 

다음 포스팅에서는 고객 집단을 분류하고, 각 집단별로 재현율과 정밀도를 얼마나 높이고 낮출지, 그 기준을 손익분기점을 중심으로 정의해보겠습니다. 

지금 생각으로는 '월 청구 금액이 높고 남은 약정이 긴 집단'의 경우 정밀도와 상관없이(아무리 낮더라도) 재현율을 무조건적으로 높이는 것을 요구할 것 같고, '월 청구 금액이 낮고 남은 약정이 짧은 집단'의 경우 정밀도의 중요도 역시 높아질 것으로 여겨집니다. 

제 생각과 동일한 결과가 나타날지는 다음 포스팅에서 다뤄보겠습니다.

 

 


 

- 아쉬운 점

그나마 좋은 모델을 선택하기는 했지만, 전반적인 점수를 봤을때 좋은 모델이라고 생각하지는 않습니다. 대부분의 이탈은 제대로 분류했지만, 정밀도가 0.5 수준으로 예측한 사람중 절반은 맞고 절반은 틀리기 때문입니다. 

 

만약 100명중 실제 10명이 이탈하는 데이터를 가지고 실험한다면,

9명에 대해서는 이탈을 정확하게 예측하겠지만, 사실 18명을 이탈했다고 예측했기 때문에 이탈 방지를 위한 9명 분의 예산을 낭비한 꼴이죠.

 

이렇게 정말 좋은 성능의 모델이 나오지 않은 것은 알고리즘에 대한 얕은 지식 때문인 것 같습니다.

각 파라미터가 하는 역할에 대해 정확하게 파악하지 못했기도 하고, 그래서 적당한 값으로 시도해 본 것 같지도 않습니다.

 

캐글 포스팅이 정리되면 여러가지 알고리즘과 그 파라미터들에 대해서 정리하는 포스팅을 기획해보겠습니다.