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.

le bruit du tirage, et ce qu'il a de partagél'erreur naturelle : traiter A et B séparémentla vraie valeur, fixe

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

objetnotationstatutne pas confondre avec
vraies accuraciespA, pBfixes, inconnues87,2 et 88,1
vraie différenced = pA − pBfixe, inconnue : l'objet de la questionla différence observée
résultat de A, de B sur l'image iXi, Yi ∈ {0, 1}aléatoires, mêmes images
différence sur l'image iDi = Xi − Yi ∈ {−1, 0, +1}aléatoire : la brique du cas 2Xi
différence observéed̂ = p̂A − p̂B = (1/n) Σ Dialéatoire au niveau 2d
bruit de A, bruit de BeA = p̂A − pA, eB = p̂B − pBaléatoires, corrélésdeux bruits indépendants
taux de désaccordπ = P(Di ≠ 0)fixe ; ici estimé à 150/5000 = 0,03la 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 : A = √(0,872·0,128/5000) = 0,47 point, IC = [86,3 ; 88,1]. B : 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 : A = pA + eA, 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.

Apparié n'est pas randomiséDeux axes orthogonaux à ne pas mélanger. Apparié (mêmes unités pour les deux traitements) est une affaire de précision. Randomisé (les unités sont affectées au hasard aux traitements) est une affaire de causalité. A contre B sur un test set est apparié mais non randomisé : le test dit lequel est meilleur, pas pourquoi. Un A/B test web est randomisé mais non apparié : chaque utilisateur ne voit qu'un bras.

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.

situationDiDi2effectif
accord (les deux bons, ou les deux faux)004 850
A seul a bon+1152
B seul a bon−1198

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) = π − d2

Le 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. = √((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 − ρ)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 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 = / √(π̂/n) = ((bc)/n) / (√(b+c)/n) = (bc) / √(b + c) = −46 / √150 = −3,76

n 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 2 est négligeable devant π. La distinction devient importante quand l'effet est grand par rapport au taux de désaccord.

SE sous H₀ contre SE estimée : laquelle, quandPour un test (« les données sont-elles compatibles avec d = 0 ? »), on calcule la dispersion telle qu'elle serait si H₀ était vraie : c'est cohérent, on se place dans le monde de H₀ pour voir si l'observation y est surprenante. Pour un intervalle (« où est d ? »), H₀ n'a pas de rôle, on utilise la SE estimée. Deux questions, deux SE, et elles ne coïncident que quand d̂ est petit. Même distinction que Wilson (test inversé) contre Wald (SE plug-in) au cas 1.

5Le bootstrap appariésimuler « refaire l'expérience » au lieu de le calculer

La chaîne ci-dessus marche parce que 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.

Ce que le bootstrap ne voit pasIl rééchantillonne le tirage que tu as. Si ce tirage a déjà servi à choisir (sélectionner la meilleure de k configs), le bootstrap tourne autour d'une valeur déjà gonflée et produit un intervalle centré au mauvais endroit. C'est la cécité du bootstrap, marche 4 du cas 3.

La lecture correcte, avec la phrase au tableau

« La question porte sur un seul objet, la différence. Les deux mesures partagent le tirage, donc leurs bruits sont corrélés et la règle 2 garde son terme −2Cov. Le calcul apparié passe par Dᵢ = Xᵢ − Yᵢ, dont la variance est π − d² : seuls les désaccords portent l'information. Ici l'appariement divise la SE par presque trois, et fait passer la conclusion de “pas significatif” à “significatif”. » Phrase fausse tentante : « les deux intervalles se chevauchent, donc pas de différence ». Tentante parce que c'est ce que montrent les deux barres, et parce que ça réutilise le cas 1 tel quel. Fausse parce qu'elle change d'objet (deux paramètres au lieu d'un) et jette la covariance. Deuxième phrase fausse tentante : « 5 000 images, donc l'écart de 0,9 point est bien mesuré ». Tentante parce que n est grand. Fausse parce que l'effectif informatif est 150, celui des désaccords ; la précision de la comparaison vient de là, pas de n.

Où chaque maillon casse

#maillonhypothèsece qui casse
1un seul objet, dcomparer deux IC ⇒ mauvaise question, test conservateur
2règle 2 avec Covmêmes imagessupposer Cov = 0 ⇒ SE × 2,7, différence ratée
3Di iidimages indépendantesframes corrélées ⇒ SE sous-estimée (comme au cas 1)
4Var(Di) = π − d²compter n au lieu des désaccords ⇒ fausse confiance
5plug-in de π et ddésaccords ≥ 10 environb + c petit ⇒ test exact binomial sur b contre b+c
6SE sous H₀ vs estiméesavoir quelle question on posemélanger test et intervalle
7bootstraprééchantillonner les pairesrééchantillonner par colonne ⇒ covariance perdue
8apparié ≠ randomiséconclure « B est meilleur parce que » : la comparaison ne dit pas pourquoi
9modèles fixés avant le tiragepas de sélectionB 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.