Εισαγωγή

Περιγραφή του Dataset

Το 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

Παρατηρούμε πως το 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

Διαγράμματα Συσχετίσεων

Γράφημα 1: Ετήσιες δαπάνες σε γαλακτοκομικά προϊόντα και είδη παντοπωλείου ανά κανάλι διανομής

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 τα οποία μπορούν να αποκαλυφθούν με συσταδοποίηση.

Γράφημα 2: Κατανομή των ετήσιων δαπανών σε νωπά προϊόντα ανά περιοχή

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. Ωστόσο, αν συνδυαστεί με άλλες μεταβλητές μπορεί να δώσει χρήσιμη πληροφορία.

Γράφημα 3: Κατανομή των ετήσιων δαπανών σε κατεψυγμένα προϊόντα ανά περιοχή

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:
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), με τα σημεία του να βρίσκονται απομονωμένα.

Συσταδοποίηση K-means

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:
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 για πιο σταθερή και παραγωγική ομαδοποίηση.