Prevedi il churn con la regressione logistica

Machine Learning per il marketing con Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Introduzione alla regressione logistica

  • Modello di classificazione statistica per risposte binarie
  • Modella i log-odds della probabilità del target
  • Assume relazione lineare tra log-odds del target e predittori
  • Restituisce coefficienti e probabilità di previsione

Modello di regressione logistica

Machine Learning per il marketing con Python

Fasi di modellazione

  1. Dividi dati in training e test
  2. Inizializza il modello
  3. Fitta il modello sui dati di training
  4. Predici sui dati di test
  5. Valuta le prestazioni sul test
Machine Learning per il marketing con Python

Addestrare il modello

Importa il classificatore Logistic Regression

from sklearn.linear_model import LogisticRegression

Inizializza un’istanza di Logistic Regression

logreg = LogisticRegression()

Fitta il modello sui dati di training

logreg.fit(train_X, train_Y)
Machine Learning per il marketing con Python

Metriche di performance del modello

Metriche chiave:

  • Accuracy: % di etichette corrette (Churn e non Churn)
  • Precision: % delle predizioni positive del modello (qui: Churn) corrette
  • Recall: % dei campioni positivi totali (tutti i clienti churn) correttamente classificati
Machine Learning per il marketing con Python

Misurare l’accuracy del modello

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 per il marketing con Python

Misurare precision e 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 per il marketing con Python

Regolarizzazione

  • Introduce un coefficiente di penalità nella fase di modellazione
  • Contrasta l’overfitting (quando il modello “memorizza” i pattern)
  • Alcune tecniche fanno anche selezione delle feature, es. L1
  • Rende il modello più generalizzabile a nuovi campioni
Machine Learning per il marketing con Python

L1 e selezione delle feature

  • LogisticRegression di sklearn usa L2 per default
  • La regolarizzazione L1 (LASSO) si imposta esplicitamente e seleziona feature azzerando alcuni coefficienti
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • Il parametro C va ottimizzato per trovare il valore migliore
Machine Learning per il marketing con Python

Ottimizzare la 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','Coefficienti non zero','Accuracy','Precision','Recall'] print(pd.DataFrame(l1_metrics, columns=col_names)
Machine Learning per il marketing con Python

Scelta del valore C ottimale

Tuning del parametro C per la regolarizzazione L1

Machine Learning per il marketing con Python

Scelta del valore C ottimale

Tuning del parametro C per la regolarizzazione L1

Machine Learning per il marketing con Python

Eseguiamo alcuni modelli di regressione logistica!

Machine Learning per il marketing con Python

Preparing Video For Download...