Leçon 1 sur 8
Unité · L'échantillon n'est pas la population
La moyenne de votre échantillon n'est la moyenne de rien
32,8 % contre 29,1 % sur les mêmes 996 entretiens, et 62,8 % contre 69,8 % sur les mêmes ménages. L'écart, c'est le plan de sondage, et ce n'est pas du bruit.
Deux nombres tirés d’un seul fichier
Prenez l’enquête ménage, comptez les ménages classés en insécurité alimentaire, divisez par le nombre de ménages. Cela fait 32,8 %.
Pondérez maintenant chaque ménage par le nombre de ménages qu’il représente dans la population, et le même fichier donne 29,1 %.
import pandas as pd
survey = pd.read_csv("household-survey-2025.v1.csv")
frame = pd.read_csv("household-survey-frame-2025.v1.csv")
unweighted = (survey["food_insecure"] == "true").mean()
print(f"unweighted: {unweighted:.1%}")
library(dplyr)
library(readr)
survey <- read_csv("household-survey-2025.v1.csv")
frame <- read_csv("household-survey-frame-2025.v1.csv")
mean(survey$food_insecure == "true")
Les deux nombres sont calculés correctement. L’un est une estimation de la population et l’autre une description de qui a été interrogé, et un seul des deux est ce que le rapport prétend rapporter.
D’où vient l’écart
Rien à voir avec l’arithmétique. Tout à voir avec la façon dont l’échantillon a été tiré.
| Strate | Ménages dans la base | Zones tirées | Ménages enquêtés | Insécurité alimentaire |
|---|---|---|---|---|
| Urbain | 21 270 | 25 | 316 | 14,6 % |
| Rural accessible | 28 958 | 25 | 337 | 36,2 % |
| Rural reculé | 6 200 | 25 | 343 | 46,4 % |
Lisez ensemble la première et la dernière colonne. Le rural reculé représente 11 % de la population et 34 % de l’échantillon, et c’est de loin la strate la plus touchée.
Une moyenne non pondérée des trois lignes surreprésente donc d’un facteur trois la strate la plus en difficulté. Les 32,8 % ne sont pas l’insécurité alimentaire du district ; c’est celle d’une population dont un tiers des ménages sont ruraux reculés, et cette population n’existe pas.
by_stratum = (
survey.assign(insecure=survey["food_insecure"] == "true")
.groupby("stratum")
.agg(interviews=("insecure", "size"), rate=("insecure", "mean"))
)
frame_totals = frame.groupby("stratum")["households"].sum()
comparison = by_stratum.join(frame_totals.rename("frame_households"))
comparison["sample_share"] = comparison["interviews"] / comparison["interviews"].sum()
comparison["population_share"] = (
comparison["frame_households"] / comparison["frame_households"].sum()
)
print(comparison.round(3))
survey |>
summarise(interviews = n(), rate = mean(food_insecure == "true"), .by = stratum) |>
left_join(summarise(frame, frame_households = sum(households), .by = stratum),
by = "stratum") |>
mutate(sample_share = interviews / sum(interviews),
population_share = frame_households / sum(frame_households))
| Strate | Part de l’échantillon | Part de la population |
|---|---|---|
| Urbain | 31,7 % | 37,7 % |
| Rural accessible | 33,8 % | 51,3 % |
| Rural reculé | 34,4 % | 11,0 % |
Lorsque ces deux colonnes diffèrent, une estimation non pondérée est biaisée, et l’ampleur comme le sens du biais se déduisent entièrement du tableau.
Pourquoi concevoir le plan ainsi
La réaction immédiate est que l’échantillon a été mal tiré. Ce n’est pas le cas, et comprendre pourquoi fait l’essentiel de cette leçon.
Une allocation égale entre strates inégales est un choix délibéré et classique, et il achète quelque chose de précis — une estimation exploitable pour chaque strate séparément. Le rural reculé compte 11 % des ménages, si bien qu’un échantillon proportionnel à la population y aurait mis environ 110 entretiens : assez pour un chiffre national, très loin d’assez pour dire quoi que ce soit de la strate elle-même.
L’arbitrage est explicite.
- L’allocation proportionnelle donne la meilleure estimation nationale et des estimations infranationales faibles.
- L’allocation égale donne des estimations infranationales comparables et exige une pondération pour tout chiffre national.
Les EDS, les MICS et la plupart des évaluations humanitaires choisissent la seconde, car l’objet même de l’enquête est en général de comparer des lieux. Les pondérations ne corrigent pas une erreur. Elles sont le prix du plan.
Les estimations par strate n’ont pas besoin de pondérations
Le plan a une conséquence utile qu’il vaut la peine de voir tôt.
print(by_stratum["rate"].round(3))
survey |> summarise(rate = mean(food_insecure == "true"), .by = stratum)
À l’intérieur d’une strate, ce plan est autopondéré — chaque ménage avait la même probabilité de sélection — si bien que le taux non pondéré de la strate est déjà l’estimation. Les pondérations n’interviennent qu’au moment de combiner les strates.
C’est pourquoi un rapport peut légitimement présenter des chiffres non pondérés par strate à côté d’un total pondéré, et pourquoi le faire sans préciser lequel est lequel égare tout le monde.
Le sens n’est pas toujours le même
L’insécurité alimentaire baisse quand on pondère. L’accès à une source améliorée monte, et davantage.
for outcome in ["food_insecure", "improved_water_source"]:
print(f"{outcome:24} unweighted {(survey[outcome] == 'true').mean():.1%}")
survey |>
summarise(across(c(food_insecure, improved_water_source), ~ mean(.x == "true")))
| Résultat | Non pondéré | Pondéré |
|---|---|---|
| Insécurité alimentaire | 32,8 % | 29,1 % |
| Source d’eau améliorée | 62,8 % | 69,8 % |
Sept points sur le second. Il n’existe aucune règle générale voulant que les estimations non pondérées soient trop hautes ou trop basses : le biais va dans le sens où la strate suréchantillonnée diffère, et il diffère d’une ampleur différente pour chaque résultat.
On ne peut donc pas corriger un chiffre non pondéré à vue de nez, et un rapport qui en présente un avec la mention « non pondéré, le vrai chiffre est donc un peu plus bas » devine.
Que faire lorsqu’il n’y a pas de base de sondage
Il arrive d’hériter d’un jeu de données sans base et sans pondérations. Trois positions honnêtes, et aucune ne consiste à rapporter la moyenne non pondérée comme une estimation.
- Rapporter par strate seulement, si les strates sont enregistrées. Les chiffres infranationaux sont d’ailleurs souvent ce que le public voulait.
- Reconstituer des pondérations approximatives à partir d’une source de population externe, en documentant qu’elles sont approximatives.
- Dire que l’enquête ne permet pas d’estimation de population. C’est une vraie réponse, meilleure qu’un nombre qui sera cité pendant trois ans.
La suite
Les pondérations sont calculables, à partir de la base que ce jeu de données livre. La leçon suivante les construit depuis le début — probabilité de sélection à chaque degré, pondération de base, ajustement pour non-réponse — puis les prouve, en vérifiant qu’elles totalisent le nombre de ménages que la base déclare.