codestates / codestates/ds-blog

[최혜영] 프로젝트 두 번째, Catch me If you can <고객 편>

Open
#234 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
2
Forks
4
PR merge metrics
No merged PRs in 30d

Description

# 제 1장 이탈 고객을 찾아서
최근 자사 통신사 가입 고객중 고객 이탈율이 증가함에 따라 다양한 방법으로 이탈 고객을 막으려 했으나 쉽지 않았습니다.
해지 방어와 고객 프로모션을 진행했지만 예산만 낭비할 뿐 효과를 얻지 못했습니다.
이에 우리 팀은 이탈 고객 예측 모델로 잠재 이탈 고객들을 찾아 효과적인 방안으로 대응하려 합니다.

## 활용할 데이터 특성 목록
우리가 수집해온 데이터들은 아래와 같습니다.
이 데이터를 활용해서 이탈 고객 특성과 예측을 하겠습니다.
**1. 고객 정보**
- customerID : 고객 ID
- gender : 성별
- SeniorCitizen : 고령자 여부
- Partner : 배우자 유무
- Dependents : 부양 가족 유무

**2. 가입 서비스**
- PhoneService : 휴대폰 서비스
- MultipleLines : 다중 회선
- No phone service : 휴대폰 미가입자
- No : 휴대폰 가입자이나 해당 서비스는 미신청
- Yes. : 신청함
- InternetService : 인터넷 서비스
- OnlineSecurity : 온라인 보안
- No Internet service : 인터넷 미가입자
- No : 인터넷 가입자이나 해당 서비스는 미신청
- Yes : 신청함
- OnlineBackup : 온라인 백업
- No Internet service : 인터넷 미가입자
- No : 인터넷 가입자이나 해당 서비스는 미신청
- Yes : 신청함
- DeviceProtection : 장비 보호(보험)
- No Internet service : 인터넷 미가입자
- No : 인터넷 가입자이나 해당 서비스는 미신청
- Yes : 신청함
- TechSupport : 기술 지원
- No Internet service : 인터넷 미가입자
- No : 인터넷 가입자이나 해당 서비스는 미신청
- Yes : 신청함
- StreamingTV : TV 스트리밍
- No Internet service : 인터넷 미가입자
- No : 인터넷 가입자이나 해당 서비스는 미신청
- Yes : 신청함
- StreamingMovies : 영화 스트리밍
- No Internet service : 인터넷 미가입자
- No : 인터넷 가입자이나 해당 서비스는 미신청
- Yes : 신청함

**3. 계정 정보**
- tenure : 가입 기간 (단위 : 월)
- Contract : 계약 기간 단위
- Month to month 매월
- One year : 1년
- Two year : 2년
- PaperlessBilling : 온라인 청구서 혹은 자동 결제(지류 청구서등 종이 미발행)
- PaymentMethod : 결제 방법
- Electronic check : 전자 수표
- Mailed check : 우편 수표
- Bank transfer (automatic) : 자동 계좌 이체
- Credit card (automatic) : 자동 카드 결제
- MonthlyCharges : 월 결제액
- TotalCharges : 총 결제액
- Churn : 지난 달 해지 고객
## 문제 정의
- 이탈 고객 특성을 파악
- 이탈 고객을 예측하여 서비스 해지율 감소
분류문제로 이 문제를 해결해 보려고 합니다.
분류 문제란 0이냐 1이냐를 맞추는 것인데 우리는 오늘 이탈 고객이냐 유지 고객이냐를 맞출 것입니다.
## 데이터 둘러보기
데이터는 숫자로 값이 되어있는 수치형과 카테고리와 같은 범주형으로 수집됩니다.
숫자형일 경우에 이상치, 즉 숫자 데이터들이 고르게 분포하지 않고 혼자 동떨어져서 너무 높거나 너무 낮은 값에 있다면 제거를 하는게 모델 성능 향상에 도움이 됩니다.
따라서 수치형 데이터에 이상치가 있는지 살펴보겠습니다.
(tenure = 가입 기간 / MonthlyCharges = 월 결제액 / TotalCharges = 총 결재액)
image

데이터 분포가 고르고 특별히 이상치가 보이지 않습니다. 따라서 그대로 진행하겠습니다.


다음으로 우리가 알고 싶어하는 정보가 어떤 균형을 되어있는지 확인해보겠습니다.
우리는 지난 달 이탈 고객과 유지 고객의 비율을 볼텐데요, 다음 정보를 참고해주세요.
- Churn = 지난 달 이탈 고객
- No = 유지 고객
- Yes = 이탈 고객
image

이탈하지 않은 고객이 약 73%, 이탈한 고객이 26%입니다. 두 값 비율이 조금 불균형을 이루죠?
분류 문제에서 각 두가지 값의 비율이 비율이 50~70%인 경우에 추후 모델 성능을 확인할 때 정확도만 사용해도 괜찮지만
그 외에는 성능을 정확히 판단하기 위해 precision, recall, f1 등을 평가지표로 함께 사용하면 좋습니다.


