Blog Non classé Physique Vacances

Physique des blogs : personal Zipfing

L’une des « lois » de la nature les plus amusantes est la fameuse loi de Zipf , linguiste américain qui constata empiriquement que la fréquence d’utilisation du n-ième mot le plus fréquent dans une langue est proportionnelle à 1/n . Il fit cette découverte en analysant Ulysse de Joyce.
La loi de Zipf se visualise de façon très frappante dans un graphique log-log, où l’on trace le logarithme de la fréquence d’utilisation d’un mot en fonction de celui du rang d’utilisation (rang 1=mot le plus fréquent, rang 2= 2ième mot le plus fréquent, etc…). On obtient alors une jolie droite avec une pente -1 (voir graphe ci-dessous tiré de Wikipedia).

Depuis, la loi de Zipf est devenue une espèce de tarte à la crème des systèmes complexes, tant elle apparaît universelle. On l’utilise par exemple pour des explications phénoménologiques de la distribution d’articles scientifiques, etc… Il y a quelques années, Chris Anderson l’a renommée « loi de la longue traîne » pour caractériser le commerce en ligne (Amazon, Netflix). L’idée est qu’il y a des sources d’argent dans les ventes rares, correspondant aux hauts rangs de la loi de Zipf. En effet, si on considère le n-ième produit vendu, on s’attend à ce que sa fréquence de vente soit proportionnelle à 1/n en vertu de la loi de Zipf. Imaginez maintenant que vous soyiez Amazon ou Apple et ayez l’idée saugrenue de vendre tous les articles 1$. Comme la somme des 1/n avec n variant de 1 à l’infini diverge (i.e. tend vers l’infini), cela veut dire qu’il vous suffit d’augmenter infiniment l’offre pour vous assurer … un profit infini. Ce qui est tout à fait remarquable est que la somme des 1/nˆ(1+s), avec s positif, elle, converge, donc au contraire, dès qu’on a une loi plus décroissante que la loi de Zipf, le profit maximum possible redevient fini même avec une offre infinie.

Les physiciens se sont penchés là-dessus récemment, on peut notamment lire une très bonne revue sur l’arXiv de Mora et Bialek sur la loi de Zipf dans les systèmes biologiques . Comme expliqué ci-dessus, la loi de Zipf est pile le régime limite ou « critique » : le passage au profit infini décrit ci-dessus correspond en fait exactement à la notion de transition de phase en physique et s’observe dans de nombreux systèmes naturels partout où l’on trouve la loi de Zipf, depuis la statistique des photographies de paysages, les mouvements collectifs d’animaux jusqu’aux réseaux de neurones ! Un argument heuristique expliquant cela est que tout système effectuant une tâche complexe (e.g. un réseau de neurones) doit être, en gros, pile à la limite entre des états purement aléatoires (e.g. tous les neurones décorrélés, ou « épilepsie » pour suivre Mora et Bialek) et des états très organisés (e.g. un seul neurone maître dirigeant tous les autres, ou « mort »).

A l’ère des « personal data », il est amusant de tester ce genre de lois universelles soi-même. Mon blog obéit-il à la loi de Zipf ? L’un des intérêts est que l’histoire de ce blog ne fut pas un long fleuve tranquille : changement d’hébergeur, trous dans les données, fréquence de publication variable en fonction des événements professionels … les données sont-elles sensibles à ces aléa ?

J’ai extrait essentiellement 2 jeux de données sur mon propre blog :

  • J’ai les données Google Analytics de la période 2007-2011, soit l’époque tomroud.com et tomroud.owni.fr, époque que je qualifierais « d’âge d’or » correspondant à ma productivité et mon audience maximales. Il est très facile d’extraire le nombre de vues d’une page donnée ainsi que l’audience du blog jour par jour.
  • Le passage à une solution d’hébergement sur le c@fé des sciences en 2011 a représenté une espèce de « reboot » de ce blog, avec moins de visites, moins de référencement, et aussi des outils statistiques de tracking d’audience moins fiables et pratiques (message personnel : rendez-nous Google Analytics !). J’ai pu néanmoins extraire sans trop de problèmes un classement des billets par nombre de vues.


