Autour de la stylométrie appliquée à des sources anciennes… 3

Voici le troisième épisode de la série de billets consacrée à la stylométrie. Le deuxième épisode s’est terminé sur la conclusion que le texte oprhelin doit être attribué à Raoul de Caen. Nous allons à présent décortiquer les résultats obtenus par l’ACP en termes de variables, puis estimer l’impact sur ceux-ci d’un paramètre clef de la méthode, le nombre de lemmes à considérer dans chaque paquet de lemmes.

Résultats de l’ACP : les variables

Comme nous l’avons déjà vu, les deux composantes principales que nous avons utilisées pour visualiser nos paquets de lemmes sont des résumés des fréquences associées aux lemmes qui apparaissent dans les textes considérés. Néanmoins, tous les lemmes n’ont pas une importance égale dans ces deux composantes : certains sont très utiles pour expliquer les différences entre nos points (leur contribution est grande), d’autres beaucoup moins (leur contribution est petite).

Le tableau suivant donne les dix contributions les plus importantes :

lemme contribution
et 34.81 %
is 9.73 %
dominus 8.15 %
qui 7.20 %
in 3.74 %
hic 3.57 %
sum 1.85 %
rex 1.15 %
Christianus 1.00 %
se 0.91 %

 

 

 

 

 

Techniquement, ces contributions correspondent à la part de la variance totale à laquelle correspondent les variances des variables considérées (ici, des fréquences centrées de lemmes). Cela signifie donc que la variance du lemme et représente 34.81 % de la variance totale expliquée, ce qui est énorme.

Si ce tableau nous permet d’évaluer l’importance générale de chaque lemme dans l’ACP, il ne dit rien sur l’impact des lemmes. Je m’explique : certes, la fréquence de et est la variable la plus importante, mais comment se retrouve-t-elle sur les deux composantes principales que nous représentons sur nos graphiques en nuage de points ?

Pour répondre à cette question, on peut tracer un graphique de corrélation :

On observe sur ce graphique que la flèche et :

  1. pointe dans la direction positive de chacun des deux axes ;
  2. pointe de manière plus marquée dans la direction (horizontale) de la CP n° 1 que dans celle (verticale) de la CP n° 2 : et contribue plus à la première qu’à la deuxième.

Cela signifie que si un paquet de lemmes possède une fréquence et importante, il sera plutôt situé à droite du graphique (forte corrélation positive de la fréquence et avec la CP n°1, sur l’axe horizontal), et un peu en haut (corrélation positive de la fréquence et avec la CP n°2, sur l’axe vertical1).

Cette conclusion est cohérente avec ce que nous observons sur le nuage de points. En effet, on voit sur celui-ci que les paquets de lemmes de Raoul sont plutôt situés à gauche du graphique, ceux d’Albert plutôt à droite et ceux de Guillaume plutôt au milieu. Or, rappelez-vous, nous avions calculé, dans le premier billet de cette série, les fréquences totales de ce lemme pour l’ensemble de l’œuvre de chacun des trois auteurs :

Raoul de Caen Albert d’Aix Guillaume de Tyr
et 2,91 % 7,49 % 5,41 %

Puisque la corrélation entre la fréquence et et la CP n° 1 est positive, la “hiérarchie” qu’induisent ces fréquences totales (Raoul de Caen < Guillaume de Tyr < Albert d’Aix) se retrouve sur l’axe horizontal du nuage de points1.

L’impact du lemme rex sur les deux CP est de la même nature, même si la taille de la flèche (et donc l’importance de l’impact) est bien moindre :

D’autres lemmes contribuent négativement aux composantes principales, ou à l’une des deux. C’est par exemple le cas de hic :

La flèche pointe dans la direction positive selon l’axe horizontal, mais dans la direction négative selon l’axe vertical. Cela signifie donc qu’un paquet de lemmes dont la fréquence hic est importante est “tiré” vers le bas et vers la droite du graphique. Il n’est pas forcément situé dans le cadran sud-est, parce que tous les lemmes “tirent” le paquet de lemmes dans une direction qui leur est propre. Le lemme hic, qui possède une contribution totale modeste (3.57 %), en tout cas par rapport à celle de et, n’est donc pas “le seul à avoir son mot à dire” (sans mauvais jeu de mots) quant à la position du point en question sur le nuage de points.

Souvent, on représente plusieurs variables/lemmes en même temps sur le graphique de corrélation (ici les 10 lemmes les plus importants en termes de contribution totale, puisqu’afficher les flèches des 8.743 lemmes rend le graphique illisible) :

On trace aussi souvent un biplot, qui est la superposition du nuage de points et du graphique de corrélation :

Ce biplot permet de voir quelles variables ont “tiré” les paquets de lemmes jusqu’à l’endroit où ils sont situés. En particulier, on peut considérer les lemmes des flèches qui pointent dans la direction des paquets de lemmes d’un auteur comme une “caractéristique particulière” de cet auteur. Ainsi, on conclut que, au sein des trois auteurs, Guillaume est celui qui a le plus tendance à utiliser les lemmes dominus, is et qui. Il faut néanmoins rester prudent avec ce genre de conclusions, puisque nous ne prenons ici en compte que dix lemmes, alors que 8743 sont pris en compte par l’ordinateur pour tracer cette représentation.

La taille des paquets de lemmes considérés

Dans les billets précédents, j’ai fait le choix arbitraire de calculer les fréquences de chaque lemme dans des paquets de 2500 lemmes successifs. Que deviennent nos résultats lorsqu’on modifie ce paramètre de l’analyse ?

Augmenter la taille des paquets de mots a deux effets. D’une part, les fréquences qui sont calculées constituent de meilleures estimations de la fréquence d’utilisation générale du lemme par l’auteur, et on peut donc considérer que le résultat est plus précis. D’autre part, le nombre de paquets de lemmes (c’est-à-dire le nombre de points représentés sur le graphique) diminue. En considérant des paquets de 5000 lemmes, on obtient ainsi :

À première vue, la conclusion qu’on peut tirer de ce nouveau graphique semble plus tranchée qu’avant, plus nette. Mais il faut observer ici que le texte orphelin n’est plus représenté que par un seul point, ce qui signifie que nous n’avons plus aucune idée de la variabilité interne des fréquences des lemmes qui le composent. Il n’est donc sans doute pas pertinent de monter jusqu’à 5000 lemmes.

Que se passe-t-il lorsqu’au contraire on diminue la taille des paquets ? Le phénomène est l’inverse de celui que nous venons d’observer : d’une part les estimations de fréquences sont moins précises, d’autre part nous disposons de plus de points. On voit ainsi les trois nuages de points correspondants à nos trois auteurs se rapprocher puis se confondre, lorsqu’on considère des paquets de 1000 lemmes, 500 lemmes, 250 lemmes puis 100 lemmes :

Au fur et à mesure que les groupes de points se rapprochent, la conclusion d’attribution de notre texte orphelin à Raoul de Caen devient de moins en moins convaincante, pour finir par s’effondrer tout à fait !

Il est donc nécessaire de choisir la taille des paquets de lemmes considérés avec précaution : trop grande, elle empêche d’avoir une idée de la variabilité interne ; trop petite, elle ne permet tout simplement pas de conclure. Sur ce sujet précis, le lecteur intéressé consultera l’article de Maciej Eder dont les références figurent ci-dessous.


Dans le prochain épisode, nous verrons d’autres techniques d’analyse stylométrique, qui ne sont, quant à elles, pas liées à la visualisation des paquets de lemmes.

La suite au prochain épisode…

Notes

  1. Cet effet est visible directement parce que la contribution du lemme et est très importante. Pour un lemme dont la contribution est moins importante, l’effet n’est pas forcément visible aussi clairement. (retour a, retour b)