그리고 이와 같은 분류 문제에서 성능을 판단하기 위해 기준을 세울 때 우리가 알고자 하는 값중 최빈값을 기준으로 많이 정합니다.
따라서 우리는 73%를 기준으로 삼아 지표가 73% 이상일 때 잘 만들어진 모델이라고 판단하도록 하겠습니다.


이제 간단하게 각 데이터들을 그래프로 확인해보겠습니다. 모아온 데이터 특성이 많아 그래프도 많습니다.
아래 그래프는 한 번에 휘리릭 금방 둘러보고 대략 어떤 분포를 가지고 있는지만 보시면 충분합니다.
먼저 범주형 데이터와 지난달 이탈 고객 여부에 따른 값의 분포가 이러합니다.
![image](https://user-images.githubusercontent.com/70491203/98486007-fdc85680-225d-11eb-98a5-e454afb9c6ed.png)
그래프만 봤을 때는
- 고령자인 경우
- 파트가 없는 경우
- 피부양자가 없는 경우
- 인터넷 서비스를 fiber optic을 사용하는 경우
- 인터넷 가입자가 온라인 보안 서비스를 사용하지 않는 경우
- 인터넷 가입자가 온라인 백업 서비스를 사용하지 않는 경우
- 인터넷 가입자가 장비 보호 서비스 안쓰는 경우
- 인터넷 가입자가 기술지원을 받지 않는경우
- 매월 결제인 경우
- 종이 청구서를 사용하는 경우
- 전자 수표를 사용하는 경우
해지율이 큰 것으로 보입니다.
이번엔 수치형 데이터와 지난달 이탈 고객 여부를 나눈 그래프를 보겠습니다.
마찬가지로 간단히 둘러보시면 됩니다.
![image](https://user-images.githubusercontent.com/70491203/98487312-96160980-2265-11eb-86c8-29a9cf03013e.png)
여기서 보면 그래프 높낮이에 따라 데이터 구간을 나눌 수 있을 것 같아 보여 아래와 같이 구분하여 추가 컬럼을 만들었습니다.
- 가입 기간(tenure) : 20, 40, 60, 그 이상
- 월 결제액(MonthlyCharges) : 30, 70, 99, 그 이상
- 총 결제액(TotalCharges) : 2000, 4000, 6000, 그 이상
그러나 위와 같은 그룹별 특성이 큰 의미가 없는 것을 확인하고 해당 컬럼들을 지운 뒤 다시 진행했습니다.

## 예측 모델
머신러닝 모델은 매우 다양하고 많지만 이번에 Decision tree, Random forest, Gradient Boosting을 사용했고 그 중 정확도가 가장 높게 나온 Decision tree로 이어갔습니다.
모델에 학습을 시키고 어떻게 맞췄는지 표로 확인해봅니다.
![image](https://user-images.githubusercontent.com/70491203/98487743-29503e80-2268-11eb-92ea-6f80ac8ee9f9.png)
모델에 학습을 시키고 어떻게 맞췄는지 표로 확인해봅니다.
여기서 중요한건 왼쪽 위 짙은 파란색과 오른쪽 아래 하늘색입니다.
- 931 : 실제 유지 고객이고 모델이 맞췄다.
- 208 : 실제 이탈 고객이며 모델이 맞췄다.
- 102 : 실제 이탈 고객이나 모델은 유지 고객으로 예측했다.
- 166 : 실제 유지 고객이나 이탈 고객으로 예측했다.


이제 성능이 어떤지 점수로 한 번 확인해볼까요?
image
precision은 정확도, recall은 정밀도 입니다. precision은 조금만 기준을 벗어나도 답이 틀렸다고 하고 recall은 좀 더 완만한 기준으로 정답을 결정합니다.


이제 어떤 특성과 값이 고객 이탈에 영향을 주는지 확인해봅시다.
image

- 가입기간
- 계약기간이 월단위
- 월 결제액
- 인터넷Fiber Optic 사용자
순으로 고객 이탈에 영향을 주었습니다.
위에서 간단히 본 그래프를 잘라 다시 자세히 보겠습니다.
- 가입기간 24개월 내 고객 이탈 수 비교
- Churn : 이탈 고객
- No churn : 유지 고객
image

가입 첫 달에 이탈 수가 가장 많고 조금 넓게 보면 6개월동안 이탈 수가 많음을 알 수 있습니다.
- 계약 기간 별 이탈 고객 수 비교
image
월등히 월 계약자의 이탈 수가 높음을 알 수 있습니다.

- 월 결제액 별 이탈 고객 수 비교
image

- 인터넷 타입별 이탈 고객 수 비교
image


마지막으로 만든 모델의 PDP를 보겠습니다.
고객 이탈에 영향을 주는 특성 중 가입 기간과 월 결제액 두가지를 놓고 확인해보았습니다.
image
가로축이 가입기간, 세로축이 월 결제액입니다.
왼쪽 가장 상단 노란칸을 보면 월 결제액이 118.35달러이고 가입기간이 1개월인 사용자가 이탈할 가능성은 50%가까이 됩니다.

색이 노란색일 수록 이탈 가능성이 크고 어두운 색일 수록 유지 고객이 될 가능성이 큼을 알 수 있습니다.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.