Warenkorb Analyse mit R

in Gastbeitrag vom Team Wahre Logistik
Lukas Felzmann, Alexander Opris, Felix Mayer

Datum der Originalveröffentlichung Jan 20. 2023; 6 min read

Weiterer Beiträge vom Team Wahre Logistik





Die diversen Handelsgeschäfte, ob online und lokal, besitzen meist eine Vielzahl von Daten, in denen sie das Kaufverhalten ihrer Kunden speichern. Insbesondere die Information über den Warenkorb eines Kunden ist besonders wertvoll. Durch ihn können Kunden verglichen werden anhand der gekauften Artikeln. Das ist bereits Standard geworden und erlaubt den Geschäften ihren Kunden Empfehlungen zu anderen Produkten zu machen, die andere Kunden mit dem selben oder zumindest einem ähnlichen Kaufverhalten ebenso erworben haben. Die hierfür notwendige Analyse der Daten wird daher auch als Warenkorb Analyse bezeichnet.

In diesem Blog werden wir nun eine solche Warenkorb Analyse an einem Beispiel Datensatz durchführen.

Disclaimer

Unsere Daten stammen aus dem Blogeintrag "△ Logistics Case Studies: der Lieferschein" von Prof. Dr.-Ing. Martin Wölker und sind unter Creative Commons (CC BY-NC-SA) lizenziert. Die Daten spiegeln Umsätze, Materialstämme und Kundenstämme eines fiktiven mittelständischen Unternehmens namens Schrauben Karl GmbH wider. (Anm. Es handelt sich um anonymisiert Echtdaten aus einem meiner Projekte.)

Das Basket Shop Layout

Um in R eine Warenkorb Analvse durchführen zu können, müssen die Daten in die Form eines sogenannten „basket shop layout" (Anm: siehe Fußnote dazu*) überführt werden. Das ist ein Datenformat, dass speziell für solch eine Warenkorb Analyse entworfen worden ist. Im folgenden betrachten wir einen Ausschnitt der Daten, wie sie im basket shop layout aussehen.

Zu beachten ist, dass alle Materialnummern in einer Zeile zu einem einzelnen Kauf bzw. Warenkorb gehören und dass eben jene Materialnummern nicht in unterschiedlichen Spalten, sondern als Liste vereint hinterlegt sind.
Im allgemeinen sollten Daten immer zunächst bereinigt werden, bevor diese genutzt werden. Es ist nicht unübliches das eine Vielzahl an Zellen NULL Werte beinhalten oder andere Anomalien aufweisen. Unser zu Grunde liegenden Daten weisen glücklicherweise jedoch keine solchen Probleme auf, da diese als Lehrmittel erstellt worden sind (Anm. Es handelt sich Originaldaten. Natürlich sind die auf den ersten Blich in Ordnung, was ja Planungsgrundlage. Aber da sind auch ein paar Ungereimtheiten drin. 😉).
Für die Verarbeitung der Daten gehen wir zunächst von der vollständigen Lieferschein Tabelle als Ausgangslage aus. Für unsere Warenkorb Analyse sind jedoch nur die Lieferscheine mit den jeweiligen Materialnummern von Interesse, weshalb wir diese Daten herausfiltern.
Hierzu überführen wir die Daten zunächst mit glimpse in eine atomare Tabelle der Form: Lieferschein -> Materialnummer
#cast into a glimpse object
gTemp <- glimpse(lieferscheine df %>% select(lieferschein,materialnummer))
Anschließend werden die beiden Spalten nach Lieferscheinen gruppiert und die Materialnummern zu den jeweiligen Lieferscheinen in einer Liste zusammengefasst. Ebenso entfernen wir danach die Lieferscheine selbst, da wir die Zuordnung nun zeilenbasiert haben. Prinzipiell liegt damit auch das basket shop layout bereits vor. Jedoch ist die Tabelle noch etwas unschön, weshalb wir sie zusätzlich noch zur besseren Lesbarkeit umbenennen.

Das resultierende Ergebnis sieht dann aus wie die oben gezeigte Tabelle. Zusätzliche können wir diese noch als CSV-Datei exportieren, was uns im nächsten Schritt auch nützlich sein wird und wir auch im nachhinein die Daten auch außerhalb von R repräsentieren könnten.

Die Apriori Funktion

Nun, da wir die Daten in der passenden Form haben, schauen wir wie genau wir eine Warenkorb Analyse durchführen können mit Hilfe einer Korrelation Analyse. Hierzu wird die sogenannte Apriori Funktion genutzt.
Diese leitet uns Regeln zu unseren Daten ab, basierend auf vorliegende Korrelation und berechnet uns damit eine konkrete Wahrscheinlichkeit eines Kaufs von Produkt A, wenn auch B gekauft wird. Diese kann zum Beispiel wie folgt aussehen:
{263012040,276016000} {276012000} o. 7542662%
Dies lässt sich verstehen als: Wenn "263012040" und "276016000" gekauft wurde, dann wir zu einer Wahrscheinlichkeit von rund 75% auch "276012000" gekauft.
Die Apriori Funktion erfordert jedoch im speziellen ein Transaktion Objekt. Mit der Vorarbeit durch das basket shop layout ist der notwendige Typ-cast nun trivial und kann allein durch den Import der CSV-Datei erfolgen.