Pour en savoir plus

  • M. Eder, “Does size matter? Authorship attribution, small samples, big problem”, Literary and Linguistic Computing, vol. 30, n° 2, p. 107-121, 2015.

Autour de la stylométrie appliquée à des sources anciennes… 2

Voici le deuxième épisode de la série de billets consacrée à la stylométrie. Nous en étions restés sur un résultat peu satisfaisant et sur la conclusion qu’il était idiot de considérer les fréquences d’apparition de deux mots seulement… mais comment visualiser conjointement les fréquences de 10 mots, de 20 mots, de 150 mots, ou même de l’ensemble des 8743 mots distincts qui apparaissent dans nos quatre textes ?

L’analyse en composantes principales

Heureusement, nous avons à notre disposition une technique statistique pour nous venir en aide : l’analyse en composantes principales (ACP). L’idée de celle-ci est de résumer un grand nombre de variables en un plus petit nombre de nouvelles variables de manière efficace. Le résumé est optimal en termes de l’explication de la variabilité des données sur lesquelles on travaille, c’est-à-dire en termes de l’information que ces données contiennent. Dans le cas qui nous occupe, la variabilité des données est très importante, puisque c’est ce qui permet de distinguer les différents paquets de lemmes les uns des autres.

De plus, le résumé prend une forme particulièrement agréable. En effet, alors que les anciennes variables sont corrélées entre elles, ce qui signifie que l’information qu’elles transportent est « partiellement redondante », les nouvelles variables sont décorrélées entre elles : l’information qu’elles transportent n’est pas redondante.

Pour mieux comprendre comment l’ACP fonctionne, considérons le cas particulier d’un résumé de deux variables en une variable. Ce résumé peut être vu géométriquement comme une projection de l’ensemble du plan (dimension 2) sur une droite (dimension 1). Ainsi, nous partons de deux variables, ici, les fréquences des lemmes et et qui :

Avant toute chose, nous centrons ces variables, c’est-à-dire que nous leur soustrayons leur moyenne, histoire qu’elles soient situées « au centre des axes » ; le nuage de points ne change pas de forme, il est seulement translaté (déplacé) :

Nous pouvons maintenant projeter le nuage de points sur une droite quelconque, de la même manière que le soleil projette l’ombre d’un objet sur un mur. Commençons avec l’exemple d’une projection sur une droite horizontale, plus facile à visualiser :

Les petits carrés oranges constituent la projection des points noirs sur la droite horizontale. On peut donc se débarrasser des deux anciens axes et ne considérer que la droite horizontale sur laquelle la projection a été effectuée :

Celle-ci est une nouvelle variable, qui résume les deux variables dont nous sommes partis. Il est bien entendu possible d’effectuer des projections sur d’autres droites, pas forcément horizontales :

Conceptuellement, les deux projections (la première sur la droite horizontale, la seconde sur la droite à pente positive) sont très similaires. Cependant, elles ne sont pas aussi efficaces l’une que l’autre du point de vue du « résumé de l’information de départ » qu’elles produisent :

Les points de la première projection (à gauche ci-dessus) sont plus espacés que ceux de la deuxième (à droite) : elle a « mieux résumé » l’information de départ (qui consiste en des points présentant des différences entre eux) et elle est donc plus efficace. En termes techniques, la variance des points résultant de la première projection est supérieure à celle des points résultant de la seconde.

Le choix des deux droites présentées ci-dessus est bien entendu arbitraire, et il est possible d’effectuer des projections sur n’importe quelle droite du faisceau de droites du plan :

Quand on a compris l’idée des projections, le principe de l’analyse en composantes principales est clair : cette technique sélectionne la droite qui est optimale en termes de « résumé de l’information », c’est-à-dire en termes de variance des points projetés. Sans rentrer dans les détails techniques, mentionnons simplement que la direction en question est celle du premier vecteur propre de la matrice de corrélation (ou de la matrice de covariance) des données originales.

Dans le cas du nuage de points considéré en exemple, la droite sélectionnée, qu’on appelle première composante principale, est la suivante :

La seconde composante principale est ici la droite perpendiculaire à la première composante principale :

C’est cette seconde composante principale qui transporte « le reste de l’information », que la première composante principale n’a pas capté. On peut quantifier la proportion de « résumé de l’information » transporté par chacune d’elle :

Presque 85% de l’information est donc portée par la première composante. Puisque celle-ci est optimale de ce point de vue, nous sommes assurés de ne pas pouvoir trouver de projection qui transporte plus d’information. Ce pourcentage est très important, puisqu’il nous dit que nous ne perdons que 15% de l’information si nous ne considérons que la première composante et oublions la seconde, c’est-à-dire si nous résumons nos deux variables en une.

Cette première composante principale est une sorte de « mélange » des deux variables de départ. Dans notre cas, pour savoir où un point du nuage de points initial est situé sur la première composante, il suffit d’appliquer la règle

PC1 = -0,93 ∗ freqCentr(et) + 0,34 ∗ freqCentr(qui)

Cette équation exprime en termes mathématiques que PC1 est un mélange (ou, pour être plus rigoureux, une combinaison linéaire) de freqCentr(et) et freqCentr(qui).

Par exemple, le point situé aux coordonnées (-0,84 % ; 1,84 %) dans le système des deux variables de départ (et qui correspond donc à un paquet de mots — ou, pour être plus précis, de lemmes — au sein duquel la fréquence centrée de et est égale à -0,84 % et la fréquence centrée de qui est égale à 1,84 %) sera situé à

PC1 = -0,93 ∗ (-0,84 %) + 0,34 ∗ 1,84% = 1,4 %

sur la première composante principale.

Que se passe-t-il lorsqu’on projette non pas deux variables sur une, mais par exemple trois variables sur deux ? Cette opération est elle aussi aisément visualisable : nous effectuons maintenant la projection d’un nuage de points de dimension trois sur un plan de dimension deux. Par exemple, dans le cas du plan horizontal :

Résultats

L’analyse en composantes principales que nous mettons en œuvre pour effectuer notre analyse stylométrique des récits de croisade est bien plus difficile à visualiser, puisque nous projetons cette fois 8743 variables (c’est-à-dire les fréquences relatives à l’ensemble des lemmes qui apparaissent dans les quatre textes) sur deux variables1 ! Cela signifie donc que nous résumons un espace de dimension 8743 à l’aide d’un espace de dimension 2. Inutile de dire que le processus ne peut cette fois pas être représenté graphiquement.

Néanmoins, on peut représenter son résultat, dans un plan (donc en dimension 2) puisque nous avons choisi de projeter sur deux variables (c’est d’ailleurs la raison de ce choix) :

 

Dans ce cas, la première composante principale porte 27 % de l’information, et la seconde 11 %. Nous avons donc « oublié » 62 % de l’information contenue dans nos données de départ, mais un coup d’œil rapide au graphique ci-dessus permet de se rendre compte que notre but est atteint.

En effet, on voit que, même en négligeant presque 2/3 de l’information de départ, nous pouvons affirmer que les triangles mauves, qui représentent les paquets de lemmes du texte orphelin, sont situés « loin » des disques rouges et des carrés verts, qui représentent respectivement les paquets de lemmes de Guillaume de Tyr et d’Albert d’Aix. Cette observation nous permet de conclure, en faisant l’hypothèse que l’auteur du texte orphelin est forcément parmi les trois candidats-auteurs sélectionnés, que c’est à Raoul de Caen qu’il faut attribuer la paternité de notre fragment-mystère. Et c’est effectivement le cas : pour les besoins de l’exemple présenté ici, j’ai « fabriqué » le texte orphelin en allant piocher quelques chapitres de l’œuvre de ce chroniqueur et en les réunissant sous l’étiquette « auteur inconnu ».

