FichesCarte › Partie 01 · L'objet aléatoire (fil A) › chaîne 05

Le bootstrap — la distribution d'échantillonnage sans formule

Fil A. Médiane de dix latences, AUC, différence de F1 : aucune de ces quantités n'a de formule d'erreur-type. Une seule idée remplace la formule — l'échantillon est la meilleure image de la population qu'on ait, donc rééchantillonner l'échantillon avec remise imite le tirage du test set. Fil rouge : dix latences dont une à 410 ms, médiane observée 129,5 ms, rééchantillonnées mille fois.

Ce que cette chaîne suppose acquis
  • La distribution d'échantillonnage. L'histogramme qu'on obtiendrait en refaisant l'expérience — retirer un test set, recalculer la statistique — et qu'on n'observe jamais qu'en un point (p01-01, pas 3).
  • Le SE est son écart-type. Pas l'écart-type des données : la largeur de cet histogramme-là (p01-01, pas 5).
  • Le plug-in. Quand une formule contient l'inconnu, on y substitue ce qu'on a estimé (p01-01, pas 6). Le bootstrap est ce même geste appliqué non plus à un paramètre, mais à la loi entière.
  • Un intervalle est une procédure. Ses bornes sont aléatoires, la quantité visée ne l'est pas (p01-02).
  • Notation. T est la statistique, T = T(échantillon) sa valeur observée, T* sa valeur sur un rééchantillon. L'étoile marque le monde simulé.
Hypothèses posées
H1L'échantillon est un tirage iid de la population d'usage, et on le traite comme si c'était la population. Tout ce que le bootstrap saura de la population tient dans ces n lignes. H2La statistique est lisse : moyenne, médiane, proportion, AUC, F1. Changer une ligne du jeu ne la déplace que d'un peu. Un maximum, un quantile 99,9 % ne remplissent pas cette condition. H3B, le nombre de rééchantillons, est choisi ; n est subi. Monter B ne règle que le bruit de simulation, jamais la largeur réelle.

La chaîne

Le décor

Dix mesures de latence, une médiane à annoncer. On voudrait tirer mille test sets dans la population, calculer mille médianes et lire la dispersion. On n'a qu'un échantillon.

Pour une proportion, p01-01 comblait le manque par une formule : √(π(1−π)/n). Pour une médiane, une AUC, une différence de F1, cette formule n'existe pas — la statistique n'est pas une moyenne de quantités indépendantes.

« La médiane n'est pas une moyenne de termes indépendants, donc aucune formule ne donne son erreur-type, donc il faut fabriquer sa distribution d'échantillonnage autrement. »

Application — le fil rouge

Dix latences (ms), triées : 98, 117, 120, 122, 128, 131, 135, 140, 150, 410.

médiane = (128 + 131)/2 = 129,5 ms    moyenne = 155,1 ms
statistiquevaleurformule de SE ?
moyenne155,1 mss/√n = 90,67/√10 = 28,7 ms
médiane129,5 msaucune

La médiane est justement ce qu'on veut rapporter : la latence à 410 ms tire la moyenne de 25 ms vers le haut, la médiane l'ignore. Reste à lui donner une largeur.

L'idée : substituer l'échantillon à la population tronc

La population est inconnue. La meilleure image qu'on en ait est l'échantillon lui-même : n valeurs, chacune de poids 1/n. Le bootstrap y remplace la population par cette image, et rejoue la procédure à l'identique : tirer n éléments, recalculer la statistique.

tirer n éléments dans la population  ↝  tirer n éléments dans l'échantillon, avec remise

« La population est inconnue mais l'échantillon la représente, donc rééchantillonner l'échantillon avec remise imite le tirage dans la population, donc la dispersion des statistiques rééchantillonnées imite la distribution d'échantillonnage. »

Application — les deux mondes, ligne à ligne
monde réel (inaccessible)monde bootstrap
on tire dansla populationles 10 latences observées
un tirage10 lignes iid10 indices avec remise
on calculela médianela même médiane
on répèteimpossibleB = 1 000 fois
on obtientla distribution d'échantillonnageson image simulée

Une seule ligne de la colonne de gauche est remplacée — celle du haut. Tout le reste, y compris le code qui calcule la statistique, est recopié tel quel. C'est ce qui rend la recette indépendante de la statistique.

Le geste : B rééchantillons, un écart-type, deux quantiles

Répéter B fois : tirer n indices avec remise, recalculer la statistique. On obtient B valeurs T*1, …, T*B, dont on lit l'écart-type et les quantiles.

SEboot = écart-type des T*b     IC 95 % percentile = [q2,5 % ; q97,5 %]

Rien dans la recette ne dépend de la statistique : on change la fonction appelée, pas la formule. C'est le même code pour une médiane, une AUC ou un écart de F1.

« Chaque rééchantillon rend une valeur de la statistique, donc B rééchantillons en rendent B, donc leur écart-type estime le SE et leurs quantiles 2,5 % et 97,5 % bornent l'intervalle. »

Application — chiffres du fil rouge

