cassionAnalyse de données

Retour à la leçonLeçon 1 sur 8Ce qu'il ne faut pas collecter

Les colonnes qui n'y sont pas

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 / 22

    Ce que couvre cette leçon

    • Commencez par le schéma, non par les données
    • Le principe, énoncé comme une règle sur des colonnes
    • Ce que coûte le grossissement, mesuré
    • Celle qui est une vraie perte
    • Les 62 tranches d'âge vides
    • Ce qu'il faut écrire dans la note méthodologique
    • La suite
    Notes du présentateur
    Ce jeu de données a quatorze colonnes et aucun nom, aucune coordonnée, aucun texte libre, aucune date d'incident, aucune localisation sous le district et aucun détail sur l'auteur. Chacune de ces absences est une décision, et chacune se justifie par ce dont l'analyse a besoin.
  2. Diapositive 2 / 22

    Commencez par le schéma, non par les données — En Python

    import pandas as pd
    
    referrals = pd.read_csv("protection-referrals-2024.v1.csv")
    print(referrals.columns.tolist())
    print(f"{len(referrals):,} cases, {len(referrals.columns)} columns")
  3. Diapositive 3 / 22

    Commencez par le schéma, non par les données — En R

    library(dplyr)
    
    referrals |> glimpse()
  4. Diapositive 4 / 22

    Commencez par le schéma, non par les données

    AbsentPourquoi
    Nom, coordonnéesNe sortent jamais du système de gestion de cas, en aucune circonstance
    Récit en texte libreIdentifiant par construction, et aucune analyse ne le lit
    Date de l'incidentJointe à une zone et à une catégorie, fréquemment identifiante
    Localisation sous l'admin2Un village plus une catégorie, c'est une personne
    Âge exactLa tranche d'âge répond à toutes les questions de désagrégation que l'âge peut traiter
    Type d'incident, lien avec l'auteurNe sont pas partagés du tout hors de l'agence de gestion de cas
    Notes du présentateur
    Quatorze colonnes pour 1 850 cas de protection. Listez maintenant ce que contient un système de gestion de cas et que cet extrait ne contient pas :
  5. Diapositive 5 / 22

    Commencez par le schéma, non par les données

    • Chaque ligne de ce tableau est une décision que quelqu'un a prise, et chacune se défend en nommant l'analyse qu'elle…
    Notes du présentateur
    Chaque ligne de ce tableau est une décision que quelqu'un a prise, et chacune se défend en nommant l'analyse qu'elle n'empêche pas. C'est le test : non pas « est-ce sensible » mais « que serais-je incapable de calculer sans cela ».
  6. Diapositive 6 / 22

    Le principe, énoncé comme une règle sur des colonnes

    • Collecter le minimum nécessaire. Si aucun indicateur n'a besoin d'un champ, le conserver n'est que du risque.
    • Partager moins que ce que l'on détient. L'extrait d'analyse n'est pas le dossier. Chaque pas vers l'extérieur…
    • Ne jamais partager de données au niveau de l'incident hors de l'agence de gestion de cas. Agréger ou ne pas envoyer.
    • Le consentement gouverne l'usage. Une personne qui consent à un référencement n'a pas consenti à un jeu de données…
    • La sécurité d'abord, toujours. Là où une analyse et la sécurité d'une survivante s'opposent, c'est l'analyse qui…
    Notes du présentateur
    Les principes de gestion de l'information VBG s'enseignent habituellement comme de l'éthique. Ce sont aussi, concrètement, des instructions sur un schéma :
  7. Diapositive 7 / 22

    Le principe, énoncé comme une règle sur des colonnes — En Python

    minimum = {
        "who": ["age_band", "sex", "disability_reported"],
        "where": ["admin1", "admin2"],
        "when": ["referral_month"],
        "what": ["case_category", "service_requested"],
        "pathway": ["consent_to_refer", "referral_made", "referral_accepted",
                    "days_to_first_service", "case_status"],
    }
    print({k: len(v) for k, v in minimum.items()})
  8. Diapositive 8 / 22

    Le principe, énoncé comme une règle sur des colonnes — En R

    # Five groups of fields, each earning its place by an indicator that needs it.
  9. Diapositive 9 / 22

    Le principe, énoncé comme une règle sur des colonnes

    • Chaque champ de cet extrait correspond à un indicateur — days_to_first_service existe parce que le standard clinique…
    Notes du présentateur
    Chaque champ de cet extrait correspond à un indicateur. days_to_first_service existe parce que le standard clinique de 72 heures pour les soins de santé VBG l'exige ; disability_reported existe parce que l'écart d'équité est le constat que ce jeu de données a été bâti pour faire apparaître. Un champ sans indicateur derrière lui n'a rien à faire dans l'extrait.
  10. Diapositive 10 / 22

    Ce que coûte le grossissement, mesuré — En Python

    print(referrals["age_band"].value_counts(dropna=False))
    print(referrals["referral_month"].nunique(), "distinct periods")
    print(referrals["admin2"].nunique(), "areas")
    Notes du présentateur
    L'affirmation selon laquelle le grossissement ne coûte rien doit être vérifiée plutôt qu'assénée.
  11. Diapositive 11 / 22

    Ce que coûte le grossissement, mesuré — En R

    referrals |> count(age_band)
    referrals |> summarise(periods = n_distinct(referral_month),
                           areas = n_distinct(admin2))
  12. Diapositive 12 / 22

    Ce que coûte le grossissement, mesuré

    • Promptitude : mesurée en jours du référencement au service, ce qui est déjà une durée et n'exige aucune date de…
    • Saisonnalité : le mois est la résolution la plus fine à laquelle se lit une tendance de protection, et une série…
    • Désagrégation par âge : les tranches sont les catégories de rapportage. Un enfant, un adolescent, un adulte en âge…
    • Le grossissement ne coûte donc rien que quiconque ait demandé — C'est ce qui le rend défendable, et c'est pourquoi…
    Notes du présentateur
    Cinq tranches d'âge, douze mois, six zones. Demandez maintenant ce qu'ajouteraient un âge exact et une date exacte : Le grossissement ne coûte donc rien que quiconque ait demandé. C'est ce qui le rend défendable, et c'est pourquoi l'argument est analytique plutôt que simplement prudent.
  13. Diapositive 13 / 22

    Celle qui est une vraie perte

    • Retirer le type d'incident empêche de dire quelles formes de violence le circuit de référencement sert le plus mal —…
    Notes du présentateur
    Toutes les omissions ne sont pas gratuites, et prétendre le contraire est la façon dont un argument de protection des données perd sa crédibilité. Retirer le type d'incident empêche de dire quelles formes de violence le circuit de référencement sert le plus mal. C'est une perte analytique réelle, et la réponse n'est pas que cela n'a pas d'importance. La réponse est que cette analyse a sa place à l'intérieur de l'agence de gestion de cas, conduite par ceux qui détiennent les données, et que ce qui en sort est la conclusion et non le fichier.
  14. Diapositive 14 / 22

    Celle qui est une vraie perte — En Python

    print("Question: does the pathway serve some incident types worse than others?")
    print("Where it can be answered: inside the case management agency")
    print("What leaves the agency: the finding, not the disaggregation")
  15. Diapositive 15 / 22

    Celle qui est une vraie perte — En R

    # The right answer to "we need incident type" is often "we will run it and
    # send you the result", not "no".
  16. Diapositive 16 / 22

    Celle qui est une vraie perte

    • « Vous ne pouvez pas avoir le fichier, et voici la réponse à votre question » est la réponse professionnelle — et elle…
    Notes du présentateur
    « Vous ne pouvez pas avoir le fichier, et voici la réponse à votre question » est la réponse professionnelle, et elle est disponible bien plus souvent qu'un refus sec ou qu'une remise discrète.
  17. Diapositive 17 / 22

    Les 62 tranches d'âge vides — En Python

    missing = referrals["age_band"].isna()
    print(f"{missing.sum()} cases with no age band ({missing.mean():.1%})")
    print(referrals.loc[missing, "case_category"].value_counts())
  18. Diapositive 18 / 22

    Les 62 tranches d'âge vides — En R

    referrals |> filter(is.na(age_band)) |> count(case_category)
    Notes du présentateur
    La tranche d'âge est à la fois la désagrégation la plus employée et le champ le plus souvent manquant dans les données d'admission réelles, parce qu'elle se demande à un moment où la demander est intrusive. Soixante-deux cas font 3,4 % et ne sont pas répartis uniformément, si bien qu'un tableau désagrégé par âge a un dénominateur plus petit que le tableau de circuit à côté de lui et doit le dire. L'envie d'imputer est ici mauvaise pour une raison propre à ce secteur : une tranche d'âge imputée, rattachée à un cas réel dans un jeu de données de protection, est un attribut fabriqué d'une personne identifiable.
  19. Diapositive 19 / 22

    Ce qu'il faut écrire dans la note méthodologique — Exemple

    Data handling
    
      Analysis extract holds 14 fields for 1,850 cases. It contains no name,
      contact detail, free text, incident date, location below admin2, exact age,
      incident type or perpetrator detail.
    
      Age is recorded in five bands and time in months. Both are sufficient for
      every indicator reported here, and both reduce the risk that a row can be
      matched to a person.
    
      Incident-level fields remain in the case management system. Analyses
      requiring them are run by the case management agency and reported as
      findings rather than shared as data.
    
      62 cases (3.4%) have no age band. Age-disaggregated figures are computed on
      1,788 cases and are labelled accordingly.
  20. Diapositive 20 / 22

    Ce qu'il faut écrire dans la note méthodologique

    • Écrivez ceci avant les résultats, non en annexe — Un rapport de protection dont la section de traitement des données…
    Notes du présentateur
    Écrivez ceci avant les résultats, non en annexe. Un rapport de protection dont la section de traitement des données est à la fin a invité chaque lecteur à sauter la seule partie qui gouverne ce que le reste a le droit de dire.
  21. Diapositive 21 / 22

    La suite

    • Retirer des colonnes réduit le risque sans l'éliminer.
    Notes du présentateur
    Retirer des colonnes réduit le risque sans l'éliminer. La leçon suivante porte sur ce qui arrive quand on croise les colonnes restantes, et sur le point où un jeu de données parfaitement anonyme produit un tableau qui identifie quelqu'un.
  22. Diapositive 22 / 22

    La suite

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