© DrHitch/Shutterstock.com
Apache Mahout

1 Realisierung eines Empfehlungssystems


„Das könnte Sie auch interessieren …“ oder „Andere Nutzer kauften auch …“ – wie oft trifft man auf diese oder ähnliche Formulierungen beim Einkaufen im Onlineshop seines Vertrauens. Aber woher weiß das Unternehmen, was mich interessiert, und wie lässt sich ein solches System ohne großen Aufwand umsetzen? Eine Lösung: Apache Mahout.

Mahout [1] ist ein kostenloses, quelloffenes, unter dem Dach der Apache Software Foundation entwickeltes Java- und Scala-basiertes Framework, das sich verschiedener Aspekte der Verarbeitung und Auswertung von Massendaten annimmt. Mahout stellt dabei eine Sammlung von Algorithmen für intelligente und lernende Systeme zur Verfügung. Die Themenblöcke Clusterbildung, Klassifizierung und kollaboratives Filtern werden von Mahout unterstützt und sollen in diesem shortcut näher betrachtet werden.

Die Clusterbildung versucht Elemente in einer Datenbasis zu gruppieren, d. h. zum Beispiel Kunden zu Kundengruppen automatisch zuzuordnen. Bei der Klassifizierung werden Eigenschaften von Objekten untersucht, um die Objekte mit einer bestimmten Wahrscheinlichkeit einer Eigenschaft zuzuordnen, wobei das System selbst aus den Erfahrungswerten lernt. Ein klassisches Beispiel für die Klassifizierung ist die Erkennung von Spam in E-Mails. Innerhalb des kollaborativen Filterns werden Nutzerinteressen ausgewertet, um daraus Empfehlungen ableiten zu können. Für die Umsetzung von modernen Empfehlungssystemen greifen dabei oft alle drei Themen ineinander. Fachlich sollen die erhobenen Kundendaten effizient analysiert und ausgewertet werden, sodass einem Kunden intelligent die richtige Werbung oder richtige Empfehlung angezeigt wird. Am Ende sollen Privat- und Geschäftskunden mehr oder höherwertige Produkte kaufen. Die Abbildungen 1.1 und 1.2 zeigen eine durch Mahout erzeugte Produktempfehlung in IBM WebSphere Commerce. Die verwendeten Mechanismen sind jedoch unabhängig von dem eingesetzten E-Commerce-Framework und nicht auf E-Commerce-Szenarien beschränkt.

Der shortcut fokussiert sich auf die aktuell verfügbaren in Java implementierten Algorithmen und die programmatische Ausführung selbiger. Für die meisten Algorithmen und Prozesse stehen auch Kommandozeilenaufrufe zur Verfügung, die hier jedoch nicht näher betrachtet werden sollen. In neueren Mahout-Versionen wird zusätzlich verstärkt Scala zum Einsatz kommen.

voigt_2.png

Abbildung 1.1: Produktempfehlungen

voigt_1.png

Abbildung 1.2: Produktempfehlungen

Mahout im Überblick

Zur Realisierung der verschiedenen Aufgaben bietet Mahout eine Vielzahl an Mechanismen an, die per Kommandozeile oder programmatisch ausgeführt werden können. Technologisch sind diese Algorithmen mit Standard-Java-Mitteln implementiert. Für die Massendatenverarbeitung kommt jedoch Apache Hadoop [2] oder bei neueren Implementierungen Apache Spark [3] zum Einsatz. Mit der Verwendung von Mahout für große Datenmengen sollte man auch die grundlegenden Konzepte hinter Hadoop oder Spark verstehen. Für die einfachen Algorithmen sind allgemeine Java-Kenntnisse ausreichend. Im Folgenden werden nun die Möglichkeiten der Produktempfehlung näher betrachtet und an einem Beispiel beschrieben. Zur Implementierung wird eine aktuelle Version des Mahout-Frameworks benötigt (mindestens Version 0.9). Die meisten Algorithmen sind auch in den neueren Versionen enthalten, jedoch werden manchmal auch einzelne Implementierungen nicht weiter fortgeführt. Die Qualität bzw. Aktualität einzelner Algorithmen hängt leider auch stark vom Einsatz der entsprechenden Contributors ab. In Summe besteht Mahout aus einer Vielzahl an Bibliotheken, die man je nach Anwendungsfall einbinden muss.

Bevor wir nun mit der beispielhaften Implementierung beginnen, benötigen wir eine entsprechende Datenbasis. Für den Entwickler besteht hier schon fast das größte Problem, eine ausreichende Menge an realitätsnahen Daten zu erhalten. Bei der Verwendung kleiner Datenmengen lässt sich meist nicht die Effizienz oder Korrektheit der Algorithmen bewerten. Die Daten für eine Empfehlungs-Engine müssen zu einem Kunden, Artikel mit einer evtl. Bewertung sind enthalten. Die Artikel könnten dabei aus dem Kaufverhalten (Warenkörbe) ausgelesen werden, aber auch andere Quellen wie die Webanalyse sind verwendbar. Die Angabe einer Bewertung ist optional. Sollten in der Datenbasis keine Bewertungen vorhanden sein, wird nur die Existenz von Datensätzen bewertet. Möchte man dennoch seinen Datensätzen eine Gewichtung geben, lassen sich eigene Bewertungssysteme festlegen. Beispielsweise könnte als Bewertung die Häufigkeit des Produkterwerbs oder nur die reine Ansicht eingesetzt werden. Demzufolge haben häufig gekaufte Produkte eine „bessere“ Bewertung als weniger gekaufte Produkte und nur angezeigte Produkte.

Aufbau eines Datenmodells

Die für die Ausführung der Berechnungen notwendigen Daten werden über ein Datenmodell geladen. Das Datenmodell speichert die für die Berechnungen relevanten Daten und ermöglicht einen zentralen Zugriff. Für das Aufbauen des Datenmodells wird eine Instanz vom AbstractDataModel benötigt. Für einfache Aufgaben kann dazu das FileDataModel verwendet werden. Bei komplexen Datenstrukturen und insbesondere bei großen Datenmengen wird eine alternative Datenquelle empfohlen. Gleichzeitig kann auch das FileDataModel erweitert werden, sodass hier der Datenzugriff für eigene Strukturen optimiert werden kann. Für den Aufbau einer einfachen Datei wird das folgende Pattern verwendet:

userID,itemID[,preference,[,timestamp]]

Die Nutzer-ID und Artikelnummer müssen sich als long und die Gewichtung (preference) als double parsen lassen. Gleichzeitig muss die Datei konsistente Informationen enthalten. Das heißt, wurde einmal eine Gewichtung mitgegeben, so muss dies für alle Einträge erfolgen. Liegt die Datenbasis vor, so kann die Auswertung mit Mahout beginnen:

DataModel dataModel = new FileDataModel(new File(yourinput));

Das FileDataModel besitzt zusätzlich einen Updatemechanismus. Erweiterungen und Anpassungen der Datenbasis können in ein bestehendes Model importiert werden.

Wer ist mir am ähnlichsten?

Für die Auswertung möglicher Empfehlungen steht eine Reihe an Algorithmen zur Verfügung. Im Folgenden wird die Variante der nutzerbasierten Empfehlung näher betrachtet. Der Grundgedanke liegt darin, dass nach Benutzern gesucht wird, die dieselben Interessen...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang