Asimovs Psychohistorik
Sagt die Laune der Menge die Börse voraus? Du legst die Stimmungskurve gegen den Dow Jones — und lernst am ehrlichen Ergebnis, warum Asimov seiner Psychohistorik einen „Maulesel“ zur Seite stellte.
Kurz gesagt
Was: Du nimmst die tägliche Stimmung aus 14.1 und legst sie neben die tägliche Rendite des Dow Jones. Dann prüfst du zweierlei: Hängt die Stimmung von gestern mit dem Kurs von heute zusammen? Und kann ein Modell allein aus der Stimmung erraten, ob die Börse steigt oder fällt?
Der Kern-Gedanke: Das ist der Prüfstein der Psychohistorik. Schon 2010 haben wir aus der Twitter-Stimmung Börsenbewegungen vorherzusagen versucht. Hier machst du es nach — und begegnest der ehrlichsten Lehre des Kapitels: Die Menge ist ein bisschen vorhersagbar, aber nie ganz. Genau da wartet der Maulesel.
Du brauchst: denselben Kaggle-Datensatz wie in 14.1 (jetzt auch DJIA_table.csv) und
Python mit pandas, vaderSentiment, scipy und
scikit-learn.
Worum es geht
Asimov war zu klug, um seine Psychohistorik allmächtig zu machen. In den Romanen taucht eine Figur auf, die er den Maulesel nennt: ein einzelner, unvorhergesehener Mensch, der Seldons ganze Berechnung über den Haufen wirft. Die Menge folgt Mustern — bis ein Ausreisser kommt, den kein Muster kannte.
Genau diese Spannung misst du jetzt. Die Vermutung: Wenn die Stimmung der Menge kippt, müsste sich das in den Märkten zeigen — Angst drückt Kurse, Zuversicht hebt sie. Du prüfst das nicht am Bauchgefühl, sondern an acht Jahren Daten. Und du wirst sehen: Ein Fünkchen Zusammenhang ist da — aber wer daraus sicheres Geld machen will, trifft den Maulesel.
Bevor du startest — die Daten
Aus demselben Kaggle-Datensatz (aaron7sun/stocknews) brauchst du jetzt zusätzlich
DJIA_table.csv — die täglichen Kurse des Dow-Jones-Index (Spalten Date,
Open, High, Low, Close …). RedditNews.csv
liefert wie in 14.1 die Schlagzeilen.
Ein bisschen Hintergrund
Warum „gestern gegen heute“? Eine Vorhersage ist nur dann eine, wenn die Ursache vor der Wirkung liegt. Darum stellen wir die Stimmung von gestern der Rendite von heute gegenüber. Fänden wir dort einen Zusammenhang, hiesse das: Die Stimmung läuft dem Kurs voraus — man könnte sie zum Vorhersagen nutzen. Vergleicht man dagegen denselben Tag mit sich selbst, misst man nur, dass schlechte Nachrichten und fallende Kurse zusammen auftreten — das ist keine Vorhersage.
Was ein ehrliches Ergebnis ist. Erwarte keine Wunder. Käme ein Modell auf 90 Prozent, wäre das ein Alarmzeichen für einen Fehler (meist ein Datenleck). Ein paar Punkte über der Zufallslinie sind das realistische, ehrliche Ergebnis — und schon das ist bemerkenswert, wenn man bedenkt, dass es allein aus dem Ton von Schlagzeilen kommt.
Stimmung und Börse verbinden
Erst die Stimmung wie in 14.1, dann die Rendite der Börse, dann beides über das Datum zusammenführen. Der vollständige Code liegt auf GitHub.
import pandas as pd
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
# 1) taegliche Stimmung (wie in 14.1)
nachrichten = pd.read_csv("RedditNews.csv")
vader = SentimentIntensityAnalyzer()
nachrichten["stimmung"] = nachrichten["News"].astype(str).apply(
lambda t: vader.polarity_scores(t)["compound"])
stimmung = nachrichten.groupby("Date")["stimmung"].mean().rename("mood")
stimmung.index = pd.to_datetime(stimmung.index)
# 2) die Boerse: taegliche Rendite des Dow Jones
boerse = pd.read_csv("DJIA_table.csv", parse_dates=["Date"]).sort_values("Date")
boerse["rendite"] = boerse["Close"].pct_change()
# 3) beides ueber das Datum verbinden; Stimmung um einen Tag versetzen
tab = boerse.merge(stimmung.reset_index(), on="Date")
tab["mood_gestern"] = tab["mood"].shift(1) # die Stimmung von GESTERN
tab = tab.dropna(subset=["mood_gestern", "rendite"])
print(len(tab), "gemeinsame Boersentage")
Sagt die Stimmung die Börse voraus?
Zwei Prüfungen: ein einfacher Zusammenhang und ein kleines Vorhersage-Modell — beide ehrlich gegen die Zufallslinie gemessen.
import numpy as np
from scipy.stats import pearsonr
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
# a) Zusammenhang: Stimmung(gestern) vs. Rendite(heute)
r, p = pearsonr(tab["mood_gestern"], tab["rendite"])
print(f"Korrelation Stimmung(gestern) -> Rendite(heute): r = {r:.3f}, p = {p:.2f}")
# b) Vorhersage: 'rauf oder runter' allein aus der Stimmung von gestern
X = tab[["mood_gestern"]].values
y = (tab["rendite"] > 0).astype(int) # 1 = Boerse steigt
treffer = cross_val_score(RandomForestClassifier(200, random_state=0), X, y, cv=5).mean()
zufall = max(np.bincount(y)) / len(y)
print(f"Treffer 'rauf/runter': {treffer:.2f} (Zufallslinie: {zufall:.2f})")
Was du sehen solltest
Die Korrelation ist winzig und meist kaum signifikant; das Modell landet nahe der Zufallslinie, vielleicht ein paar Punkte darüber. Das ist kein Misserfolg — es ist die ehrliche Antwort: Aus dem blossen Ton der Nachrichten lässt sich der Markt bestenfalls ein Stück weit ahnen, nicht sicher vorhersagen. Wer hier eine Geldmaschine erwartet hat, hat gerade den Maulesel getroffen.
Arbeitsblatt
Die Grenzen der Vorhersage
- Wie gross ist deine Korrelation, wie hoch dein Treffer gegen die Zufallslinie? Würdest du damit dein Erspartes anlegen?
- Warum vergleichen wir die Stimmung von gestern mit der Rendite von heute — und nicht beide vom selben Tag? Was wäre der Denkfehler beim selben Tag?
- Angenommen, ein Modell käme auf 95 Prozent. Warum wärst du misstrauisch statt begeistert?
- Was ist in dieser Aufgabe der „Maulesel“? Nenne ein reales Ereignis, das keine Stimmungskurve hätte vorhersehen können.
- Stell dir vor, die Vorhersage würde deutlich besser. Wer könnte damit Gutes tun — und wer Schaden anrichten? Nenne je ein Beispiel.
Lösung anzeigen
1. Individuell — typisch eine sehr kleine Korrelation und ein Treffer nahe der Zufallslinie. Ehrliche Antwort: Nein, für eine Geldanlage ist das viel zu unsicher; die Streuung ist riesig gegen den winzigen Vorteil.
2. Eine Vorhersage verlangt, dass die Ursache vor der Wirkung liegt. Beim selben Tag misst du nur, dass schlechte Nachrichten und fallende Kurse gleichzeitig auftreten — das ist rückwärts gedacht und taugt nicht zum Vorhersagen; man wüsste das Ergebnis ja schon.
3. Weil 95 Prozent bei so einem verrauschten Problem fast sicher auf einen Fehler hindeuten — meist ein „Datenleck“, bei dem versehentlich Information über die Zukunft in die Merkmale gerät. Zu gute Ergebnisse sind ein Warnsignal, kein Triumph.
4. Der Maulesel ist das Unvorhersehbare: ein Attentat, ein überraschender Zentralbank- Entscheid, eine Naturkatastrophe, ein einzelner Tweet einer mächtigen Person. Kein Stimmungsmittel über Millionen kann einen solchen Einzelschlag vorwegnehmen.
5. Gutes: Frühwarnung vor Panik, Krisenhilfe, das Erkennen kollektiver Not. Schaden: Manipulation von Wahlen oder Märkten, Überwachung, das gezielte Schüren von Stimmungen. Dieselbe Macht, zwei Richtungen — deshalb gehört Mündigkeit dazu.
Wenn's klemmt
| Problem | Wahrscheinliche Ursache & Lösung |
|---|---|
merge ergibt 0 Zeilen | Datumsformate passen nicht. Beide Seiten mit pd.to_datetime auf echtes Datum bringen, bevor du zusammenführst. |
| Sehr hohe Treffer (> 0,9) | Fast sicher ein Datenleck — z. B. die heutige Rendite (oder Close) steckt versehentlich in X. Nur mood_gestern als Merkmal verwenden. |
| Treffer schwankt stark je Lauf | Wenig Signal, viel Rauschen. cross_val_score über mehrere Faltungen mitteln und die Zufallslinie danebenstellen. |
Korrelation nan | Fehlende Werte durch das Versetzen. Mit dropna die erste Zeile (ohne „gestern“) entfernen. |
| Andere Spaltennamen | Manche Versionen nennen die Kursspalte anders. Mit boerse.columns prüfen und Close anpassen. |
Zum Nachdenken
- Die Psychohistorik ist echt — aber bescheiden. Die Menge folgt Mustern, doch der Maulesel, das Unvorhergesehene, bleibt. Ein ehrliches „ein bisschen vorhersagbar“ ist wertvoller als ein grossspuriges „vorhersagbar“.
- Bevor wir zur hellsten Anwendung dieser Macht kommen — dem Verstehen, wie Gruppen gemeinsam Neues schaffen —, steht die Warnung: Dieselben Werkzeuge, die Stimmungen messen, können Stimmungen auch lenken. Wer die Menge lesen kann, steht in der Versuchung, sie zu steuern.
- Genau deshalb ist Mündigkeit kein Beiwerk, sondern der Kern: Ein Werkzeug, das die Menge vorhersagt, ist so gut oder so gefährlich wie die Hand, die es führt.
Erweiterung
- Mehr Vorlauf. Probiere die Stimmung von vorgestern oder ein 3-Tage-Mittel als Merkmal. Wird die Vorhersage besser — oder bleibt der Maulesel?
- Die fertige Kennung nutzen. Der Datensatz enthält in
Combined_News_DJIA.csvbereits ein Label (1 = Börse steigt). Vergleiche dein Ergebnis mit einem Modell, das direkt darauf trainiert. - Ein anderes Ereignis. Statt der Börse: Lege die Stimmungskurve gegen die Daten einer Wahl oder einer Krise. Sieht man dort einen klareren Vorlauf als bei den Kursen?