Files
graphes-l3/Seance_5_TP_Contamination_Corrige.md
T

14 KiB
Raw Blame History

Corrigé — Séance 5, TP : réseau d'affiliation et chaîne de contamination

Document enseignant. Tous les résultats chiffrés ci-dessous ont été obtenus en exécutant réellement le notebook (NetworkX 3.6).


Intention de la séance

Le TP poursuit un objectif qui dépasse la manipulation de NetworkX : faire découvrir aux étudiantes, par l'expérience et non par l'annonce, que la projection d'un réseau biparti détruit de l'information.

La séquence est construite pour ça :

  1. on annonce au point 3 que « chaque repas devient une clique » — annonce abstraite, qui ne marque pas ;
  2. on applique ensuite les outils du cours sur le réseau projeté ;
  3. à la question 14, le BFS renvoie 1 pour absolument tout le monde. Le résultat est visiblement inutilisable ;
  4. la question 15 fait relier ce constat à l'annonce du point 3.

Ne pas divulguer le point 4 à l'avance. L'effet pédagogique tient entièrement à ce que le résultat dégénéré soit rencontré, pas anticipé.


Chiffres de référence

Objet Valeur
Personnes 17
Repas 6
Participations (liens du biparti) 41
Nœuds du biparti B 23
Liens du projeté G 74
Composantes connexes de G 3
Composante de Paula 13 personnes, 71 liens sur 78 paires possibles (91 %)
Points d'articulation de G aucun
Points d'articulation de B R1988, R1990, M1991

Partie 2 — Le réseau d'affiliation

Q1. Oui, Agnès figure sur le graphique, mais sans aucun lien : c'est un nœud isolé. Elle n'apparaît que parce qu'on l'a ajoutée explicitement via add_nodes_from. Point à souligner : si on avait construit le graphe uniquement à partir de la liste des participations, Agnès aurait purement et simplement disparu de l'analyse.

C'est un biais très concret des données de réseau — on ne voit que les personnes qui participent. Les non-participants sont invisibles, alors qu'ils sont souvent sociologiquement les plus intéressants.

Q2. R1988 (le banquet du 17 septembre 1988) rassemble 11 personnes, contre 8, 8, 7, 4 et 3 pour les autres. C'est lisible directement sur la figure au nombre de traits qui convergent vers le carré.

Q3. Non. Dans un graphe biparti, tout lien va nécessairement d'un nœud d'un côté vers un nœud de l'autre côté. Une arête personnepersonne est impossible par construction. C'est ce que vérifie nx.is_bipartite(B), qui renvoie True.

Q4. Une personne reliée à un seul repas est un·e participant·e occasionnel·le : soit périphérique dans la sociabilité locale, soit nouvellement arrivée, soit extérieure au groupe. Dans le jeu de données, c'est le cas de Doris, Martha (seulement R1988) et George (seulement R1990).

Le lien avec la suite : ce sont précisément ces personnes que le retrait d'un repas isole (question bonus 2).


Partie 3 — La projection

Q5. Le réseau biparti comptait 41 liens ; le réseau projeté en compte 74. Le nombre a donc presque doublé.

L'explication attendue : un repas rassemblant n personnes produit n liens dans le biparti, mais n(n1)/2 liens dans la projection. Pour R1988 et ses 11 participants, on passe de 11 liens à 55. La projection fabrique des liens qui n'ont jamais été observés.

Formulation à valoriser : le biparti enregistre des présences, la projection en déduit des relations. C'est une inférence, pas une observation.

Q6. Tout groupe visible comme un « bloc » entièrement relié correspond à l'ensemble des participants d'un même repas. Les 11 participants de R1988 forment une clique complète de 11 nœuds.

Attention : la figure spring_layout est très dense et les cliques y sont peu lisibles. Si le groupe peine à voir, projeter directement le résultat de bipartite.projected_graph(B, ["R1988"] ...) ou simplement lister sorted(G.neighbors("Doris")) — Doris n'ayant participé qu'à R1988, ses voisins sont exactement les autres participants de ce repas.


Partie 4 — Composantes connexes

Q7. Trois composantes :

# Taille Membres Lecture
1 13 Paula, Ray, Bonnie, Jess, Sam, Nancy, Walter, Curtis, Béatrice, Wendell, Doris, Martha, George la sociabilité de Dudley — contient les 6 malades
2 3 Marjorie, Harold, Irene le groupe de Millhaven, sans aucun contact avec Dudley
3 1 Agnès isolée : aucune participation enregistrée

Q8. Oui, les 6 malades sont dans la même composante — et c'était prévisible : une maladie transmise lors des repas ne peut circuler qu'à l'intérieur d'une composante. Trouver un malade dans la composante de Millhaven aurait immédiatement invalidé l'hypothèse d'une transmission par les repas.