Il me semble nécessaire d’insister ici sur ce qui peut passer pour un détail méthodologique mais qui revêt une importance capitale : nous ne concluons pas que le texte est de Raoul de Caen parce que les triangles mauves sont situés au même endroit que les carrés turquoises, mais bien parce qu’ils sont éloignés des disques rouges et des carrés verts et que notre liste ne compte que trois candidats-auteurs. En effet, comme nous avons perdu une partie de l’information en résumant nos variables, et comme cette information consiste en les différences entre nos points, nous ne pouvons pas nous fier aux similitudes. Deux points situés tout près l’un de l’autre dans le résumé sont peut-être situés loin l’un de l’autre dans les données de départ. Par contre, si deux points sont situés loin l’un de l’autre dans le résumé, ils le sont aussi dans les données de départ. Il est donc bon de garder en tête cette règle d’or de l’analyse en composantes principales :

Avec une ACP, on peut se fier aux dissemblances, mais pas aux similitudes.

On pourrait traduire celle-ci en termes stylométriques :

L’ACP ne permet d’identifier l’auteur d’un texte qu’en éliminant tous les éléments d’une liste exhaustive de candidats-auteurs, à l’exception d’un seul.

Cela implique qu’il est nécessaire de disposer, pour effectuer une attribution stylométrique parfaitement rigoureuse, d’un ensemble d’auteurs potentiels pour le texte étudié, au sein duquel le véritable auteur se trouve forcément. Dans énormément de cas, une telle liste n’existe tout simplement pas, et il faut donc faire preuve de circonspection. J’espère avoir l’occasion de discuter ce point précis sur ce carnet dans le futur.

Dans le prochain billet, nous explorerons certains des « paramètres » de l’ACP que nous avons mise en œuvre ici, comme la taille des paquets de mots considérés.

La suite au prochain épisode…

Notes

  1. Ce choix n’est certainement pas optimal : non seulement il est souvent mieux de choisir un nombre limité de lemmes parmi ceux qui apparaissent le plus fréquemment, mais d’autres critères de choix interviennent aussi, comme la nature grammaticale de ces lemmes. Il est en effet souvent plus intéressant de ne pas considérer les lemmes qui portent un sens en eux-mêmes, comme les noms, les adjectifs, les verbes ou les pronoms, et de se restreindre aux stop words. Nous aurons l’occasion de discuter plus en détails cet aspect de l’analyse dans un billet prochain (retour).

Pour en savoir plus

  • Neat, T. et al, “Surveying Stylometry Techniques and Applications”, in ACM Computing Surveys 50, n° 6 (2017), p. 1-36.
  • Stamatatos, E., “A survey of modern authorship attribution methods”, in Journal of the American society for information science and technology 60 (2009), p. 538-556.

Autour de la stylométrie appliquée à des sources anciennes… 1

Cette année, j’ai décidé de consacrer quelques billets sur ce carnet de recherche à la stylométrie, dans lesquels je tenterai de me poser certaines questions à propos des tenants et des aboutissants des méthodes qu’on range sous ce terme, avec le point de vue de non-spécialiste qui est le mien.

Avant de discuter d’éléments plus ou moins précis, il me semble utile de donner une présentation générale (mais bien entendu limitée) de ces techniques. Je reprendrai pour ce faire un petit cas d’étude artificiel que j’avais présenté lors d’un atelier co-organisé par le SMCS et le CENTAL, de l’UCLouvain en mai 2018.

Le principe de la stylométrie

La stylométrie est un ensemble de techniques à l’intersection de la linguistique et de la statistique, dont le but est d’identifier le style de documents textuels. Le style d’un texte est caractéristique de son contexte d’écriture au sens large : son auteur, son époque, son « genre », …

La stylométrie tente de montrer qu’un texte est écrit dans un style différent d’une collection d’autres textes. Cette différenciation permet donc, dans une certaine mesure, de déterminer si un « anonyme » a été écrit par un auteur précis, et surtout de déterminer si un texte n’a pas été écrit par un auteur précis… nous allons étudier un tel exemple infra !

La stylométrie est ici appliquée à des ouvrages anciens, mais est aussi appliquée à des textes actuels, comme des emails, des tweets, etc.

Les techniques appliquées aujourd’hui en stylométrie sont variées, et différent notamment par la méthode statistique qui est utilisée (analyse en composante principale, clustering, analyse des réseaux, …) et le « niveau » de discours sur lequel on travaille (caractère, mot, phrase, etc.).

Notons cependant qu’une analyse stylométrique mélange bien souvent diverses méthodes statistiques et plusieurs « niveaux » du texte.

Nous allons dans un premier temps considérer un exemple mettant en œuvre une analyse en composantes principales au niveau lexical (basée sur les mots).

Les débuts

La première trace d’une analyse stylométrique provient d’une lettre du logicien anglais De Morgan au révérend Heald (1851) : pour déterminer si deux passages des évangiles sont du même auteur, il propose de

« déterminer […] si le premier texte est formé de mots plus longs que le deuxième texte. […] Un de ces jours, les écrits apocryphes seront identifiés de cette manière. »

L’idée de comparer les longueurs des mots a été appliquée par le physicien américain Mendenhall en 1887 aux œuvres de Bacon, Marlowe et Shakespeare, sans résultat.

Il a fallu attendre les années 1930 pour que l’étude quantitative du style soit reprise, avec les travaux du linguiste américain Zipf et du statisticien écossais Yule, consacrés aux distributions des fréquences de mots.

Après la guerre, les premiers résultats positifs apparaissent :

  • en 1959, Cox et Brandwood parviennent partiellement à ordonner chronologiquement les écrits de Platon ;
  • en 1962, Ellegärd parvient à écarter plusieurs candidats-auteurs des Lettres politiques de Junius (pamphlets anonymes contre le gouvernement anglais de 1769-1772) ;
  • en 1964, Mosteller et Wallace parviennent à répartir les Federalist papers (publications anonymes de 1787-1788 enjoignant les citoyens américains à ratifier la constitution) entre les trois auteurs Hamilton, Jay et Madison.

Cette dernière étude a convaincu la communauté scientifique de l’intérêt de la stylométrie : elle marque le point de départ d’une série très fournie d’études de textes très divers, souvent passionnantes.

Notons que certaines de ces études ont défrayé la chronique et retenti comme de véritables scandales, notamment à cause de problèmes méthodologiques. J’espère pouvoir revenir sur quelques-unes d’entre elles dans un billet prochain.

Première analyse naïve de fréquence

Considérons à titre d’exemple le problème suivant. Supposons que nous ne connaissons pas l’auteur d’un texte (que nous appellerons « texte orphelin ») qui constitue une partie de récit de la première croisade1.

Nous avons en tête trois candidats-auteurs, qui sont tous les trois des chroniqueurs latins de la première croisade (1096-1099) :

Nom Raoul de Caen Albert d’Aix Guillaume de Tyr
Chronique Gesta Tancredi in expeditione Hierosolymitana Liber Christianæ expeditionis pro restitutione sanctæ Hierosolymitanæ ecclesiæ Historia rerum in partibus transmarinis gestarum
Nombre de mots 28.553 117.179 240.168
Rédaction 1112 – 1118 1125 – 1150 1170 – 1184

Une première idée pour tenter de trancher entre ces trois auteurs est de regarder les mots qui reviennent le plus souvent dans leurs œuvres, et de les comparer avec les mots qui reviennent le plus souvent dans le texte orphelin. Récupérons donc les mots les plus fréquents dans celui-ci :

