Data-Driven Marketing

Auf Interessen der Kunden reagieren: Intelligente Recommendations

Eduardo Torres Schumann

Dr. Eduardo Torres Schumann

... kam 1999 von Sevilla nach München, um Computerlinguistik/Informatik zu studieren. Erste berufliche Erfahrungen im Bereich Suche in biomedizinischen Datenbanken führten ihn dazu, sich während seiner Promotion an der LMU mit dem Aufbau von semantischen Wissensressourcen zu beschäftigen. Die Ergebnisse davon flossen 2009 in die von ihm mitbegründete TopicZoom GmbH, wo er beim Vertrieb semantischer Suchtechnologie viele wertvolle Erfahrungen sammelte. Ab 2011 hat er beim Aufbau einer der führenden Social Media Analytics Plattformen im deutschsprachigen Raum mitgearbeitet und Komponenten zur automatischen Analyse von Tweets und Blogs entwickelt, z.B. zur Erkennung der Tonalität. Lieblings-Dateiformate: .owl, .rdf, .kt, .java, .frq

Teil 6 der BLOGSERIE:

Data-Driven Marketing

„Data-Driven Marketing: Wie die kundenzentrierte Ansprache in Zukunft gelingt.“

Erscheinungsintervall: alle 6 Wochen

Lesedauer: 7 Min.

Lesen Sie hier die anderen Beiträge dieser Blogserie:

In den vorangehenden Beiträgen haben wir Analytics und Maschinelles Lernen eingesetzt, um das Verhalten der Kunden im Google Merchandise Store zu verstehen. Mit den dadurch gewonnenen Erkenntnissen können wir Marketing-Maßnahmen besser planen und zielgerichteter agieren. In diesem Beitrag beschäftigen wir uns nun damit, wie wir unterschiedliche Kunden mit speziellen, automatisch zugeschnittenen Angeboten besser abholen können. Dafür erweitern wir unsere einfache Advanced Analytics Architektur um ein weiteres Element.

Aus dem aufgehäuften Wissen lernen

Mit Hilfe von Clustering-Verfahren konnten wir verschiedene Kundenarten ausmachen, die sich in ihrem Verhalten unterscheiden. Viele Kunden sind sogenannte „Eintagskunden“, die einmalig eine Hand voll Produkte bestellen, jedoch selten zurückkehren. Auf der anderen Seite steht ein viel kleinerer Kreis von Kunden, die wiederkehrend größere bis sehr große Bestellungen aufgeben, sich auf bestimmte Produktkategorien spezialisieren und „Power User“ darstellen.

Es stellt sich die Frage, wie wir die Schar der „Eintagskunden“ in einem Data-driven Ansatz besser abholen können, obwohl es keine länger bestehende Kundenbeziehung gibt und daher eine entsprechende Datenhistorie fehlt.

Wir könnten die Web Analytics Daten dafür nutzen, die Customer Journey und/ oder die Suche zu optimieren, und uns darauf verlassen, dass der Shop insgesamt besser funktioniert. Um auf den einzelnen Kunden einzugehen, erscheint aber ein anderer Ansatz vielversprechender: Die Gesamthistorie aller vergangenen Käufe zu betrachten, um Muster in den Vorlieben aller Kunden zu erkennen. Zeigt ein Kunde Interesse an einem Produkt, könnten wir dieses Wissen verwenden und mit passenden Angeboten reagieren.

Das ist die Idee hinter intelligenten Recommendations: Die Intelligenz der Masse zu nutzen, um dem potentiellen Kunden Produktempfehlungen zu präsentieren, die ihn wahrscheinlich ansprechen und besser durch das Sortiment führen. Im Gegensatz dazu sind statische Recommendations Pauschalangebote, die unspezifisch allen Besuchern präsentiert werden.

Amazon verdankt seinen Aufstieg zu einem Großteil der Entwicklung von guten Verfahren für intelligente Recommendations. Heutzutage begegnen uns Recommender-Systeme an diversen Stellen, wie Reiseportalen oder Audio- und Video-Streamingdienste.

Das Grundprinzip für intelligente Recommendations

