cassionAnalyse de données

Leçon 3 sur 8

Unité · La fiche de référence

La fiche de référence, champ par champ

Une page par indicateur, treize champs, et un test qui dit quand elle est finie — remettez-la à un second analyste et voyez s'il obtient votre chiffre sans poser de question.

PythonR90 minGestion axée sur les résultats (GAR)Cadre logiqueDéfinitions d'indicateurs de l'UNICEF

Le test que la fiche doit passer

Une fiche de référence d’indicateur est finie quand un analyste compétent qui ne vous a jamais rencontré peut calculer votre chiffre à partir d’elle, sur les données brutes, sans vous poser de question.

C’est le seul test qui vaille, et il est impitoyable. Presque toutes les fiches en circulation y échouent aux trois mêmes endroits — la source du dénominateur est nommée mais pas spécifiée, les exclusions ne sont pas listées, et personne n’a écrit quoi faire quand une unité de rapportage reste silencieuse.

Les champs

Champ Ce qu’il contient
Nom Y compris l’unité de mesure
Définition Une phrase lisible par un non-analyste
Numérateur La condition exacte, en mots
Dénominateur La population exacte, et sa provenance
Exclusions Ce qui est délibérément écarté, et pourquoi
Unité de mesure Pourcentage, décompte, pour 1 000, litres par personne et par jour
Sens Plus haut est mieux, plus bas est mieux, ou ni l’un ni l’autre
Désagrégation Les découpages rapportés, et l’effectif minimal par cellule
Fréquence À quelle cadence il est calculé, et le délai de rapportage
Source Système, table, champ. Pas « les registres du programme »
Méthode de calcul Assez pour que l’arithmétique soit sans ambiguïté
Décision éclairée Ce qui change selon la valeur
Limites connues Ce que le chiffre ne peut pas soutenir

Treize champs, la plupart d’une ligne. Une fiche prend vingt minutes et ne se réécrit jamais.

Exemple travaillé — couverture penta3

Name              penta3_coverage_percent_monthly
Definition        The share of the target infant population that received a third
                  dose of pentavalent vaccine in the month.
Numerator         Third doses of pentavalent vaccine administered, as reported by
                  facilities that submitted a monthly report for that month.
Denominator       Surviving infants in the catchment, from the MoH population
                  estimates 2024, projected from the 2015 census at 2.4% annual
                  growth, summed across facilities that reported.
Exclusions        Facility-months with report_submitted = false are excluded from
                  both numerator and denominator. Doses given to children outside
                  the catchment are not separable and remain in the numerator.
Unit              Percent
Direction         Higher is better
Disaggregation    Month, facility type, district. Minimum cell 30 in denominator.
Frequency         Monthly, reported 6 weeks after month end
Source            DHIS2 data element PENTA3_DOSES, org unit level 4, monthly
Computation       100 * sum(doses) / sum(target_population), over reporting
                  facility-months only. Not the mean of facility-level rates.
Decision          Whether a district is prioritised for outreach in the next
                  quarterly microplan.
Limitations       Reporting completeness was 76.5% in 2024 and fell to 29% in
                  August; the figure is a lower bound in any month where
                  completeness is below 90%. Catchments overlap, so facility-level
                  values are unreliable; use district level or above.

Lisez ensemble les lignes d’exclusions et de calcul, car c’est là que le test des deux analystes échoue le plus souvent.

« Sur les seuls couples formation-mois ayant rapporté. Non la moyenne des taux par formation. » Ces deux phrases tranchent un écart de plusieurs points et aucune n’est impliquée par la définition. Un rapport de sommes et une moyenne de rapports sont deux nombres différents, et les deux sont des lectures raisonnables de « couverture ».

Le champ que tout le monde omet

Décision éclairée manque à la plupart des modèles en usage, et c’est le champ qui travaille le plus.

Le remplir a trois effets, tous trois inconfortables de façon utile.

  • Il révèle les indicateurs qui n’éclairent rien. Certains restent exigés — un bailleur les demande — et c’est une réponse légitime. Écrivez « exigence de rapportage bailleur, aucune décision opérationnelle » et cessez d’y consacrer de l’effort analytique.
  • Il révèle les indicateurs qui éclairent deux décisions. Une couverture servant à la fois à prioriser des sorties de proximité et à déclencher une commande d’intrants exige deux définitions, sinon l’une des deux décisions se prend sur le mauvais chiffre.
  • Il fixe la précision nécessaire. Un indicateur qui priorise un district doit avoir raison sur le classement. Un indicateur qui déclenche une commande doit avoir raison sur le niveau. Ce sont deux exigences différentes et elles ne coûtent pas la même chose.

Gardez-la à côté du code

