Slide 1

Slide 1 text

@Giuliabianchl @Giuliabianchl #WiDS2021 CHERCHER L’AIGUILLE DANS… LES DONNÉES GIULIA BIANCHI - 19/06/2021 1

Slide 2

Slide 2 text

@Giuliabianchl @Giuliabianchl #WiDS2021 GIULIA BIANCHI BONJOUR ! 🦩 @Giuliabianchl 👩💻 Senior Data Scientist, CybelAngel 💙 le partage de connaissances 📝🎙 2

Slide 3

Slide 3 text

@Giuliabianchl @Giuliabianchl #WiDS2021 CLASSIFICATION BINAIRE 3

Slide 4

Slide 4 text

@Giuliabianchl @Giuliabianchl #WiDS2021 LA CLASSIFICATION BINAIRE CLASSES ÉQUILIBRÉES Données 
 d’entraînement : Modèle ‣ 50 % classe positive ‣ 50 % classe négative 4

Slide 5

Slide 5 text

@Giuliabianchl @Giuliabianchl #WiDS2021 LA CLASSIFICATION BINAIRE CLASSES ÉQUILIBRÉES Données 
 d’entraînement : Modèle ‣ 2 erreurs Prédictions : ‣ 50 % classe positive ‣ 50 % classe négative 5

Slide 6

Slide 6 text

@Giuliabianchl @Giuliabianchl #WiDS2021 LA CLASSIFICATION BINAIRE CLASSES ÉQUILIBRÉES - PERFORMANCE ‣ 2 erreurs Prédictions : Mesure de performance: ‣ accuracy score accuracy(y, ̂ y) = 1 nsamples nsamples −1 ∑ i=0 1( ̂ yi = yi ) accuracy = 1 10 (0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1) = 0.8 6

Slide 7

Slide 7 text

@Giuliabianchl @Giuliabianchl #WiDS2021 LA CLASSIFICATION BINAIRE CLASSES DÉSÉQUILIBRÉES Données 
 d’entraînement : Modèle ‣ 10 % classe positive ‣ 90 % classe négative 7

Slide 8

Slide 8 text

@Giuliabianchl @Giuliabianchl #WiDS2021 LA CLASSIFICATION BINAIRE CLASSES DÉSÉQUILIBRÉES Données 
 d’entraînement : Modèle ‣ 2 erreurs Prédictions : ‣ 10 % classe positive ‣ 90 % classe négative 8

Slide 9

Slide 9 text

@Giuliabianchl @Giuliabianchl #WiDS2021 LA CLASSIFICATION BINAIRE CLASSES DÉSÉQUILIBRÉES - PERFORMANCE ‣ 2 erreurs Prédictions : Mesure de performance: ‣ accuracy score accuracy(y, ̂ y) = 1 nsamples nsamples −1 ∑ i=0 1( ̂ yi = yi ) accuracy = 1 10 (0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0) = 0.8 9

Slide 10

Slide 10 text

@Giuliabianchl @Giuliabianchl #WiDS2021 LES PERFORMANCES SONT BONNES MAIS LE MODÈLE NE SERT À RIEN sympa 🤷 LA CLASSIFICATION BINAIRE AVEC CLASSES DÉSÉQUILIBRÉES 10

Slide 11

Slide 11 text

@Giuliabianchl @Giuliabianchl #WiDS2021 COMMENT FAIRE ? 11

Slide 12

Slide 12 text

@Giuliabianchl @Giuliabianchl #WiDS2021 LA CLASSIFICATION BINAIRE AVEC CLASSES DÉSÉQUILIBRÉES SOLUTIONS POSSIBLES Actions possibles à différents niveaux : 1. Sur les données 2. Sur l’entraînement 3. Sur l’évaluation 4. Sur la prédiction 12

Slide 13

Slide 13 text

@Giuliabianchl @Giuliabianchl #WiDS2021 LA CLASSIFICATION BINAIRE AVEC CLASSES DÉSÉQUILIBRÉES SOLUTIONS POSSIBLES Actions possibles à différents niveaux : 1. Sur les données 👉 rééquilibrer les classes 2. Sur l’entraînement 👉 modi fi er le poids des classes 3. Sur l’évaluation 👉 utiliser une "bonne" métrique 4. Sur la prédiction 👉 choisir le bon seuil de probabilité 13

Slide 14

Slide 14 text

@Giuliabianchl @Giuliabianchl #WiDS2021 1. RÉÉQUILIBRER LES CLASSES 14

Slide 15

Slide 15 text

@Giuliabianchl @Giuliabianchl #WiDS2021 RÉÉQUILIBRER LES CLASSES AJOUTER OU SUPPRIMER DES EXEMPLES ? ▸ Hypothèse : on dispose d’un échantillon représentatif 15

Slide 16

Slide 16 text

@Giuliabianchl @Giuliabianchl #WiDS2021 RÉÉQUILIBRER LES CLASSES AJOUTER OU SUPPRIMER DES EXEMPLES ? ▸ Hypothèse : on dispose d’un échantillon représentatif ▸ SMOTE : Ajouter des exemples arti fi ciels à la classe minoritaire 👉 "oversampling" ▸ je ne suis pas fan d’inventer des données ▸ Supprimer des exemples de la class majoritaire 👉 “undersampling" ▸ on perd potentiellement de l’information pertinente 16 imbalanced-learn/over-sampling imbalanced-learn/under-sampling

Slide 17

Slide 17 text

@Giuliabianchl @Giuliabianchl #WiDS2021 RÉÉQUILIBRER LES CLASSES AJOUTER OU SUPPRIMER DES EXEMPLES ? ▸ Hypothèse : on dispose d’un échantillon représentatif ▸ Dans les deux cas je déconseille de modi fi er “trop” la proportion de positifs vs. négatifs ▸ Faire attention à `over fi t` et `subsampling` dans les méthodes d’ensemble et en cross-validation 17

Slide 18

Slide 18 text

@Giuliabianchl @Giuliabianchl #WiDS2021 2. MODIFIER ARTIFICIELLEMENT LE POIDS DES CLASSES PENDANT L ’ENTRAÎNEMENT 18

Slide 19

Slide 19 text

@Giuliabianchl @Giuliabianchl #WiDS2021 MODIFIER ARTIFICIELLEMENT LE POIDS DES CLASSES PENDANT L’ENTRAÎNEMENT PARAMÈTRE “CLASS_WEIGHT” ▸ Techniquement on va modi fi er l’erreur de classi fi cation dans la fonction de coût pendant l’entraînement ▸ log-loss par défaut de la régression logistique ▸ ▸ log-loss modi fi ée ▸ Jθ = − 1 m m ∑ i=1 Yi log Pi + (1 − Yi )log(1 − Pi ) Jθ = − 1 m m ∑ i=1 W0 Yi log Pi +W1 (1 − Yi )log(1 − Pi ) 19 How to Improve Class Imbalance using Class Weights in Machine Learning

Slide 20

Slide 20 text

@Giuliabianchl @Giuliabianchl #WiDS2021 MODIFIER ARTIFICIELLEMENT LE POIDS DES CLASSES PENDANT L’ENTRAÎNEMENT PARAMÈTRE “CLASS_WEIGHT” ▸ Techniquement on va modi fi er l’erreur de classi fi cation dans la fonction de coût pendant l’entraînement ▸ log-loss modi fi ée ▸ ▸ : poids pour la classe majoritaire ▸ : poids pour la classe minoritaire ▸ 👉 ▸ Dans scikit-learn cela correspond au paramètre “class_weight” Jθ = − 1 m m ∑ i=1 W0 Yi log Pi +W1 (1 − Yi )log(1 − Pi ) W0 W1 W1 > W0 20 sklearn - class_weight

Slide 21

Slide 21 text

@Giuliabianchl @Giuliabianchl #WiDS2021 3. UTILISER UNE MÉTRIQUE D’ÉVALUATION PLUS ADAPTÉE 21

Slide 22

Slide 22 text

@Giuliabianchl @Giuliabianchl #WiDS2021 UTILISER UNE MÉTRIQUE D’ÉVALUATION PLUS ADAPTÉE PÉNALISER LES ERREURS SUR LA CLASSE MINORITAIRE ▸ La courbe ROC ▸ dans le cas idéal la TPR=1 et la FPR=0 ▸ 👉 maximiser les TP (et les TN) ▸ 👉 minimiser les FN et les FP ▸ Avec classes déséquilibrées 
 les TN sont “naturellement" 
 élevés et les FP bas FPR = FP FP + TN TPR = TP TP + FN 22 Receiver operating characteristic

