David Madore's WebLog: 2012-05

This WebLog is bilingual, some entries are in English and others are in French. A few of them have a version in either language. Other than that, the French entries are not translations of the English ones or vice versa. Of course, if you understand only English, the English entries ought to be quite understandable without reading the French ones.

Ce WebLog est bilingue, certaines entrées sont en anglais et d'autres sont en français. Quelques-unes ont une version dans chaque langue. À part ça, les entrées en français ne sont pas des traductions de celles en anglais ou vice versa. Bien sûr, si vous ne comprenez que le français, les entrées en français devraient être assez compréhensibles sans lire celles en anglais.

Note that the first entry comes last! / Notez que la première entrée vient en dernier !

Index of all entries / Index de toutes les entréesXML (RSS 1.0) • Recent comments / Commentaires récents

Entries published in May 2012 / Entrées publiées en mai 2012:

(mercredi)

L'entropie des prénoms français

Dans la série David fait joujou avec des statistiques sans intérêt, je vous propose : l'évolution de l'entropie (i.e. l'originalité) des prénoms français avec le temps :

[Graphe d'entropie des prénoms français]

Modification () : J'ai dû refaire le graphique parce que je me suis rendu compte que le fichier que j'avais comportait des doublons (plusieurs indications — heureusement identiques — du nombre de naissances pour une année et un prénom donnés) ; l'allure des nouveaux graphiques est très semblable à l'allure des anciens, mais à peu près 0.25 bits plus bas.

Précisons un peu ce dont il s'agit. La source est le fichier prénoms de l'INSEE, récupéré ici parce que ces andouilles de l'INSEE le vendent à 1200€ (alors qu'on a apparemment le droit de le rediffuser) : ce fichier donne, pour chaque année de naissance entre 1900 et 2009, et chaque prénom (modulo accents, et en séparant selon le sexe de l'individu, i.e., Dominique♂ est considéré comme un prénom différent de Dominique♀), le nombre de naissances en France, pour cette année, de personnes portant ce prénom (à condition qu'il y en ait au moins 3, pour des raisons de confidentialité). La courbe verte donne le log du nombre de naissances dans l'année (ou, plus précisément, le log base 2 moins 10), c'est-à-dire, si l'on veut, la quantité d'information (moins 10 bits) nécessaire pour identifier un individu dont on connaîtrait l'année de naissance. Par exemple, en 2000, le fichier enregistre 654557 naissances au total, donc la quantité d'information pour identifier un individu né cette année-là est de log2(654557)=19.3 bits. J'ai juste soustrait 10 de façon à ramener les deux courbes à peu près dans le même domaine. La courbe rouge, elle, est l'entropie des prénoms pour l'année de naissance donnée, c'est-à-dire la quantité d'information apportée par la donnée du prénom d'un individu (et de son sexe) si on connaît déjà son année de naissance. La différence entre les deux courbes, donc, est la quantité d'information (moins 10 bits) nécessaire pour identifier un individu dont on connaîtrait à la fois l'année de naissance, le sexe et le prénom. Il semble qu'on ait, en 60 ans, gagné quasiment 2.3 bits d'originalité dans le choix des prénoms (i.e., c'est comme si on utilisait effectivement presque 5 fois plus de prénoms).

Ajout () : Voici quelques autres chiffres : sur l'ensemble de la population considérée (i.e., les personnes nées en France à partir de 1900), l'information du prénom(+sexe) apporte 8.99 bits d'information, dont 7.76 en plus si on a l'année de naissance ; autrement dit, l'information mutuelle entre l'année de naissance et le prénom est de 1.23 bits (si on veut, intuitivement, connaître le prénom de quelqu'un apporte 1.23 bits d'information sur son année de naissance ou réciproquement — c'est une mesure du renouvellement des prénoms).

Encore un ajout () : On peut aussi chercher à classer les prénoms selon la quantité d'information qu'ils apportent sur l'année de naissance de la personne qui les porte. J'ai pris les 906 prénoms (i.e., couples prénom+sexe, comme expliqué ci-dessus) ayant été donnés au moins 5000 fois dans la base de données : ceux qui apportent le moins d'information sur l'année de naissance sont : Étienne (0.026 bits), Hélène (0.086), François (0.086), Aline (0.088), James (0.101), Pierre (0.123), Clotilde (0.131), Joachim (0.139), Anne (0.140), Rémy (0.154), Antoine (0.155), Esther (0.161), Louisa (0.163), Lucia (0.167), Édouard (0.173), Gabriel (0.183), Claire (0.184), Marianne (0.197), Yvan (0.199), Paul (0.202), Claudia (0.203), Stanislas (0.207), Moïse (0.210), Charles (0.216) et Ange (0.219). Ceux qui apportent le plus d'information (et c'est surtout là qu'il est important que j'aie coupé à 5000 naissances, sinon on aurait évidemment les prénoms incroyablement rares qui viendraient en tête) : Timéo (3.02 bits), Lana (2.70), Noa (2.67), Aaron (2.60), Louane (2.59), Ethan (2.55), Noah (2.53), Lilou (2.50), Loane (2.49) et Louna (2.45).

Commentaires des sociologues de service ?

(mardi)

Personne ne fait du chocolat noir à la vanille ?

Une des spécialités du chocolatier Bernachon, ce sont les tablettes de chocolat noir à la vanille. C'est à se damner. (Et c'est aussi assez étonnant : peu sucré, sans doute autour de 65% de cacao, très fortement vanillé, ça en devient presque épicé.) Malheureusement, Bernachon est à Lyon, et ne livre pas. Je m'étonne qu'aucun chocolatier industriel ne semble avoir eu la même idée que lui (ce serait certainement moins bon que du Bernachon, mais faute de grives je suis prêt à manger des merles) : pourtant, faire du chocolat noir à la vanille, ça ne semble ni très difficile ni extraordinairement audacieux. Lindt fait bien du chocolat blanc à la vanille (pas mal, mais très différent de ce que je cherche), et — pour donner un exemple d'exérience plus originale — du noir au wasabi (soit dit en passant, c'est intéressant).

Est-ce que ça vaudrait l'effort d'écrire à quelques chocolatiers industriels pour leur suggérer l'idée, ou est-ce que je peux partir du principe qu'ils ont forcément déjà pensé à ça, fait une étude de marché, et conclu que ça ne se vendrait pas ?

(mardi)

La chasse à la novlangue

Extrait d'une lettre adressée au Ministère de l'Éducation nationale (Secrétariat général, Direction générale des ressources humaines, service des personnels enseignants de l'enseignement scolaire, sous-direction de la gestion des carrières, bureau des personnels enseignants du second degré hors académie) :

Professeur agrégé actuellement en détachement au sein de l'Institut Mines-Télécom (autrefois Institut Télécom, autrefois Groupe des Écoles des Télécommunications, établissement public administratif à caractère scientifique, culturel et professionnel, placé sous la tutelle du ministère du Redressement productif — autrefois ministère de l'Industrie), je vous écris pour solliciter de votre part un renouvellement de mon détachement dans cet établissement […] de façon à continuer à y exercer à temps plein les fonctions de maître de conférence au sein de l'école Télécom ParisTech (autrefois École nationale supérieure des Télécommunications) […]

Vous croyez que l'ironie va se voir ?

(jeudi)

Le Club contexte et le Gouvernement

Mon influence auprès des grands de ce monde est telle que j'ai réussi à ne pas être nommé Premier ministre ni à un poste quelconque au gouvernement (ni en France ni, d'ailleurs, en Grèce, ce qui aurait été encore bien plus catastrophique). Puisque je suis, donc, totalement rassuré sur mon sort, je reste à mes fonctions de directeur exécutif ex officio, secrétaire général pro tempore, administrateur ad hoc et semper fidelis du Club contexte qui noyaute la République de l'intérieur, et je vais vous parler des étiquettes gouvernementales.

Le fait que la Constitution de la Ve République française a été écrite sous l'influence du Club contexte se voit assez nettement quand on compare l'article 15 (Le Président de la République est le chef des armées), l'article 21 (Le Premier ministre […] est responsable de la défense nationale) et l'article 20 (Le Gouvernement […] dispose […] de la force armée) : quelqu'un de très fort a réussi à trouver des termes dont on ne peut pas dire qu'ils sont explicitement contradictoires, mais dont il soit néanmoins impossible de savoir exactement comment ça se fait qu'ils ne se marchent pas sur les pieds. Ce quelqu'un a dû prendre des cours dans ces administrations ou organisations qui sont capables d'avoir simultanément un président, un directeur exécutif, un secrétaire général, un administrateur en chef et pourquoi pas un grand mamamouchi sans qu'on sache comment ces fonctions interagissent.

Mais les choses avaient déjà bien commencé auparavant. La IIIe République avait donné (le 31 août 1871, par la loi Rivet) à Thiers le titre de président de la République parce qu'il était mécontent de celui de chef du pouvoir exécutif (concéder ce titre n'a pas empêché l'Assemblée, à majorité monarchiste, d'encadrer strictement la manière dont le président pouvait s'adresser à elle, dans ce que Thiers a qualifié de cérémonial chinois et dont l'absurdité subsite jusqu'à maintenant). Mais qui est, au juste, le chef du Gouvernement ? Il était prévu que ce fût le président de la République ; il devait avoir un adjoint : un décret du 2 septembre 1871 prescrit : Le Président de la République, en cas d'absence ou d'empêchement, délègue à l'un des ministres le droit de convoquer le conseil et de le présider. Le ministre délégué portera le titre de Vice-président du Conseil des ministres. Et de fait, jusqu'en mars 1876, sous les présidences de Thiers et MacMahon, c'est ce titre de vice-président du Conseil des ministres (le seul mentionné par les lois constitutionnelles de 1875) qui a été porté par Dufaure, de Broglie, de Cissey et Buffet ; puis, le 9 mars 1876, suite aux élections législatives ayant donné une majorité à la gauche républicaine, Dufaure revient avec cette fois le titre de président du Conseil (qui avait existé sous la Restauration et la Monarchie de Juillet, et disparu en 1849), et qui sera utilisé jusqu'à la fin de la IIIe et sous la IVe Républiques. Thiers avait démissionné en 1873 n'ayant pas pu s'entendre avec une Chambre royaliste, MacMahon démissionne en 1879 faute de pouvoir soumettre une Chambre républicaine : désormais, ce sera le président du Conseil le véritable chef du Gouvernement… même si c'est le président de la République qui formellement préside le Conseil [des ministres]. Le Club contexte salue toutes ces péripéties, donc.

(mardi)

Android, Wifi, certificats et autres âneries

Je continue mes râleries sur Android 4, parce que râler est la chose que je sais le mieux faire au monde : je ne veux cependant pas donner l'impression que tout est mauvais — il y a du bon et du mauvais, c'est juste que c'est plus satisfaisant pour les nerfs de se plaindre ce qui ne marche pas que de constater ce qui marche. Et en l'occurrence je parle de quelque chose qui ne marchait pas du tout sous Android 2 et qui maintenant marchouille mal.

Je commence par énoncer deux faits :