Point de méthode important : c'est un test réfutable. La structure du réseau permet de dire ce qu'on devrait observer si l'hypothèse est vraie, et ce qui la contredirait.

Q9. Non. Agnès forme à elle seule une composante : aucun chemin ne la relie à qui que ce soit. Si la contamination passe par les repas, elle ne peut pas l'avoir atteinte.

La restriction « à partir de la structure du réseau seulement » est volontaire : Agnès pourrait évidemment avoir été contaminée par un autre canal (un repas non enregistré, un autre mode de transmission). Le réseau ne dit rien de ce qu'il ne contient pas.

Q10. On peut conclure qu'elle a pu être exposée. On ne peut absolument pas conclure qu'elle est immunisée, ni qu'elle est saine.

Trois raisons à faire émerger :

  • appartenir à la composante signifie qu'un chemin existe, pas qu'il a été emprunté ;
  • l'incubation peut être longue : elle peut être contaminée sans être encore malade ;
  • la composante est très large (13 personnes sur 17), donc peu discriminante.

C'est la distinction entre exposition possible et exposition effective, qui est au cœur de tout raisonnement épidémiologique — et, transposée, de tout raisonnement sur la diffusion sociale.


Partie 5 — Parcours en largeur

Q11. À distance 2 de Paula, dans le biparti : Béatrice, Bonnie, Curtis, Doris, George, Jess, Martha, Nancy, Ray, Sam, Walter, Wendell — soit 12 personnes.

C'est exactement l'ensemble des personnes ayant partagé au moins un repas avec Paula. Distance 1 = les repas de Paula ; distance 2 = les gens qui y étaient.

Q12. Non atteints : Agnès, Harold, Irene, Marjorie et le repas M1991. C'est la réunion des composantes 2 et 3. Le BFS ne franchit jamais une frontière de composante : les deux notions donnent la même information, vue sous deux angles.

Q13. La distance maximale est 3 (les repas R1992 et R1995). Le réseau est très petit et très interconnecté : Walter et Wendell participent à presque tout, ce qui rapproche tout le monde. Dans un réseau réel de plusieurs centaines de nœuds, on observerait des distances de 6, 8 ou davantage.


Q14 — le moment de bascule

Résultat obtenu : toutes les personnes de la composante de Paula sont à distance 1.

Paula      : 0
Beatrice   : 1     Doris      : 1     Ray        : 1
Bonnie     : 1     George     : 1     Sam        : 1
Curtis     : 1     Jess       : 1     Walter     : 1
                   Martha     : 1     Wendell    : 1     Nancy : 1

La réaction attendue est la surprise, voire la suspicion d'un bug. Laisser ce moment se produire. C'est le seul endroit du TP où le résultat contredit visiblement l'attente.

Ne pas expliquer tout de suite : renvoyer à la question 15.


Q15 — l'explication

Proportion. 71 liens sur 78 paires possibles, soit 91 %. Le réseau projeté est quasiment complet à l'intérieur de la composante.

Pourquoi Paula est à distance 1 de presque tout le monde. Paula a participé à 3 des 5 repas de Dudley (R1988, R1989, R1990). Or R1988 réunissait à lui seul 11 des 13 personnes de la composante. Il suffit donc d'un repas commun pour être son voisin direct — et presque tout le monde en a un avec elle.

Mesures rendues inutilisables. À faire lister par le groupe :

  • la distance moyenne — proche de 1, elle ne différencie plus personne ;
  • la centralité de degré — tout le monde a un degré proche du maximum ;
  • la centralité d'intermédiarité — nulle ou presque : dans un graphe presque complet, aucun nœud ne se trouve sur le chemin des autres, puisque tous les chemins sont directs ;
  • le coefficient de clustering — proche de 1 partout, donc sans pouvoir discriminant.

Autrement dit : toutes les mesures des séances 3 et 8 s'effondrent sur ce réseau. Le lien avec la séance 8 (centralité) est à faire explicitement — c'est un avertissement utile avant de l'aborder.

Conclusion sur la méthode. Le réseau biparti, lui, distinguait encore des niveaux (0, 1, 2, 3) et possédait des points d'articulation. Il contenait plus d'information.

La conclusion à faire formuler : explorer le biparti d'abord, projeter ensuite et en connaissance de cause. La projection n'est pas une étape technique neutre qu'on exécuterait par réflexe pour « pouvoir travailler » ; c'est un choix d'analyse qui détruit de l'information, et il faut savoir laquelle.

Si le temps manque, c'est cette conclusion qu'il faut sauver, pas les questions bonus.


Partie 6 — Question de synthèse (Q16)

Attendus pour une réponse complète (10-15 lignes) :

