Entwicklung eines Stadt Recommenders für Digital Nomads🔨✈️

Teil 1: Von 0 bis zu den ersten Empfehlungen

image

Zum Hintergrund

Oft fällt es mir schwer zu entscheiden, wohin ich als nächstes reisen möchte. Ich will nicht dorthin, wo ich schon war. Und Orte, die ich nicht kenne - na ja, die kenne ich eben nicht. Am besten ich vertraue einfach dem, was meine Freunde empfehlen. Aber dann denke ich oft: Kann ich dieses Problem nicht objektiver – mit Daten – lösen?

Ich brauch einfach nur viele Daten zu Städten – oder nicht? 

Meine erste Idee war: Ich sammle einfach eine Menge Daten über verschiedene Städte:

  • Daten von Numbeo und ähnlichen Webseiten;
  • Reichere die mit Topic Vectoren – mithilfe von topic modelling auf Wikipedia-Einträge und Stadtführern – an; und dann
  • Gruppiere ich ähnliche Städte mit Clustering-Algorithmen.

Die besten Empfehlungen für mich sind dann die Städte, die in dem gleichen Cluster sind wie die Städte, die mir bereits gefallen.

Doch ich hatte ein schlechtes Gefühl dabei – dieser Weg hört sich erst einmal plausibel an, wird in der Praxis aber nicht funktionieren.

Warum?

  1. Die Daten sind nicht menschlich genug. Was mich interessiert, ist, wie sich für mich eine Stadt anfühlt. Sind solche Informationen wirklich in quantitativen Städtedaten enthalten?
  2. Wenn ich reise, suche ich nicht nach Städten, die genau so sind wie die Städte, in denen ich bereits war. Ich suche nach überraschenden und guten Empfehlungen – und die werden in einer reinen Ähnlichkeitssuche wahrscheinlich nicht auftauchen.

Enttäschter Hund

Also habe ich die Idee für eine Weile beiseite gelegt.

Das fehlende Puzzleteil: NomadList

Letzten Monat beschloss ich, für ein paar Wochen nach Kapstadt zu reisen. Es fiel mit nicht leicht, ein Ziel auszuwählen. Zur Inspiration bin ich oft auf NomadList. Und dabei bemerkte ich etwas, das ich davor noch nicht gesehen hatte: Die Mitglieder auf NomadList haben öffentliche Profile. Und diese öffentlichen Profile enthalten ihre Reisegeschichten.

Reisegeschichte

Detaillierte Reiseberichte von Tausenden von digitalen Nomaden!!

Genau die Daten, die ich verwenden kann. Ich finde die Nomaden, die einen ähnlichen Geschmack haben wie ich, und schaue mir einfach an, welche Städte sie besucht haben.

Idee

Aber das alles von Hand zu machen, würde ein bisschen zu weit gehen - ich will nicht manuell die Daten von Tausenden von Nomaden durchsuchen. Also verwende ich einen kollaborativen Filteralgorithmus.

Recommenders: Kurze Zusammenfassung

reco fruits

Die 2 Grundtypen von Empfehlungsalgorithmen

Ein Recommender ist die Art von Software, die Netflix oder Spotify’s Dein Mix der Woche verwendet, um Ihnen personalisierte Empfehlungen zu geben. Es lernt aus dem, was Sie in der Vergangenheit angeklickt, geliked, gesehen oder gehört haben, und empfiehlt dann Dinge, die Ihrem Geschmack entsprechen.

Es gibt viele verschiedene Arten von Empfehlungsalgorithmen, aber die meisten von ihnen basieren auf diesen beiden Grundtypen:

  1. Algorithmen, die Daten verwenden über die Sache, für die Sie Empfehlungen haben möchten: Welche anderen Städte haben eine ähnliche Datensignatur wie die Städte, die ich mag? Das war mein erster Ansatz, doch ich befürchtete, dass dies nur offensichtliche, wenig spannende Empfehlungen generieren würde.

  2. Algorithmen basierend darauf, was andere Leute mochten: Ausgehend von den Städten, die andere Menschen mit ähnlichem Geschmack besucht haben, welche Städte würden mir gefallen?

Die erste Art wird als content based recommender (inhaltsgestützter Recommender) und die zweite als collaborative filtering (kollaborative Filterung) bezeichnet.

Die Schönheit der kollaborativen Filterung

Kollaborative Filteralgorithmen sind so elegant! Warum?

  1. Es ist ganz einfach. Der kollaborative Filteralgorithmus benötigt nur eine Eingabe: die Orte, die anderen gefallen haben. Er benötigt keinerlei Daten über die Städte selbst.
  2. Er nutzt das Wissen, das implizit in den Reisegeschichten enthalten ist. Jede Reisegeschichte ist das Ergebnis einer Reihe von Entscheidungen, die von einer Person getroffen wurden. Diese Person nutzt ihre Erfahrungen, Ratschläge von Freunden, Daten aus der Forschung und Intuition, um ihre Entscheidungen zu treffen.
  3. Deshalb kann ein kollaborativer Filteralgorithmus Empfehlungen aussprechen, die sowohl überraschend als auch genau sind. Das sind die Arten von Empfehlungen, nach denen ich suche - meine Städte, auch wenn sie vielleicht nicht auf eine offensichtliche Weise mit einem Ort vergleichbar sind, an dem ich vorher gewesen bin.

Sich die Reisegeschichten holen

crawling

