로지스틱 회귀로 이탈 예측

Python으로 배우는 마케팅용 Machine Learning

Karolis Urbonas

Head of Analytics & Science, Amazon

로지스틱 회귀 소개

  • 이진 반응을 위한 통계적 분류 모델
  • 타깃 확률의 로그 오즈를 모델링
  • 로그 오즈와 예측 변수 간 선형 관계 가정
  • 계수와 예측 확률을 반환

로지스틱 회귀 모델

Python으로 배우는 마케팅용 Machine Learning

모델링 단계

  1. 데이터 분할: 학습/테스트
  2. 모델 초기화
  3. 학습 데이터로 학습
  4. 테스트 데이터로 예측
  5. 테스트 데이터로 성능 평가
Python으로 배우는 마케팅용 Machine Learning

모델 학습(Fit)

로지스틱 회귀 분류기 임포트

from sklearn.linear_model import LogisticRegression

로지스틱 회귀 인스턴스 초기화

logreg = LogisticRegression()

학습 데이터에 적합

logreg.fit(train_X, train_Y)
Python으로 배우는 마케팅용 Machine Learning

모델 성능 지표

핵심 지표:

  • 정확도: 정·오분류 중 정분류 비율(이탈/비이탈 모두)
  • 정밀도: 모델의 양성 예측 중 실제 양성 비율(여기서는 이탈로 예측)
  • 재현율: 전체 양성 표본 중 올바르게 찾은 비율(모든 이탈 고객)
Python으로 배우는 마케팅용 Machine Learning

모델 정확도 측정

from sklearn.metrics import accuracy_score

pred_train_Y = logreg.predict(train_X) pred_test_Y = logreg.predict(test_X)
train_accuracy = accuracy_score(train_Y, pred_train_Y) test_accuracy = accuracy_score(test_Y, pred_test_Y)
print('Training accuracy:', round(train_accuracy,4)) print('Test accuracy:', round(test_accuracy, 4))
Training accuracy: 0.8108
Test accuracy: 0.8009
Python으로 배우는 마케팅용 Machine Learning

정밀도와 재현율 측정

from sklearn.metrics import precision_score, recall_score

train_precision = round(precision_score(train_Y, pred_train_Y), 4) test_precision = round(precision_score(test_Y, pred_test_Y), 4)
train_recall = round(recall_score(train_Y, pred_train_Y), 4) test_recall = round(recall_score(test_Y, pred_test_Y), 4)
print('Training precision: {}, Training recall: {}'.format(train_precision, train_recall)) print('Test precision: {}, Test recall: {}'.format(train_recall, test_recall))
Training precision: 0.6725, Training recall: 0.5736
Test precision: 0.5736, Test recall: 0.4835
Python으로 배우는 마케팅용 Machine Learning

정규화(Regularization)

  • 모델 구축 단계에서 패널티 계수를 도입
  • 과적합 해결(패턴을 모델이 “암기”하는 경우)
  • 일부 정규화는 특징 선택도 수행(L1 등)
  • 보지 못한 샘플에도 일반화 향상
Python으로 배우는 마케팅용 Machine Learning

L1 정규화와 특징 선택

  • sklearnLogisticRegression은 기본적으로 L2 정규화 수행
  • L1 정규화(LASSO)는 명시적으로 설정 가능. 일부 계수를 0으로 수축해 특징 선택 수행
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • 최적 값을 찾으려면 C 하이퍼파라미터를 튜닝해야 함
Python으로 배우는 마케팅용 Machine Learning

L1 정규화 튜닝

C = [1, .5, .25, .1, .05, .025, .01, .005, .0025]
l1_metrics = np.zeros((len(C), 5))
l1_metrics[:,0] = C

for index in range(0, len(C)): logreg = LogisticRegression(penalty='l1', C=C[index], solver='liblinear') logreg.fit(train_X, train_Y) pred_test_Y = logreg.predict(test_X)
l1_metrics[index,1] = np.count_nonzero(logreg.coef_) l1_metrics[index,2] = accuracy_score(test_Y, pred_test_Y) l1_metrics[index,3] = precision_score(test_Y, pred_test_Y) l1_metrics[index,4] = recall_score(test_Y, pred_test_Y)
col_names = ['C','Non-Zero Coeffs','Accuracy','Precision','Recall'] print(pd.DataFrame(l1_metrics, columns=col_names)
Python으로 배우는 마케팅용 Machine Learning

최적 C 값 선택

L1 정규화 C 파라미터 튜닝

Python으로 배우는 마케팅용 Machine Learning

최적 C 값 선택

L1 정규화 C 파라미터 튜닝

Python으로 배우는 마케팅용 Machine Learning

로지스틱 회귀 모델을 실행해 봅시다!

Python으로 배우는 마케팅용 Machine Learning

Preparing Video For Download...