David Madore's WebLog: Matrice de report des voix : mes résultats

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

Entry #2042 [older|newer] / Entrée #2042 [précédente|suivante]:

(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).

↑Entry #2042 [older|newer] / ↑Entrée #2042 [précédente|suivante]

Recent entries / Entrées récentesIndex of all entries / Index de toutes les entrées