Évaluation des modèles avec des données déséquilibrées

L’évaluation des modèles avec des données déséquilibrées consiste à mesurer la performance du modèle en prenant en compte le déséquilibre des classes. Dans ces situations, des métriques classiques comme la précision (accuracy) peuvent être trompeuses, car elles favorisent souvent la classe majoritaire. Il est donc préférable d’utiliser des métriques comme : La précision (Precision) : proportion de vrais positifs parmi les prédictions positives. Le rappel (Recall) : proportion de vrais positifs parmi les éléments réellement positifs. La F-mesure (F1-score) : une moyenne harmonique entre la précision et le rappel. L’aire sous la courbe ROC (AUC-ROC) : évalue la capacité du modèle à classer correctement les classes en fonction de différents seuils. Ces métriques permettent d’avoir une vision plus complète de la performance d’un modèle sur des jeux de données déséquilibrés.

Fonctions :

  • Évaluation des modèles avec des données déséquilibrées

    Lorsque les données sont déséquilibrées, l'évaluation traditionnelle des modèles via des métriques comme la précision (accuracy) peut être trompeuse. Dans ce contexte, il est important d'utiliser des métriques qui prennent en compte l'importance des classes minoritaires, comme le F1-score et l'aire sous la courbe ROC (ROC-AUC). F1-score : Le F1-score est la moyenne harmonique entre la précision et le rappel, ce qui permet de donner une mesure unique qui reflète à la fois la capacité du modèle à éviter les faux positifs (précision) et à identifier les instances positives réelles (rappel). Il est particulièrement utile dans les cas de classes déséquilibrées où la précision seule peut ne pas être représentative. ROC-AUC (Receiver Operating Characteristic - Area Under Curve) : L'AUC de la courbe ROC représente la capacité du modèle à distinguer entre les classes positives et négatives. Plus la courbe ROC est proche de 1, meilleur est le modèle. Cette métrique est particulièrement utile car elle évalue la performance du modèle pour différents seuils de classification.

    Importation :

    # Exemple d'évaluation d'un modèle avec F1-score et ROC-AUC
    from sklearn.metrics import f1_score, roc_auc_score, roc_curve
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LogisticRegression
    import matplotlib.pyplot as plt

    Attributs :

    Métrique Description
    f1_score Moyenne harmonique de la précision et du rappel, utilisé pour évaluer la performance globale.
    roc_auc_score Aire sous la courbe ROC, mesure la capacité du modèle à distinguer les classes.
    roc_curve Courbe ROC tracée entre le taux de faux positifs (FPR) et le taux de vrais positifs (TPR).

    Exemple de code :

    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import f1_score, roc_auc_score, roc_curve
    import matplotlib.pyplot as plt
    
    # Exemple de données déséquilibrées
    X = ...  # Vos features
    y = ...  # Vos labels (avec une classe majoritaire et une classe minoritaire)
    
    # Diviser les données en ensembles d'entraînement et de test
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    
    # Entraîner un modèle avec LogisticRegression
    model = LogisticRegression(class_weight='balanced', random_state=42)
    model.fit(X_train, y_train)
    
    # Prédictions
    y_pred = model.predict(X_test)
    y_prob = model.predict_proba(X_test)[:, 1]  # Probabilités pour la classe positive
    
    # Évaluation avec F1-score et ROC-AUC
    f1 = f1_score(y_test, y_pred)
    roc_auc = roc_auc_score(y_test, y_prob)
    
    # Affichage des résultats
    print(f"F1-score: {f1}")
    print(f"ROC-AUC: {roc_auc}")
    
    # Affichage de la courbe ROC
    fpr, tpr, _ = roc_curve(y_test, y_prob)
    plt.figure(figsize=(8, 6))
    plt.plot(fpr, tpr, color='b', label=f"ROC curve (AUC = {roc_auc:.2f})")
    plt.plot([0, 1], [0, 1], color='gray', linestyle='--')
    plt.xlabel('Taux de faux positifs')
    plt.ylabel('Taux de vrais positifs')
    plt.title('Courbe ROC')
    plt.legend(loc='lower right')
    plt.show()

    Explication du code :

    1. Préparation des données : Le jeu de données est divisé en deux parties : un ensemble d'entraînement (X_train, y_train) et un ensemble de test (X_test, y_test).
    2. Entraînement du modèle : Un modèle de régression logistique est entraîné avec l'argument class_weight='balanced' pour prendre en compte le déséquilibre des classes.
    3. Prédictions : Le modèle effectue des prédictions sur l'ensemble de test et calcule également les probabilités de chaque instance d'appartenir à la classe positive.
    4. Évaluation : Le F1-score est calculé à partir des prédictions binaires, et le ROC-AUC est évalué en utilisant les probabilités.
    5. Courbe ROC : La courbe ROC est tracée pour visualiser la performance du modèle à différents seuils.

    Remarques :

    • F1-score : Le F1-score est particulièrement utile pour évaluer les modèles sur des jeux de données déséquilibrés, car il prend en compte à la fois le rappel et la précision, ce qui évite de se concentrer uniquement sur l'une des métriques au détriment de l'autre.
    • ROC-AUC : L'AUC ROC est une métrique robuste qui permet de comparer différents modèles indépendamment du seuil choisi pour la classification. Plus la valeur de l'AUC est élevée, plus le modèle est performant.
    • Utilisation combinée : En combinant le F1-score et le ROC-AUC, vous obtenez une évaluation complète du modèle sur des données déséquilibrées, ce qui vous permet de mieux comprendre ses performances.

    Conseils supplémentaires :

    • Précision/Rappel : Lorsque vous évaluez un modèle, surtout avec des données déséquilibrées, pensez à analyser non seulement le F1-score, mais aussi les courbes de précision-rappel (PR Curve) qui peuvent être plus informatives dans certains cas.
    • Optimisation des seuils : Le seuil de classification (la probabilité à partir de laquelle on décide qu'une observation appartient à la classe positive) peut affecter les performances du modèle. Il est important de tester différents seuils pour maximiser le F1-score ou d'autres métriques comme le ROC-AUC.

    Autres métriques adaptées aux données déséquilibrées :

    • Précision : La proportion des prédictions positives correctes parmi toutes les prédictions positives. Elle est utilisée en combinaison avec le rappel pour calculer le F1-score.
    • Rappel : La proportion des instances positives correctement identifiées parmi toutes les instances positives réelles.