cassionAnalyse de données

Retour à la leçonLeçon 6 sur 8Repérer les sites qui méritent une visite

Ce que dit le dernier chiffre

Le même diaporama que les téléchargements, rendu sous forme de page. Lancez le diaporama pour le présenter en plein écran — les flèches ou un clic avancent d'une diapositive, Échap quitte.

Diapositives · PDFDiapositives · PowerPoint

  1. Diapositive 1 / 19

    Ce que couvre cette leçon

    • Les mesures ont une texture
    • Le contrôle
    • L'attraction des âges, et pourquoi ce n'est la faute de personne
    • Étalonnez sur ce que produit le hasard
    • Pourquoi le cas négatif compte davantage
    • Ce que vous avez le droit d'écrire
    • La suite
    Notes du présentateur
    Préférence de chiffres, attraction des valeurs rondes, et l'étalonnage qui sépare un constat du bruit. Les tailles d'une équipe se terminent par ,0 ou ,5 dans soixante-neuf pour cent des cas ; la formation la plus suspecte du district se révèle être du hasard.
  2. Diapositive 2 / 19

    Les mesures ont une texture

    • Un nombre produit par la lecture d'un instrument a une texture particulière — son dernier chiffre est quasi uniforme, car la valeur vraie a autant de chances de tomber n'importe où dans la plus petite division de l'échelle.
    Notes du présentateur
    Un nombre produit par la lecture d'un instrument a une texture particulière — son dernier chiffre est quasi uniforme, car la valeur vraie a autant de chances de tomber n'importe où dans la plus petite division de l'échelle. Un nombre produit par estimation, arrondi ou souvenir a une autre texture. Il se regroupe sur les cinq et les zéros, sur les années entières, sur les multiples de dix. Ce regroupement est la préférence de chiffres, et il se mesure sans se déplacer. C'est l'outil principal de la dimension d'intégrité, et cette leçon consacre autant de temps à ce qu'il ne peut pas montrer qu'à ce qu'il montre.
  3. Diapositive 3 / 19

    Le contrôle — En Python

    import pandas as pd
    
    smart = pd.read_csv("smart-nutrition-survey-2024.v1.csv")
    
    smart["terminal"] = (smart["height_cm"] * 10).round() % 10
    by_team = (
        smart.assign(rounded=smart["terminal"].isin([0, 5]))
        .groupby("team")
        .agg(rounded_share=("rounded", "mean"), n=("rounded", "size"))
    )
    print((by_team["rounded_share"] * 100).round(0))
  4. Diapositive 4 / 19

    Le contrôle — En R

    library(dplyr)
    
    smart |>
      mutate(terminal = round(height_cm * 10) %% 10,
             rounded = terminal %in% c(0, 5)) |>
      summarise(rounded_share = mean(rounded), n = n(), .by = team)
  5. Diapositive 5 / 19

    Le contrôle

    ÉquipeTailles finissant par ,0 ou ,5Enfants mesurés
    118 %217
    269 %248
    318 %248
    423 %217
  6. Diapositive 6 / 19

    Le contrôle

    • Ce n'est pas un résultat marginal et cela n'exige aucun test — Rien dans une population ne fait tomber les tailles des…
    Notes du présentateur
    Deux chiffres terminaux possibles sur dix font 20 % en l'absence de préférence. Les équipes 1, 3 et 4 sont à 18 %, 18 % et 23 % — ce à quoi ressemble une mesure. L'équipe 2 est à 69 %. Ce n'est pas un résultat marginal et cela n'exige aucun test. Rien dans une population ne fait tomber les tailles des enfants d'une équipe sur des demi-centimètres trois fois et demie plus souvent que celles de tout le monde. C'est la façon dont l'équipe a lu la toise — arrondir au demi-centimètre le plus proche au lieu de lire le millimètre.
  7. Diapositive 7 / 19

    L'attraction des âges, et pourquoi ce n'est la faute de personne — En Python

    ages = smart["age_months"].dropna()
    whole_years = (ages % 12 == 0).mean()
    
    print(f"{whole_years:.0%} of ages fall on an exact multiple of 12 months")
    print(ages.value_counts().reindex([22, 23, 24, 25, 26]))
    Notes du présentateur
    Le même phénomène sur les âges, où il est quasi universel dans ce secteur.
  8. Diapositive 8 / 19

    L'attraction des âges, et pourquoi ce n'est la faute de personne — En R

    smart |>
      filter(!is.na(age_months)) |>
      summarise(whole_years = mean(age_months %% 12 == 0))
    
    smart |> count(age_months) |> filter(age_months %in% 22:26)
  9. Diapositive 9 / 19

    L'attraction des âges, et pourquoi ce n'est la faute de personne

    Âge en mois2223242526
    Enfants2115661917
    Notes du présentateur
    Soixante-six enfants à exactement vingt-quatre mois contre quinze et dix-neuf de part et d'autre, et quatre-vingts à trente-six contre vingt-huit et dix-sept. Sur l'ensemble de l'enquête, 24 % des âges tombent sur une année entière exacte, contre environ 9 % attendus si les âges étaient répartis uniformément. Cela compte pour une raison précise et concrète, non par curiosité. Les normes de croissance de l'OMS changent de table de référence à 24 mois, et les groupes d'âge SMART sont bornés aux multiples de 12 mois — l'attraction dépose donc un gros paquet d'enfants exactement sur les bornes où la classification change. Et la cause n'est presque jamais la négligence. Les actes de naissance ne sont pas universels ; une accompagnante à qui l'on demande l'âge d'un enfant répondra « deux ans » ; un calendrier d'événements locaux aide mais a ses limites. Consignez-le comme un constat sur la méthode de détermination de l'âge, avec une action corrective portant sur les calendriers et le questionnement, non comme une erreur d'enquêteur.
  10. Diapositive 10 / 19

    Étalonnez sur ce que produit le hasard — En Python

    reported = vax[vax["reported"]].copy()
    base_rate = (reported["doses_administered"] % 10 == 0).mean()
    
    by_facility = (
        reported.assign(round_number=reported["doses_administered"] % 10 == 0)
        .groupby("facility_id")
        .agg(rounds=("round_number", "sum"), n=("round_number", "size"))
    )
    by_facility["share"] = by_facility["rounds"] / by_facility["n"]
    print(f"district base rate: {base_rate:.3f}")
    print(by_facility.nlargest(3, "share"))
    Notes du présentateur
    Vient maintenant ce qui sépare un contrôle exploitable d'une machine à accuser. Exécutez le contrôle des nombres ronds sur l'extraction vaccinale.
  11. Diapositive 11 / 19

    Étalonnez sur ce que produit le hasard — En R

    base_rate <- mean(vax$doses_administered[vax$report_submitted] %% 10 == 0)
    
    by_facility <- vax |>
      filter(report_submitted) |>
      summarise(rounds = sum(doses_administered %% 10 == 0), n = n(), .by = facility_id) |>
      mutate(share = rounds / n) |>
      arrange(desc(share))
  12. Diapositive 12 / 19

    Étalonnez sur ce que produit le hasard — En Python

    from scipy.stats import binomtest
    
    worst = by_facility.nlargest(1, "share").iloc[0]
    p = binomtest(int(worst["rounds"]), int(worst["n"]), base_rate,
                  alternative="greater").pvalue
    print(f"p = {p:.4f}, Bonferroni across 38 facilities: {min(1, p * 38):.3f}")
    Notes du présentateur
    Le taux de base du district est de 10,4 % — exactement l'attendu. La pire formation, FAC020, rapporte un nombre rond 14 fois sur 60, soit 23 %. Plus du double du taux du district. En soi cela ressemble à un constat. Testez-le.
  13. Diapositive 13 / 19

    Étalonnez sur ce que produit le hasard — En R

    worst <- by_facility[1, ]
    p <- binom.test(worst$rounds, worst$n, base_rate, alternative = "greater")$p.value
    c(p = p, bonferroni = min(1, p * 38))
  14. Diapositive 14 / 19

    Étalonnez sur ce que produit le hasard

    • p = 0,003 pris isolément, et 0,11 après correction pour avoir regardé trente-huit formations — Trois formations passent…
    Notes du présentateur
    p = 0,003 pris isolément, et 0,11 après correction pour avoir regardé trente-huit formations. Trois formations passent sous p = 0,05 sans correction, et 1,9 sont attendues par hasard. Trois contre 1,9, cela ne veut rien dire. Une seconde raison de laisser tomber. Les doses mensuelles de FAC020 vont de cinq à treize, si bien que « se termine par zéro » signifie presque toujours que la valeur était exactement dix. Sur des effectifs aussi petits, le contrôle n'a aucune puissance pour distinguer l'arrondi de l'arithmétique.
  15. Diapositive 15 / 19

    Étalonnez sur ce que produit le hasard

    Le résultat est : aucun indice de préférence de chiffres dans le rapportage vaccinal. C'est un vrai constat, il a pris quatre lignes, et c'est celui qu'il faut espérer.
  16. Diapositive 16 / 19

    Pourquoi le cas négatif compte davantage

    • Calculez le taux de base sur les données, pas sur la théorie. Les chiffres terminaux ne sont pas uniformes quand…
    • Corrigez du nombre d'unités examinées. Tester trente-huit formations à 5 % produit environ deux positifs sur des…
    • Exigez un mécanisme. Les 69 % de l'équipe 2 en ont un — l'équipe a lu la toise au demi-centimètre le plus proche.…
    Notes du présentateur
    Ce qui rend ce contrôle dangereux tient surtout à ce qu'on l'exécute presque toujours sur des données où rien ne cloche, avec l'espoir de trouver quelque chose. Trois règles qui le maintiennent honnête.
  17. Diapositive 17 / 19

    Ce que vous avez le droit d'écrire

    N'écrivez pasÉcrivez
    « Les données de FAC020 semblent fabriquées »« FAC020 rapporte des nombres ronds plus souvent que la moyenne du district ; l'écart n'est pas significatif après ajustement pour le nombre de formations examinées »
    « Les mesures de l'équipe 2 ne sont pas fiables »« Les tailles de l'équipe 2 se terminent par ,0 ou ,5 dans 69 % des cas contre 18 à 23 % pour les autres équipes, ce qui est compatible avec une lecture de la toise au demi-centimètre »
    « Les âges sont inexacts »« 24 % des âges tombent sur une année entière exacte contre 9 % attendus, ce qui indique que l'âge a été estimé plutôt que documenté pour une part substantielle des enfants »
    Notes du présentateur
    La formulation n'est pas une politesse ; elle décide de la suite. La colonne de droite dit ce qui a été observé, son ampleur, et le mécanisme avec lequel c'est compatible. Celle de gauche dit ce que quelqu'un a fait. Une seule des deux produit une action corrective, et une seule survit à sa présentation à l'équipe qu'elle décrit.
  18. Diapositive 18 / 19

    La suite

    • Vous avez maintenant des constats — un effondrement de complétude, un facteur de vérification de 1,42, une équipe qui arrondit ses tailles.
    Notes du présentateur
    Vous avez maintenant des constats — un effondrement de complétude, un facteur de vérification de 1,42, une équipe qui arrondit ses tailles. Aucun n'est encore une cause, et aucun n'est actionnable. La leçon suivante montre comment passer d'un défaut à ce qui l'a produit, et pourquoi « il faut former le personnel » est presque toujours la mauvaise réponse.
  19. Diapositive 19 / 19

    La suite

    Lire la leçon complète, avec le code exécutable Retour à la leçon