Mall Customers - Clustering

2026-04-26

Michail Ioannidis

# Φόρτωση βιβλιοθηκών
library(cluster)
## Warning: package 'cluster' was built under R version 4.5.3
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.5.3
## Loading required package: ggplot2
## Welcome to factoextra!
## Want to learn more? See two factoextra-related books at https://www.datanovia.com/en/product/practical-guide-to-principal-component-methods-in-r/
# Φόρτωση δεδομένων
df <- read.csv("Mall_Customers.csv")

Σχολιασμός - Περιγραφή Dataset

Το συγκεκριμένο σύνολο δεδομένων αφορά δεδομένα πελατών ενός εμπορικού κέντρου και χρησιμοποιείται για την τμηματοποίηση της αγοράς. Το dataset περιέχει 200 εγγραφές, με στήλες που περιγράφουν τα δημογραφικά και αγοραστικά χαρακτηριστικά των πελατών. Παρακάτω, υπάρχει μια μικρή περιγραφή για την κάθε στήλη ξεχωριστά, καθώς και σε παρένθεση ο τύπος μεταβλητής κάθε μίας:

  1. CustomerID: Μοναδικός κωδικός για κάθε πελάτη (int)

  2. Genre: Το φύλο του πελάτη (Male/Female) (chr/factor)

  3. Age: Η ηλικία του πελάτη σε έτη (int)

  4. Annual Income (k$): Το ετήσιο εισόδημα του πελάτη σε χιλιάδες δολάρια (int)

  5. Spending Score (1-100): Ένας δείκτης που αποδίδει το εμπορικό κέντρο βάσει της καταναλωτικής συμπεριφοράς (int)

##Στόχος της Συσταδοποίησης:

Η συσταδοποίηση αποτελεί μέθοδο μη επιβλεπόμενης μάθησης, η οποία επιτρέπει την ανακάλυψη κρυφών δομών στα δεδομένα χωρίς τη χρήση προκαθορισμένων κατηγοριών. Ο βασικός στόχος της συσταδοποίησης στο συγκεκριμένο σύνολο δεδομένων είναι η αναγνώριση διακριτών ομάδων πελατών με παρόμοια χαρακτηριστικά. Αναλύοντας μεταβλητές όπως η ηλικία, το ετήσιο εισόδημα και ο δείκτης καταναλωτικής συμπεριφοράς (spending score), οι επιχειρήσεις μπορούν να κατανοήσουν διαφορετικά προφίλ καταναλωτών. Αυτό επιτρέπει την ανάπτυξη στοχευμένων στρατηγικών μάρκετινγκ, όπως προγράμματα επιβράβευσης για πελάτες με υψηλή κατανάλωση ή προσφορές για πελάτες με χαμηλό εισόδημα αλλά υψηλή αγοραστική δραστηριότητα, με στόχο τη βελτιστοποίηση της κατανομής πόρων και την ενίσχυση της αλληλεπίδρασης με τους πελάτες.

Περιγραφή των μεταβλητών (τύπος, εύρος τιμών, μονάδες μέτρησης)

Παρακάτω, εξτάζεται η δομή των δεδομένων. Φαίνονται επίσης κάποιες μετρικές όπως min, max, mean, κτλ. Τέλος, εμφανίζονται ενδεικτικά οι 5 πρώτες γραμμές της βάσης

# Εμφάνιση δομής, περιληπτικών στατιστικών και πρώτων γραμμών
str(df)
## 'data.frame':    200 obs. of  5 variables:
##  $ CustomerID            : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Genre                 : chr  "Male" "Male" "Female" "Female" ...
##  $ Age                   : int  19 21 20 23 31 22 35 23 64 30 ...
##  $ Annual.Income..k..    : int  15 15 16 16 17 17 18 18 19 19 ...
##  $ Spending.Score..1.100.: int  39 81 6 77 40 76 6 94 3 72 ...
summary(df)
##    CustomerID        Genre                Age        Annual.Income..k..
##  Min.   :  1.00   Length:200         Min.   :18.00   Min.   : 15.00    
##  1st Qu.: 50.75   Class :character   1st Qu.:28.75   1st Qu.: 41.50    
##  Median :100.50   Mode  :character   Median :36.00   Median : 61.50    
##  Mean   :100.50                      Mean   :38.85   Mean   : 60.56    
##  3rd Qu.:150.25                      3rd Qu.:49.00   3rd Qu.: 78.00    
##  Max.   :200.00                      Max.   :70.00   Max.   :137.00    
##  Spending.Score..1.100.
##  Min.   : 1.00         
##  1st Qu.:34.75         
##  Median :50.00         
##  Mean   :50.20         
##  3rd Qu.:73.00         
##  Max.   :99.00
head(df)
##   CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100.
## 1          1   Male  19                 15                     39
## 2          2   Male  21                 15                     81
## 3          3 Female  20                 16                      6
## 4          4 Female  23                 16                     77
## 5          5 Female  31                 17                     40
## 6          6 Female  22                 17                     76

