La cagnotte Leetchi FDO (Forces de l’Ordre) a-t-elle vraiment été gonflée par des robots philanthropes ou bien est-ce un phénomène tout à fait normal quand le serveur est surchargé? Nous faisons le point, avec une simulation intéractive de théorie des files d’attente, que vous pouvez vous aussi essayer. Spoiler: nous trouvons que la linéarité de la courbe des montants pose effectivement question, et ne peut s’expliquer par la surcharge de la capacité du serveur.

La controverse

Il y a quelques semaines, une cagnotte pour soutenir les forces de l’ordre a été ouverte sur la plateforme de donations Leetchi. Celle-ci a fait des remous jusque dans la presse, des observateurs remarquant de curieux motifs de donation, notamment le nombre de contributions continu et soutenu durant toute la nuit du 10 janvier jusqu’à 6h du matin.

L’usage de « bots » a été tout d’abord reprise sur les réseaux sociaux, avant d’être étayée par des experts, tels que Fabrice Epelboin:

Est-il possible que des « bots » alimentent cette cagnotte ? « Oui c’est totalement possible, c’est ce qu’on appelle de l’astrosurfing » estime Fabrice Epelboin, qui a donné plusieurs cours à Sciences Po Paris sur la disruption sociale et politique apportée par les réseaux sociaux. Ce phénomène d’astrosurfing désigne le fait de donner l’impression d’un phénomène de masse qui émerge sur internet, en réalité créé de toutes pièces pour influencer l’opinion publique.

Il ajoute : « À ma connaissance, c’est la première fois qu’une cagnotte politique grimpe aussi vite. Il y a peu de commentaires par rapport au montant des dons et ce n’est pas normal. De plus il y a beaucoup de commentaires qui sont redondants. »

Voici la liste des curieux phénomènes qui ont été observés sur l’évolution de la cagnotte FDO et qui ont donné lieu à cette hypothèse de l’usage de bots:

  1. Donations régulières durant la nuit
  2. Tracé des courbes des montants cumulés de la cagnotte et du nombre de contributeurs linéaires pendant de nombreuses heures
  3. Répétition des commentaires et donations

Le point 3 est déjà couvert par Libé Checknews et github et twitter, aussi nous laisserons ce point de côté.

Concernant les points 1 et 2, voici ce que Yetiblog et d’autres observateurs indépendants ont constaté (cliquer pour agrandir):

Reproduction du tracé du blog Les-Crises.fr https://www.les-crises.fr/la-cagnotte-leetchi-de-soutien-aux-forces-de-lordre/

 

Reproduction du tracé de Yetiblog https://yetiblog.org/archives/14328

 

Reproduction du tracé du compte Twitter « L’Élite voit tout » https://twitter.com/EPrivilegie/status/1083126705068351493

Reproduction d’un autre tracé sur une durée plus longue du compte Twitter « L’Élite voit tout », où l’on constate encore mieux la quasi-linéarité lors de la nuit du 10 janvier https://twitter.com/EPrivilegie/status/1083703459055132673

La plateforme Leetchi a expliqué tous ces points par une charge trop importante de donations que leurs serveurs n’aurait pas supporté, ce qui aurait allongé le temps de traitement des donations et provoqué des bugs (cliquez pour agrandir):

MAJ 24/02/2019: Leetchi a écrit un billet pour détailler les diverses difficultés qu’ils ont rencontré durant cette période et visant à décortiquer les « théories du complot ». Néanmoins, la quasi-linéarité de la courbe des montants de donation n’y est pas abordée, ne soumettant que le même argument précédemment avancé (surcharge du serveur) pour expliquer toutes les « étrangetés ».

Nous nous proposons de revisiter cette controverse sous un autre angle: celui de la science. En particulier, par l’intermédiaire d’une simulation du scénario de surcharge d’une plateforme de donation telle que Leetchi, afin de constater si l’hypothèse d’une surcharge serveur suffit à expliquer les points 1 et 2.

La simulation

Il y a une littérature scientifique bien étayée concernant la théorie des files d’attente, ou Queueing theory, domaine d’étude spécialisé dans les scénario comme celui auquel a dû faire face Leetchi.

