Serie | Data Science (ML & AI) – Entwicklung eines neuronalen Netzes zur Prädiktion von Airbnb-Preisen

Nachdem im letzten Teil die Architektur und Funktionsweise von neuronalen Netzen beschrieben wurde, geht es nun um die praktische Anwendung. Dazu wird ein neuronales Netz entwickelt, welches die Preise von Airbnb-Unterkünften prädiktiert.

 

Beschreibung des Datensatzes

Der Datensatz zum Training des neuronalen Netzes ist auf kaggle verfügbar und enthält Daten zu Airbnb-Unterkünften aus verschiedenen europäischen Städten. Zu jedem Objekt gibt es neben der Angabe des Preises auch Attribute zum Zimmer und zur Lage sowie mehrere Ratings. Insgesamt besteht der Datensatz aus 51.707 Einträgen mit Airbnbs aus Amsterdam, Athen, Barcelona, Berlin, Budapest, Lissabon, London, Paris, Rom und Wien.

 

Erstellung des neuronalen Netzes

Zum Training des neuronalen Netzes benötigen wir zwei Python-Methoden. In der ersten Methode build_ann wird die Architektur des neuronalen Netzes definiert. Dabei nutzen wir ein Sequential-Modell mit zwei bis fünf Hidden Layers, welche jeweils zwischen 8 und 300 Neuronen enthalten. Die Anzahl der Hidden Layer und deren Neuronen sind Hyperparameter des Modells, die während des Trainingsprozesses ausgewählt werden. Zur Optimierung der Anzahl an Hidden Layers wird das Modell beispielsweise einmal mit zwei, drei, vier und fünf Hidden Layers gebaut und auf dem Validierungssatz evaluiert. Bei der Bestimmung der Anzahl an Neuronen pro Hidden Layer werden alle Zahlen zwischen 8 und 300 in 32er-Schritten ausgewertet. Anschließend folgt die Output Layer, welche die Prädiktion des Preises für eine Airbnb-Unterkunft ausgibt. Ein weiterer Hyperparameter ist die Lernrate, die hier die Werte 0,01, 0,001 oder 0,0001 annehmen kann. Als Kostenfunktion zur Ermittlung des Fehlers wird der Mean Absolute Error verwendet, welcher die durchschnittliche Abweichung des prädiktierten Preises vom tatsächlichen Preis berechnet. Als Aktivierungsfunktion dient sowohl für die Hidden Layers als auch für die Output Layer die Rectified Linear Activiation (ReLu).

Neuronale-Netze-Python-Methodel-build_ann

 

Die zweite Methode build_neural_network ruft die Methode build_ann auf, um das neuronale Netz zu erstellen. Zur Optimierung der Hyperparameter wird dabei das KerasTuner Framework verwendet, indem ein Hyperband als Suchalgorithmus festgelegt wird. Dann wird das neuronale Netz mit den unterschiedlichen Kombinationen von Hyperparameterwerten auf dem Trainingssatz trainiert und auf dem Validierungssatz ausgewertet, wobei dieser 20% der Einträge enthält. Außerdem wurde ein Callback zum Early Stopping hinzugefügt, um ein Overfitting des neuronalen Netzes zu vermeiden.

Anschließend kann die Kombination an Hyperparameterwerten, welche zur Minimierung des Mean Absolute Errors auf dem Validierungssatz geführt hat, zur Bildung des neuronalen Netzes genutzt werden. Dieses Modell wird dann nochmal auf dem gesamten Trainingssatz mit einer Batchgröße von 64 Zeilen und maximal 100 Epochen trainiert, wobei das Early Stopping den Trainingsprozess frühzeitig abbricht, wenn sich der Mean Absolute Error auf dem Validierungssatz zehn Epochen in Folge nicht reduziert.

Neuronale-Netze-Python-Methodel-build_neural-network

 

Zur Evaluation des Modells werden die Vorhersagen vom neuronalen Netz auf dem Testsatz ermittelt und verschiedenen Metriken zum Vergleich der Prädiktionen mit den tatsächlichen Werten ausgegeben.

 

Auswertung des Modells

Nach dem Durchlauf der build_neural_network Funktion erhalten wir das trainierte neuronale Netz, die optimierten Hyperparameterwerte sowie die Evaluationsmetriken des Modells auf dem Testsatz. Die Hyperparameter wurden dabei so gewählt, dass das neuronale Netz aus drei Hidden Layers mit 296, 200 und 8 Neuronen besteht und eine Lernrate von 0,001 nutzt. Bei den Evaluationsmetriken kommt das neuronale Netz somit auf folgende Werte:

Metrik Wert
Mean Absolute Percentage Error 22,8%
Mean Absolute Error 72,46€
Mean Squared Error 60.961€
R2 Score 0,33
Durchschnitt der tatsächlichen Preise 279,59€
Durchschnitt der prädiktierten Preise 253,76€

 

Zur visuellen Auswertung des Modells vergleicht die folgende Grafik für jede Airbnb-Unterkunft den tatsächlichen Preis mit dem vom neuronalen Netz vorhergesagten Preis. Jeder grüne Punkt beschreibt dabei eine Airbnb-Unterkunft aus dem Testsatz, wobei die Platzierung auf der x-Achse den tatsächlichen Preis und die Platzierung auf der y-Achse den prädiktierten Wert abbildet. Bei einem perfekten Modell würden alle Punkte auf der durch die schwarze Linie dargestellten Winkelhalbierenden liegen, sodass für jede Unterkünfte aus dem Testsatz genau der reale Preis vorhergesagt würde.

Neuronale-Netze-Prädiktierter-tatsächlicher-Preis

 

Fazit

Python bietet mit Keras ein vielfältig einsetzbares Framework zur Entwicklung von neuronalen Netzen. So konnten wir die theoretischen Inhalte des letzten Impuls bezüglich des Aufbaus neuronaler Netze, der Hyperparameteroptimierung mit Early Stopping sowie die Wahl einer passenden Kostenfunktion und Aktivierungsfunktion in die Praxis umsetzen. Dabei haben wir mit wenigen Zeilen Code ein Modell entwickelt, welches den Preis von Airbnb-Unterkünften prädiktiert.

 

Übersicht der Data Science (ML & AI) Serie:

 

Haben wir Ihr Interesse geweckt? Kontaktieren Sie uns!

Ihr Ansprechpartner

Datalytics Mitarbeiter Portrait Jan Schneider

Jan Schneider

jan.schneider@datalytics-consulting.com
+49 178 3984086