Age d’or : Loi de Zipf modifiée

La figure ci-dessous représente en bleu le nombre de vues par page en fonction de leur rang (Rang 1 = page la plus vue de tous les temps , rang 2= deuxième page la plus vue, etc…). Il y a un cut-off naturel juste avant le rang 2000, correspondant à peu de choses près au nombre de pages cumulées des blogs tomroud.com et tomroud.owni.fr.

De façon tout à fait remarquable, le nombre de vues par page en fonction de leur rang suit manifestement une loi très simple. Ce qui est très surprenant est qu’il ne s’agit pas d’une loi de Zipf : la pente rouge correspond à une fréquence en fonction du rang qui est, non pas en 1/n, mais en 1/n^(1/2). Cela signifie concrètement qu’on est beaucoup plus dans le régime « aléatoire » que dans le régime critique de la loi de Zipf.

Cette puissance 1/2 m’intrigue beaucoup : le fit est tellement parfait en fait que je serais très tenté d’y chercher une loi universelle, mais est-elle valable hors de mon blog ? Comment expliquer que c’est un coefficient proche de 1/2 et non pas de 1 comme dans la loi de Zipf classique ? Et pourquoi 1/2 et pas 1/2.493 ou 1/1.12345 ?

Plusieurs hypothèses ou modèles sont possibles : il y a bien sûr le fameux effet Matthieu, qui joue certainement pour les billets les plus vus. C’est le fameux « buzz » : le billet le plus vu de ce blog, – comment gagner à Questions pour Un Champion- l’a été en quelques jours, suite à un buzz énorme (relativement), avec reprise sur lemonde.fr, slate.fr, etc… L’effet Matthieu est connu semble-t-il pour donner des lois de puissance type Zipf. Mais comment expliquer que l’effet de longue traîne persiste sur deux ordres de grandeur, compte-tenu des mécanismes assez différents menant à un billet ? Qu’est-ce qui détermine l’exposant 1/2 ? [Quid de l’influence de Google, est-ce ce qui explique le caractère plus aléatoire de la distribution ?]

Reboot : Loi de Zipf saturée

Le graphique ci-dessous représente toujours l’audience en fonction du rang, mais pour le nouvel hébergement de ce blog depuis 2011 ici-même sur la plate-forme du c@fé des sciences.

Outre l’audience clairement moins grande, la forme de la courbe est complètement différente. Deux choses me frappent particulièrement :

  • pour les grands rangs, on retrouve une courbe à peu près linéaire. Mais la décroissance est très rapide : on est de l’ordre de 1/n^(1.5), soit dans le régime « organisé ». Dit autrement, ce sont des pages vues très très rarement, probablement « dirigées » par d’autres facteurs. Mon hypothèse est qu’il s’agit de clics vers des vieux billets et non pas des clics directs vers des nouveaux billets, contrairement à l’ancien blog où pas mal de billets de hauts rangs ont été lus peu après leur publication.
  • le plus frappant et le plus instructif selon moi est la « saturation » à petit rang. Les pages les plus lues l’ont toutes été un nombre de fois équivalent, de l’ordre de 1000 visites. Mon interprétation est que c’est une courbe caractéristique d’un blog relativement isolé : ces 1000 lecteurs, c’est le cercle natural maximal de personnes que j’atteins vraiment aujourd’hui avec ce blog. C’est un peu l’équivalent de cette fameuse « influence » dont les blogueurs parlaient autrefois, remplacée depuis par le score Klout ou que sais-je encore. De façon assez frappante, cela correspond aussi quasi-exactement à mon nombre de followers sur twitter. Pour augmenter ce nombre, il faudrait que mon blog atteigne, je ne sais trop comment, une cible plus grande.