Étapes reprises, dans l'ordre.

  1. Construire le biparti salarié·es × réunions, en incluant les personnes qui n'ont assisté à aucune réunion (piège de la question 1).
  2. Explorer le biparti avant toute projection : composantes, distances, points d'articulation.
  3. Projeter, en mesurant immédiatement la densité obtenue.
  4. Si la densité est très élevée, ne pas appliquer les mesures de centralité en l'état.

Limites à signaler.

  • Assister à une réunion n'est pas y prendre la parole ; le fichier ne mesure que la présence.
  • Les réunions ne sont qu'un canal de sociabilité parmi d'autres (couloirs, déjeuners, messageries).
  • Deux ans de données ne disent rien de l'antériorité des positions : on ne peut pas distinguer qui est influent *parce qu'*il va aux réunions de qui y va *parce qu'*il est influent.

Effet de la clique sur une mesure d'influence. C'est le point le plus important. Une réunion plénière de 200 personnes crée à elle seule 19 900 liens et place tous ses participants à distance 1 les uns des autres. N'importe quelle mesure de centralité appliquée après projection classera donc en tête les personnes qui assistent aux grandes réunions — c'est-à-dire, très souvent, les réunions les moins sélectives.

On mesurerait ainsi l'inverse de ce qu'on cherche : la participation à des réunions larges et peu discriminantes plutôt que l'appartenance à des cercles restreints et décisionnels.

Parade à valoriser si elle est proposée : pondérer les liens, ou écarter de l'analyse les événements au-delà d'une certaine taille.


Partie 7 — Pour aller plus loin

Bonus 1 — projection pondérée.

W = bipartite.weighted_projected_graph(B, personnes)
top = sorted(W.edges(data=True), key=lambda e: -e[2]["weight"])[:5]

Liens les plus lourds (poids 4, ex æquo) : RayWendell, WalterCurtis, WalterWendell, CurtisWendell ; puis PaulaCurtis (3).

La pondération corrige partiellement le défaut : les liens existent toujours tous, mais ils ne pèsent plus pareil, ce qui permet de seuiller. Elle ne corrige pas le problème de fond — un lien de poids 1 continue d'affirmer une relation qui n'a peut-être jamais existé.

Bonus 2 — points d'articulation.

list(nx.articulation_points(G))   # []
list(nx.articulation_points(B))   # ['M1991', 'R1988', 'R1990']
  • Sur G : aucun. Prévisible après la question 15 — dans un graphe à 91 % de densité, retirer un nœud ne peut pas isoler qui que ce soit, puisque tous les autres chemins directs subsistent.
  • Sur B : trois, et ce sont tous des repas, pas des personnes. C'est cohérent avec la structure : dans un réseau d'affiliation, ce sont les événements qui font tenir l'ensemble.
  • Retrait de R1990George est isolé (c'était son unique repas). Retrait de R1988Doris et Martha sont isolées. Retrait de M1991 → les trois habitants de Millhaven sont isolés séparément.

Ce que la projection a rendu invisible : le fait que la cohésion du groupe repose sur deux banquets précis. Supprimez R1988 et R1990 du calendrier, et trois personnes sortent du réseau. Cette dépendance est parfaitement lisible sur le biparti et totalement effacée par la projection.

C'est le meilleur argument du TP en faveur du travail sur le biparti, et il vaut la peine de finir là-dessus si le temps le permet.

Bonus 3 — projection sur les repas.

bipartite.projected_graph(B, repas) donne 6 nœuds et 10 liens. Les cinq repas de Dudley forment une clique complète (10 liens) ; M1991 reste isolé.

Ce réseau montre la continuité du groupe dans le temps : d'un banquet à l'autre, il y a toujours au moins une personne en commun. Il donne à voir la persistance d'un collectif, là où la projection sur les personnes donnait à voir la sociabilité à un instant donné.


Conduite de séance (seconde heure)

Moment Durée Vigilance
Parties 1-2 (biparti) 20 min La cellule de positionnement manuel est fournie : ne pas laisser perdre du temps dessus. Insister sur Agnès.
Partie 3 (projection) 15 min Annoncer la clique sans insister. L'effet vient plus tard.
Partie 4 (composantes) 15 min Réinvestissement direct du cours. Devrait aller vite.
Q14 5 min Ne pas expliquer. Laisser la surprise.
Q15 20 min Cœur de la séance. En collectif plutôt qu'en autonomie.
Q16 + bonus reste Q16 peut être donnée à rédiger pour la séance suivante.

Niveau Python. Aucune implémentation n'est demandée : toutes les cellules de code sont fournies ou reprennent des fonctions vues en séance 4. Le travail attendu est d'exécuter, lire et interpréter. Les questions notées sont toutes rédactionnelles.


Auteur : Florian Mathieu — L3 Sociologie quantitative, Algorithmes des graphes

Licence CC BY-NC-SA 4.0