Rang 1 2 3 4 5 6 7 8 9 10
Mot et in ad nec qui non ut est sed a
Traduction et dans vers et ne pas qui ne pas pour que il est mais par
Fréquence
5,8% 2,5% 1,3% 0,9% 0,8% 0,7% 0,7% 0,5% 0,5% 0,3%

Travailler directement sur les mots n’est cependant pas satisfaisant. On imagine par exemple que le verbe esse, « être », apparaît sous d’autres formes que simplement est (qui correspondent aux autres formes conjuguées), ce qui fausse donc le calcul de fréquence. Les verbes ne sont pas les seuls mots qui subissent une flexion, comme le qui : penser aux noms communs, pronoms, adjectifs, déterminants, …

Le nombre de formes différentes est particulièrement grand en latin, puisqu’il s’agit d’une langue à déclinaisons. Nous devons donc lemmatiser les textes sur lequel nous travaillons (c’est à dire envoyer chaque mot sur sa forme pure, non déclinée ou conjuguée). Avant cela, on tokenise le texte :

Un exemple simple, le mot latin quod, montre que le processus de lemmatisation n’est pas trivial : suivant la place du mot dans la phrase, le « catégoriseur de discours » doit déterminer s’il s’agit du relatif (« lequel »), de l’adjectif (« quelque »), de l’interrogatif (« quel ? »), de l’adverbe (« à ce propos »), de la conjonction (« parce que »), etc. Dans ce cas, le lemmatiseur affecte en général des probabilités aux différentes possibilités.

Pour qu’un lemmatiseur soit efficace pour une langue donnée, il faut l’entraîner sur un corpus de textes déjà lemmatisés, dont les structures grammaticales sont explicitées… construire une tel corpus est un travail monumental ! Pour le latin médiéval, on dispose par exemple de l’Index Thomisticus, qui compte 170.000 tokens pour 9.000 phrases et est basé sur la Summa theologica de Thomas d’Aquin. Mais on imagine aisément des mots qui apparaissent dans certains textes médiévaux mais qui n’apparaissent pas dans la Summa ! Ces mots sont a priori inconnus du lemmatiseur.

Certaines langues sont plus difficiles à lemmatiser que d’autres ; c’est le cas du latin médiéval :

  • certains mots se collent à d’autres, comme le suffixe –que (« et ») et le préfixe se– (renforcement de certains pronoms) ;
  • certaines combinaisons de lettres sont interchangeables, et ce sans aucune cohérence (un même mot peut apparaître sous deux graphies différentes sur une même ligne) :
    ci ↔ ti ch ↔ h ph ↔ f h ↔ Ø
    w ↔ uu ↔ vv ↔ uv ↔ vu i ↔ j ↔ y k ↔ c ↔ ch g ↔ gu

    Le mot chirographum apparaît ainsi sous les graphies alternatives cirographum, chyrographum, cyrographum, chirografum, cirografum, chyrografum et cyrografum ;

  • les textes sont souvent farcis de vernaculaire (par exemple de l’ancien français).

Comme prévu, les résultats diffèrent sensiblement lorsqu’on compare les fréquences des mots et les fréquences des lemmes :

Mot et qui in hic sum ad nec is ille non
Rang après 1 2 3 4 5 6 7 8 9 10
Rang avant 1 5

(qui)

2 19

(haec)

8

(est)

3 4 68

(id)

51

(illi)

6

Il est donc absolument essentiel de lemmatiser le corpus avant d’effectuer des calculs de fréquence !

Nous disposons maintenant de mesures pertinentes de la fréquence d’apparition des lemmes, et pouvons donc comparer notre texte orphelin aux trois textes sources.

Les deux lemmes qui apparaissent le plus souvent sont et et qui :

Raoul de Caen Albert d’Aix Guillaume de Tyr Orphelin
et 2,91 % 7,49 % 5,41 % 3,94 %
qui 2,99 % 2,34 % 3,62 % 3,46 %

Ce résultat ne nous apprend pas grand chose : les statistiques du texte orphelin ne permettent pas de le rapprocher de manière claire de l’un des trois auteurs… La comparaison directe des proportions totales n’est pas satisfaisante !

Elle ne tient par exemple pas du tout compte de la variabilité de ces proportions au sein des corpus considérés. On peut ainsi imaginer que les proportions varient fort au sein des chapitres de chacune des trois œuvres… si c’est le cas, quelle est la pertinence de la comparaison avec la fréquence de l’orphelin ?

Pour tenir compte de cette variabilité, nous pouvons couper les corpus en tranches, et effectuer les calculs de proportion sur chacune d’elles. La taille des tranches doit être bien choisie : si elle sont trop grosses, le problème de variabilité n’est pas résolu ; si elle sont trop petites, la variabilité sera immense et ne signifiera plus grand chose. J’ai choisi ici de grouper les mots par paquets de 2.500.

Nous remplaçons donc une proportion totale :

par les proportions de groupes de 2500 mots :

qu’on peut maintenant comparer pour nos auteurs :

Ce troisième graphe n’est pas très convaincant : les deux points mauves (les paquets de mots de l’orphelin) sont situés à une bonne distance des carrés verts (les paquets de mots d’Albert d’Aix), mais ils sont situés entre les disques rouges (les paquets de mots de Guillaume de Tyr) et les carrés turquoises (les paquets de mots de Raoul de Caen).

Mais la comparaison des fréquences de mots n’a pas dit son dernier mot. Nous n’avons en effet utilisé ici qu’une très faible portion de l’information disponible, puisque nous avons comparé les proportions des deux mots les plus fréquents ! Considérer plus de mots pose toutefois des problèmes… et notamment des problèmes de visualisation : si nous considérons 10 mots, par exemple, comment visualiser les différences entre les corpus, et donc comment espérer effectuer une attribution ? Et pourquoi s’arrêter à 10 mots ? Nous pourrions comparer les fréquences des 8743 mots distincts — ou plutôt des 8743 lemmes distincts — qui apparaissent dans nos textes…

La suite au prochain épisode

Notes

  1. Pour clarifier l’exposé, j’ai considéré ici comme texte orphelin un morceau d’un des trois candidats-auteurs analysés (dont l’identité sera révélée dans le numéro suivant), de sorte que les résultats expriment clairement son attribution. Bien entendu, dans une véritable analyse stylométrique, la paternité du texte orphelin est tout à fait inconnue (retour).

Pour en savoir plus

  • Holmes, D., “The evolution of stylometry in humanities scholarship”, in Literary and Linguistic Computing 13, n° 3 (1998), p. 111-117.

Séminaire : QAMML : une famille de distributions de probabilité pour l’Analyse de Données Fonctionnelles

Ce jeudi 2 mai à 14h le laboratoire Quaresmi aura le plaisir d’organiser son troisième séminaire intitulé : 

QAMML : une famille de distributions de probabilité pour l’Analyse de Données Fonctionnelles, par Étienne Cuvelier.

Les données fonctionnelles deviennent de plus en plus courantes. Ces données peuvent résulter des mesures répétées d’un phénomène au cours du temps, mais aussi lors de la variation d’un paramètre non temporel, comme par exemple une longueur d’onde. Ces données sont l’objet de l’Analyse de Données Fonctionnelles, ou Functional Data Analysis (FDA) en anglais. De telles données peuvent aussi avoir une origine statistique, comme lorsqu’on veut « résumer » le contenu d’une variable en utilisant sa distribution de probabilité, comme c’est le cas en Analyse de Données Symboliques.

