Το Wholesale customers κοινοποιήθηκε στις 30/3/2014 στο UC Irvine Machine Learning Repository, ένα αποθετήριο βάσεων, συνόλων δεδομένων και θεωριών πεδίων. Εντάσσεται στον χώρο της μηχανικής μάθησης και χρησιμοποιείται για σκοπούς ταξινόμησης και επίδειξης αλγορίθμων συσταδοποίησης. Αναφέρεται σε πελάτες ενός χονδρεμπόρου και περιλαμβάνει τις ετήσιες δαπάνες σε χρηματικές μονάδες (μ.μ.) για διάφορες κατηγορίες προϊόντων.
Η ανάλυση των δεδομένων του dataset μας επιτρέπει να κατηγοριοποιήσουμε πελάτες χονδρικού εμπορίου, με βάση τις αγοραστικές τους συνήθειες σε διάφορα είδη προϊόντων. Μέσω της συσταδοποίησης, μπορούμε να εντοπίσουμε ομάδες πελατών με παρόμοια συμπεριφορά, γεγονός που συμβάλλει στη στοχευμένη εμπορική στρατηγική, τη βελτιστοποίηση αποθεμάτων, τη διαμόρφωση προγραμμάτων εκπτώσεων και την ενίσχυση της σχέσης με τους πιο κερδοφόρους πελάτες.
Το dataset αποτελείται από 440 εγγραφές και 8 μεταβλητές.
| Μεταβλητή | Περιγραφή | Τύπος | Εύρος | Μονάδα Μέτρησης |
|---|---|---|---|---|
| Channel | Κανάλι Διανομής | Κατηγορική | Retail, Horeca (Hotel/Restaurant/Cafe) |
|
| Region | Γεωγραφική Περιοχή | Κατηγορική | Other, Lisbon, Porto |
|
| Fresh | Ετήσια δαπάνη σε νωπά προϊόντα | Αριθμητική | 3 - 112151 | Χρηματικές Μονάδες |
| Milk | Ετήσια δαπάνη σε γαλακτοκομικά προϊόντα | Αριθμητική | 55 - 73498 | Χρηματικές Μονάδες |
| Grocery | Ετήσια δαπάνη σε είδη παντοπωλείου | Αριθμητική | 3 - 92780 | Χρηματικές Μονάδες |
| Frozen | Ετήσια δαπάνη σε κατεψυγμένα προϊόντα | Αριθμητική | 25 - 60869 | Χρηματικές Μονάδες |
| Detergents_Paper | Ετήσια δαπάνη σε απορρυπαντικά και χάρινα προϊόντα | Αριθμητική | 3 - 40827 | Χρηματικές Μονάδες |
| Delicassen | Ετήσια δαπάνη σε εκλεκτά προϊόντα | Αριθμητική | 3 - 47943 | Χρηματικές Μονάδες |
Παρατηρούμε πως το dataset δεν έχει missing values, αλλά ούτε και διπλότυπες εγγραφές.
Ελλιπείς Τιμές
cat(sum(is.na(customers)))
## 0
Διπλότυπες Εγγραφές
cat(sum(duplicated(customers)))
## 0
| Metrics | Fresh | Milk | Grocery | Frozen | Detergents_Paper | Delicassen |
|---|---|---|---|---|---|---|
| 1st Qu. | 3127.75 | 1533.000 | 2153.000 | 742.250 | 256.750 | 408.25 |
| Median | 8504.00 | 3627.000 | 4755.500 | 1526.000 | 816.500 | 965.50 |
| Mean | 12000.30 | 5796.266 | 7951.277 | 3071.932 | 2881.493 | 1524.87 |
| 3rd Qu. | 16933.75 | 7190.250 | 10655.750 | 3554.250 | 3922.000 | 1820.25 |
ggplot(customers, aes(x = Milk, y = Grocery, color = Channel)) +
geom_point(alpha = 0.7) +
scale_x_log10() + scale_y_log10() +
labs(title = "Milk vs Grocery κατά Channel", x = "Milk (log)", y = "Grocery (log)")
Σχόλιο
Παρατηρείται ότι οι ελεύθεροι
επαγγελματίες (λιανικό εμπόριο) τείνουν να έχουν
υψηλότερες δαπάνες σε αγορές γαλακτοκομικών προϊόντων
και σε είδη παντοπωλείου, σε σύγκριση με τους κατόχους
ξενοδοχείων/εστιατορίων/καφέ. Υπάρχει θετική συσχέτιση
μεταξύ των αγορών σε γαλακτοκομικά προϊόντα και σε είδη παντοπωλείου,
δηλαδή όσο αυξάνονται οι αγορές σε γάλα, αυξάνονται και σε είδη
παντοπωλείου. Αυτό υποδεικνύει ότι οι δύο κατηγορίες προϊόντων
αγοράζονται συχνά παράλληλα, πιθανώς για βασική
λειτουργία του καταστήματος. Φαίνεται ότι υπάρχουν περιοχές υψηλής
συγκέντρωσης σημείων, κυρίως γύρω από μεσαίες τιμές σε Milk και Grocery.
Αυτό αφήνει υποσχέσεις ότι μπορεί να υπάρχουν φυσικά clusters τα οποία
μπορούν να αποκαλυφθούν με συσταδοποίηση.
ggplot(customers, aes(x = Region, y = Fresh, fill = Region)) +
geom_boxplot() +
labs(title = "Fresh ανά Region", y = "Fresh (log)", x = "") +
theme_minimal()
Σχόλιο
Η μεταβλητή Fresh παρουσιάζει
μεγάλη διασπορά και στις τρεις περιοχές, κάτι που
φαίνεται από το μεγάλο εύρος των boxplots και τις πολλές ακραίες τιμές.
Οι διάμεσοι των τριών περιοχών είναι σχετικά παρόμοιες, γεγονός που
δείχνει ότι η τοποθεσία δεν είναι καθοριστικός παράγοντας για τη
μέση αγορά νωπών προϊόντων. Συνεπώς η μεταβλητή Region
ενδέχεται να μην αποτελεί πρωτεύοντα διαχωριστικό παράγοντα για συστάδες
με βάση το Fresh. Ωστόσο, αν συνδυαστεί με άλλες μεταβλητές μπορεί να
δώσει χρήσιμη πληροφορία.
ggplot(customers, aes(x = Region, y = Frozen, fill = Region)) +
geom_col() +
labs(title = "Frozen ανά Region", y = "Frozen", x = "") +
theme_minimal()
Σχόλιο
Η κατηγορία Other συγκεντρώνει τις
υψηλότερες συνολικές δαπάνες σε κατεψυγμένα προϊόντα,
πιθανότατα λόγω του μεγαλύτερου αριθμού πελατών και περιοχών που
περιλαμβάνει, σε σχέση με τη Λισαβόνα και το Πόρτο. Οι δύο μεγάλες
πόλεις παρουσιάζουν παρόμοιες, αλλά αισθητά χαμηλότερες τιμές. Ωστόσο,
επειδή το διάγραμμα βασίζεται σε αθροιστικά ποσά, δεν αποτυπώνει την
κατανάλωση ανά πελάτη.
Προκειμένου να εφαρμόσουμε clustering στο dataset μας, πρέπει να κανονικοποιήσουμε τα δεδομένα ώστε να έχουν μέσο όρο 0 και τυπική απόκλιση 1. Με τον τρόπο αυτό, και έχοντας αφαιρέσει τις κατηγορικές μεταβλητές, όλες οι αριθμητικές μεταβλητές παίρνουν την ίδια κλίμακα και αυτές με μεγάλο εύρος δεν μπορούν πλέον να επηρεάσουν υπερβολικά τα αποτελέσματα.
customers_numeric <- subset(customers, select = -c(Region, Channel))
customers_scaled <- scale(customers_numeric)
distances <- dist(customers_scaled, method = "euclidean")
clusterCustomers <- hclust(distances, method = "ward.D2")
Σχόλια
Υπολογίζουμε τις αποστάσεις μεταξύ όλων
των παρατηρήσεων στο dataset, αξιοποιώντας την ευκλείδεια απόσταση. Η
μέθοδος ward χρησιμοποιείται για να υπολογίσουμε απόσταση μεταξύ των
κέντρων των συστάδων.
plot(clusterCustomers, labels = FALSE, main = "Hierarchical Clustering Dendrogram")
Σχόλιο
Το δενδροδιάγραμμα δείχνει τη διαδικασία
συγχώνευσης των datapoints σε ομάδες. Κάθε κατακόρυφη γραμμή αντιστοιχεί
στην απόσταση συγχώνευσης δύο clusters και όσο μεγαλύτερο είναι το ύψος,
τόσο μεγαλύτερη η διαφορά μεταξύ των ομάδων που συγχωνεύονται. Θα πρέπει
να κόψουμε το δέντρο σε ένα σημείο όπου οι συνδέσεις μεταξύ ομάδων είναι
μεγάλες, ώστε να βρούμε διακριτά clusters.
Δοκιμάζοντας διάφορες τιμές του k, καταλήγουμε στο συμπέρασμα ότι η βέλτιστη τιμή είναι 3, καθώς για k > 3 παρατηρούμε επικαλυπτόμενα clusters, ενώ για k = 2 έχουμε άνιση κατανομή των datapoints.
clusterGroups = cutree(clusterCustomers, k=3)
plot(clusterCustomers, labels = FALSE, main = "Hierarchical Clustering Cutted Dendrogram")
rect.hclust(clusterCustomers, k = 3, border = "red")
Σχόλιο
Στο κόκκινο πλαίσιο διακρίνεται ο
διαχώρισμος των τριών clusters.
Προσθέτουμε τα cluster που δημιουργήσαμε στο αρχικό dataset, σαν κατηγορική μεταβλητή και υπολογίζουμε τον μέσο όρο κάθε μεταβλητής ανά cluster.
customers$HC_Cluster <- factor(clusterGroups)
agg_means <- aggregate(customers_numeric, by = list(Cluster = customers$HC_Cluster), mean)
| Cluster | Fresh | Milk | Grocery | Frozen | Detergents_Paper | Delicassen |
|---|---|---|---|---|---|---|
| 1 | 5794.242 | 9419.889 | 13761.739 | 1461.765 | 5913.3791 | 1577.608 |
| 2 | 15048.932 | 3017.299 | 3791.762 | 3837.317 | 758.0071 | 1309.900 |
| 3 | 27477.000 | 43542.167 | 54588.500 | 8285.667 | 25018.3333 | 10247.833 |
Σχόλια
Οι τιμές στα Cluster 1 και 2 είναι
παρόμοιες και κινούνται σε χαμηλότερα επίπεδα από αυτές του Cluster 3.
Συνεπώς, μπορούμε να υποθέσουμε ότι στα 2 πρώτα Cluster
κατηγοριοποιήθηκαν καθημερινοί αγοραστές και μικρομεσαίες επιχειρήσεις.
Αντίστοιχα στο τρίτο Cluster, με τις υψηλότερες δαπάνες, εντάσσονται
μεγαλύτερες επιχειρήσεις και περισσότερες αγορές.
Σχόλια
Η μέθοδος της ιεραρχικής συσταδοποίησης
παρουσιάζει 2 πολυπληθείς και συμπαγείς ομάδες, οι οποίες ωστόσο σε
κάποια σημεία επικαλύπτονται μεταξύ τους. Το cluster 3, που είχε και τις
μεγαλύτερες δαπάνες, αποτελεί μία πολύ μικρή ομάδα (πιθανώς outliers),
με τα σημεία του να βρίσκονται απομονωμένα.
set.seed(123)
kmeans_model <- kmeans(customers_scaled, centers = 3, nstart = 25)
Σχόλια
Η μέθοδος k-means τοποθετεί τυχαία 3
αρχικά κέντρα και επαναλαμβάνει μετακινήσεις σημείων μεταξύ clusters
μέχρι να ελαχιστοποιηθεί η ενδοομαδική διακύμανση. Με το nstart = 25
εκτελούμε την αλγοριθμική διαδικασία από 25 διαφορετικά σημεία εκκίνησης
ώστε να βρούμε το βέλτιστο αποτέλεσμα.
Προσθέτουμε τα cluster που δημιουργήσαμε στο αρχικό dataset, σαν κατηγορική μεταβλητή και υπολογίζουμε τον μέσο όρο κάθε μεταβλητής ανά cluster.
customers$KM_Cluster <- factor(kmeans_model$cluster)
agg_means_km <- aggregate(customers_numeric, by = list(Cluster = customers$KM_Cluster), mean)
| Cluster | Fresh | Milk | Grocery | Frozen | Detergents_Paper | Delicassen |
|---|---|---|---|---|---|---|
| 1 | 8129.341 | 19153.682 | 28894.909 | 1859.455 | 13518.25 | 2233.841 |
| 2 | 60571.667 | 30120.333 | 17314.667 | 38049.333 | 2153.00 | 20700.667 |
| 3 | 12062.913 | 4115.099 | 5534.967 | 2940.677 | 1696.17 | 1299.115 |
Σχόλια
Οι τιμές στα Cluster 1 και 3 είναι
παρόμοιες και κινούνται σε χαμηλότερα επίπεδα από αυτές του Cluster 2.
Συνεπώς, μπορούμε να υποθέσουμε ότι σε αυτά τα Cluster
κατηγοριοποιήθηκαν καθημερινοί αγοραστές και μικρομεσαίες επιχειρήσεις.
Αντίστοιχα στο δεύτερο Cluster, με τις υψηλότερες δαπάνες, εντάσσονται
μεγαλύτερες επιχειρήσεις και περισσότερες αγορές.
Σχόλια
Η μέθοδος K-means παρουσιάζει 3
διαφορετικές ομάδες στον διαχωρισμό των datapoints. Η πρώτη ομάδα έχει
αρκετά σημεία διάσπαρτα στον χώρο, κάτι που συμβαίνει και στην δεύτερη
ομάδα, η οποία ωστόσο είναι πολύ μικρή και πιθανό να αντιπροσωπεύει
outliers. Το τρίτο cluster αποτελεί την μεγαλύτερη και πιο συμπαγής
ομάδα και βρίσκεται κυρίως στο πάνω δεξιά τεταρτημόριο.
Και τα δύο μοντέλα κατηγοριοποιούν τα Cluster τους με παρόμοιο τρόπο, δηλαδή τοποθετούν τις μικρομεσαίες επιχειρήσεις και τους καθημερινούς αγοραστές, με μικρότερο μέσο όρο δαπανών, σε 2 clusters. Επιπλέον, ταξινομούν τις μεγαλύτερες επιχειρήσεις, με μεγαλύτερο μέσο όρο αγορών, σε ξεχωριστό cluster.
Η μέθοδος της ιεραρχικής συσταδοποίησης εντόπισε καλά διαχωρισμένα clusters με λογική ερμηνεία, ωστόσο επειδή είναι ευαίσθητη σε outliers, παρατηρείται επικάλυψη των clusters σε κάποια datapoints. Αντίθετα η μέδοθος K-means διαχωρίζει πιο ξεκάθαρα τις ακραίες τιμές σε ξεχωριστό cluster και αποφεύγει τις επικαλύψεις των datapoints μεταξύ των clusters, παράγοντας πιο συμπαγής ομάδες με καθαρά centroids.
Γενικότερα, η μέθοδος της ιεραρχικής συσταδοποίησης είναι χρήσιμη για την αρχική διερεύνηση ενός dataset, καθώς με το δενδρόγραμμα παρουσίαζει την φυσική δομή και τον διαχωρισμό των datapoints. Αντιθέτως, η μέθοδος K-means συνήθως προτιμάται στην ομαδοποίηση μεγάλου όγκου δεδομένων και στην λήψη πολύπλοκων επιχειρηματικών αποφάσεων, λόγω της ευκολίας χρήσης και της επαναληψιμότητας που προσφέρει.
Συνολικά, ο συνδυασμός των δύο τεχνικών θεωρείται καλή πρακτική, δηλαδή πρώτα συστήνεται η ιεραρχική ανάλυση για την κατανόηση του dataset και την εκτίμηση του κατάλληλου k και στη συνέχεια η εφαρμογή του K-means για πιο σταθερή και παραγωγική ομαδοποίηση.