.. _part2_chap8: *********************************************************************** Chapitre 8 : Link analysis (PageRank) *********************************************************************** **PageRank** classe les pages du web par **importance**, en exploitant la structure des **liens**. C'est l'algorithme fondateur de Google. Objectifs ========= À la fin de ce chapitre, vous devez pouvoir : - Définir le PageRank comme la distribution stationnaire d'une marche aléatoire - Le calculer par **itération de la puissance** (avec téléportation) - Comprendre le rôle du calcul **MapReduce** pour le passage à l'échelle 1. Idée et formulation ====================== Modèle du **surfeur aléatoire** : il suit un lien au hasard depuis la page courante. Le **PageRank** d'une page = la probabilité (stationnaire) de s'y trouver. Une page est importante si elle est pointée par des pages importantes : .. math:: r_j = \sum_{i \rightarrow j} \frac{r_i}{d_i} où :math:`d_i` = nombre de liens sortants de *i*. Sous forme matricielle :math:`r = M r` (où *M* est la matrice de transition colonne-stochastique) : *r* est le **vecteur propre** de *M* pour la valeur propre 1. 2. Téléportation (dead ends & spider traps) =========================================== Deux problèmes cassent la marche : les **culs-de-sac** (*dead ends*, pages sans lien sortant, qui « fuient » la probabilité) et les **pièges** (*spider traps*, groupes de pages qui se renvoient entre elles et absorbent tout le rang). **Solution** : à chaque étape, avec probabilité :math:`1-\beta`, le surfeur **téléporte** vers une page au hasard (:math:`\beta \approx 0,85`) : .. math:: r = \beta\, M r + (1-\beta)\,\frac{1}{N}\,\mathbf{1} (les *dead ends* sont traités en redistribuant leur masse uniformément, ou en les supprimant récursivement). 3. Calcul par itération de la puissance ======================================= 1. Initialiser :math:`r^{(0)} = \frac{1}{N}\mathbf{1}`. 2. **Itérer** :math:`r^{(t+1)} = \beta M r^{(t)} + \frac{1-\beta}{N}\mathbf{1}`. 3. S'arrêter quand :math:`\lVert r^{(t+1)} - r^{(t)}\rVert_1 < \varepsilon`. À l'échelle du web, chaque itération est un **produit matrice-vecteur** :math:`M r` — exactement le patron MapReduce du :doc:`chapitre 2 <../part1/chap2>` (*map* : ``(j, r_i/d_i)`` pour chaque lien ``i→j`` ; *reduce* : somme par *j*). C'est l'esprit du **TP4** (PageRank + MapReduce, sujet « moteur de recherche »). 4. Variantes (brève description) ================================ .. list-table:: :header-rows: 1 :widths: 28 72 * - Méthode - Idée * - **Topic-Sensitive PageRank** - Téléportation vers un **ensemble thématique** → rangs spécialisés par sujet. * - **TrustRank / lutte anti-spam** - Téléporter vers des pages **de confiance** pour réduire le *link spam*. * - **HITS** (*Hubs & Authorities*) - Deux scores couplés : *hubs* (pages qui pointent) et *authorities* (pages pointées). Exercices ========= .. admonition:: Exercice 1 — Un pas de PageRank :class: tip Graphe : A→B, A→C, B→C, C→A. Sans téléportation, en partant de :math:`r=(1/3,1/3,1/3)` pour (A,B,C), calculez le vecteur après **une** itération :math:`r = Mr`. .. raw:: html
▶ Voir la correction Degrés sortants : A=2 (→B,→C), B=1 (→C), C=1 (→A). Nouveau rang : :math:`r_A = r_C = 1/3` ; :math:`r_B = r_A/2 = 1/6` ; :math:`r_C = r_A/2 + r_B = 1/6 + 1/3 = 1/2`. Donc :math:`r = (1/3,\ 1/6,\ 1/2)` (somme = 1). En itérant, on converge vers la distribution stationnaire. .. raw:: html
.. admonition:: Exercice 2 — Pourquoi la téléportation ? :class: tip Qu'arrive-t-il au PageRank en présence d'un *spider trap* sans téléportation ? Comment :math:`\beta` corrige-t-il cela ? .. raw:: html
▶ Voir la correction Sans téléportation, un *spider trap* (ex. une page qui pointe seulement vers elle-même) **accumule toute la probabilité** : son rang tend vers 1 et tous les autres vers 0. La téléportation (avec proba :math:`1-\beta`, sauter vers une page au hasard) permet à la marche de **sortir** du piège, redistribuant le rang de façon réaliste. :math:`\beta\approx0{,}85` équilibre suivi des liens et saut aléatoire. .. raw:: html