Comparer deux modèles
sur le même tirage
Cas 2 du fil A. Déroulé autoporteur de la comparaison appariée, tenue le 11/09/2026 : la différence comme objet unique, la covariance qu'on ne peut pas ignorer, McNemar, bootstrap. À lire lentement, une fois, en jouant avec chaque figure.
0La question unique, et un seul objetce qui change par rapport au cas 1 : il y a une covariance
Même question qu'au cas 1 : qu'est-ce qui varierait si je refaisais l'expérience ? Mais l'expérience a changé. Deux classifieurs A et B, fixés. Un seul test set de n = 5 000 images. A affiche 87,2 %, B affiche 88,1 %. Sur les 5 000 images, les deux modèles sont d'accord 4 850 fois ; sur 52 images A seul a bon ; sur 98 images B seul a bon.
La question qu'on pose n'est pas « que vaut A ? » ni « que vaut B ? ». C'est « B est-il meilleur que A ? ». Cette question porte sur un objet : la différence d = pA − pB. C'est ce paramètre-là qui vit au niveau 1.
Le vocabulaire, fixé avant tout calcul
| objet | notation | statut | ne pas confondre avec |
|---|---|---|---|
| vraies accuracies | pA, pB | fixes, inconnues | 87,2 et 88,1 |
| vraie différence | d = pA − pB | fixe, inconnue : l'objet de la question | la différence observée |
| résultat de A, de B sur l'image i | Xi, Yi ∈ {0, 1} | aléatoires, mêmes images | |
| différence sur l'image i | Di = Xi − Yi ∈ {−1, 0, +1} | aléatoire : la brique du cas 2 | Xi |
| différence observée | d̂ = p̂A − p̂B = (1/n) Σ Di | aléatoire au niveau 2 | d |
| bruit de A, bruit de B | eA = p̂A − pA, eB = p̂B − pB | aléatoires, corrélés | deux bruits indépendants |
| taux de désaccord | π = P(Di ≠ 0) | fixe ; ici estimé à 150/5000 = 0,03 | la différence |
1L'erreur naturelle : deux intervalles séparéset les deux raisons pour lesquelles elle est fausse
On sort la recette du cas 1 deux fois. A : SÊA = √(0,872·0,128/5000) = 0,47 point, IC = [86,3 ; 88,1]. B : SÊB = √(0,881·0,119/5000) = 0,46 point, IC = [87,2 ; 89,0]. Les deux intervalles se chevauchent largement. Conclusion tentante : « pas de différence significative ».
C'est faux, pour deux raisons distinctes qu'il faut savoir nommer séparément.
Raison 1, la question. Deux intervalles répondent à deux questions (« où est pA ? », « où est pB ? »). La question posée est une troisième (« où est d ? »), et elle demande son propre intervalle. Regarder un chevauchement, c'est un test approximatif et conservateur, même quand les mesures sont indépendantes : deux IC à 95 % qui se touchent à peine correspondent à peu près à un test à 99 %, pas à 95 %.
Raison 2, la covariance. Règle 2 du cas 1 : Var(p̂A − p̂B) = Var(p̂A) + Var(p̂B) − 2·Cov(p̂A, p̂B). Regarder les deux IC séparément, c'est faire comme si Cov = 0. Or les deux modèles sont mesurés sur les mêmes images, et la covariance est fortement positive. Ignorer le terme −2Cov, c'est surestimer la variance de la différence, donc élargir l'intervalle, donc rater des différences réelles.
2Le bruit partagébrique unique : deux mesures sur le même tirage bougent ensemble, et leur différence bouge moins
Écris chaque mesure comme vraie valeur plus bruit : p̂A = pA + eA, p̂B = pB + eB. Le bruit vient du tirage : un test set tombé « facile » (beaucoup d'images nettes) remonte les deux modèles ; un test set tombé « dur » les descend tous les deux. Même tirage, même chance, donc eA et eB sont corrélés positivement.
La différence observée s'écrit alors d̂ = (pA − pB) + (eA − eB). La part commune des deux bruits se soustrait. Ce qui reste, c'est seulement la part où les deux modèles réagissent différemment au tirage. Précision honnête : l'annulation est partielle, proportionnelle à la corrélation des erreurs.
Dans la figure, chaque point est un test set : ses coordonnées sont les deux accuracies mesurées. Sur le même tirage, le nuage s'étire le long de la diagonale — quand A monte, B monte. La différence, lue perpendiculairement à la diagonale, est étroite. Avec deux test sets distincts, le nuage devient rond, et la différence est large. Même quantité de données, même vérité, deux précisions.
3Le calcul apparié : la brique Dᵢencore une moyenne empirique, et l'effectif qui compte n'est pas 5 000
La brique nouvelle : sur chaque image, on ne regarde plus deux 0/1, on regarde un nombre, Di = Xi − Yi, qui vaut −1, 0 ou +1.
| situation | Di | Di2 | effectif |
|---|---|---|---|
| accord (les deux bons, ou les deux faux) | 0 | 0 | 4 850 |
| A seul a bon | +1 | 1 | 52 |
| B seul a bon | −1 | 1 | 98 |
Maillon 1. d̂ = (1/n) Σ Di = (52 − 98)/5000 = −46/5000 = −0,92 point. Cohérent avec 87,2 − 88,1. Et c'est encore une moyenne empirique : toute la chaîne du cas 1 s'applique, avec Di à la place de Xi. E[d̂] = d par linéarité ; Var(d̂) = Var(Di)/n par les règles 1 et 2.
Maillon 2, la variance de Di. Formule de calcul : Var(Di) = E[Di2] − E[Di]2. Or Di2 vaut 1 exactement quand les modèles sont en désaccord, donc E[Di2] = π, le taux de désaccord. Et E[Di] = d. D'où :
Var(Di) = π − d2Le maillon central du cas 2 : les 4 850 accords sont absents de cette variance. Ils contribuent 0 à Di et 0 à Di2. L'effectif qui porte l'information, ce n'est pas 5 000, c'est 150. Deux modèles qui se trompent sur les mêmes images ne s'aident pas à se départager : ils ne donnent aucune information l'un sur l'autre.
Maillon 3, plug-in. π̂ = 150/5000 = 0,03, d̂ = −0,0092. SÊd̂ = √((0,03 − 0,00922)/5000) = √(0,02992/5000) = √(5,98·10−6) = 0,00245, soit 0,245 point.
Comparaison avec le non-apparié. Si on avait ignoré la covariance : √(SÊA2 + SÊB2) = √(0,472 + 0,462) ≈ 0,66 point. Le bruit est divisé par presque 3 grâce à l'appariement.
Maillon 4, l'intervalle et le z. z = d̂ / SÊ = −0,0092 / 0,00245 ≈ −3,8. IC95(d) = −0,92 ± 1,96 × 0,245 = [−1,40 ; −0,44] point. Il exclut 0 : B est significativement meilleur. En non-apparié, z ≈ −0,92/0,66 ≈ −1,4, IC = [−2,2 ; +0,4], contient 0. Même donnée, conclusion opposée. La covariance n'est pas un raffinement, elle décide.
Le lien général, pour le tableau : Var(d̂) = 2s2(1 − ρ) où s2 est la variance moyenne d'une mesure et ρ la corrélation des erreurs. Ici ρ ≈ 0,86. Et 1 − ρ = π / (2p(1−p)) : la corrélation est d'autant plus forte que le taux de désaccord est petit. Contre-intuitif mais vrai : deux modèles proches sont plus faciles à départager, parce qu'ils sont en désaccord sur peu d'images, et ces quelques images parlent fort.
4McNemar : la même chaîne sous H₀SE estimée contre SE sous l'hypothèse nulle
Le test de McNemar n'est pas une recette à part. C'est cette chaîne, avec une seule différence : on calcule la SE en supposant que H₀ est vraie (d = 0) au lieu de la calculer avec le d̂ observé.
Sous H₀, d = 0, donc Var(Di) = π − 0 = π, et Var(d̂) = π/n. En comptages, avec b = 52 et c = 98 : d̂ = (b − c)/n, π̂ = (b + c)/n, donc
z = d̂ / √(π̂/n) = ((b−c)/n) / (√(b+c)/n) = (b − c) / √(b + c) = −46 / √150 = −3,76n a disparu. Seuls les désaccords comptent, et la formule le dit tout haut. La valeur diffère à peine du −3,8 précédent, parce que d̂2 est négligeable devant π. La distinction devient importante quand l'effet est grand par rapport au taux de désaccord.
5Le bootstrap appariésimuler « refaire l'expérience » au lieu de le calculer
La chaîne ci-dessus marche parce que d̂ est une moyenne. Pour une métrique qui n'en est pas une (F1, AUC, un win-rate jugé par un LLM), il n'y a pas de formule fermée pour la SE. Le bootstrap contourne : la population, je ne l'ai pas ; l'échantillon est ma meilleure approximation de la population, alors je tire dedans.
Recette : tirer 5 000 images avec remise dans le test set, recalculer la métrique, recommencer B fois, lire la dispersion des B valeurs. C'est la question unique, exécutée : chaque rééchantillon est un « et si j'avais eu un autre test set ».
La subtilité qui fait tout, et qui est la même que la marche 2 : on rééchantillonne les paires (Xi, Yi), c'est-à-dire des images entières, pas la colonne de A et la colonne de B séparément. Rééchantillonner séparément casserait le lien entre les deux mesures sur une même image, donc effacerait la covariance, donc retomberait sur la SE non appariée de 0,66. Le bootstrap apparié retrouve 0,245 : il ne sait rien de la formule π − d2, il la redécouvre en refaisant l'expérience.
▮La lecture correcte, avec la phrase au tableau
Où chaque maillon casse
| # | maillon | hypothèse | ce qui casse |
|---|---|---|---|
| 1 | un seul objet, d | — | comparer deux IC ⇒ mauvaise question, test conservateur |
| 2 | règle 2 avec Cov | mêmes images | supposer Cov = 0 ⇒ SE × 2,7, différence ratée |
| 3 | Di iid | images indépendantes | frames corrélées ⇒ SE sous-estimée (comme au cas 1) |
| 4 | Var(Di) = π − d² | — | compter n au lieu des désaccords ⇒ fausse confiance |
| 5 | plug-in de π et d | désaccords ≥ 10 environ | b + c petit ⇒ test exact binomial sur b contre b+c |
| 6 | SE sous H₀ vs estimée | savoir quelle question on pose | mélanger test et intervalle |
| 7 | bootstrap | rééchantillonner les paires | rééchantillonner par colonne ⇒ covariance perdue |
| 8 | apparié ≠ randomisé | — | conclure « B est meilleur parce que » : la comparaison ne dit pas pourquoi |
| 9 | modèles fixés avant le tirage | pas de sélection | B est « le meilleur de 40 » ⇒ cas 3 |
Quand tu compares, demande-toi d'abord quel est l'objet unique, puis ce que les deux mesures ont en commun dans leur tirage.
La porte vers le cas 3
Tout ce qui précède suppose que A et B ont été choisis avant d'ouvrir le test set. Si B est en réalité la meilleure de 40 configurations essayées sur ce même test set, ses 88,1 % sont gonflés, l'appariement n'y change rien, et le bootstrap ne le voit pas. C'est le biais du max, cas 3.