Kaggle – Data Science als Wettkampf

Was braucht man um ein guter Data Scientist zu werden? Im Grunde das Gleiche wie bei allem Anderen: Lehrer und Übung! Die Webseite Kaggle bietet einem Beides – und fordert dazu noch euren kompetitiven Spieltrieb.

Lehrer

Ganz im Sinne von Web 2.0 wird der Lehrer ersetzt durch ein soziales Netzwerk, d.h. die anderen Nutzer der Webseite stellen ihre Lösungen eines Datenproblems zur Verfügung über die man diskutieren und sich austauschen kann. Als Neuling kann man sich sehr einfach Skripte (genannt Kernels, meist in Python oder R) ansehen, sie nachvollziehen und lokal anpassen. Braucht man Feedback zu seinen eigenen Lösungen stellt man sie einfach Online und hofft auf Kommentare.

Übung

Um üben zu können braucht man als Data Scientist vor Allem eines: Daten! Kaggle bietet einen reichhaltigen Schatz an Datensätzen die man herunterladen und analysieren kann. Die Auswahl reicht dabei von einer European Soccer Database über Emergency – 911 Calls bis hin zu Dota 2 Matches es ist also für jeden etwas dabei. Mit diesen Datensätzen kann man sich nun auf alle Aufgaben stürzen, die auf einen Datenwissenschaftler zukommen können. Von der Datenbereinigung über die beste grafische Darstellung bis hin zu lernenden Algorithmen, die Vorhersagen für neue Daten treffen ist alles möglich. Es gibt wohl kaum eine bessere Möglichkeit, seine Fähigkeiten mit nötigen Technologien und Prozessen zu verbessern.

Wettkampf

Hat man nur einen beliebigen Datensatz, muss man sich natürlich selbst die Frage stellen, welches Ziel man erreichen möchte. Da es als Anfänger oft schwer ist, sich reale Problemstellungen auszudenken bietet Kaggle als eines seiner zentralen Features Wettkämpfe (competitions) an, in denen sich die Nutzer messen können. Die Aufgaben kommen dabei aus der realen Welt und werden von echten Firmen gestellt. Einige sind sogar mit einem – teils beachtlichen – Preisgeld versehen. Die Santander Product Recommondation zum Beispiel bietet ein Preisgeld von 60.000 $ für die drei Teams (Ja man kann bei Kaggle im Team arbeiten), welche die besten Algorithmen präsentieren, die anhand vorgegebener Daten vorhersagen, welche Produkte Santander seinen Kunden als nächstes vorschlagen sollen. Dabei können beliebig oft Scripte hochgeladen werden, die automatisch ausgeführt werden um einen Score zu erhalten, der dann in einem Leaderboard gelistet wird. Steht man am Ende ganz oben, erhält man Geld, Kaggle-Punkte und Medaillen, die auf seinem Profil zu sehen sind. Das lässt sich natürlich verlinken, z.B. bei LinkedIn/Xing oder in einem Lebenslauf.

Bringt das was?

Kaggle ist mit Sicherheit eine gute Möglichkeit um sich mit allem rund um Data Science zu befassen. Die Datensätze sind umfangreich und mit den Kernels anderer Nutzer lässt sich hervorragend üben. Noch dazu bekommt man einfach Feedback zu eigenen Lösungen und kann sie so noch verbessern. Sich durch Wettkämpfe einen Ruf aufzubauen, mit dem man dann Eigenwerbung machen kann ist sicher auch sehr nützlich auch wenn darin eine Menge Arbeit stecken muss. Bei über 600.000 Kaggle-Nutzern ist es sicher nicht einfach weit oben auf den Leaderboards zu stehen – insbesondere bei Aufgaben mit Preisgeldern. Und eine Job-Garantie ist es sicher auch nicht. Man darf dabei nicht vergessen, dass es einen großen Unterschied macht, ob man ein Script für solch einen Wettkampf schreibt oder ob man eine Lösung bei einem Arbeitgeber aufbaut und integriert.

