ensae, optimisation, optimisation sous contraintes, python, report des voix, élections |
Entre les deux tours des élections présidentielles, on parle beaucoup du report des voix des élections. Dans la plupart des articles que j'ai trouvés (Les 1.139.316 voix qui ont fait la victoire d'Hollande), ces intentions sont estimées par sondage. Un blog parle d'une méthode d'estimation après seulement que les élections ont eu lieu : Estimation des reports de voix - explications techniques. La méthode proposée est bayésienne. Ici, j'ai utilisé l'optmisation sous contraintes car c'est la méthode que je souhaitais illustrer pour mes enseignements. J'ai pris les élections comme exemples d'application. Les données sont accessibles sur le site (data.gouv.fr , élections 2012). Elles incluent les chiffres aggrégés par départements et cantons dont je me suis servi et que j'ai regroupés ici : french_elections.zip).
On dispose donc des voix ventilées par candidats et disponibles pour chaque départements. On cherche à calculer une matrice de report de voix qui soit la même pour tous les départements.
ARTHAUD | Abstentions | BAYROU | Blancs et nuls | CHEMINADE | Code dep | DUPONT-AIGNAN | HOLLANDE | JOLY | LE PEN | Département | MÉLENCHON | POUTOU | SARKOZY | total |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1794 | 65996 | 32650 | 6453 | 860 | 1 | 7208 | 73096 | 7268 | 66540 | AIN | 30898 | 3323 | 97722 | 393808 |
2490 | 72928 | 19895 | 5196 | 738 | 2 | 5853 | 80751 | 3455 | 78452 | AISNE | 30360 | 3860 | 72090 | 376068 |
1482 | 45266 | 17814 | 5059 | 457 | 3 | 4068 | 61131 | 3232 | 37736 | ALLIER | 27969 | 2584 | 49477 | 256275 |
487 | 21034 | 7483 | 2111 | 283 | 4 | 1845 | 24551 | 2933 | 20875 | ALPES DE HAUTE PROVENCE | 15269 | 1394 | 25668 | 123933 |
1576 | 153383 | 38980 | 9063 | 1238 | 6 | 9241 | 111990 | 12556 | 136982 | ALPES MARITIMES | 49493 | 4048 | 216738 | 745288 |
Abstentions | Blancs et nuls | Code | HOLLANDE | Département | SARKOZY | total |
---|---|---|---|---|---|---|
67279 | 19513 | 1 | 131333 | AIN | 175741 | 393866 |
73997 | 21056 | 2 | 147260 | AISNE | 133760 | 376073 |
45079 | 14924 | 3 | 111615 | ALLIER | 84593 | 256211 |
20314 | 6639 | 4 | 49498 | ALPES DE HAUTE PROVENCE | 47444 | 123895 |
146254 | 30067 | 6 | 203117 | ALPES MARITIMES | 366055 | 745493 |
On cherche une matrice V qui permet d'obtenir les voix Y du second tour en fonction des voix du premier tour X :
n est le nombre de départements, c est le nombre de candidats du premier tour (abstention et bulletin nuls inclus), d est le nombre de candidats du second tour. La matrice V définit le report des voix : Vij est la proportion des voix du candidat c allant au candidat d. Elle vérifie les contraintes suivantes :
Le problème n'est pas très éloigné d'une régression avec des contraintes sur les coefficients excepté que la matrice Y a plus d'une colonne. Pour contourner l'obstacle, on construit une autre matrice Y* d'une seule colonne et quatre fois plus de lignes (D=4). On applique une transformation similaire sur X.
Par la suite, on désigne sous X,Y les matrices X*,Y*. On cherche à résoudre le problème d'optmisation sous contrainte :
C'est un problème d'optimisation convexe sous contraintes linéaires qu'on peut résoudre avec le module cvxopt. La fonction qp est la plus adaptée. Elle résoud le problème présenté sous la forme :
Il suffit d'associer les lettres de ce problème P,q,G,h,A,b à nos données :
Je passe les détails d'implémentation que vous pouvez trouver là : class ElectionResults, def vote_transfer et study_french_elections.py. Cette classe lit les fichiers Excel venant du site open.data.gouv.fr, puis construit les matrices P,q,G,h,A,b qui permettent de résoudre le problème d'optimisation. Elle corrige aussi les nombres d'inscrits pour chaque département. car le nombre d'inscrits est légèrement différents d'une tour à l'autre (voir les deux premiers tableaux). Avec une règle de trois, on s'assure que le nombre d'inscrits est identique aux deux tours.
optimisation dynamique sous contrainte (aggrégation par départements) en 2012
| ||||
Abstentions | Blancs et nuls | HOLLANDE | SARKOZY | |
---|---|---|---|---|
ARTHAUD | 30% | 70% | ||
Abstentions | 100% | |||
BAYROU | 31% | 18% | 51% | |
Blancs et nuls | 32% | 68% | ||
CHEMINADE | 100% | |||
DUPONT-AIGNAN | 45% | 55% | ||
HOLLANDE | 100% | |||
JOLY | 100% | |||
LE PEN | 33% | 6% | 61% | |
MELENCHON | 100% | |||
POUTOU | 100% | |||
SARKOZY | 6% | 94% |
Il est difficile d'interpréter ces résultats sans prendre quelques précautions. La fonction d'erreur donne le même poids à toutes les voix. Cela signifie que la précision de ces chiffres est meilleure pour les partis les plus représentés. Ci-dessous, les mêmes résultats mais en partant des résultats aggrégés par cantons (environ 4000).
optimisation dynamique sous contrainte (aggrégation par cantons) en 2012
| ||||
Abstentions | Blancs et nuls | HOLLANDE | SARKOZY | |
---|---|---|---|---|
ARTHAUD | 98% | 2% | ||
Abstentions | 100% | |||
BAYROU | 46% | 6% | 48% | |
Blancs et nuls | 46% | 54% | ||
CHEMINADE | 100% | |||
DUPONT-AIGNAN | 28% | 37% | 35% | |
HOLLANDE | 100% | |||
JOLY | 100% | |||
LE PEN | 17% | 5% | 8% | 70% |
MELENCHON | 100% | |||
POUTOU | 100% | |||
SARKOZY | 9% | 91% |
Ces résultats sont assez fluctuants. Le bootstrap est une méthode statistique qui permet d'obtenir des intervalles de confiance. J'ai appliqué la méthode sur la série des cantons, plus longue, car elle réduit la variance du nombre d'inscrits après rééchantillonage. On retrouve le fait que la marge d'erreur est grande pour les candidats ayant obtenu peu de voix.
intervalles de confiance à 20% (aggrégation par cantons) en 2012
| ||||
Abstentions | Blancs et nuls | HOLLANDE | SARKOZY | |
---|---|---|---|---|
ARTHAUD | 0%-100% | 0%-100% | ||
Abstentions | 100% | |||
BAYROU | 0%- 81% | 0%- 33% | 19%- 79% | |
Blancs et nuls | 0%-100% | 0%-100% | ||
CHEMINADE | 100% | |||
DUPONT-AIGNAN | 0%-100% | 0%- 64% | 0%- 96% | |
HOLLANDE | 0%- 7% | 93%-100% | ||
JOLY | 100% | |||
LE PEN | 0%- 31% | 3%- 6% | 2%- 14% | 61%- 82% |
MELENCHON | 0%- 2% | 98%-100% | ||
POUTOU | 100% | |||
SARKOZY | 0%- 24% | 76%-100% |
Pour réduire la fourchette de confiance pour les petits candidats, on peut s'inspirer d'un test statistique comme le test du chi-deux. On donne à chaque voix d'un candidat un poids inversement proportionnel à son nombre de votants. Pour ce faire, j'ai divisé chaque colonne par le nombre d'inscrits comptabilisés dans cette colonne (voir la matrice des inscrits du premier tour) puis j'ai normalisé chaque ligne de la matrice du second tour de façon à ce qu'il y ait le même nombre de voix aux premier et second tour dans chaque canton. J'ai ensuite calculé la matrice de transfert des votes.
transferts de votes, chaque vote est divisé par le nombre de voix obtenues par le candidat (aggrégation par cantons) en 2012 | ||||
Abstentions | Blancs et nuls | HOLLANDE | SARKOZY | |
---|---|---|---|---|
ARTHAUD | 56% | 7% | 37% | |
Abstentions | 100% | |||
BAYROU | 100% | |||
Blancs et nuls | 34% | 36% | 30% | |
CHEMINADE | 100% | |||
DUPONT-AIGNAN | 14% | 2% | 20% | 65% |
HOLLANDE | 100% | |||
JOLY | 69% | 31% | ||
LE PEN | 100% | |||
MELENCHON | 100% | |||
POUTOU | 100% | |||
SARKOZY | 100% |
Et on vérifie que les intervalles de confiance sont plus petits pour les derniers candidats.
intervalles de confiance des transferts de votes, chaque vote est divisé par le nombre de voix obtenues par le candidat (aggrégation par cantons) en 2012 | ||||
Abstentions | Blancs et nuls | HOLLANDE | SARKOZY | |
---|---|---|---|---|
ARTHAUD | 45%- 69% | 2%- 8% | 27%- 48% | |
Abstentions | 100% | |||
BAYROU | 0%- 11% | 89%-100% | ||
Blancs et nuls | 18%- 59% | 21%- 59% | 5%- 40% | |
CHEMINADE | 93%-100% | 0%- 7% | ||
DUPONT-AIGNAN | 0%- 23% | 0%- 5% | 0%- 30% | 54%-100% |
HOLLANDE | 100% | |||
JOLY | 49%- 92% | 8%- 51% | ||
LE PEN | 0%- 3% | 97%-100% | ||
MELENCHON | 100% | |||
POUTOU | 100% | |||
SARKOZY | 100% |
intervalles de confiance des transferts de votes, chaque vote est divisé par le nombre de voix obtenues par le candidat (aggrégation par cantons) en 2007 | ||||
Abstentions | Blancs et nuls | ROYAL | SARKOZY | |
---|---|---|---|---|
Abstentions | 84%-100% | 0%- 16% | ||
BAYROU | 0%- 14% | 39%- 87% | 10%- 59% | |
BESANCENOT | 100% | |||
BOVET | 3%- 44% | 8%- 68% | 4%- 67% | |
BUFFET | 18%- 41% | 33%- 71% | 0%- 40% | |
Blancs et nuls | 51%- 87% | 5%- 45% | 0%- 13% | |
LAGUILLER | 61%- 91% | 0%- 17% | 0%- 38% | |
LE PEN | 100% | |||
NIHOUS | 0%- 9% | 0%- 6% | 53%- 76% | 16%- 41% |
ROYAL | 100% | |||
SARKOZY | 100% | |||
SCHIVARDI | 0%- 17% | 0%- 4% | 0%- 47% | 40%- 98% |
VOYNET | 0%- 65% | 32%-100% | ||
de VILLIERS | 0%- 13% | 0%- 4% | 0%- 25% | 65%-100% |
intervalles de confiance des transferts de votes, chaque vote est divisé par le nombre de voix obtenues par le candidat (aggrégation par cantons) en 2002 | ||||
Abstentions | Blancs et nuls | CHIRAC | LE PEN | |
---|---|---|---|---|
Abstentions | 100% | |||
BAYROU | 0%- 19% | 81%-100% | ||
BESANCENOT | 100% | |||
BOUTIN | 6%- 65% | 35%- 94% | ||
Blancs et nuls | 0%- 48% | 52%-100% | ||
CHEVENEMENT | 100% | |||
CHIRAC | 100% | |||
GLUCKSTEIN | 0%- 25% | 75%-100% | ||
HUE | 6%- 47% | 49%- 81% | 3%- 11% | |
JOSPIN | 0%-100% | 0%-100% | ||
LAGUILLER | 0%-100% | 0%-100% | ||
LE PEN | 0%- 25% | 0%- 19% | 68%-100% | |
LEPAGE | 100% | |||
MADELIN | 0%- 69% | 31%-100% | ||
MAMERE | 0%- 72% | 28%-100% | ||
MEGRET | 33%- 62% | 38%- 67% | ||
SAINT-JOSSE | 5%- 12% | 58%- 64% | 27%- 33% | |
TAUBIRA | 48%- 72% | 28%- 52% |
<-- --> |