Förutsäg churn med logistisk regression

Maskininlärning för marknadsföring i Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Introduktion till logistisk regression

  • Statistisk klassificeringsmodell för binära utfall
  • Modellerar log-odds för sannolikheten hos målvariabeln
  • Antar ett linjärt samband mellan log-odds och prediktorer
  • Returnerar koefficienter och prediktionssannolikhet

Logistic Regression Model

Maskininlärning för marknadsföring i Python

Modelleringssteg

  1. Dela upp data i tränings- och testdata
  2. Initiera modellen
  3. Träna modellen på träningsdata
  4. Förutsäg värden på testdata
  5. Mät modellens prestanda på testdata
Maskininlärning för marknadsföring i Python

Träna modellen

Importera klassificeraren för logistisk regression

from sklearn.linear_model import LogisticRegression

Initiera en instans av logistisk regression

logreg = LogisticRegression()

Träna modellen på träningsdata

logreg.fit(train_X, train_Y)
Maskininlärning för marknadsföring i Python

Prestandamätvärden för modellen

Viktiga mätvärden:

  • Accuracy – Andelen korrekt förutsagda etiketter (både Churn och icke-Churn)
  • Precision – Andelen av modellens positiva prediktioner (förutsagd Churn) som var korrekta
  • Recall – Andelen verkliga positiva fall (alla churnade kunder) som korrekt identifierades
Maskininlärning för marknadsföring i Python

Mäta modellens 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
Maskininlärning för marknadsföring i Python

Mäta precision och 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
Maskininlärning för marknadsföring i Python

Regularisering

  • Lägger till en straffkoefficient i modelleringsprocessen
  • Motverkar överanpassning (när modellen "memorerar" mönster)
  • Vissa regulariseringstekniker utför även särdragsurval, t.ex. L1
  • Gör modellen mer generaliserbar på osedd data
Maskininlärning för marknadsföring i Python

L1-regularisering och särdragsurval

  • LogisticRegression från sklearn tillämpar L2-regularisering som standard
  • L1-regularisering, även kallad LASSO, kan anropas explicit och utför särdragsurval genom att krympa vissa koefficienter till noll.
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • Parametern C behöver justeras för att hitta det optimala värdet
Maskininlärning för marknadsföring i Python

Justera L1-regularisering

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)
Maskininlärning för marknadsföring i Python

Välja optimalt C-värde

Justering av C-parametern för L1-regularisering

Maskininlärning för marknadsföring i Python

Välja optimalt C-värde

L1 regularization C parameter tuning

Maskininlärning för marknadsföring i Python

Nu kör vi en övning!

Maskininlärning för marknadsföring i Python

Preparing Video For Download...