Médiane, n = 10. En énumérant les 1010 rééchantillons possibles (donc sans aucune erreur de simulation) :

SEboot = 8,86 ms    IC 95 % = [119,5 ; 142,5] ms    IC 90 % = [120 ; 140] ms

Contrôle sur une statistique qui, elle, a une formule. Sur la même colonne, pour la moyenne :

SE de la moyennevaleur
formule s/√n28,67 ms
bootstrap27,20 ms

Les deux coïncident au facteur √((n−1)/n) = 0,9487 près : le bootstrap divise par n là où s divise par n−1. Écart structurel, connu, qui s'efface quand n grandit — pas une dérive de la méthode.

B n'est pas n. Passer de B = 1 000 à 100 000 ne rétrécit pas l'intervalle : il stabilise ses bornes. Seul n le rétrécit, en 1/√n comme en p01-01.

Figure 1 — mille médianes tirées de dix latences

Chaque tirage rééchantillonne vraiment les 10 latences avec remise et pose la médiane obtenue dans l'histogramme. Trait ambre pointillé : la médiane observée, 129,5 ms. Traits verts : les quantiles 2,5 % et 97,5 % des tirages effectués — l'intervalle percentile, qui se stabilise vers [119,5 ; 142,5] ms. Trait rouge : la moyenne des tirages, qui vient se poser sur la médiane observée et non sur la vraie médiane : le bootstrap donne une largeur, jamais un centre. Tire 50, puis 1 000 : l'écart-type affiché est le SE bootstrap, environ 8,9 ms, obtenu sans écrire une seule formule. L'histogramme est discret — une médiane de 10 valeurs ne peut prendre qu'un nombre fini de valeurs — et un rééchantillon sur 6 800 environ est dominé par la latence à 410 ms : il tombe alors hors du cadre, s'empile au bord droit, et fait sursauter le SE affiché.

Pourquoi avec remise tronc

Sans remise, tirer n éléments parmi n redonne exactement le même échantillon : toutes les statistiques rééchantillonnées sont égales, la dispersion est nulle. La remise est ce qui fait bouger quelque chose.

Avec remise, une ligne donnée peut être absente, tirée une fois, ou doublée. La probabilité qu'elle soit absente d'un rééchantillon vaut

(1 − 1/n)n  ⟶  e−1 = 0,368

« Tirer n éléments sans remise parmi n redonne le même échantillon, donc rien ne bouge, donc il faut la remise, donc chaque rééchantillon oublie environ 37 % des lignes et en double d'autres, et cette variation est précisément celle du tirage qu'on imite. »

Application — 37 %, et où on le recroise
n(1 − 1/n)nlignes absentes en moyenne
100,34873,49 sur 10 · 6,5 lignes distinctes
1000,366036,6 sur 100
1 0000,3677367,7 sur 1 000

La limite e−1 est atteinte dès n ≈ 100 ; à n = 10 on est encore à 34,9 %, et le raccourci « 37 % » y est déjà une approximation.

Le même 37 % que le OOB. Dans le bagging, chaque arbre est entraîné sur un rééchantillon bootstrap des lignes ; les ≈ 37 % de lignes qu'il n'a pas vues forment son out-of-bag et servent de jeu de test gratuit (p07-02). Deux endroits, un seul calcul : (1 − 1/n)n → e−1.

Figure 2 — ce qui change d'un rééchantillon à l'autre

En haut, les dix latences observées ; en bas, un rééchantillon avec remise, trié. Une case pointillée pâle est une ligne absente de ce tirage, une case violette une ligne tirée deux fois ou plus, et les deux cases ambre du bas sont celles dont la moyenne fait la médiane. Clique : l'échantillon de départ ne bouge jamais, seule la composition change — et avec elle la médiane. Le compteur « absentes en moyenne » converge vers 3,49, soit 10 × 0,910.

Comparer deux modèles : rééchantillonner les lignes

Pour un écart entre A et B, on rééchantillonne les lignes du test set, jamais les deux colonnes de scores séparément. Une ligne tirée emporte ses deux prédictions : on recalcule les deux scores sur les mêmes lignes et on garde la différence.

L'appariement devient automatique. La corrélation entre les deux mesures, qui vient du test set partagé, est conservée sans qu'on ait à l'estimer ni à écrire une covariance.

« Une ligne tirée emporte les deux prédictions, donc rééchantillonner les lignes conserve la corrélation des deux scores, donc l'écart-type des B différences est bien le SE de la différence appariée, donc aucune formule de covariance n'est nécessaire. »

Application — le fil rouge de p01-04

1 000 lignes, A à 87,2 %, B à 88,1 %, b = 30 lignes où A seul a juste, c = 39 où B seul a juste. 4 000 rééchantillons de lignes :

SE de l'écart D = 0,009valeurIC 95 %
bootstrap sur les lignes0,0082[−0,008 ; 0,025]
formule appariée √((b+c)/nD²)/√n0,0083[−0,007 ; 0,025]
deux colonnes tirées séparément0,01471,8× trop large

