Comment calculer le Test de McNemar pour Comparer Deux Classificateurs d’Apprentissage automatique

Tweet Partager Partager

Dernière mise à jour le 8 août 2019

Le choix d’un test d’hypothèse statistique est un problème ouvert difficile pour l’interprétation des résultats d’apprentissage automatique.

Dans son article de 1998 largement cité, Thomas Dietterich a recommandé le test de McNemar dans les cas où il est coûteux ou peu pratique de former plusieurs copies de modèles de classificateurs.

Ceci décrit la situation actuelle avec des modèles d’apprentissage profond qui sont à la fois très volumineux et sont formés et évalués sur de grands ensembles de données, nécessitant souvent des jours ou des semaines pour former un seul modèle.

Dans ce tutoriel, vous découvrirez comment utiliser le test d’hypothèse statistique de McNemar pour comparer des modèles de classificateurs d’apprentissage automatique sur un seul jeu de données de test.

Après avoir terminé ce tutoriel, vous saurez:

  • La recommandation du test de McNemar pour les modèles coûteux à entraîner, qui convient aux grands modèles d’apprentissage profond.
  • Comment transformer les résultats de prédiction de deux classificateurs en un tableau de contingence et comment le tableau est utilisé pour calculer la statistique dans le test de McNemar.
  • Comment calculer le test de McNemar en Python et interpréter et rapporter le résultat.

Lancez votre projet avec mon nouveau livre Statistiques pour l’apprentissage automatique, y compris des tutoriels étape par étape et les fichiers de code source Python pour tous les exemples.

Commençons.

 Comment Calculer le Test de McNemar pour Deux Classificateurs d'Apprentissage Automatique

Comment Calculer le Test de McNemar pour Deux Classificateurs d’Apprentissage Automatique
Photo de Mark Kao, certains droits réservés.

Aperçu du tutoriel

Ce tutoriel est divisé en cinq parties; elles sont:

  1. Tests d’Hypothèses Statistiques pour l’Apprentissage profond
  2. Tableau de Contingence
  3. Statistique de Test de McNemar
  4. Interpréter le Test de McNemar pour les Classificateurs
  5. Test de McNemar en Python

Besoin d’aide avec des statistiques pour l’apprentissage automatique?

Suivez mon cours intensif gratuit de 7 jours par e-mail maintenant (avec un exemple de code).

Cliquez pour vous inscrire et obtenez également une version PDF Ebook gratuite du cours.

Téléchargez votre Mini-cours GRATUIT

Tests d’hypothèses statistiques pour l’apprentissage profond

Dans son article important et largement cité de 1998 sur l’utilisation des tests d’hypothèses statistiques pour comparer les classificateurs intitulé « Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithms », Thomas Dietterich recommande l’utilisation du test de McNemar.

Plus précisément, le test est recommandé dans les cas où les algorithmes comparés ne peuvent être évalués qu’une seule fois, par ex. sur un ensemble de tests, par opposition à des évaluations répétées via une technique de rééchantillonnage, telle que la validation croisée k-fold.

Pour les algorithmes qui ne peuvent être exécutés qu’une seule fois, le test de McNemar est le seul test avec une erreur de type I acceptable.

— Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm, 1998.

Plus précisément, l’étude de Dietterich portait sur l’évaluation de différents tests d’hypothèses statistiques, certains fonctionnant sur les résultats de méthodes de rééchantillonnage. La préoccupation de l’étude était une faible erreur de type I, c’est-à-dire que le test statistique signalait un effet alors qu’en fait aucun effet n’était présent (faux positif).

Les tests statistiques permettant de comparer des modèles sur la base d’un seul ensemble de tests sont une considération importante pour l’apprentissage automatique moderne, en particulier dans le domaine de l’apprentissage profond.

Les modèles d’apprentissage profond sont souvent volumineux et fonctionnent sur de très grands ensembles de données. Ensemble, ces facteurs peuvent signifier que la formation d’un modèle peut prendre des jours, voire des semaines, sur du matériel moderne et rapide.

Cela exclut l’utilisation pratique de méthodes de rééchantillonnage pour comparer les modèles et suggère la nécessité d’utiliser un test pouvant fonctionner sur les résultats de l’évaluation de modèles entraînés sur un seul ensemble de données de test.

Le test de McNemar peut être un test approprié pour évaluer ces modèles d’apprentissage profond volumineux et lents à entraîner.

Tableau de contingence

Le test de McNemar fonctionne sur un tableau de contingence.

Avant de plonger dans le test, prenons un moment pour comprendre comment le tableau de contingence pour deux classificateurs est calculé.