La question naturelle est de savoir si, avec le temps, cette courbe saturée à petit rang va finir par tendre vers une courbe ressemblant à celle plus haut. J’ai l’impression de « deviner » l’exposant 1/2 dans cette deuxième courbe juste après le régime saturé des petits rangs, est-ce vraiment le cas ? Avec le temps, vais-je voir mes billets les plus lus gagner plein d’audience pour rattrapper la loi en 1/n^1/2 ? Je ne vois pas comment ce serait possible compte-tenu de mon expérience des billets « qui marchent » (et de ma fréquence de publication actuelle …).

Mais dans l’absolu, ce genre d’exercice ne me paraît pas inintéressant dans la mesure où l’on peut penser qu’en surveillant la dynamique d’évolution de ces lois type Zipf au cours du temps, on pourrait en apprendre beaucoup sur la construction des réseaux et sur l’émergence des lois types « longue traîne ». Mon intuition personnelle est que les histoires d’effet Mathieu, etc… sont largement infondées, et qu’il n’y a qu’en regardant effectivement en temps réel comment un blog naît, vit, et meurt, on pourra vraiment comprendre comment les réseaux se forment. De mon côté, il y a probablement pas mal de choses à extraire des « vieilles » données que j’ai sur Google Analytics, notamment en réanalysant leur dynamique temporelle. Si vous mêmes avez des données de ce genre, je suis assez intéressé, je publierai les données intéressantes ici-mêmes.
[Il est très facile d’extraire ces lois avec Google Analytics : sélectionner la période d’intérêt pour l’analyse, allez dans Content, All Pages dans la colonne de gauche, puis en haut Export, sélectionnez CSV et envoyez le tout à tom.roud at gmail.com !]

About the author

tom.roud

