Prédire l'attrition avec la régression logistique

Machine Learning pour le marketing en Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Introduction à la régression logistique

  • Modèle de classification statistique pour réponses binaires
  • Modélise le log-cote de la probabilité de la cible
  • Suppose une relation linéaire entre le log-cote de la cible et les prédicteurs
  • Retourne des coefficients et une probabilité de prédiction

Modèle de régression logistique

Machine Learning pour le marketing en Python

Étapes de modélisation

  1. Diviser les données en entraînement et test
  2. Initialiser le modèle
  3. Ajuster le modèle sur les données d'entraînement
  4. Prédire sur les données de test
  5. Mesurer la performance du modèle sur les données de test
Machine Learning pour le marketing en Python

Ajuster le modèle

Importer le classificateur Logistic Regression

from sklearn.linear_model import LogisticRegression

Initialiser une instance de Logistic Regression

logreg = LogisticRegression()

Ajuster le modèle sur les données d'entraînement

logreg.fit(train_X, train_Y)
Machine Learning pour le marketing en Python

Mesures de performance du modèle

Mesures clés :

  • Exactitude – % d'étiquettes correctement prédites (Attrition et non-attrition)
  • Précision – % des prédictions en classe positive du modèle (ici : prédit « Attrition ») correctement classées
  • Rappel – % des échantillons réellement positifs (tous les clients partis) correctement classés
Machine Learning pour le marketing en Python

Mesurer l'exactitude du modèle

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 pour le marketing en Python

Mesurer la précision et le rappel

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(test_recall, test_recall))
Training precision: 0.6725, Training recall: 0.5736
Test precision: 0.5736, Test recall: 0.4835
Machine Learning pour le marketing en Python

Régularisation

  • Introduit un coefficient de pénalité lors de la construction du modèle
  • Traite le surapprentissage (quand le modèle « mémorise » les motifs)
  • Certaines techniques de régularisation font aussi la sélection de variables, p. ex. L1
  • Rend le modèle plus généralisable à de nouveaux échantillons
Machine Learning pour le marketing en Python

Régularisation L1 et sélection de variables

  • LogisticRegression de sklearn applique par défaut une régularisation L2
  • La régularisation L1, aussi appelée LASSO, peut être demandée explicitement et effectue une sélection de variables en réduisant certains coefficients du modèle à zéro.
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • Le paramètre C doit être ajusté pour trouver la valeur optimale
Machine Learning pour le marketing en Python

Ajuster la régularisation 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 pour le marketing en Python

Choisir la valeur optimale de C

Ajustement du paramètre C de la régularisation L1

Machine Learning pour le marketing en Python

Choisir la valeur optimale de C

Ajustement du paramètre C de la régularisation L1

Machine Learning pour le marketing en Python

Lançons quelques modèles de régression logistique !

Machine Learning pour le marketing en Python

Preparing Video For Download...