Un tableau de contingence est une tabulation ou un comptage de deux variables catégorielles. Dans le cas du test de McNemar, nous nous intéressons aux variables binaires correct/incorrect ou oui/non pour un contrôle et un traitement ou deux cas. C’est ce qu’on appelle une table de contingence 2×2.

Le tableau de contingence peut ne pas être intuitif à première vue. Rendons cela concret avec un exemple travaillé.

Considérons que nous avons deux classificateurs formés. Chaque classificateur effectue une prédiction de classe binaire pour chacun des 10 exemples d’un jeu de données de test. Les prédictions sont évaluées et déterminées comme étant correctes ou incorrectes.

On peut alors résumer ces résultats dans un tableau, comme suit:

1
2
3
4
5
6
7
8
9
10
11

Instance, Classifieur1 Correct, Classifieur2 Correct
1AnsNo
2NoNo
3NoYes
4NoNo
5YesYes
6YesYes
7YesYes
8NoNo
9AnsNo
10AnsOui

Nous pouvons voir que Classificateur1 a obtenu 6 correct, ou une précision de 60%, et Classifier2 a obtenu 5 corrects, ou une précision de 50% sur l’ensemble de test.

La table peut maintenant être réduite à une table de contingence.

Le tableau de contingence repose sur le fait que les deux classificateurs ont été formés sur exactement les mêmes données d’entraînement et évalués sur exactement les mêmes instances de données de test.

Le tableau de contingence a la structure suivante:

1
2
3

Classifier2 Correct, Classifier2 Incorrect
Classifier1 Correct????
Classificateur1 Incorrect ?? ??

Dans le cas de la première cellule du tableau, nous devons additionner le nombre total d’instances de test que Classifier1 a corrigées et Classifier2 a corrigées. Par exemple, la première instance que les deux classificateurs ont prédit correctement était l’instance numéro 5. Le nombre total d’instances que les deux classificateurs ont prédites correctement était de 4.

Une autre façon plus programmatique de penser à cela consiste à additionner chaque combinaison de Oui / Non dans le tableau des résultats ci-dessus.

1
2
3

Classificateur2 Correct, Classificateur2 Incorrect
Classificateur1 Correct Oui / OUI Oui / Non
Classificateur1 Incorrect Non / Oui Non/ Non

Les résultats organisés en un tableau de contingence sont les suivants:

1
2
3

Classificateur2 Correct, Classificateur2 Incorrect
Classificateur1 Correct 42
Classificateur1 Incorrect 1 3

Statistique de test de McNemar

Le test de McNemar est un test d’hypothèse statistique apparié non paramétrique ou sans distribution.

Il est également moins intuitif que certains autres tests d’hypothèses statistiques.

Le test de McNemar vérifie si les désaccords entre deux cas correspondent. Techniquement, c’est ce qu’on appelle l’homogénéité du tableau de contingence (en particulier l’homogénéité marginale). Par conséquent, le test de McNemar est un type de test d’homogénéité pour les tables de contingence.

Le test est largement utilisé en médecine pour comparer l’effet d’un traitement à celui d’un contrôle.

En termes de comparaison de deux algorithmes de classification binaire, le test commente si les deux modèles ne sont pas d’accord de la même manière (ou non). Il ne s’agit pas de commenter si un modèle est plus ou moins précis ou sujet aux erreurs qu’un autre. Cela est clair lorsque nous regardons comment la statistique est calculée.

La statistique de test de McNemar est calculée comme suit:

1
statistique = (Oui / Non – Non / Oui) ^2 /(Oui / Non + Non/ Oui)

Où Oui / Non est le nombre d’instances de test qui Classifier1 est devenu correct et Classifier2 est devenu incorrect, et Non / Oui est le nombre d’instances de test qui Classifier1 est devenu incorrect et Classifier2 est devenu correct.

Ce calcul de la statistique de test suppose que chaque cellule du tableau de contingence utilisé dans le calcul a un compte d’au moins 25. La statistique de test a une distribution du Chi carré avec 1 degré de liberté.

Nous pouvons voir que seuls deux éléments du tableau de contingence sont utilisés, en particulier que les éléments Oui / Oui et Non / Non ne sont pas utilisés dans le calcul de la statistique de test. Ainsi, nous pouvons voir que la statistique rend compte des différentes prédictions correctes ou incorrectes entre les deux modèles, et non des taux d’exactitude ou d’erreur. Ceci est important à comprendre lorsque vous faites des réclamations concernant la conclusion de la statistique.

L’hypothèse par défaut, ou hypothèse nulle, du test est que les deux cas ne sont pas d’accord sur le même montant. Si l’hypothèse nulle est rejetée, cela suggère qu’il existe des preuves suggérant que les cas ne sont pas d’accord de différentes manières, que les désaccords sont biaisés.