Si ce type de données est souvent stocké sous forme discrétisée, c’est à dire sous forme multivariée, ces données sont par nature de dimension infinie. L’approche classique qui, consiste à appliquer des techniques multivariées aux versions discrétisées de ces données, donne lieu à un paradoxe : la minimisation de la perte d’informations lors du stockage, par augmentation de la finesse de discrétisation, est confrontée au fléau de la dimension, à savoir la raréfaction des données lors de l’augmentation de la dimensionnalité. La mise au point d’outils directement conçus pour ce type de données spécifiques que sont les données fonctionnelles est donc impérative. Mais l’infinité dimensionnelle de celles-ci rend difficile la mise au point de ce type d’outils, et c’est particulièrement vrai lors de la construction d’un incontournable en analyse de données : la notion de distribution de probabilité d’une variable aléatoire fonctionnelle.

Dans cet exposé, nous nous attacherons, tout en restant dans le cadre de l’analyse de données, à définir et construire une classe de distributions de probabilités directement définies dans l’espace de dimension infinie dans lequel sont plongées les données fonctionnelles. Cette classe de distributions, dénommées QAMML, est développée en associant un générateur de copule Archimédienne à une moyenne quasi-arithmétique.

Cette nouvelle famille de distributions de probabilités pour données fonctionnelles, nécessite aussi de définir un nouveau type de densité de probabilité, ce que nous faisons en utilisant la dérivée directionnelle de Gâteaux.

Notre approche n’est pas uniquement théorique, car nous illustrons l’utilité de ces distributions en analyse de données en « injectant », telles quelles, les distributions QAMML dans deux algorithmes initialement conçus dans le cadre de l’analyse multivariée : la classification non supervisée par décomposition de mélange et la classification supervisée bayésienne. Nous illustrons aussi l’usage de ces distributions en statistique en construisant des intervalles de confiance fonctionnels. Ces trois « illustrations » étant réalisées sur des données réelles.

Séminaire ouvert à tous. La présentation aura lieu à l’ICHEC, site Anjou, local E103. Pour faciliter l’organisation, merci de vous inscrire auprès de  celine.engelbeen@ichec.be

Au plaisir de vous y voir nombreux.

Quoi, 18° un 15 février ? WTH ?! Et puis quoi, de la neige en avril ?

En avril 2016 un épisode neigeux avait déclenché une foule de messages étonnés sur les réseaux sociaux, certains mettant en doute le réchauffement climatique. L’épisode des températures printanières autour de ce 15 février 2019 a lui aussi engendré pas mal de réactions surprises, certains attribuant cela au même réchauffement global.

Qu’en est-il réellement ? Ces deux épisodes sont-ils si extraordinaires que cela ? Extraordinaire, la température de 18.1 degrés mesurée à Uccle l’est puisqu’elle n’avait jamais été enregistrée depuis 1881 pour un 15 février. Néanmoins, avant de répondre à la question du caractère extraordinaire de ces événements météorologiques, il faut préalablement définir ce que l’on entend par extraordinaire. Certes “l’extraordinaire” n’est pas l’ordinaire mais il y a une différence entre ce qui sort simplement de l’ordinaire (comme le fait de briser une habitude exceptionnellement, pour un anniversaire par exemple) et ce qui semblait inimaginable avant que cela n’arrive, au sens du “Cygne noir” de N.N. Taleb (comme par exemple le “Voyage dans la Lune”  avant l’épisode d’Apollo 11). Essayons donc de distinguer dans lequel des deux cas nous nous trouvons pour les deux records météorologiques concernés.

En fouillant une bonne dizaine de minutes sur le Net j’ai trouvé une base de données libre de droit reprenant des mesures météorologiques pour différentes stations mondiales, donc y compris belges : NCDC Climate Data Online. J’ai choisi de télécharger les données concernant la station de Bruxelles National car c’est celle qui me semble le plus proche d’Uccle dans les stations répertoriées et pour laquelle il y avait le plus de mesures disponibles de 1940 à maintenant. Voyons sur base de ces données ce qu’il en est, historiquement, autour du 15 février.

Un premier graphique appelé boxplot ou boîte à moustache va nous permettre de visualiser directement l’ensemble des températures maximales enregistrées pour le mois de février :

Boxplot des températures de février.

Pour rappel, dans une boîte à moustache, 25 % des données sont comprises entre le point A et le point B, de même 25 % des données sont comprises entre le point B et le point C, etc. Bien entendu 50 % des données se situent entre le point B et le point D, et enfin les minimum et maximum devant normalement être respectivement aux points A et E1 . On constate donc qu’en février, 25% des températures maximales sont supérieures à 10 degrés avec un maximum à 18.39 degrés. Ce qui relativise déjà un peu le caractère extraordinaire du record de 18.1 degrés de ce 15 février 2019.

Pour les lecteur.e.s qui seraient allergiques aux boxplots, les même données peuvent être représentées par un histogramme comme ci-dessous :

Sur l’axe des abscisses (les x) j’ai fait figurer par de petits traits les mesures à titre indicatif. Malheureusement dans cette dernière représentation des données certains traits se recouvrent, diminuant ainsi l’impression visuelle de leur multiplicité. Une autre façon de représenter les mesures (en plus de l’histogramme) est alors de les dessiner dans un rectangle en plaçant les mesures selon l’axe des abscisses mais en les distribuant aléatoirement selon l’axe des ordonnées (l’axe des y) comme ci-dessous :

On perçoit mieux dans ce dernier graphique que les températures “printanières” (que j’ai choisies arbitrairement à 14 degrés et plus) ne représentent qu’une faible part des températures enregistrées (3% des cas), mais qu’elles ne sont pas non plus inexistantes. Ce qui, “statistiquement”, est égal à la probabilité d’obtenir 2 faces au plus en lançant une pièce 11 fois. C’est donc un événement relativement rare mais pas du tout impossible.

Oui, mais quid du 15 février plus spécifiquement ? En effet on peut toujours arguer que le mois de février contient des “28 février” (et plus rarement des 29) qui sont plus proches du mois de mars et de son début de printemps que le 15 :

Dans ce cas on constate que 25% des températures sont supérieures à seulement 8.28 degrés. Mais avec un maximum absolu de 17.778 degrés. Ce qui, même en étant plus faible que le record de 2019, relativise à nouveau celui-ci. Notez encore que si une température de 18.1 degrés n’avait encore jamais été enregistrée à Uccle depuis 1881, cela ne signifie pas que l’événement ne s’est jamais produit, simplement qu’il n’a pas été observé depuis que des observations sont enregistrées à cet endroit. C’est un tantinet différent.

Maintenant que nous avons considéré le cas des températures printanières au mois de février revenons à l’épisode de 2016 et sa neige en avril. Dans ce cas-ci j’ai utilisé dans les données une valeur qui signifie quand il y avait eu chute de neige un jour mais sans tenir compte ici des quantités tombées :

Comme dans le cas précédent on constate au vu du graphique que même si c’est un événement rare, à nouveau il n’est pas impossible puisqu’il s’est déjà produit dans 4% des cas (à savoir les “jours d’avril”). Le grand Prince ne s’y était pas trompé puisqu’il a composé un titre qui s’intitule “Sometimes It Snow In April” :

En conclusion, si les températures observées en Belgique autour du 15 février 2019 sont bien extraordinaires, elles le sont au sens d’inhabituelles et non au sens d’inimaginables. Et il faut bien se garder des impressions intuitives que nous avons à partir d’un événement météorologique localisé dans le temps et dans l’espace, il serait en effet complètement imprudent de tirer des conclusions globales et à l’échelle du siècle, sur base uniquement de ce que nous vivons à un instant donné à un endroit précis sans comparer statistiquement ce qui s’est déjà produit précédemment au même endroit aux mêmes moments de l’année.

Sur ce je vous laisse je vais profiter des derniers rayons de ce magnifique soleil de février.