Im Gegensatz zu Ratings oder Bewertungen eignen sich getätigte Kaufaktionen von Kunden sehr gut dafür, Voraussagen über weitere Käufe zu machen. Auf dieser Idee basiert eine Reihe von Algorithmen, die unter der Rubrik „Collaborative Filtering“ zusammengefasst werden. Das Prinzip ist immer ähnlich: Ausgehend von der Kaufhistorie aller einzelnen Kunden, der „Kunde-Produkte-Matrix“, wird eine sogenannte „Produkt-Produkt-Matrix“ aufgebaut, anhand der sich ablesen lässt, welche Produkte zusammen gekauft werden („Kookkurrenzen“). Die Kunst beim spezifischen Algorithmus besteht darin, aus der Produkt-Produkt-Matrix statistisch signifikante Zusammenhänge zwischen Kookkurrenzen zu extrahieren und in ein sog. Recommendations-Modell zu gießen (s. Abbildung 1.) Mit dem Modell kann man dann für ein Produkt oder eine Menge von Produkten passende Produkt-Empfehlungen generieren.

6_Collaborative Filtering
Abbildung 1: Grundprinzip beim Collaborative Filtering. Die Indicator-Matrix entspricht dem Recommendationsmodell. Angelehnt an ein Bild aus „Practical Machine Learning“, von Ted Dunning u. Ellen Friedman, O’Reilly Verlag, 2014.

Ein Beispiel: Spaghetti, Tomatensoße und Wein werden oft zusammen gekauft. Wenn alle unsere Kunden jedoch unabhängig von ihrer Vorliebe für eine bestimmte Küche generell gerne Wein trinken, wäre Wein keine besonders gute Empfehlung zu einem Produkt wie Spaghetti. Tomatensoße vermutlich schon. Dafür muss aber der Zusammenhang zwischen Spaghetti und Tomatensoße statistisch feststehen.

Der „Alternating least squares (ALS)“-Algorithmus, der auf algebraischen Methoden basiert, ist sicherlich der bekannteste Ansatz beim Collaborative Filtering. Die Palette reicht jedoch bis zum Deep Learning; dabei kommen beispielsweise „Siamese Neural Networks“ zum Einsatz, um Produkte anhand von einer Vielzahl von reichhaltigen Merkmalen zu beschreiben und miteinander zu vergleichen.

Die Herausforderungen sind unabhängig des Algorithmus immer ähnlich:

  • Man braucht eine gute Datengrundlage, um nützliche Zusammenhänge zu erkennen; idealerweise in Form einer langen Kaufhistorie.
  • Bis eine solide Kaufhistorie zur Verfügung steht, muss das sogenannte Cold-Start Problem gelöst werden; d.h. es muss eine alternative Strategie entwickelt werden, um Recommendations anzubieten, die auf weniger zuverlässigen Daten wie PageViews, Reviews, usw. aufbaut.
  • Man muss dafür sorgen, dass Empfehlungen mit der Zeit nicht langweilig werden und genügend Variation anbieten, um sogenannte Filterblasen zu vermeiden.

Die Verwandtschaft von Suche und Recommendations ausnutzen

Zwischen Suche und Recommendations besteht eine gewisse Verwandtschaft. Zum einen kann ein Suchproblem als Empfehlungsproblem aufgefasst und gelöst werden. Bei der Berechnung der besten Ergebnisse zu einer Suchanfrage fließt zum Beispiel bei Google ein, wie oft Seiten von anderen Seiten in Form von Verlinkungen „empfohlen“ werden. Daher sind die eingesetzten mathematischen Methoden in beiden Fällen oft sehr ähnlich.

Zum anderen sind Suchvorgänge neben den Käufen ein wichtiger Indikator für die Interessen des Shop-Besuchers. Was ist naheliegender, als Empfehlungen zu präsentieren, die zu seinen Interessen passen?  Kein Wunder also, dass eine einfache Recommendations-Engine sich direkt auf derselben Suchmaschine implementieren lässt, mit der wir unseren Shop betreiben.

Für einen praktischen Test auf Basis der Google Analytics Daten setzen wir hierfür Elasticsearch ein. Damit erweitern wir die einfache Analytics Infrastruktur, mit der wir in unserer Serie bisher gearbeitet haben, um eine weitere Komponente, die eigene Analyse- und Visualisierungs-Möglichkeiten mitbringt.

Eine Recommendations-Engine für den Start

In einer ersten Ausbaustufe unserer Recommendations-Engine setzen wir Spark als ETL-Framework ein. Wir extrahieren aus den Google Analytics Daten die Transaktionsdaten zu unserem Shop, und transformieren sie anschließend in eine Customer-Item Matrix, die sich dann als Index in Elasticsearch laden lässt, s. Abbildung 2.

