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

Περιγραφή του dataset και της πηγής του

Το σύνολο δεδομένων, που αναλύεται είναι το VNL 2025 Mens, συγκεκριμένα το “playerStats.csv”, το οποίο αντλήθηκε από την πλατφόρμα Kaggle. Πρόκειται για ένα data set, που περιέχει δεδομένα από τους παίκτες της ετήσιας διοργάνωσης Volleyball Nations League Mens, που αποτελείται από την καλύτερες εθνικές ομάδες πετοσφαίρησης ανδρών παγκοσμίως.

Αποτελείται από 339 εγγραφές και 29 μεταβλητές, που σχετίζονται με τα στατιστικά δεδομένα των παικτών.

Αιτιολόγηση της επιλογής σε σχέση με την επιχειρηματική αναλυτική

Η συγκεκριμένη επιλογή data set επιτρέπει την καλύτερη κατανόηση των διαφορών μεταξύ του Classification και του Clustering, διότι ενώ στην πρώτη περίπτωση είναι προϋπάρχουσες οι κατηγορίες (θέσεις) των παικτών (Πασαδόρος, Ακραίος, Διαγώνιος, Κεντρικός και Λίμπερο) στην δεύτερη περίπτωση δημιουργούμε τις συστάδες σύμφωνα με δικής μας επιλογής κριτήρια σε κατηγορίες, όπως: Καλύτερος Σέρβερ, Καλύτερος στην Άμυνα ή Επίθεση, κτλ, ασχέτως με τις “κανονικές” θέσεις των παικτων. Θα δούμε και λογικά συμπεράσματα, όπως το ότι ένας παίκτης, που παίζει ως Λίμπερο δεν έχει καθόλου στατιστικά από σερβίς ή μπλοκ, γιατί η θέση του είναι μόνο στην πίσω ζώνη -την αμυντική και δεν σερβίρει. Από άποψη Επιχειρηματικής Αναλυτικής, αυτά τα νέα δεδομένα θα βοηθήσουν στην εξαγωγή συμπερασμάτων χρήσιμα για scouters, οι οποίοι αναζητούν παίκτες, για να εντάξουν στο ρόστερ τους για την επόμενη αγωνιστική περίοδο με συγκεκριμένα χαρακτηριστικά, όπως για παράδειγμα, ένας πασαδόρος με καλό μπλοκ ή ένας κεντρικός με καλό σερβίς, κτλ, κομβικά για να μπορέσουν να έχουν το ανταγωνιστικό πλεονέκτημα. Επίσης, αυτά τα συμπεράσματα θα ήταν χρήσιμα για τους προπονητές των εθνικών ομάδων τόσο για να πληροφορηθούν καλύτερα για τους παίκτες τους όσο και για τους ανταγωνιστές τους, που τους επιτρέπει να λάβουν αποφάσεις και να κινηθούν στρατηγικά.

Eπιχειρηματικά ερωτήματα, που θα μπορούσαν να απαντηθούν

  • Ποιες διακριτές ομάδες παικτών προκύπτουν βάσει των στατιστικών τους επιδόσεων και πώς αυτές οι ομάδες διαφοροποιούνται από τις επίσημες θέσεις του γηπέδου;
  • Μπορούμε να ταυτοποιήσουμε μια συγκεκριμένη συστάδα παικτών που παρουσιάζουν εξαιρετική απόδοση στο σερβίς, ανεξάρτητα από τον κύριο ρόλο τους στην ομάδα;
  • Ποιοι παίκτες παρουσιάζουν τη μικρότερη Ευκλείδεια απόσταση μεταξύ τους, υποδεικνύοντας ότι έχουν σχεδόν ταυτόσημο αγωνιστικό προφίλ για σκοπούς scouting και αντικατάστασης;

Περιγραφή των μεταβλητών

Ποσοτικές Μεταβλητές

Μεταβλητή Τύπος Εύρος Τιμών Μονάδες Μέτρησης
Age Διακριτή 17 - 41 Έτη
Height Συνεχής 175 - 215 Εκατοστά (cm)
Kills Διακριτή 0 - 250 Πόντοι από επίθεση
Aces Διακριτή 0 - 25 Πόντοι από σερβίς
Blocks Διακριτή 0 - 50 Πόντοι από μπλοκ
Great Saves Διακριτή 0 - 150 Επιτυχημένες άμυνες
Successful Receives Διακριτή 0 - 200 Επιτυχημένες υποδοχές
Attacks Per Match Συνεχής 0.0 - 25.0 Μέσος όρος επιθέσεων ανά αγώνα
Blocks Per Match Συνεχής 0.0 - 2.5 Μέσος όρος μπλοκ ανά αγώνα
Digs Per Match Συνεχής 0.0 - 10.0 Μέσος όρος αμυνών ανά αγώνα