1. Dans le graphiques en illustration, les points situés en F sont ce que l’on appelle des valeurs aberrantes ou outliers en anglais (retour).

Séminaires Quaresmi 2018-2019

Le laboratoire Quaresmi est très heureux d’annoncer qu’il inaugurera le jeudi 28 février 2019 sa première série de séminaires, avec un exposé de M. Sébastien de Valeriola (ICHEC) intitulé “Risque de défaut et réseaux de crédit à Ypres au XIIIe siècle” .

Ces séminaires sont ouverts à tous, mais pour des raisons organisationnelles, merci de vous signaler à l’adresse celine.engelbeen_at_ichec.be.

Les séminaires se dérouleront sur notre site du Manoir d’Anjou : Rue au Bois, 365a, 1150 Bruxelles.

Vous pouvez retrouver ces séminaires dans notre section “Nos activités” .

Affiche des séminaires du laboratoire Quaresmi. Les dates sont aussi disponibles via notre section "nos activités".

Conférence EGC2020

Le laboratoire Quaresmi est particulièrement heureux de vous annoncer qu’il sera l’organisateur de la 20ème  édition de la conférence “Extraction et Gestion de Connaissance”.

La conférence Extraction et Gestion des Connaissances (EGC) est un événement annuel réunissant des chercheurs et praticiens de disciplines relevant de la science des données et des connaissances. Ces disciplines incluent notamment l’apprentissage automatique, l’ingénierie et la représentation de connaissances, le raisonnement sur des données et des connaissances, la fouille et l’analyse de données, les systèmes d’information, les bases de données, le web sémantique et les données ouvertes, etc.

La conférence EGC est l’occasion de faire se rencontrer académiques et industriels afin de confronter des travaux théoriques et des applications pratiques sur des données réelles et de communiquer des travaux de qualité, d’échanger et de favoriser la fertilisation croisée des idées, à travers la présentation de travaux de recherche récents, de développements industriels et d’applications originales.

N’hésitez pas à consulter (gratuitement) les actes de l’édition 2019, comprenant les articles des communications orales ainsi que ceux associés aux posters via la revue RNTI. Les actes des ateliers sont disponibles via les pages de ceux-ci (lien). Vous pouvez aussi accéder aux slides des keynotes et enfin les vidéos des différentes sessions seront bientôt disponibles sur Canal C2.

Cette 20ème édition se déroulera sur le site de l’ICHEC situé Boulevard Brand Withlock (sis à côté du rond-point Montgomery). L’organisation de cette édition “anniversaire” se fera en étroite collaboration avec l’association EGC.

De plus amples informations bientôt.

Stay tuned, suivez-nous sur Twitter : 

Python va-t-il tuer R ?

Le présent

Le dernier sondage en date du site KDnuggets semble annoncer une domination future du langage Python sur le langage R dans le “petit monde”  des data sciences et du machine learning. En 2016 R pouvait encore toiser Python puisque 42% des sondés déclaraient utiliser l’implémentation open source du langage S contre 34% pour le langage au nom inspiré par les inénarrables Monty Pyhton ( 8.5% annonçant utiliser les deux) . En 2017 la tendance s’inverse : 36% pour R et 41% pour Python (et 12% pour les deux) : 

Graphique de l'évolution des parts de marché de R et Python en 2016 et 2017.

Source : KDnuggets

La tendance haussière de Python n’est pas nouvelle puisque la part d’utilisateurs de ce langage augmente de façon quasi-constante depuis 2014, en ayant par ailleurs doublé son nombre de déclarants dans ces enquêtes depuis 2014 :

Graphique de l'évolution des parts de marché de R et Python de 2014 à 2017.

Source : KDnuggets

On pourrait contester ce résultats en se basant sur le fait qu’il ne s’agit que d’enquêtes en ligne avec un bon millier de répondants. Outre le fait que ce nombre de répondants est assez classique et statistiquement suffisant pour des résultats fiables, ces résultats ne contredisent pas des enquêtes plus larges : celles d’IEEE Spectrum ou de TIOBE .

Au vu de la forte progression de Python, on peut légitimement se poser la question du titre : Python va-t-il finalement (et rapidement?) tuer R ?

La transition

Ce qui me parait particulièrement intéressant dans l’article de KDnuggets c’est le schéma suivant :

Schéma de transition entre les langages R, Python, le deux et les autres en 2017.

Source : KDnuggets

Ce dernier permet de visualiser précisément quelles sont les proportions de répondants qui sont restés fidèles à leur(s) langage(s) ou qui ont migré d’une situation à l’autre. Cela m’a rappelé un article que j’avais particulièrement apprécié  : The eigenvector of “Why we moved from language X to language Y”. Dans cet article Erik Bernhardsson avait scrappé des données à  propos des requêtes Google du type from <language 1> to <language 2>, switch to <language 2> from <language 1>. Et il en avait fait une matrice de transition pour essayer de prédire le futur… Je me suis inspiré de cet article pour appliquer la même technique aux résultats 2017 de KDnuggets.

Les informations reprises dans la figure ci-dessus peuvent être traduites en la matrice de transition suivante :

P=\begin{matrix} \begin{matrix} Pyth & Both & R & Others\end{matrix} & \\ \left( \begin{matrix} 0.91 & 0.04 & 0.05 & 0.01\\0.38 & 0.49 & 0.11 & 0.01\\0.10 & 0.15 & 0.74 & 0.01\\0.19 & 0.04 & 0.17 & 0.60 \end{matrix}\right) & \begin{array}{l} Pyth \\ Both\\ R\\ Others\end{array} \end{matrix}

Cette matrice se lit assez facilement :

  • chaque ligne représente une situation (utilisateurs de Python, utilisateurs des deux langages, …),
  • chaque colonne représente une transition possible : de la situation X vers Python pour la première, de la situation X vers les deux langages pour la deuxième,…

Par exemple la première ligne est celle des utilisateurs (ou déclarés comme tels) de Python en 2016. Ceux-ci sont restés fidèles à ce langage dans 91% des cas, ont utilisé les deux en 2017 pour 4%, ont migré vers R dans 5% des cas et vers d’autres langages pour 1% d’entre eux.  Les autres lignes peuvent se lire de façon similaire. Comme de toute situation de départ en 2016 on doit arriver à une situation existante en 2017, la somme de chacune des lignes doit faire 1. Malheureusement ce n’est pas le cas pour les lignes 1 et 2 qui dont les sommes valent respectivement 1.01 et 0.99. Ne sachant d’où vient cette très probable erreur d’arrondi (même après avoir cherché les “données brutes” sur le site de KDnuggets) j’ai appliqué une correction générale à chacune des lignes en les divisant respectivement par leurs sommes ce qui donne donc la belle matrice de transition suivante :

P=\left( \begin{matrix} 0.9009901 & 0.03960396 & 0.04950495 & 0.00990099\\0.3838384 & 0.49494949 & 0.11111111 & 0.01010101\\0.1000000 & 0.15000000 & 0.74000000 & 0.01000000\\0.1900000 & 0.04000000 & 0.17000000 & 0.60000000 \end{matrix} \right)

 

Les pourcentages utilisateurs déclarés en 2016 peuvent aussi s’écrire sous cette forme :


\pi^{(2016)}=\begin{matrix}\left(\begin{matrix} 0.34\\0.08\\0.42\\0.16\end{matrix}\right) & \begin{array}{l}Pyth \\ Both\\ R\\ Others\end{array} \end{matrix}

C’est ce que l’on appelle un vecteur d’état : il donne la probabilité de chacun des états (ici un état étant “utilisateur de…”) . La somme des nombres d’un tel vecteur devant aussi faire 1 puisque tout sondé doit se retrouver dans un des états. C’est pour respecter cette contrainte d’unité de la somme que j’ai corrigé le 8.5% en 8% en supposant que c’est une erreur puisque la somme valait 1.05 (j’aurais aussi pu tout diviser par 1.05 comme ci-dessus).