Il existe de nombreux modèles, et il serait trop long ici d’en faire la liste. Il s’agit ici de créer un modèle simple, qui modélise en général très bien les phénomènes de file d’attente. Le choix du modèle est donc crucial pour la validité des résultats, mais il existe quelques modèles très répandus en théorie des files d’attente qui fonctionnent très bien pour la majorité des scénarios.

  • Voici les axiomes que nous avons choisi pour notre modèle:
    file d’attente FIFO (first-in-first-out): le modèle le plus simple d’organisation d’une file d’attente, c’est-à-dire « premier arrivé, premier servi ».
  • arrivée des donateurs selon la loi de Poisson (= évènements indépendants dans le temps): loi la plus courante pour modéliser l’arrivée d’éléments dans une file d’attente.
  • montants des donations selon une loi Gamma (= en général autour de 30 euros par donation mais minimum 0 euros et quelques donations des magnitudes plus hautes, par exemple 1000 euros, selon les moyens du donateur). Cela suit les résultats d’une étude de 2013 par Gottesman et al pour laquelle de telles lois/distributions à long traine sont appropriées pour modéliser les tracés de donations de plusieurs institutions de charité (ici article de vulgarisation Wired).

Pour les valeurs initiales des paramètres, nous avons dérivé les valeurs depuis les graphiques de YetiBlog (faute de pouvoir trouver les données sous forme tabulaire – comme un fichier csv ou excel – néanmoins ces valeurs semblent assez fiables puisqu’observées par plusieurs observateurs indépendants, voir graphiques ci-dessus).

Le résultat est une simulation interactive de file d’attente de donation quand le serveur est en surcharge, que vous pouvez consulter et observer de façon dynamique (en changeant les paramètres), n’hésitez donc pas à explorer vous-mêmes la simulation et l’impact de chaque paramètre, dont nous n’avons pas exploré toutes les combinaisons.

La simulation est accessible ici: https://mybinder.org/v2/gh/arover6/leetchi-fdo-simulator/master?filepath=leetchi-fdo-simulator.ipynb

Pour la lancer, cliquez dans le menu en haut « Cell » puis « Run All », et descendez tout en bas de la page, vous verrez les figures et les contrôleurs de paramètres.

Et le code source ici: https://github.com/arover6/leetchi-fdo-simulator

Analyse

On observe que la surcharge serveur allonge effectivement le temps de traitement des donations, mais pas la forme de la courbe des montants: quelque soit la capacité du serveur, cela ne change pas la courbe, on ne fait que l’étirer dans le temps. On peut faire une analogie avec un zoom d’image: cela étire la forme, mais sans la changer, une courbe ne devenant pas une droite sous l’effet d’un zoom. Voici ce que ça donne en simulation, en variant la capacité du serveur, c’est-à-dire le nombre de donations qui sont traitées à chaque instant (courbe en bleu):

Nota bene: à partir d’à peu près 30/40 donateurs traités par minute dans notre simulation, il n’y a plus de file d’attente. D’après les histogrammes de Les-Crises.fr il semble que c’était exactement le nombre de donateurs traités par Leetchi pendant la surcharge. Cela peut sembler étonnant mais c’est normal: nous nous basons sur le relevés fait pendant la surcharge, en d’autres termes qui incluent déjà la surcharge, donc nous ne connaissons pas exactement à quel moment les donateurs sont arrivés, nous ne faisons que simuler une surcharge plus importante que celle qui existait déjà afin d’observer l’impact. Néanmoins, cette capacité semble faible étant donné leur infrastructure informatique supposée.

On observe aussi que la courbe du nombre des donateurs est quasi-linéaire, ce qui reflète la limite de capacité du serveur: seul un nombre fixe de donations peut être traité à chaque pas de temps, d’où une courbe du nombre de donateurs linéaire (courbe en orange).

Autre observation: pour une distribution Gamma des montants de donation avec une « échelle d’écart entre le plus petit montant et le plus grand » assez important (exemple: montant moyen 30 euros mais le plus grand est 1500), la courbe des montants de donation n’est jamais quasi-linéaire. Cela est dû à l’arrivée des gros montants de donation à certains moments dans le temps. En revanche, si cette échelle est plus petite, c’est-à-dire si l’écart entre le plus petit montant et le plus grand est réduit (exemple: montant moyen est 30 euros et le plus grand 100 euros), alors la courbe des montants de donation devient quasi-linéaire (courbe en bleu):

De même, en utilisant une distribution uniforme ou gaussienne, on obtient une distribution quasi-linéaire (courbe en bleu):

