พยากรณ์การเลิกใช้บริการด้วย Logistic Regression

Machine Learning สำหรับการตลาดด้วย Python

Karolis Urbonas

Head of Analytics & Science, Amazon

แนะนำ Logistic Regression

  • โมเดลจำแนกประเภทแบบสถิติสำหรับตัวแปรตอบสนองแบบไบนารี
  • สร้างแบบจำลอง log-odds ของความน่าจะเป็นของเป้าหมาย
  • สมมติความสัมพันธ์เชิงเส้นระหว่าง log-odds กับตัวทำนาย
  • ให้ค่าสัมประสิทธิ์และความน่าจะเป็นของการพยากรณ์

โมเดล Logistic Regression

Machine Learning สำหรับการตลาดด้วย Python

ขั้นตอนการสร้างโมเดล

  1. แบ่งข้อมูลเป็นชุดฝึกและชุดทดสอบ
  2. กำหนดค่าเริ่มต้นให้โมเดล
  3. ฝึกโมเดลบนข้อมูลชุดฝึก
  4. พยากรณ์ค่าบนข้อมูลชุดทดสอบ
  5. วัดประสิทธิภาพของโมเดลบนข้อมูลชุดทดสอบ
Machine Learning สำหรับการตลาดด้วย Python

การฝึกโมเดล

นำเข้าตัวจำแนก Logistic Regression

from sklearn.linear_model import LogisticRegression

กำหนดค่าเริ่มต้น Logistic Regression

logreg = LogisticRegression()

ฝึกโมเดลบนข้อมูลชุดฝึก

logreg.fit(train_X, train_Y)
Machine Learning สำหรับการตลาดด้วย Python

เมตริกวัดประสิทธิภาพโมเดล

เมตริกสำคัญ:

  • Accuracy - % ของ label ที่พยากรณ์ถูกต้อง (ทั้ง Churn และ non-Churn)
  • Precision - % ของการพยากรณ์ที่โมเดลระบุว่าเป็น Churn ที่ถูกต้องจริง
  • Recall - % ของลูกค้าที่เลิกใช้บริการจริงที่โมเดลจำแนกได้ถูกต้อง
Machine Learning สำหรับการตลาดด้วย Python

การวัด Accuracy ของโมเดล

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 สำหรับการตลาดด้วย Python

การวัด Precision และ 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 สำหรับการตลาดด้วย Python

Regularization

  • เพิ่มค่าสัมประสิทธิ์บทลงโทษในขั้นตอนสร้างโมเดล
  • แก้ปัญหา over-fitting (เมื่อโมเดล "จำ" รูปแบบในข้อมูลฝึก)
  • เทคนิค regularization บางอย่างยังช่วยคัดเลือกฟีเจอร์ด้วย เช่น L1
  • ทำให้โมเดลสามารถ generalize กับข้อมูลใหม่ได้ดีขึ้น
Machine Learning สำหรับการตลาดด้วย Python

L1 Regularization และการคัดเลือกฟีเจอร์

  • LogisticRegression จาก sklearn ใช้ L2 regularization เป็นค่าเริ่มต้น
  • L1 regularization หรือที่เรียกว่า LASSO สามารถเรียกใช้ได้โดยตรง วิธีนี้จะคัดเลือกฟีเจอร์โดยลดค่าสัมประสิทธิ์บางตัวให้เป็นศูนย์
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • พารามิเตอร์ C ต้องผ่านการปรับจูนเพื่อหาค่าที่เหมาะสม
Machine Learning สำหรับการตลาดด้วย Python

การปรับจูน 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 สำหรับการตลาดด้วย Python

การเลือกค่า C ที่เหมาะสม

การปรับจูนพารามิเตอร์ C ของ L1 Regularization

Machine Learning สำหรับการตลาดด้วย Python

การเลือกค่า C ที่เหมาะสม

การปรับจูนพารามิเตอร์ C ของ L1 Regularization

Machine Learning สำหรับการตลาดด้วย Python

มาฝึกกันเถอะ!

Machine Learning สำหรับการตลาดด้วย Python

Preparing Video For Download...