데이터 준비

마케팅 애널리틱스: Python으로 고객 이탈 예측하기

Mark Peterson

Director of Data Science, Infoblox

모델 가정

  • 모델의 주요 가정:
    • 특성이 정규 분포를 따름
    • 특성이 동일한 스케일에 있음

   

마케팅 애널리틱스: Python으로 고객 이탈 예측하기

데이터 타입

  • 머신러닝 알고리즘은 수치형 데이터를 필요로 합니다
    • 범주형 변수를 수치형으로 인코딩해야 합니다
마케팅 애널리틱스: Python으로 고객 이탈 예측하기
telco.dtypes
Account_Length      int64
Vmail_Message       int64
Day_Mins          float64
Eve_Mins          float64
Night_Mins        float64
Intl_Mins         float64
CustServ_Calls      int64
Churn              object
Intl_Plan          object
Vmail_Plan         object
Day_Calls           int64
Day_Charge        float64
Eve_Calls           int64
Eve_Charge        float64
Night_Calls         int64
Night_Charge      float64
Intl_Calls          int64
Intl_Charge       float64
State              object
Area_Code           int64
Phone              object
dtype: object
마케팅 애널리틱스: Python으로 고객 이탈 예측하기

이진 특성 인코딩

telco['Intl_Plan'].head()
0     no
1     no
2     no
3    yes
4    yes
Name: Intl_Plan, dtype: object
마케팅 애널리틱스: Python으로 고객 이탈 예측하기

이진 특성 인코딩

방법 1: .replace()

 

telco['Intl_Plan'].replace({'no':0 , 'yes':1})

telco['Intl_Plan'].head()
0    0
1    0
2    0
3    1
4    1
Name: Intl_Plan, dtype: int64

방법 2: LabelEncoder()

from sklearn.preprocessing import LabelEncoder

LabelEncoder().fit_transform(telco["Intl_Plan"])

telco['Intl_Plan'].head()
0    0
1    0
2    0
3    1
4    1
Name: Intl_Plan, dtype: int64
마케팅 애널리틱스: Python으로 고객 이탈 예측하기

주(State) 인코딩

telco['State'].head(4)
0    KS
1    OH
2    NJ
3    OH
Name: State, dtype: object
  • 각 주(State)에 숫자를 할당할 수 있습니다
0    0
1    1
2    2
3    1
Name: State, dtype: int64
  • 좋지 않은 방법입니다
  • 모델의 성능을 저하시킬 수 있습니다
마케팅 애널리틱스: Python으로 고객 이탈 예측하기

원-핫 인코딩

원-핫 인코딩 예시

마케팅 애널리틱스: Python으로 고객 이탈 예측하기

원-핫 인코딩

원-핫 인코딩 예시 2

마케팅 애널리틱스: Python으로 고객 이탈 예측하기

원-핫 인코딩

원-핫 인코딩 예시 3

마케팅 애널리틱스: Python으로 고객 이탈 예측하기

특성 스케일링

  • 특성은 동일한 스케일이어야 합니다
  • 실제 데이터에서는 드문 경우입니다
마케팅 애널리틱스: Python으로 고객 이탈 예측하기

특성 스케일링

telco['Intl_Calls'].describe()
count    3333.000000
mean        4.479448
std         2.461214
min         0.000000
25%         3.000000
50%         4.000000
75%         6.000000
max        20.000000
Name: Intl_Calls, dtype: float64
telco['Night_Mins'].describe()
count    3333.000000
mean      200.872037
std        50.573847
min        23.200000
25%       167.000000
50%       201.200000
75%       235.300000
max       395.000000
Name: Night_Mins, dtype: float64
마케팅 애널리틱스: Python으로 고객 이탈 예측하기

표준화

  • 분포를 평균 중심으로 이동시킵니다
  • 각 값이 평균에서 몇 표준편차 떨어져 있는지 계산합니다
from sklearn.preprocessing import StandardScaler

df = StandardScaler().fit_transform(df)
마케팅 애널리틱스: Python으로 고객 이탈 예측하기

연습해 봅시다!

마케팅 애널리틱스: Python으로 고객 이탈 예측하기

Preparing Video For Download...