Slide 23

Slide 23 text

@Giuliabianchl @Giuliabianchl #WiDS2021 UTILISER UNE MÉTRIQUE D’ÉVALUATION PLUS ADAPTÉE FPR & TPR - CLASSES ÉQUILIBRÉES ‣ 2 erreurs Prédictions : Mesure de performance: FPR = FP FP + TN = 1 1 + 4 = 0.2 TPR = TP TP + FN = 4 4 + 1 = 0.8 accuracy = 0.8 23

Slide 24

Slide 24 text

@Giuliabianchl @Giuliabianchl #WiDS2021 UTILISER UNE MÉTRIQUE D’ÉVALUATION PLUS ADAPTÉE FPR & TPR - CLASSES DÉSÉQUILIBRÉES ‣ 2 erreurs Prédictions : Mesure de performance: FPR = FP FP + TN = 1 1 + 8 = 0.11 TPR = TP TP + FN = 0 0 + 1 = 0 accuracy = 0.8 24 ⚠ ✔ ✔

Slide 25

Slide 25 text

@Giuliabianchl @Giuliabianchl #WiDS2021 UTILISER UNE MÉTRIQUE D’ÉVALUATION PLUS ADAPTÉE PÉNALISER LES ERREURS SUR LA CLASSE MINORITAIRE ▸ La courbe Precision-Recall ▸ dans le cas idéal la précision=1 et le rappel=1 ▸ 👉 maximiser les TP ▸ 👉 minimiser les FN et les FP ▸ Avec classes déséquilibrées les 
 TN sont “naturellement” élevés 
 et les FP bas 👉 on sort les TN Precision = TP TP + FP Recall = TP TP + FN 25

Slide 26

Slide 26 text

@Giuliabianchl @Giuliabianchl #WiDS2021 UTILISER UNE MÉTRIQUE D’ÉVALUATION PLUS ADAPTÉE PRECISION & RECALL - CLASSES ÉQUILIBRÉES ‣ 2 erreurs Prédictions : Mesure de performance: accuracy = 0.8 Precision = TP TP + FP = 4 4 + 1 = 0.8 Recall = TP TP + FN = 4 4 + 1 = 0.8 26

Slide 27

Slide 27 text

@Giuliabianchl @Giuliabianchl #WiDS2021 UTILISER UNE MÉTRIQUE D’ÉVALUATION PLUS ADAPTÉE PRECISION & RECALL - CLASSES DÉSÉQUILIBRÉES ‣ 2 erreurs Prédictions : Mesure de performance: Precision = TP TP + FP = 0 0 + 1 = 0 Recall = TP TP + FN = 0 0 + 1 = 0 accuracy = 0.8 27 ⚠ ⚠ ✔

Slide 28

Slide 28 text

@Giuliabianchl @Giuliabianchl #WiDS2021 4. JONGLER AVEC LE SEUIL DE PROBABILITÉ 28

Slide 29

Slide 29 text

@Giuliabianchl @Giuliabianchl #WiDS2021 JONGLER AVEC LE SEUIL DE PROBABILITÉ PREDICT VS. PREDICT_PROBA ▸ `predict_proba` fournit un score ▸ il varie entre 0 et 1 ▸ selon le modèle il peut correspondre à une probabilité ▸ `predict` fournit une classe ▸ positive ( ) ▸ négative ( ) score ≥ 0.5 score < 0.5 29

Slide 30

Slide 30 text

@Giuliabianchl @Giuliabianchl #WiDS2021 JONGLER AVEC LE SEUIL DE PROBABILITÉ PREDICT VS. PREDICT_PROBA ▸ `predict_proba` fournit un score ▸ s’il est bien calibré, il représente la proportion de cas positifs ▸ `predict` fournit une classe (tranchant à 0.5) ▸ c’est peu adapté aux classes déséquilibrées où la proportion des positifs est inférieure à 50% ▸ 👉 on peut choisir un seuil qui convient mieux que 0.5 30

