Viele Finanzwirtschaftler argumentieren, dass der Aktienmarkt zufällig sei, daer von zufälligen Ereignissen regiert wird, was wiederum in der Effizienzmarkthypothese und der Random-Walk-Theorie verankert ist. Aber ist es wirklich so?

Wissenschaftler haben dies auf die Probe gestellt und versucht den Aktienmarkt mittels sozialen Medien und speziell Twitter vorherzusagen und zu zeigen, dass es tatsächlich möglich ist, ein Gefühl dafür zu entwickeln, wohin sich der Markt bewegen wird. Eines der wegweisenden Forschungspapiere zu diesem Thema stammt von Bollen et. al.,[1] In diesem Beitrag werde ich versuchen, in einfachen Worten zu erklären, wie in dieser und weiteren Analysen vorgegangen wurde und ob es nun wirklich möglich ist, mit Hilfe von Machine Learning und Twitter den Aktienmarkt vorherzusagen.

Bollen benutzte Twitter bzw. Tweets („auf Twitter versendeten Nachrichten“) und bewies, dass es eine Korrelation zwischen den Stimmungen der Öffentlichkeit, die auf Twitter ausgedrückt werden und dem Aktienmarkt gibt. Weitere Forschungspapiere wie etwa die von Chen und Lauer [2], Xiao und Chen [3] oder Nisar und Yeaung [4] gingen noch weiter und haben auf Basis der durch die Tweets ausgedrückten Stimmungen teilweise sogar Handelssysteme entworfen und getestet, wie diese im Vergleich zu einer Benchmark performen.

Twitter-Stimmungsanalyse

Können Maschinen Emotionen verstehen und interpretieren? Nein, können sie nicht. Zumindest nicht bis heute. Mit Nein meine ich allerdings kein „perfektes Nein“ (sondern ein eher sehr unvollkommenes), denn Maschinen können mittlerweile eine große Bandbreite an Emotionen verstehen (wenn auch nicht perfekt und zuverlässig). Mittels Machine Learning ist es möglich, eine Stimmung zu messen, welche in einem bestimmten Text ausgedrückt wird.

Um das Thema Text Mining möglichst greifbar zu machen, werde ich es mit Hilfe eines einfachen Beispiels erläutern. Dazu habe ich mir Tweets von Donald Trump heruntergeladen und möchte Schritt für Schritt zeigen, wie genau man diese Tweets aufbereiten kann, um sie dann gewissen Emotionen zuzuordnen. Den dazugehörigen Code habe ich jeweils in die Abschnitte eingefügt, so dass jeder der will, diesen ganz einfach replizieren kann.

  • Einlesen der Daten

Mittels der API von Twitter, kann sich jeder Nutzer Tweets zu einem gewissen Themenbereich herunterladen. Da aber sicherlich nicht jeder einen Account besitzt, kann man einfach auf bereits heruntergeladene Datensätze, welche im Internet frei zur Verfügung stehen, zurückgreifen. Den von mir bearbeiteten Datensatz gibt es frei auf Kaggle und besteht aus über 7000 Tweets.

library(tidytext)
library(dplyr)
library(wordcloud)
library(tidyr)
library(ggplot2)
library(readr)
#Tweets einlesen
df = readr::read_csv('Donald-Tweets.csv')
  • Auftrennen der Tweets in einzelne Wörter

Als wirklich ersten Schritt werden die Tweets, welche logischerweise immer aus einem Satz bestehen, in einzelne Wörter aufgetrennt, um zu sehen, welche Wörter Mr. Trump am meisten verwendet. Mit Hilfe von R und dem Package tidytext lässt sich dies in nur ein paar Zeilen Code bewältigen:

#Tweets auftrennen
df_tidy = df %>%
  tidytext::unnest_tokens(word, Tweet_Text)
#Erstellen einer Wordcloud
df_tidy %>%
  count(word) %>%
  with(wordcloud(word, n, max.words = 100,
                 colors = RColorBrewer::brewer.pal(8,"Dark2")))

Um das Ergebnis letztendlich zu visualisieren, bietet sich eine Wordcloud an. Hier werden öfter verwendete Wörter ganz einfach größer dargestellt als Wörter, die sehr selten verwendet wurden.

Nachteil daran ist jedoch, dass man nicht sieht wie oft die Wörter in Summe nun wirklich verwendet wurden. Hier bietet sich ein einfaches und zugleich übersichtliches Balkendiagramm an.

#Zählen und Darstellen der meistgenannten Wörter
df_tidy %>%
  count(word, sort = T) %>%
  filter(n > 500) %>%
  mutate(word = reorder(word,n)) %>%
  ggplot(aes(word,n)) +
  geom_col() +
  xlab(NULL) +
  coord_flip()

Eines sollte direkt auffallen, und zwar, dass viele Wörter, die sehr oft verwendet wurden, in der Kategorie der Stopwords fallen. Beispielsweise ist das meistverwendete Word „the“, allerdings wird dieses Wort so gut wie keine Bedeutung in der späteren Analyse haben, da es keinerlei Emotionen ausdrückt. Es werden also Wörter gesucht, die einerseits oft verwendet werden, da sie so eine gewisse Signifikanz haben und andererseits auch wirklich eine große Bedeutung.

  • „Reinigen“ des Datensatzes

In einem nächsten Schritt wird der Datensatz also „gereinigt“ bzw. alle Wörter ohne Bedeutung wie bspw. the, of, to usw. entfernt. Dazu gibt es bereits Wörterbücher, die solche Wörter enthalten, was das Ganze natürlich um einiges leichter macht.

#Remove all the stop words
data("stop_words")
df_tidy <- df_tidy %>%
  anti_join(stop_words, by = "word")
