Wie die Simulation rechnet, was sie nicht kann.
Monte-Carlo-Wahlsimulation für 18 deutsche Wahlen, kalibriert an 34 historischen Ergebnissen. Diese Seite dokumentiert das Modell: Datenquellen, Bayesianisches Blending, bekannte Schwächen.
Verlässlichkeits-Score (1-10) — wie der Score entsteht
Auf der Startseite und den Wahl-Karten zeigen wir pro Wahl einen Verlässlichkeits-Score zwischen 1,0 und 10,0 mit qualitativem Label (solide / belastbar / vorläufig / grob / Skizze). Er beantwortet nicht "wer gewinnt?", sondern: wie sicher ist diese Prognose überhaupt? Eine Wahl in 1 200 Tagen mit dürftigen Polls bekommt 3/10, eine Wahl in 7 Tagen mit 15 frischen Umfragen kann 9-10/10 erreichen.
Der Score ist eine bewusst lineare Heuristik aus vier Komponenten — kein statistisches Konfidenz-Maß, sondern ein lesbarer Qualitäts-Indikator. Wichtig: ein hoher Score heißt nicht, dass das Ergebnis stimmt. Er heißt nur, dass die Daten-Basis und die Modell-Streuung für diese Wahl ausreichend für eine belastbare Aussage sind.
| Komponente | Gewicht | Was sie misst | Skala 0 → 1 |
|---|---|---|---|
| Zeit | 40 % | Wie nah ist die Wahl? | 365 Tage → 0 · 0 Tage → 1 |
| Polls | 30 % | Wie viele Umfragen wurden in die Aggregation aufgenommen? | 0 Polls → 0 · 15+ Polls → 1 |
| Konvergenz | 20 % | Wie eng sind die Konfidenz-Bänder im Modell? (mittlere σ über alle Parteien) | σ 3 Pp → 0 · σ 0 Pp → 1 |
| Frische | 10 % | Wann war die jüngste Umfrage? | 60 Tage alt → 0 · 0 Tage → 1 |
Label-Bänder: 9,0–10,0 solide · 7,0–8,9 belastbar · 5,0–6,9 vorläufig · 3,0–4,9 grob · 1,0–2,9 Skizze.
Datenquellen
Das Modell integriert drei Datenstränge:
- Umfragen: Alle Sonntagsfragen von dawum.de (Open Database License). Über 3.700 Umfragen von 22 Instituten für 18 Parlamente, automatisch alle 6 Stunden aktualisiert.
- Politische Stimmungsdaten: Kanzler-Zufriedenheit und Regierungszufriedenheit aus dem ARD-DeutschlandTREND (infratest dimap, monatlich) und dem ZDF-Politbarometer (Forschungsgruppe Wahlen, alle 2 Wochen). Automatisch wöchentlich erfasst.
- Wirtschaftsdaten: Arbeitslosenquote pro Bundesland (Bundesagentur für Arbeit). Wird im Fundamentals-Prior als Prädiktor genutzt — nicht als kausaler Erklärungsfaktor.
- Sozioökonomische Strukturdaten (GENESIS): Bevölkerung, Altersstruktur, Ausländeranteil, BIP je Einwohner, Verfügbares Einkommen, Arbeitsmarkt, KFZ-Bestand und Verbraucherpreisindex — pro Bundesland, monatlich automatisiert über die GENESIS-API des Statistischen Bundesamtes (8 Tabellen, 16 Bundesländer × 15 Felder). Diese Daten fließen nicht direkt ins Simulationsmodell ein (ein Korrelationstest über 174 Beobachtungen zeigte keinen signifikanten Zusammenhang mit den Prognosefehlern), sondern dienen als Kontextinformation auf den Länderseiten.
- Wahlkreis-Strukturdaten (Bundeswahlleiterin): 299 Wahlkreise × 25 sozioökonomische Indikatoren (ALQ, Einkommen, BIP/EW, Ausländeranteil, Abiturquote, Bevölkerungsdichte u.a.). Datenlizenz Deutschland – Namensnennung – Version 2.0.
Gewichteter Umfragedurchschnitt
Statt alle Umfragen gleich zu behandeln, gewichte ich nach zwei Faktoren:
Aktualität (Temporal Decay)
Neuere Umfragen zählen mehr. Das Gewicht halbiert sich alle 14 Tage (exponentieller Abfall):
Eine Umfrage von gestern hat volles Gewicht. Eine Umfrage von vor 4 Wochen hat nur noch 25 % Gewicht. Ich nutze bis zu 20 Umfragen pro Wahl.
Institutsgüte und House Effects
Seit v4.0 werden die Institutsgewichte automatisch aus den Daten geschätzt statt manuell gesetzt. Für jede historische Wahl berechne ich den mittleren Fehler (MAE) jedes Instituts und gewichte invers: Institute mit kleinerer Abweichung bekommen mehr Gewicht.
Zusätzlich korrigiere ich für systematische Verzerrungen pro Institut und Partei (House Effects). Wenn ein Institut die AfD historisch um 1.5 PP unterschätzt, wird dieser Bias bei der Aggregation herausgerechnet. Die House Effects werden bei jedem Backtesting-Lauf neu geschätzt und in house_effects.json gespeichert — die aktuellen Werte sind unten als Tabelle offengelegt.
Fehlermodell
Für jede Partei berechne ich eine individuelle Standardabweichung (σ) mit vier Komponenten:
1. Basis-Unsicherheit
Größere Parteien haben höhere absolute Unsicherheit, aber niedrigere relative Unsicherheit.
2. Systematischer Bias
Umfragen haben immer einen systematischen Fehler, der nicht durch Mittelwertbildung verschwindet. Ich nutze partei-spezifische Bias-Terme statt eines pauschalen Werts:
| Partei | σ_systematic | Begründung |
|---|---|---|
| AfD | 2.2 PP | Social-Desirability-Bias, Shy-Voter-Effekt in Telefonumfragen |
| BSW | 2.0 PP | Neue Partei, keine historische Baseline |
| FDP | 1.4 PP | Volatil nahe der 5%-Hürde |
| Grüne, Linke | 1.3 PP | Tendenz zur Überschätzung in Umfragen |
| SPD | 1.1 PP | Leichte Unterschätzung in jüngerer Vergangenheit |
| CDU/CSU | 1.0 PP | Am genauesten erfasst |
3. Unsicherheit über Zeit (Random Walk)
Ich nutze eine Wurzel-Skalierung — angelehnt an Random-Walk-Modelle (Linzer 2013). Die Unsicherheit wächst anfangs schnell, flacht dann ab: bei 30 Tagen ≈ 0.7 PP, bei 180 Tagen ≈ 1.7 PP, bei 365 Tagen ≈ 2.5 PP.
4. Kleine-Parteien-Prämie
Parteien unter 8% erhalten eine proportional höhere Unsicherheit, da deren Wählerschaft volatiler ist und Umfragen bei kleinen Parteien stärker streuen.
Gesamtfehler
Partei-Korrelationen
Wenn eine Partei bei einer Wahl besser abschneidet als in den Umfragen, verlieren oft andere Parteien. Dies modelliere ich über eine paarweise Korrelationsmatrix statt eines einfachen globalen Swings:
x = μ + L · z, wobei L·Lᵀ = Σ (Kovarianzmatrix)
Die Korrelationen bilden empirische Wählerwanderungsmuster ab:
- CDU ↔ SPD: r = −0.45 (stark gegenläufig — klassische Volkspartei-Konkurrenz)
- CDU ↔ AfD: r = −0.35 (AfD-Gewinne gehen überproportional zu Lasten der CDU)
- Grüne ↔ Linke: r = +0.20 (tendenziell gleichlaufend im linken Spektrum)
- AfD ↔ BSW: r = +0.15 (leicht positiv — Protest-Wähler-Überlappung)
Kompositionelle Verteilung
Stimmenanteile müssen sich zu 100 % addieren — eine Normalverteilung kann das nicht garantieren. Seit v4.0 nutze ich die Logistic-Normal-Verteilung via Centered Log-Ratio (CLR) (Aitchison 1982). Dabei werden die Prozentwerte in den CLR-Raum transformiert, dort normalverteilt gesampelt (mit der Cholesky-korrelierten Struktur), und über eine Softmax-Funktion zurücktransformiert. Das Ergebnis summiert sich automatisch zu 100 %, ohne künstliche Normalisierung.
Rücktransformation: p_i = exp(clr_i) / Σ exp(clr_i)
Fundamentals-Prior
Umfragen allein sind vor allem weit vor der Wahl unzuverlässig. Seit v4.0 kombiniere ich sie bayesianisch mit einem Fundamentals-Prior — inspiriert von zweitstimme.org (Stoetzer et al. 2019) und dem Kanzlermodell (Norpoth & Gschwend).
Drei Prädiktoren
- Vorheriges Wahlergebnis: Der stärkste Einzelprädiktor. Wird als Ausgangswert genommen.
- Amtsinhaber-Effekt: Regierungsparteien erhalten eine Strafe (dynamisch, aktuell 3.4 PP bei 16% Regierungszufriedenheit). Die Partei des Ministerpräsidenten erhält einen Bonus von 3.0 PP (LTW) bzw. dynamisch aus Kanzler-Zufriedenheit (BTW, aktuell 2.1 PP bei 28%).
- Nationaler Trend: Für Landtagswahlen wird die Differenz zwischen aktuellen Bundesumfragen und dem BTW-2025-Ergebnis berechnet und zu 40% auf die Landesebene übertragen.
Bayesianisches Blending
Der Prior wird zeitabhängig mit dem Umfragedurchschnitt kombiniert:
w_fund = 0.35 / (1 + e^(-(Tage-120)/60))
Bei 365 Tagen vor der Wahl bestimmt der Prior ~35% des Ergebnisses. Bei 30 Tagen nur noch ~7%. Am Wahltag dominieren die Umfragen fast vollständig.
Seit v4.1 enthält das Blending einen Disagreement-Dampener (eine heuristische Sicherung): Wenn Umfragen und Fundamentals-Prior für eine Partei über 10 PP auseinander liegen (z.B. MV: Umfragen SPD 25%, Prior SPD 45%), wird das Prior-Gewicht automatisch halbiert. Bei über 15 PP Differenz auf 30% reduziert. Das verhindert, dass historische Ergebnisse aktuelle Umfragetrends übersteuern.
Regionale Wirtschaftslage
Die Arbeitslosenquote des Bundeslandes wird als Korrekturfaktor genutzt: In Bundesländern mit überdurchschnittlicher Arbeitslosigkeit geht dies im Modell mit einem leicht höheren AfD-Anteil (+0.3 PP pro Prozentpunkt Differenz) und niedrigerem Regierungsparteien-Anteil (-0.2 PP) einher. Diese Koeffizienten sind heuristisch gesetzt und bilden eine beobachtete statistische Tendenz ab — keine kausale Beziehung.
Monte-Carlo-Simulation
Pro Wahl führe ich 10.000 Simulationen durch. In jeder Simulation:
- Die gewichteten Umfragewerte (nach Bayesianischem Blending mit Fundamentals) werden in den CLR-Raum transformiert
- Ein korrelierter Fehlervektor wird über Cholesky-Zerlegung gezogen
- Die CLR-Werte werden via Softmax zurücktransformiert (automatische Normierung auf 100%)
- Parteien unter der Sperrklausel werden entfernt, Sitze nach geltendem Wahlrecht verteilt
Sperrklauseln und Sitzverteilung
| Parlament | Klausel | Verteilung | Besonderheiten |
|---|---|---|---|
| Bundestag | 5% | Sainte-Laguë | Grundmandatsklausel (3 Direktmandate) nicht modelliert |
| Landtage (Standard) | 5% | Sainte-Laguë | — |
| Hessen, Saarland | 5% | d'Hondt | Abweichendes Divisorverfahren |
| Schleswig-Holstein | 5% | Sainte-Laguë | SSW befreit (Minderheitenpartei) |
| Europaparlament | keine | Sainte-Laguë | Seit 2024 keine Sperrklausel in DE |
Ergebnisse
Aus den 10.000 Simulationen berechnen wir:
- Median und 95%-Konfidenzintervall — in welchem Bereich liegt das Ergebnis mit 95% Wahrscheinlichkeit?
- Einzugswahrscheinlichkeit — wie oft schafft eine Partei die jeweilige Sperrklausel?
- Modell-Favorit — welche Partei hat in den Simulationen am häufigsten den höchsten Stimmenanteil?
- Koalitionen — wie oft erreichen bestimmte Partei-Kombinationen eine Sitzmehrheit? (Einschränkung: siehe Caveat unter Partei-Korrelationen)
Wahlkreis-Projektion
Für die 299 Bundestagswahlkreise nutzen wir ein Regional-Swing-Modell: Pro Bundesland berechnen wir die Veränderung zwischen aktuellen Landtagswahl-Umfragen und dem BTW-2025-Ergebnis, gedämpft um den Faktor 0.6 (da Landtagstrends sich nicht 1:1 auf Bundestagswahlen übertragen). Für Bundesländer ohne aktuelle LTW-Umfragen greifen wir auf den nationalen Trend zurück.
Track Record (Backtesting)
Ich habe das Modell per Leave-One-Out Cross-Validation auf 34 historische Wahlen (2017–2026) angewendet. Dabei wird jede Wahl einzeln ausgeschlossen, damit sie ihren eigenen Fundamentals-Prior nicht informieren kann — das mildert Overfitting.
Koalitions-Validierung
Über die reinen Stimmen-Prozente hinaus prüfe ich: Wie oft war die nach der Wahl tatsächlich gebildete Koalition in der Modell-Vorhersage als realistische Option enthalten? Vor jeder Wahl liefert das Modell für eine feste Auswahl an Standard-Koalitionen (GroKo, Schwarz-Grün, Ampel, R2G, Jamaika, Kenia, Deutschland-Koalition, CSU+FW, SPD+BSW und einige mehr) je eine Mehrheits-Wahrscheinlichkeit über die 10 000 Monte-Carlo-Szenarien. Für 27 historische Wahlen (alle bei denen die gebildete Koalition zur Standard-Auswahl gehört — Allein-Regierungen wie SL-2022 und Sonderfälle wie SPD+Linke MV-2021 sind ausgeschlossen, ebenso die zwei EU-Wahlen und die zwei noch offenen Wahlen 2026) ranke ich, an welcher Position diese Koalition im Modell stand.
Einzelne Wahlen anzeigen
| Wahl | Gebildete Koalition | Rank | Modell-WK |
|---|---|---|---|
| Lade Backtest-Daten … | |||
Zusätzliche Scoring-Rules: Brier-Score & CRPS
MAE allein sagt nicht, ob das Modell gut kalibriert ist — es misst nur die durchschnittliche Punkt-Abweichung. Ein Modell mit enger Punktprognose aber zu schmalen Konfidenzintervallen ist schlechter als eines mit etwas größerer Abweichung und realistischer Unsicherheit. Deshalb hier zwei ergänzende Scoring-Rules:
Lade Scoring-Rules aus accuracy.json …
Per-Partei-Reliability — bei welcher Partei ist das Modell wie gut?
MAE und Brier-Score messen die Gesamt-Qualität. Aber: ist das Modell bei jeder Partei gleich gut? Diese Tabelle zeigt für jede Partei separat, ob das Modell sie im Schnitt zu hoch oder zu niedrig vorhersagt (Bias), wie weit die Vorhersagen streuen (σ Residuen) und wie oft das tatsächliche Ergebnis im 95-%-Konfidenz-Intervall lag.
Lade Per-Partei-Reliability aus accuracy.json …
Naïve-Baselines — bringt das ganze Modell überhaupt etwas?
Die fairste externe Validierung ist nicht der Vergleich gegen einen anderen Forecaster (zweitstimme.org publiziert nur für BTW, wahlrecht.de ist Aggregator, pollytix.eu ist kostenpflichtig). Sondern: Wie gut wäre ein primitives Verfahren? Wenn unser komplexes Monte-Carlo-Modell nicht deutlich besser ist als ein simpler Mittelwert, ist die Modell-Komplexität nicht gerechtfertigt.
Lade Baseline-Vergleich aus accuracy.json …
Train/Test-Split — overfittet das Modell auf historische Wahlen?
Eine zentrale Sorge bei jedem statistischen Modell: Lernt es die Wahrheit, oder merkt es sich nur die Trainings-Daten? Wir teilen die 34 Wahlen am 01.01.2023 in Train (2017-2022) und Test (2023-2026). Bei einem überfitteten Modell wäre der MAE auf Test-Daten deutlich schlechter als auf Train.
Lade Train/Test-Diagnose aus accuracy.json …
Pro-Institut-Backtest — wie schneiden die einzelnen Umfrage-Institute ab?
Die naive Baseline (Poll-Avg-5) hat gezeigt: ein simpler Mittelwert ist im reinen MAE leicht besser als unser komplexes Modell. Aber welcher Mittelwert? Hier eine Aufschlüsselung pro Institut: für jede der 34 historischen Wahlen wird der jüngste Endpoll im 14-Tage-Fenster vor der Wahl genommen und gegen das tatsächliche Ergebnis verglichen.
Lade Pro-Institut-Backtest aus accuracy.json …
MAE nach Parteigröße — wo das Modell schwach ist
Ein MAE von 1.63 Pp ist für eine 30-%-Partei hervorragend (relative Abweichung 5 %), für eine 5-%-Partei aber schwach (relative Abweichung > 30 %). Deshalb hier die Aufschlüsselung:
Lade Aufschlüsselung aus backtest.json …
34 Wahlen: 29 Landtagswahlen, 3 Bundestagswahlen, 2 Europawahlen. Der Modell-Favorit war in 6 Fällen nicht die am Wahltag stärkste Partei — ausschließlich bei Kopf-an-Kopf-Rennen mit weniger als 3 Prozentpunkten Abstand. Diese Fehleinschätzungen zeigen, dass das Modell bei knappen Rennen an seine Grenzen stößt.
Alle 34 Wahlen im Detail
| Wahl | Datum | MAE | CI95 | Favorit |
|---|
Bekannte Limitierungen
Hier dokumentiere ich, was das Modell nicht kann. Jede fundierte methodische Kritik fließt hier offen ein — das ist Teil des Produkts.
Strukturelle Grenzen (auch in professionellen Modellen üblich)
- Keine Wahlprognose: Dies ist eine statistische Simulation auf Basis von Umfragen und Strukturdaten. Umfragen bilden die aktuelle Stimmungslage ab — sie sagen nicht, wie gewählt wird.
- Keine lokalen Faktoren: Kandidateneffekte, regionale Themen, taktisches Wählen und Wahlkampfdynamiken werden nicht modelliert. Das ist bei allen aggregierten Modellen so.
- MP-Beliebtheit nur als Proxy: Für Landtagswahlen fehlen systematische MP-Approval-Daten. Der statische Bonus von 3.0 PP ist eine Vereinfachung.
Aktuell offene methodische Schwächen
- Kein vollständig Bayesianisches Modell: Anders als zweitstimme.org nutze ich kein probabilistisches Programmier-Framework (Stan/PyMC), sondern sequenzielles Monte-Carlo mit heuristisch gesetzten Parametern. Die Fehlerterme und Korrelationen werden getrennt geschätzt, nicht simultan aus den Daten gelernt. Das vereinfacht die Implementierung, kann aber zu inkonsistenten Unsicherheitsschätzungen führen.
- BSW-Kalibrierungs-Unsicherheit: Für BSW (seit 2024) liegen nur 5 Wahlen im Backtesting-Set vor (TH/SN/BB 2024, BTW 2025, EU 2024). Der Bias-Term ist aus zu wenigen Datenpunkten geschätzt. Als konservative Gegenmaßnahme ist die systematische Sigma für BSW auf 3.0 Pp erhöht — die CI95-Bänder sind entsprechend breiter. Mit jeder weiteren BSW-Wahl schließt sich diese Lücke. Frontend-Markierung: BSW-Balken tragen ein ⚠-Symbol mit Tooltip zur Datenlage.
- Grundmandatsklausel bei Bundestagswahlen: Parteien, die mindestens 3 Direktmandate gewinnen, ziehen auch unterhalb der 5-%-Hürde in den Bundestag ein. Das Modell modelliert diese Regel derzeit nicht —
entry_prob-Werte für Linke und CSU können dadurch systematisch zu niedrig sein. (In Bearbeitung: eine Grundmandats-Logik im Monte-Carlo-Inner-Loop, die Direktmandate pro Szenario zählt und in die Einzugs-Entscheidung zurückführt.)
Datenlage-Schwächen (werden mit der Zeit besser)
- Wahlbeteiligung pro Wahlkreis: Historische Wahlbeteiligungs-Daten pro Bundestagswahlkreis werden von der Bundeswahlleiterin publiziert, sind in polls aber noch nicht integriert. Geplant: Cron-Fetch der CSV-Dateien, Anzeige auf Wahlkreis-Detail-Seite.
- Per-Wahlkreis-Accuracy aus echtem Backcast: Die globale Accuracy (MAE 1.62 Pp, CI95-Trefferquote 93.4 %) gilt über 34 Wahlen auf Bundeslands-/Bundes-Ebene. Ein echter historischer Backtest pro Wahlkreis benötigt BTW-2017/2021-Ergebnisse pro WK, die wir noch nicht bezogen haben. Als Zwischenschritt rechnen wir eine Kalibrierungs-Klassifizierung pro WK (siehe nächsten Abschnitt) — Swing-Residual-Analyse gegen BTW 2025. Output:
/data/wk_backcast.json, tägliche Aktualisierung. - Bundestrend-Zeitreihe: Aktuell 6 Wochen aus der dawum-Historie. Der Rolling-Window wächst wöchentlich.
Kalibrierungs-Klassifizierung pro Wahlkreis
Auf jeder Wahlkreis-Detail-Seite steht eine kurze Kalibrierungs-Zeile („WK-Kalibrierung stabil / moderat abweichend / strukturell"). Methodik:
- Pro Partei: bundesweiter Swing = aktueller Bundestrend − BTW-2025-Endergebnis.
- Pro Partei pro WK: WK-Swing = Szenario 2029 − WK-Ergebnis BTW 2025.
- Residual = WK-Swing − Bund-Swing. Das ist der Anteil, den das Strukturmodell zusätzlich zum Bundestrend für diesen WK vorhersagt.
- Mittleres absolutes Residual über die 7 relevanten Parteien (CDU/CSU, SPD, Grüne, FDP, AfD, Linke, BSW) → Klasse:
- stabil (< 1,0 Pp): folgt im Wesentlichen dem Bundestrend, Modellvertrauen hoch.
- moderat abweichend (1,0–2,5 Pp): spürbare strukturelle Eigenbewegung vorhergesagt.
- strukturell (≥ 2,5 Pp): Modell erwartet eigenständige Dynamik; entsprechend höhere Unsicherheit.
Dies ist kein klassischer Leave-One-Out-Backtest (dafür fehlen uns historische BTW-2017/2021-Ergebnisse pro WK) — sondern ein Kalibrierungs-Proxy. Er macht transparent, wie viel der Modell-Output eigene WK-Aussage gegenüber reinem Bundestrend-Übertrag ist. Aktuelle bundesweite Verteilung (Stand: letzter Cron-Lauf) steht in /data/wk_backcast.json unter class_counts.
Diese Liste wird nach jeder Modell-Revision aktualisiert. Kritik/Hinweise: max@karbach.digital.
Versionshistorie
Das Modell wird in SemVer-Style versioniert. Major-Sprünge (v4.0, v5.0) markieren strukturelle Methodik-Änderungen, Minor-Sprünge (v4.1–v4.6) ergänzen Komponenten oder Sicherungen ohne den Modell-Kern zu ersetzen. Aktuell live: v4.6.
v4.6 — 21.05.2026 (aktuell live)
- ✓ House-Effects-Dämpfung auf Faktor 0,3: Die institut-spezifische Bias-Korrektur wirkte mit voller Stärke kontraproduktiv — Test-MAE stieg von 1,42 auf 1,55, Grüne-Bias verschlimmerte sich von −0,85 auf −2,14. Diagnose-Ursache: die volle Korrektur überzog systematisch. Dämpfung auf 30 % Anwendung gleicht das aus.
- ✓ Backtest lädt House-Effects explizit: Vorher waren die House-Effects nur im Live-Modus aktiv (über main()), im Backtest leer. Damit waren Backtest-Zahlen unrealistisch günstig. Jetzt ist der Backtest unter denselben Bedingungen wie Live.
- ✓ Backtest-Verbesserung gegen v4.5: Test-MAE 1,42 → 1,39 Pp (bester Wert je), Overall-MAE 1,45 → 1,44, SPD-Bias −0,80 → −0,46 (deutlich besser kalibriert), Linke-Bias −1,02 → −0,58 (deutlich besser kalibriert).
- ✓ Position im Institut-Ranking: Wir liegen jetzt zwischen FGW (1,26 Pp) und Forsa (1,32 Pp) — auf Augenhöhe mit den etablierten Top-Instituten.
v4.5 — 21.05.2026
- ✓ Frische-Aggregation: Das Backtest-Fenster pro Wahl wurde von 20 auf 5 Polls verkürzt (jeweils die jüngsten 5 Umfragen vor der Wahl, statt einer über 60 Tage gestreuten Auswahl). Auslöser: der Naïve-Baseline-Vergleich (v4.4) hatte gezeigt, dass ein simpler 5-Poll-Mittelwert (1,36 Pp) unser komplexes Modell (1,55 Pp) im MAE schlug. Diagnose: das alte 20-Poll-Fenster glättete Late-Swings weg.
- ✓ Train/Test-Split-Diagnostik: Backtest läuft jetzt zusätzlich mit zeitlichem Split bei 01.01.2023 (Train 2017-2022, Test 2023-2026). Damit kann jede künftige Modell-Änderung gegen ungesehene Test-Daten messbar gemacht werden — Overfit-Schutz.
- ✓ Backtest-Verbesserung: Overall MAE 1,55 → 1,45 Pp, CI95-Hit 94,8 → 96,0 %, Winner-Accuracy 88,2 → 91,2 %. Pro Partei besonders sichtbar: SPD-MAE 2,28 → 2,00, CDU-MAE 2,03 → 1,76.
v4.4 — 21.05.2026
- ✓ Verlässlichkeits-Score (1-10): Pro Wahl ein lesbarer Qualitäts-Indikator aus vier Komponenten (Zeit / Poll-Count / Konvergenz / Frische, jeweils auf [0,1] normiert, gewichtetes Mittel 0,4/0,3/0,2/0,1). Sichtbar auf der Startseite (Wahl-Pills + Hero-Box mit Komponenten-Bars), Bundesland-Hub und Methodik-Seite. Label-Bänder solide / belastbar / vorläufig / grob / Skizze. Methodik unten.
v4.3 — 21.05.2026
- ✓ Parteispezifische Bias-Korrektur in
bayesian_blend(): Aus dem Per-Partei-Reliability-Backtest (v4.2) wurde sichtbar, dass das Modell Grüne und Linke systematisch um ~0,9 Pp überschätzt. Im Live-Modell wird jetzt eine gedämpfte Korrektur (Faktor 0,5) auf den geblendeten Wert addiert: Grüne −0,435 Pp, Linke −0,490 Pp. Schwellen: n ≥ 10, |bias| ≥ 0,5 Pp, Sicherheits-Cap ±1,5 Pp pro Partei. Korrektur-Werte werden bei jedem Backtest neu berechnet und inparty_bias_correction.jsongespeichert. - ✓ Zirkulär-Schutz: Im Backtest selbst ist die Korrektur deaktiviert (sonst würden wir den Bias des Modells messen, das ihn schon korrigiert). Der Backtest bleibt fair, die Live-Modelle profitieren.
- ✓ Per-Partei-Reliability-Display auf der Methodik-Seite — Tabelle + Scatter-Plot (eine Farbe pro Partei) mit Modell-Prognose vs. tatsächliches Wahlergebnis und gestrichelter Perfekt-Linie. Sortiert nach Daten-Basis (SPD/Grüne n=34 zuerst, FW/CSU/SSW als 'sparse' markiert).
v4.2 — 21.05.2026
- ✓ Voll-Stack Koalitions-Backtest: Vergleich der historisch tatsächlich gebildeten Koalitionen (27 Wahlen 2017–2025) gegen die vom Modell vor der Wahl ausgegebenen Mehrheits-Wahrscheinlichkeiten. Ergebnis: 85,2 % Top-3-Rate (in 23 von 27 Fällen war die später gebildete Koalition unter den Modell-Top-3), 33,3 % Top-1-Rate, ∅ Modell-WK der gebildeten Koalition 67,9 %.
- ✓ Methodik-Tooltips: Zentraler Glossar mit 28 Begriffen (GroKo, Jamaika, R2G, Ampel, Kenia, Median, CI95, Einzug, Monte-Carlo, MAE, σ, Pp, Leave-One-Out, Grundmandatsklausel, Sainte-Laguë, Bayesianisches Blending, House-Effect …) als
<abbr title>-Pattern auf Koalitions-Bars, Partei-Profilen und dieser Methodik-Seite. - ✓ Re-Sim mit aktueller Modell-Generation: Backtest-Zahlen verbessert — MAE 1,63 → 1,55 Pp, CI95 94,3 → 94,8 %, Winner-Accuracy 82,4 → 88,2 %. Re-Sim machbar weil v4.1-Phantom-Filter + Disagreement-Dampener jetzt rückwirkend in allen 34 historischen LOO-Läufen wirken.
- ✓ Code-Hardening: ESLint 0/0, Ruff 0/0 (90 Bestands-Findings gefixt), Prettier-Cleanup auf 28 Frontend-Files, pre-commit-Hooks alle scharf.
v4.1 — 10.05.2026
- ✓ Phantom-Koalitions-Filter: Eine Koalition wird nur noch ausgegeben, wenn jedes Mitglied min. 30 % Einzugswahrscheinlichkeit hat. Vorher zählten Partner mit 0 Sitzen wie die Basis — die Anzeige war optisch identisch zwischen z. B. Schwarz-Grün und Jamaika, obwohl der dritte Partner faktisch nicht im Parlament war.
- ✓ Minimal-winning-Konsistenz: Bei 3er-Koalitionen wird pro MC-Iteration geprüft, ob der kleinste Partner für die Mehrheit gebraucht wird. Ist er redundant, zählt die Koalition nicht als „echte" Option — sonst überzählen wir politisch unübliche „mit-dazu"-Konstellationen.
- ✓ Conditional
member_seats_when_active: Bei bimodalen Edge-Cases (Partner global 0 Sitze, aber wenn die Koalition aktiv ist 6 Sitze) wird die Sitz-Zahl-im-aktiven-Szenario separat angezeigt — Bonus-Transparenz für Grenzfälle wie FDP/BSW am 5-%-Rand. - ✓ Disagreement-Dampener: Wenn Umfragen und Fundamentals-Prior für eine Partei > 10 Pp auseinanderliegen, wird das Prior-Gewicht halbiert. Bei > 15 Pp auf 30 % reduziert. Verhindert dass historische Strukturdaten gegen klare aktuelle Trends übersteuern.
- ✓ CLR-Sigma-Cap + Post-Simulation-Sanity-Cap: Begrenzung der Log-Raum-Varianz für Klein-Parteien (verhindert CI-Explosion); Parteien unter 5 % können maximal 3× ihren Umfragewert erreichen.
- ✓ Sanity-Suite + CI-Gate: Strukturelle Konsistenz-Prüfungen vor jedem Frontend-Write (Mehrheits-Bezugsgrößen, Phantom-Member, Median-Aggregat-Redundanzen, LTW-WK-Vollständigkeit) — als Cron-Gate (
scripts/sanity_gate.sh) alle 6 h. - ✓ JSON-Schemas + Drift-Detection: BTW/LTW/EU-Schemas validieren vor jedem Write; > 5 Pp Bewegung pro Partei zwischen aufeinanderfolgenden Cron-Läufen löst Bugsink-Alert aus.
v4.0 — 24.04.2026
- ✓ Logistic-Normal-Verteilung via CLR (Aitchison 1982) — kompositionelle Daten, Stimmenanteile summieren sich automatisch zu 100 % ohne künstliche Normalisierung.
- ✓ Automatische Institutsgewichte und House Effects: Über alle 34 historischen Wahlen wird pro Institut der mittlere Fehler (MAE) berechnet, invers gewichtet; parteispezifische Bias-Terme (Selb et al. 2023) werden bei der Aggregation rausgerechnet.
- ✓ Fundamentals-Prior mit Bayesianischem Blending — inspiriert von zweitstimme.org (Stoetzer et al. 2019) und dem Kanzlermodell (Norpoth & Gschwend). Drei Prädiktoren: vorheriges Wahlergebnis, dynamischer MP/Kanzler-Bonus aus Approval-Daten, nationaler Trend für LTW.
- ✓ Random-Walk-Unsicherheit (√t): Die Unsicherheit wächst anfangs schnell, flacht dann ab (Linzer 2013). Bei 30 Tagen ≈ 0,7 Pp, bei 180 Tagen ≈ 1,7 Pp, bei 365 Tagen ≈ 2,5 Pp.
- ✓ Paarweise Partei-Korrelationsmatrix: Cholesky-Zerlegung statt globalem Swing — wenn die AfD über-performt, korrigieren die übrigen Parteien korreliert (negativ für etablierte, positiv für andere Protestparteien).
- ✓ Leave-One-Out Cross-Validation über 34 historische Wahlen (2017–2026): Jede Wahl wird einzeln aus dem Fundamentals-Prior ausgeschlossen, damit sie ihre eigene Prognose nicht informieren kann.
- ✓ Regionale Wirtschaftsanpassung: Bundesland-Arbeitslosenquote als heuristischer Korrekturfaktor (AfD +0,3 Pp pro Pp ALQ-Differenz zum Bund, Regierungsparteien −0,2 Pp).
- ✓ Kalibrierungsfaktor ×1,15 auf alle Fehlerterme nach Backtest-Analyse — CI95-Hit-Rate vorher 94,7 % auf zu breiten Intervallen, jetzt realistischer.
v3.x — vor April 2026 (archiviert)
Die v3-Reihe (Januar–März 2026) hatte einen einfacheren Aufbau: gewichteter Umfragedurchschnitt (v3.0), Monte-Carlo mit Normalverteilung (v3.1), erste Backtests (v3.2). Diese Versionen sind durch v4.0 vollständig ersetzt — keine v3-Komponente ist mehr im Live-Modell aktiv.
Roadmap — was als nächstes kommen könnte
Anker-Items für künftige Modell-Generation. Nichts davon ist zeitgebunden — kommt rein, wenn ein konkreter Anlass es rechtfertigt. Stand 21.05.2026 läuft v4.2 stabil, kein Pain-Point.
| Feature | Aufwand | Status |
|---|---|---|
| Live-Out-of-Sample-Vault (eingefrorene Prognosen vor jeder Wahl, öffentlich archiviert) | Mittel | Skeleton existiert (unten) — wartet auf erste Testwahlen |
| Vollständig Bayesianisches Modell (Stan/PyMC) | Hoch | Evaluierung — würde aktuelles Modell ersetzen, nur wenn klarer Mehrwert |
| Grundmandatsklausel im Sitz-Zuteilungs-Verfahren | Mittel | Backlog — aktuell „nicht modelliert" Disclaimer |
| Per-Wahlkreis-Backtest (echtes LOO statt Kalibrierungs-Proxy) | Hoch | blockiert auf BTW-2017/2021-Ergebnisse pro WK |
| Eigene Publikation (Methodik + Backtesting auf arXiv / SSRN) | Mittel | In Vorbereitung — sobald v4.2 sechs Monate stabil läuft |
Technisches
Python (NumPy/SciPy). 12 automatisierte Cron-Jobs: alle 6 Stunden (Simulation, Regional Swing, Feed, OG-Image), täglich (Nachrichtenlage, Telegram, Ergebnisse), wöchentlich (Approval-Daten), monatlich (GENESIS, Wirtschaftsdaten, KI-Landesprofile). 10.000 Monte-Carlo-Durchläufe pro Wahl. Logistic-Normal-Verteilung via CLR-Transformation. Cholesky-Zerlegung für Partei-Korrelationen. Leave-One-Out Cross-Validation über 34 historische Wahlen. KI-Kurzanalysen via Mercury 2 (Inception Labs), Lagebild via Opus 4.6 (Anthropic) — jeweils über OpenRouter API. News-Aggregation aus 12 RSS-Feeds (ÖRR, Qualitätspresse, Regionalsender). Wahlkreis-Geometrien vom Bundeswahlleiter (dl-de/by-2.0). Frontend: statisches HTML/CSS/JS, D3.js, Chart.js — alles lokal gehostet. Keine Cookies, kein Tracking (außer Plausible Analytics, DSGVO-konform ohne Einwilligung). Server: Hetzner Cloud, Standort Deutschland.
Referenzen
- Aitchison, J. (1982). The Statistical Analysis of Compositional Data. Journal of the Royal Statistical Society B, 44(2).
- Linzer, D. (2013). Dynamic Bayesian Forecasting of Presidential Elections in the States. Journal of the American Statistical Association, 108(501).
- Norpoth, H. & Gschwend, T. (2010). The chancellor model: Forecasting German elections. International Journal of Forecasting, 26(1).
- Selb, P. et al. (2023). Bias and Variance in Multiparty Election Polls. Public Opinion Quarterly, 87(4).
- Stoetzer, L. et al. (2019). Forecasting Elections in Multiparty Systems: A Bayesian Approach Combining Polls and Fundamentals. Political Analysis, 27(2).
Großwetterlage-Archiv
Jede Fassung der täglichen Lageeinschätzung wird archiviert — so lässt sich nachvollziehen, wann sich die Erzählung gedreht hat und warum. Keine stille Überschreibung.
Lade Archiv …
Out-of-Sample-Vault (laufender Live-Test)
Ein Leave-One-Out-Backtesting an 34 Wahlen hat die Schwachstelle, dass die Modell-Parameter an denselben Wahlen kalibriert wurden. Ein echter Out-of-Sample-Test braucht eine Prognose, die vor einer Wahl gemacht und danach nicht mehr geaendert wurde.
Genau das passiert hier: Sieben Tage vor jeder anstehenden Wahl wird ein Snapshot eingefroren und unten aufgelistet. Nach der Wahl wird die Abweichung vom tatsaechlichen Ergebnis eingetragen und ist hier oeffentlich nachlesbar. Das ist langsam — aber ehrlich.
Lade Vault-Index aus out_of_sample_vault/vault_index.json …
Institutsgewichte & House Effects (live)
Damit niemand raten muss, wie einzelne Institute gewichtet werden — hier die aktuellen Werte aus house_effects.json,
ermittelt durch Inverse-MAE-Gewichtung über 34 historische Wahlen. Institute, die in der Vergangenheit präziser waren,
bekommen mehr Gewicht. Der Partei-spezifische House-Effect (Bias-Korrektur in Prozentpunkten) wird zusätzlich herausgerechnet.
Lade Institutsgewichte aus house_effects.json …
Wer das hier macht
polls.karbach.digital wird von Max Karbach betrieben. Als Einzelperson, nicht als Institut. Kein Team, keine Auftraggeber, keine Parteinähe — dafür vollständige Methoden-Offenlegung, offene Daten und ein Modell, dessen Kalibrierung jeder nachrechnen kann.
Das ist bewusst ein komplementäres Angebot zu etablierten Instituten wie Forschungsgruppe Wahlen, Infratest oder INSA — nicht ein Ersatz. Die Stärke: schnelle Iteration, transparente Modell-Änderungen, keine politische oder kommerzielle Interessenlage. Die Schwäche: kein Feldzugang für eigene Umfragen, kein Peer-Review, 20 Jahre Erfahrungs-Vakuum. Beides wird hier offen benannt, nicht kaschiert.
Belege für Iterations-Geschwindigkeit
Dokumentierte Modell-Änderungen seit dem v4.0-Cut-Over (April 2026) — Vollständige Liste siehe Versionshistorie oben:
- v4.0 (24.04.2026): Cut-Over auf die heutige Methodik — Logistic-Normal-Verteilung via CLR, Cholesky-Korrelationen, Bayesianisches Blending mit Fundamentals-Prior, automatische Institutsgewichte, Leave-One-Out CV.
- v4.1 (10.05.2026): Phantom-Koalitions-Filter, minimal-winning-Konsistenz, Disagreement-Dampener im Blending, CLR-Sigma-Cap für Klein-Parteien, Sanity-Suite als CI-Gate, JSON-Schemas mit Drift-Detection.
- v4.2 (21.05.2026): Voll-Stack Koalitions-Backtest (85,2 % Top-3-Rate über 27 Wahlen), Methodik-Tooltips, Re-Sim mit verbesserten MAE/CI95/Winner-Zahlen, vollständiger Lint-/Format-/Ruff-Cleanup im Bestand.
Drei dokumentierte Modell-Verbesserungen innerhalb von vier Wochen, jede einzeln begründet und mit Backtest-Auswirkung belegt. Das ist mehr als viele Institute in einem Jahr öffentlich machen.
Erreichbarkeit & Response-Versprechen
- Methodische Kritik: max@karbach.digital. Antwort-Versprechen: wochentags innerhalb von 48 Stunden.
- Fundierte methodische Einwände werden öffentlich in der Versionshistorie dokumentiert — namentlich genannt, wenn gewünscht.
- Wissenschaftliche Diskussion ist willkommen: wenn jemand aus der Wahlforschung Lust auf methodisches Review hat, bitte melden — im Moment fehlt polls bewusst dieses Peer-Korrektiv.
Wenn Sie methodisch etwas finden, das falsch ist — bitte melden. Jede fundierte Kritik wird öffentlich gemacht und fließt in die nächste Modellversion ein.
Kontakt
Methodische Kritik, Fehlerberichte und Verbesserungsvorschläge: max@karbach.digital
Die Methodik wird nach jeder Wahl evaluiert und bei Bedarf angepasst. Änderungen werden versioniert und hier dokumentiert.
Stand: April 2026