Ce modèle peut donc s’avérer faux à cause d’une de ces trois axiomes. Voyons pour chacun ce que cela impliquerait:

  1. File d’attente pas FIFO: dans ce cas, la file d’attente ne préserve pas la forme initiale de la courbe des montants des donations. Néanmoins, toute autre organisation ne rendrait pas plus linéaire, mais au contraire: par exemple si on prioritise les petites donations, ou au contraire les grosses donations d’abord par rapport au montant, on se retrouverait avec des sauts de valeurs plus grands (car on traite les petits et les grandes donations séparément, on les regroupe donc, ce qui les accumule et accroissent l’effet des grandes donations). Il y a de nombreux autres modèles de file d’attente, mais il n’y en a aucune à ma connaissance qui ne produise un effet de lissage sur les valeurs, à part une: il faudrait regrouper les donations pour qu’à chaque pas de temps, on regroupe les donations dont le montant tendent vers la moyenne. C’est non seulement couteux à calculer, mais cela ne permet aucunément une meilleure gestion de la charge serveur, donc inutile dans ce cas.
  2. La loi de Poisson suppose que l’arrivée des donateurs est indépendante les uns des autres. Elle est utilisée dans quasiment tous les domaines de modélisation des files d’attente, elle est donc en général tout à fait appropriée pour ce genre de cas de figure. Si cet axiome n’est pas vrai, cela signifie que les donateurs se sont coordinés, et ce de façon importante (car même si quelques individus se sont coordinés, la loi de Poisson tolère cela très bien). Au vu des tracés enregistrés par plusieurs observateurs de la cagnotte Leetchi, qui montre une courbe du nombre des donateurs quasi-linéaire, cela suggère que la loi de Poisson importe peu, puisque dans tous les cas la surcharge serveur ne permet qu’à un nombre fixe de donations d’être traitées à un instant t, on peut donc considérer toutes les arrivées comme indépendantes.
  3. La loi Gamma pour modéliser les montants des donations a été choisie sur intuition, pas sur de précédents travaux. C’est l’axiome le plus faible parmi les trois, les autres étant très couramment utilisées et documentées pour ce genre de scénario. Néanmoins, c’est un axiome raisonnable: elle est soutenue par une précédente étude, et intuitivement celle-ci modélise la répartition des richesses dans la société (beaucoup ont peu et peu ont beaucoup, le modèle Rich Club ou loi Zipf), et la loi Gamma a été choisi pour refléter cela dans les donations. Comme nous l’avons observé, ce paramètre peut modifier la linéarité de la courbe des montants de donation, soit avec une échelle plus petite, soit avec une autre distribution (normale ou uniforme). Il y a donc deux hypothèses à l’observation d’une quasi-linéarité qui serait due au choix de la loi de distribution: soit la loi Gamma est correcte mais l’échelle est petite sur la cagnotte FDO (c’est-à-dire qu’il y a beaucoup de donateurs ayant tous donnés dans la même tranche), soit une autre loi de distribution modélise mieux la cagnotte, comme les lois Normale ou Uniforme, mais celles-ci supposent une distribution des montants qui ne parait pas intuitivement réaliste: pour ces deux lois, il n’y a aucune donation « riche », le maximum étant limité au double du montant de la donation moyenne. En effet, ces deux lois sont paramétrées par le montant de la donation moyenne et le nombre de donateurs, deux paramètres connus. Voici une simulation montrant la distribution des montants sur une échelle logarithmique selon ces trois lois (observez la deuxième figure, qui est l’histogramme de répartition des montants selon une échelle logarithmique, pour chaque loi et pour des échelles différentes):

Comme vu plus haut, les points 1 et 2 n’ont donc soit aucune influence (surcharge serveur rendant les arrivées indépendantes) soit sont optimistes (file d’attente FIFO préservant la forme, tout autre modèle accroissant la non-linéarité). Le seul point permettant d’obtenir une quasi-linéarité est de changer la distribution des montants, notamment avec une loi Uniforme ou Normale au lieu d’une loi Gamma, ou en réduisant l’échelle des écarts de la loi Gamma. Il existe une autre possibilité, comme le note l’étude de Gottesman: la distribution ne suit aucune de celles ici testées. En pratique, la distribution réelle des données suit rarement parfaitement un modèle, mais il serait étonnant ici que ce soit ce cas-ci, étant donné le précédent de l’étude de Gottesman, et l’indépendance apriori des donateurs (qui ne se coordonnent pas sur le montant qu’ils donnent), renforcé par la capacité serveur limitée qui renforce cette indépendance.

Concrètement, ça veut dire quoi?

Revenons aux hypothèses avancées par les partisans et les détracteurs au succès fulgurant de cette cagnotte:

  1. soit c’est un engouement populaire, une vague de petits donateurs faisant des dons d’un montant similaire
  2. soit c’est surtout des gros dons de riches donateurs
  3. soit ce sont des donations automatisées (des bots)

Notre simulation montre que la deuxième hypothèse, une influence prépondérante de riches donateurs, est impossible étant donné la quasi-linéarité de la courbe des montants.

En effet, même s’il y a pu y avoir une poignée de riches donateurs, ils n’ont eu qu’une influence minime sur la cagnotte, soit car les montants n’étaient pas si différents de la moyenne (d’environ 27 euros par don), soit car ils étaient très peu nombreux. Il reste donc soit la 1e soit la 3e hypothèses.