Ich werde mich in nächster Zeit ein wenig mehr mit Kaggle beschäftigen und euch wissen lassen wie es sich anfühlt, diesen Service zu nutzen. Und natürlich werde ich jedesmal damit angeben, sollte ich je eine gute Platzierung in einem Wettkampf erreichen.

Neuronales Netzwerk mit PyBrain

Neuronale Netze gelten als eine der modernsten Methoden des maschinellen Lernens, die dahinterliegende Mathematik und Logik schreckt allerdings viele davon ab, sich näher damit zu beschäftigen. Um die grundlegenden Prinzipien zu verstehen reicht allerdings schon das Lesen einiger Einführungen wie bei Wikipedia oder Videos wie dieses bei YouTube. Hat man den Grundaufbau dahinter verstanden kann man mit Hilfe moderner, einfach zu nutzender Bibliotheken schnell ein eigenes Netz entwerfen und für einfache Anwendungsfälle nutzen.
Um das zu demonstrieren habe ich für diesen Beitrag mit Hilfe der Bibliothek pybrain für die Sprache Python ein künstliches neuronales Netzwerk erstellt, dessen Ziel es ist, anhand eines eingegebenen Vornamens festzustellen, ob es sich bei dem Namen um einen weiblichen oder männlichen handelt. Den Quellcode dazu habe ich bei Github bereitgestellt, Ihr findet ihn hier: binspeak/learn-gender-from-names.

Der Code veranschaulicht die Abläufe, die bei der Nutzung neuronaler Netze im Allgemeinen immer gleich ablaufen:

1. Daten einlesen und aufbereiten

Um das Netzwerk trainieren zu können liegen im data-Ordner des Repositories zwei Dateien mit insgesamt fast 10.000 nach Geschlecht getrennten Vornamen. Das Script liest diese Daten ein und fügt zu jedem Namen einen Erwartungswert für die Ausgabe hinzu (1 für weibliche, 0 für männliche Namen).
An dieser Stelle steckt auch der oft komplizierteste Teil der Arbeit mit neuronalen Netzen. Die Erstellung eines geeigneten Models, d.h. die Definition der Eingangsvariablen für das Netz und die Transformation vorhandener Daten. Da ein Computer nicht mit Buchstaben rechnen kann, muss jede Eingabe entweder binär (0 oder 1), kategorisiert (z.B. 0,1,2,3) oder kontinuierlich (z.B. alle Zahlen zwischen 0 und 1) sein.
Außerdem muss man definieren, welche Parameter überhaupt ins Netzwerk fließen sollen. Einige der erfolglosen Varianten, die ich hier ausprobiert habe, waren:

  • Länge des Namens
  • Verhältnis von Vokalen und Konsonanten
  • Erster / Letzter Buchstabe ist ein Vokal
  • Anzahl Vokale

Da all dies keine guten Ergebnisse brachte (Im Gegensatz z.B. zu einer Regressionsanalyse mit diesen Werten, dazu aber an anderer Stelle mehr) habe ich schließlich entschieden als Eingabe die ASCII-Nummern (abzgl. 96 um bei 1 anzufangen) aller Buchstaben zu übergeben und mich auf sechs Eingangsknoten zu beschränken. Sie stehen für die drei Buchstaben am Anfang des Namens und die drei am Ende. Der Name thomas wird damit z.B. zur Eingabe  [20, 8, 15, 13, 1, 19]

2. Aufbau des Netzes

Dank pybrain ist das ein sehr einfacher Teil, es reicht eine Zeile Code

net = buildNetwork(6, 5, 1, bias=True)

Damit wird ein Netz mit sechs Neuronen im input layer, fünf im hidden layer und einem im output layer erzeugt und angegeben, das ein Bias- Neuron in jeder Ebene hinzugefügt werden soll. Die Gewichte jedes Neurons werden automatisch mit zufälligen Werten vorbelegt. PyBrain bietet hier jede Menge Einflussmöglichkeiten die auch komplexe Netze ermöglichen, dazu sei die Dokumentation empfohlen.

