Python: Ein neuer Weg hin zur KI

Als mir vor Jahren ein Freund von seiner Arbeit erzählte, nannte er den Namen Python[1] als Programmiersprache. Teil seiner wissenschaftlichen Arbeit war es, mechanische Modelle mit ABAQUS zu bilden. Und zur Automation wiederkehrender Aufgaben konnte er dessen Python API nutzen. Zu dem Zeitpunkt war ich wohl noch zu sehr mit anderen Sprachen abgelenkt um viel mehr als einen kurzen Blick auf die mir bis dahin unbekannte Sprache zu werfen.

Das sollte sich aber mit dem 9. November 2015 ändern. Der Tag, an dem Google sein Framework zur datenstromorientierten Programmierung veröffentlichte, brachte auch mich dazu, meine Position bezüglich Python neu zu überdenken. Gerade mit paralleler Datenverarbeitung und der Mehrzieloptimierung durch genetische Algorithmen befasst, - Themen, für die Erlang/OTP[2] wirklich ausgezeichnet effektiv zu nutzen ist, musste ich einsehen, dass die statistische und graphische Aufbereitung der erzeugten Ergebnisse weiteren Aufwand nach sich ziehen würde, für dessen Bewältigung ich Erlang/OTP eher nicht so gut geeignet sah.

Als sich eine neue Vision ergab. Von nun an sollte per Tensorflow die Maschine automatisch das verteilte Rechnen inclusive Nutzung von Grafikbeschleunigern übernehmen und mit Python kann ich dann tiefer in den Bereich der Analyse und Auswertung vordringen. Es wirkte wie Weihnachten und Neujahr zugleich.


Auf der Suche nach nutzbaren Entwicklungswerkzeugen für Python, stieß ich schnell auf die Anaconda Distribution und machte erste Gehversuche mit Spyder. Für mich interessanter wurde jedoch schnell PyDev, dass sich in Eclipse integriert und womit ich bis heute sehr zufrieden bin. Einem eher minimalistischen Ansatz folgend, habe ich Anaconda daher rückblickend nur als umfassende Inspirationsquelle gesehen und nutze stattdessen auch auf Entwicklungssystemen lieber die Installationspakete von python.org. Was zusätzlich benötigt wird, findet selektiv den Weg per PIP aufs System. Wie zum Beispiel Jupyter - Notebooks, die ihre Stärken ausspielen, wenn Code und Ergebnisse zusammen entwickelt und dargestellt werden sollen. Und sollten Anwendungsfälle einmal für verschiedene Python Umgebungen sprechen, habe ich bisher virtuelle Maschinen der venv vorgezogen.

Das praktische Thema, an dem sich die neue Technik bald messen musste, hieß Portfoliooptimierung. So fiel meine Wahl schnell auf Ives Hilpisch´s (Python for Finance) – damals noch in der ersten Ausgabe - um dem Thema schneller näher zu kommen. Und die Begeisterung hält noch immer an. Nicht nur die Analyse und Auswertung der Ergebnisse ist damit vergleichsweise im Handumdrehen erledigt, selbst die Modellierung und das Optimieren der 2-Ziele Funktion (Risiko & Rendite) lässt sich Schritt für Schritt mit Bordmitteln schnell und effizient bewerkstelligen. Ganz zu schweigen von der komfortablen Anbindung an Datenquellen wie Yahoo für die Abfrage von Börsenkursen. Wie gesagt, ich war schwer beeindruckt und in kürzester Zeit weiter als zuvor mit anderen Werkzeugen. Wobei aber fairer Weise zu erwähnen ist, dass ich da keine portfolio-spezifische Lektüre hatte, die sich 1:1 umsetzen ließ.


Da ich nun nicht gleich die Mehrzieloptimierung mit genetischen Algorithmen, meine Vorliebe zu der Zeit, mit Python umsetzte, sondern zunächst den Weg der Monte-Carlo-Simulation einschlug, ließ meine Überraschung nicht lange auf sich warten als ich erste Ergebnisse sah. Wie man anhand der 2 nachfolgenden Grafiken, die damals entstanden, recht gut sehen kann, ist das Finden der optimalen Portfoliozusammenstellung hier eher unwahrscheinlich, wenn man mehr als 5 Instrumente zur Auswahl hat. Was bei 5 - noch zu einer deutlichen Abbildung der Pareto-Front (Zwischen den Sternchen markiert) führt, unterscheidet sich schon bei 30 Instrumenten wie im DAX ganz erheblich.


Aber zurück zu Tensorflow und Python. Nachdem ich also mit Python sehr zufrieden war, wollte ich nun das Thema künstliche neuronale Netze erneut aufgreifen. Denn ca. 10 Jahre zuvor verliefen meine Experimente mit FANN bzgl. der naiven Prognose von Börsenkursen weniger als zufriedenstellend. Das lag zwar eher an der Zielstellung als an der Bibliothek, doch hatte es meine Erwartungen an künstliche neuronale Netze zwischenzeitlich deutlich geerdet. Es bestand also keine Eile, entsprechend der Vision künstliche neuronale Netze mit Tensorflow abzubilden.

Vielmehr folgte ich der Beschreibung Tariq Rashid’s in „Neuronale Netze selbst programmieren“, implementierte mehrlagige Perzeptren und trainierte sie auf handgeschriebene Zahlen mit dem Standard MNIST-Trainingsdatensatz. Tensorflow nutze ich bis heute gar nicht direkt, sondern nur als Backend von Keras mit dem ich aktuell meine Machine-Learning-Modelle erzeuge und wobei mich „Zero to Deep Learning™ with Python and Keras“ von Udemy sehr unterstützt hat.

Auch habe ich inspiriert durch Peter Norvig’s PYTUDES insbesondere TSP erfolgreich das kombinatorische Problem des Handelsreisenden (TSP) auf unterschiedlichen Wegen und mit erstaunlichen Ergebnissen via Python angehen können. Aber zu den Details an anderer Stelle mehr.

Soweit also zu meinem Weg mit Python von der Ignoranz zur bevorzugten Sprache für Maschinen Intelligenz.

Referenzen

[1] https://de.wikipedia.org/wiki/Python_(Programmiersprache)
    https://www.python.org/

[2] https://de.wikipedia.org/wiki/Erlang_(Programmiersprache)
    http://www.erlang.org/