Cette question pourrait être en grande partie résolue par la publication d’un histogramme des montants (comme la 2e figure de notre simulation), sans que cela ne soit un risque pour la vie privée (c’est une donnée agrégée et donc pas une information personnelle selon les définitions de la RGPD). Ce serait souhaitable afin de terminer ces débats qui soit minimise la mobilisation populaire dans le 1e cas (et donc la contribution d’une dizaine de milliers de donateurs!), ou fausse cette mobilisation dans le 3e cas. À noter que la 1e hypothèse serait étonnante comme l’ont fait remarqué certains observateurs, étant donné qu’il y a eu très peu de recherches Google sur cette cagnotte pendant cette période, ce qui signifierait que l’énorme majorité des donateurs auraient entré l’adresse directement ou auraient suivi un lien (et encore, même lorsqu’il y a des liens, un grand nombre de visiteurs cherchent toujours par un moteur de recherche, même en présence de liens), ce qui semble donc extrêmement improbable dans les 24h.

Pour le moment, Leetchi a annoncé augmenter le délai de rafraichissement des cagnottes à 30 minutes, ce qui est parfaitement inutile d’un point de vue technique (un taux de rafraichissement toutes les minutes voire toutes les 5 minutes aurait eu le même effet en termes de diminution de surcharge), sans compter qu’il est étonnant que la fonction d’affichage des montants des cagnottes puisse impacter le système de traitement des dons, aussi peut-on se demander si ce choix ne serait pas plutôt une façon d’empêcher de futures observations de l’évolution de la cagnotte.

Conclusion

La surcharge serveur explique certainement l’étirement dans le temps (et donc les contributions régulières durant la nuit) et l’évolution du nombre de donateurs de façon quasi-linéaire, mais pas la quasi-linéarité du tracé des montants, qui reflète la distribution des donations elles-mêmes sans impact de la capacité du serveur, et qui semblent suivre une distribution qui ne paraît pas intuitivement réaliste, car la quasi-linéarité signifie qu’il n’y a pas de donation bien plus grande que la moyenne (exemple, pas ou très très peu de donation à 1000 euros).

En d’autres termes, d’après les résultats de notre simulation, la quasi-linéarité de la courbe des montants ne peut s’expliquer que par des donations concentrées autour de la moyenne, ne tolérant que peu ou pas de montants extrêmement plus grands, ce qui exclut une influence prépondérante de riches donateurs.

MAJ 24/02/2019: Notons que Leetchi a depuis cette analyse communiqué le nombre total de donateurs, soit 50 829, et la cagnotte a été remise, d’un montant total de 1.4 millions d’euros. Un calcul rapide nous donne donc la moyenne finale d’approximativement 28 euros par donation, ce qui est similaire à la moyenne de notre échantillon. La moyenne ne permet néanmoins pas de se prononcer si l’évolution de la cagnotte a suivi une même courbe quasi-linéaire, mais elle indique que la tendance a pu être similaire.

Il reste les hypothèses d’un engouement populaire ou d’une inflation automatisée, ce qui pourrait être clarifié par une publication d’un histogramme des montants par la plateforme Leetchi, voire un relevé du montant et du timestamp de chaque donation pour analyse par un tiers (cette dernière option étant la plus objective et permettant de vérifier si les donateurs sont arrivés selon une loi de Poisson et de recouper l’information avec les informations tierces telles que Google Trends). Étant donné la précédente étude scientifique ne trouvant pas une distribution des montants de donation linéaire, le contexte et les éléments relevés par d’autres observateurs (volume de recherches Google très bas rendant peu vraisemblable un engouement public mais n’exclut pas un engouement sur des canaux privés comme sur les réseaux sociaux comme celui de la Team Macron sur Telegram, pratiques anti-légales, non-respect de leurs CGU, la possibilité d’automatisation de donations et même de création d’utilisateur via l’API comme sur d’autres plateformes), notre simulation confirme que le doute semble bien fondé et nécessite des preuves de bonne foi pour être dissipé.

Suite à cette polémique, et par égard envers les donateurs, il est vivement souhaitable que Leetchi fournisse des preuves éclaircissant la répartition réelle des montants de donation.

 

MAJ 24/02/2019: ajout du billet de réponse de Leetchi sur les « théories du complot« .

MAJ 25/02/2019: ajout de la citation de Fabrice Epelboin pour public-senat.fr et reproduction des graphiques du tracé des courbes de donations.

Le texte de cet article est sous license Creative Commons Attribution 4.0 International (CC BY 4.0). Les images sont les propriétés de leurs auteurs tels qu’indiqués en description ici ou sur la page liée.