Cet article est le huitième de notre série consacrée aux métriques de classification, dans le cadre de notre formation : Evaluer la performance des modèles de Machine Learning et de Deep Learning.
Nous vous recommandons de lire au préalable l’article de cette série dédié à la sensitivity et la specificity si vous ne connaissez pas ces métriques.
La Balanced Accuracy Weighted, qu’est-ce que c’est ?
La Balanced Accuracy Weighted (BAW), aussi connue sous le nom de Weighted Balanced Accuracy, est une famille de métriques de classification pour les problèmes à deux classes ou plus. Ses deux variantes les plus courantes sont l’accuracy et la balanced accuracy.
Comme les autres métriques, la Balanced Accuracy Weighted (BAW) est basée sur la matrice de confusion. Pour rappel, la matrice de confusion est composée de 4 valeurs :
Figure 1. Matrice de confusion
La BAW est définie comme une moyenne pondérée (arbitrairement) des recall des différentes classes. Dans le cas de la classification binaire, le recall des positifs (taux de positifs correctement prédits) est appelé sensitivity, tandis que le recall des négatifs (taux de négatifs correctement prédits) est appelé specificity. La formule s’écrit alors :
\begin{align*}
\text{Balanced Accuracy Weighted} &= \frac{w_1 \, \text{sensitivity} +w_2 \, \text{specificity}}{w_1+w_2} \\
&= \frac{w_1}{w_1+w_2} \frac{TP}{TP+FN} + \frac{w_2}{w_1+w_2} \frac{TN}{TN+FP}
\end{align*}
Les variantes principales de la Balanced Accuracy Weighted
Selon le choix de la pondération dans le calcul de la BAW, on peut obtenir différentes métriques.
L’Accuracy
La variante la plus couramment rencontrée est tout simplement l’accuracy. Le lien entre accuracy et BAW est rarement fait car il ne permet pas de mieux comprendre l’accuracy en tant que telle. Il permet cependant de mettre en évidence les défauts de l’accuracy en présence de données déséquilibrées (imbalanced data) et mérite donc que l’on s’y attarde.
La pondération utilisée pour obtenir l’accuracy est intuitive : on pondère chaque recall par la proportion de la classe associée. La sensitivity (recall des positifs) est pondérée par le taux de positifs dans les données : $\frac{TP+FN}{TP+TN+FP+FN}$. Et la specificity (recall des négatifs) est pondérée par le taux de négatifs dans les données : $\frac{TN+FP}{TP+TN+FP+FN}$. On obtient la formule de l’accuracy que l’on connaît :
\begin{align*}
\text{Accuracy} &= \frac{TP+FN}{TP+TN+FP+FN} \times \frac{TP}{TP+FN} \\
& \quad \quad + \frac{TN+FP}{TP+TN+FP+FN} \times \frac{TN}{TN+FP} \\
&= \frac{TP+TN}{TP+TN+FP+FN}
\end{align*}
Cette formule permet de cerner le défaut de l’accuracy (nommé “accuracy paradox”) en présence de données déséquilibrées : si le taux de positifs est très inférieur au taux de négatifs, alors la sensitivity sera fortement sous-pondérée par rapport à la specificity. Optimiser l’accuracy revient alors à optimiser la specificity et à privilégier la prédiction des individus négatifs.
La balanced accuracy
Définition
Pour éviter l’accuracy paradox, une autre variante couramment utilisée de la BAW est la Balanced Accuracy (BA). Au lieu de pondérer chaque rappel par la proportion de sa classe, la pondération est la même pour chaque classe. Dans le cas d’une classification binaire (deux classes : 0 ou 1) chaque rappel est donc pondéré par 12. On obtient la formule de la balanced accuracy :
\begin{equation*}
\text{Balanced Accuracy} = \frac{1}{2} \times \frac{TP}{TP+FN} + \frac{1}{2} \times \frac{TN}{TN+FP}
\end{equation*}
Balanced accuracy pour un seuil de classification
La fonction de scikit-learn qui permet de calculer cette métrique est : sklearn.metrics.balanced_accuracy_score [1].
Calculons-la balanced accuracy du modèle sur nos données, à partir du modèle xgboost entraîné (code dans le premier article).
En utilisant les labels prédits par la méthode predict du modèle, on peut calculer la balanced accuracy de notre modèle :
from sklearn.metrics import balanced_accuracy_score
balanced_accuracy = balanced_accuracy_score(y_true=y_test, y_pred=label_pred)
print(balanced_accuracy)
Sous R, on peut utiliser la fonction confusionMatrix() du package caret.
Balanced accuracy pour l’ensemble des seuils possibles
Attention, la balanced accuracy dépend du seuil de classification! En l’utilisant directement sur les labels prédits on peut oublier qu’il y a dans la méthode predict() un choix implicite du seuil de classification (à 50%). Pour connaître l’ensemble des valeurs de balanced accuracy possibles, le code suivant permet de la calculer à partir des probabilités du modèle, sur une grille de seuils :
# Définition des seuils de classification pour lesquels on va calculer
# les scores de balanced accuracy
threshold_array = np.linspace(0, 1, 100)
balanced_accuracy_list = []
for threshold in threshold_array:
# Labels prédits pour un seuil donné
label_pred_threshold = (probas_pred > threshold).astype(int)
# Calcul de la balanced accuracy pour un seuil donné
balanced_accuracy_threshold = balanced_accuracy_score(
y_true=y_test, y_pred=label_pred_threshold
)
balanced_accuracy_list.append(balanced_accuracy_threshold)
plt.plot(threshold_array, balanced_accuracy_list)
plt.show()
Balanced accuracy d’un modèle non-informatif
Un modèle non-informatif est un modèle dans lequel les individus positifs ont la même distribution de probabilités que les individus négatifs. A l’aide de la matrice de confusion du modèle non-informatif, calculons la balanced accuracy de référence :
Figure 2. Balanced accuracy d’un modèle non-informatif.
Composantes de la matrice exprimées en %. p est le taux de positifs dans le jeu de données et q est le taux de prédictions positives.
Détail du calcul :
\begin{align*}
\text{Balanced Accuracy}_{\text{baseline}} &= \frac{1}{2} \times \frac{pq}{pq+p(1-q)} + \frac{1}{2} \times \frac{(1-p)(1-q)}{(1-p)(1-q)+(1-p)q} \\
&= \frac{1}{2} \times \frac{pq}{p} + \frac{1}{2} \times \frac{(1-p)(1-q)}{(1-p)} \\
&= \frac{q+1-q}{2} = 50\%
\end{align*}
Pour un modèle non-informatif, la balanced accuracy ne dépend donc ni du seuil de classification ni du taux de positifs, contrairement à l’accuracy ou au F1-score. La balanced accuracy de référence est constante et égale à 50%.
La balanced accuracy permet donc de corriger les défauts de l’accuracy en présence de données déséquilibrées.
Conclusion
La Balanced Accuracy Weighted (BAW) est une famille de métriques de classification paramétrées par une pondération de la sensitivity et de la specificity.
Définir l’accuracy à partir de la BAW permet de mieux comprendre ses limites en présence de données déséquilibrées (accuracy paradox). Une autre variante de la BAW, la balanced accuracy, permet de corriger l’accuracy paradox dans l’évaluation d’un modèle de classification. Mais la BAW peut se décliner sous de nombreuses autres formes, selon la pondération choisie et en fonction des situations rencontrées.
Pour explorer d’autres métriques de classification, consultez les articles de cette série.
- 2 jours
- 950€
- 2 jours
- 1 200€
Références :
- « sklearn.metrics.balanced_accuracy_score », scikit-learn. https://scikit-learn/stable/modules/generated/sklearn.metrics.balanced_accuracy_score.html