Dezember 2018
Band 33, Nummer 12
Künstlich intelligent: Warenkorbanalyse
Von Frank La La
Sie sind zweifellos bereits auf einen kleinen Ausschnitt künstlicher Intelligenz (KI) gestoßen, zumal die Weihnachtseinkäufe in vollem Gange sind: die Kaufempfehlung. Fast jeder Onlinehändler zeigt zusätzliche Produktempfehlungen an, manchmal unter der Überschrift „Wurde häufig zusammen gekauft“ oder „Kunden, die X gekauft haben, haben auch Y gekauft“. Laut einer Studie von McKinsey aus dem Jahr 2013 (bit.ly/2yK3Bu8) stammen 35 Prozent dessen, was Verbraucher bei Amazon kaufen, von Produktempfehlungsalgorithmen. Darüber hinaus ist diese Taktik nicht mehr auf Einzelhändler beschränkt, Onlinestreamingdienste wie Netflix und YouTube verwenden ausgefeilte Empfehlungsalgorithmen, um die Zuschauer länger am Ball zu halten.
Ohne Zweifel haben Empfehlungssysteme Auswirkungen auf unser tägliches Leben. Sie könnten behaupten, dass sie die bekannteste Form der KI sind, der Verbraucher begegnen. In dieser Kolumne werde ich eine grundlegende Form des Empfehlungssystems untersuchen, die als Warenkorbanalyse bekannt ist.
Warenkorbanalyse
Die Warenkorbanalyse, auch als Affinitätsanalyse bezeichnet, ist eine Modellierungstechnik, die auf der Theorie basiert, dass Sie wahrscheinlich auch Interesse an einer anderen Gruppe von Artikeln haben (und diese kaufen) werden, wenn Sie eine bestimmte Gruppe von Artikeln kaufen. Wenn jemand beispielsweise Erdnussbutter und Weißbrot kauft, ist es sehr wahrscheinlich, dass er auch noch Gelee kaufen möchte. Doch nicht alle Beziehungen sind so unmittelbar ersichtlich. Die Kenntnis des Konsumentenverhaltens kann den Umsatz steigern und dem Händler einen deutlichen Wettbewerbsvorteil verschaffen. Streng genommen ist die Warenkorbanalyse nur eine Anwendung der Techniken der Assoziationsanalyse, obwohl viele Onlineartikel und Tutorials beides häufig verwechseln. Um sie in Bezug zu anderen Machine Learning Techniken zu stellen, über die ich bereits geschrieben habe: Die Warenkorbanalyse ist ein unbeaufsichtigtes Lernwerkzeug, das wenig Featureengineering und eine begrenzte Datenbereinigung und -aufbereitung erfordert. In der Praxis können die aus der Warenkorbanalyse gewonnenen Erkenntnisse mit anderen KI- oder Data Science-Tools weiter untersucht werden.
Trotz ihrer Fähigkeit, versteckte Muster aufzudecken, ist die Warenkorbanalyse relativ einfach zu erklären und erfordert keine Kenntnisse in fortgeschrittener Statistik oder Integralrechnung. Allerdings müssen einige Begriffe und konventionelle Notationen überprüft werden. Zunächst werden die Begriffe „Ursache“ und „Wirkung“ als „Antezedenz“ und „Konsequenz“ bezeichnet. In dem zuvor erwähnten Beispiel sind Erdnussbutter und Weißbrot die Antezedenz, und Gelee ist die Konsequenz. Die formale Notation für diese Beziehung wäre {Erdnussbutter, Weißbrot} -> {Gelee}, was darauf hinweist, dass es einen Zusammenhang zwischen diesen Elementen gibt. Beachten Sie außerdem, dass sowohl Antezedenzen als auch Konsequenzen aus mehreren Elementen bestehen können.
Für die Warenkorbanalyse sind drei wichtige mathematische Measures erforderlich: Support, Lift und Confidence. Support stellt die Anzahl des Auftretens von Antezedenzen in den Daten dar. Um das Beispiel zu vereinfachen, stellen Sie sich die folgende Beziehung vor: {Erdnussbutter} -> {Traubengelee}. Bei 100 Kunden (und einer Transaktion pro Kunde) kann das folgende Szenario gelten:
- 15 Kunden haben Erdnussbutter gekauft.
- 13 Kunden haben Traubengelee gekauft.
- 11 Kunden haben Erdnussbutter und Traubengelee gekauft.
Support gibt an, wie häufig Elemente in einer Transaktion zusammen auftreten: in diesem Beispiel 11 von 100 (oder 0,11). Um statistische Begriffe zu verwenden: Es besteht eine Wahrscheinlichkeit von 11 Prozent, dass eine bestimmte Transaktion sowohl Erdnussbutter als auch Traubengelee beinhaltet. Confidence dividiert den Wert von Support (0,11) durch die Wahrscheinlichkeit, dass eine Transaktion nur Traubengelee enthält, was einem Wert von 0,846 entspricht. Dies bedeutet, dass bei fast 85 Prozent der Käufe von Traubengelee auch Erdnussbutter gekauft wurde. Und schließlich Lift: Dabei wird der Wert von Confidence (0,846) durch den Wahrscheinlichkeitswert von Erdnussbutter dividiert. Dies entspricht 5,64 (gerundet auf zwei Dezimalstellen).
All dies dürfte in einem einfachen Diagramm deutlicher werden, wie in Abbildung 1 gezeigt.
Abbildung 1: Werte für Support, Confidence und Lift
Measure | Formel | Wert |
Support | P (Erdnussbutter und Traubengelee) | 0,11 |
Confidence | Support/P (Traubengelee) | 0,846 |
Lift | Confidence/P (Erdnussbutter) | 5,64 (gerundet) |
Warenkorbanalyse in der Praxis
Unter Berücksichtigung der bisherigen Metriken ist es an der Zeit, die Warenkorbanalyse an einem echten Datensatz auszuprobieren. Der erste Schritt besteht darin, die zu analysierenden Einzelhandelsdaten abzurufen. Glücklicherweise stellt die University of California (Irvine) einen Datensatz zur Verfügung, der Transaktionen für eine britische Website enthält. Weitere Informationen zum Dataset finden Sie unter bit.ly/2DgATFl. Erstellen Sie ein Python 3-Notebook auf Ihrer bevorzugten Plattform (ich habe Jupyter Notebooks in einer früheren Kolumne unter msdn.com/magazine/mt829269 vorgestellt). Erstellen Sie eine leere Zelle, geben Sie den folgenden Code ein, um die Beispieldaten herunterzuladen, und führen Sie die Zelle aus:
! curl http://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx -o retail.xlsx
Sobald dieser Vorgang abgeschlossen wurde, geben Sie den folgenden Code in eine neue Zelle ein, um die Excel-Tabelle in einen Pandas DataFrame zu laden und die Spalten des Datensets auszugeben:
import pandas as pd
df = pd.read_excel('retail.xlsx')
print( df.columns)
The output will look something like this:
Index(['InvoiceNo', 'StockCode', 'Description', 'Quantity', 'InvoiceDate',
'UnitPrice', 'CustomerID', 'Country'],
dtype='object')
Auch wenn die Warenkorbanalyse keine umfangreiche Datenverarbeitung erfordert, ist es sinnvoll, irrelevante Datensätze (z.B. Datensätze mit einer Rechnungsnummer von NULL und stornierte Bestellungen) zu entfernen. Es ist außerdem sinnvoll, überflüssige Leerzeichen in den Produktbeschreibungen zu entfernen und alle Rechnungsnummern in Zeichenfolgen umzuwandeln. Sie können dazu den folgenden Code ausführen:
df['Description'] = df['Description'].str.strip()
df.dropna(axis = 0, subset=['InvoiceNo'], inplace = True)
df['InvoiceNo'] = df['InvoiceNo'].astype('str')
df = df[~df['InvoiceNo'].str.contains('C')]
Geben Sie nun den folgenden Code ein, um die Daten zu aggregieren und von einer Länderebene aus anzuzeigen:
df.groupby('Country').count().reset_index().sort_values(
'InvoiceNo', ascending = False).head()
Nun ordne ich die Daten mit jedem Produkt mit One-Hot-Codierung und einer Transaktion pro Zeile neu an. One-Hot-Codierung ist eine Datentransformationstechnik, bei der kategorische Werte in Spalten umgewandelt werden, wobei der Wert von 1 eingegeben wird, wenn ein kategorischer Wert vorhanden ist. Ich werde auch den Umfang des Datensatzes auf ein Land beschränken (in diesem Fall Frankreich), um das Verbraucherverhalten in einem einzelnen Markt zu vergleichen. Geben Sie dazu den folgenden Code ein, und führen Sie ihn aus (beachten Sie die Form des basket_uk-Datenrahmens in der Zellenausgabe, die One-Hot-Codierung erweitert die Spalten von 8 bis 4.175):
basket_fr = (df[df['Country']=="France"]
.groupby(['InvoiceNo', 'Description'])['Quantity']
.sum().unstack().reset_index().fillna(0)
.set_index('InvoiceNo'))
basket_fr.head(10)
Ein kurzer Blick auf die Ergebnisse zeigt ein Problem mit meiner One-Hot-Codierung. Das sechste Element weist in der zweiten Spalte einen Wert von 24,0 auf. Meine Absicht war es, in den Daten entweder eine Eins oder eine Null zu haben, nicht Mengenangaben. Daher muss ich alle Werte ungleich Null ermitteln und in 1 umwandeln. Um dieses Problem zu beheben, führen Sie den folgenden Code aus, und beachten Sie, dass die Angabe 24,0 in den Wert 1 umgewandelt wurde:
def sum_to_boolean(x):
if x<=0:
return 0
else:
return 1
basket_fr_final = basket_fr.applymap(sum_to_boolean)
basket_fr_final.head(10)
Ich verwende MLXTEND (rasbt.github.io/mlxtend), um die Daten weiter zu analysieren. MLXTEND ist eine Python-Bibliothek mit nützlichen Tools für gängige Data Science-Aufgaben (einschließlich Warenkorbanalyse). Um diese Bibliothek aus dem Notebook heraus zu installieren, führen Sie den folgenden Code aus:
! pip install mlxtend
Wenn das MLXTEND-Paket installiert ist, ist es an der Zeit, die relevanten Bibliotheken aus MLXTEND zu importieren, so wie hier gezeigt:
from mlxtend.frequent_patterns import association_rules
from mlxtend.frequent_patterns import apriori
Geben Sie in einer neuen Zelle den folgenden Code ein, um Artikelgruppen mit einem Support von mindestens 6 Prozent anzuzeigen:
frequent_itemsets_fr = apriori(basket_fr_final, min_support = 0.06,
use_colnames = True)
frequent_itemsets_fr.sort_values('support', ascending = False).head()
Mit den Schlüsselsätzen der identifizierten Artikel kann ich nun die Assoziationsregelnbibliothek anwenden, um das Kaufverhalten der Kunden zu ermitteln. Geben Sie den folgenden Code ein, und führen Sie ihn aus:
a_rules = association_rules(frequent_itemsets_fr, metric = "lift",
min_threshold = 1)
a_rules.sort_values('lift',ascending = False)
Die Ergebnisse, sortiert nach Lift, sollten ähnlich aussehen wie in Abbildung 2 und das Kaufverhalten der französischen Kunden auf der Website aufzeigen. Ein kurzer Blick auf die Ergebnisse zeigt, dass Kunden, die CHILDRENS CUTLERY SPACEBOY kaufen, auch CHILDRENS CUTLERY DOLLY GIRL kaufen, und dass Kunden, die einen Wecker in einer Farbe kaufen, auch einen Wecker in einer anderen Farbe kaufen. Im Hinblick auf umsetzbare Erkenntnisse könnte ich den Webseitenbesitzern empfehlen, sowohl Bündelangebote für geschlechtsspezifisches Besteck als auch mehrfarbige Weckerpakete anzubieten.
Abbildung 2: Zuordnungsregeln von französischen Kunden
Beachten Sie jedoch, dass diese Liste nach Lift und nicht nach Vorkommen sortiert ist. Es ist möglicherweise nicht sinnvoll, ein neues Bundle oder Produktangebot einzuführen, wenn es nicht beliebt genug ist. Um einen Überblick darüber zu erhalten, wie beliebt diese Besteckartikel sind, geben Sie den folgenden Python-Code ein:
print( basket_fr_final['CHILDRENS CUTLERY SPACEBOY'].sum())
print( basket_fr_final['CHILDRENS CUTLERY DOLLY GIRL'].sum())
Die Ergebnisse sind nicht vielversprechend: nur 27 Bestellungen für SPACEBOY und 28 für DOLLY GIRL. Bei der weiteren Untersuchung finde ich eine Assoziationsregel mit besseren Ergebnissen. Es stellt sich heraus, dass der Assoziationsregelindex 50 (SET/20 RED RETROSPOT PAPER NAPKINS) die Antezedenz für rote Pappbecher und rote Pappteller ist. Geben Sie den folgenden Code ein, um festzustellen, wie viele Einheiten verkauft wurden:
basket_fr_final['SET/20 RED RETROSPOT PAPER NAPKINS'].sum()
Obwohl die Zahl gering ist, liegt es nahe, dass Kunden, die Einwegbecher kaufen, auch passende Pappteller und Servietten haben möchten. Ein erfahrener Einzelhändler könnte diese Artikel leicht zu einem Paketangebot zusammenstellen, um Kunden zum Kauf zu bewegen.
Scharfsinnige Leser werden feststellen, dass es zwei weitere Metriken im sich ergebenden Datenrahmen gibt: Leverage und Conviction. Hierbei handelt es sich um weitere Werte, die beim Ausführen einer Warenkorbanalyse berücksichtigt werden müssen. Weitere Informationen dazu erhalten Sie bei der Untersuchung so genannter „alternative measures of interestingness“ (alternative Measures für Interesse). Wikipedia ist ein geeigneter Ausgangspunkt (bit.ly/2AECRNh).
Erinnern wir uns daran, dass sich bei der Aggregierung der Daten auf Länderebene herausgestellt hat, dass es weitaus mehr Rechnungen aus dem Vereinigten Königreich als aus jedem anderen Land gibt. Vielleicht könnten weitere Erkenntnisse gewonnen werden, wenn das Kundenverhalten mit umfangreicheren verfügbaren Rohdaten untersucht wird. Lassen Sie uns dies überprüfen, indem wir den folgenden Code in eine neue Zelle eingeben und ausführen, wie hier gezeigt:
basket_uk = (df[df['Country']=="United Kingdom"]
.groupby(['InvoiceNo', 'Description'])['Quantity']
.sum().unstack().reset_index().fillna(0)
.set_index('InvoiceNo'))
basket_final_uk = basket_uk.applymap(sum_to_boolean)
frequent_itemsets_uk = apriori(basket_final_de, min_support = 0.06,
use_colnames = True)
a_rules_uk = association_rules(frequent_itemsets_uk, metric = "lift",
min_threshold = 1)
a_rules_uk.sort_values('lift',ascending = False).head()
Für das Vereinigte Königreich ist die Ausführungszeit aufgrund des größeren Datasets wesentlich länger. Beachten Sie aber auch, dass die Ergebnisse ganz anders sind. Könnte dies eine Folge von mehr Daten sein, die die Analyse verändern, oder einfach eine Funktion von anderen Kundenpräferenzen in einem anderen Markt? Oder könnte es daran liegen, dass der Einzelhändler in verschiedenen Märkten verschiedene Produkte zum Verkauf anbietet? Dies sind die Arten von Variablen, die Sie verstehen müssen, während Sie Ihre Analyse aufarbeiten. In diesem Fall verfügen wir über wenig Kontext. Wir wissen nur, dass es sich um einen Onlinehändler mit Sitz in Großbritannien handelt. In einem echten Projekt ist jedoch die Auseinandersetzung mit den Fachexperten des Unternehmens ein entscheidendes Element für den Erfolg in Datenanalyseprojekten.
Zusammenfassung
In diesem Artikel habe ich die Verwendung der Warenkorbanalyse untersucht, um Muster im Verbraucherverhalten aufzudecken. Die Warenkorbanalyse gehört zum größeren Bereich der Affinitätsanalyse, den große Unternehmen nutzen, um Kunden dazu zu bewegen, mehr Geld für Produkte auszugeben und mehr Zeit auf Streamingplattformen zu verbringen.
Die Warenkorbanalyse bietet einen hervorragenden Einstieg für Personen und Organisationen, die sich mit Data Science beschäftigen möchten. Die Einstiegsschwelle ist in Bezug auf mathematische Kenntnisse gering. Tatsächlich gehen die mathematischen Aspekte nicht über die einfache Division und grundlegende Kenntnisse der Wahrscheinlichkeitstheorie hinaus. Warenkorbanalyse ist ein einfacher Problembereich für Anfänger und bietet einen großartigen Ausgangspunkt für die Anwendung von KI auf das Unternehmen. Lassen Sie sich jedoch nicht täuschen: Denken Sie nicht, dass dies kein wirksames Mittel wäre, um Data Science zu betreiben oder Wert für die Unternehmensführung zu schaffen. Die Auswirkungen auf das Geschäftsergebnis können erheblich sein.
Frank La Vigne arbeitet bei Microsoft als AI Technology Solutions-Experte und unterstützt Unternehmen dabei, mehr zu erreichen, indem mit Analysen und KI Daten optimal genutzt werden. Er ist auch Co-Host des DataDriven-Podcasts. Er bloggt regelmäßig auf FranksWorld.com, und Sie können ihm auf seinem YouTube-Kanal „Frank's World TV“ (FranksWorld.TV) folgen.
Unser Dank gilt dem folgenden technischen Experten für die Durchsicht dieses Artikels: Andy Leonard (Enterprise Data & Analytics)