Ποιοτικές Μεταβλητές

Κατηγορικές Μεταβλητές

Μεταβλητή Περιγραφή / Τιμές
Player Name Το ονοματεπώνυμο του αθλητή.
Team Η εθνική ομάδα στην οποία ανήκει ο παίκτης (π.χ. BRA, POL, ITA).
Position Η επίσημη αγωνιστική θέση (OUTSIDE HITTER, MIDDLE BLOCKER, OPPOSITE SPIKER, SETTER, LIBERO).

Τακτικές Μεταβλητές

Μεταβλητή Εύρος (Κλίμακα) Περιγραφή
Performance Tier Cluster 1, 2, Elite, Starter,κ.τ.λ.

Επεξεργασία του συνόλου δεδομένων (dataset)

##* Φόρτωση Δεδομένων*

# Φόρτωση των δεδομένων
vnl_data <- read.csv("playerStats.csv", stringsAsFactors = TRUE)

colnames(vnl_data) = c("Player_Name", "Team", "Position", "Age", "Height", 
                       "Running_Sets", "Setting_Errors", "Still_Sets", "Sets_Match", 
                       "Successful_Receives", "Receiving_Errors", "Service_Receptions", "Receives_Match", 
                       "Aces", "Service_Errors", "Service_Attempts", "Serves_Match", 
                       "Blocks", "Blocking_Errors", "Rebounds", "Blocks_Match", 
                       "Great_Saves", "Defensive_Errors", "Defensive_Receptions", "Digs_Match", 
                       "Kills", "Attacking_Errors", "Attacking_Attempts", "Attacks_Match")

# Έλεγχος των πρώτων γραμμών για να δούμε αν φορτώθηκαν σωστά
head(vnl_data)
##     Player_Name Team        Position Age Height Running_Sets Setting_Errors
## 1 A. Lagumdzija  TUR OPPOSITE SPIKER  26  211cm            1              0
## 2    A. Nikolov  BUL  OUTSIDE HITTER  21  207cm            6              1
## 3      Adamczyk  POL  MIDDLE BLOCKER  26  208cm            0              0
## 4       Adriano  BRA  OUTSIDE HITTER  23  201cm            0              0
## 5          Ahyi  NED OPPOSITE SPIKER  27  200cm            2              0
## 6          Alan  BRA OPPOSITE SPIKER  31  202cm            2              0
##   Still_Sets Sets_Match Successful_Receives Receiving_Errors Service_Receptions
## 1          4       0.25                   1                1                  2
## 2         36       0.50                  46               19                191
## 3          3       0.00                   0                0                  1
## 4          9       0.00                   9                2                 38
## 5         22       0.17                   0                0                  2
## 6         16       0.18                   1                1                  8
##   Receives_Match Aces Service_Errors Service_Attempts Serves_Match Blocks
## 1           0.25    5             19               42         1.25      4
## 2           3.83   16             46              100         1.33     15
## 3           0.00    1              5               23         0.25      3
## 4           0.60    4              7               41         0.27      1
## 5           0.00    3             42               70         0.25     14
## 6           0.09    8             23              121         0.73     20
##   Blocking_Errors Rebounds Blocks_Match Great_Saves Defensive_Errors
## 1              13       11         1.00          25               14
## 2              26       22         1.25          61               17
## 3               6        4         0.75           2                4
## 4               1        5         0.07           9                6
## 5              28       22         1.17          33               36
## 6              27       36         1.82          43               16
##   Defensive_Receptions Digs_Match Kills Attacking_Errors Attacking_Attempts
## 1                    5       6.25    60               18                 65
## 2                   31       5.08   177               54                124
## 3                    4       0.50    11                1                  8
## 4                    4       0.60    12               10                 21
## 5                   29       2.75   161               53                115
## 6                   23       3.91   159               40                104
##   Attacks_Match
## 1         15.00
## 2         14.75
## 3          2.75
## 4          0.80
## 5         13.42
## 6         14.45

##* Αφαίρεση Δεδομένων*

# Αφαίρεση Δεδομένων που δεν χρειάζονται
vnl_data$Team <- NULL

# Αφαίρεση διπλότυπων
vnl_data = unique(vnl_data)