Die Apriori Funktion ist nun einfach anzuwenden:
Ausschlaggebend für diese Analyse sind die Parameter supp (Support), conf(Confidence) und ntaxlen (maximal Länge). Alle drei dienen als Grenzwerte und beschränken den Suchraum der Apriori Funktion für Regeln.
  • Confidence: Beschreibt die Wahrscheinlichkeit, dass A gekauft wird, wenn auch B gekauft wird. Es werden nur Regeln gesucht, die mindestens so zuversichtlich sind wie in conf angegeben (Hier 50%).
  • Support: Beschreibt die Frequenz der Korrelation in dem Datensatz und wirdauf ein Minimum von 0.001 festgelegt.
  • Maximal Länge: Beschreibt die maximale Größe der Menge an Materialien,die jeweils für A und B betrachtet werden, da auch Korrelationen in der Form { A1, A2, ... A maxlen } -> { Bl, B2, ... B maxlen }möglich sind.

Interpretation der Ergebnisse

Wir können nun die Ergebnisse der Apriori Funktion einerseits textuell als auch visuell Beschreibung. Eine textuelle Beschreibung allein mit ...
ist jedoch nicht empfehlenswert, da sie schlicht durch die Fülle an Daten unübersichtlich ist. Stattdessen empfiehlt es sich die Daten in einem Scatter Plot darstellen zu lassen.

Im Scatter Plot wird zusätzlich der lift angezeigt, welcher die Abhängigkeit von A zu B ausdrückt und damit die Wichtigkeit einer Regel.
Zu sehen ist, dass insbesondere eine große Menge an Regeln mit einer hohen Confidence auch einen hohen Lift haben. Dadurch können wir mit ziemlicher Sicherheit auf B schließen, aber ebenso ausschließen, dass B für ein andere Menge von Materialnummern in A gekauft wird. Damit sind uns zuverlässige Vorhersagen möglich. Zugleich fällt aber auch auf, dass der Support mit wenigen Ausnahmen gleichbleibend gering ist. Dies lässt uns darauf schließen, dass der Datensatz zwar
starke Korrelationen besitzt, diese aber nur selten im Datensatz vorzufinden sind.
Für eine exemplarisches Beispiel von mehreren Regeln wählen wir eine beliebige Materialnummer und lassen uns die zehn Regeln mit der höchsten Confidence anzeigen. Im folgenden finden sich die zehn Regel mit der höchsten Confidence als ein exemplarisches Beispiel. Dabei betrachten wir aber nur dass das Produkt auf dass wir schließen wollen die Materialnummer "276012000".

Der notwendige Code sieht aus wie folgt:

Unsere Schlussfolgerung:

Wir können zwar Muster im Kaufverhalten der Kunden erkennen, erkennen aber ebenso am Support, dass ihr Kaufverhalten äußerst heterogen zueinander ist und es zwischen ihnen allgemein nur wenig Ähnlichkeiten gibt. Gründe hierfür können schlicht die Interessen der Kunden oder die Vielfalt an unterschiedlichen Materialien sein.

*Ergänzung zum Basket Shop Layout (11.Mai2024)

Mit 50.000 Artikeln kann die Warenkorbanalyse tatsächlich eine Herausforderung sein. Der Apriori-Algorithmus "Basket Shop Layout" kann bei großen Datensätzen ineffizient sein. Es gibt jedoch andere Algorithmen wie FP-Growth oder Eclat, die effizienter sein können.

Es ist wichtig zu beachten, dass die Warenkorbanalyse ein exploratives Werkzeug ist. Es kann Muster und Assoziationen in Ihren Daten aufdecken, aber interpretieren und entscheiden muss der Anwender, wie die Erkenntnisse zur Geschäftsstrategiepassen. Es kann auch hilfreich sein, die Ergebnisse der Warenkorbanalyse mit anderen Datenquellen oder Geschäftsinformationen zu kombinieren, um ein vollständigeres Bild zu erhalten.

Transparenzhinweis

Diese Seite wurden von mir nach dem Hackerangriff auf unsere Hochschule aus einem von Bastian gespeicherten PDF rekonstruiert und hier im im Blog dokumentiert. 
Mann war das ein Aufwand 😏.


Blog: , Seite:
Version: 1.3 Mai 2023, Kontakt: E-Mail Martin Wölker
Pirmasens, Germany, 2018-2024, ausgelesen am: , Licence CC BY-NC-SA

Kommentare