Dự đoán churn với hồi quy logistic

Machine Learning cho Marketing với Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Giới thiệu hồi quy logistic

  • Mô hình phân loại nhị phân
  • Mô hình hóa log-odds của xác suất mục tiêu
  • Giả định quan hệ tuyến tính giữa log-odds và biến dự báo
  • Trả về hệ số và xác suất dự đoán

Mô hình hồi quy logistic

Machine Learning cho Marketing với Python

Các bước mô hình hóa

  1. Chia dữ liệu thành train và test
  2. Khởi tạo mô hình
  3. Huấn luyện trên dữ liệu train
  4. Dự đoán trên dữ liệu test
  5. Đánh giá hiệu năng trên dữ liệu test
Machine Learning cho Marketing với Python

Huấn luyện mô hình

Import bộ phân loại Logistic Regression

from sklearn.linear_model import LogisticRegression

Khởi tạo đối tượng Logistic Regression

logreg = LogisticRegression()

Huấn luyện mô hình trên dữ liệu train

logreg.fit(train_X, train_Y)
Machine Learning cho Marketing với Python

Chỉ số đánh giá mô hình

Chỉ số chính:

  • Accuracy: % nhãn dự đoán đúng (cả Churn và không Churn)
  • Precision: % dự đoán lớp dương (dự đoán Churn) là đúng
  • Recall: % mẫu lớp dương (khách đã churn) được dự đoán đúng
Machine Learning cho Marketing với Python

Đo lường độ chính xác mô hình

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
Machine Learning cho Marketing với Python

Đo lường precision và recall

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
Machine Learning cho Marketing với Python

Regularization

  • Thêm hệ số phạt ở giai đoạn xây dựng mô hình
  • Giảm overfitting (khi mô hình “học vẹt” mẫu)
  • Một số kỹ thuật còn chọn đặc trưng, ví dụ L1
  • Giúp mô hình tổng quát hóa tốt hơn cho dữ liệu mới
Machine Learning cho Marketing với Python

L1 và chọn đặc trưng

  • LogisticRegression của sklearn mặc định dùng L2 regularization
  • L1 (LASSO) có thể gọi rõ; cách này chọn đặc trưng bằng cách kéo co một số hệ số về 0.
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • Tham số C cần được tinh chỉnh để tìm giá trị tối ưu
Machine Learning cho Marketing với Python

Tinh chỉnh L1 regularization

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)
Machine Learning cho Marketing với Python

Chọn giá trị C tối ưu

Điều chỉnh tham số C cho L1 regularization

Machine Learning cho Marketing với Python

Chọn giá trị C tối ưu

Điều chỉnh tham số C cho L1 regularization

Machine Learning cho Marketing với Python

Chạy một số mô hình hồi quy logistic!

Machine Learning cho Marketing với Python

Preparing Video For Download...