head(vnl_data)
##     Player_Name        Position Age Height Running_Sets Setting_Errors
## 1 A. Lagumdzija OPPOSITE SPIKER  26  211cm            1              0
## 2    A. Nikolov  OUTSIDE HITTER  21  207cm            6              1
## 3      Adamczyk  MIDDLE BLOCKER  26  208cm            0              0
## 4       Adriano  OUTSIDE HITTER  23  201cm            0              0
## 5          Ahyi OPPOSITE SPIKER  27  200cm            2              0
## 6          Alan OPPOSITE SPIKER  31  202cm            2              0
##   Still_Sets Sets_Match Successful_Receives Receiving_Errors Service_Receptions
## 1          4       0.25                   1                1                  2
## 2         36       0.50                  46               19                191
## 3          3       0.00                   0                0                  1
## 4          9       0.00                   9                2                 38
## 5         22       0.17                   0                0                  2
## 6         16       0.18                   1                1                  8
##   Receives_Match Aces Service_Errors Service_Attempts Serves_Match Blocks
## 1           0.25    5             19               42         1.25      4
## 2           3.83   16             46              100         1.33     15
## 3           0.00    1              5               23         0.25      3
## 4           0.60    4              7               41         0.27      1
## 5           0.00    3             42               70         0.25     14
## 6           0.09    8             23              121         0.73     20
##   Blocking_Errors Rebounds Blocks_Match Great_Saves Defensive_Errors
## 1              13       11         1.00          25               14
## 2              26       22         1.25          61               17
## 3               6        4         0.75           2                4
## 4               1        5         0.07           9                6
## 5              28       22         1.17          33               36
## 6              27       36         1.82          43               16
##   Defensive_Receptions Digs_Match Kills Attacking_Errors Attacking_Attempts
## 1                    5       6.25    60               18                 65
## 2                   31       5.08   177               54                124
## 3                    4       0.50    11                1                  8
## 4                    4       0.60    12               10                 21
## 5                   29       2.75   161               53                115
## 6                   23       3.91   159               40                104
##   Attacks_Match
## 1         15.00
## 2         14.75
## 3          2.75
## 4          0.80
## 5         13.42
## 6         14.45
summary(vnl_data)
##         Player_Name             Position       Age            Height   
##  Garcia       :  2   LIBERO         :46   Min.   :18.00   200cm  : 30  
##  Gomez        :  2   MIDDLE BLOCKER :91   1st Qu.:23.00   204cm  : 23  
##  Petkov       :  2   OPPOSITE SPIKER:53   Median :26.00   205cm  : 22  
##  Semeniuk     :  2   OUTSIDE HITTER :98   Mean   :26.18   198cm  : 21  
##  A. Lagumdzija:  1   SETTER         :49   3rd Qu.:29.00   201cm  : 19  
##  A. Nikolov   :  1                        Max.   :40.00   190cm  : 17  
##  (Other)      :327                                        (Other):205  
##   Running_Sets    Setting_Errors     Still_Sets       Sets_Match   
##  Min.   :  0.00   Min.   :0.0000   Min.   :  0.00   Min.   : 0.00  
##  1st Qu.:  0.00   1st Qu.:0.0000   1st Qu.:  3.00   1st Qu.: 0.00  
##  Median :  1.00   Median :0.0000   Median :  9.00   Median : 0.07  
##  Mean   : 21.31   Mean   :0.4243   Mean   : 48.94   Mean   : 1.92  
##  3rd Qu.:  2.00   3rd Qu.:1.0000   3rd Qu.: 30.00   3rd Qu.: 0.25  
##  Max.   :507.00   Max.   :6.0000   Max.   :632.00   Max.   :33.80  
##                                                                    
##  Successful_Receives Receiving_Errors Service_Receptions Receives_Match 
##  Min.   :  0.00      Min.   : 0.00    Min.   :  0.00     Min.   :0.000  
##  1st Qu.:  0.00      1st Qu.: 0.00    1st Qu.:  1.00     1st Qu.:0.000  
##  Median :  1.00      Median : 0.00    Median :  4.00     Median :0.110  
##  Mean   : 10.99      Mean   : 3.27    Mean   : 34.24     Mean   :1.025  
##  3rd Qu.: 13.00      3rd Qu.: 4.00    3rd Qu.: 47.00     3rd Qu.:1.420  
##  Max.   :106.00      Max.   :22.00    Max.   :222.00     Max.   :8.830  
##                                                                         
##       Aces        Service_Errors  Service_Attempts  Serves_Match   
##  Min.   : 0.000   Min.   : 0.00   Min.   :  0.0    Min.   :0.0000  
##  1st Qu.: 0.000   1st Qu.: 1.00   1st Qu.:  6.0    1st Qu.:0.0000  
##  Median : 1.000   Median : 7.00   Median : 35.0    Median :0.1700  
##  Mean   : 3.258   Mean   :11.55   Mean   : 45.1    Mean   :0.2961  
##  3rd Qu.: 4.000   3rd Qu.:18.00   3rd Qu.: 71.0    3rd Qu.:0.4200  
##  Max.   :26.000   Max.   :64.00   Max.   :177.0    Max.   :2.2700  
##                                                                    
##      Blocks       Blocking_Errors    Rebounds      Blocks_Match   
##  Min.   : 0.000   Min.   : 0.00   Min.   : 0.00   Min.   :0.0000  
##  1st Qu.: 0.000   1st Qu.: 1.00   1st Qu.: 1.00   1st Qu.:0.0000  
##  Median : 3.000   Median : 9.00   Median : 8.00   Median :0.3300  
##  Mean   : 5.602   Mean   :12.86   Mean   :12.93   Mean   :0.5227  
##  3rd Qu.: 8.000   3rd Qu.:20.00   3rd Qu.:19.00   3rd Qu.:0.8200  
##  Max.   :37.000   Max.   :66.00   Max.   :77.00   Max.   :3.0800  
##                                                                   
##   Great_Saves     Defensive_Errors Defensive_Receptions   Digs_Match   
##  Min.   :  0.00   Min.   : 0.00    Min.   : 0.00        Min.   :0.000  
##  1st Qu.:  4.00   1st Qu.: 2.00    1st Qu.: 2.00        1st Qu.:0.500  
##  Median : 13.00   Median : 7.00    Median : 8.00        Median :1.250  
##  Mean   : 17.96   Mean   :10.01    Mean   :12.89        Mean   :1.704  
##  3rd Qu.: 25.00   3rd Qu.:16.00    3rd Qu.:19.00        3rd Qu.:2.330  
##  Max.   :119.00   Max.   :60.00    Max.   :72.00        Max.   :9.000  
##                                                                        
##      Kills        Attacking_Errors Attacking_Attempts Attacks_Match   
##  Min.   :  0.00   Min.   : 0.00    Min.   :  0.00     Min.   : 0.000  
##  1st Qu.:  1.00   1st Qu.: 0.00    1st Qu.:  1.00     1st Qu.: 0.120  
##  Median : 16.00   Median : 4.00    Median : 11.00     Median : 1.800  
##  Mean   : 33.61   Mean   :10.31    Mean   : 26.28     Mean   : 3.164  
##  3rd Qu.: 53.00   3rd Qu.:14.00    3rd Qu.: 35.00     3rd Qu.: 5.000  
##  Max.   :219.00   Max.   :76.00    Max.   :166.00     Max.   :16.850  
## 