Fait nº1 : Je n'ai pas envie de verrouiller mon téléphone, que ce soit par un code PIN, par un dessin de déverrouillage, par un mot de passe, ou quoi que ce soit. Ceci tient à deux raisons : d'une part j'ai un compte mobile prépayé, donc si mon téléphone se fait voler, tout mon crédit m'est de toute façon perdu (certes je peux vouloir emmerder le voleur, mais pour ça j'essaierais plutôt de trouver un moyen de désactiver ou retrouver mon téléphone à distance) ; d'autre part, s'il m'arrive un accident, je trouve utile que quelqu'un de bien intentionné puisse récupérer mon téléphone et s'en servir pour appeler mes proches pour les prévenir, et pour ça il faut qu'il n'y ait aucun code de verrouillage. (Ce serait encore mieux, bien sûr, s'il y avait une configuration ou une application pour permettre d'appeler simplement certains numéros prédéfinis, mais faute de ça…)

Fait nº2 : À l'ENST Télécom ParisTech nous avons un Wifi interne qui est sécurisé par 802.1x, c'est-à-dire une usine à gaz qui fait qu'au lieu d'avoir simplement un mot de passe (ou une phrase de passe…) partagé spécifique au Wifi, c'est le mot de passe de nos comptes informatiques qui sert à s'authentifier. Ceci soulève immédiatement le problème suivant : mais du coup, comment évite-t-on que n'importe qui puisse extraire de mon téléphone le mot de passe en question, en créant simplement un Wifi (« troyen ») ayant le même nom public celui de l'ENST, auquel mon téléphone chercherait à se connecter, et auquel il révélerait donc mon mot de passe ? (Et de fait, je pense qu'on doit pouvoir extraire pas mal d'informations croustillantes en recréant des réseaux Wifi bien connus et en récupérant les tentatives de connexion vers eux. Je blâme déjà Android sur un point : il n'y a pas moyen d'enregistrer un réseau Wifi dans le téléphone en lui demandant de ne pas s'y connecter automatiquement dès qu'il le rencontre.)

Un élément de réponse est qu'on peut utiliser un mécanisme d'authentification où le client n'envoie pas simplement le mot de passe au serveur mais répond à un défi de celui-ci : ceci évite au moins qu'un faux serveur puisse récupérer directement le mot de passe — il ne pourra que faire une attaque « man-in-the-middle » en direct. Mais bon, ça ne change pas grand-chose au problème. La vraie réponse, c'est que le serveur (point d'accès Wifi) est censé fournir un certificat X.509 au client pour montrer qu'il est bien qui il prétend être et qu'il est raisonnable de lui confier le mot de passe (ou même la réponse à un défi sur ce mot de passe) : du coup, pas de problème, mais uniquement à condition que le client vérifie bien ce certificat et sache qu'il doit l'accepter.

D'où la nécessité de faire accepter à Android le certificat du Wifi de Télécom si je veux m'y connecter. Noter bien que ce certificat n'a rien de secret : c'est une clé publique, et d'ailleurs le certificat en question est publiquement accessible ici.