Προετοιμασία Δεδομένων

Για τη συσταδοποίηση, θα εστιάσουμε στο Ετήσιο Εισόδημα και το Σκορ Κατανάλωσης, που περιγράφουν και την οικονομική συμπεριφορά του πελάτη. Είναι απαραίτητο να κανονικοποιήσουμε (scale) τα δεδομένα ώστε οι μεταβλητές να έχουν το ίδιο βάρος.

# Επιλογή στηλών 4 και 5 (Income, Spending Score)
data_cluster <- df[, 4:5]

# Κανονικοποίηση
data_scaled <- scale(data_cluster)

Ιεραρχική Συσταδοποίηση

Χρησιμοποιούμε την Ευκλείδεια απόσταση και τη μέθοδο Ward για τη δημιουργία του δενδρογράμματος.

# Υπολογισμός αποστάσεων
dist_matrix <- dist(data_scaled, method = "euclidean")

# Δημιουργία μοντέλου
hc_model <- hclust(dist_matrix, method = "ward.D2")

# Σχεδίαση Δενδρογράμματος
plot(hc_model, main = "Δενδρόγραμμα Πελατών", xlab = "Πελάτες", sub = "")
rect.hclust(hc_model, k = 5, border = 2:6)

Η ανάλυση εδώ αναδεικνύει 5 διαφορετικές ομάδες, όπως ορίσαμε.

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

Για να επιβεβαιώσουμε τον βέλτιστο αριθμό συστάδων (K), χρησιμοποιούμε τη μέθοδο “Elbow”.

fviz_nbclust(data_scaled, kmeans, method = "wss") +
  labs(subtitle = "Elbow Method")

Η ανάλυση υπέδειξε ως βέλτιστο αριθμό συστάδων το k = 5, καθώς σε αυτό το σημείο ελαχιστοποιείται η εσωτερική διασπορά των ομάδων χωρίς να δημιουργείται υπερβολική πολυπλοκότητα. Παρακάτω, εφαρμόζεται ο K-means με k=5.

set.seed(123)
km_res <- kmeans(data_scaled, centers = 5, nstart = 25)

# Οπτικοποίηση συστάδων
fviz_cluster(km_res, data = data_scaled,
             palette = "jco",
             ggtheme = theme_minimal(),
             main = "K-means Clustering (k=5)")

Εδώ φαίνεται με την οπτικοποίηση η τελική τμηματοποίηση, επιτρέποντας τον διαχωρισμό των πελατών σε πέντε ευδιάκριτα προφίλ αγοραστικής συμπεριφοράς. Η απουσία σημαντικών επικαλύψεων μεταξύ των συστάδων στο τελικό Cluster Plot υπογραμμίζει την αξιοπιστία της μεθόδου και την καταλληλότητα των μεταβλητών (Income, Spending Score) για τη συγκεκριμένη ανάλυση.

Ο διαχωρισμός των πελατών σε πέντε συστάδες βασίστηκε στην αλληλεπίδραση του Ετήσιου Εισοδήματος και του Σκορ Κατανάλωσης.

Οι Clusters 4 και 5 αντιπροσωπεύουν τους πελάτες υψηλού εισοδήματος, με τη διαφορά ότι το 4 δεν ξοδεύει πολλά, ενώ το 5 έχει υψηλά επίπεδα κατανάλωσης.

Αντίστοιχα, οι Clusters 2 και 3 αποτελούν το κομμάτι της αγοράς με χαμηλό ετήσιο εισόδημα και υψηλή κατανάλωση για το 3, ενώ δεν υπάρχει η αντίστοιχη άνεση, και χαμηλή κατανάλωση για το 2.

Το Cluster 3 αποτελεί τη μάζα των πελατών που κινούνται στον μέσο όρο. Η γεωμετρική καθαρότητα των ομάδων στο τελικό γράφημα αποδεικνύει ότι αυτές οι δύο μεταβλητές επαρκούν για μια πλήρη τμηματοποίηση της αγοράς (Market Segmentation).