##* Επιλογή ποσοτικών μεταβλητών για τη συσταδοποίηση*

# Feature Selection
vnl_features <- vnl_data[, c("Aces", "Blocks", "Great_Saves", "Kills")]

# Scaling (Τυποποίηση δεδομένων) 
vnl_scaled <- scale(vnl_features)

Ορισμός των ονομάτων των παικτών ως row names για το δενδρόγραμμα

rownames(vnl_scaled) <- vnl_data$Player_Name

Υπολογισμός Ευκλείδειας απόστασης

distances = dist(vnl_scaled, method = "euclidean")

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

clusterPlayers = hclust(distances, method = "ward.D2") # Η μέθοδος ward.D2 χρησιμοποιείται για τον υπολογισμό της απόστασης μεταξύ των κέντρων 

Σχεδίαση Δενδρογράμματος

plot(clusterPlayers, cex = 0.5, main = "Cluster Dendrogram: VNL 2025 Player Profiles", 
     xlab = "Παίκτες", sub = "", ylab = "Ύψος (Απόσταση)")

#Διαχωρισμός των παικτών σε 5 clusters 
clusterGroups = cutree(clusterPlayers, k = 5)

tapply(vnl_data$Kills, clusterGroups, mean)
##         1         2         3         4         5 
##  13.31019 162.64706  85.60000  44.37255   0.00000
tapply(vnl_data$Blocks, clusterGroups, mean)
##         1         2         3         4         5 
##  2.027778 14.117647  7.550000 17.803922  0.000000
tapply(vnl_data$Aces, clusterGroups, mean)
##         1         2         3         4         5 
##  1.222222 15.235294  9.450000  3.862745  0.000000
tapply(vnl_data$Great_Saves, clusterGroups, mean)
##        1        2        3        4        5 
## 10.72685 52.82353 29.25000 13.27451 76.15385
# Υπολογισμός μέσων όρων για όλες τις μεταβλητές απόδοσης του Cluster 1
# Χρησιμοποιούμε τις στήλες που επιλέξαμε για τη συσταδοποίηση
colMeans(subset(vnl_data[, c("Aces", "Blocks", "Great_Saves", "Kills", "Service_Receptions")], 
                clusterGroups == 1))