De même la situation de 2017 peut s’écrire 

\pi^{(2017)}=\begin{matrix}\left(\begin{matrix} 0.41\\0.12\\0.36\\0.11\end{matrix}\right) & \begin{array}{l}Pyth \\ Both\\ R\\ Others\end{array} \end{matrix}

L’avantage, une fois que tout est écrit sous cette forme, c’est qu’en supposant que la matrice P est une matrice stochastique décrivant un processus de Markov on peut facilement calculer ce qui se passe d’année en année (sous la supposition forte que les probabilités de transitions ne changeront pas au cours du temps), ainsi on peut écrire que :

\pi^{(2017)}= P^{\tau} \cdot \pi^{(2016)}

Et effectivement si on effectue ce calcul on retrouve, aux arrondis prés, les valeurs pour 2017:

P^{\tau} \cdot \pi^{(2016)}=\left(\begin{matrix} 0.4093163\\0.1243145\\0.3624638\\0.1039054\end{matrix}\right)

Bien entendu on peut continuer le processus et estimer ce qui se passera en 2018 (toutes choses restants égales par ailleurs comme disent les économistes) : 

\pi^{(2018)}= P^{\tau} \cdot \pi^{(2017)}=\left(\begin{matrix}0.4724950\\0.1362657\\0.3199630\\0.0712762\end{matrix}\right)

Ce sera à vérifier dans un an mais il semblerait donc que Python continuera à violemment gagner du terrain alors que la position de R continuera à s’effriter, pendant que les utilisateurs des deux progresseront timidement.

Le futur?

Évidemment, à ce stade,  on a en généralement envie (les mathématisants en tous cas)  de continuer le processus pour voir si la situation finit par se stabiliser :

\pi^{(2018)}, \pi^{(2019)}, \pi^{(2020)}\cdots, \pi^{(20xx)} \longrightarrow v

C’est évidemment assez facile à calculer en utilisant un langage comme R (!) (ou Python pour être tout à fait honnête) mais, quand s’arrêter?  “Quand les chosent se stabilisent”  pourrait-on dire platement. Mais les mathématiciens et les probabilistes se sont bien entendu déjà penchés sur ce genre de question et la réponse est assez simple : il suffit d’utiliser le concept (très puissant mais mal aimé des étudiants) de vecteurs propres et de valeurs propres. Pour rappel un vecteur v est vecteur propre de valeur propre \lambda si et seulement si :

A \cdot v= \lambda \cdot v

Or il se fait que la définition d’un état stable est assez proche car un état est dit stable pour les processus de Markov quand l’application de la matrice de transition ne change plus rien c’est-à-dire quand :

P^{\tau}\cdot v = v

en d’autres termes, un état stable est un vecteur propre de valeur propre 1. 

Si on calcule ce vecteur v pour notre match Python vs R on obtient :

v=\begin{matrix}\left(\begin{matrix} 0.67257910\\0.11156674\\0.19159885\\0.02425531\end{matrix}\right) & \begin{array}{l}Pyth \\ Both\\ R\\ Others\end{array} \end{matrix}

Ce qui signifie que dans un horizon “relativement” proche(1), Python dominerait en raflant le 2/3 du marché alors que R se contenterait d’une niche de 20% et, surprise, les utilisateurs des deux langages resteraient assez limités à  11%.

Conclusion

Évidemment, comme dans la citation prêtée à Niels Bohr (mais aussi à d’autres) :

les prévisions sont difficiles surtout lorsqu’elles concernent l’avenir.

 

Il faut donc être prudent. Mais néanmoins le jeu  des prévisions est toujours excitant et il est difficile de ne pas s’y prêter.  

Même si la répartition future entre R et Python sera vraisemblablement, au moins sensiblement, différente de celle prédite ici, la répartition de parts de chacun des langages me paraît assez plausible. En effet, outre la progression fulgurante de Python ces dernières années, ce dernier me paraît avoir des avantages décisifs (et mon coeur d’aficionados de R saigne en l’écrivant) par rapport à R. Celui-ci est un langage de programmation dédié aux statistiques et autre analyses de données, et dans ce rôle il fait un boulot remarquable, notamment soutenu par un écosystème très dynamique avec une pléthore de packages , dont certains très spécialisés. Et c’est, selon moi, une de ses forces car on peut y trouver des packages qui contiennent l’implémentation de méthodes issues directement de travaux de recherche récents. On peut donc, en tant que chercheur, y tester très rapidement de nouvelles idées. Par contre, il n’est pas  spécialement adéquat pour être utilisé “en production” pour des projets industriels avec des données massives (même si c’est possible). 

L’avantage premier de Python est que c’est un langage de programmation généraliste pour lequel on est occupé à créer des environnements/librairies dédiées aux calcul scientifique et aux data science :

Ecosystème Python pour le Machine Learning

Source: http://python.astrotech.io/machine-learning/wprowadzenie-do-machine-learning.html

Ce qui signifie que ce langage, doté de ces boîtes à outils, permet non seulement d’effectuer des analyses de données mais permet aussi de développer de véritables applications. Avantage non négligeable dans un environnement business. Et, cerise sur le gâteau, ce langage permet de développer des applications web, “d’entreprise” (sur ordinateur) et embarquées comme l’illustre ci-dessous la copie d’écran du tableau de la page d’IEEE Spectrum

 The Top Programming Languages 2018

Source : IEEE Spectrum

Même si actuellement Python n’est pas aussi riche en librairies que R et que ce dernier se débrouille nettement mieux en termes de visualisations (mais les choses changeront sans doute dans le futur), il me parait assez inéluctable que ce dernier se voie finalement retranché dans la seule niche scientifique, pour laquelle il a été a priori créé. Il vivrait ainsi un destin un peu similaire au langage Pascal, créé pour l’enseignement et qui, au vu du nombre d’étudiants ayant appris à coder avec lui se retrouvant sur le marché du travail, a vu une carrière “commerciale” s’ouvrir à lui avant que celle-ci  ne finisse par se refermer, entre autres pour des raisons techniques (comme l’absence initiale de chaînes de caractères à zéro terminal), et qu’il ne se retrouve confiné dans sa niche éducative (même si on le retrouve encore à la 17ème place du classement TIOBE).  En espérant pour R que cette niche scientifique ne soit pas elle-même réduite à peau de chagrin. La bonne nouvelle, a priori, c’est que l’on peut espérer répondre non à la question initiale.

Signé : un utilisateuR heuReux  que son langage pRéféRé se soit pas déjà condamné à une moRt rapide, même si il a déjà un peu commencé à pRogrammer en Python, on n’est jamais tRop pRudent ;).

 

(1) Un horizon de 9 à 11 ans toutes choses restant égales par ailleurs. J’ai essayé d’évaluer ce laps de temps en regardant après combien de temps |\pi^{(20xx)} - v| était en moyenne plus petit que 1% ou que le maximum de ces différences soit plus petit que 1%. Bien entendu si les proportions de migrations changent, il en sera de même de cet horizon temporel (retour au texte).

Comment fâcher la majorité des Belges avec leur salaire?

En publiant le salaire moyen desdits Belges pardi!

Ce vendredi 5 octobre 2018 de nombreux médias Belges se sont fait l’écho de l’enquête du site Jobat, titrant la plupart du temps sur ce fameux salaire moyen :  3.329 €1. Le problème c’est que ce concept de salaire moyen et son utilisation à tout va posent de nombreux problèmes. 

