Séance 2 : matrice d'affiliation individus/événements et projection

This commit is contained in:
2026-09-23 11:39:22 +02:00
parent 21aa108c34
commit 737f12b74c
+157 -4
View File
@@ -364,7 +364,155 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"**Application sociologique :** l'incidence est surtout utile quand la relation elle-même porte de l'information (sa date, son contexte, son type), plutôt que le simple fait qu'elle existe. Par exemple, une matrice d'incidence \"individus × réunions\" (chaque colonne = une réunion, chaque 1 = une personne présente) permet de repérer qui participe aux mêmes réunions que qui — c'est d'ailleurs la logique du graphe biparti vu en introduction, ramenée à une structure sommets × arêtes plutôt que sommets × sommets."
"**Application sociologique :** cette matrice sommets × arêtes met en avant les relations elles-mêmes plutôt que les individus. En pratique, en sociologie, elle reste peu utilisée : elle contient exactement la même information que la matrice d'adjacence, sous une forme plus encombrante.\n",
"\n",
"> ⚠️ **Attention à un piège de vocabulaire.** En analyse des réseaux sociaux, on appelle aussi « matrice d'incidence » un objet **différent** : une matrice **individus × événements**. Ce n'est pas la même chose que la matrice sommets × arêtes ci-dessus, et c'est celle-là qui est vraiment utile au sociologue. C'est l'objet de la partie 5."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Partie 5 — L'incidence utile au sociologue : individus × événements\n",
"\n",
"### 1. Pourquoi changer d'objet\n",
"\n",
"Dans la partie 4, chaque colonne représentait une **arête** et contenait donc exactement deux 1 : les deux extrémités de la relation.\n",
"\n",
"Mais en sociologie, **on n'observe presque jamais les liens directement**. On n'a pas la liste des amitiés : on a des listes de présence. Qui siège dans quel conseil d'administration, qui signe quelle pétition, qui assiste à quelle réunion, qui adhère à quelle association.\n",
"\n",
"On construit alors une matrice $B$ de taille *individus × événements* :\n",
"\n",
"$$B_{ie} = \\begin{cases}1 & \\text{si l'individu } i \\text{ participe à l'événement } e \\\\ 0 & \\text{sinon}\\end{cases}$$\n",
"\n",
"**La différence est structurelle :** une colonne n'est plus une arête mais un événement, et elle contient autant de 1 qu'il y a de participants. Une réunion à cinq personnes donne une colonne à cinq 1.\n",
"\n",
"C'est ce que Breiger (1974) appelle la **dualité des personnes et des groupes** : les individus sont reliés par les événements qu'ils partagent, et les événements sont reliés par les individus qu'ils rassemblent."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. Construire la matrice d'affiliation\n",
"\n",
"Reprenons nos cinq personnes, mais en observant cette fois leurs **participations** à quatre événements associatifs, et non plus leurs amitiés."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"personnes = [\"Alice\", \"Bob\", \"Claire\", \"David\", \"Emma\"]\n",
"evenements = [\"Réunion A\", \"Atelier B\", \"Sortie C\", \"Conseil D\"]\n",
"\n",
"participations = {\n",
" \"Alice\": [\"Réunion A\", \"Atelier B\"],\n",
" \"Bob\": [\"Réunion A\", \"Conseil D\"],\n",
" \"Claire\": [\"Atelier B\", \"Sortie C\", \"Conseil D\"],\n",
" \"David\": [\"Atelier B\", \"Sortie C\", \"Conseil D\"],\n",
" \"Emma\": [\"Sortie C\"],\n",
"}\n",
"\n",
"B = np.zeros((len(personnes), len(evenements)), dtype=int)\n",
"for i, personne in enumerate(personnes):\n",
" for evenement in participations[personne]:\n",
" B[i, evenements.index(evenement)] = 1\n",
"\n",
"print(\"Colonnes :\", evenements)\n",
"print(personnes)\n",
"print(B)\n",
"print()\n",
"print(\"Nombre de 1 par colonne :\", B.sum(axis=0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Observez la dernière ligne : les colonnes somment à 2, 3, 3 et 3, et non à 2 partout. C'est la preuve concrète qu'il ne s'agit **pas** de la matrice sommets × arêtes de la partie 4."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. La projection : transformer des co-présences en réseau\n",
"\n",
"Voici l'opération qui rend cette matrice utile. Deux produits matriciels suffisent :\n",
"\n",
"- $C = B \\, B^{T}$ est une matrice **individus × individus** : $C_{ij}$ compte les événements que $i$ et $j$ ont en commun ;\n",
"- $D = B^{T} B$ est une matrice **événements × événements** : $D_{ef}$ compte les personnes présentes à la fois en $e$ et en $f$.\n",
"\n",
"Autrement dit, on part de données d'affiliation, qui sont ce qu'on collecte réellement, et on en déduit un réseau interpersonnel, qui est ce qu'on veut analyser."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"C = B @ B.T # individus × individus\n",
"D = B.T @ B # événements × événements\n",
"\n",
"print(\"C = B @ B.T (individus × individus)\")\n",
"print(personnes)\n",
"print(C)\n",
"print()\n",
"\n",
"print(\"Nombre d'événements par personne (diagonale de C) :\")\n",
"for i, personne in enumerate(personnes):\n",
" print(f\" {personne} : {C[i, i]}\")\n",
"print()\n",
"\n",
"print(\"Co-participations (hors diagonale) :\")\n",
"for i in range(len(personnes)):\n",
" for j in range(i + 1, len(personnes)):\n",
" if C[i, j] > 0:\n",
" print(f\" {personnes[i]} et {personnes[j]} : {C[i, j]} événement(s) en commun\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4. Lecture sociologique\n",
"\n",
"Deux choses se lisent directement dans $C$ :\n",
"\n",
"- **la diagonale** donne le nombre d'événements de chacun, c'est-à-dire son **degré d'engagement** dans la vie collective. Emma en a 1, Claire et David en ont 3 ;\n",
"- **les valeurs hors diagonale** mesurent la force du lien indirect. Claire et David partagent **3 événements** : c'est le lien le plus fort du réseau.\n",
"\n",
"Or, si vous remontez au graphe d'amitié du début de la séance, **Claire et David ne sont reliés par aucune arête**. Leur proximité est totalement invisible dans la matrice d'adjacence, et elle saute aux yeux dans la projection.\n",
"\n",
"C'est exactement ce que le sociologue cherche : des liens que les acteurs ne déclarent pas, mais que leurs pratiques révèlent.\n",
"\n",
"> **Attention à l'interprétation.** Partager trois réunions ne prouve pas qu'on se connaisse, encore moins qu'on s'apprécie. La projection produit une **hypothèse** de lien, à confronter à d'autres sources. Deux personnes peuvent siéger dans le même conseil sans s'être jamais adressé la parole."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(\"D = B.T @ B (événements × événements)\")\n",
"print(evenements)\n",
"print(D)\n",
"print()\n",
"print(\"Nombre de participants par événement (diagonale de D) :\")\n",
"for e, evenement in enumerate(evenements):\n",
" print(f\" {evenement} : {D[e, e]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La matrice $D$ se lit symétriquement : deux événements qui partagent beaucoup de participants relèvent probablement du **même milieu**. C'est ainsi qu'on repère, par exemple, que certaines instances recrutent dans le même vivier."
]
},
{
@@ -381,13 +529,17 @@
"| $A^2$ | existence de relations indirectes |\n",
"| densité | cohésion du groupe |\n",
"| liste d'adjacence | représentation compacte, adaptée aux réseaux creux (la plupart des réseaux sociaux réels) |\n",
"| matrice/liste d'incidence | met en avant les relations elles-mêmes (utile si elles portent de l'information : date, contexte, type) |\n",
"| matrice/liste d'incidence (sommets × arêtes) | met en avant les relations elles-mêmes ; même information que l'adjacence, sous une forme plus lourde |\n",
"| matrice d'affiliation (individus × événements) | données réellement collectées : qui participe à quoi |\n",
"| $B B^{T}$ | co-participations : force du lien indirect entre deux individus |\n",
"| $B^{T} B$ | proximité entre événements : recrutent-ils dans le même milieu ? |\n",
"\n",
"| Représentation | Taille | Adaptée à |\n",
"|:-----------------|:--------|:-----------|\n",
"| Matrice d'adjacence | *n × n* | petits réseaux, réseaux denses, calculs matriciels |\n",
"| Liste d'adjacence | proportionnelle au nombre de liens | grands réseaux creux (cas le plus fréquent) |\n",
"| Matrice/liste d'incidence | *n × m* (sommets × arêtes) | quand la relation elle-même porte de l'information |"
"| Matrice/liste d'incidence | *n × m* (sommets × arêtes) | surtout théorique ; peu utilisée en sociologie |\n",
"| Matrice d'affiliation | *n × p* (individus × événements) | réseaux à deux modes : présences, adhésions, signatures |"
]
},
{
@@ -399,7 +551,8 @@
"2. Si une matrice est très dense, que peut-on en conclure sur le **type de groupe** étudié ?\n",
"3. Comment pourriez-vous pondérer les liens dans cette matrice pour représenter l'**intensité** des relations ?\n",
"4. Vous devez analyser le réseau de tou·tes les utilisateur·rices d'un réseau social (des millions de personnes, chacune avec quelques centaines d'ami·es en moyenne). Justifiez votre choix entre matrice et liste d'adjacence.\n",
"5. Donnez un exemple de situation sociologique où la matrice d'incidence serait plus informative que la matrice d'adjacence."
"5. Donnez un exemple d'enquête où vous disposeriez d'une matrice d'affiliation (individus × événements) plutôt que d'une matrice d'adjacence. Qu'apporterait la projection $B B^{T}$ dans ce cas ?\n",
"6. Claire et David ne sont reliés par aucune arête dans le graphe d'amitié, mais partagent trois événements. Comment interpréteriez-vous cela ? Quelles précautions prendre avant d'en conclure qu'elles et ils se connaissent ?"
]
}
],