Leçon 1 sur 8
Unité · Le contrefactuel
Un gain de sept points qui était l'année scolaire
La littératie a monté de 7,0 points entre le passage initial et le final, et une demande de financement l'appelle l'effet de la cantine scolaire. Les écoles sans cantine ont monté de 7,6 points. Tout le gain, et un peu plus, appartient à l'année et non aux repas.
Une question, trois réponses
import pandas as pd
import numpy as np
assessment = pd.read_csv("learning-assessment-2024.v1.csv")
assessment["pct"] = assessment["raw_score"] / assessment["items"]
literacy = (assessment[assessment["domain"] == "literacy"]
.pivot_table(index="student_id", columns="assessment_round",
values="pct").dropna())
roster = pd.read_csv("school-roster-2024.v1.csv").drop_duplicates(
"student_id", keep="last")
d = literacy.join(roster.set_index("student_id"), how="inner")
print(d.groupby("feeding_programme")[["baseline", "endline"]].mean().round(4))
print(f"overall gain: {(d['endline'] - d['baseline']).mean():+.4f}")
library(dplyr)
d |> summarise(baseline = mean(baseline), endline = mean(endline),
.by = feeding_programme)
| Initial | Final | Gain | n | |
|---|---|---|---|---|
| Avec cantine | 57,75 % | 64,41 % | +6,66 pts | 398 |
| Sans cantine | 54,67 % | 62,29 % | +7,62 pts | 187 |
| Tous les élèves | 56,76 % | 63,73 % | +6,97 pts | 585 |
Trois affirmations peuvent se bâtir sur ce tableau et deux sont fausses.
« Le programme a produit un gain de 7,0 points. » Avant-après, apparié, IC à 95 % +6,1 à +7,9, t = 15,2. Tranché, reproductible, et cela attribue aux repas une année de scolarité dont chaque enfant a bénéficié.
« Les écoles avec cantine ont 2,1 points d’avance. » Coupe transversale finale, IC à 95 % −1,2 à +5,4. Cela compare deux groupes qui étaient distants de 3,1 points avant même que le programme soit mesuré.
« Le gain a été inférieur de 0,96 point dans les écoles avec cantine. » Chaque groupe contre son propre point de départ, IC à 95 % −3,5 à +1,6 une fois les 24 écoles prises en compte. C’est celle qui tente de répondre à la question, et sa réponse est qu’il n’y a rien ici.
Le contrefactuel, énoncé en une phrase
Toute affirmation d’impact a une seconde moitié cachée.
La littératie dans les écoles avec cantine a monté de 6,66 points par rapport à ce qui se serait passé sans le programme.
Cette seconde proposition est le contrefactuel, et il n’est jamais observé. Les mêmes enfants, la même année, sans repas, n’est pas une chose que contient un jeu de données ; une évaluation est donc toujours une argumentation sur ce qu’il faut y substituer.
| Affirmation | Contrefactuel supposé | Est-ce plausible ? |
|---|---|---|
| Avant-après | Les mêmes enfants n’auraient pas changé du tout | Non — une année scolaire a eu lieu |
| Coupe transversale finale | Les deux groupes auraient été identiques | Non — ils différaient de 3,1 points au départ |
| Différences de différences | Les deux groupes auraient changé d’autant | Discutable, et la leçon 3 est cette discussion |
Nommer le contrefactuel est toute la méthode. Une fois écrit, l’affirmation avant-après s’effondre sans la moindre statistique : elle suppose que les enfants n’apprennent rien dans une année passée à l’école.
Pourquoi le nombre avant-après est si convaincant
Il est précis, il est grand, et il est facile à calculer — trois propriétés qui n’ont rien à voir avec le fait d’être juste.
gain = d["endline"] - d["baseline"]
se = gain.std(ddof=1) / np.sqrt(len(gain))
print(f"{gain.mean():+.4f} 95% CI [{gain.mean() - 1.96*se:+.4f},"
f" {gain.mean() + 1.96*se:+.4f}] t = {gain.mean()/se:.1f}")
t.test(d$endline - d$baseline)
t = 15,2. Toutes les barrières du cours de statistiques passent. L’intervalle est étroit, la taille d’effet est grande, l’échantillon suffit, et la valeur p est très loin sous n’importe quel seuil.
Aucune de ces vérifications ne peut détecter un groupe de comparaison manquant, et c’est ce qu’il faut emporter de cette leçon. La rigueur statistique appliquée au mauvais contrefactuel produit une réponse fausse et assurée, et c’est l’assurance qui la fait entrer dans une demande de financement.
Trois choses que contient une évolution avant-après
Chaque fois que vous en voyez une, c’est une somme, et seul le dernier terme est le programme.
Le passage du temps. Les enfants grandissent et sont enseignés. Les prix montent. Les points d’eau vieillissent. Ici, c’est la totalité des 7 points.
La régression vers la moyenne. Ceux qui ont été sélectionnés parce qu’ils étaient les plus mal lotis paraîtront mieux au passage suivant même si rien n’a été fait, parce qu’une part de « le plus mal loti » était du bruit de mesure. Le PB à l’admission du cours de nutrition en est l’exemple type.
Tout le reste de ce qui est arrivé. Une sécheresse, un mouvement de change, le programme d’une autre agence dans le même district, un changement dans la façon dont l’indicateur est enregistré.
by_school = d.groupby(["school_id", "feeding_programme"])[
["baseline", "endline"]].mean()
by_school["gain"] = by_school["endline"] - by_school["baseline"]
print(by_school.groupby("feeding_programme")["gain"].describe()[
["mean", "min", "max"]].round(4))
by_school |> summarise(mean = mean(gain), min = min(gain), max = max(gain),
.by = feeding_programme)
Chacune des 24 écoles a progressé, de +1,2 point à +12,2. Un programme qui n’aurait rien fait du tout aurait produit un tableau de nombres positifs.
Quand une comparaison avant-après est légitime
Elle n’est pas toujours fausse, et il vaut la peine d’être précis sur les cas où elle tient.
Quand le contrefactuel est réellement plat et que vous pouvez le montrer. Trois passages ou plus avant le programme sans tendance constituent un argument ; un seul point de départ non.
Quand le résultat ne peut pas changer tout seul. Une latrine ne se construit pas elle-même. Un point d’eau ne devient pas chloré sans que quelqu’un le fasse. La couverture d’une chose que seul votre programme fournit a un contrefactuel nul défendable.
Quand vous faites du suivi, non de l’évaluation. « La présence est passée de 84 % à 88 % » est une affirmation vraie sur le monde et utile à suivre. Elle devient une affirmation sur le programme quand quelqu’un écrit « grâce à ».
La formule à surveiller est « grâce à ». C’est là qu’un nombre de suivi devient une affirmation d’impact, et elle est généralement ajoutée par quelqu’un qui n’était pas dans l’analyse.
Rapportez-le en entier
Literacy outcomes, baseline to endline 2024
All students 56.8% to 63.7% +6.97 points 95% CI +6.1 to +7.9
With feeding 57.8% to 64.4% +6.66 points
Without feeding 54.7% to 62.3% +7.62 points
The overall change is reported as a monitoring result and is not
attributed to the feeding programme. Schools without the programme gained
slightly more, so the difference-in-differences estimate of the programme
effect is -0.96 points (95% CI -3.5 to +1.6, clustered on 24 schools).
The before-after change assumes children would have learned nothing over
a school year. That counterfactual is not defensible here and the
comparison group is what replaces it.
Le dernier paragraphe fait trois lignes et c’est la différence entre un rapport de suivi et une affirmation d’impact. Écrire le contrefactuel est ce qui force le choix, et un rapport qui n’en écrit jamais a fait le choix par défaut.
La suite
L’estimation en différences de différences ci-dessus repose sur le fait que les deux groupes d’écoles sont comparables sur ce qui compte. La leçon suivante teste cela directement, sur les quinze et les neuf, et trouve une différence standardisée huit fois plus grande que ce que tolérerait un essai randomisé.