Leçon 1 sur 8
Unité · Ce que qualité veut dire ici
Cinq dimensions, cinq mesures
« Les données sont mauvaises » n'est pas un constat. Exactitude, complétude, actualité, cohérence et intégrité — chacune avec un nombre, calculée sur la même extraction, et un tableau de bord qui résiste à la contestation.
La phrase qu’il faut cesser de dire
« La qualité des données est mauvaise. » Tout le monde acquiesce, rien ne se passe, et la même phrase revient au trimestre suivant.
Elle échoue parce qu’elle est inexploitable de trois façons distinctes. Elle ne dit pas quelle qualité — un rapport tardif et un rapport fabriqué sont deux problèmes aux remèdes différents. Elle ne dit pas combien — mauvaise partout ou mauvaise dans quatre formations sanitaires. Et elle ne dit pas et alors — si le défaut est assez grand pour changer le chiffre sur lequel quelqu’un va agir.
Les cinq dimensions existent pour corriger les trois d’un coup. Ce n’est pas un cadre à réciter, ce sont cinq questions dont la réponse est un nombre.
Les cinq, et la mesure de chacune
| Dimension | La question | La mesure |
|---|---|---|
| Complétude | Tout le monde a-t-il rapporté, et sur tout ? | Taux de rapportage ; taux de valeurs manquantes par champ |
| Actualité | Le rapport est-il arrivé à temps pour servir ? | Part transmise avant l’échéance ; retard médian en jours |
| Exactitude | Le chiffre remonté correspond-il à la source ? | Facteur de vérification — recomptage sur rapporté |
| Cohérence | Les nombres s’accordent-ils entre eux et avec le mois dernier ? | Taux d’échec des règles internes ; taux d’aberrations |
| Intégrité | La valeur vient-elle d’une mesure ou d’autre chose ? | Préférence de chiffres ; attraction ; séries anormalement stables |
Deux points de ce tableau méritent discussion, car les deux reviennent toujours.
L’exactitude est la seule qui exige le document source. Les quatre autres se calculent sur l’extraction que vous avez déjà, à votre bureau, cet après-midi. Cette asymétrie commande toute la conception d’une évaluation — les quatre dimensions de bureau servent à décider où dépenser la cinquième, la coûteuse.
L’intégrité n’est pas une accusation. Elle mesure si les nombres ressemblent à des mesures. Une distribution d’âges attirée par les valeurs rondes signifie généralement que personne n’a demandé d’acte de naissance, non que quelqu’un a inventé quoi que ce soit, et la leçon qui lui est consacrée passe l’essentiel de son temps sur cette distinction.
Calculez les cinq sur une seule extraction
Prenez l’extraction vaccinale de routine — 38 formations sanitaires, douze mois, six antigènes.
import pandas as pd
vax = pd.read_csv("vaccination-coverage-2024.v1.csv", parse_dates=["period"])
vax["reported"] = vax["report_submitted"] == True
scorecard = {}
# Completeness
scorecard["reporting_rate"] = vax["reported"].mean()
scorecard["field_completeness"] = 1 - vax.isna().mean().mean()
# Consistency: doses cannot exceed the target population
rule_fail = (vax["doses_administered"] > vax["target_population"]).mean()
scorecard["rule_failure_rate"] = rule_fail
# Integrity: share of reported values ending in zero
reported = vax[vax["reported"]]
scorecard["round_number_share"] = (reported["doses_administered"] % 10 == 0).mean()
print(pd.Series(scorecard).round(3))
library(dplyr)
library(readr)
vax <- read_csv("vaccination-coverage-2024.v1.csv")
scorecard <- tibble::tibble(
reporting_rate = mean(vax$report_submitted),
field_completeness = 1 - mean(is.na(as.matrix(vax))),
rule_failure_rate = mean(vax$doses_administered > vax$target_population),
round_number_share = mean(
vax$doses_administered[vax$report_submitted] %% 10 == 0
)
)
round(scorecard, 3)
| Mesure | Valeur | À lire comme |
|---|---|---|
| Taux de rapportage | 76,5 % | 642 des 2 736 couples formation-mois ne portent aucun rapport |
| Complétude des champs | 100 % | aucune case vide — ce qui n’est pas la même chose qu’aucune donnée manquante |
| Taux d’échec des règles | 0 % | aucune formation ne rapporte plus de doses que sa population cible |
| Part de nombres ronds | 10,4 % | ce que produit le hasard ; rien à voir |
Lisez les lignes deux et un ensemble. La complétude des champs vaut 100 % et la complétude du rapportage 76,5 %, et seule la seconde compte. Chaque couple formation-mois sans rapport figure dans le fichier comme une ligne de zéros avec un indicateur, si bien qu’un décompte de cases vides déclare les données parfaites. C’est le défaut autour duquel tout le module tourne — un rapport manquant qui arrive sous forme de zéro.
Pondérez les dimensions par ce qu’elles coûtent
Un tableau de bord à cinq nombres égaux laisse entendre que les cinq comptent également. Ce n’est pas le cas, et laquelle prime dépend entièrement de l’usage des données.
- Pour un taux de couverture, la complétude domine. Un taux de rapportage de 76,5 % fait de tout total de district une borne inférieure, et aucune exactitude dans les rapports reçus n’y remédie.
- Pour une charge de cas servant à approvisionner, l’exactitude domine. Commander des aliments thérapeutiques sur une charge surestimée gaspille de l’argent ; sur une charge sous-estimée, des enfants n’en reçoivent pas.
- Pour un indicateur d’alerte précoce, l’actualité domine. Un rapport parfaitement exact arrivant six semaines après l’épidémie ne vaut rien.
Dites quelle dimension vous avez pondérée et pourquoi, dans le rapport. Un score composite qui cache sa pondération est le même défaut qu’un indicateur qui cache son dénominateur.
Ne réduisez pas à un seul nombre
Quelqu’un demandera un score unique sur 100. Résistez, et proposez le tableau de bord à la place, pour une raison précise — les cinq dimensions ont des remèdes différents, et le nombre unique ne dit rien sur celui à appliquer.
Un district à 82 % parce qu’il est en retard se corrige en déplaçant une échéance. Un district à 82 % parce qu’un tiers de ses formations ne rapportent jamais se corrige en cherchant pourquoi elles ont cessé. Les deux font 82. Un seul se corrige par un atelier de formation, et aucun ne se corrige par l’atelier que quelqu’un va proposer.
Si un composite est réellement exigé — certains modèles bailleurs l’imposent — publiez-le à côté de ses composantes, jamais à leur place.
scorecard_table = pd.DataFrame({
"dimension": ["Completeness", "Timeliness", "Accuracy", "Consistency", "Integrity"],
"measure": ["Reporting rate", "Submitted by deadline", "Verification factor",
"Rule failure rate", "Round-number share"],
"value": [0.765, None, None, 0.0, 0.104],
"source": ["extract", "submission log", "facility visit", "extract", "extract"],
})
print(scorecard_table)
scorecard_table <- tibble::tribble(
~dimension, ~measure, ~value, ~source,
"Completeness", "Reporting rate", 0.765, "extract",
"Timeliness", "Submitted by deadline", NA, "submission log",
"Accuracy", "Verification factor", NA, "facility visit",
"Consistency", "Rule failure rate", 0.000, "extract",
"Integrity", "Round-number share", 0.104, "extract"
)
C’est la colonne source qui est utile. Elle dit immédiatement quels nombres
vous pouvez produire aujourd’hui et lesquels exigent un déplacement, et c’est la
forme de tout plan d’évaluation.
La suite
Deux des cinq dimensions ne sont presque jamais rapportées, et toutes deux se calculent sur des données que vous détenez déjà. La leçon suivante les calcule correctement — complétude et promptitude du rapportage, chacune avec son propre dénominateur, et le piège consistant à diviser par les formations qui ont rapporté.