Finnish politics, measured.
A data-led look at the Eduskunta: 41,528 plenary speeches, 281 MPs across 9 parties, 2019–2026. Who talks, what they ask, and where they sit on the ideological map.
The speech dataset is a selected analytical sample, not the full count of plenary speeches. See dataset scope.
Parliament activity
Explore speeches, questions, and initiatives by party or MP. Compare raw totals or adjust for seats and active MPs across the Marin and Orpo terms.
→Which party talks about what?
See which topics each party discusses more than the chamber average, and compare the priorities of government and opposition parties.
→Compass
Our speech-derived GAL-TAN coordinates for each party, overlaid on CHES, Manifesto Project, and EVA.
→How does positioning shift?
Track how party positions move from year to year and how events change the topics discussed in parliament.
→Election answers and parliamentary work
Compare 2023 election-questionnaire answers with signals derived from Orpo-term parliamentary work on the same two axes.
→Activity
Parliament activity
See who does what in the Eduskunta: plenary speeches, written and oral questions, interpellations, and motions. Toggle between speeches and questions & initiatives, group by party or by MP, and normalize by seats or sitting MPs to compare fairly across party sizes. Covers 2019–2026 across the Marin and Orpo terms.
Speech figures describe the selected analytical sample, not every parliamentary speech. See dataset scope.
show data table
Speeches come from plenary puheenvuoro records; the type buckets collapse the Finnish labels into six groups (Regular, Reply, Fast, Group, Intro, Other). Questions & initiatives are first-signer matters: KK written, SKT oral, VK interpellation, TPA/TAA/KA motions. Seat counts are from the official Vaalit.fi results (2019, 2023). "Sitting MPs" counts MPs who gave at least one speech in the term. Note the systematic government/opposition effect: governing parties file far fewer questions because they don't interrogate themselves. In the all-years view, per-seat figures divide by the combined seats across both electoral terms (seat-terms), while per-MP figures use distinct speakers across the whole period.
Topics
Which party talks about what?
Each party's share of speeches per area, expressed as an over-index (party share ÷ area's share across the whole chamber). A 3.6× cell means: this party talks about this topic 3.6× more often than the chamber average. Dataset: 41,528 area-tagged speeches.
Over-index = party's speech share on an area ÷ the area's share across the whole chamber for the same term. The baseline is fixed to the whole chamber so the government/opposition filter stays on the same scale. Figures use the published area dataset (full sample).
Compass
Ideological compass
Each party is plotted from 20,763 accepted axis scores from 18,319 distinct speeches. X-axis: economic (−2 left … +2 right). Y-axis: GAL-TAN (−2 cosmopolitan/green … +2 traditional/nationalist). Bubble size ∝ number of accepted axis scores.
Every sufficiently long speech is evaluated separately on the economic and GAL-TAN axes. The model may mark either or both axes unscorable when the speech contains no explicit position from the speaker. Accepted −2…+2 axis scores are averaged by party. Speeches were scored by deepseek-v4-flash; the party is withheld from the prompt. The prompt is in the about section. References are scaled to the same −2…+2 axis: CHES (0–10 GAL-TAN → −2..+2 via (x-5)·0.4); Manifesto (RILE -100..+100 → -2..+2 via x/50); EVA (Economic/social -1..+1 → -2..+2 via ×2); Ohjelmat (−2..+2 per-party mean across all programmes).
Reference datasets
- Parliamentary speeches (LLM)
- Speech-derived party coordinates (plenary speeches 2019–2026). (−2..+2 per-party mean of 20763 axis scores (18319 speeches), model deepseek-v4-flash)
- CHES
- Chapel Hill Expert Survey: Expert judgments on party positions (2015 trend file). (0–10 GAL-TAN → −2..+2 via (x-5)·0.4)
- Manifesto
- Manifesto Project (MARPOR): Automated coding of party election manifestos (RILE index). (RILE -100..+100 → -2..+2 via x/50)
- EVA
- EVA value survey: Finnish citizen value survey ('Suomen kuvitettu arvokartta'). (Economic/social -1..+1 → -2..+2 via ×2)
- Ohjelmat
- Party programmes (LLM): LLM-scored party principle & election programmes (Pohtiva archive), same axes. (−2..+2 per-party mean across all programmes)
Party outliers
Pick a party and see its MPs on the Orpo-term speech compass. Highlighted are those furthest from the party speech mean toward the left or right (economic) and toward GAL or TAN.
Governing vs opposition
The same data, split by whether a party was in government or in opposition when it spoke. Each line joins a party’s mean economic position in opposition (○) to its mean in government (●). Every party that changed role sits further right while governing. This holds for every party that changed roles.
Mean shift +0.38 points rightward on the economic axis (7 parties). Part of this is era, not role: RKP, which governed under both cabinets, drifted +0.46 rightward between the Marin and Orpo eras, but the role effect remains. On the values axis (GAL-TAN) there is almost no such shift (+0.16): role colours economic stance, not values. Reading: the compass’s economic axis partly measures incumbency, not ideology alone.
Trends
How do position and agenda shift over time?
Two signals per parliamentary year (2019–2026): each party's mean position on each ideological axis, and the whole chamber's agenda shares by area. Built from 20,763 accepted axis scores from 18,319 distinct speeches.
Party ideological drift
In opposition, parties drift toward their own pole; when right-wing parties enter government they move right, and the left sharpens in opposition. The vertical dashed line marks the Marin→Orpo government handover (2022→2023).
Hollow markers = thin sample (n < 30 for that year).
Agenda over time
The chamber's speech share per area per year. The agenda follows events: security spike in 2022 (war), immigration in 2024 (new government), energy in 2022 (crisis).
A single MP's agenda
The same measurement, one MP at a time. Pick a name from the dropdown to see how their topic mix shifts year by year — whether their focus is steady or tracks the same events as the whole chamber.
The selected MP has no area-tagged speeches.
Consistency
Election answers and parliamentary work
Pre-election answers from the 186 sitting MPs who answered Yle's eduskuntavaalit 2023 vaalikone, projected onto the economic and GAL-TAN axes. These are the same axes used by the compass. The answers are then compared with where their Orpo-term parliamentary work lands. The economic and GAL-TAN classification is done by a large language model. The arrow shows drift between the election-compass and parliamentary-work positions; the salience bars show whether their floor focus matched what they felt strongest about before the election.
This comparison shows alignment signals derived from the available data and model-assisted mappings; it is not a definitive assessment of promise fulfilment.
Average drift by party
| party | MPs | mean drift | median drift |
|---|---|---|---|
| Liike Nyt (liik) (liik) | 1 | 0.21 | 0.21 |
| Left Alliance (vas) (vas) | 9 | 0.45 | 0.39 |
| Christian Democrats (kd) (kd) | 5 | 0.51 | 0.48 |
| Greens (vihr) (vihr) | 13 | 0.63 | 0.64 |
| National Coalition (kok) (kok) | 38 | 0.66 | 0.68 |
| Social Democrats (sd) (sd) | 39 | 0.79 | 0.80 |
| Finns Party (ps) (ps) | 43 | 0.81 | 0.71 |
| Swedish Party (r) (r) | 9 | 0.91 | 0.75 |
| Centre (kesk) (kesk) | 21 | 1.07 | 1.03 |
Vote alignment
By party
how often party members voted according to their vaalikone answers
Per question
votes where representatives diverged from their answers
Consistency by MP
Orpo-term activity at a glance. Comparison figures = party and parliament means.
Each answer is connected to speeches on the same issue, documents first-signed by the MP, and manually reviewed roll-call mappings. A topic match is a lead, not proof of a position.
Promised coordinates are projected from each MP's 30 vaalikone answers: every question is hand-mapped to one axis (economic or GAL-TAN) and a sign (whether "agree" points left/GAL or right/TAN). Each answer's (value − 3) is multiplied by the sign and averaged across that axis's questions, yielding a −2…+2 coordinate directly comparable to the speech stances. Speech-position coordinates are the mean of each MP's per-speech stance scores during the Orpo term (2023–). Drift is the euclidean distance between the two points. The headline drift measures broad speech alignment. The question-level audit keeps topic matches separate from compliance verdicts. A vote match or contradiction requires a mapped vote: the mapping is LLM-suggested and direction-validated against the party Jaa/Ei split. A same-direction marker is the weakest signal: the MP spoke in the area in a consistent direction, without addressing this specific claim.
About
About
- Speeches
- 41,528 plenary speeches,
api.eduskunta.fipuheenvuoro search. ~50% sample (per-MP cap of 200/year). - 41,528 plenary speeches,
- MPs
- 281 distinct speakers with recorded speeches.
- Questions & initiatives
- 8,266 party-attributed matters from parliamentary years 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026: written and oral questions (KK, SKT), interpellations (VK), and motions (TPA, TAA, KA).
- Stance scores
- 20,763 accepted axis scores from 18,319 distinct speeches. Every speech is evaluated separately on the economic and GAL-TAN axes.
- Area tags
- Keyword mapper (full coverage); a language-model classifier validates a subset.
- Parliamentary years
- 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026
Area classification
Every speech and matter is assigned one policy area from a fixed taxonomy of 13 categories. The default is a deterministic Finnish keyword mapper over the matter title. It is free and instant, with about 75% coverage. A language-model classifier tags a subset for higher per-speech precision; the party is withheld from the prompt.
Stance scoring
Every sufficiently long speech is evaluated separately on both axes using a scale from −2 to +2. If a speech contains no explicit position on an axis, that axis is marked unscorable and excluded from the mean:
| axis | evaluation | −2 (left / GAL) | +2 (right / TAN) |
|---|---|---|---|
| economic | evaluated separately for every speech | state / redistribution / welfare | free market / low tax |
| GAL-TAN | evaluated separately for every speech | cosmopolitan / green / libertarian | nationalist / traditional / authoritarian |
The prompt instructs the model to reason from speech substance, not speaker identity, and marks speeches without an explicit position as unscorable. Party is withheld to prevent speaker-prior bias. The published scores used deepseek-v4-flash. The prompt is available below.
Show stance prompt
Below is the Finnish instruction given to the model. Both axes are evaluated in the same call; the matter title and speech text are inserted via the input template.
Olet suomalaisen politiikan asenneanalyytikko. Sinulle annetaan yksi
eduskuntapuheenvuoro. Arvioi puhujan oma kanta ERIKSEEN kahdella akselilla.
TALOUSAKSELI (economic), vasen ↔ oikea:
−2 = vaatii julkisen sektorin, uudelleenjaon tai työntekijän aseman LAAJENTAMISTA
(lisää palveluita, korkeampi verotus, vahvempi sääntely/ay-asema)
−1 = puolustaa nykyisiä julkisia palveluita tai etuja leikkauksia vastaan
0 = nimenomaisesti keskitie tai tasapaino talouskysymyksessä
+1 = kannattaa maltillista markkinaehtoisuutta, veronkevennystä tai menokuria
+2 = vaatii selvästi markkinaehtoisuutta, merkittäviä veronkevennyksiä tai
julkisen sektorin supistamista
ARVOAKSELI (gal_tan), GAL ↔ TAN:
GAL = vihreä, vaihtoehtoinen, liberaali, kosmopoliittinen
TAN = perinteinen, autoritaarinen, nationalistinen
−2 = vahva GAL (yksilönvapaus, avoimuus, pluralismi, yli-rajainen yhteistyö)
−1 = maltillinen GAL
0 = nimenomaisesti keskitie tai tasapaino arvokysymyksessä
+1 = maltillinen TAN
+2 = vahva TAN (kansallinen sulkeutuneisuus, järjestys, perinteiset normit)
Säännöt jokaiselle akselille:
- Perusta arvio VAIN puhujan omaan, eksplisiittiseen kantaan. Älä käytä puoluetta,
henkilön tunnettuja mielipiteitä tai yksittäisiä avainsanoja oikoteinä.
- Hallituksen puolustaminen tai opposition arvostelu EI OLE oma kanta. Kysy:
esittääkö puhuja oman vaihtoehdon, vai reagoiko hän vain toisten esityksiin?
Jos jälkimmäinen, akseli on "unscorable".
- Useimmat puheet ottavat kantaa vain TOISEEN akseliin. Se on odotettua: merkitse
toinen "unscorable". Älä pakota kantaa akselille, jota puhe ei käsittele.
- Aihe ei ratkaise akselia: talouspuhe voi ottaa arvokannan ja päinvastoin.
status jokaiselle akselille:
- "clear": selvä oma suunta; stance −2, −1, +1 tai +2.
- "neutral": puhuja kannattaa eksplisiittisesti keskitietä; stance 0.
- "mixed": vastakkaisia omia kantoja ilman hallitsevaa suuntaa; stance 0.
- "unscorable": tähän akseliin liittyvää omaa kantaa ei ole; stance 0.
Vastaa kentät tässä järjestyksessä jokaiselle akselille: poimi ensin SANATARKKA
lainaus puheesta ("evidence"), päätä sitten status ja stance. Älä tiivistä tai
muotoile lainausta uudelleen; jos sanatarkkaa lainausta ei ole (esim. unscorable),
jätä "evidence" tyhjäksi. Input template
AIHE (taustatieto): {matter}
PUHEENVUORO:
{speech} Party compass
A party's place on the compass is the mean of its stance-scored speeches on each axis. Each party therefore gets one point: (economic, GAL-TAN). The same coordinates are compared below to CHES, Manifesto, and EVA.
Activity
The activity view counts plenary speeches as well as questions and initiatives (by first signer). Figures can be shown by party or by MP, as raw counts or relative to seat totals or sitting MPs — otherwise larger parties win on size alone.
Seat counts come from Vaalit.fi (2019 and 2023). Here, the Marin term means parliamentary years 2019–2022 and the Orpo term 2023–2026. The all-years per-seat figure uses the combined seat count across both terms.
Our speech-derived compass agrees strongly with three independent reference datasets (Pearson r, 8 shared parties). Each uses a fundamentally different methodology:
| reference | method | econ r | GAL-TAN r | n parties |
|---|---|---|---|---|
| CHES | Expert judgments on party positions (2015 trend file). | 0.91 | 0.98 | 8 |
| Manifesto | Automated coding of party election manifestos (RILE index). | 0.94 | 0.98 | 8 |
| EVA | Finnish citizen value survey ('Suomen kuvitettu arvokartta'). | 0.93 | 0.97 | 8 |
| Ohjelmat | LLM-scored party principle & election programmes (Pohtiva archive), same axes. | 0.92 | 0.80 | 9 |
- Eduskunta open-data API: api.eduskunta.fi. Valtiopaivaasia and Puheenvuoro categories.
- CHES: Chapel Hill Expert Survey. Expert judgments on party positions (2015 trend file). (0–10 GAL-TAN → −2..+2 via (x-5)·0.4)
- Manifesto: Manifesto Project (MARPOR). Automated coding of party election manifestos (RILE index). (RILE -100..+100 → -2..+2 via x/50)
- EVA: EVA value survey. Finnish citizen value survey ('Suomen kuvitettu arvokartta'). (Economic/social -1..+1 → -2..+2 via ×2)
- Ohjelmat: Party programmes (LLM). LLM-scored party principle & election programmes (Pohtiva archive), same axes. (−2..+2 per-party mean across all programmes)
- YSO, the Finnish General Ontology: finto.fi/yso.