Abbildung 2: Die erweiterte Architektur für die Recommendations-Engine. Spark wird als ETL-Tool verwendet, die Empfehlungen werden in Elasticsearch berechnent.

Die Extraktion und Transformation der Daten mit Spark erfolgt ähnlich wie bei den Vorbereitungen für das Clustering von Kunden. Ein Jupyter Notebook zur Berechnung der Customer-Item Matrix aus den GA-Daten kann hier runtergeladen werden:

Die Customer-Item Matrix geben wir als Menge von JSON-Dokumenten heraus. Für einen einzelnen Kunden sieht der Eintrag dann so aus:

6_Customer-Item Matrix

Die einzelnen Dokumente lassen sich anschließend mit Hilfe der Elasticsearch Spark API in einen Elasticsearch-Index laden.

Dadurch stehen uns die Statistik-Fähigkeiten von Elasticsearch für die Berechnung von Recommendations zu Verfügung. In diesem Fall nutzen wir die sog. Aggregationsfunktionen, sodass wir „on-the-fly“ für ein bestimmtes Produkt die statistisch signifikanten Kookkurrenzen ermitteln.

Zunächst ermitteln wir mit Hilfe der „terms“ Aggregations-Funktion, wie viele Kunden jedes einzelne Produkt gekauft haben. So erhalten wir eine Liste der am häufigsten gekauften Produkte. Dazu dient die Anfrage:

6_terms Aggregations-Funktion

Als Ergebnis erhalten wir:

6_Ergebnis terms Aggregations-Funktion

Von den 864 Kunden im Index haben 54 ein „Engraved Ceramic Google Mug“ gekauft. Welche anderen Produkte haben diese Kunden außerdem noch gekauft? Um das zu wissen, brauchen wir die Kunden nur durch eine entsprechende Suche einzugrenzen und die „terms“-Funktion nochmal zu bemühen:

6_terms-Funktion 2

In diesem Fall sieht das Ergebnis so aus:

6_Ergebnis terms-Funktion 2

Dadurch haben wir dynamisch einen Teil der Produkt-Produkt-Matrix. Wir erfahren, dass von den 54 Kunden, die die Google Tasse gekauft haben, sich 11 auch für Stickers entschieden haben („Google Laptop and Cell Phone Stickers“). Sind also Google Stickers die beste Empfehlung zu einer Google Tasse? In der Liste der am häufigsten gekauften Produkte sehen wir, dass die Google Stickers immerhin noch vor der Google Tasse stehen; sie scheinen also allgemein beliebt zu sein und nicht besonders mit dem Kauf einer Tasse zu korrelieren. Wir hätten also zusammenhängende Produkte besser nicht nach der Häufigkeit, sondern nach der Stärke der Korrelation sortiert. Das erreichen wir durch den Einsatz der „significant-terms“-Funktion:

6_terms-Funktion 2

Dadurch ändert sich die Reihenfolge in den Ergebnissen:

6_Ergebnis significant-terms Funktion

Siehe da: Ein „Red Shine 15 oz Mug“ hängt statistisch gesehen stärker mit der Google Tasse zusammen als die Sticker, die einen viel niedrigeren Score als der „Mug“ aufweisen. Die Grundidee für die Berechnung des Score ist folgende: Man vergleicht den Anteil von einem Element (hier z.B. dem Mug) in der Gesamtmenge, dem „Hintergrund“, mit dem Anteil desselben Elements in der reduzierten Menge oder „Vordergrund“, die das Element enthält, zu dem man die Korrelation berechnen möchte (hier die Google Tasse). Der Score ist ein Maß dafür, wie der Anteil eines Elements steigt, wenn man vom Hinter- zum Vordergrund übergeht. Der „Mug“ kommt im Hintergrund eher selten vor („bg_count“ 28 von 864), sein Anteil im Vordergrund ist viel größer („doc_count“ 10 von 54). Die Google Tasse ist im Hintergrund mehr als zweimal häufiger (bg_count = 76 von 864), weswegen der Anteil im Vordergrund vergleichsweise nicht so stark steigt („doc_count“ 10 von 54). Die genaue Formel wird durch den JLH Score gegeben. In Elasticsearch kann man für die Berechnung von „significant-terms“ auch auf andere statistische Assoziationsmaße wie Chi-Square, Mutual Information, usw. zurückgreifen.