Étant donné la sélection d’un niveau de signification, la valeur p calculée par le test peut être interprétée comme suit:

  • p > alpha: ne pas rejeter H0, pas de différence dans le désaccord (par exemple, le traitement n’a eu aucun effet).
  • p < = alpha: rejeter H0, différence significative dans le désaccord (par exemple, le traitement a eu un effet).

Interpréter le test de McNemar pour les classificateurs

Il est important de prendre un moment pour comprendre clairement comment interpréter le résultat du test dans le contexte de deux modèles de classificateurs d’apprentissage automatique.

Les deux termes utilisés dans le calcul du test de McNemar capturent les erreurs commises par les deux modèles. Plus précisément, les cellules Non / Oui et Oui / Non du tableau de contingence. Le test vérifie s’il existe une différence significative entre les comptes dans ces deux cellules. C’est tout.

Si ces cellules ont des comptages similaires, cela nous montre que les deux modèles font des erreurs à peu près dans la même proportion, uniquement sur des instances différentes de l’ensemble de tests. Dans ce cas, le résultat du test ne serait pas significatif et l’hypothèse nulle ne serait pas rejetée.

Dans l’hypothèse nulle, les deux algorithmes devraient avoir le même taux d’erreur …

— Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm, 1998.

Si ces cellules ont des nombres qui ne sont pas similaires, cela montre que les deux modèles non seulement font des erreurs différentes, mais ont en fait une proportion relative d’erreurs différente sur l’ensemble de tests. Dans ce cas, le résultat du test serait significatif et nous rejeterions l’hypothèse nulle.

Nous pouvons donc rejeter l’hypothèse nulle en faveur de l’hypothèse selon laquelle les deux algorithmes ont des performances différentes lorsqu’ils sont entraînés sur l’entraînement particulier

— Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm, 1998.

Nous pouvons résumer cela comme suit:

  • Ne pas rejeter l’hypothèse nulle: Les classificateurs ont une proportion similaire d’erreurs sur l’ensemble de tests.
  • Rejeter l’hypothèse nulle: Les classificateurs ont une proportion différente d’erreurs sur l’ensemble de tests.

Après avoir effectué le test et trouvé un résultat significatif, il peut être utile de rapporter une mesure statistique des effets afin de quantifier le résultat. Par exemple, un choix naturel serait de déclarer les rapports de cotes, ou le tableau de contingence lui-même, bien que les deux supposent un lecteur sophistiqué.

Il peut être utile de signaler la différence d’erreur entre les deux classificateurs de l’ensemble de tests. Dans ce cas, soyez prudent avec vos affirmations car le test significatif ne rend pas compte de la différence d’erreur entre les modèles, seulement de la différence relative de proportion d’erreur entre les modèles.

Enfin, en utilisant le test de McNemar, Dietterich met en évidence deux limitations importantes qui doivent être prises en compte. Ils sont:

Aucune Mesure de la variabilité de l’Ensemble d’entraînement ou du Modèle.

Généralement, le comportement du modèle varie en fonction des données d’entraînement spécifiques utilisées pour s’adapter au modèle.

Cela est dû à la fois à l’interaction du modèle avec des instances d’entraînement spécifiques et à l’utilisation du caractère aléatoire pendant l’apprentissage. L’ajustement du modèle sur plusieurs ensembles de données d’entraînement différents et l’évaluation de la compétence, comme cela se fait avec les méthodes de rééchantillonnage, permettent de mesurer la variance du modèle.

Le test est approprié si les sources de variabilité sont faibles.

Par conséquent, le test de McNemar ne devrait être appliqué que si nous pensons que ces sources de variabilité sont faibles.

— Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm, 1998.

Comparaison moins directe des modèles

Les deux classificateurs sont évalués sur un seul ensemble de tests, et l’ensemble de tests devrait être plus petit que l’ensemble d’apprentissage.

Ceci est différent des tests d’hypothèse qui utilisent des méthodes de rééchantillonnage car une plus grande partie, sinon la totalité, de l’ensemble de données est disponible en tant qu’ensemble de tests lors de l’évaluation (ce qui introduit ses propres problèmes d’un point de vue statistique).

Cela permet moins de comparer les performances des modèles. Cela nécessite que l’ensemble de test soit un représentant approprié du domaine, ce qui signifie souvent que l’ensemble de données de test est volumineux.

Test de McNemar en Python

Le test de McNemar peut être implémenté en Python en utilisant la fonction mcnemar()Statsmodels.

La fonction prend la table de contingence comme argument et renvoie la statistique de test calculée et la valeur p.

Il existe deux façons d’utiliser la statistique en fonction de la quantité de données.