Le premier de ces problèmes est la signification même de ce qu’est la moyenne. Quand on demande aux étudiants qui participent à nos cours la définition de la moyenne (arithmétique bien entendu dans ce cas), ils n’ont aucun problème à expliciter comment  se calcule ce nombre. Quand on leur demande sa signification c’est autrement plus problématique. Mon but n’est bien entendu pas de dénigrer leur compréhension du concept mais bien d’illustrer le paradoxe que rencontre ce dernier :  il est extrêmement bien connu et utilisé dans la population mais son interprétation n’a pas la même chance.  Pour clarifier cette dernière, ce qui suit en général ma question aux étudiants sur l’interprétation de la moyenne est la proposition suivante : calculons l’avoir moyen dans nos portefeuilles à l’instant précis dans cette classe. Je propose donc alors  que (de façon imaginaire évidemment) chacun, chacune vienne vider son portefeuille sur la table, que l’on compte le total et que l’on divise le tout par le nombre de personnes. Le contenu moyen des portefeuille dans la classe, est donc simplement ce que chacun aurait en poche si tout le monde avait la même chose.  Et donc le salaire moyen c’est cela aussi : le salaire que chacun, chacune aurait si tout le monde gagnait exactement la même chose. On est évidemment loin du compte de cette dernière affirmation. Ce qui rend donc le salaire moyen assez inadéquat comme évaluation de la tendance centrale (comme disent les statisticiens)  des salaires. La notion de médiane, souvent nettement moins connue et appréciée des mêmes étudiants, est, elle, nettement pus facile à interpréter: la médiane c’est la valeur qui partage en deux parties égales l’ensemble des valeurs considérées (ici les salaires) quand ces dernières ont été classées dans l’ordre croissant. Donc dans le cas de l’enquête sur les salaires, cela reviendrait à prendre l’ensemble des 20.000 salaires collectés par l’enquête, à les classer de façon croissante et ensuite à trouver la valeur qui se situe au milieu. Dans le cas de l’enquête évoquée cette valeur  serait “aux alentours des 3.000 euros brut”. Ce qui est déjà un tantinet plus faible que la moyenne mise en avant.  Ce salaire médian à l’avantage qu’il est un premier élément permettant d’avoir une idée de la répartition des salaires,  ainsi on sait donc que 50% des gens gagent moins de 3000 euros bruts et 50% gagnent plus. Interprétation autrement plus informative sur la population que la moyenne.

Le second problème de la moyenne, comme cela vient d’être déjà évoqué, c’est qu’elle ne donne aucune indication sur la répartition des salaires. Dans une enquête menée en 2013 par la K.U.L. et Références, en plus de ce salaire moyen le tableau suivant était fourni:

  Salaire Brut
10% gagnent moins de  1.842 €
20% gagnent moins de  2.099 €
30% gagnent moins de  2.300 €
40% gagnent moins de  2.530 €
50% gagnent moins de  2.800 €
60% gagnent moins de  3.068 €
70% gagnent moins de  3.404 €
80% gagnent moins de  3.900 €
90% gagnent moins de  4.825 €
Moyenne 3.133 €

Ce tableau a l’avantage que l’on constate tout de suite que la notion de salaire moyen va fâcher plus de 60% des Belges qui gagnaient donc à l’époque moins que ce dernier! Par une simple interpolation linéaire on peut même évaluer qu’en fait c’est 65.51% des Belges qui gagnaient moins que le salaire moyen de 2013. Ce qui nous ramène au titre puisqu’en titrant uniquement sur le salaire moyenne on arrive à “frustrer” quasiment 2/3 des Belges!  Ce tableau nous informe aussi sur la répartition des salaires. Pour représenter la répartition des valeurs étudiées un des outils des statisticiens est la représentation en boxplot ou boîte à moustaches , mais n’ayant pas accès aux données de l’enquête je propose une autre vision des données (assez proche du principe du boxplot) dans la figure ci-dessous:

Cette figure affiche en ordonnées (l’axe des Y placé de façon verticale) les différentes limites du tableau ci-dessus. Chacun des espaces entre les lignes horizontales contient 10% des salaires. L’espace supérieur n’est pas signifiant car je ne connais pas le salaire maximum et comme salaire minimum j’ai utilisé les données d’Eurostats (1562.63 €). Néanmoins rien que sur la partie inférieure du tableau on peut  constater la répartition des salaires. Cette information, quoi qu’incomplète encore, est nettement plus informative que la seule moyenne.

Le  dernier reproche que je formule à cette utilisation du salaire moyen est que dans les communiqués évoqués pour l’édition 2018 de l’enquête de Jobat, on lit aussi que le salaire moyen a augmenté de 4% par rapport à 2017. Au-delà du fait que la chose m’étonne par rapport aux données de 2013, là aussi cette seule information pourrait engendrer des frustrations car on n’a aucune idée précise d’où provient cette augmentation même si on peut lire que “le salaire moyen est tiré vers le haut par les salaires les plus élevés”.  Ainsi dans l’hypothèse où la moyenne des 10% des salaires  les plus élevés de 2013 auraient été de 5500 € (c’est une supposition pour l’exemple bien entendu) alors la moyenne étant de 3.133 €, on peut en déduire le salaire moyen du reste de la population, à savoir 2870 €, et le salaire moyen doit se calculer de la façon suivante :

0.9\cdot 2870 + 0.1 \cdot 5500 = 3133.

Une augmentation de 15% pour les seuls salaires les plus élevés modifierait le salaire moyen sans que les 90% restant n’en soient en réalité affectés :

0.9\cdot 2870 + 0.1 \cdot 5500 \cdot 1.1= 3215.5 .

Ce qui correspond à une augmentation globale du salaire moyen de  2.6% alors que le salaire moyen de l’écrasante majorité  n’a pas changé. La médiane elle n’a pas varié d’un iota.  Supposons maintenant que la moyenne des salaires de la catégorie juste en-deçà de la catégorie des salaires les plus élevés soit connue et égale à 3550 €. A nouveau la moyenne globale devrait alors s’écrire comme suit:

0.8\cdot 2785 + 0.1 \cdot 3550+ 0.1 \cdot 5500 = 3133.

Comme ci-dessus une augmentation de 10% sur ces deux catégories des salaires les plus élevés donnera comme salaire moyen :

0.8\cdot 2785 + 0.1 \cdot 3550 \cdot 1.1 + 0.1 \cdot 5500 \cdot 1.1 = 3223.

c’est à dire une augmentation du salaire moyen de 2.8%…que 80% des salariés ne percevra pas, sauf dans la presse. De quoi augmenter encore la frustration.

En conclusion, et même si je ne suis évidemment pas le premier à plaider pour cela, il devient impératif pour les diverses raisons évoquées d’arrêter la seule utilisation dans les bandeaux titres des médias du salaire moyen, et ce d’autant plus quand on sait à quel point beaucoup de gens partagent des articles sans les avoir réellement lus. C’est d’autant plus dommage de toujours mettre en avant ce seul indicateur, dont on a vu combien il pouvait être frustrant pour la majorité des Belges, que ce genre d’enquêtes fournit en général bien plus de détails que ce qui est finalement utilisé. C’est une bien piètre exploitation des données récoltées par le travail non négligeable que représente l’interrogation de 20.000 personnes. Seule une quantité suffisante de chiffres signifiants peuvent devenir une information fiable. L’adage populaire dit que “les chiffres on leur fait dire ce que l’on veut”, doit absolument être complété  par “surtout quand on en utilise peu”.

1 . Malgré mes nombreux efforts je tiens à préciser qu’au moment de la rédaction de cette note je n’ai pas pu accéder aux résultats de l’enquête de Jobat autrement que par l’intermédiaire de médias donc de façon indirecte.