Damit haben wir eine erste Version für ein Recommender-System implementiert, die auf Suchanfragen reagieren kann und sich leicht verbessern lässt. Statt alle Käufe gleichwertig zu behandeln, können wir beispielsweise weitere Metriken wie Page Views oder Ratings in die Berechnung einfließen lassen, oder Kundenmerkmale bei Filtern berücksichtigen.

Auch wenn die Ergebnisse noch nicht ganze perfekt sind, können wir mit diesen einfachen Mitteln zumindest das Cold-Start Problem entschärfen, wenn wie hier die Kaufhistorie noch nicht besonders groß ist.

Mit den Daten wachsen und immer besser werden

Durch die Erweiterung unserer Infrastruktur um Elasticsearch entstehen mehrere Möglichkeiten, von einer wachsenden Menge an Daten zur Kaufhistorie und Kundeverhalten zu profitieren und unser Recommender-System anzupassen.

Eine weitere Ausbaustufe ist in Abbildung 3 skizziert. Spark dient nicht nur als ETL-Tool, sondern wird auch eingesetzt, um mit Hilfe des vorhandenen ALS-Algorithmus ein Recommendations-Modell zu berechnen. Elasticsearch dient als Backend für den Shop und enthält den Produktkatalog, der mit den Ergebnissen der Berechnung angereichert wird.

6_Ausbaustufe Recommendations-Engine
Abbildung 3: Eine weitere Ausbaustufe unserer Recommendations-Engine. Spark übernimmt die Berechnung der Empfehlungen mittels eines Collaborative Filtering Algorithmus („ALS“). Mit den vorberechneten Empfehlungen wird der Produktkatalog in Elasticsearch angereichert.

Mit der Zeit und mit hoffentlich wachsender Käuferzahl möchte man wahrscheinlich nicht nur mit einer statischen Historie als Grundlage für die Recommendations arbeiten, sondern auf Änderungen im Kaufverhalten und kurzfristige Interessen dynamisch reagieren.

Das bedeutet, dass z.B. die Folge der Interaktionen eines Kunden in einem Zeitfenster betrachtet werden oder die Kunde-Produkt-Matrix regelmäßig aktualisiert werden soll. Im Grunde möchte man möglichst viele Kundensignale berücksichtigen, um noch präziser auf den Einzelnen eingehen zu können.

Diese Signale stellen fortlaufende zeitliche Events dar, die die Infrastruktur verarbeiten muss, um sie nutzen zu können bspw. die Kaufhistorie aktuell zu halten. In unserer Architektur mit Elasticsearch und Spark haben wir gleich diverse Optionen, dies zu tun, u.a.:

  • Die Events lassen sich in Elasticsearch in einem eigenen Index fortlaufend erfassen. Dieser Index wird dann in regelmäßigen Zeitabständen mit Hilfe von sog. Transforms, einem eigenen Elasticsearch-Mechanismus, abgefragt und in den Kaufhistorie-Index umgewandelt.
  • Alternativ können mit der Spark Streaming API ebenfalls Events konsumiert werden. Aus diesen werden dann innerhalb von Spark Änderungen an der Kaufhistorie berechnet und an Elasticsearch übermittelt.

Ausblick

Mit intelligenten Recommendations können wir dynamisch auf Interessen des Einzelnen reagieren, selbst wenn wir sie oder ihn noch nicht kennen und „persönlich“ ansprechen können. Damit unterstützen wir unsere Kunden und lassen den Umsatz steigen. Voraussetzung ist, dass wir aus der Vergangenheit lernen und die Signale nutzen, die uns zur Verfügung stehen, allen voran konkrete Käufe.

Mit der Erweiterung unserer Analytics-Plattform um Elasticsearch sind wir in allen Ausbaustufen der Realisierung von Recommendations besten aufgestellt.

In nächsten Beitrag nutzen wir Kibana, das wie Elasticsearch ein Teil des Elastic Stack ist, um mit geeigneten Visualisierungen unsere Marketing-Aktivitäten zu steuern.Elasticsearch and Kibana are trademarks of Elasticsearch BV, registered in the U.S. and in other countries.

Wollen Sie mehr über intelligente Recommendations wissen?