(Die folgenden Erläuterungen wurden 2017/2018 erstellt und sind aus der heutigen Perspektive teilweise überholt und bis zu deren Überarbeitung mit Vorsicht zu geniessen:)
‘Machine Learning’ beschreibt Methoden, wie Computer aufgrund von Daten lernen können, Voraussagen und Prognosen über neu vorgelegte Daten zu treffen aus einem ähnlichen Kontext. Teilweise wird dazu auch der Begriff der ‘künstlichen Intelligenz’ verwendet, der aber irreführend sein kann. Der Computer kann zwar im Sinne einer Blackbox menschliche Intelligenz nachahmen, aber die Vorgehensweise des Computers weicht (noch) wesentlich von der menschlichen Denkweise ab (Vergleich künstlicher mit menschlicher Intelligenz).
Bei dieser Anwendung handelt es sich um ein maschinell gelerntes Modell, das jedermann über ein Webinterface zugänglich ist. Das Modell basiert auf den Ausgängen eidgenössischer Abstimmungen zwischen 1978 und Februar 2017 (eidgenössische Volksinitiativen, Referenden sowie Bundesgesetze).
Die Anwendung besteht aus Algorithmen für maschinelles Lernen entwickelt in der Programmiersprache Python. Dabei wurde auf den Einsatz von einschlägigen Frameworks für maschinelles Lernen verzichtet (scikit-learn o.ä.) und die Algorithmen wurden von Grund auf programmiert.
Auf der Internetseite der Bundeskanzlei sind sämtliche eidgenössischen Abstimmungen seit 1848 aufgeführt (Link). Ab 1978 liegen Abstimmungsinformationen in Form des heute noch existierenden ’Abstimmungsbüchlein’ vor. Bis ca. Ende der achtziger Jahre liegen die Abstimmungsbüchlein allerdings in relativ niedriger Qualität und in Form von eingescannten Bild-Dateien und nicht als direkt erkennbarer Text vor. Die Abstimmungsbüchlein konnten aber mit Texterkennung (Adobe OCR) eingelesen werden, wobei in den älteren Unterlagen relativ viele Wörter nicht richtig oder unvollständig erfasst wurden. Einige wenige Abstimmungsbüchlein waren nicht auf der Internetseite verfügbar und wurden freundlicherweise von der Bundeskanzlei nachgereicht, nachdem sie von Hand vor einem Mitarbeiter eingescannt wurden.
Das Abstimmungsbüchlein enthält für alle eidgenössischen Abstimmungen (d.h. Volksinitiativen und Änderungen der Verfassung durch Bundesgesetze, Referenden) neben Titel und Gesetzestext die Erläuterungen des Bundesrats sowie die Argumente der Befürworter und Gegner.
Die einzelnen Abstimmungen zwischen 1978 und Anfangs 2017 wurden in einem ersten Schritt in eine Excel Datei übertragen wobei der Titel, der Erläuterungstext mit den Argumenten von Befürworter und Gegnern sowie Gesetzestext und schliesslich der Ausgang der Abstimmung in separaten Spalten erfasst wurden. Die Argumente dafür bzw. gegen eine Vorlage wurden also nicht getrennt gesammelt (da dies für die Erstellung des Vorhersagemodells nicht relevant ist, da der Computer genau dies lernt). Dabei wurden 357 Datensätze erfasst, was etwas mehr Datensätze als Abstimmungen bedeutet. Einige Abstimmungen wurden auf zwei Zeilen aufgeteilt aufgrund ihrer Länge bzw. der Limitation von Excel von rund 66’000 Zeichen pro Eingabefeld.
Im nächsten Schritt wurden die Daten in ein Python-Pandas-DataFrame eingelesen. Darauf wurde der Text nur minimal aufbereitet, wobei nur die Interpunktion in den Textfeldern entfernt und die Gross-und Kleinschreibung beibehalten wurde.
Nach dem Einlesen und Aufbereiten der Abstimmungsdaten wurde aus dem gesamten Text eine Liste einmaliger Wörter erstellt. D.h., dass Wörter wie ‘der’, ‘die’, ‘das’ nur einmal aufgeführt werden genauso wie einmalig auftretende Wörter. Dies ergab eine Liste mit rund 55’000 einmaligen Wörtern (eine sogenannte ‚Bag of Words‘) , wobei darin auch Zahlen, vom OCR nicht richtig erfasste Wörter oder Wortbruchstücke erfasst wurden. Dies wurde im vorliegenden Modell belassen, da es sich gezeigt hat, dass verglichen mit einer bereinigten Wortliste das Modell nicht verbessert wurde.
In einem nächsten Schritt wurden für sämtliche Abstimmungen die darin enthaltenen Wörter gezählt anhand der Liste mit den einmaligen Wörtern. D.h. es wurde eine Tabelle erstellt mit der Angabe darüber, wie häufig ein Wort Zusammenhang mit einer bestimmten Abstimmung enthalten ist (zum Beispiel ‘der’ 46x, ‘Kapitalgewinnssteuer’ 17x etc.), Dabei wurden der Titel, Erläuterungs- sowie Abstimmungstext ‘in einen Topf’ geworfen, da es sich gezeigt hat, dass die Genauigkeit des Modells für Vorhersagen besser wird, wenn sämtliche Inhalte pro Abstimmung einbezogen werden, während ein Modell, das auf separatem Abstimmungs- bzw. Gesetzestext beruht, weniger genau ist.
Der nun entscheidende Schritt bei der Entwicklung des Modells ist das eigentliche Lernen. In dem konkreten Fall handelt es sich um ‘überwachtes Lernen’. D. h. der Computer lernt mit logistischer Regression in einem Gradientverfahren, wie die einzelnen Wörter pro Abstimmung gewichtet werden müssen, um das dem Computer bekannte Resultat der Abstimmung zu ‘erklären’. Dazu wurde die Tabelle mit den Worthäufigkeiten in eine Python-Numpy Matrix umgewandelt und mit einem schrittweise angepassten Set von Wortgewichten tausend mal (Matrix-) multipliziert. Das Ziel ist dabei einen möglichst absoluten Tiefpunkt der Kostenfunktion dieser hoch-dimensionalen Funktion zu finden, d.h. eine möglichst geringe Abweichung von den effektiven erzielten Abstimmungsresultaten zu finden. Je nachdem, wie die einzelnen Parameter für dieses Verfahren gesetzt werden, dauert dieser Prozess 3-10 Minuten. Längeres Lernen führt (auch beim Computer) allerdings nicht einfach zu besseren Resultaten. Wieso?
Dazu muss etwas ausgeholt werden: Typischerweise wird vor dem Gradientverfahren der Datensatz (zufällig) in zwei Teile, zum Beispiel im Verhältnis 80:20 aufgeteilt. D. h. in einen sogenannten Trainings-und Validierungsdatensatz. Mit dem Trainingsdatensatz wird das Lernverfahren durchgeführt und anschliessend am Validierungsdaten überprüft. Für den Trainingsdatensatz kennt der Computer das Abstimmungsresultat, während er für den Validierungsdatensatz eine Voraussage treffen muss aufgrund des Modells und anschliessend wird überprüft, ob die Vorhersage richtig war.
Eindrücklich ist beim maschinellen Lernen, dass wenn (wie im vorliegenden Fall) genügend Daten vorliegen, das Modell ziemlich rasch in der Lage ist 99-100 % der Abstimmungsresultate aufgrund der Wortgewichtung ‘nachzuvollziehen’. D.h. zum Beispiel auch, dass Abstimmungen, die inhaltlich sehr ähnlich sind oder über die mehrfach abgestimmt wurde mit unterschiedlichem Ausgang, nachvollzogen werden können. Der Computer erkennt im Verlauf, welche Wörter für den einen oder anderen Abstimmungsausgang ‘verantwortlich’ waren. Treibt man nun das Training auf die Spitzen, zum Beispiel, weil man unbedingt 100 % Trainingserfolg anstrebt, so läuft man Gefahr, dass sogenanntes ‘overfitting’, d.h. Überanpassung eintritt. Was bedeutet, dass der Computer unter Umständen erkennt, dass (überspitzt gesagt) ein einziges, eventuell gar falsch erfasst das Wort den gesamten Ausgang einer einzelnen Abstimmung erklären kann und das entsprechende Wort mit einem sehr hohen ‘Gewicht’ (englisch: ‘weight’) versieht. Das Problem ist dabei, dass ein solches Modell eine schlechte Prognose stellen wird für einen neuen Datensatz, indem dieses einzelne Wort nicht erscheint oder gar im Kontext eines anderen Resultats vorkommt und deshalb das Thema nicht richtig ’einschätzen’ kann. D.h. die Prognosefähigkeit (sog. Generalisierung) dieses Modells wäre gering. Es geht hier also darum, ein Optimum zu finden zwischen einem ‘gut gelernten aber nicht übertrainierten Modells’, welches nur in der gewohnten Umgebung aber nicht für neue Daten gute Prognosen liefert.
Da bei der Entwicklung dieses Modells aus verschiedenen Gründen ebenfalls die Gefahr der Überanpassung bestand, wurden Gegenmassnahmen ergriffen, unter anderem indem eine sogenannte L2-penalty (sog. Tikhonov- Regularisierung), welche der Überanpassung durch ‘Bestrafen’ von Wörtern/Parametern mit sehr hohen Gewichten entgegenwirkt.
Das vorliegende Modell hat eine Trainingsgenauigkeit von 98% und eine Genauigkeit von 87.3% auf dem Validierungsdatensatz. Mehr dazu im nächsten Kapitel.
Das Modell hat, wie weiter oben erwähnt, eine Trainingsgenauigkeit von 98% und eine Vorhersagegenauigkeit von 87.3% auf dem Validierungsdatensatz. D.h. das Modell hat 98% der gelernten Abstimmungen nachvollziehen können und es hat auch eine (erstaunliche) Genauigkeit von 87% die zufällig gewählten und nicht trainierten Abstimmungen richtig zu prognostizieren.
Die Frage ist, was bedeutet dies für zukünftige Abstimmungen? Sprich, wie hoch ist die Generalisierbarkeit des Modells? Die Frage lässt sich erst im Laufe der Zeit beantworten, indem fortlaufend die aktuellen Abstimmungen mit der Applikation getestet werden. Das Vertrauensintervall des Modells beträgt +/- 18 % (Stand August 2020 unter Einbezug des Validierungs- (aus der Modellentwicklung) und des Testdatensatzes (Abstimmungsprognosen 2017 bis August 2020. Ein Vergleich zwischen Prognosen, Umfragen und den offiziellen Resultaten ist weiter hinten zu finden.
Die Wahrscheinlichkeit (in Klammer) ist ein Mass dafür, wie sicher die Prognose für ein ‘Ja’ ist (ab 50 % Wahrscheinlichkeit für ein ‘Ja’, wird ‘Ja’ angenommen). Diese Wahrscheinlichkeit hat nichts mit dem Stimmanteil der Befürworter und Gegner in der Volksabstimmung zu tun, sondern ist eine Eigenschaft des Modells.
Was kann das Modell und was nicht?
Das Modell kann das, was es gelernt hat, am besten. Das Modell hat gelernt aufgrund der Abstimmungsunterlagen aus dem Abstimmungsbüchlein vorauszusagen, ob eine Abstimmung angenommen oder abgelehnt wird. Gibt man nun den Text einer beliebigen Vorlage aus der Vergangenheit ein, so wird man mit einer sehr hohen Wahrscheinlichkeit den damaligen Ausgang der Abstimmung korrekt erhalten, denn auf den meisten dieser Daten wurde das Modell ja trainiert. Mit der Eingabe von früheren Abstimmungen würde also keine echte Prognose gestellt, sondern nur ein Trainingsresultat abgefragt. Dies macht nicht sehr viel Sinn, aber es ist natürlich möglich und erlaubt.
Es macht auch nicht sehr viel Sinn, über einen beliebigen, hineinkopierten Text eine Abstimmungsprognose zu erstellen. Die Applikation wird ein (zufälliges) Resultat liefern, aber es ist nicht wirklich interpretierbar, da ein beliebiger Text aus einem ganz anderen Kontext ist und deshalb ein Ja/Nein zu einem beliebigen Text keine Aussagekraft hat.
Der online Abstimmungsprognose macht dann am meisten Sinn, wenn Gesetzestexte sowie die dazugehörigen Erläuterungen von aktuellen oder zukünftigen Abstimmungen eingegeben werden, um über den Ausgang eine Prognose mit der dazugehörigen Wahrscheinlichkeit für den entsprechenden Ausgang zu erhalten.
Die Idee ist auch, eigene Entwürfe von Initiativtexten mit Argumenten dafür und dagegen einzugeben und per Knopfdruck in Bezug auf den möglichen Abstimmungsausgang zu testen.
Wichtig zu wissen: die über diese Internetplattform eingegebenen Texte werden NIRGENDS gespeichert oder weiterverwendet.
Also auch die Eingabe eines eigenen, Initiativtexts mit ein paar politischen Argumenten und Erläuterungen oder auch nur ein paar Schlüsselwörter ist möglich. Dies erlaubt, ein gewisses ‘Gefühl’ darüber zu erlangen, welches Gewicht gewisse Argumente und Schlüsselwörter haben können für den Ausgang einer Abstimmung. Man kann auch ein einzelnes Wort eingeben wie ‘Mehrwertsteuer’ und (solange das entsprechende Wort auch in der Wortliste der einmaligen Wörter vorkommt) einen Hinweis darüber erhalten, ob ein spezifisches Wort eher für oder gegen eine Annahme in Zusammenhang mit einer Abstimmung spricht.
Es ist nicht möglich, auf Basis dieser Applikation eine beliebige Initiative so zu gestalten oder zu optimieren, dass sie bei der Abstimmung sicher angenommen wird. Einerseits, weil man bei jeder noch so kommunikativ optimierten Argumentation gewisse Begriffe nicht auslassen kann und andererseits sich die Argumente der Befürworter und Gegner, welche sich im Laufe der politischen Debatte entwickeln, nicht steuern lassen und diese Argumente deshalb auch ‚ehrlich‘ übernommen werden müssen.
Zur Interpretation der Resultate: Prognosewahrscheinlichkeiten für eine Annahme oder Ablehnung nahe von 50% bedeuten, dass keine eindeutige Aussage gemacht werden kann. Dies kann verschiedene Gründe haben:
- der eingegebene (lange) Text ist insgesamt tatsächlich so ausgewogen, dass keine sichere Prognose für ein Ja oder Nein erstellt werden kann und die Erfahrung zeigt, dass dies häufig bei knappen Abstimmungsausgängen der Fall ist.
- der eingegebene Text ist sehr kurz und enthält keine Stichworte mit grossem Gewicht, die eine eindeutigere Prognose ergeben würden
- der eingegebene Text stammt aus einem komplett anderen Kontext und ist nicht ‘politisch’
- für das eingegebene Wort hat das Modell ein unbedeutendes oder indifferentes Gewicht berechnet, d. h. es handelt sich zum Beispiel um Füllwörter wie ‘der’, ‘die’, ‘das’.
Prognosewahrscheinlichkeiten für eine Ablehnung bzw. Annahme nahe von 0 respektive 100% können ebenfalls verschiedene Ursachen haben:
- der eingegebene (Abstimmungs-) Text enthält genügend Stichworte, welche ein grosses Gewicht haben im Modell und deshalb eine eindeutige Prognose erlauben
- der eingegebene Text enthält oder entspricht Abstimmungstext, auf dem das Modell trainiert wurde und deshalb den Prognosewert für den entsprechenden Text ‘kennt’
- der eingegebene Text ist allenfalls kurz, aber enthält Stichworte, welche im Modell ein grosses Gewicht in Bezug auf Annahme respektive Ablehnung haben.
Wie stark die Prognosewahrscheinlichkeiten aufgrund von einzelnen Stichworten oder Themen ‘ausschlagen’, hängt auch mit dem Ausmass der Überanpassung (overfitting) zusammen, wie unter dem Abschnitt ‘das Modell’ beschrieben. Wenn dem Modell aufgrund der gesetzten Parameter oder hohen Anzahl von Iterationen bei der Berechnung ‘erlaubt’ wurde, sich an sehr wenigen Stichworten zu orientieren, um einen bestimmten Ausgang in Abstimmung vorauszusagen, dann können einzelne Stichworte ein zu hohes Gewicht erhalten. D. h., dass die entsprechenden Stichworte unter Umständen in einem neuen Kontext aufgrund ihres hohen Gewichts auch zu falschen Ergebnissen führen können (mangelnnde Generalisierbarkeit). In dem vorliegenden Modell wurden, wie weiter oben beschrieben, bestimmte Gegenmassnahmen getroffen, um dem ‘overfitting’ entgegen zu wirken. Damit die Prognosen aber eine gewisse Eindeutigkeit erhalten und auch ermöglicht werden soll, einzelne Stichworte auf ihr Gewicht hin zu prüfen, wurde ein relativ hoher Wert an Anpassung zugelassen.
Prognosen für zukünftige Initiativen: Diese sind in der folgenden Tabelle zusammengefasst (Klick zum Vergrössern). Quelle der Initiativtexte: Bundeskanzelei.
Achtung: diese Prognosen beruhen meist nur auf dem (zum Teil kurzen) Initiativtext und sind mit Vorsicht zu geniessen. Das Modell beruht auf ausgedehnten Daten. Noch fehlen die Stellungnahme des Bundesrats, die Argumente der Befürworter und Gegner, welche erst im Abstimmungsbüchlein erscheinen. Verlässliche Abstimmungsprognosen auf der Basis des Abstimmungsbüchleins sind farbig markiert.
Tendenziell tendieren die Vorhersagen, die nur auf dem Initiativtext beruhen, für eine Annahme. Dies hat neben den obigen Gründen auch damit zu tun, dass im Initiativtext (logischerweise) keine Gegenargumente enthalten sind.
Die Internetabfrage des Endbenutzers über www.stellus.ch wird an die Google Cloud weitergeleitet, wo der Webservice zur Berechnung der Prognose läuft. Dieser Webservice nimmt Bezug auf das ebenfalls auf Google Cloud gespeicherte und hochgeladene Modell.