3. Training

Um nun das Netzwerk mit den vorhandenen Daten zu trainieren ist folgender Code zuständig:

trainer = BackpropTrainer(net, dataset)
trainer.trainUntilConvergence(maxEpochs=max_epochs)

Ein Backpropagation-Trainer wird mit den geladenen Daten und dem Netzwerk initialisiert und das Training wird gestartet, das sich auf eine feste Anzahl Iterationen beschränken lässt.

4. Netzwerk nutzen

Ist das Training abgeschlossen, kann es zur Bestimmung des Geschlechts eines Vornamens verwendet werden. Dazu muss lediglich folgender Aufruf ausgeführt werden:

net.activate(<input>)

Wobei <input> hier wieder für sechs Integer-Werte steht, die aus dem gegebenen Namen extrahiert werden. Als Ausgabe erhält man einen Wert zwischen 0 und 1, der wie folgt interpretiert werden kann: liegt der Wert über 0.5, klassifiziert das neuronale Netz den Namen als weiblich, sonst als männlich.

Will man mit dem Script einen konkreten Namen testen, kann man es entweder in einer Python Shell starten oder als Eingabe-Parameter beliebige Namen mitgeben:

python learn.gender-from-names.py markus annika george diana

Zusammenfassung

Das Script definiert einige einstellbare Parameter die unterschiedlichen Einfluss auf das Netzwerk haben. Die Ergebnisse, die auch im Output des Scriptes zu sehen sind, zeigen meistens eine Trefferquote von ca 80 % was angesichts des beschränkten Datenraumes durchaus annehmbar ist, auch wenn ein Mensch sicher noch eine deutlich höhere Trefferquote hat. Ich bin mir sicher das man mit  einer geeigneten Feinjustierung ein noch besseres Ergebnis erzielen kann aber als Demonstration ist diese einfache Variante in meinen Augen sehr gut geeignet. Für Verbesserungsvorschläge oder für den Hinweis auf Fehler bin ich sehr dankbar, nutzt also gerne die Kommentarfunktion unter diesem Beitrag.

PyBrain bietet einen wirklich einfachen Einstieg in neuronale Netze den man konsequent erweitern kann um sein eigenes Verständnis zu verbessern. Leider scheint die Entwicklung im Moment still zu stehen, weshalb ich bereits mit einigen anderen Bibliotheken wie Caffe oder Keras experimentiere. Mit denen lässt sich dann das Training sogar auf GPUs durchführen, was sicher eine enorme Leistungssteigerung mitbringt.

Ich hoffe bald davon berichten zu können!

Tipp: logstash geoip import in Elasticsearch

Gestern hatte ich ein Problem mit der Transformation von IPs zu GeoIPs mit logstash. Im einfachsten Fall genügt es normalerweise, folgenden Code in die logstash Konfiguration im Filterbereich einzufügen:

geoip {
source => "ip_feld_name"
}

Was allerdings noch wichtig ist, wenn die Daten in ElasticSearch importiert werden sollen: Der Import-Index muss dem Namensmuster „logstash-*“ entsprechen, wobei * durch beliebigen gültigen Text ersetzt werden kann. Ändert men den Namen auf ein anderes Schema, nutzt ElasticSearch bei der Typerkennung seine Standardeinstellungen, die das Feld „geoip.location“ als double anstatt als geo_point erkennen. Dadurch wird der Wert z.B. in Kibana nicht mehr nutzbar.

Kurznachricht: Was ist eigentlich Deep Learning

Wer sich schon immer gefragt hat“Was bedeutet eigentlich Deep Learning?“, „Wozu ist es gut?“ und „Wer beschäftigt sich damit?“, dem kann ich die ersten 20 Minuten des folgenden Youtube-Videos empfehlen:

Ein echter „Mind Opener“, in dem Steve Juterson, Partner von DJF Ventures, einen kurzen Überblick über die aktuelle Entwicklung gibt.