Une fiche de référence dans un fichier Word au fond d’une boîte mail est une fiche qui dérive. Stockez-la comme donnée à côté du script qui calcule l’indicateur.

import json
from pathlib import Path

sheet = json.loads(Path("indicators/penta3_coverage.json").read_text())

assert sheet["denominator_source"], "denominator source is required"
assert sheet["decision_informed"], "an indicator with no decision needs saying so"

numerator = vax.loc[vax["reported"] & (vax["antigen"] == "penta3"),
                    "doses_administered"].sum()
denominator = vax.loc[vax["reported"] & (vax["antigen"] == "penta3"),
                      "target_population"].sum()

print(f"{sheet['name']}: {100 * numerator / denominator:.1f}")
sheet <- jsonlite::read_json(here::here("indicators", "penta3_coverage.json"),
                             simplifyVector = TRUE)

stopifnot(nzchar(sheet$denominator_source), nzchar(sheet$decision_informed))

vax |>
  filter(report_submitted, antigen == "penta3") |>
  summarise(value = 100 * sum(doses_administered) / sum(target_population))

Deux gains. Les assertions font échouer l’exécution quand une fiche est incomplète, ce qui est le geste que fait le schéma de contenu de cette plateforme. Et la fiche voyage avec le résultat, si bien qu’un tableau et ses définitions circulent ensemble — l’habitude introduite par le cours de fondamentaux avec un definitions.csv à côté de chaque sortie.

Écrivez les exclusions en code, pas en prose

Le champ des exclusions est celui qui a le plus de chances d’être vrai dans le document et faux dans le script. Comblez l’écart en produisant l’un à partir de l’autre.

EXCLUSIONS = [
    ("non-reporting facility-months", lambda d: ~d["reported"]),
    ("other antigens", lambda d: d["antigen"] != "penta3"),
]

remaining = vax.copy()
for label, rule in EXCLUSIONS:
    dropped = rule(remaining).sum()
    remaining = remaining[~rule(remaining)]
    print(f"excluded {dropped:>5} rows: {label}")
print(f"{len(remaining)} rows in the indicator")
EXCLUSIONS <- list(
  "non-reporting facility-months" = function(d) !d$report_submitted,
  "other antigens"                = function(d) d$antigen != "penta3"
)

remaining <- vax
for (label in names(EXCLUSIONS)) {
  rule <- EXCLUSIONS[[label]]
  cat(sprintf("excluded %5d rows: %s\n", sum(rule(remaining)), label))
  remaining <- remaining[!rule(remaining), ]
}

L’affichage produit est le champ des exclusions, avec ses comptes. Collez-le dans la fiche et les deux ne peuvent plus diverger.

Versionnez-la

Une définition d’indicateur change. Quand elle change, la série se casse, et la cassure doit être visible.

version   2.1
changed   2026-07-28
change    Denominator restricted to reporting facilities. Previously all
          facilities, with non-reporters counted at their target population,
          which understated coverage by about 23% in August 2024.
effect    Series revised from 2024-01. Values before v2.1 are not comparable.

N’améliorez jamais une définition en silence. Un taux de couverture qui monte de huit points parce que la définition a changé, présenté dans le même graphique que les trimestres précédents, est le constat faux le plus convaincant qu’un système de suivi-évaluation puisse produire.

Le test des deux analystes, en pratique

Une fois par trimestre, prenez un indicateur, remettez la fiche et l’extraction brute à un collègue qui ne l’a pas écrite, et comparez. Cela prend une heure et trouve des choses qu’aucune relecture du document ne trouve.

Ce qu’il fait typiquement remonter.

  • Le collègue a pris le mois calendaire ; vous aviez pris le mois de rapportage.
  • Le collègue a calculé une moyenne de taux par formation ; vous un rapport de sommes.
  • Le collègue a inclus l’hôpital de district ; votre extraction l’excluait à cause d’un filtre de niveau d’unité d’organisation que personne n’a documenté.

Chacun de ces cas est une fiche à laquelle il manquait une ligne. Le but de l’exercice est de trouver la ligne, pas de savoir qui avait raison.

La suite

Le champ qui engendre plus de désaccords que les douze autres réunis est le dénominateur. La leçon suivante lui est entièrement consacrée — le choisir, le défendre, et dire honnêtement ce qu’il exclut.

Animer cette leçon

La leçon en diaporama, la prose étant reléguée dans les notes du présentateur plutôt que projetée. Produit à partir de cette page, dont il ne peut donc pas s'écarter.

Lancer le diaporamaLire les diapositives

Le PDF ne requiert aucun logiciel et se projette depuis n'importe quel poste. Le fichier PowerPoint est fait pour être modifié : appliquez la charte de votre organisation, retirez une section pour une séance plus courte, ou fusionnez deux leçons en atelier.