Διερεύνηση του συνόλου δεδομένων

Γενική Περιγραφή

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

Πηγή δεδομένων:https://www.kaggle.com/datasets/abdallahwagih/mall-customers-segmentation

Η συγκεκριμένη βάση δεδομένων συγκεντρώνει μεταβλητές που σχετίζονται με:

✅ Δημογραφικά χαρακτηριστικά (π.χ. φύλο, ηλικία)

✅ Οικονομικά στοιχεία (π.χ. ετήσιο εισόδημα)

✅ Καταναλωτική συμπεριφορά (π.χ. σκορ δαπανών – Spending Score)

Μεταβλητές του Dataset

Το dataset περιλαμβάνει 5 μεταβλητές.

Αναλυτικά παρουσιάζονται στον παρακάτω πίνακα.

Variable Description Variable_Type
CustomerID Αναγνωριστικός αριθμός πελάτη Αριθμητική
Gender Φύλο (Male/Female) Κατηγορική
Age Ηλικία πελάτη Αριθμητική
Annual Income (k$) Ετήσιο εισόδημα σε χιλιάδες δολάρια Αριθμητική
Spending Score (1-100) Βαθμολογία δαπανών (υπολογίζεται βάσει εισοδήματος και συμπεριφοράς) Αριθμητική

Διαγράμματα που σχετίζονται με τα δεδομένα του dataset

Εισάγω τα δεδομένα του dataset για επεξεργασία.

library(readr)
mall <- read.csv("Mall.csv")

Για να διευκολυνθούμε θα πρέπει να ορίσουμε περιγραφικά ονόματα στις στήλες του dataset.

colnames(mall) = c("CustomerID", "Gender", "Age", "Annual_Income", "Spending_Score")

1ο Διάγραμμα - Εισόδημα vs Spending Score (Scatterplot)

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

library(ggplot2)
ggplot(mall, aes(Annual_Income, Spending_Score)) +
  geom_point(color = "red", size = 1 , alpha = 0.7) +
  labs(title = "Σχέση Ετήσιου Εισοδήματος και Συνολικών Πόντων",
       x = "Ετήσιο Εισόδημα",
       y = "Συνολικοί Πόντοι")+theme_minimal()+theme_light()

2o Διάγραμμα - Spending Score ανά Φύλο (Boxplot)

Στο παρακάτω boxplot του spending score ανά φύλο φαίνεται ότι οι γυναίκες παρουσιάζουν μεγαλύτερη διακύμανση και ελαφρώς υψηλότερη διάμεσο σε σχέση με τους άνδρες, γεγονός που υποδηλώνει πιο ποικιλόμορφη και έντονη αγοραστική συμπεριφορά.Από την άλλη οι άνδρες φαίνεται να έχουν πιο «συγκεντρωμένες» τιμές γύρω από τη μέση τιμή, που δείχνει πιο σταθερή καταναλωτική συμπεριφορά.

library(ggplot2)
ggplot(mall, aes(Gender, Spending_Score, fill = Gender)) +
  geom_boxplot(color = "black") +
  scale_fill_manual(values = c("Male" = "skyblue", "Female" = "pink")) +
  labs(title ="Κατανομή Spending Score ανά Φύλο",
       x = "Gender",
       y = "Spending_Score")+theme_minimal()+theme_light()



Διαδικασία Συσταδοποίησης

Δεν θα χρησιμοποιήσουμε τις μεταβλητές CustomerID και Gender, επομένως μπορούμε να τις αφαιρέσουμε.

mall$CustomerID = NULL
mall$Gender = NULL
head(mall)
##   Age Annual_Income Spending_Score
## 1  19            15             39
## 2  21            15             81
## 3  20            16              6
## 4  23            16             77
## 5  31            17             40
## 6  22            17             76

Για να αφαιρέσουμε διπλές εγγραφές που τυχόν υπάρχουν στο dataset εκτελούμε την εξής εντολή:

mall = unique(mall) 
nrow(mall)
## [1] 200

Αφού ο αριθμός των εγγραφών παραμένει ίδιος αυτό μας υποδεικνύει ότι δεν υπάρχουν διπλότυπες εγγραφές.

Hierarchical Clustering στην R

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

distances = dist(mall[0:3], method = "euclidean")
head(distances)
## [1] 42.04759 33.03029 38.22303 12.20656 37.17526 36.79674

Στην συνέχεια, κάνουμε Ιεραρχική Συσταδοποίηση:

clusterCustomers = hclust(distances, method = "ward.D2") 

Δημιουργία του Δενδρογράμματος

Χρησιμοποιούμε την εντολή plot:

plot(clusterCustomers)