Die restlichen 60 Minuten des Videos könnt ihr euch allerdings sparen, die Panel Diskussion ist wenig aufschlussreich.

 

Deep Learning mit Nvidia

Einer der größten Hypes im Machine Learning Bereich ist im Moment sicher „Deep Learning“. Während der Begriff im Forschungsbereich schon lange ein Begriff ist hat der Erfolg von AlphaGo dazu geführt, dass sich jetzt auch die Masse (zum Beispiel ich) ansieht, was es damit auf sich hat. Als Einstieg zum Thema habe ich bei Nvidia einige sehr Interessante Informationen gefunden, die jedem Interessierten weiterhelfen sollten. Als Hersteller von GPUs hat Nvidia schon lange erkannt, das sich damit nicht nur die Spielebranche sondern zunehmend auch „seriöse“ Anwendungen im KI und Machine Learning Bereich als Markt erschließen lassen, in dem sie sich als Vorreiter positionieren wollen. Hier geht es zu einer Website mit einführenden Informationen und Beispielen:

https://developer.nvidia.com/deep-learning

Außerdem gibt es eine Reihe von Kursen für Selbstlerner, für die ich hoffentlich bald die Zeit finde:

https://developer.nvidia.com/deep-learning-courses

 

Schritt 2: Coursera Kurs – Machine Learning

Bücher sind ein guter Ansatz um sich in ein neues Thema einzuarbeiten und erste Schritte darin zu gehen. Aber sie sind auch passiv und fordern keine Ziele ein. Es fällt zu leicht, einfach ein Kapitel auszulassen oder nach der Hälfte zu denken, jetzt weiß ich alles und der Rest vom Buch ist eigentlich schon klar. Außerdem geben sie einem nicht die Möglichkeit, am Ende auch nachzuweisen, dass man sich überhaupt mit dem Thema beschäftigt hat. Deshalb habe ich nach etwas gesucht, was etwas motivierender und aussagekräftiger ist und bin dabei auf Coursera gestoßen.

Über Coursera

Coursera bietet reine Online-Kurse an, die von bekannten, meist amerikanischen Universitätsprofessoren getragen werden. Die Kurse bestehen aus Videos mit kleinen Multiple Choice Fragen, Tests und – je nach Kurs – Programmieraufgaben, die man einreichen muss und die automatisch auf Korrektheit geprüft werden. Die meisten Kurse können kostenlos belegt werden, allerdings erhält man nur gegen Bezahlung Zugang zu den Tests und bekommt am Ende ein Online-Zertifikat ausgestellt, das man z.B. für Bewerbungen nutzen kann. Das Konzept ist wirklich gut und einfach zu handhaben, das größte Problem dabei ist natürlich, dass man sehr leicht schummeln kann, wenn man das den will.

Der Machine Learning Kurs

Das habe ich natürlich nicht gemacht bei meinem ersten Kurs: Machine Learning.
Dieser Kurs wird von Andre Ng angeboten, einem sehr bekannten Namen im Data Science Bereich. Er hat bei Google gearbeitet und ist im Moment wohl bei Baidu und er ist einer der Gründer von Coursera.

Kursaufbau

Will man das Zertifikat für einen Kurs haben, kostet der Kurs 42 Dollar und ist auf 11 Wochen angelegt wobei jede Woche in etwa 4 Semesterwochenstunden an einer deutschen Universität entspricht. Jede Woche beinhaltet etwa 2 Stunden an Videomaterial, ein bis zwei Tests (Quiz) und  meistens eine Programmieraufgabe. Die Tests bestehen jeweils aus fünf Fragen, von denen man zum Bestehen 4 richtig beantworten muss. Hat man sich die Video aufmerksam angeschaut, ist das allerdings kein Problem. Man kann die Tests beliebig oft wiederholen, allerdings nur drei mal innerhalb von acht Stunden.
Die Programmieraufgaben sind für das freie Mathematiktool Octave ausgelegt, können aber auch mit Matlab erstellt werden. R wird nicht unterstützt. Jede Aufgabe ist in Blöcke aufgeteilt die maximal 100 Punkte ergeben. Auch hier reichen 80 Prozent zum bestehen. Abgegeben werden diese Aufgabe mithilfe eines Scripts, dass die erstellten Lösungen direkt zu einem Coursera-Server pusht wo sie validiert werden. Das pushen ist beliebig oft möglich und die Ergebnisse werden zeitnah auch auf der Kursseite angezeigt.