Bon, je passe sur la première crotte de ragondin qui est qu'il y a je ne sais combien de formats de certificats et que chaque format a lui-même je ne sais combien d'extensions possibles juste pour rendre les choses plus confuses. En l'occurrence, il semble qu'Android voulait un certificat au format DER avec l'extension .crt, et qu'on convertit un .pem en ça en faisant openssl x509 -outform DER -in wifi_certs.pem -out wifi_certs.crt (ce qui n'a pas été facile à trouver). Heureusement que je suis cryptographe, parce que je me demande comment le profane est censé comprendre tout ça. Mais j'en viens au point central de ma râlerie.

Android 4 a rajouté la possibilité d'ajouter un certificat externe (depuis la carte SD du téléphone), qui n'existait pas du tout sous la version 2. Très bien. J'applaudis.

Mais Android 4 a décidé qu'à partir du moment où on ajoute un certificat cryptographique, c'est une donnée hautement confidentielle, et que vous devez la stocker sous forme chiffrée (dans ce qu'il appelle le credential storage). Et pour ça, vous devez configurer un mot de passe (ou équivalent) qui servira à chiffrer ce stockage : et ce mot de passe sera nécessaire pour déverrouiller votre téléphone. C'est complètement crétin, parce que le certificat en question, il est complètement public comme je l'ai souligné ; et c'est d'autant plus crétin que le truc vraiment secret, mon mot de passe, lui, il est stocké en clair par Android (dans le fichier /data/misc/wifi/wpa_supplicant.conf) : bref, Android veut m'obliger à chiffrer quelque chose qui n'a rien de secret et ne me propose pas de chiffrer quelque chose qui l'est.

Et concrètement, il semble que les deux exigences soient incompatibles : ne pas verrouiller le téléphone, et pouvoir accéder au Wifi de Télécom sans que mon téléphone communique gentiment mon mot de passe à n'importe quel Wifi qui aurait le hasard ou la malice de s'appeler comme celui de mon bureau. Visagepaume !

Pour ne pas qu'on m'accuse de râler dans mon blog sans faire remonter les problèmes au bon endroit, mon bug-report est ici.

(lundi)

Comment remonter la piste des crottes de ragondin

Comme expliqué à l'épisode précédent, je goûte au sandwich glacé, i.e., Android 4. Voilà que je trouve une petite crotte de ragondin dans mon dessert : pas quelque chose de grave, mais qui m'agace un peu : quelqu'un a décidé que pour les connexions IPv6, le sandwich glacé en question utiliserait une adresse aléatoire fréquemment renouvelée, plutôt que l'adresse standard dérivée de l'adresse MAC de l'interface Wifi — voilà qui est bon pour les gens qui portent un chapeau en papier d'alu sur la tête et qui ne veulent pas qu'on identifie leur adresse, mais moi qui ne porte pas de tel chapeau je préfère que mon téléphone utilise des adresses stables, bref, je veux désactiver ces privacy extensions. Sous Linux, je sais comment faire : il faut mettre la clé sysctl net.ipv6.conf.wlan0.use_tempaddr à 0. Mais là on est sous Android : comment faire ? Ma première tentative a été d'écrire un script qui lance sysctl -w net.ipv6.conf.wlan0.use_tempaddr=0 dans les répertoires de démarrage (/data/local/userinit.d) : ça ne marche pas, il faut croire que quelqu'un change la clé ultérieurement.

C'est donc le point de départ d'un jeu de piste où on essaie de trouver quel chemin a suivi le ragondin pour arriver jusque là. Une petite recherche exhaustive de la chaîne dans tous les fichiers m'apprend que ce réglage use_tempaddr est probablement positionné par un processus démon appelé netd. De fait, je constate ici (vers les lignes 366–386) que quand ce démon reçoit une commande interface ipv6privacyextensions $iface enable (après, je ne sais pas par quel canal il reçoit des commandes, ni comment on lui en passe), il va écrire 2 dans /proc/sys/net/ipv6/conf/$iface/use_tempaddr. Une solution simple mais ignoble serait simplement de modifier le binaire de ce démon et de changer la chaîne en question pour mettre autre chose à la place, comme ça le démon échouera et ne fera rien. Mais comme je suis naïf, je voudrais faire propre. Remontons donc d'un cran. Qui passe cette commande au démon netd et comment ? Encore un petit peu de Google et je découvre que la classe com.android.server.NetworkManagementService (vers les lignes 451–462) a une méthode setInterfaceIpv6PrivacyExtensions qui envoie la commande en question au démon netd. Très bien, mais je ne sais pas ce que c'est que cette classe, ni comment on appelle cette méthode. Encore un coup de Google, et j'apprends que c'est la classe android.net.wifi.WifiStateMachine (vers la ligne 1983) qui décide d'appeler la méthode en question. Et là, le true est hardcodé : il y a un connard quelque part (celui qui a committé le code est un certain Irfan Sheriff, mais ce n'est pas forcément lui l'auteur ou le décideur) qui a décidé que je devais utiliser des adresses aléatoires. On retrouve l'attitude que je déteste chez Google, de décider les choses pour l'utilisateur au lieu de lui offrir une préférence (fût-elle un peu cachée) à choisir.

Bon, alors maintenant comment je me sors de ce merdier ? Le problème est qu'avoir accès au source est de peu de réconfort, parce que pour pouvoir changer quoi que ce soit, il faudrait recompiler, soit le fichier unique considéré (mais alors trouver comment faire pour recompiler un unique fichier dans les sources des frameworks Android, et ensuite, une fois ce fichier recompilé, comment le mettre en place dans le téléphone, ça risque de prendre un temps vraiment infini), soit tout Android, ce qui suppose de trouver les sources exactes de la version que j'ai utilisée, et la façon de recompiler, ce qui risque de ne pas être moins difficile (sans parler des dizaines de gigas d'espace disque et des dizaines d'heures que consommerait la compilation). Peut-être que je peux écrire une application Android qui demande les permissions pour parler soit à l'objet com.android.server.NetworkManagementService soit au démon netd pour leur ordonner de défaire ce qu'aura fait android.net.wifi.WifiStateMachine, mais rien n'est moins sûr (j'ai l'impression que les classes en com.android, contrairement à celles en android, sont des classes internes qui ne sont pas exportées vers les applications).

Finalement, je vais peut-être opter pour le patch binaire de ce démon netd (en espérant que le binaire n'est pas signé ou quoi que ce soit !). C'est quand même assez énervant que le ragondin ait réussi à dresser un mur aussi difficile à franchir, comme ça.

Ajout : De fait, remplacer /proc/sys/net/ipv6/conf/%s/use_tempaddr\000 par /dev/null\000 dans le binaire netd fait ce que je veux. Je vais me contenter de cette méthode crade.

Pour ne pas qu'on m'accuse de râler dans mon blog sans faire remonter les problèmes au bon endroit, mon bug-report est ici.

Troll : j'imagine que sur un iPhone, il y a une jolie petite case à cocher pour choisir si on veut les privacy extensions sous IPv6.

(lundi)

L'angoisse de Matignon

Demain (si j'ai bien suivi), on devrait connaître le nom du prochain malheureux, ou de la prochaine malheureuse, qui devra se farcir toutes les emmerdes de la France pour une durée indéterminée[#]. S'il y a un dessinateur dans l'assistance, je veux bien un dessin représentant Chirac, Mauroy, Fabius, Rocard, Cresson, Balladur, Juppé, Jospin, Raffarin, de Villepin et Fillon, tous terrassés de fatigue (et enjambant le cadavre d'un Bérégovoy), posant ensemble le poids de la France sur le dos d'une figure encore voilée et qui l'accepte comme un Atlas résigné. Toujours si j'ai bien suivi, le président entrant a déjà choisi son collaborateur binôme (?) mais ne l'a encore annoncé à personne, pas même à l'intéressé(e) : je ne sais pas si la scène de cette annonce sera aussi cocasse que ce que Rocard raconte de 1988, mais j'espère que la victime a le cœur bien accroché ; en attendant, on imagine tous les potentiels premierministrables sortir des prétextes pour se défiler : ouhlà, je ne peux pas entrer au Gouvernement, le mercredi j'ai piscine ou ressortir une vieille condamnation de derrière les fagots (la belle excuse). Devenir président ça a un côté chic-paillettes-grand-collier-de-la-légion-d'honneur, ça fait toujours bien dans un dîner de dire qu'on est ou a été président de la République ; mais devenir Premier ministre, quelle horreur, on a aussi les codes de l'arme nucléaire[#2] mais tout le monde l'oublie, et ça ne fait pas du tout classe.

Bref, je ne serai complètement tranquille que quand j'aurai entendu que ce n'est pas moi qui suis nommé à Matignon.

[#] Ça pourrait être jusqu'à la mi-juin comme ça pourrait être jusqu'à 2017.

[#2] Je me suis toujours demandé quelle forme ils pouvaient bien prendre, ces fameux codes, parce que je vois mal M. Balladur retenir un truc comme HNo!Wk$I ; bon, peut-être qu'ils prennent une forme plus raisonnable (le code est Guy Mollet a reçu des tomates sur la tête, je répète, Guy Mollet a reçu des tomates sur la tête), la suggestion la plus raisonnable que j'aie entendu étant qu'il s'agit d'une carte sur laquelle se trouvent un certain nombre de codes dont un seul est correct, et c'est ça que le dépositaire doit mémoriser. M'enfin, je me demande aussi sous quelle forme ils seraient utilisés, les codes en question, et comment ils sont vérifiés à l'autre bout de la commande.

(dimanche)

J'essaie le sandwich glacé

Mon poussinet (qui avait gardé pendant longtemps mon premier téléphone Android que je lui avais donné quand je me suis acheté mon actuel HTC Desire Z) s'est acheté un HTC One X[#] sous Android 4 Ice Cream Sandwich. Son premier soin a été de remplacer cette version d'Android telle que proposée par HTC par une version beaucoup plus standard, en l'occurrence un CyanogenMod 9. Enfin, une version dérivée d'un CyanogenMod 9, parce que ce dernier en est encore à ses balbutiements, et n'est pas disponible pour ce téléphone : c'est un peu déplaisant, il faut chercher les images sur un forum, on ne sait pas très bien à partir de quelles sources elles sont compilées, etc., mais enfin, c'est toujours mieux que ce que propose HTC.

Du coup, j'ai voulu tester moi aussi le sandwich glacé : j'ai moi aussi récupéré un CyanogenMod 9 non officiel pour mon téléphone sur un thread obscur d'un forum. Il y a quelques bugs par-ci par-là, mais globalement ça marche (du moins, ce que j'ai testé marche).

M'enfin, je ne suis pas vraiment emballé. J'ai certes vu quelques améliorations : la police du système a beaucoup plus de caractères, le changement d'une application à une autre est plus commode, le copier-coller est beaucoup plus agréable, on peut savoir combien de données sont échangées sur le réseau mobile et mettre des limites dessus, l'application galerie permet maintenant de trier les photos par emplacement géographique, bref, il y a des choses positives, mais rien de vraiment transcendant. Par contre, je ne suis pas, mais alors pas du tout, emballé par les nouveautés dans les contacts : l'application de gestion des contacts a été complètement séparée de l'application de téléphonie, on doit éditer les contacts dans la première alors que dans la seconde la liste de ceux-ci ne permet que de passer un appel (en un seul clic, et il ne semble pas y avoir moyen de configurer pour qu'il demande confirmation) ; et surtout, il n'y a plus aucun moyen de créer un contact qui ne soit pas associé à un compte (la version précédente permettait de créer des contacts locaux au téléphone et non synchronisés). D'autre part, l'application de démarrage (home screen et démarrage d'applications) de CyanogenMod 9, appelée Trebuchet, a l'air assez incomplète, donc je suis revenu à celle qui servait dans la version précédente (heureusement il suffit d'aller la récupérer sur le marché), mais bon, son interaction avec le reste du système, du coup, laisse un peu à désirer.

Bref, je ne suis pas sûr que ça méritait le temps passé à noter toutes mes préférences et l'emplacement de mes applications, et à réconstituer ça après l'installation.

Je vais aussi en profiter pour essayer d'utiliser Firefox (mobile, i.e., Fennec) comme mon navigateur principal sur le téléphone. On va voir ce qu'il vaut à l'usage.

[#] Choisi pour son excellente sensibilité GSM et 3G, mais qui est aussi assez monstrueux, parce que c'est un quad-core. Si quelqu'un peut m'expliquer pour quel genre d'usages il peut s'avérer utile d'avoir quatre cœurs dans un téléphone mobile (qui, outre qu'il passe essentiellement tout son temps en veille, fait très rarement tourner plus d'une application même quand il ne l'est pas), je suis curieux.

(dimanche)

Matrice de report des voix : mes résultats

Je conclus (enfin, j'espère !, parce que je commence à en avoir un peu marre) la série des trois derniers posts (1, 2 et 3) avec les résultats promis.

D'abord, en petits caractères, voici de façon très détaillée la méthodologie que j'ai suivie.

Premièrement, le jeu de données. S'agissant de 2012, elles sont ici pour le 1er tour et pour le 2d ; s'agissant de 2007, elles sont ici pour le 1er tour et pour le 2d. Pour bien s'entendre, il y a 36791 lignes de données pour 2012, et 36698 pour 2007.

J'ai d'abord retiré tous les départements et autres collectivités d'outre-mer (mais gardé la Corse), au motif que les reports s'y effectuent sans doute de façon différente de la métropole, et aussi parce que certaines ne sont pas détaillées dans le fichier pour 2007. Ensuite, comme je voulais un fichier unifié entre 2007 et 2012, j'ai fusionné toutes les données selon les codes de département et de commune, en ne gardant que les clés qui étaient présentes à la fois en 2007 et 2012 : ceci implique que pour les communes qui ont fusionné entre les deux (par exemple 21084 Blessey et 21551 Saint-Germain-Source-Seine ont fusionné pour former 21084 Source-Seine), je n'ai gardé que la commune ayant le numéro donné à la commune fusionnée, et inversement en cas de scission (par exemple, je supprime des données de 2012 la commune de 52033 Avrecourt qui faisait en 2007 partie de 52332 Val-de-Meuse). Je supprime encore les 15 communes (05014 Barret-sur-Méouge, 05181 Villar-d'Arêne, 10298 Pont-sur-Seine, 14726 Vassy, 31019 Artigue, 31081 Bourg-d'Oueil, 39364 Montrond, 43122 Lissac, 50049 Besneville, 50105 Catteville, 50614 Le Valdécie, 63181 Joserand, 79076 La Chapelle-Saint-Laurent, 80197 Cizancourt et 86241 Saint-Rémy-sur-Creuse) dont la totalité des votes a été annulée par le Conseil constitutionnel sur l'un des quatre tours d'élection considérés. Au final, il reste 36538 lignes de données.

S'agissant des colonnes de données, je conserve, pour chaque élection : le nombre d'abstentions, le nombre de blancs+nuls, et le nombre de votes pour chaque candidat, le total étant toujours égal au nombre d'inscrits. Qui peut, en revanche, changer, même entre les deux tours d'une même élection, oui : mon fichier totalise 42057423 inscrits (sur 44472834 en vérité, c'est-à-dire surtout avec l'outre-mer) au premier tour en 2007, 42057755 au second tour (sur 44472733), et en 2012 : 43250761 inscrits (sur 46028542) au premier tour et 43253197 (sur 46066307) au second.

J'attribue à chaque commune et indépendamment pour chacune des deux élections, une répartition gauche-droite grossière, sur la base des suffrages exprimés au 1er tour, en sommant les voix des candidats que j'ai classés, de façon ad hoc, comme étant « de gauche » d'un côté, « de droite » de l'autre, les centristes comptant pour moitié de chaque côté. J'ai classé de cette manière : en 2007, Besancenot, Buffet, Schivardi, Bové, Voynet, Royal et Laguiller à gauche, Bayrou et Nihous au centre, de Villiers, Le Pen et Sarkozy à droite ; en 2012, Joly, Mélenchon, Poutou, Arthaud et Hollande à gauche, Cheminade et Bayrou au centre, Le Pen, Sarkozy et Dupont-Aignan à droite. Par exemple, ce score répartit Paris en 2007 à 48.8% à gauche (et donc 51.2% à droite) et en 2012 à 55.8% à gauche (et donc 44.2% à droite). Ce score ne sera pas utilisé directement mais simplement pour analyser plus finement les populations d'abstentionnistes et d'électeurs de Le Pen (l'idée étant que les électeurs de Le Pen ne sont pas vraiment les mêmes à Calais et à Cannes et n'ont pas le même comportement au second tour).

Je divise fictivement les populations d'abstentionnistes et de votants pour Le Pen au premier tour en deux dans les proportions données par la répartition gauche-droite grossière évoquée ci-dessus (par exemple, comme j'ai dit qu'à Paris en 2012 la répartition est de 55.8% à gauche et 44.2% à droite, je ferai deux sous-populations des abstentionnistes du premier tour avec 55.8% d'un côté et 44.2% de l'autre, et pareil pour les électeurs de Le Pen du premier tour). J'appellerai ces sous-populations des abstentionnistes de gauche et abstentionnistes de droite et de même électeurs de Le Pen gauche et électeurs de Le Pen droite, ce qui ne signifie pas que je préjuge des choses à leur sujet, encore moins leur vote, il s'agit juste de refléter l'environnement général où ils se trouvent pour modéliser la façon dont ils se comporteront au second tour.

J'ai donc divisé les électeurs du premier tour en N populations : il y a 16 populations en 2007 (une pour chacun des 12 candidats, sauf Le Pen qui en a récupéré deux, plus encore deux pour les abstentionnistes et une pour les blancs-ou-nuls), et 14 populations en 2012. Pour le second tour, je n'ai que 4 populations : les abstentionnistes, les votes blancs-ou-nuls, et les deux candidats. Pour éviter de s'ennuyer avec la variation du nombre d'inscrits, je multiplie les populations du second tour par le rapport d'inscrits pour faire comme si le nombre d'inscrits du second tour était égal à celui du premier tour : ce sera ça ma cible. (On aurait aussi pu imaginer créer une nouvelle population, les absents-au-premier-tour, mais je ne pense pas qu'ils soient suffisamment nombreux ou homogènes pour être modélisables de façon sensée.)

Maintenant, je vais chercher à trouver la matrice de report entre les N populations du premier tour et les 4 populations du second tour (ramenées proportionnellement au nombre d'inscrits du premier tour). Je cherche donc une matrice 4×N de nombres réels entre 0 et 1 (les N colonnes représentant la répartition des votes au second tour, en proportion, de chacune des populations du premier tour). Les contraintes exigées de cette matrice sont :

  • toutes les entrées sont comprises entre 0 et 1,
  • la somme de chaque colonne vaut 1 (i.e., la matrice est stochastique à gauche),
  • la matrice appliquée au vecteur total de chacune des N populations de premier tour pour toute la France doit donner le vecteur total des 4 populations de second tour (par exemple, pour 2012, la matrice appliquée au vecteur [abstention-gauche:3930068 abstention-droite:4126717 blancs-ou-nuls:648166 Joly:786363 Le-Pen-gauche:2923896 Le-Pen-droite:3397710 Sarkozy:9340798 Mélenchon:3899288 Poutou:399753 Arthaud:194859 Cheminade:84939 Bayrou:3173183 Dupont-Aignan:627892 Hollande:9717129] doit donner [abstention:7804808 blancs-ou-nuls:2076910 Hollande:17125029 Sarkozy:16244014]), ces deux vecteurs étant évidemment de même total à savoir le nombre d'inscrits du premier tour.

Les deux derniers points déterminent N+3 conditions linéaires indépendantes (une pour chaque colonne et une pour chaque ligne, sachant qu'une quelconque de ces conditions peut être éliminée comme découlant de toutes les autres).

Je cherche maintenant la matrice, vérifiant ces contraintes, qui parmi les matrices vérifiant ces contraintes réalise la plus petite somme des erreurs quadratiques sur toutes les communes (enfin, parmi les 36538 communes de mon tableau) : les erreurs étant la différence, en nombre total de voix, entre l'application de la matrice au vecteur donnant les populations de premier tour, et le vecteur de second tour (ramené au nombre d'inscrits du premier tour) — on somme donc les carrés des erreurs sur chacune des quatre composantes du vecteur et sur chacune des 36538 communes. Ce calcul est un problème de programmation quadratique en 4N variables, que j'ai résolu avec la fonction qp de GNU Octave.

On peut éventuellement ajouter une contrainte demandant que le report d'un candidat du premier tour qui est admis au second tour soit parfait sur ce candidat lui-même : je n'ai pas eu à ajouter cette contrainte pour 2012 (la solution trouvée vérifiait déjà cette contrainte) ; pour 2007, la solution vérifiait cette contrainte sur Nicolas Sarkozy, et seulement approximativement sur Ségolène Royal (la matrice trouvée reportait 3% des voix de Ségolène Royal du premier tour sur l'abstention au second tour, et seulement à 97% sur elle-même) : ajouter de force la contrainte ne changeait que de quelques pour cent les reports sur les autres candidats, une précision à laquelle je ne prétends de toute façon pas, donc je l'ai introduite pour plus de propreté.

Évidemment, pour indiquer les résultats finaux, il faut réagréger les populations qui ont été artificiellement séparées, c'est-à-dire les « abstentionnistes-de-gauche » et les « abstentionnistes-de-droite », et de même « Le Pen-gauche » et « Le Pen-droite ».

Par contre, je n'ai finalement pas agrégé ensemble dans les calculs les candidats trop semblables (Arthaud et Poutou, ou bien Cheminade avec les blancs-et-nuls), au motif que de toute façon les résultats calculés pour eux sont probablement dénués de sens de toute façon mais que les garder séparés dans les calculs permet peut-être d'obtenir de meilleurs résultats sur les autres candidats (après tout, tout prédicteur en entrée est bon à prendre, je suppose). J'agrège ces résultats uniquement dans le résultat que j'indique :

Pour 2012 :

1er tour→
↓2d tour
Abstentions Blancs+nuls + Cheminade Joly Le Pen Sarkozy Mélenchon Poutou + Arthaud Bayrou Dupont-Aignan Hollande
Abstentions 79% 0% 0% 23% 0% 0% 0% 0% 0% 0%
Blancs+nuls 0% 46% 0% 15% 0% 0% 40% 9% 44% 0%
Hollande 6% 43% 74% 6% 0% 98% 60% 42% 25% 100%
Sarkozy 15% 10% 26% 56% 100% 2% 0% 49% 31% 0%

Pour 2007 :

1er tour→
↓2d tour
Abstentions Blancs+nuls Besancenot + Schivardi + Laguiller Buffet Bayrou Bové + Voynet De Villiers Royal Nihous Le Pen Sarkozy
Abstentions 82% 0% 0% 0% 17% 0% 0% 0% 0% 0% 0%
Blancs+nuls 0% 75% 1% 0% 11% 1% 0% 0% 14% 9% 0%
Sarkozy 13% 0% 5% 0% 31% 0% 100% 0% 86% 85% 100%
Royal 5% 25% 94% 100% 41% 99% 0% 100% 0% 6% 0%

Évidemment, ces tableaux sont à prendre avec énormément de pincettes ! Pour avoir une idée de l'imprécision, on peut comparer le tableau pour 2007 ci-dessus avec celui donné dans une entrée précédente (où les principales différences étaient que (a) je n'avais pas scindé les abstentions et Le Pen, (b) je n'avais pas imposé les contraintes linéaires sur les lignes de la matrice, et (c) je n'avais pas exclu l'outre-mer) : je pense que mon nouveau tableau est un poil meilleur, mais il ne l'est sans doute pas énormément, donc il faut prendre l'énorme différence dans les scores de reports de Frédéric Nihous comme signifiant simplement on n'en sait rien (même si le nouveau tableau suggère quand même plutôt que son électorat était de droite). Évidemment il est invraisemblable que l'électorat de Bové et Voynet se soit reporté à 99% sur Ségolène Royal en 2007, ou celui de Mélenchon à 98% sur Hollande en 2012, ou autres colonnes de ce genre, donc ces reports doivent simplement être considérés comme signifiant que l'algorithme a correctement classifié ces candidats comme étant de gauche, ou a contrario De Villiers comme étant de droite (on pourra m'objecter que ma méthodologie supposait de toute façon de classifier a priori les candidats grossièrement à gauche ou à droite, mais en fait les scores dont je parle sont relativement robustes à cette classification).

(mercredi)

Encore des considérations sur les statistiques électorales

Pour ceux qui auraient la flemme de lire les deux entrées précédentes (ici et ), la question qui m'intéresse est la suivante : peut-on, à partir des données électorales détaillées des deux tours d'une élection présidentielle, estimer statistiquement la matrice de report des voix d'un tour sur l'autre, c'est-à-dire, la proportion de chacun des types d'électeurs du premier tour (électeurs de chacun des candidats + nuls + abstentionnistes) qui a eu tel ou tel vote au second tour (l'un des deux candidats, ou le nul, ou l'abstention) ? Je voudrais faire cette analyse pour les élections présidentielle de 2007 et de 2012[#].

Des commentaires éclairants sur les deux dernières entrées font que j'y vois plus clair : d'abord concernant la terminologie, on parle d'inférence écologique parce qu'il s'agit de reconstituer des comportements individuels à partir d'agrégats (on sait simplement le nombre total de votes de chaque type au premier et au second tour dans chacune des ∼37000 communes de France). Ce type d'inférence est hasardeux en général, et l'idée naïve d'appliquer une simple régression linéaire peut donner des résultats aberrants ou faux quoique apparemment plausibles. Un exemple célèbre du paradoxe écologique est celui souligné en 1950 par W. Robinson, qui observe qu'en faisant une régression entre (état par état) le nombre de personnes nées à l'étranger et le nombre de personnes sachant lire et écrire sur les données du recensement de 1930 aux États-Unis, il observe une corrélation positive, i.e., plus un état compte de personnes nées à l'étranger, plus il compte de personnes sachant lire et écrire : peut-on en conclure que les personnes nées à l'étranger savent plus lire et écrire (dans la population des États-Unis de 1930) ? non, l'explication est simplement que les personnes nées à l'étranger et ayant immigré aux États-Unis ont eu tendance à s'installer dans des états où la population (native) savait plus lire et écrire, par exemple parce que ces états étaient plus riches. Ce texte résume un peu le problème ainsi que différents éléments de réponse.

Les deux problèmes que je répertoriais dans l'entrée précédente sont : primo, que le nombre de coefficients que je cherche à estimer est important et que les données ne sont pas assez nombreuses, ou surtout pas assez dispersées pour permettre une estimation raisonnable (un commentateur me signale que la taille de l'échantillon pour avoir des coefficients peu bruités croît exponentiellement avec le nombre de coefficients à déterminer) ; secundo, qu'on a des effets que j'appelle non-linéaires et qui sont en vérité la même chose que le paradoxe écologique décrit ci-dessus : les abstentionnistes du premier tour, pour ceux qui se mobilisent au second tour, par exemple, n'ont pas le même profil dans les communes qui votent globalement à gauche que dans celles qui votent globalement à droite (si on y réfléchit, il s'agit du même phénomène que dans l'exemple de Robinson mentionné ci-dessus : une hétérogénéité des populations concernées).

Différentes méthodes ont été proposées pour essayer de faire quand même cette fameuse inférence écologique. La méthode consistant à faire une simple régression linéaire a été analysée par L. Goodman dans les années '50, qui montre (si je comprends bien, parce que je n'ai pas pu avoir accès aux articles) qu'elle fonctionne bien sous des hypothèses qui, dans mon cas, doivent dire grosso modo que la répartition des reports de chaque type d'électeurs du premier tour n'est pas corrélé à la configuration des votes dans la commune (comme je le signale ci-dessus, c'est sans doute assez faux, par exemple dans le cas de l'abstention ou dans une moindre mesure du vote pour Le Pen ; ça me semble plus plausible pour le vote Bayrou). Divers statisticiens ont eu, comme moi, l'idée de borner les coefficients et de faire une régression linéaire contrainte (je n'ai regardé que très sommairement, mais ce papier et celui-là ont l'air de faire des choses de ce genre : le second, d'ailleurs, semble extrêmement proche de ce que j'ai fait).

Des méthodes plus sophistiquées existent : on me signale que Gary King en a écrit tout un livre, où il propose une « solution » au problème ; comme je n'ai pas accès à ce livre, je dois me contenter d'en lire des recensions et commentaires, et des résumés de la méthode de King, et je note que cette dernière ne fait pas l'unanimité. Voir par exemple ce texte, écrit par un critique. Le principal problème que j'ai, moi, est d'ordre pratique : l'implémentation de la méthode pour [le programme de statistiques] R, écrite par King lui-même, est limitée à des matrices 2×2 (or celle qui m'intéresse est 4×14 pour 2007 et 4×12 pour 2012) ; de même, ce package, qui implémente une autre méthode « sophistiquée » d'inférence écologique, est limité de la même façon ; et toutes ces méthodes sont algorithmiquement bien trop pénibles pour être implémentées de novo en un temps raisonnable. Donc il faut bien que je me contente de quelque chose de plus simple.

D'un autre côté, je pense qu'il est raisonnable, pour le problème considéré, de se contenter de quelque chose de plus simple : notamment parce que les populations des différents votes au premier tour sont relativement homogènes quand il s'agit de prévoir le vote au second tour (contrairement aux exemples classiques de « paradoxe écologique » où on relie des variables très différentes et mal corrélées). Un exemple extrême est évidemment la population d'électeurs au premier tour d'un des candidats qui passent au second tour : il est évident qu'une énorme majorité d'entre eux votent encore pour le même candidat au second tour — ici, la prédiction est presque parfaite.

Je défends donc finalement mon idée de rester sur une régression linéaire, avec trois principales idées que j'ai déjà exposées pour améliorer la qualité des chiffres :

  1. Contraindre les coefficients de la régression à être entre 0 et 1 et de somme 1 pour chaque colonne. (Comme je l'ai signalé, je ne suis pas le premier à faire ça.) Autrement dit, j'effectue une régression linéaire contrainte (je minimiser la somme des erreurs quadratiques parmi les matrices vérifiant les contraintes ci-dessus). L'idée sous-jacente est que certains coefficients sont connus trop grossièrement, leur valeur calculée naïvement peut être délirante, cette contrainte assure qu'ils seront tronqués à quelque chose de raisonnable (ce qui, du coup, assure de répercuter une erreur déraisonnable sur d'autres coefficients).
  2. Regrouper les candidats du premier tour trop petits et ayant un profil sociologique proche (ça ne sert à rien d'essayer de déterminer séparément les reports du vote pour Poutou et du vote pour Arthaud, ou du vote pour Cheminade et du vote blanc/nul).
  3. À l'inverse, scinder les populations du premier tour qui risquent d'être sociologiquement trop inhomogènes (abstentionnistes et vote Le Pen) en sous-populations artificielles dans les mêmes proportions qu'une proportion gauche-droite approximative sur la commune. Ceci permet (au prix de nouveaux coefficients à déterminer !) d'introduire un effet non-linéaire relativement raisonnable et donc de diminuer l'effet d'inhomogénéité de ces populations (et le « paradoxe écologique » qui va avec).

Je donnerai les chiffres que j'obtiens dans la prochaine entrée (qui sera, j'espère, la dernière sur ce sujet !), parce que je suis fatigué d'avoir écrit tout ça. Mais disons qu'ils sont assez plausibles (évidemment, il faut imaginer qu'ils ne sont que des ordres de grandeur !) et qu'ils prédisent, par exemple, que les électeurs de François Bayrou du premier tour se sont plus reportés sur Sarkozy que sur Hollande en 2012, alors qu'en 2007 ils s'étaient plus reportés sur Royal que sur Sarkozy — or ceci est conforme aux sondages directs sur la question ainsi qu'aux analyses des politologues.

[#] J'ai fini par obtenir les données du second tour de 2012, qui étaient effectivement sur RegardsCitoyens.org comme on me l'avait soufflé, mais bien cachées et pas à l'endroit où on les attendait. Elles sont par ailleurs un peu incomplètes puisqu'il y manque la Corse, mais peu importe.

(mardi)

Différentes hypothèses relatives à l'entrée précédente

Je posais hier le mystère suivant : comment expliquer qu'une régression linéaire entre les nombres de voix (commune par commune) aux deux tours de l'élection présidentielle de 2007 ne donne pas, comme on pourrait naïvement s'y attendre, une matrice de report des voix raisonnable ?

Différentes explications m'ont été proposées (soit dans les commentaires de l'entrée précédente, soit par d'autres canaux), et je voudrais y apporter quelques commentaires.

Voici une première hypothèse : mes calculs sont tout simplement dénués de sens, on ne peut pas espérer bêtement qu'une simple formule linéaire donne des résultats raisonnables, du coup les coefficients de la formule linéaire (fût-elle la meilleure possible) n'ont aucune espèce de signification. C'était aussi ma première idée. Mais elle ne tient pas pour la raison suivante, c'est que la formule linéaire en question est en fait étonnamment précise. Voici quelques données pour illustrer ce fait : si je prévois les résultats du second tour de 2007 à partir de ceux du premier avec la formule linéaire dont les coefficients sont donnés par le premier tableau de l'entrée précédente, j'obtiens une erreur médiane de 7 voix sur la prévision du nombre de voix de Nicolas Sarkozy au second tour (les erreurs sur les autres valeurs sont plus faibles), une erreur moyenne de 15 voix sur toutes les communes de France, une erreur moyenne sur la proportion de 1.3 points (en pondérant évidemment cette dernière moyenne par le nombre d'inscrits de la commune ; pour référence, le nombre moyen d'inscrits est de 1180), et les erreurs moyennes quadratiques sont également assez basses : 40 voix ou 2 points. Bref, l'idée que la formule est aberrante ne tient pas. Remarquer que la formule linéaire donnée par mon second tableau est à peine moins bonne (et même meilleure sur certaines métriques), ce qui donne l'idée que si la formule linéaire est bonne, tous ses coefficients ne sont pas pour autant bien déterminés (cf. ci-dessous).

Variante de la même hypothèse : mes données seraient trop bruitées, par exemple à cause des petites communes. J'ai essayé de refaire les calculs en me limitant aux communes ayant au moins 500 inscrits, cela ne change essentiellement rien (ce qui est normal, parce que je travaille sur des nombres de voix, ce qui fait intrinsèquement que les toutes petites communes ont peu de poids).

Autre idée proposée : la matrice des reports serait très inégale à travers le territoire. Cela dépend de ce qu'on entend par à travers le territoire, mais j'ai fait un test en me limitant aux communes d'Île-de-France : la matrice de corrélation n'est pas exactement la même, mais elle n'est pas fondamentalement différente, et en tout cas les coefficients négatifs ou supérieurs à 1 persistent (ce sont essentiellement les mêmes).

Maintenant, à la réflexion, voici les deux principaux effets que je crois être responsables de l'effet que je signalais :

Premièrement, les coefficients sont diversement bruités. L'idée est qu'un coefficient est d'autant plus facile à mesurer, dans une régression linéaire, qu'on a des variables ayant des valeurs très différentes sur sa valeur d'entrée. Mesurer les reports de voix, par exemple, des électeurs de Laguiller au premier tour, ne peut se faire fiablement qu'en comparant des endroits où elle fait un score relativement élevé et d'autres où elles fait un score particulièrement mauvais : l'ennui, c'est que quand elle fait un score élevé, d'autres candidats (de gauche) font également un score élevé, et noient le signal ; autrement dit, les variables d'entrées ne sont pas du tout décorrélées, et du coup il est très difficile de mesurer fiablement les coefficients depuis chacune d'entre elles. Pour pallier ce problème-là, on pourrait éventuellement réunir des candidats sociologiquement trop proches (par exemple, pour l'analyse des résultats 2012, il sera sans doute pertinent d'agréger les votes pour Poutou et Arthaud ensemble, voire aussi à ceux pour Mélenchon, car il est essentiellement impossible de trouver des endroits où le rapport entre ces scores s'écarte énormément de la moyenne nationale ; de même, le score de Cheminade étant essentiellement une variable aléatoire toute petite, on ne peut rien en dire d'utile, autant l'agréger aux votes nuls).

Deuxièmement, il y a des effets non-linéaires qui ont une trace linéaire non nulle. J'insiste sur le qualificatif : le fait qu'il y ait des effets non-linéaires est évident, mais on peut être tenté de dire ils ne doivent pas être bien importants puisque l'approximation linéaire donne de bons résultats (cf. ci-dessus). Seulement ce n'est pas une analyse complète. Je donne un exemple :

Prenons l'abstention. Elle a été sensiblement au même niveau entre les deux tours en 2007, mais on peut penser qu'elle ne concerne pas les mêmes personnes : beaucoup de gens s'abstiennent au second tour parce que leur candidat de prédilection a disparu du premier, et a contrario, beaucoup de gens s'abstiennent au premier tour parce que leur candidat de prédilection leur semble assuré d'accéder au second tour. Considérons ces derniers : ils ne forment pas une population homogène — certains sont de gauche et voteront plutôt pour la candidate de gauche au second tour, et certains sont de droite et voteront plutôt pour le candidat de droite ; le rapport entre ces deux populations doit être grossièrement de l'ordre du rapport entre électeurs de gauche et de droite au premier tour. On a donc affaire à un effet non-linéaire : il y a apport vers les deux candidats du second tour d'une partie des abstentionnistes dans des proportions déterminées pour parti par le rapport gauche/droite au premier tour. Ça c'est assez évident. Maintenant, comment cet effet non-linéaire se fait-il approximer par une régression linéaire ? Il y a évidemment un effet qui se manifeste dans la colonne des reports de l'abstention, vers les deux principaux candidats, mais il y a aussi une partie qui se manifeste dans la colonne des reports de chacun de ces candidats, car leurs électeurs semblent se multiplier au second tour (si l'abstention varie peu d'une commune à l'autre, c'est surtout cet effet-là qu'on va voir) : on va donc voir apparaître une proportion de report supérieure à 1 entre un candidat et lui-même, et c'est exactement ce qui se manifeste sur mon tableau. (Et comme la somme des coefficients par colonne vaut 1, s'il y a une entrée supérieure à 1, il y en a une qui est négative, ce qui correspond au fait que la présence d'électeurs de gauche au premier tour se manifeste par un défaut de report d'abstention vers le candidat de droite du second tour puisque ces électeurs indiquent qu'on est dans une région de gauche.)

Comment modéliser cet effet non-linéaire ? Je peux imaginer faire la chose suivante : déterminer pour chaque commune une mesure approximative entre 0 et 1 de « proportion de votes à gauche » (parmi les suffrages exprimés), et complémentairement une proportion de droite. Cela peut se faire en classant a priori les candidats comme à gauche ou à droite, ou en utilisant la première régression linéaire pour le faire automatiquement : peu importe, c'est un indice grossier. On divise ensuite artificiellement la population d'abstentionnistes du premier tour entre abstentionnistes « de gauche » et « de droite » suivant cette proportion. Le nombre d'abstentionnistes de chaque catégorie est donc une fonction non-linéaire (quadratique, précisément), et c'est ces deux fonctions (dont la somme est le vrai nombre d'abstentionnistes) qu'on utilise dans une régression linéaire, ou une régression linéaire contrainte. On peut faire la même chose pour les votes pour Le Pen au premier tour, qui représentent un vote protestataire pas forcément de droite : les séparer artificiellement en deux populations dans les mêmes proportions que la séparation gauche/droite sur l'ensemble des exprimés, et utiliser ces deux populations séparément dans la régression. (Ensuite, bien sûr, si on veut calculer une matrice de report des voix, on réunira ces deux populations qui ont été séparées fictivement pour introduire un effet non-linéaire.)

Toute cette procédure est un petit peu ad hoc, mais ça me semble néanmoins assez raisonnable. Sur les données de 2007, introduire de cette manière une division gauche/droite dans les populations d'abstentionnistes et d'électeurs de Le Pen au premier tour me permet d'améliorer d'environ 15% la précision sur les scores de Sarkozy et Royal au second tour. Et en réagrégeant les populations, j'obtiens un vecteur de reports des voix des électeurs de Le Pen un peu plus crédible que du tout-Sarkozy : 87% de report vers Sarkozy, 1% vers Royal, 7% vers l'abstention et 5% vers le nul (je n'y crois toujours pas, mais c'est quand même moins délirant).

Je tenterai d'appliquer ces différentes idées sur les chiffres de 2012 quand je les aurai. En attendant, pour m'amuser, j'ai fait une régression linéaire avec contrainte entre les chiffres du premier tour de 2012 et ceux du premier tour de 2007, pour tenter de répondre à la question les électeurs de tel candidat de 2012, pour qui avaient-ils voté en 2007 ? (en faisant comme si la population était constante, ce qui n'est pas le cas). Ces chiffres ne sont pas sérieux du tout, donc, mais ils sont amusants (je les donne en proportion du score de 2012, i.e., la proportion pour chacun des candidats de 2012 de la fraction de leur électorat qui viendrait de chaque candidat en 2007) :

Je répète que ce n'est pas à prendre trop au sérieux, mais il est amusant de voir que ce n'est pas totalement délirant non plus (pour commencer, on peut dire que le calcul a identifié le fait que Bayrou ou Sarkozy étaient bien les mêmes candidats en 2007 et 2012).

(lundi)

De la difficulté de faire une régression linéaire contrainte en politique

Dans l'entrée précédente, j'ai suggéré l'idée de faire une régression linéaire multivariée entre les deux tours des résultats de l'élection présidentielle, c'est-à-dire, essayer de calculer quelle combinaison linéaire des résultats du premier tour de la présidentielle (considérés comme un vecteur de N+2 nombres, à savoir le nombre de voix pour chacun des N candidats + bulletins blancs/nuls + abstentions) approche le mieux, sur l'ensemble des communes de France, les résultats du second tour (considérés comme un vecteur de 4 nombres, pour 2 candidats + blancs/nuls + abstentions). J'espérais[#] — un peu naïvement comme on va le voir — que ce calcul permettrait de connaître la matrice de reports des voix, c'est-à-dire, la proportion, dans chacun des N+2 votes possibles au premier tour, des 4 votes possibles au second tour : par exemple savoir que les électeurs de François Bayrou au premier tour se seraient reportés à 30% sur l'abstention, à 5% sur le vote blanc, à 35% sur Nicolas Sarkozy et à 30% sur François Hollande (chiffres imaginaires mais pas aberrants).

Les résultats du second tour n'étant pas encore disponibles sur www.data.gouv.fr au moment où j'écris, je me suis dit que j'allais m'exercer sur les résultats de 2007 (pour calculer les reports entre les deux tours de celle-ci soit, de façon plus osée, entre 2007 et 2012). Je passe sur les différentes petites crottes de ragondin rencontrées en chemin pour préformater les données sous une forme sympathique (par exemple les communes qui ont eu la fort sotte idée de fusionner ou de se séparer ; je passe aussi sur le fait qu'il n'y a pas de version détaillée des résultats de Paris, parce que Paris a le malheur d'être une unique commune). Disons que j'ai un gros tableau de données raisonnables, d'où j'ai retiré tout ce qui me chagrine.

Il n'est alors pas difficile de faire les régressions linéaires, avec un programme comme R[#2]. C'est-à-dire trouver les (2+2)×(12+2)=56 coefficients tels que, pour chaque vote possible au second tour, le nombre de ces votes soit au mieux prédit par la combinaison, affectée par les coefficients correspondants, des 14 votes possibles au premier tour (il y avait 12 candidats en 2007, ce qui fait 14 avec blancs et abstention). Il est assez facile de se convaincre, dans la mesure où le nombre d'inscrits ne change pas entre les deux tours (ce qui est quasiment vrai — pas rigoureusement, et ça fait partie des petites crottes de ragondin — mais suffisamment pour qu'on puisse faire comme si), que la somme des coefficients sur une colonne de cette matrice (c'est-à-dire pour chaque vote possible de premier tour) vaut 1. Maintenant, j'espérais que quelque chose ferait que ces coefficients seraient aussi tous positifs, et auraient l'interprétation naïve que j'ai décrite ci-dessus comme matrice de transfert des voix. Or ce n'est pas le cas, et voici la matrice des coefficients :

1er tour→
↓2d tour
Abstentions Blancs/nuls Besancenot Buffet Schivardi Bayrou Bové Voynet De Villiers Royal Nihous Le Pen Laguiller Sarkozy
Abstentions 0.8519 −0.4145 0.1060 0.0578 −0.2845 0.1705 0.5994 −0.5476 0.0281 0.0002 −0.5410 −0.0405 0.3789 0.0047
Blancs/nuls 0.0035 0.4859 0.1085 0.0113 0.5714 0.0867 −0.1229 0.0775 0.0596 −0.0019 0.2442 0.0119 0.2184 0.0153
Sarkozy 0.0910 0.5596 −0.0944 −0.0309 0.8717 0.3499 0.0586 0.9280 0.9056 −0.1129 0.7721 0.9979 −1.2629 1.0427
Royal 0.0532 0.3785 0.8656 0.9573 −0.1743 0.3938 0.5116 0.5719 0.0021 1.1131 0.5122 0.0283 1.6956 −0.0627

Le fit linéaire est excellent : même si je ne sais pas lire exactement les données de marges d'erreur que R me sort, je sais lire qu'elles sont très faibles (par exemple s'il me dit que 99.99% de la variance est expliquée par ce modèle linéaire, ou que dans 50% des communes l'écart est inférieur à 6 voix) ; bref, ces coefficients ont un sens. Mais pas exactement celui que je veux !

Il est relativement concevable que 85% des abstentionnistes du premier tour en 2007 l'aient encore été au second, tandis que 9% seraient allés voter Sarkozy et 5% Royal ; ou que les électeurs de Bayrou se soient reportés à 17% sur l'abstention, à 9% sur le vote blanc, à 35% sur Sarkozy et à 39% sur Royal : j'y crois assez ; ou encore que, comme le tableau le suggère, ceux de Villiers aient voté à 91% pour Sarkozy au second tour tandis que 3% se seraient abstenus et 6% auraient voté blanc. Mais il est impossible que 93% des électeurs de Voynet aient voté Sarkozy au second tour, 57% pour Royal, et un pourcentage négatif, −55%, se soient abstenus.

C'est assez perturbant : ce tableau montre des chiffres relativement sensés, dans un monde où un vote négatif serait possible. ☺

Bon, ben si les chiffres ne veulent pas d'eux-mêmes être raisonnables, il n'y a qu'à les forcer à l'être : je peux demander à chercher, après tout, quelle est la matrice à coefficients positifs, où chaque colonne a pour somme 1, et qui réalise la meilleure approximation linéaire parmi celles vérifiant ces contraintes : on parle de régression linéaire avec contraintes. Il s'agit là d'un problème d'optimisation quadratique (avec contraintes linéaires, et terme quadratique positif défini) : quelque chose qu'on sait très bien faire. En principe, R a ce qu'il faut pour y arriver : mais nouvelle petite crotte de ragondin, ce package ne marche pas chez moi, il prétend que mes contraintes (=la positivité des variables) sont impossibles à satisfaire, je ne sais pas ce qu'il a fumé. À la place, j'ai dû passer par Octave, qui est encore plus pénible à manipuler et que je connais encore moins, mais enfin qui sait faire le boulot (quand on réussit à exporter les matrices du problème de R vers Octave, ce qui n'est pas la chose la plus agréable qui soit).

Voilà ce que ça donne :

1er tour→
↓2d tour
Abstentions Blancs/nuls Besancenot Buffet Schivardi Bayrou Bové Voynet De Villiers Royal Nihous Le Pen Laguiller Sarkozy
Abstentions 0.8424 0.0000 0.0000 0.0000 0.0000 0.1679 0.0275 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
Blancs/nuls 0.0424 0.2600 0.0000 0.0000 1.0000 0.1093 0.0000 0.0000 0.0026 0.0000 0.5503 0.0004 0.0000 0.0000
Sarkozy 0.0495 0.0900 0.0000 0.0000 0.0000 0.3283 0.0000 0.0000 0.9974 0.0000 0.1999 0.9996 0.0000 1.0000
Royal 0.0657 0.6500 1.0000 1.0000 0.0000 0.3945 0.9725 1.0000 0.0000 1.0000 0.2498 0.0000 1.0000 0.0000

De nouveau, il est relativement raisonnable de penser que les électeurs de François Bayrou au premier tour en 2007 se seraient divisés au second tour entre l'abstention à 17%, le vote blanc à 11%, Sarkozy à 33% et Royal à 39% (les chiffres diffèrent très peu du tableau précédent, et sont toujours crédibles). À la limite, il n'est pas totalement délirant d'imaginer que, avec la précision des mesures, près de 100% des électeurs de Marie-George Buffet, ou même d'Olivier Besancenot, se soient reportés sur Ségolène Royal au second tour, comme d'ailleurs les électeurs du premier tour de Ségolène Royal elle-même. Mais alors croire que les électeurs de Gérard Schivardi au premier tour auraient tous voté blanc au second (sans s'abstenir, mais vraiment voté blanc), ou croire que ceux qui ont voté blanc au premier tour auraient été 65% à voter pour Royal au second, ce n'est, comme qui dirait, pas très crédible. Je suis aussi amusé du 99.96% de report calculé de Le Pen sur Sarkozy (les 0.04% restants ayant censément voté blanc, c'est très précis) !

Voici donc la question à 100¤ : ces chiffres ont-ils une quelconque signification en rapport avec la réalité, ou un quelconque intérêt pour l'analyse politique ? À défaut, y a-t-il un autre traitement statistique que je puisse mener pour en obtenir de meilleurs ? Et en tout état de cause, quand (et si) le ministère de l'intérieur se sortira les doigts du c** pour fournir les chiffres complets du second tour de 2012 en Open Data, sera-t-il intéressant de mener la même analyse ou doit-on considérer que c'est du temps perdu ?

[#] Pourquoi espérer ça ? Parce que si les reports de voix du premier vers le second tour se font à peu près de la même façon partout, et notamment, indépendamment de ce pour quoi votent les autres électeurs de la commune, ce qui a priori ne semblait pas une hypothèse délirante, alors on devrait bien retomber dessus en faisant une régression linéaire.

[#2] Programme au nom incroyablement stupide quand on pense à la difficulté que cela cause de chercher dans Google des informations sur un truc à une lettre.

(dimanche)

Résultats d'élections : à la Bastille

[Rassemblement place de la Bastille]Je ne suis pas trop le genre à me livrer à des manifestations de liesse politique (ou à participer à des manifestations tout court, d'ailleurs, ne serait-ce que parce que je suis plutôt agoraphobe) : et pourtant, je me suis rendu — certes brièvement — ce soir à la Bastille[#], où se fêtait, sans doute, plus le soulagement provoqué par la défaite du président sortant que la joie de la victoire de l'impétrant.

En ce qui me concerne, du moins, j'attends assez peu de celui qui sera le prochain président de la République ; j'en attends même le moins possible parce qu'en parlementariste convaincu je considère que l'action de l'exécutif doit être menée par le gouvernement et dirigée par le Premier ministre, dont la légitimité découle de l'Assemblée nationale, laquelle reste à élire (et c'est là l'élection réellement importante, chose que certains journalistes et hommes politiques semblaient découvrir ce soir avec un étonnement ravissant). À défaut d'inexister complètement (dans le fond je ne vois pas pourquoi on aurait besoin d'un chef de l'État[#2]), avoir un rôle modeste et laisser le gouvernement gouverner sera le mieux que pourra faire, à mes yeux le président de la République : la promesse de François Hollande de ne pas être le président de tout était peut-être bien pour moi la plus importante[#3], et contraste avec l'attitude de son prédécesseur.

C'est avec une clameur assez émouvante, donc, que la foule réunie place de la Bastille a accueilli la nouvelle[#4], diffusée sur écran géant, de la victoire de son favori, ou, plutôt, du départ de l'objet de son ressentiment. Émouvante, comme est communicatif l'exultation du bonheur[#5] de la multitude : ou peut-être juste que je suis bon récepteur, en tout cas j'en ai eu les larmes aux yeux. Et je me suis rendu compte que j'attendais ce moment depuis cinq ans[#6] et que j'aurais été absolument effondré de devoir attendre cinq ans de plus[#7]. Je me suis étonné à prendre les choses aussi à cœur (et de prendre à cœur aussi, a contrario, que le score annoncé soit aussi serré).

Ce n'est pas juste que je me définis comme de gauche : je n'aurais pas éprouvé la même chose, je pense, si le président sortant battu avait été[#8] un Jacques Chirac, François Fillon, Dominique de Villepin ou un Alain Juppé[#9].

Pour autant, j'ai un peu tendance à trouver que certains reproches que l'on fait à Nicolas Sarkozy, et qui fondent le rejet de celui-ci, sont un chouïa injustes. Je ne veux pas simplement dire qu'il est un peu idiot de mélanger le grave et l'anecdotique et de lui opposer, par exemple, d'avoir dîné dans le restaurant d'un certain grand hôtel parisien le soir de son élection (oui, c'était une faute de goût, mais de là à en parler encore cinq ans plus tard…). Je trouve que mes concitoyens ont un peu tendance à oublier que ce sont eux qui l'ont élu[#10] : or il me semble que le style et l'action qui ont été les siens tout au long de son quinquennat étaient aisément prévisibles à partir de ce qu'on savait de lui il y a cinq ans. Certes pas le détail des scandales qu'on a associés à son nom (et dont je ne suis pas sûr, malheureusement, qu'ils forment le plus grave reproche qu'on lui adresse), mais sans doute leur teneur générale. Il ne faut pas non plus reprocher de démanteler les services publics à celui qui l'avait explicitement promis dans le programme qu'il a été élu pour réaliser : il faut le reprocher aux électeurs qui l'ont élu. Quant à l'influence du sulfureux M. Buisson, la xénophobie ou au moins la captation tentée des voix du FN, elle était loin d'être indétectable en 2007.

Bref, ce n'est pas que je cherche à défendre le bonhomme, mais j'ai une certaine incompréhension du changement d'attitude des Français à son égard (changement évident quand on regarde les courbes de popularité), alors que lui-même m'a semblé assez constant et assez prévisible pendant toute la période, et je ne le déteste ni plus ni moins maintenant qu'autrefois (disons même, depuis 1995, où j'ai commencé à le remarquer). Mais peut-être que je me fais des illusions.

Toujours est-il que les peuples sont des amants cruels, et vite déçus demain par ce qu'ils réclamaient hier. Comme je suis pessimiste, je pense qu'un tel désamour frappera aussi rapidement le candidat aujourd'hui élu, et je le regrette d'avance. Je suis tenté de faire la prévision opposée à celle à laquelle je fais référence dans la note #6.

Pour parler d'autre chose : dès que le ministère de l'Intérieur aura publié les fichiers Open Data avec les résultats complets du 2e tour, je vais m'amuser à faire une régression linéaire multivariée (sur l'ensemble des communes) entre les résultats des 1er et 2d tours : ceci devrait permettre de connaître, avec une grande fiabilité, la matrice de report des voix entre eux, donc savoir dans quelles proportions les électeurs de chacun des candidats du 1er tour ont voté pour les candidats du 2d (ou se sont abstenus). Cette matrice de reports a été l'élément clé de sondages de second tour, et continue d'être mesurée en même temps que le résultat final, mais je n'ai pas souvenir d'avoir vu, dans les élections précédentes, une telle matrice calculée à partir des résultats définitifs.

Bon, les résultats des législatives grecques sont certainement plus intéressants de tout point de vue, mais je n'ai pas les compétences pour les lire.

[#] Une première idée nous avait amenés, mon poussinet et moi, vers 19h, rue de Solférino : mais remplie de monde de façon compacte sur trois intersections, elle était moins appropriée que la Bastille à ce genre de célébration.

[#2] Normalement, on définit un chef d'État comme la personne qui émet et reçoit les lettres de créances des ambassadeurs, et au nom de qui les traités sont signés. Mais s'agissant, par exemple, de la Suède, les traités qu'elle signe le sont — j'avais remarqué ça en lisant le Traité constitutionnel européen — au nom du Gouvernement du Royaume de Suède (alors que le Royaume-Uni les signe au nom de Sa Majesté la reine du Royaume-Uni de Grande-Bretagne et d'Irlande du Nord : il y a une véritable différence en ce que la reine du Royaume-Uni a théoriquement des pouvoirs de réserve que n'a pas, même en théorie, le roi de Suède) : je ne sais pas s'il en va de même des lettres de créance, mais il n'y a pas de raison que ce ne soit pas le cas, et du coup, on peut se passer complètement du poste cérémonial de chef d'État, ou plutôt considérer que le chef d'État est la personne collective du gouvernement de la République (et il n'y a pas spécialement besoin de faire une présidence tournante comme en Suisse).

[#3] Ce qui ne veut pas dire que je n'approuve pas de grandes parties de son programme par ailleurs, mais c'est au Parlement de faire la loi.

[#4] Nouvelle avec beaucoup de guillemets autour, parce que la nouvelle circulait depuis au moins 18h15 (que ce soit à coup de messages subtilement codés ou simplement en consultant les sites Web des journaux étrangers). Et à 19h55 il est assez peu probable que tout le monde sur la place ne fût pas déjà au courant (ils passaient par la Bastille par hasard, peut-être ? et la RATP avait fermé la station par hasard aussi ?).

[#5] Comme un petit air de printemps, disait-on. Et c'est assez frappant de se dire : si c'est déjà ça le bonheur que provoque le fait de se débarrasser d'un président qui, quoi qu'on en dise, a été élu démocratiquement, n'a tué personne, et ne sera resté que cinq ans, le bonheur qu'éprouvent les peuples qui, eux, se débarrassent d'un dictateur qui a commis des crimes impunément pendant des dizaines d'années, ça doit être vraiment incroyablement fort.

[#6] Aussi pour pouvoir dire amicalement[#6b] pouêt à tous ceux — certes moins nombreux sur la fin — qui nous prévoyaient sa réélection. Je pense notamment à un post du blog de Vicnent (mais je ne le retrouve pas, suis-je encore passé dans un monde parallèle ?) où il prévoyait et pariait que malgré l'impopularité dans laquelle le président s'était enfoncé, il serait forcément réélu en 2012, parce qu'il aurait fondamentalement bien compris les Français.

[#6b] Et je récuse l'accusation de Schadenfreude. (Sérieusement.)

[#7] Pas que je l'ai véritablement craint, mais le resserrement des intentions de vote au cours des derniers jours me stressait un peu. Soulagement, donc.

[#8] Pour prendre des exemples de gens vaguement crédibles. J'ai encore plus de respect, par exemple, pour Chantal Jouanno, mais on ne l'imagine pas trop en présidente.

[#9] Disons pudiquement que M. Sarkozy aura accompli l'exploit de faire passer à mes yeux M. Juppé pour une référence d'homme intègre.

[#10] Évidemment, ceux qui font la fête ce soir à la Bastille ne doivent pas énormément intersecté ceux qui ont élu M. Sarkozy en 2007, mais il y a forcément certains de ses électeurs d'alors qui ont changé d'avis (au moins vers l'abstention).

(vendredi)

Le jugement de paris : comment établir une cote ?

Une obscure province des États-Unis d'Europe va bientôt tenir l'élection de son gouverneur. Les deux candidats encore en course s'appellent M. Sarlande et M. Holkozy. Toutes sortes d'instruments sont utilisés pour mesurer l'état de l'opinion de l'électorat avant cette échéance (sondages, pronostics de politologues et autres boules de cristal), mais au final on aimerait avoir des résultats lisibles sous la forme M. Sarlande a x% de chances d'être élu gouverneur, M. Holkozy a (100−x)% de chances. Déjà, il est un peu difficile de donner un sens à une telle affirmation : si je prétends que M. Sarlande a 85% de chances et M. Holkozy en a 15%, que l'un ou l'autre soit élu, on ne pourra pas me dire que j'avais tort (après tout, les deux nombres étaient strictement positifs) ; or l'expérience (=l'élection) n'a lieu qu'une fois, on ne va pas la répéter d'une manière qui permette de donner un sens statistique aux probabilités.

On pourrait cependant faire des statistiques pour savoir si je suis un fin analyste politique. Si, par exemple, à chaque fois qu'il y a une élection je fais un pronostic du style le candidat 1 a une probabilité q1 d'être élu, le candidat 2 en a q2, le candidat 3 en a q3, etc. (la somme ∑i(qi) des probas annoncées valant 1), si c'est le candidat numéro i qui est effectivement élu on m'attribue un score de fiabilité de valeur log(n)+log(qi) où n est le nombre total de candidats. (Pourquoi log(qi) ? Parce qu'il est facile de se convaincre que la stratégie optimale pour maximiser son succès dans ce contexte, si on connaît les « vraies » probabilités pi, consiste à annoncer effectivement qi=pi, auquel cas on a une espérance de gain de l'opposé de l'entropie de Shannon de la distribution, plus le terme ajouté log(n) (=l'entropie d'une distribution uniforme sur les candidats) qui est là pour assurer qu'on ne gagne ni ne perd rien en faisant la prévision triviale de donner la même proba qi=1/n à chaque candidat.) Par exemple, quand je prédis 85% de chances à M. Sarlande et 15% à M. Holkozy, il convient d'ajouter 0.77 logons à mon score de fiabilité si c'est le premier qui est élu et d'y retranche 1.74 logons si c'est le second qui est élu. Et si mes chiffres sont corrects, mon espérance de score est de 0.39 logons. (Le mot logon indiquant que j'ai pris des logs base 2.) Si on somme ce score fiabilité sur un grand nombre de prévisions, on peut comparer mes capacités d'analyse à celles d'autres analystes. Je me dis souvent qu'on devrait faire des concours de prévisions de ce genre entre analystes politiques.

Bon, maintenant, comme les gens aiment bien jouer aux jeux de hasard, inévitablement, on va vouloir transformer cette question d'évaluer les chances en un pari. La conversion est la suivante : dire que je considère que M. Sarlande a x% de chances d'être élu et que M. Holkozy en a (100−x)%, ça signifie que je suis prêt à accepter de payer x¤ pour un contrat qui me promet 100¤ si c'est M. Sarlande qui gagne, et dualement (100−x)¤ pour un contrat qui me promet 100¤ si c'est M. Holkozy qui l'emporte. Il y a donc moyen de mettre en place un marché de tels contrats, laisser faire l'axiome libéral de l'efficience des marchés, et voir ce qu'il en résulte. C'est ce que fait le site intrade.com (dont le fonctionnement est résumé ici), et sur lequel on peut notamment voir le cours de MM. Sarlande et Holkozy ici et (à moins que ce soit le contraire). Ces cours (le prix auquel s'échange un contrat je paie 10$ en cas d'élection de Untel) se lisent assez directement comme des probabilités, c'est assez agréable. Il serait intéressant de les évaluer sur un grand nombre d'élections selon le score de fiabilité que je propose plus haut. À vrai dire, je ne suis pas trop convaincu par l'efficience de ces marchés, qui ont des volumes assez petits dont les acteurs sont largement des Américains pas forcément bons analystes de la situation politique française (même si ceux qui parient, évidemment, doivent se renseigner). La logique voudrait que j'intervinsse moi-même dans le marché si je m'estime meilleur analyste (ou simplement pour acheter une assurance contre l'élection d'un candidat qui me déplairait), mais j'ai assez peu de confiance dans ce genre de site et dans mes chances de récupérer effectivement une grosse somme d'argent si je parie comme je le pense.

Un système apparenté mais différent est utilisé par les bookmakers anglais : il s'agit cette fois de cotations (on n'échange pas des contrats mais on place des paris à une certaine cote), et on peut voir ici une synthèse des cotes qu'ils attribuent (c'est un peu pénible à lire : le système traditionnel d'affichage de la cotation indique la fraction de la mise qu'on récupère en plus de celle-ci si on a raison sur la prévision — sachant que si on a tort on perd tout ; alors que le système décimal indique combien on récupère au total, mise comprise, si on a raison, comme un nombre décimal).

J'en viens à la question qui m'a pas mal tracassé : comment fait-on, au juste, pour établir une cote de paris ? (Autrement dit, je veux imaginer un système où chacun peut décider de placer un pari sur un des candidats, à une cote instantanée déterminée automatiquement en fonction des paris précédents, pari qui sera payé par une autorité centrale organisatrice, et pas un système de marché comme sur intrade.com ; notamment, une personne doit pouvoir parier même si elle est seule à le faire.)

Une première idée naïve pour un système de paris pourrait être ceci : tous ceux qui le veulent placent un pari de la somme qu'ils veulent sur un des deux candidats, toutes ces sommes sont mises en commun (mettons que u zorkmids aient été pariés sur Sarlande et v sur Holkozy), et lorsque le gagnant est connu, la somme totale u+v est redistribuée à ceux qui ont parié sur ce gagnant, proportionnellement à leur mise (donc par exemple si c'est Sarlande qui gagne, la mise de ceux qui ont parié sur lui est multipliée par (u+v)/u, autrement dit ils emportent v/u fois leur mise en plus de celle-ci). Ce système est extrêmement simple, mais souffre de défauts rédhibitoires : essentiellement, la cote est la même pour tous et n'est connue qu'à la clôture des paris et ne dépend pas du moment où on a parié — ce qui va conduire à des paris de dernière minute alors que le résultat de l'élection se précise, et pénaliser les parieurs de la première heure qui auraient une vision claire bien en avance. On peut imaginer un tel système où les paris seraient clos à une date butoir, ou renouvelés dans le temps, ou ce genre de choses, mais on ne résout pas vraiment le problème.

Ensuite, je me suis imaginé la chose suivante : lorsqu'on parie une somme sur l'un des deux candidats, la cote instantanée utilisée est donnée simplement par le rapport entre la somme totale qui a été pariée sur l'un et celle qui a été pariée sur l'autre. Plus exactement, le système serait le suivant : initialement, l'autorité centrale place 100¤ (disons) comme somme fictive pariée sur Sarlande et autant sur Holkozy ; puis, si à un instant donné u zorkmids ont été pariés sur le premier et v sur le second, et si je veux miser δ (une somme infinitésimale) sur Sarlande, je récupérerai δ·(u+v)/u (c'est-à-dire ma mise δ plus encore δ·v/u de bonus) si j'ai eu raison et 0 (=ma mise est perdue) si j'ai eu tort. On convient que les cotations sont modifiées instantanément : pour parier une somme non infinitésimale, il faut diviser celle-ci en mises infinitésimales et faire l'intégrale qui convient — je n'insiste pas là-dessus. L'ennui c'est qu'avec ce système, les pertes de l'autorité centrale ne sont pas bornées : si après la mise fictive initiale de 100¤ de chaque côté je suis seul à parier et que je mise A sur Sarlande, et si j'ai gagné, je récupère ma mise A plus un gain de 100¤·log(1+(A/100¤)) payé par la banque (comme on le vérifie en calculant l'intégrale 100¤ (A+100¤) ( u+100¤ u ) du — ici écrite en MathML — qui vaut A + 100¤ · log ( 1 + A100¤ ) ). La divergence est certes logarithmique, mais elle est là (sans regarder le détail de l'intégrale, on voit bien que la divergence doit être logarithmique parce que le gain varie comme l'inverse de u).

Voici comment on peut y remédier. Disons que la banque (=l'autorité qui mène les paris) veut limiter ses pertes à 100¤ dans le pire cas. Elle met donc initialement 100¤ dans deux comptes, le compte u somme pariée sur Sarlande et restant à distribuer et le compte v somme pariée sur Holkozy et restant à distribuer. Si je veux miser δ (une somme infinitésimale) sur Sarlande, ce δ est ajouté à u comme précédemment, et placé à la même cote que précédemment (je récupérerai δ·(u+v)/u en cas de victoire de Sarlande, c'est-à-dire ma mise plus δ·v/u), mais cette fois je déduis la somme δ·v/u du compte v, puisque c'est à partir de là que je paie les gains. Il est facile de se convaincre que dans ce système, le produit u·v (ou, si on veut, la moyenne géométrique entre les deux) reste constant ; la banque réalise un bénéfice net de v−100¤ si c'est Sarlande qui gagne, et u−100¤ si c'est Holkozy, ses pertes sont donc minorées dans le pire cas (le reste des gains éventuels venant des mises des autres joueurs). Cette fois, si après la mise fictive initiale de 100¤ de chaque côté je suis seul à parier et que je parie A sur Sarlande, et si j'ai gagné, je récupère ma mise A plus un gain de 100¤·(A/(100¤+A)) payé par la banque, puisque u vaut 100¤+A après mes mises et v vaut 10000¤²/(100¤+A). Cette fois il n'y a pas de divergence puisqu'on intègre quelque chose en v/u, c'est-à-dire en fait en 1/u² (précisément, l'intégrale est 100¤ (A+100¤) ( u + ( 100¤/u ) u ) du ce qui vaut A + 100¤ · ( A 100¤ + A ) ).

Ce système semble mathématiquement assez naturel (et se généralise assez bien à plus de 2 candidats), et il me rappelle l'apparition de la moyenne géométrique que j'avais vue dans la réalisation des paniers de monnaies. Mais je ne sais pas si elle porte un nom standard, ni si c'est ce qu'utilisent les bookmakers anglais (modulo leurs marges, et modulo le fait qu'ils ne remettent évidemment pas à jour leur cotation instantanément).

(mercredi)

Douanes : commentaire d'une photo

Dans le charmant et ô combien humaniste clip de campagne de notre président pour le second tour, on voit l'image suivante (c'est autour de 1′19″ dans la vidéo sur DailyMotion, mais je ne sais pas faire un lien vers un instant précis d'une vidéo sur ce site) :

[Panneau douanes]

Comme j'ai pris le parti de parler fort peu de politique sur ce blog[#], je n'en dirai pas plus sur ce que m'inspire ce clip, ou l'apparition de ce panneau censé représenter les frontières de l'Europe. Par contre, comme je suis geek et ça je ne le cache pas, je me suis posé des questions sur ce panneau.

En arabe, il est écrit : الجمارك (ʾal-ǧamārik) — ce qui est le pluriel de الجمرك (ʾal-ǧumruk), la douane. Là j'ai le plaisir de pouvoir dire que M. Sarkozy m'a enseigné un mot d'arabe. Wiktionary m'apprend de plus que ce mot vient du turc gümrük, qui semble être le mot turc standard pour désigner les douanes (il n'a lui-même pas d'entrée dans Wiktionary, mais il en a une dans Wikipédia en turc qui parle bien des douanes). Je suppose que l'emprunt s'est fait sous l'Empire ottoman (qui parlait, si j'ai bien suivi, un turc largement mêlé de persan-lui-même-mêlé-d'arabe).

Il y a une autre chose que je remarque dans ce mot arabe, c'est la façon dont est écrite la dernière lettre, U+0643 ARABIC LETTER KAF (celle de gauche, pour ceux qui auraient oublié que l'arabe s'écrit de droite à gauche…) : si on compare les deux formes suivantes de la même lettre :

Celle de gauche est la forme « isolée »[#2] de la lettre kāf, qu'il aurait, me semble-t-il, été plus standard de trouver ici (et que votre navigateur devrait vous montrer dans le الجمارك que j'ai cité ci-dessus) ; remarquons d'ailleurs qu'elle est graphiquement identique à un lam surmonté de l'autre variante de cette lettre. La variante de droite est celle qu'on trouve sur le panneau en question, et c'est celle qui sert normalement plutôt pour la forme connectée à gauche (i.e., initiale ou médiale) de cette lettre. Je ne sais pas pourquoi c'est celle qu'on trouve ici : est-ce une bizarrerie de cette police de caractères servant pour les panneaux routiers ? Est-elle là pour plus de lisibilité ? Est-ce que la variation n'a simplement aucune importance ? C'est probablement un peu comme l'alphabet grec, où on enseigne souvent qu'il faut utiliser telle variante du bêta en début de mot et telle variante en milieu de mot, ou telle variante du sigma en milieu de mot et telle variante en fin de mot, mais en fait ces règles sont sans doute un peu arbitraires[#2b].

Ajout : J'aurais peut-être dû rendre plus clair le fait qu'il ne s'agit en aucun cas d'une bizarrerie d'orthographe (la dernière lettre du mot est indiscutablement un kāf) mais de typographie/écriture (que ce soit pour plus de clarté ou de simplicité ou je ne sais quoi, la forme isolée du kāf, dans cette police, ressemble à ce qu'on voit). En fait, cette page explique assez clairement que le fait de ne pas prendre une forme spéciale pour le kāf isolé/final est typique du persan, et que pour ça Unicode a inventé le U+06A9 ARABIC LETTER KEHEH (le nom keheh n'est pas utilisé en persan, qui appelle kāf la lettre en question, mais en sindhī, qui utilise à la fois un kāf arabe et un kāf persan appelé alors keheh). On pourrait donc transcrire le mot tel qu'il figure sur le panneau en الجمارک, ce qui donne la bonne apparence, mais ce serait un peu un non-sens (le mot n'est pas persan, la lettre est un kāf arabe, quelque inattendue que puisse être son écriture).

Revenons à la linguistique.

Le mot français douane, qui figure en-dessous, vient lui-même, apparemment via l'arabe, du mot persan دیوان (dīvān), lui aussi répandu par l'empire ottoman, où il désignait le divan du sultan, c'est-à-dire une sorte de conseil d'État (dont la porte emblématique, celle du sérail Topkapı à İstanbul, est la fameuse sublime porte qui par métonymie désignalit l'administration de l'Empire ottoman). Le mot a aussi donné en français, tout simplement, divan[#3], dont il est amusant de constater qu'il est apparenté à douane. À l'origine, un dīvān, comme peut-être l'arménien դիւան (maintenant écrit դիվան), semble désigner un recueil de textes, voire une collection de poèmes.

Bon, maintenant la question à 100 zorkmids : où cette photo a-t-elle été prise ? Et pour commencer, quelle est la troisième langue en-dessous de l'arabe et du français ? Le mot duana signifie douane en catalan, par exemple, mais je vois mal où on aurait du catalan dans ce contexte. Peut-être est-il plus plausible de penser que c'est le mot castillan aduana dont la première lettre serait tombée ou effacée ? Le centrage du mot (un peu décalé vers la droite) ne rend pas la chose invraisemblable ; et cela semble plausible si le panneau est situé à la frontière entre le Maroc (où l'on parle une forme d'arabe et, de façon officieuse mais néanmoins assez répandue, le français) et l'une des exclaves espagnoles de Ceuta ou Melilla (où l'on parle espagnol). Ceci dit, c'est un peu étrange d'avoir photographié un panneau dont une lettre serait tombée. Et à part ça, la frontière entre le Maroc et l'Espagne à un de ces endroits, d'après Google Images, elle a l'air un peu plus militarisée que ça, façon mur de Berlin dans les années '60, pas vraiment comme ce petit panneau qui pourrait être au milieu de nulle part.

Ajout : Plusieur personnes me signalent que la source est ici sur fotolia et que je ne sais pas me servir de la recherche par images dans Google Images (le truc est que j'ai bêtement cliqué sur visually similar images au lieu de descendre à pages that include matching images). Bon, ça confirme que c'est bien au Maroc, mais on ne sait pas pour autant si c'est aux frontières espagnoles ou, sinon, pourquoi l'inscription (a)duana.

Pas beaucoup de rapport, mais puisque je parlais de l'empire ottoman, je devrais mentionner que j'ai fini de lire le petit roman Parle-leur de batailles, de rois et d'éléphants[#4] de Mathias Énard (édité par Actes Sud). C'est l'histoire d'une visite (imaginaire !) que Michel-Ange — exaspéré que le pape Jules II se montrât si mauvais payeur — aurait fait à Constantinople en 1506, sur l'invitation du sultan Bāyezīd II pour concevoir un pont sur la Corne d'Or (dans la réalité, il semble que Michel-Ange ait bien été approché par le sultan, après Léonard de Vinci, mais qu'il ait refusé la proposition) ; et de sa réaction face à la découverte de cette ville et de ses habitants. C'est à la fois bien écrit et (pour autant que je puisse en juger) bien documenté, et ça se lit agréablement.

[#] Parce que — quelle que soit la position qu'on prenne — ça attire en général des commentaires fort stupides, alors que quand on parle, par exemple, du problème de Hadwiger-Nelson, ils sont beaucoup plus intelligents. Mais surtout parce que je n'ai pas l'impression que mes propres opinions politiques soient particulièrement originales ou intéressantes à raconter. Je ferai peut-être une exception le 6 mai, nous verrons.

[#2] Forme isolée et non finale, parce que la lettre précédente (rāʾ) ne lie jamais sur la gauche. Mais à la limite, peu importe, une forme finale serait semblable pour ce que je veux souligner.

[#2b] J'en profite en revanche pour me plaindre d'une photo telle que ci-contre[Josh Henderson en tenue de soldat devant une inscription en pseudo-arabe] qui est une photo de la série télé Over There (au moins une photo promotionnelle (film still), je ne sais pas si elle apparaît vraiment à l'écran), sur laquelle j'étais tombé en cherchant des photos du beau Josh Henderson complètement par hasard. Est-on vraiment censé croire que ce qui est écrit sur le mur derrière le soldat serait de l'arabe ? Parce qu'il faut être assez profondément nul et ignorant pour penser que ça puisse en être : ça ne ressemble même pas à de l'arabe, ce sont des lettres arabes sous forme isolée disposées un peu au hasard sur le mur. Or même si on ne connaît rien de l'alphabet arabe, on doit quand même avoir remarqué que les lettres sont reliées les unes aux autres !

[#3] Faut-il considérer qu'il est équivalent à l'anglais ottoman ? Google Images semble penser que non : apparemment les Français ont l'idée que les divans ottomans avaient un dossier et les Anglais qu'ils n'en avaient pas — mais sur quoi s'asseyait donc le sultan ?

[#4] Le titre est tiré d'une phrase de Kipling (dans Life's Handicap) : Tell them of what thou alone hast seen, then what thou hast heard, and since they be children tell them of battles and kings, horses, devils, elephants, and angels, but omit not to tell them of love and suchlike.

(mardi)

Neuvième blogoversaire

Contrairement à mon grand blogofrère de quelques jours Matoo, qui se plaint d'oublier son blogoversaire, j'ai eu la prévoyance de choisir de commencer le mien (de blog) à une date vaguement symbolique (la fête du vrai travail des vrais blogueurs à la sueur de leur front) et facilement mémorisable. Vous pouvez donc me féliciter pour ces neuf années passées à râler, à raconter des bêtises sur tout ce qui me passe par la tête, à râler, à mal vulgariser les maths, à râler, à pondre des entrées trop longues, à râler, à ne pas faire ce que je promets ni finir ce que je commence, et surtout, à râler.

Je regrette une chose, c'est que l'écriture de ce blog ne m'ait pas donné beaucoup d'occasions de rencontrer mes lecteurs. J'en ai eu quelques occasions, certes : par exemple de rencontrer lors de mon dernier passage à Lyon[#] un certain oncologue (heureusement pas rencontré dans un contexte professionnel) que vous avez pu remarquer dans les colonnes de mes commentaires, ou plus récemment un futur thésard en crypto que le poussinet et moi avons hébergé pour la nuit à son retour d'Eurocrypt. Mais trop peu : parfois je croise des gens qui me disent sur le ton de la confidence qu'ils suivent mon blog, mais je peux regretter de ne pas l'avoir su plus tôt ou de ne pas avoir plus de temps pour discuter[#2]. Et par extrapolation, je me dis qu'il doit y avoir beaucoup d'autres gens intéressant qui lisent mon blog et dont je ne sais absolument rien. Bref, n'hésitez pas à mon contacter, moi j'aime bien faire la connaissance de nouvelles personnes.

[#] Le week-end de Pâques. Mon poussinet et moi y sommes allés pour rendre visite à la famille de mon petit frère adoptif et pour nous ravitailler en chocolats de l'extraordinaire M. Bernachon[Vitrine du chocolatier Bernachon] (dont je recommande particulièrement les tablettes de chocolat à la vanille).

[#2] Comme cet autre jeune cryptographe croisé lors du pot de thèse d'un ami et (maintenant ex-)thésard en crypto, et dont je n'ai pas eu la présence d'esprit de demander l'adresse, c'est dommage (et par ailleurs, ceci est un hint 😉).

Continue to older entries. / Continuer à lire les entrées plus anciennes.


Entries by month / Entrées par mois:

2017 Jan 2017 Feb 2017
2016 Jan 2016 Feb 2016 Mar 2016 Apr 2016 May 2016 Jun 2016 Jul 2016 Aug 2016 Sep 2016 Oct 2016 Nov 2016 Dec 2016
2015 Jan 2015 Feb 2015 Mar 2015 Apr 2015 May 2015 Jun 2015 Jul 2015 Aug 2015 Sep 2015 Oct 2015 Nov 2015 Dec 2015
2014 Jan 2014 Feb 2014 Mar 2014 Apr 2014 May 2014 Jun 2014 Jul 2014 Aug 2014 Sep 2014 Oct 2014 Nov 2014 Dec 2014
2013 Jan 2013 Feb 2013 Mar 2013 Apr 2013 May 2013 Jun 2013 Jul 2013 Aug 2013 Sep 2013 Oct 2013 Nov 2013 Dec 2013
2012 Jan 2012 Feb 2012 Mar 2012 Apr 2012 May 2012 Jun 2012 Jul 2012 Aug 2012 Sep 2012 Oct 2012 Nov 2012 Dec 2012
2011 Jan 2011 Feb 2011 Mar 2011 Apr 2011 May 2011 Jun 2011 Jul 2011 Aug 2011 Sep 2011 Oct 2011 Nov 2011 Dec 2011
2010 Jan 2010 Feb 2010 Mar 2010 Apr 2010 May 2010 Jun 2010 Jul 2010 Aug 2010 Sep 2010 Oct 2010 Nov 2010 Dec 2010
2009 Jan 2009 Feb 2009 Mar 2009 Apr 2009 May 2009 Jun 2009 Jul 2009 Aug 2009 Sep 2009 Oct 2009 Nov 2009 Dec 2009
2008 Jan 2008 Feb 2008 Mar 2008 Apr 2008 May 2008 Jun 2008 Jul 2008 Aug 2008 Sep 2008 Oct 2008 Nov 2008 Dec 2008
2007 Jan 2007 Feb 2007 Mar 2007 Apr 2007 May 2007 Jun 2007 Jul 2007 Aug 2007 Sep 2007 Oct 2007 Nov 2007 Dec 2007
2006 Jan 2006 Feb 2006 Mar 2006 Apr 2006 May 2006 Jun 2006 Jul 2006 Aug 2006 Sep 2006 Oct 2006 Nov 2006 Dec 2006
2005 Jan 2005 Feb 2005 Mar 2005 Apr 2005 May 2005 Jun 2005 Jul 2005 Aug 2005 Sep 2005 Oct 2005 Nov 2005 Dec 2005
2004 Jan 2004 Feb 2004 Mar 2004 Apr 2004 May 2004 Jun 2004 Jul 2004 Aug 2004 Sep 2004 Oct 2004 Nov 2004 Dec 2004
2003 May 2003 Jun 2003 Jul 2003 Aug 2003 Sep 2003 Oct 2003 Nov 2003 Dec 2003