De politiske partier

01_A-niveau
04_Kort
  • Eksponentialfunktioner, herunder \(\mathrm{e}^x\).
  • Sandsynlighedsfelter.
  • Linjens ligning på formen \(a \cdot x + b \cdot y + c = 0\).

Tidsforbrug: Ca. 150 minutter.

Hvis man forinden har arbejdet med det korte forløb Sengetester i IKEA vil det være en fordel, men dette er ikke en forudsætning.

På tilsvarende vis vil det også gøre dette forløb lidt lettere, hvis man forinden har arbejdet med de første dele af det lange forløb om Kunstige neuroner, men det er heller ikke en forudsætning.

Hvis man har arbejdet med det korte forløb Hvilken politiker er du mest enig med, kan konteksten være mere tydeligt, men det er heller ikke en forudsætning.

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.

NoteOpgave 1
  • Lav de tilsvarende udregninger for Bella, Charlie og Doresa.
  • Overvej derefter, om de valgte vægte er fornuftige - i den betydning, at modellen giver størst sandsynlighed for hver person for det parti, som personen faktisk stammer på.

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.

NoteOpgave 2
  • Overvej hvilken værdi \(w_1\) for parti 3 kan gives, så Doresa får en positiv score, mens de øvrige tre får en negativ score? Hint, få scoren for Doresa for parti 3 til at blive \(6\), som scoren for Andy blev for parti 1.
  • Beregn sandsynligheden for hver af de 3 partier for Doresa med den værdi, du har valgt.

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.

NoteOpgave 3
  • Overvej hvilken værdi biaset \(w_0\) for parti 2 kan gives, så Bella og Charlie får højst score for parti 2 (scoren skal over 3, da de allerede har scoren 3 for parti 1), men uden scoren for Andy eller Doresa bliver højst for parti 2 (de har begge 6 som højst score til hhv. parti 1 og parti 3).

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.

NoteOpgave 4
  • Åbn appen og indlæs datasættet
  • Vælg t som target varibel og både x1 og x2 som feature variable
  • Sæt learning rate til 0,1 og antal iterationer til 1000
  • Træn modellen
  • Sammenlign de værdier til bias og vægte, som appen er nået frem til, med de værdier, som vi manuelt nåede frem til. Meget ligner, noget er lidt anderledes.

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.

NoteOpgave 5
  • Overvej, hvordan du vil håndtere de punkter, som har samme koordinater, så alle punkterne alligevel bliver synlige.
  • Tegn punktplottet.

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.

NoteOpgave 6
  • Brug kunstig neuron appen på datasættet med samme indstillinger som i opgave 4.
  • Noter værdierne for bias og vægte for hvert parti, så \(s_0, s_1, s_2\) for Socialdemokratiet, \(v_0, v_1, v_2\) for Venstre osv.

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\]

NoteOpgave 7
  • Indsæt værdierne for bias og vægte i linjens ligning.
  • Indtegn linjen i samme koordinatsystem som punktplottet.

Det var en opdeling mellem Socialdemokratiet og Enhedslisten.

NoteOpgave 8
  • Hvor mange forskellige par af partier er der, og hvor mange andre ligninger for linjer bør derfor bestemmes?
  • Bliver alle disse linjer en grænse mellem områder, hvor de to partier er de mest sandsynlige?

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\)
NoteOpgave 9
  • Indtegn alle 6 linjer på punktplottet.
  • Overvej hvilke af linjerne, der giver en grænse mellem 2 partier som mest sandsynlige, og hvilke linjer, der blot er mellem to lige sandsynlige partier, hvor et 3. parti er mere sandsynligt.
NoteOpgave 10
  • De 3 linjer for S & V, S & D og V & D skærer hinanden (cirka) i samme punkt. Bestem koordinaterne til dette punkt
  • Beregn derefter sandsynligheden for hver af de 4 partier (brug vægtene fra appen) i punktet.
  • Forklar, hvad det fortæller om modellen.

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.

NoteOpgave 11
  • Beregn hvor mange bias og vægte modellen nu har.

Datasættet er her.

NoteOpgave 12
  • Brug appen til at træne en kunstig neuron ud fra datasættet.
  • Kig på Confusion matrix og Klassifikationsnøjagtigheden i appen. Overvej, hvad det siger om den trænede model.

Delvis facitliste

Mangler

Facitliste.