S’il existe une cellule dans le tableau utilisée dans le calcul de la statistique de test dont le nombre est inférieur à 25, une version modifiée du test est utilisée pour calculer une valeur p exacte à l’aide d’une distribution binomiale. C’est l’utilisation par défaut du test:

1
stat, p = mcnemar(table, exact = Vrai)

Alternativement, si toutes les cellules utilisées dans le calcul de la statistique de test dans le tableau de contingence ont une valeur de 25 ou plus, le calcul standard du test peut être utilisé.

1
stat, p = mcnemar(tableau, exact = Faux, correction = Vrai)

Nous pouvons calculer les McNemar sur l’exemple de tableau de contingence décrit ci-dessus. Ce tableau de contingence comporte un petit nombre dans les deux cellules de désaccord et, en tant que tel, la méthode exacte doit être utilisée.

L’exemple complet est répertorié ci-dessous.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# Exemple de calcul du test mcnemar
à partir de modèles statistiques.statistique.import mcnemar
# définir le tableau des contingences
tableau = ,
]
# calculez le test mcnemar
result = mcnemar(table, exact= True)
# résumez la conclusion
print(‘statistic=%.3f, valeur p = %.3f’% (résultat.statistique, résultat.pvalue))
# interprétez la valeur p
alpha = 0,05
si résultat.pvalue > alpha:
print (‘Mêmes proportions d’erreurs (échec du rejet H0)’)
else:
print(‘Différentes proportions d’erreurs (rejeter H0)’)

L’exécution de l’exemple calcule la statistique et la valeur p sur la table de contingence et imprime les résultats.

On voit que le test confirme fortement qu’il y a très peu de différence dans les désaccords entre les deux cas. L’hypothèse nulle n’est pas rejetée.

Comme nous utilisons le test pour comparer les classificateurs, nous déclarons qu’il n’y a pas de différence statistiquement significative dans les désaccords entre les deux modèles.

1
2

statistique = 1,000, valeur p = 1,000
Mêmes proportions d’erreurs (ne pas rejeter H0)

Extensions

Cette section répertorie quelques idées d’extension du tutoriel que vous souhaiterez peut-être explorer.

  • Trouvez un article de recherche en apprentissage automatique qui utilise le test d’hypothèse statistique de McNemar.
  • Mettre à jour l’exemple de code de sorte que le tableau de contingence montre une différence significative de désaccord entre les deux cas.
  • Implémentez une fonction qui utilisera la version correcte du test de McNemar sur la base du tableau de contingence fourni.

Si vous explorez l’une de ces extensions, j’aimerais le savoir.

Lectures supplémentaires

Cette section fournit plus de ressources sur le sujet si vous cherchez à aller plus loin.

Articles

  • Note sur l’erreur d’échantillonnage de la différence entre les proportions ou les pourcentages corrélés, 1947.
  • Tests Statistiques Approximatifs pour Comparer des Algorithmes d’Apprentissage Supervisés de Classification, 1998.

API

  • modèles de statut.statistique.tables de contingence.API mcnemar()

Articles

  • Test de McNemar sur Wikipedia
  • Erreurs de type I et de type II sur Wikipedia
  • Tableau de contingence sur wikipedia

Résumé

Dans ce tutoriel, vous avez découvert comment utiliser le Test d’hypothèse statistique de test de McNemar pour comparer des modèles de classificateurs d’apprentissage automatique sur un seul ensemble de données de test.

Plus précisément, vous avez appris:

  • La recommandation du test de McNemar pour les modèles coûteux à entraîner, qui convient aux grands modèles d’apprentissage profond.
  • Comment transformer les résultats de prédiction de deux classificateurs en un tableau de contingence et comment le tableau est utilisé pour calculer la statistique dans le test de McNemar.
  • Comment calculer le test de McNemar en Python et interpréter et rapporter le résultat.

Avez-vous des questions?
Posez vos questions dans les commentaires ci-dessous et je ferai de mon mieux pour y répondre.

Maîtrisez les statistiques pour l’apprentissage automatique !

 Méthodes statistiques pour l'apprentissage automatique

Développer une compréhension fonctionnelle des statistiques

…en écrivant des lignes de code en python

Découvrez comment dans mon nouvel Ebook:
Méthodes statistiques pour l’apprentissage automatique

Il fournit des tutoriels d’auto-apprentissage sur des sujets tels que:
Tests d’hypothèse, Corrélation, Statistiques non paramétriques, Rééchantillonnage, et bien plus encore…

Découvrez comment transformer les données en Connaissances

Ignorez les universitaires. Juste des résultats.

Voir ce qu’il y a à l’intérieur

Partager Partager Partager

You might also like

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.