Einkaufssegmente
Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 48 von 51.
Ein Online-Pflanzenshop kennt seine 240 Kunden nur anhand ihres Verhaltens: Bestellungen pro Jahr, Warenkorbgröße, Anteil der im Angebot gekauften Artikel und Tage seit der letzten Bestellung.
Niemand hat sie gekennzeichnet. Die Besitzerin möchte einige Segmente, die sie mit einfachen Worten beschreiben kann, und eine Rückgewinnungs-E-Mail für das Segment, das abgewandert ist.
Man lasse zwei Methoden bei k übereinstimmen: Ein Ward-Baum schlägt es vor, und die Silhouette prüft es anhand ihrer Nachbarn. Lies dann jedes Segment in realen Einheiten ab.
Aufgabe
SchwerDas Programm liest ein, wo der Baum geschnitten werden soll; der Starter richtet ein Diagramm mit Titel ein.
- Skaliere die Merkmale und schneide dort einen Ward-Baum. Gib aus, wie viele Segmente dabei entstehen.
- Gib den k-Means-Silhouettenwert (3 Dezimalstellen) für dieses k und jeden benachbarten Wert sowie anschließend das beste k aus.
- Führe das Verfahren mit diesem Wert erneut aus und speichere das Ergebnis in
plants["segment"]. Beginne mit dem größten Segment, weise jedem Segment einen Buchstaben zu und gib seine Mittelwerte in den ursprünglichen Einheiten aus; gib anschließend das Segment aus, dessen letzte Bestellung am längsten zurückliegt. - Erstelle ein Streudiagramm für jedes Segment und kennzeichne es mit seinem Buchstaben; füge eine Legende hinzu und zeige das Diagramm an.
Für einen anderen Laden, schneide bei 8:
Tree cut at 8.0: 3 segments
Silhouette at k = 2: 0.573
Silhouette at k = 3: 0.675
Silhouette at k = 4: 0.630
Best k: 3
A (70): 8.6 orders a year, 29 EUR baskets, 15% on sale, last order 23 days ago
B (50): 3.1 orders a year, 22 EUR baskets, 60% on sale, last order 53 days ago
C (30): 1.8 orders a year, 89 EUR baskets, 10% on sale, last order 148 days ago
Win-back email: segment Cund sein Diagramm:
Dann beschreibt Coddy dein Ergebnis.
Probier es selbst
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from scipy.cluster.hierarchy import linkage, fcluster
# Eine Zeile pro Kunde des Pflanzenladens
plants = pd.read_csv("plants.csv")
features = ["orders_per_year", "avg_basket_eur", "sale_share_pct", "days_since_order"]
# Die Höhe, auf der der Inhaber den Baum des Ladens schneidet, abgelesen aus dem Dendrogramm (3 oder mehr Segmente)
cut = float(input())
fig, ax = plt.subplots()
ax.set_title("Plant Shop Segments")
ax.set_xlabel("Orders per year")
ax.set_ylabel("Average basket (EUR)")
# Schreibe deinen Code unten
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Unüberwachtes Lernen
1Gruppen finden
Lernen ohne LabelsÄhnlichkeit messenK-Means von HandK-Means mit scikit-learnRückblick: Fitnessstudiomitglieder4Hierarchisches Clustering
Schrittweises ZusammenführenAgglomerative ModelleDendrogrammeZusammenfassung: Hunderassen7PCA in der Praxis
64 Dimensionen sehenKomponenten als MusterKomprimieren und rekonstruierenPCA vor einem ModellRückblick: Gesichtsscanner10Projekt: Ziffern erkunden
Die Ziffern ansehenMit PCA verkleinernDie Ziffern gruppierenDie Gruppen benennenDie Ausreißer finden2k wählen
TrägheitDie Elbow-MethodeSilhouettenwerteVor dem Clustering skalierenRückblick: LieferzonenÜbe selbstständig: Online-Python-Compiler