Slide 31

Slide 31 text

@Giuliabianchl @Giuliabianchl #WiDS2021 JONGLER AVEC LE SEUIL DE PROBABILITÉ COMMENT CHOISIR LE SEUIL ? ▸ Selon le seuil choisi, toutes les métriques calculées sur la base de la matrice de contingence changent ! ▸ p.d.v. quantitatif : ▸ la courbe roc et precision-recall, 
 precision-recall vs. seuil ▸ p.d.v. qualitatif : selon le cas d'usage ▸ C’est quoi le plus important ? 
 (ou le moins grave) ? 31 Precision and Recall

Slide 32

Slide 32 text

@Giuliabianchl @Giuliabianchl #WiDS2021 JONGLER AVEC LE SEUIL DE PROBABILITÉ COMMENT CHOISIR LE SEUIL ? ▸ p.d.v. qualitatif : selon le cas d'usage ▸ C’est quoi le plus important ? (ou le moins grave) ? 32 Statistical Performance Measure

Slide 33

Slide 33 text

@Giuliabianchl @Giuliabianchl #WiDS2021 EXEMPLE & CONCLUSION 33

Slide 34

Slide 34 text

@Giuliabianchl @Giuliabianchl #WiDS2021 CLASSE POSITIVE: ~25%, CLASSE NÉGATIVE: ~75% PIPELINE GÉNÉRIQUE count_vectorizer = CountVectorizer( 
 strip_accents="ascii", 
 lowercase=True, 
 stop_words="english", 
 ngram_range=(1, 3), 
 max_features=500, 
 min_df=.01, 
 max_df=.90 
 ) tfidf_transformer = TfidfTransformer() model = pipeline = Pipeline([ 
 ('vect', count_vectorizer), 
 ('tfidf', tfidf_transformer), 
 ('clf', model) 
 ]) pipeline = pipeline.fit(X_train, y_train) predicted_probabilities = pipeline.predict_proba(X_test) pos_th = predicted_classes = np.array([True if i[-1]>=pos_th else False for i in predicted_probabilities]) [precision, recall, f1, support] = precision_recall_fscore_support(y_test, predicted_classes) acc = accuracy_score(y_test, predicted_classes) perf = { 
 "accuracy score": round(acc, 2), 
 "precision": round(precision[-1], 2), 
 "recall": round(recall[-1], 2) 
 } 34 Kaggle - Random acts of pizza

Slide 35

Slide 35 text

@Giuliabianchl @Giuliabianchl #WiDS2021 CLASSE POSITIVE: ~25%, CLASSE NÉGATIVE: ~75% COMPARAISON DE RÉSULTATS accuracy precision recall FPR MultinomialNB() 0.5 0.75 0.5 0.01 0.003 MultinomialNB() 0.246 0.59 0.3 0.5 0.38 LogisticRegression() 0.5 0.76 0.58 0.06 0.01 LogisticRegression( 
 class_weight=“balanced" 
 ) 0.5 0.63 0.35 0.57 0.35 35

Slide 36

Slide 36 text

@Giuliabianchl @Giuliabianchl #WiDS2021 CLASSE POSITIVE: ~25%, CLASSE NÉGATIVE: ~75% COMPARAISON DE RÉSULTATS 36

Slide 37

Slide 37 text

@Giuliabianchl @Giuliabianchl #WiDS2021 CLASSE POSITIVE: ~25%, CLASSE NÉGATIVE: ~75% COMPARAISON DE RÉSULTATS 37

Slide 38

Slide 38 text

@Giuliabianchl @Giuliabianchl #WiDS2021 TEXT CONCLUSION ▸ (Collectez les bonnes données et construisez les bonnes features) ▸ Faites attention au performances trop optimistes et à l’over fi t ▸ Testez les solutions techniques qui apportent les meilleurs résultats dans votre cas d’usage 👉 interpreter vos résultats ▸ Enjoy the ride 🚀 38

Slide 39

Slide 39 text

@Giuliabianchl @Giuliabianchl #WiDS2021 MERCI ! Vous trouverez ces slides sur Speaker Deck 👩💻 C’EST TOUT 39