10 Comments

  • Salut Tom,

    les « vues » que tu as extraites, il s’agit de toutes les vues ou seulement des visiteurs uniques sur une page (c’est à dire ne comptant pas les rafraîchissements et visites multiples d’un même visiteur), et s’agit-il uniquement des visiteurs humains ou les bots des moteurs de recherche sont aussi inclus ?

    Al.

    • J’ai regardé vraiment les pages vues données par Google Analytics, mais le nombre de visiteur unique par billet n’est pas très différent en ordre de grandeur, donc le comportement n’est probablement pas très différent. Je pense que tout le monde est inclus, y compris les bots.

  • Ola Tom !

    Merci pour ce billet tout à fait passionnant -encore une fois- qui me fait découvrir et la loi de Zipf, et les drôles de variantes trouvées dans les données de ton blog…
    J’aurais été ravi de te passer mes propres stats, mais j’ai longtemps utilisé StatCounter… qui ne conserve pas ce type de données pour les comptes gratuits.
    Et depuis que je j’utilise GA.. Je ne publie plus grand chose ! Donc je ne pense que tu trouves grand chose d’intéressant…
    A bientôt !

    • Formidable . En vertu de la récurrence 2 vers l’infini, c’est donc une loi universelle 🙂 !
      Le prochain truc que je fais est de regarder l’historique Analytics, j’ai 4 ans de données quotidiennes, je vais pouvoir voir comment tout ça se met en place….

  • Je ne connaissais pas la justification de l’exposant 1 pour la loi de zipf et d’ailleurs il vaut plutôt 1,1 ou 1,2 d’après l’article de Wikipédia sur le sujet (avec une petite « bosse » dans la distribution statistique). Si tel est le cas, on pourrait simplement se limiter au constat que tes statistiques suivent une loi de puissance (le bon vieux 80-20 de Pareto), ce qui n’est déjà pas si mal non?

    • Il faut en fait distinguer deux acceptations légèrement différentes de l’expression « loi de Zipf » :
      • loi expérimentale : la constatation empirique portant sur la fréquence des mots d’un texte en fonction de son rang : dans ce cas, on a s=1 (loi historique) d’après l’analyse d’Ulysse par Zipf et s dans les 1.1–1.2 pour les études ultérieures de sources diverses ;
      • loi théorique : la loi de probabilité en 1/k^s avec s>0.
      Ici, la popularité des billets de Matières Vivantes ne suit certes pas la loi de Zipf expérimentale mais semble suivre (du moins à l’« âge d’or ») la loi de Zipf théorique avec s=1/2.

      Effectivement, les statistiques de lecture de ce blog semblent suivre une loi de puissance, mais c’est bien dans ce cas une loi de Zipf et non une loi de Pareto.
      Formellement parlant, une loi de puissance est une loi de probabilité dont la densité de probabilité / fonction de masse est de la forme p(x)=C*x^a / p(k)=C*k^a (je laisse de côté les paramètres de position et d’échelle en les planquant dans le support ^^).
      Sachant que la ddp/fdm doit être intégrable/sommable, on peut donc distinguer 4 lois de puissances différentes selon leur support (je n’utiliserai pas les notations standard ici afin de faire ressortir le même exposant s dans chaque cas) :
      • si le support est discret fini : loi de Zipf p(k)=C/k^s sur 〚1;N〛 avec s réel quelconque (s>0 pour que p soit décroissant) ;
      • si le support est discret infini : loi de Zipf p(k)=C/k^s sur ℕ* avec s>1 ;
      • si le support est continu compact : lois de Pearson de type VIII et IX p(x)=C/x^s sur ]0;1] (ou son symétrique p(x)=C/(1-x)^s sur [0;1[) avec s1.
      On ne peut pas avoir de loi de puissance sur un support continu infini (ℝ) à cause du pôle en 0.
      Sachant que le rang de lecture d’un article est une variable discrète, la loi de puissance correspondante est donc bien celle de Zipf, donc on ne limite pas le constat en parlant ici de loi de puissance au lieu de loi de Zipf, c’est équivalent 😉 !
      Et vu que le nombre d’articles est fini, on peut avoir s≤1 sans que la sommation de la fdm diverge (avec cependant s>0 par construction, p ne pouvant que décroître puisque k est le rang de popularité décroissante).

      Cela dit, ça n’invalide pas le principe de Pareto du 80-20 (ou toute autre paire observée) qui s’applique à toute les lois de puissance… d’autant plus que, historiquement (et ironiquement pourrait-on dire), le principe de Pareto s’appliquait aux revenus des ménages d’un pays, soit une variable discrète finie, donc à une loi de Zipf et non à une loi de Pareto ^^.

  • Super intéressant, je vais tester chez moi aussi dès que j’aurai un peu de temps.
    Concernant l’espèce de cut, j’aurais bien une piste a creuser: dans la loi de Zipf « classique », tous les termes peuvent apparaître dès le début, alors que dans le cas de ton blog, certaines pages (les plus récentes) n’apparaissent que bien après les premières. Du coup, il faudrait peut-être comparer les fréquences d’apparition sur une période où tous les articles considérés étaient accessibles simultanément, non?

  • Concernant la « loi saturée », présentant donc une « bosse » dans la zone de transition entre le régime presque saturé et le régime en 1/sqrt(n), il me semble, si je ne me trompe, qu’il s’agit de la loi de (Zipf-)Mandelbrot, ce qui est simplement la loi de Zipf générale (c’est-à-dire avec facteurs de position et d’échelle).

    Concernant le fait que, pendant l’« âge d’or », le facteur de forme s soit inférieur à 1 (1/2 en l’occurrence), ce qui correspond à une « sur-lecture » (par rapport au cas s=1) des billets les moins populaires, je pense que cela pourrait être dû aux liens hypertexte des billets pointant vers d’anciens billets : si l’ancien billet est déjà populaire, les lecteurs auront peut-être moins tendance à cliquer, le connaissant déjà, tandis que s’il est moins populaire, les lecteurs pourraient être plus tentés de cliquer pour découvrir un article qu’ils avaient loupé.
    Le cas « idéal » serait bien entendu le cas s=0 où chaque billet est lu un même nombre de fois, ce qui arriverait si chacun lisait N fois l’intégralité des articles.

Leave a Comment