Kursmaterial

Die Videos sind qualitativ nicht immer super (z.B. Tonprobleme) aber nie so schlecht, dass es echte Probleme macht. Inhaltlich ist der Kurs auch für Neulinge leicht verständlich, es werden selbst Basisbegriffe wie Matrix und Vektor erklärt. Professor Ng gibt sich sehr viel Mühe, Algorithmen wie Regression, neuronale Netze oder SVMs anschaulich zu erklären und die Mathematik dahinter Stück für Stück aufeinander aufzubauen. Das gelingt ihm auch sehr gut, er verzichtet – zum Glück – auf komplexe Beweise für darunterliegende Annahmen, die mehr in die Gebiete Analysis oder Algebra gehören.
Die Zwischenfragen in den Videos sind teilweise nützlich haben mich aber eher gestört, weil ich die Videos vom Sofa aus geschaut habe und für die Fragen immer extra aufstehen musste. Auf meinem Tablet hatte ich außerdem technische Probleme mit den Zwischenfragen.
In den Foren gibt es einiges an Errata zu den Folien, da sich doch einige Fehler eingeschlichen haben. Ich hatte allerdings nie das Gefühl, das etwas total daneben gewesen wäre.
Ein weiteres Feature bei Videos: mit höherer Geschwindigkeit ablaufen lassen. Ich habe es noch geschafft bei 125 mitzukommen, bei 200 Prozent war es mir dann doch zu schnell.

Die Tests ware meistens einfach zu bestehen, um 100 % zu erreichen musste ich einige mehrfach machen. Aber auch das ist mit Hilfe des Videomaterials leicht zu schaffen.

Die Programmieraufgaben fand ich insgesamt zu einfach. Hier hätte ich mir gewünscht etwas mehr gefordert zu werden. Natürlich habe ich mit meinem Hintergrund als Softwareentwickler hier Vorteile, aber durch einige der Aufgaben konnte man sich doch leicht durchmogeln ohne wirklich verstanden zu haben, was der Algorithmus eigentlich macht. Zu viele Schritte wurden einem dabei abgenommen. Ich gebe allerdings auch zu, die optionalen Aufgaben, die etwas tiefer gehen, nicht gemacht zu haben.
Insgesamt habe ich mir, um 100 % zu erreichen, nur bei einer Aufgabe ein wenig die Zähne ausgebissen (Dimensionsfehler bei Matrizen 🙁 ) und immer deutlich weniger als die angegebenen 3 Stunden benötigt.

Fazit

Zusammengerechnet hat mich der Kurs 3 – 4 Arbeitstage gekostet, in denen ich am Ende alle Aufgaben zu 100 % erledigt hatte. Die 11 Wochen sind also wirklich nicht nötig um ihn abzuschließen, wenn man motiviert ist und Zeit hat. Mir hat es wirklich Spaß gemacht und ich glaube jetzt einen guten Überblick über Algorithmen im Bereich Machine Learning zu haben und die wichtigsten Probleme, auf die man achten muss, zu verstehen. Besonders toll fand ich, dass die Programmieraufgaben reale Probleme lösen (z.B. Texterkennung) und es doch erstaunlich einfach war, wirklich brauchbare Ergebnisse zu erhalten. Eines der größten Probleme, die Erfassung und Aufbereitung von Testdaten, hat der Kurs dabei natürlich ausgeklammert. Dafür gibt es andere Kurse, die sich speziell mit diesem Thema befassen.
Ich kann den Kurs nur jedem empfehlen, der sich für das Thema interessiert. Er ist sein Geld und die nötige Zeit auf jeden Fall Wert und die leichte Einbindung in das eigene LinkedIn Profil ist ein nettes Schmankerl obendrauf. Hier könnt ihr euch mein Zertifikat ansehen:

https://www.coursera.org/account/accomplishments/certificate/D8ZBSYEYDW84

Ich überlege bereits, weitere Kurse zu belegen. Die Preise – auch für die größeren Spezialisierungen – finde ich sehr fair, auch wenn die Zertifikate am Ende keinerlei akademischen Wert aufweisen. Trotzdem denke ich, dass Coursera mir eine einfache Möglichkeit gibt, mein Interesse und mein Können im Data Science Bereich öffentlich zu machen und so auch für potentielle Arbeitgeber interessanter zu werden.

Schritt 1: Buch kaufen

Data Science from Scratch: First Principles with Python

Irgendwo muss man ja anfangen und Python ist wohl die Technologie, um die sich im Data Science Bereich alles dreht. Mit R hatte ich im Studium zu tun, aber Python wirkt für reale Probleme irgendwie geeigneter.  Ich kenne schon Pakete wie Jupyter, NumPy und IPython, das sollte hilfreich sein.

Rezension folgt!

 

Los gehts

Ich habe mich also dazu entschieden, den Fachbereich zu wechseln. 15 Jahre Entwicklung im Web, im Frontend wie im Backend, als Architekt und als Entwicklungsleiter. Ich hätte da weitermachen können! Als Manager eines Teams oder gar als CTO in einem Startup. Job-Angebote gab es einige, gut bezahlt, viel Verantwortung, mit Reisen oder ohne, im In- oder Ausland.

Aber nein! Ich will lieber etwas Anderes. Etwas was meinen Kopf fordert solange er noch nicht Matsch ist. Etwas, das mich mich nicht an eine Branche, Technologie oder gar an einen Arbeitgeber bindet. Zwei Themengebiete sehe ich da (innerhalb der IT), deren Relevanz in Zukunft dafür sorgt, gute Jobmöglichkeiten und tolle Aufgaben zu haben. Security und Data Science. Ich habe mich für Zweiteres entschieden. Nicht nur weil es als „The sexiest job in the 21st century“ bezeichnet wurde. Nicht nur weil ich einen mathematischen Hintergrund habe, der es mir hoffentlich leicht macht, all das zu begreifen. Sondern vor allem, weil ich dort so unglaublich viele Möglichkeiten sehe, wirklich cooles Zeug zu machen.

Datenanalyse ist da noch das am wenigsten Interessante. Es geht auch darum, Maschinen lernen zu lassen, künstliche Intelligenzen zu kreieren und die digitale Zukunft zu gestalten. Klingt philosophisch, ist aber so.

Also los! 

GNU Octave

Octave ist eine freie Software, die sich zur numerischen Berechnung und Darstellung mathematischer Probleme eignet. Es bringt dabei ähnliche Features mit wie das kommerzielle MathLab oder die Entwicklungsumgebung R und kann als echte Alternative benutzt werden. Neben einer interaktiven Shell zur Verarbeitung von Befehlen lassen sich auch recht einfach Scripte mit Octave erstellen, die automatisch ausgeführt werden um beispielsweise regelmäßig Berechnungen auf vorhandenen Daten auszuführen oder Plots ausgeben zu lassen. Da es unter der GNU General Public License steht, für alle gängigen Betriebssysteme vorhanden ist und sich recht intuitiv bedienen lässt, ist es besonders im akademischen Bereich sehr beliebt und wird insbesondere in den Bereichen numerische Mathematik, Machine Learning und Data Science eingesetzt.

Die offizielle Seite findet ihr hier: https://www.gnu.org/software/octave/

Downloads für Windows, MacOS, Linux und BSD Systeme findet ihr hier: https://www.gnu.org/software/octave/download.html