Prediksi churn dengan regresi logistik

Machine Learning untuk Pemasaran dengan Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Pengantar regresi logistik

  • Model klasifikasi statistik untuk respons biner
  • Memodelkan log-odds dari probabilitas target
  • Mengasumsikan hubungan linear antara log-odds target dan prediktor
  • Mengembalikan koefisien dan probabilitas prediksi

Model Regresi Logistik

Machine Learning untuk Pemasaran dengan Python

Langkah pemodelan

  1. Bagi data jadi train dan test
  2. Inisialisasi model
  3. Fit model pada data train
  4. Prediksi nilai pada data test
  5. Ukur kinerja model pada data test
Machine Learning untuk Pemasaran dengan Python

Mem-fit model

Impor classifier Logistic Regression

from sklearn.linear_model import LogisticRegression

Inisialisasi instance Logistic Regression

logreg = LogisticRegression()

Fit model pada data train

logreg.fit(train_X, train_Y)
Machine Learning untuk Pemasaran dengan Python

Metrik kinerja model

Metrik utama:

  • Accuracy: % label yang diprediksi benar (Churn dan Non-churn)
  • Precision: % prediksi kelas positif model (di sini: churn) yang benar
  • Recall: % sampel kelas positif (semua pelanggan churn) yang terklasifikasi benar
Machine Learning untuk Pemasaran dengan Python

Mengukur akurasi model

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 untuk Pemasaran dengan Python

Mengukur precision dan 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 untuk Pemasaran dengan Python

Regularisasi

  • Menambahkan koefisien penalti pada tahap pemodelan
  • Mengatasi overfitting (saat pola "dihafal" model)
  • Beberapa teknik regularisasi juga memilih fitur, mis. L1
  • Membuat model lebih mampu digeneralisasi ke data baru
Machine Learning untuk Pemasaran dengan Python

Regularisasi L1 dan seleksi fitur

  • LogisticRegression dari sklearn memakai regularisasi L2 secara default
  • Regularisasi L1 (LASSO) dapat dipanggil eksplisit; pendekatan ini melakukan seleksi fitur dengan mengecilkan beberapa koefisien menjadi nol.
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • Parameter C perlu di-­tuning untuk menemukan nilai optimal
Machine Learning untuk Pemasaran dengan Python

Menala regularisasi 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)
Machine Learning untuk Pemasaran dengan Python

Memilih nilai C optimal

Penalaan parameter C pada regularisasi L1

Machine Learning untuk Pemasaran dengan Python

Memilih nilai C optimal

Penalaan parameter C pada regularisasi L1

Machine Learning untuk Pemasaran dengan Python

Mari jalankan beberapa model regresi logistik!

Machine Learning untuk Pemasaran dengan Python

Preparing Video For Download...