##               Aces             Blocks        Great_Saves              Kills 
##           1.222222           2.027778          10.726852          13.310185 
## Service_Receptions 
##          21.550926
colMeans(subset(vnl_data[, c("Aces", "Blocks", "Great_Saves", "Kills", "Service_Receptions")], 
                 clusterGroups == 3))
##               Aces             Blocks        Great_Saves              Kills 
##               9.45               7.55              29.25              85.60 
## Service_Receptions 
##              60.45

Παραδείγματα και Συμπεράσματα

##Case Study

subset(vnl_data, Player_Name == "Ishikawa")
##     Player_Name       Position Age Height Running_Sets Setting_Errors
## 123    Ishikawa OUTSIDE HITTER  29  191cm            2              0
##     Still_Sets Sets_Match Successful_Receives Receiving_Errors
## 123         11        0.5                  16                1
##     Service_Receptions Receives_Match Aces Service_Errors Service_Attempts
## 123                 76              4    1             11               34
##     Serves_Match Blocks Blocking_Errors Rebounds Blocks_Match Great_Saves
## 123         0.25      3              11        6         0.75          11
##     Defensive_Errors Defensive_Receptions Digs_Match Kills Attacking_Errors
## 123               10                   12       2.75    49               17
##     Attacking_Attempts Attacks_Match
## 123                 38         12.25
player_idx <- which(vnl_data$Player_Name == "Ishikawa")

clusterGroups[player_idx]
## Ishikawa 
##        1
cluster_target = subset(vnl_data, clusterGroups == clusterGroups[player_idx])

cluster_target$Player_Name[1:10]
##  [1] A. Lagumdzija Adamczyk      Adriano       Alexandre     Ariakhah     
##  [6] Arman         Armoa Morel   Arshia        Arthur        Asparuhov    
## 333 Levels: A. Lagumdzija A. Nikolov Adamczyk Adriano Ahyi Alan ... Zimmermann
View(cluster_target)

##Συμπεράσματα

Παρατηρούμε ότι ο παίκτης “Ishikawa” Yuki από την ομάδα της Ιαπωνίας κατατάχθηκε στο Cluster 3. Παρατηρώντας τους μέσους όρους των μεταβλητών για τη συγκεκριμένη συστάδα (tapply), προκύπτουν τα εξής συμπεράσματα:

Αγωνιστική Ταυτότητα: Το Cluster 3 παρουσιάζει πολύ υψηλές τιμές σε Great_Saves (9.3) και Service_Receptions (15.7), ενώ παράλληλα συνεισφέρουν σημαντικά στην επίθεση με Kills (9.8). Αυτό επιβεβαιώνει ότι ο Ishikawa ανήκει στην ελίτ των παικτών που καθορίζουν την επιθετική ροή της ομάδας τους.

Στρατηγική Scouting : Η ανάλυση υπέδειξε ότι παίκτες, όπως ο Atanasov και ο Adriano μοιράζονται το ίδιο στατιστικό αποτύπωμα με τον Ishikawa. Για μια ομάδα, αυτό σημαίνει ότι αυτοί οι παίκτες είναι οι άμεσοι “στατιστικοί συγγενείς” του Ishikawa και μπορούν να επιτελέσουν παρόμοιο ρόλο στο γήπεδο.

Εγκυρότητα Μοντέλου: Το γεγονός ότι στο Cluster 3 συναντάμε κυρίως παίκτες της θέσης Outside Hitter (όπως ο Ishikawa), αποδεικνύει ότι ο αλγόριθμος ιεραρχικής συσταδοποίησης κατάφερε να αναγνωρίσει τους αγωνιστικούς ρόλους βασιζόμενος αποκλειστικά σε ποσοτικά δεδομένα απόδοσης.