Le bootstrap retrouve la formule appariée à 1 % près, et la conclusion de McNemar — l'intervalle couvre 0 — sans écrire (cb)²/(b+c). Casser l'appariement gonfle le SE de 77 % : on jette exactement l'information qui sert à départager (p01-04, pas 5 ; déroulé D2).

L'intérêt réel arrive quand la métrique n'est pas une moyenne — F1, AUC, taux de préférence jugé par un LLM : là il n'y a pas de formule appariée du tout, et la recette ne change pas d'une ligne.

Où ça casse casse

Le bootstrap copie une procédure ; il ne crée pas d'information. Ce que l'échantillon ignore de la population, l'image qu'on en tire l'ignore aussi.

« Le bootstrap rejoue le tirage à partir de l'échantillon, donc il hérite de tout ce que l'échantillon ignore, donc il mesure une largeur et ne corrige jamais un centre. »

Quatre limites
  • Lignes dépendantes. Tirer les lignes une par une suppose H1. Vingt lignes d'un même utilisateur, les images d'une même vidéo, les points voisins d'une série : le tirage ligne à ligne casse les blocs, fabrique une variabilité que le vrai tirage n'a pas, et sous-estime le SE. Remède : tirer des groupes ou des blocs entiers — bootstrap par cluster, par bloc (pont 04).
  • Statistiques d'extrême. H2 tombe. Un rééchantillon ne contient que des valeurs déjà vues, donc le maximum bootstrap ne dépasse jamais le maximum observé : sur nos dix latences il vaut 410 dans 65 % des cas et s'effondre sous 150 dans les autres. Sa distribution n'est pas l'image de la vraie, c'est un tas collé au bord. Même chose pour un quantile 99,9 %.
  • n minuscule. Tout repose sur « l'échantillon représente la population ». À n = 10 dont une valeur à 410 ms, l'image est grossière ; le bootstrap la recopie fidèlement, défauts compris. Le 8,86 ms est le SE du monde où la population vaut exactement ces dix valeurs.
  • Ce n'est pas plus de données. Le bootstrap mesure une largeur ; il ne réduit ni le biais ni la variance réelle. Test set filtré ou décalé : un intervalle étroit autour de la mauvaise valeur. Test set déjà utilisé pour choisir le modèle : il tourne autour d'un score gonflé (p01-04, pas 6).

Résumé

À retenir
  1. Pas de formule de SE ⇒ imiter la procédure : rééchantillonner l'échantillon avec remise, n éléments, B fois.
  2. SEboot = écart-type des B valeurs ; IC percentile = quantiles 2,5 % et 97,5 %. Fil rouge : 8,86 ms, [119,5 ; 142,5].
  3. Avec remise = la variabilité : (1 − 1/n)n → e−1, ≈ 37 % de lignes absentes par tirage — le 37 % du OOB.
  4. Comparer deux modèles : rééchantillonner les lignes, garder la différence. L'appariement est automatique.
  5. Casse : dépendance, extrêmes, n minuscule. Et B ne remplace pas n : le bootstrap mesure une largeur, il ne réduit pas un biais.
« Quand je n'ai pas de formule pour l'erreur-type, je rééchantillonne mon test set avec remise et je recalcule la métrique un millier de fois : la dispersion obtenue imite la distribution d'échantillonnage, son écart-type est le SE et ses quantiles 2,5 % et 97,5 % l'intervalle. Pour comparer deux modèles je rééchantillonne les lignes et je garde la différence, ce qui apparie automatiquement. Cela mesure une largeur : ni le biais, ni la dépendance entre lignes ne s'y corrigent. »

Chaîne verbalisée — une prise, à voix haute

5 maillons · clique pour révéler après avoir dit
  1. Que veut-on, et qu'a-t-on ?
    La dispersion de la statistique sur des tirages répétés de la population ; on ne dispose que d'un seul échantillon, et d'aucune formule pour une médiane.
  2. Que fait le bootstrap, et pourquoi est-ce légitime ?
    Il rééchantillonne l'échantillon avec remise, n éléments, B fois, et recalcule la statistique. Légitime sous H1 : l'échantillon est la meilleure image de la population, donc y tirer imite tirer dans la population.
  3. Pourquoi avec remise ?
    Sans remise on retrouve le même échantillon et rien ne bouge. Avec remise, chaque tirage oublie (1 − 1/n)n → 37 % des lignes et en double d'autres : c'est la variabilité cherchée, et c'est le même 37 % que l'OOB du bagging.
  4. Comment comparer deux modèles ?
    Rééchantillonner les lignes, pas les colonnes : chaque ligne emporte ses deux prédictions, on recalcule les deux scores dessus et on garde la différence. Appariement automatique ; casser l'appariement élargit le SE de 77 % sur le fil rouge.
  5. Quand ne pas lui faire confiance ?
    Lignes dépendantes (tirer par blocs, sinon SE sous-estimé), statistiques d'extrême (rien au-delà des valeurs vues), n minuscule (il hérite d'un échantillon non représentatif). Et il ne corrige aucun biais.