Παρατηρούμε στο παραπάνω δενδρόγραμμα ότι η ιεραρχική ομαδοποίηση που βασίστηκε στην ηλικία, το ετήσιο εισόδημα και το spending score ανέδειξε την παρουσία 4–5 σαφώς διακριτών ομάδων πελατών. Κάθε ομάδα χαρακτηρίζεται από ομοιότητες τόσο σε δημογραφικά στοιχεία όσο και σε καταναλωτική συμπεριφορά, γεγονός που προσφέρει σημαντικές δυνατότητες για στοχευμένο marketing και εξατομικευμένες προωθητικές ενέργειες. Το δενδρόγραμμα αποτυπώνει με σαφήνεια τη δομή αυτών των ομάδων, επιβεβαιώνοντας την ύπαρξη ξεχωριστών προφίλ στο αγοραστικό κοινό του καταστήματος.

Clustering με K-means

Επιλέγουμε 4 clusters

clusterGroups = cutree(clusterCustomers, k = 4)
tapply(mall$Age, clusterGroups, mean)
##        1        2        3        4 
## 42.82075 24.85000 32.69231 41.68571
tapply(mall$Annual_Income, clusterGroups, mean)
##        1        2        3        4 
## 48.58491 24.95000 86.53846 88.22857
tapply(mall$Spending_Score, clusterGroups, mean)
##        1        2        3        4 
## 43.50943 81.00000 82.12821 17.28571

Τι αποκαλύπτουν τα clusters στο συγκεκριμένο dataset:

Η βασική ιδέα πίσω από τη δημιουργία clusters είναι ο συνδυασμός ηλικίας, ετήσιου εισοδήματος και spending score, ώστε να εντοπιστούν ομάδες πελατών με κοινά χαρακτηριστικά και παρόμοια καταναλωτική συμπεριφορά. Μέσα από αυτή τη διαδικασία προκύπτουν διακριτά προφίλ πελατών που παρουσιάζουν ομοιότητες τόσο σε δημογραφικά στοιχεία όσο και στα αγοραστικά τους μοτίβα.

Με βάση σχετικές αναλύσεις, τα clusters περιλαμβάνουν:

Cluster Age Income Spending Interpretation
1 Μεσήλικες Μέτριο Μέτριο Κανονικοί πελάτες, με σταθερή μέση δαπάνη
2 Νέοι Χαμηλό Πολύ Υψηλό Παρά το χαμηλό εισόδημα, ξοδεύουν πολύ — πιθανόν νεαροί που ξοδεύουν ό,τι έχουν
3 Νέοι/Μεσήλικες Υψηλό Πολύ Υψηλό Πολύτιμοι πελάτες: υψηλό εισόδημα & ξοδεύουν πολύ
4 Μεσήλικες Υψηλό Πολύ Χαμηλό Παρά το υψηλό εισόδημα, ξοδεύουν πολύ λίγο — διστακτικοί, πιθανόν συντηρητικοί ή πελάτες που δεν ενδιαφέρονται

Ο συγκεκριμένος πίνακας με τα χαρακτηριστικά των clusters είναι ιδιαίτερα χρήσιμος για τη στρατηγική μάρκετινγκ και την κατανόηση της πελατειακής βάσης. Μέσω της περίληψης των μέσων όρων ηλικίας, εισοδήματος και spending score, μπορούμε να εντοπίσουμε διαφορετικά προφίλ πελατών και να προσαρμόσουμε κατάλληλα καμπάνιες, προϊόντα και προσφορές. Για παράδειγμα, πελάτες με υψηλό spending αλλά χαμηλό εισόδημα ίσως προσελκύονται από οικονομικά ή νεανικά brands, ενώ πελάτες με υψηλό εισόδημα και spending αποτελούν ιδανικούς στόχους για premium υπηρεσίες. Έτσι, ο πίνακας αποτελεί εργαλείο λήψης αποφάσεων για στοχευμένο marketing και καλύτερη αξιοποίηση των πόρων.

Τώρα, αν πάρουμε την μέση τιμή της κάθε στήλης για το cluster 1 θα έχουμε:

colMeans(subset(mall[0:3], clusterGroups == 1)) 
##            Age  Annual_Income Spending_Score 
##       42.82075       48.58491       43.50943

Συμπερασματικά,το Cluster 1 αποτελείται κυρίως από πελάτες με μέση ηλικία περίπου 43 ετών, μέσο ετήσιο εισόδημα περίπου 49 χιλιάδες δολάρια και μέση βαθμολογία δαπανών γύρω στο 43. Αυτό υποδηλώνει μια ομάδα σταθερών, τυπικών πελατών, χωρίς ακραία αγοραστική συμπεριφορά, που πιθανότατα αντιπροσωπεύει τον «μέσο» πελάτη του καταστήματος.