#Zählen der meistgenannten Wörter
df_tidy %>%
  count(word, sort = T) %>%
  filter(n > 500) %>%
  mutate(word = reorder(word,n)) %>%
  ggplot(aes(word,n)) +
  geom_col() +
  xlab(NULL) +
  coord_flip()

Wunderbar.

Jedoch sollten einzelne Wörter wie etwa https zusätzlich noch entfernt werden, da diese wahrscheinlich durch gepostete Links zustandekommen. Es ist also sehr wichtig, den Datensatz genaustens zu untersuchen, um eine möglichst hochwertige Datenbasis für die folgende Analyse zu haben.

  •  Emotionen zuordnen

In den oben angesprochenen Forschungspapieren wurde mit Emotionen gearbeitet. Sollte also bspw. eine hohe Anzahl an Angst durch Tweets empfangen werden, dann könnte man theoretisch annehmen, dass die Kurse sinken. Bei euphorischer Stimmung mag wahrscheinlich genau das Gegenteil der Fall sein.

Für diesen Schritt gibt es ebenfalls vorgefertigte Lexika, welche den einzelnen Wörtern verschiedene Emotionen wie Angst oder Freude zuordnen. Natürlich ist es möglich auch ein individuelles Lexikon an Emotionen zu erstellen, jedoch wollen wir uns an dieser Stelle das Leben einfach machen.

#Emotionen definieren
nrc_emotions = get_sentiments("nrc") %>%
  filter(sentiment != "negative" & sentiment != "positive")
#Emotionen den einzelnen Wörtern zuordnen und darstellen
df_tidy %>%
  inner_join(nrc_emotions, by = "word") %>%
  group_by(sentiment) %>%
  summarize(count = n()) %>%
  ggplot(aes(x = reorder(sentiment, count), y = count)) +
  geom_col() +
  coord_flip() +
  labs(x = "Emotionen", y = "Anzahl Wörter") +
  theme_minimal(base_size = 18) + 
  ggtitle("Übersicht über enthaltenen Emotionen")

Wir sehen also, dass Trump generell sehr viel über Emotionen wie Vertrauen (Trust), Erwartung (Anticipation) oder Überraschung (Surprise) twittert. Auf Basis eines solchen Datensatzes könnten wir nun ein Modell erstellen, welches eine Verbindung zischen den Emotionen und dem Aktienmarkt herstellt. Die genauen Ergebnisse der Forschungspapiere werden wir natürlich nicht replizieren, diese werde ich im folgenden Abschnitt lediglich diskutieren.

Kann man den Markt mit Twitter outperformen?

Wie wir soeben selbst gesehen haben, ist es mittels Algorithmen möglich, die Stimmung, die in einem bestimmten Text ausgedrückt wird, zu messen. Aber das große Problem dabei ist, dass die Genauigkeit viel zu wünschen übriglässt. Nichtdestotrotz ist es mit einigen Abschlägen möglich, das Sentiment hinter den Tweets zu messen und auf die gewünschte Weise zu interpretieren. Dies ist die Idee hinter den Werkzeugen, die Bollen und die anderen Autoren verwendet haben, um die Stimmung aus Tweets zu erhalten. Ein Teilergebnis einer dieser Analysen ist wie folgt:

Quelle: Bollen et al. (2011)

Es existieren zwei wichtige Ereignisse auf der Grafik: Das eine ist die Präsidentschaftswahl 2008 und das andere ist Thanksgiving. Bollen scheint diesen Zeitraum aus diesem ganz besonderen Grund gewählt zu haben, weil die Stimmung der Menschen zu diesen Zeitpunkten interpretierbar ist, so dass dies genutzt werden kann um zu zeigen, dass das Modell tatsächlich in der Lage ist die Stimmung der Leute zu messen.

Somit haben wir hier eine Möglichkeit kennengelernt, ein Modell für die Vorhersage zu trainieren. Selbstverständlich sind hier noch einige andere Schritte nötig, jedoch ist das grundlegende Verständnis des Vorgehens hoffentlich etwas klarer geworden.

Generell kann die zu Beginn dieses Abschnitts gestellte Frage meiner Meinung nach mit einem Jein beantwortet werden. Es gibt eine riesige Menge an Research in diesem Gebiet und viele Ergebnisse sind sehr vielversprechend bzw. haben mittels verschiedener Machine Learning Methoden die jeweilige Benchmark outperformt, jedoch kann abschließend kein klares Ja gefällt werden.

Sollte jemand eine äußerst profitable Strategie besitzen, die sich an Twitter oder sonstigen sozialen Medien bedient und damit gewisse Prognosen abgibt, die dazu noch profitabel genug sind um Geld damit zu verdienen, dann werden wir den verwendeten Algorithmus wohl niemals zu Gesicht bekommen. Die Forschung hat hier dennoch einiges geleistet und aufgezeigt, dass Machine Lerning definitiv dazu genutzt werden kann, die sozialen Medien für Finanzanalysen auszuwerten.

Mit freundlichen Grüßen und weiterhin ein schwankungsfreies Portfolio,

Dein Felix von Portfolio-Architekt

Quellen:

[1] Bollen et al. : Twitter mood predicts the stock market

[2] Chen und Lauer: Sentiment Analysis of Twitter Feeds for the
Prediction of Stock Market Movement

[3] Xiao und Chen: Trading the Twitter Sentiment with Reinforcement Learning

[4] Nisar und Yeaung: Twitter as a tool for forecasting stock market movements: A short-window event study

0 Kommentare

Dein Kommentar

An Diskussion beteiligen?
Hinterlasse uns Deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.