.. _part2_chap7:
***********************************************************************
Chapitre 7 : Mining de graphes
***********************************************************************
Les **graphes** (réseaux sociaux, web, interactions) sont au cœur du big data. On
s'intéresse ici à deux tâches : **détecter les communautés** (Girvan-Newman) et
**mesurer la similarité de nœuds** (SimRank).
Objectifs
=========
À la fin de ce chapitre, vous devez pouvoir :
- Dérouler **Girvan-Newman** (détection de communautés par *betweenness*)
- Dérouler **SimRank** (similarité de nœuds par marche aléatoire)
1. Girvan-Newman (détection de communautés)
===========================================
**Idée** : les arêtes **entre** communautés sont traversées par beaucoup de plus
courts chemins. On retire itérativement les arêtes de plus forte
**intermédiarité** (*edge betweenness*) pour faire apparaître les communautés.
La **betweenness** d'une arête = nombre de paires de nœuds dont un plus court chemin
emprunte cette arête (créditée fractionnellement quand il y a plusieurs plus courts
chemins).
**Algorithme :**
1. Calculer la **betweenness** de **toutes** les arêtes (BFS depuis chaque nœud :
comptage des plus courts chemins descendant, puis crédit remontant).
2. **Retirer** l'arête de betweenness maximale.
3. **Recalculer** les betweenness des arêtes restantes.
4. Répéter : le graphe se **scinde** progressivement en composantes = communautés.
On obtient une **hiérarchie** de communautés (comme un dendrogramme) ; on choisit le
niveau de coupe (souvent via la **modularité**).
2. SimRank (similarité de nœuds)
================================
**Idée** : « deux nœuds sont similaires s'ils sont **référencés par des nœuds
similaires** ». C'est une définition **récursive**, évaluée par **marche aléatoire**.
.. math::
s(a, b) = \frac{C}{|I(a)|\,|I(b)|} \sum_{u \in I(a)} \sum_{v \in I(b)} s(u, v)
où :math:`I(x)` = voisins entrants de *x*, et :math:`C \in (0,1)` un facteur
d'atténuation ; avec :math:`s(a,a) = 1`.
**Algorithme** (itératif) : initialiser :math:`s(a,b)=1` si :math:`a=b`, sinon 0 ;
puis **itérer** la formule jusqu'à convergence. (Interprétation : *expected meeting
distance* de deux marcheurs aléatoires remontant les arêtes.) Utilisé pour la
recommandation, la désambiguïsation, la recherche de pages liées.
3. Autres (brève description)
=============================
.. list-table::
:header-rows: 1
:widths: 28 72
* - Méthode
- Idée
* - **Modularité (Louvain)**
- Optimiser la **modularité** par fusions locales — très **scalable** (≫ Girvan-Newman).
* - **Clustering spectral**
- Utiliser les **valeurs/vecteurs propres** du laplacien du graphe pour partitionner.
* - **Comptage de triangles / clustering coefficient**
- Mesurer la cohésion locale (souvent en MapReduce).
* - **Plus courts chemins en MapReduce**
- BFS distribué (cf. *friend recommendation*, **TP4**).
Exercices
=========
.. admonition:: Exercice 1 — Betweenness
:class: tip
Dans un graphe « haltère » (deux triangles A-B-C et D-E-F reliés par l'unique
arête **C–D**), quelle arête a la plus forte betweenness, et pourquoi
Girvan-Newman la retire-t-il en premier ?
.. raw:: html
▶ Voir la correction
L'arête **C–D** : c'est le **seul pont** entre les deux groupes, donc **tous** les
plus courts chemins reliant un nœud de {A,B,C} à un nœud de {D,E,F} passent par
elle → betweenness maximale. La retirer **sépare** le graphe en ses deux
communautés naturelles.
.. raw:: html
.. admonition:: Exercice 2 — SimRank
:class: tip
Pourquoi SimRank est-il défini de façon **récursive**, et que représente le
facteur :math:`C` ?
.. raw:: html
▶ Voir la correction
Parce que la similarité de deux nœuds dépend de celle de leurs voisins, qui
dépend à son tour de la leur, etc. — d'où une définition récursive résolue par
itérations jusqu'au point fixe. Le facteur :math:`C \in (0,1)` **atténue** la
contribution des voisins éloignés (sinon la similarité « se propagerait » sans
décroître) ; il garantit la convergence et reflète que la similarité **décroît**
avec la distance.
.. raw:: html