Also ging ich einfach alle Seiten auf NomadList durch. Immer wenn meine Software auf eine Mitgliederseite stieß, speicherte sie deren Reiseverlauf.

Ich kann nicht garantieren, dass ich alle Mitgliederseiten habe, aber ich glaube doch, dass mir das gelungen ist. 3.640 habe ich gefunden.

size of scrape

Sieht bis jetzt gut aus!

Ein kurzer Blick auf die Daten

Es gibt 1.152 Mitglieder, die keine Reisen auf ihrer Mitgliederseite haben. Sie einzubeziehen, wird unserem Recommender nicht helfen, also habe ich sie entfernt.

Ich habe jetzt noch 2.488 Nomaden übrig, mit insgesamt 36.822 Reisen. Und es gibt 4.247 unterschiedliche Städte, die in diesen Reisen enthalten sind.

So sehen die Daten jetzt aus:

╒═══════════════╤═════════════════════════════════════════════╕

│ Benutzername      │ Städte                                      │

╞═══════════════╪═════════════════════════════════════════════╡

│ @evarehakova  │ ['Kapstad Südafrika', 'Czechia Tschechi... │

├───────────────┼─────────────────────────────────────────────┤

│ @nickdanforth │ ['Canggu, Bali Indonesie', 'Chiang Mai T... │

├───────────────┼─────────────────────────────────────────────┤

│ @kirkseton    │ ['Phuket Thailand', 'Vientiane Laos', 'M... │

├───────────────┼─────────────────────────────────────────────┤

│ @askeertmann  │ ['Miami, FL USA', 'Medellín Co... │

╘═══════════════╧═════════════════════════════════════════════╛

Jetzt können wir ein paar Empfehlungen aussprechen!

Nun lassen wir einen kollaborativen Filteralgorithmus auf die Daten los. Ich benutze LightFM - eine leistungsfähige Recommender-Bibliothek in Python.

Die Ausführung des Algorithmus und der Durchlauf eines Modells dauern ca. 10 Sekunden. Jetzt habe ich einen Recommender, der in der Lage ist, ein paar Empfehlungen abzugeben.

Versuchen wir es!

Zuerst werde ich ein paar Städte aufschreiben, die ich mag, sagen wir Berlin, Nürnberg, Barcelona und Kapstadt.

[‘Berlin Deutschland’, ‘Kapstadt Südafrika’, ‘Barcelona Spanien’, ‘Nürnberg Deutschland’]

Ich gebe diese Daten als Input an den Recommender weiter, und der errechnet dann, wie sehr mir jede der 4.247 Städte im Datensatz gefallen wird.

Wie kommt der Recommender zu den Empfehlungen?

  1. Er berechnet die Ähnlichkeit zwischen meinem Geschmack und jedem der NomadList-Mitglieder im Datensatz, ausgehend von den Städten, die wir jeweils besucht haben.
  2. Indem der Recommender mehr auf die Mitglieder mit ähnlichem Geschmack achtet als auf diejenigen mit anderem Geschmack, macht er eine Liste von Städten, die mir gefallen könnten.
  3. Er gibt jeder Stadt eine Punktzahl, die darauf beruht, wie oft diese Stadt von den Nomaden mit ähnlichem Geschmack empfohlen worden wäre.

Es ist, als hätte ich zweitausend Freunde um Rat gefragt und dann ihre Antworten gebündelt, wobei ich mehr auf die Ratschläge von Freunden achte, die meinen Geschmack teilen.

Was hat mir der Empfehlungsgeber also empfohlen? Hier sind die Top 10 Städte:

| Stadt | Punktzahl |

|: — — — — — — — — — — — — — — — — | — — — — :|

| Bangkok Thailand | 2.40237 |

| Chiang Mai Thailand | 2.39515 |

| London Großbritannien | 2.31833 |

| Paris Frankreich | 2.29879 |

| San Francisco, CA USA | 2.28893 |

| Berlin Deutschland | 2.25758 |

| Barcelona Spanien | 2.23082 |

| New York City, NY USA | 2.23009 |

| Lisbon Portugal | 2.13522 |

| Ubud, Bali Indonesien | 2.10587 |

sehr schön

Nicht schlecht! Aber wir sind noch nicht fertig. Ein einziger Testlauf reicht nämlich nicht aus. Als nächstes müssen wir sicherstellen, dass unsere Empfehlungen auch wirklich gut sind. Bleiben Sie dran für Teil 2: Verbesserung der Empfehlungen.

Was wissen wir über Recommender?

Unser Machine Learning Team von Data Revenue hat sich in letzter Zeit ausführlich mit Recommendern beschäftigt. Zum Beispiel haben wir gebaut:

  • Einen eleganten taktischen Recommender für Ladder.io - sie Leute von Ladder haben sogar einen Blogbeitrag zum Projekt veröffentlicht;

  • Einen großen Film-Recommender für den größten Medienkonzern Europas;

  • Einen Hotel-Recommender für eine große deutsche Reiseseite.

Wir wissen jetzt eine ganze Menge über Recommender - wie man sie baut, skaliert und in der Produktion einsetzt. Wenn Sie Fragen haben, melden Sie sich gern! Schreiben Sie mir unter m.schmitt [at] datarevenue.de

Brauchen Sie Hilfe bei einem Machine Learning Projekt?

Telefontermin buchen

ODER sende mir eine Beschreibung an: m.schmitt@datarevenue.de