Voorspel churn met logistische regressie

Machine Learning voor marketing in Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Introductie tot logistische regressie

  • Statistisch classificatiemodel voor binaire uitkomsten
  • Modelleert de log-odds van de kans op de target
  • Neemt een lineair verband aan tussen log-odds van target en voorspellers
  • Geeft coëfficiënten en voorspellingskans terug

Model voor logistische regressie

Machine Learning voor marketing in Python

Modelleringstappen

  1. Split data in train en test
  2. Initialiseer het model
  3. Fit het model op de trainingsdata
  4. Predict op de testdata
  5. Meet de performance op de testdata
Machine Learning voor marketing in Python

Het model fitten

Importeer de Logistic Regression-classifier

from sklearn.linear_model import LogisticRegression

Initialiseer een Logistic Regression-instantie

logreg = LogisticRegression()

Fit het model op de trainingsdata

logreg.fit(train_X, train_Y)
Machine Learning voor marketing in Python

Modelprestaties meten

Belangrijkste metrics:

  • Accuracy: % correct voorspelde labels (zowel churn als geen churn)
  • Precision: % van alle positieve voorspellingen (hier: churn) die kloppen
  • Recall: % van alle echte positieve gevallen (alle gechurnede klanten) die correct zijn gevonden
Machine Learning voor marketing in Python

Modelnauwkeurigheid meten

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 voor marketing in Python

Precisie en recall meten

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 voor marketing in Python

Regularisatie

  • Voegt een strafterm toe tijdens modelbouw
  • Pakt overfitting aan (als patronen door het model worden “gememoriseerd”)
  • Sommige regularisatietechnieken doen ook featureselectie, bv. L1
  • Maakt het model beter generaliseerbaar naar nieuwe data
Machine Learning voor marketing in Python

L1-regularisatie en featureselectie

  • LogisticRegression uit sklearn gebruikt standaard L2-regularisatie
  • L1-regularisatie (LASSO) kan expliciet worden gezet en voert featureselectie uit door sommige coëfficiënten naar nul te krimpen.
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • De C-parameter moet worden getuned voor de optimale waarde
Machine Learning voor marketing in Python

L1-regularisatie tunen

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 voor marketing in Python

Optimale C-waarde kiezen

Afstemmen van C-parameter voor L1-regularisatie

Machine Learning voor marketing in Python

Optimale C-waarde kiezen

Afstemmen van C-parameter voor L1-regularisatie

Machine Learning voor marketing in Python

Laten we wat logistische regressiemodellen draaien!

Machine Learning voor marketing in Python

Preparing Video For Download...