De politiske partier
Formål
Formålet med dette forløb er
- at lære Softmax at kende, som et værktøj til Multipel Klassifikation.
- at lære lidt om Kunstige Neuroner, samt at anvende en app til at træne en kunstig neuron.
- at undersøge, hvordan en kunstig neuron til multiple klassifikation kan bruges til at forudsige, hvilken parti man vil stemme på, ud fra svar på en række spørgsmål, f.eks. i en kandidattest.
Måske en video.
Softmax modellen
Vi starter med et meget lille eksempel, hvis 4 personer, Andy, Bella, Charlie og Doresa har svaret på 2 spørgsmål samt angivet, hvilket parti de stemmer på.
| Navn | Spørgsmål 1 \((x_1)\) | Spørgsmål 2 \((x_2)\) | Parti (t) |
|---|---|---|---|
| Andy | \(\color{red}{-2 \textbf{ Helt uenig}}\) | \(\color{red}{-2 \textbf{ Helt uenig}}\) | 1 |
| Bella | \(\color{red}{-1 \textbf{ Uenig}}\) | \(\color{green}{1 \textbf{ Enig}}\) | 2 |
| Charlie | \(\color{red}{-1 \textbf{ Uenig}}\) | \(\color{red}{-1 \textbf{ Uenig}}\) | 2 |
| Doresa | \(\color{green}{1 \textbf{ Enig}}\) | \(\color{green}{2 \textbf{ Helt enig}}\) | 3 |
For at kunne lave en matematisk model, står der også tilhørende værdier fra \(-2\) til \(2\) i tabellen, da vi har brug for talværdier for at kunne regne i modellen. Så f.eks. er \(x_1=-2\) for Andy, mens \(x_1=1\) for Doresa.
Vi vil nu lave en model, hvor man ud fra svarene på de to spørgsmål kan forudsige, hvor sandsynligt det er, at man stemmer på hver af de 3 partier. Vi vil træne modellen, så den passer godt til svarene fra de 4 personer, og derefter håbe, at den også vil passe godt til andre personer. Naturligvis er \(2\) spørgsmål og \(4\) personer alt for lidt, men det gør vi noget ved senere.
Vi udregner så for enhver kombination af person og parti en score: \[score(person, parti) = w_0 + w_1 \cdot x_1+ w_2 \cdot x_2\] hvor \(w_0\) kaldes for bias og \(w_1\) og \(w_2\) kaldes for vægte.
Vi sætter disse bias- og vægte til nogle lidt tilfældige værdier til at starte med.
| \(w_0\) | \(w_1\) | \(w_2\) | |
|---|---|---|---|
| Parti 1 | \(0\) | \(-1\) | \(0\) |
| Parti 2 | \(0\) | \(1\) | \(0\) |
| Parti 3 | \(0\) | \(0\) | \(0\) |
Så bliver \[score(Andy, parti 1) = 0 + (-1) \cdot (-2) + 0 \cdot (-2) = 2\] \[score(Andy, parti 2) = 0 + 1 \cdot (-2) + 0 \cdot (-2) = -2\] \[score(Andy, parti 3) = 0 + 0 \cdot (-2) + 0 \cdot (-2) = 0\] Så lige nu er den højeste score for Andy for parti 1, hvilket er godt, da han faktisk stemmer på parti 1.
Men modellen skulle jo ikke kun give en score, men faktisk give en procent for hvert parti. Så vi skal have fundet en metode til at få procenter i stedet for scoren. Om procenterne ved vi, at de skal være positive, at de skal være mellem 0 og 1, og endeligt, at det skal give 1 tilsammen.
En simpel måde at få tallene positive på er at sige \(e\) opløftet i scoren.
\[ \begin{aligned} e^2 & \approx 7.39 \\ e^{-2} & \approx 0.14 \\ e^0 &=1 \end{aligned} \]
Så lægges de 3 tal sammen og hvert af tallene divideres med summen. \[sum=7.39 + 1 + 0.14 = 8.53\]
For Andy giver det følgende:
| Parti | Score | \(e^{score}\) | Procent |
|---|---|---|---|
| 1 | 2 | 7.39 | \(\frac{7.39}{8.53} \approx 0.867\) |
| 2 | -2 | 0.14 | \(\frac{0.14}{8.53} \approx 0.016\) |
| 3 | 0 | 1 | \(\frac{1}{8.53} \approx 0.117\) |
Så med de valgte værdier af bias og vægte, angiver modellen 86.7% for parti 1, 1.6% for parti 2 og 11.7% for parti 3 for Andy. Da han faktisk stemte på parti 1, er det jo rigtigt fint, uden dog at være helt perfekt, da vi helst ville have endnu større sandsynlighed for parti 1.
Det var åbenlyst ikke så godt for Bella, Charlie og Doresa, hvor modellen for alle 3 peger på et forkert parti. Ideen er nu, at vi skal ændre bias og vægte, så modellen bliver bedre.
Lad os første omgang se på \(w_1\) og dermed \(x_1\). Bemærk, at \(x_1 = -2\) for Andy, at \(x_1 = -1\) for Bella og Charlie, og at \(x_1 = 1\) for Doresa. Da vi gerne vil have Andy til at få en høj score, og dermed en høj sandsynlighed for parti 1, giver det mening at lade \(w_1\) for parti 1 være en negativ værdi. Før havde vi sat \(w_1=-1\), men lad os forstærke effekten med \(w_1 = -3\) for parti 1.
Det giver Andy en positiv score \(w_1 \cdot x_1 = -3 \cdot (-2) = 6\), hvilket er godt, da vi gerne vil have, at modellen peger på parti 1 for ham.
Det giver Doresa en negative score \(w_1 \cdot x_1 = -3 \cdot 1= -3\), hvilket er godt, da vi gerne vil have, at modellen ikke peger på parti 1 for hende.
Det giver så desværre både Bella og Charlie en positiv score, da \(w_1 \cdot x_1 = -3 \cdot (-1) = 3\), hvilket ikke er så godt, da vi gerne vil have, at modellen ikke peger på parti 1 for dem. Det venter vi lige med at gøre noget ved.
Samlet ser det nu således ud. hvor både (score) og sandsynlighed er angivet for hvert parti.
| Parti 1 | Parti 2 | Parti 3 | |
|---|---|---|---|
| Andy | (6) 99.8% | (0) 0.2% | (-12) 0.0% |
| Bella | (3) 95.3% | (0) 4.7% | (-6) 0.0% |
| Charlie | (3) 95.3% | (0) 4.7% | (-6) 0.0% |
| Doresa | (-3) 0.0% | (0) 0.3% | (6) 99.7% |
Vi skal nu have modellen til at vælge parti 2 for Bella og Charlie, uden at ændre ved, at modellen vælger parti 1 til Andy og parti 3 til Doresa.
Med en fornuftig værdi af bias for parti 2 kan tabellen komme til at se således ud.
| Parti 1 | Parti 2 | Parti 3 | |
|---|---|---|---|
| Andy | (6) 88.1% | (4) 11.9% | (-12) 0.0% |
| Bella | (3) 26.9% | (4) 73.1% | (-6) 0.0% |
| Charlie | (3) 26.9% | (4) 73.1% | (-6) 0.0% |
| Doresa | (-3) 0.0% | (4) 11.9% | (6) 88.1% |
Men det kan stadig gøres bedre, bl.a. ved også at tage \(w_2\) i brug.
Brug af app til træning af kunstig neuron
Med det meget lille, simple eksempel kunne vi altså godt justere vægtene manuelt og få en nogenlunde resultat. Men hvis der bliver 100, 1000 eller millioner af vægte, så er det næppe en god ide. I stedet skal vi bruge noget mere advanceret matematik, som vi ikke vil gennemgå i dette forløb, til at optimere vægtene i modellen.
Du finder appen her og datasættet som excelfil her.
Her mangler en kort video, der viser brugen af appen.
Med appens værdier ser tabellen endeligt således ud, hvilket må siges at være meget tilfredsstillende.
| Parti 1 | Parti 2 | Parti 3 | |
|---|---|---|---|
| Andy | (6.6) 97.7% | (2.8) 2.3% | (-9.4) 0.0% |
| Bella | (-4.1) 0.0% | (4.5) 99.1% | (-0.4) 0.9% |
| Charlie | (0.0) 3.2% | (3.4) 96.5% | (-3.4) 0. 3% |
| Doresa | (-15.1) 0.0% | (5.2) 0.8% | (9.9) 99.2% |
16 politiske kandidaters svar
Lad os se på et lidt større eksempel, nu med autentiske data fra kandidattest til folketingsvalget i 2026.
| Parti | Navn | Spørgsmål 1 | Spørgsmål 2 |
|---|---|---|---|
| Soc | Ane Halsboe-Jørgensen | \(\color{green}{\textbf{Enig}}\) | \(\color{green}{\textbf{Enig}}\) |
| Soc | Flemming Møller Mortensen | \(\color{red}{\textbf{Uenig}}\) | \(\color{red}{\textbf{Uenig}}\) |
| Soc | Kiki Bille Bach | \(\color{green}{\textbf{Enig}}\) | \(\color{green}{\textbf{Enig}}\) |
| Soc | Morten Ryom | \(\color{green}{\textbf{Enig}}\) | \(\color{green}{\textbf{Enig}}\) |
| Ven | Anita Vivi Lilholt | \(\color{red}{\textbf{Meget uenig}}\) | \(\color{green}{\textbf{Enig}}\) |
| Ven | Anne Honoré Østergaard | \(\color{red}{\textbf{Meget uenig}}\) | \(\color{green}{\textbf{Enig}}\) |
| Ven | Marie Bjerre | \(\color{green}{\textbf{Enig}}\) | \(\color{red}{\textbf{Uenig}}\) |
| Ven | Mikkel Bisgaard | \(\color{red}{\textbf{Uenig}}\) | \(\color{red}{\textbf{Uenig}}\) |
| Enh | Peder Hvelplund | \(\color{green}{\textbf{Meget enig}}\) | \(\color{green}{\textbf{Meget enig}}\) |
| Enh | Runa Friis Hansen | \(\color{green}{\textbf{Enig}}\) | \(\color{green}{\textbf{Meget enig}}\) |
| Enh | Lasse P. N. Olsen | \(\color{green}{\textbf{Meget enig}}\) | \(\color{green}{\textbf{Enig}}\) |
| Enh | Filippa Emilie Vittrup | \(\color{green}{\textbf{Meget enig}}\) | \(\color{green}{\textbf{Meget enig}}\) |
| DD | Inger Støjberg | \(\color{red}{\textbf{Meget uenig}}\) | \(\color{red}{\textbf{Uenig}}\) |
| DD | Kristian Bøgsted | \(\color{red}{\textbf{Uenig}}\) | \(\color{red}{\textbf{Uenig}}\) |
| DD | Kim Edberg Andersen | \(\color{red}{\textbf{Meget uenig}}\) | \(\color{red}{\textbf{Uenig}}\) |
| DD | Liselotte Lynge | \(\color{red}{\textbf{Meget uenig}}\) | \(\color{red}{\textbf{Uenig}}\) |
De to spørgsmål er
Spørgsmål 1: De boligejere, der tjener mest på prisstigninger, skal betale mere i skat. Spørgsmål 2: Reglerne for dyrevelfærd skal strammes, selv om det kan gøre fødevarer fra Danmark dyrere.
Datasættet som excelfil med værdier fra -2 (helt uenig) til 2 (helt enig) her.
For at skabe lidt overblik, vil et punktplot med \(x_1\) på førsteaksen og \(x_2\) på andenaksen, hvor punkterne har forskellige farver efter parti, være en god ide. Det er dog en udfordring, at flere punkter er ens.
Det skulle gerne være tydeligt, at de 4 partiers kandidater ligger delvist opdelt efter parti. Vi vil nu gerne bruge samme type model som tidligere i en kunstig neuron til at undersøge, hvordan vi kan inddele planen i områder til hvert parti. Først skal vi have trænet modellen på data for de 16 politikere, så vi kender bias og vægte.
Vi vil nu bruge disse vægte til at bestemme, hvor i koordinatsystemet modellen vil trække en grænse mellem Socialdemokratiet og Enhedslisten. Grænsen skal netop være der, hvor de to partier er lige sandsynlige, så
\[e^{s_0 + s_1 \cdot x_1 + s_2 \cdot x_2} = e^{e_0 + e_1 \cdot x_1 + e_2 \cdot x_2}\] Hvis vi tager den naturlige logaritme på begge sider og samlet alt på den ene side, giver det \[(s_0 - e_0) + (s_1-e_1) \cdot x_1 + (s_2-e_2) \cdot x_2=0\] Vi bemærker, at det faktisk er ligningen for en ret linje på formen \[ a \cdot x + b \cdot y + c = 0\]
Det var en opdeling mellem Socialdemokratiet og Enhedslisten.
Hvis du vil, kan du også beregne ligningerne for de øvrige 5 linjer - ellers er alle ligningerne angivet i denne tabel.
| Partier | Ligning |
|---|---|
| S og E | \(-5.39979 x - 5.95406y + 14.0861 = 0\) |
| S og V | \(1.00714 x + 0.58677 y + 0.1452 = 0\) |
| S og D | \(5.40031 x + 4.88754 y + 9.2446 = 0\) |
| E og V | \(-6.40693 x - 6.54083 y + 13.9409 = 0\) |
| E og D | \(10.8001 x + 10.8416 y - 4.8415 = 0\) |
| V og D | \(4,39317 x + 4,30077 y + 9,0994 = 0\) |
Det helt store eksempel med 732 politikere
Til sidst vil vi tage et kig på et autentisk datasæt af en mere relevant størrelse. Vi har 732 politikere fordelt på 12 partier, som inden folketingsvalget i 2026 har svaret på 24 spørgsmål til TV2’s kandidattest.
Datasættet er her.
Delvis facitliste
Mangler