Το σύνολο δεδομένων προέρχεται από τη βάση δεδομένων του video game FIFA 19 (Πηγή: Kaggle). Παρόλο που πρόκειται για ψηφιακές αξιολογήσεις, τα δεδομένα αποτελούν μια λεπτομερή προσομοίωση των ικανοτήτων των παικτών σε παγκόσμιο επίπεδο, καθώς βασίζονται σε πραγματικό scouting της EA Sports.
Περιλαμβάνει πάνω από 18.000 παρατηρήσεις, γεγονός που το καθιστά ιδανικό για εκπαίδευση.
Overall (Εξαρτημένη Μεταβλητή): Η τρέχουσα συνολική αξιολόγηση του παίκτη. Είναι ο δείκτης που θέλουμε να προβλέψουμε.
Reactions (Αντιδράσεις): Πνευματικό χαρακτηριστικό που δείχνει πόσο γρήγορα ανταποκρίνεται ο παίκτης σε μια φάση. Θεωρείται η πιο κρίσιμη μεταβλητή στο παιχνίδι.
Potential (Προοπτική): Η μέγιστη βαθμολογία που μπορεί να φτάσει ο παίκτης.
BallControl & ShortPassing: Τεχνικές δεξιότητες που ορίζουν την ποιότητα ενός παίκτη στο σύγχρονο ποδόσφαιρο.
Age: Η ηλικία, η οποία επηρεάζει την απόδοση.
Η Πρόβλεψη: Στόχος είναι η δημιουργία ενός μοντέλου που θα λειτουργεί ως “Αυτόματος Σκάουτερ”. Το μοντέλο θα μπορεί να εκτιμήσει αν η συνολική βαθμολογία (Overall) ενός παίκτη δικαιολογείται από τα επιμέρους τεχνικά χαρακτηριστικά του ή αν υπάρχουν υποτιμημένοι/υπερτιμημένοι παίκτες στην αγορά.
library(readr)
library(dplyr)
library(caret)
# 1. Εισαγωγή Δεδομένων
fifa_data <- read.csv("fifa_eda_stats.csv")
# 2. Καθαρισμός και Επιλογή Στρατηγικών Μεταβλητών
analysis_data <- fifa_data %>%
select(Name, Overall, Age, Potential, Reactions, BallControl, ShortPassing, Finishing) %>%
na.omit()
# 3. Διαχωρισμός σε Train και Test Set (80% - 20%)
set.seed(123)
train_index <- createDataPartition(analysis_data$Overall, p = 0.8, list = FALSE)
train_set <- analysis_data[train_index, ]
test_set <- analysis_data[-train_index, ]
# Εμφάνιση των πρώτων εγγραφών
head(train_set)
## Name Overall Age Potential Reactions BallControl ShortPassing
## 1 L. Messi 94 31 94 95 96 90
## 2 Cristiano Ronaldo 94 33 94 96 94 81
## 4 De Gea 91 27 93 90 42 50
## 5 K. De Bruyne 91 27 92 91 91 92
## 7 L. Modrić 91 32 91 90 93 93
## 9 Sergio Ramos 91 32 91 85 84 78
## Finishing
## 1 95
## 2 94
## 4 13
## 5 82
## 7 72
## 9 60
Overall Rating: Η μέση τιμή (66.25) και η διάμεσος (66.00) συμπίπτουν, υποδηλώνοντας συμμετρική κατανομή, ιδανική για γραμμική παλινδρόμηση.
Age: Με μέσο όρο τα 25 έτη και εύρος 16-45, το δείγμα καλύπτει όλο το φάσμα της ποδοσφαιρικής ωριμότητας.
Reactions: Η μεγάλη διακύμανση (21-96) καθιστά τις αντιδράσεις έναν δυνητικά ισχυρό προβλεπτικό παράγοντα για το μοντέλο.
Τεχνικά Χαρακτηριστικά: Η εγγύτητα των τιμών σε BallControl (58.3) και ShortPassing (58.64) δείχνει ισχυρή συσχέτιση μεταξύ τους.
Finishing: Ο χαμηλός μέσος όρος (45.45) οφείλεται στην ύπαρξη αμυντικών παικτών στο δείγμα με περιορισμένες επιθετικές ικανότητες.
Σε αυτό το στάδιο, δημιουργούμε διαγράμματα για να επιβεβαιώσουμε οπτικά τη σχέση των ανεξάρτητων μεταβλητών με την εξαρτημένη (Overall).
Η μεταβλητή Reactions θεωρείται η πιο κρίσιμη για την
πρόβλεψη του Overall.
library(ggplot2)
# Scatterplot με γραμμή παλινδρόμησης
ggplot(train_set, aes(x = Reactions, y = Overall)) +
geom_point(alpha = 0.2, color = "darkblue") +
geom_smooth(method = "lm", color = "red") +
labs(title = "Σχέση Αντιδράσεων (Reactions) και Συνολικής Βαθμολογίας",
x = "Reactions",
y = "Overall Rating") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Ισχυρή Γραμμική Σχέση: Παρατηρούμε μια ξεκάθαρη θετική συσχέτιση μεταξύ των Αντιδράσεων (Reactions) και της Συνολικής Βαθμολογίας (Overall). Όσο αυξάνεται η ικανότητα αντίδρασης, τόσο αυξάνεται γραμμικά και η αξιολόγηση του παίκτη.
Πυκνότητα Δεδομένων: Η μεγάλη συγκέντρωση των σημείων (σκούρο μπλε χρώμα) γύρω από την κόκκινη γραμμή παλινδρόμησης υποδηλώνει ότι οι Αντιδράσεις αποτελούν έναν εξαιρετικά αξιόπιστο προβλεπτικό παράγοντα.
Ερμηνεία Μοντέλου: Η κόκκινη γραμμή αντιπροσωπεύει το «ιδανικό» μοντέλο. Παίκτες που βρίσκονται πολύ πάνω από τη γραμμή θεωρούνται «υποτιμημένοι» βάσει αντιδράσεων, ενώ όσοι βρίσκονται κάτω από αυτήν «υπερτιμημένοι».
Εξετάζουμε πώς διακυμαίνεται η συνολική βαθμολογία ανάλογα με την ηλικία των παικτών.
# Χρησιμοποιούμε την ηλικία ως κατηγορική μεταβλητή για το boxplot
ggplot(train_set, aes(x = as.factor(Age), y = Overall)) +
geom_boxplot(fill = "lightblue", outlier.size = 1) +
labs(title = "Διακύμανση Overall Rating ανά Ηλικία",
x = "Ηλικία",
y = "Overall Rating") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90)) # Στροφή αξόνων για να φαίνονται οι ηλικίες
Κύκλος Ζωής Αθλητή: Το διάγραμμα απεικονίζει τη σταδιακή άνοδο της μέσης αξιολόγησης (Overall) από τα 16 έως τα 28 έτη, όπου το επίπεδο των παικτών φτάνει στο “peak” του.
Σταθερότητα: Παρατηρούμε μια οριζόντια σταθερότητα στις διάμεσες τιμές από τα 28 έως τα 34 έτη, που αντιπροσωπεύει την περίοδο ακμής του ποδοσφαιριστή. Μετά τα 34, η διάμεση τιμή αρχίζει να παρουσιάζει μια μικρή πτωτική τάση.
Ακραίες Τιμές: Οι κουκκίδες πάνω από τα κουτιά αναδεικνύουν τα “super-talents” – παίκτες που, παρά το νεαρό της ηλικίας τους, έχουν ήδη πολύ υψηλή βαθμολογία, ξεχωρίζοντας από τον μέσο όρο της ηλικίας τους.
Σε αυτό το στάδιο, κατασκευάζουμε το πρώτο μας μοντέλο πρόβλεψης. Η επιλογή της Γραμμικής Παλινδρόμησης βασίζεται στην οπτική επιβεβαίωση της γραμμικότητας που ακολουθεί.
Πριν προχωρήσουμε στη δημιουργία του μοντέλου, εξετάζουμε τη σχέση μεταξύ της ανεξάρτητης μεταβλητής (Reactions) και της εξαρτημένης (Overall) μέσω ενός διαγράμματος διασποράς.
library(ggplot2)
# Διάγραμμα Scatterplot με γραμμή παλινδρόμησης
ggplot(train_set, aes(x = Reactions, y = Overall)) +
geom_point(alpha = 0.2, color = "darkblue") +
geom_smooth(method = "lm", color = "red") +
labs(title = "Σχέση Reactions και Overall (Απλή Παλινδρόμηση)",
x = "Reactions (Ανεξάρτητη)",
y = "Overall Rating (Εξαρτημένη)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Η θεωρητική εξίσωση του μοντέλου είναι: \[Overall = \beta_0 + \beta_1 \cdot Reactions + \epsilon\]
Όπου:
\(\beta_0\) (Intercept): Η σταθερά του μοντέλου (η τιμή του Overall όταν οι αντιδράσεις είναι μηδέν).
\(\beta_1\) (Slope): Ο συντελεστής κλίσης, που δείχνει τη μεταβολή του Overall για κάθε μονάδα αύξησης των Reactions.
\(\epsilon\) (Error term): Το τυχαίο σφάλμα του μοντέλου.
# Προσαρμογή του απλού μοντέλου
model_simple <- lm(Overall ~ Reactions, data = train_set)
#Εμφάνιση αποτελεσμάτων
summary(model_simple)
##
## Call:
## lm(formula = Overall ~ Reactions, data = train_set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -18.9710 -2.3175 0.1078 2.4149 13.9023
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 25.838550 0.210539 122.7 <2e-16 ***
## Reactions 0.653522 0.003369 194.0 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.652 on 14527 degrees of freedom
## Multiple R-squared: 0.7214, Adjusted R-squared: 0.7214
## F-statistic: 3.762e+04 on 1 and 14527 DF, p-value: < 2.2e-16
***). Αυτό σημαίνει
ότι οι αντιδράσεις είναι ένας στατιστικά σημαντικός
παράγοντας και η επίδρασή τους στο Overall δεν οφείλεται στην τύχη.Συμπέρασμα: Η πνευματική ετοιμότητα (Reactions) αποτελεί τον θεμέλιο λίθο της αξιολόγησης ενός παίκτη στο FIFA, καθώς καθορίζει σε τεράστιο βαθμό την τελική του εικόνα.
Σε αυτό το στάδιο, επεκτείνουμε το μοντέλο μας προσθέτοντας επιπλέον ανεξάρτητες μεταβλητές. Στόχος είναι να εξετάσουμε αν η συμπερίληψη της ηλικίας και των τεχνικών χαρακτηριστικών βελτιώνει την ακρίβεια της πρόβλεψης, μειώνοντας το συνολικό σφάλμα.
Η θεωρητική εξίσωση του πολλαπλού μοντέλου είναι: \[Overall = \beta_0 + \beta_1 \cdot Reactions + \beta_2 \cdot Age + \beta_3 \cdot BallControl + \beta_4 \cdot ShortPassing + \epsilon\]
Όπου:
\(\beta_0\) (Intercept): Η σταθερά του μοντέλου.
\(\beta_1, \beta_2, \beta_3, \beta_4\): Οι συντελεστές μερικής κλίσης για κάθε μεταβλητή (Reactions, Age, BallControl, ShortPassing αντίστοιχα).
\(\epsilon\) (Error term): Το τυχαίο σφάλμα του μοντέλου.
Ακολουθώντας τη μεθοδολογία της διάλεξης, προσαρμόζουμε το μοντέλο και υπολογίζουμε το νέο SSE για να το συγκρίνουμε με το απλό.
# Προσαρμογή του πολλαπλού μοντέλου
model_multiple <- lm(Overall ~ Reactions + Age + BallControl + ShortPassing,
data = train_set)
# Εμφάνιση αναλυτικών αποτελεσμάτων
summary(model_multiple)
##
## Call:
## lm(formula = Overall ~ Reactions + Age + BallControl + ShortPassing,
## data = train_set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -17.2634 -2.2825 0.0511 2.3463 15.4649
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 23.696024 0.218741 108.329 <2e-16 ***
## Reactions 0.569629 0.004164 136.804 <2e-16 ***
## Age 0.148492 0.007121 20.853 <2e-16 ***
## BallControl 0.010296 0.004285 2.403 0.0163 *
## ShortPassing 0.051182 0.004964 10.311 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.527 on 14524 degrees of freedom
## Multiple R-squared: 0.7403, Adjusted R-squared: 0.7402
## F-statistic: 1.035e+04 on 4 and 14524 DF, p-value: < 2.2e-16
Συμπέρασμα: Η προσθήκη της ηλικίας και των τεχνικών δεξιοτήτων προσφέρει μια πιο ολοκληρωμένη εικόνα, αν και οι Αντιδράσεις παραμένουν η κυρίαρχη μεταβλητή που καθορίζει το επίπεδο ενός παίκτη.
Σε αυτό το στάδιο, συγκρίνουμε το Απλό και το Πολλαπλό μοντέλο χρησιμοποιώντας το άθροισμα των τετραγώνων των σφαλμάτων (SSE). Το SSE μετράει τη συνολική απόκλιση των προβλέψεων από τις πραγματικές τιμές. Όσο μικρότερο είναι το SSE, τόσο ακριβέστερο είναι το μοντέλο.
# SSE για το Απλό Μοντέλο
SSE_simple <- sum(residuals(model_simple)^2)
# SSE για το Πολλαπλό Μοντέλο
SSE_multiple <- sum(residuals(model_multiple)^2)
# Εμφάνιση αποτελεσμάτων
cat("SSE Απλού Μοντέλου:", SSE_simple, "\n")
## SSE Απλού Μοντέλου: 193773.1
cat("SSE Πολλαπλού Μοντέλου:", SSE_multiple, "\n")
## SSE Πολλαπλού Μοντέλου: 180660.7
Από τους παραπάνω υπολογισμούς, παρατηρούμε τα εξής:
Η μείωση του SSE κατά περίπου 13,112 μονάδες στο πολλαπλό μοντέλο υποδηλώνει ότι η προσθήκη των μεταβλητών της ηλικίας και των τεχνικών χαρακτηριστικών (Ball Control, Short Passing) περιόρισε το συνολικό σφάλμα των προβλέψεών μας.
Συμπέρασμα: Το πολλαπλό μοντέλο υπερέχει, καθώς καταφέρνει να προσεγγίσει με μεγαλύτερη ακρίβεια τις πραγματικές τιμές του Overall Rating των παικτών, μειώνοντας την απόσταση μεταξύ των προβλέψεων και των πραγματικών δεδομένων.
Για να επιβεβαιώσουμε την αξιοπιστία του Πολλαπλού Μοντέλου, εφαρμόζουμε το μοντέλο σε νέα δεδομένα που δεν έχει δει ποτέ κατά την εκπαίδευση (test set).
# Πρόβλεψη των τιμών
predictions <- predict(model_multiple, newdata = test_set)
# Δημιουργία data frame που περιλαμβάνει και τα ονόματα (Name)
comparison_with_names <- data.frame(
Player_Name = test_set$Name,
Actual_Overall = test_set$Overall,
Predicted_Overall = round(predictions, 1)
)
# Εμφάνιση των πρώτων 10 παικτών για έλεγχο
head(comparison_with_names, 10)
## Player_Name Actual_Overall Predicted_Overall
## 3 Neymar Jr 92 86.4
## 6 E. Hazard 91 84.5
## 8 L. Suárez 91 85.8
## 12 T. Kroos 90 84.2
## 13 D. Godín 90 81.7
## 16 P. Dybala 89 81.6
## 30 L. Insigne 88 80.3
## 34 P. Aubameyang 88 82.3
## 42 G. Buffon 88 76.8
## 44 M. Icardi 87 82.1
Με την εμφάνιση των ονομάτων στο test set, μπορούμε να εξάγουμε πολύτιμα συμπεράσματα για την αξιοπιστία του μοντέλου:
# Δημιουργία δεδομένων για τη σύγκριση
sse_data <- data.frame(
Model = c("Simple Model", "Multiple Model"),
SSE = c(SSE_simple, SSE_multiple)
)
# Διάγραμμα Bar chart για το SSE
ggplot(sse_data, aes(x = Model, y = SSE, fill = Model)) +
geom_bar(stat = "identity", width = 0.5) +
geom_text(aes(label = round(SSE, 0)), vjust = -0.5) +
scale_fill_manual(values = c("gray", "steelblue")) +
labs(title = "Σύγκριση Σφαλμάτων (SSE)",
subtitle = "Η μείωση του SSE υποδηλώνει βελτίωση της ακρίβειας",
x = "Μοντέλο",
y = "Sum of Squared Errors (SSE)") +
theme_classic() +
guides(fill = "none")
# Διάγραμμα Actual vs Predicted
plot_test <- data.frame(
Actual = test_set$Overall,
Predicted = predictions
)
ggplot(plot_test, aes(x = Actual, y = Predicted)) +
geom_point(alpha = 0.2, color = "#e83e8c") + # Χρησιμοποιώ το pink χρώμα του theme σου
geom_abline(intercept = 0, slope = 1, color = "red", linetype = "dashed", linewidth = 1) +
labs(title = "Αξιολόγηση Πολλαπλού Μοντέλου: Actual vs Predicted",
x = "Πραγματικό Overall",
y = "Προβλεπόμενο Overall") +
theme_minimal()
Η στατιστική ανάλυση ολοκληρώθηκε με επιτυχία, αποδεικνύοντας τα εξής:
Κυριαρχία των Reactions: Η πνευματική ετοιμότητα είναι ο σημαντικότερος δείκτης για το Overall Rating.
Πλεονέκτημα Πολλαπλού Μοντέλου: Η προσθήκη της Ηλικίας και των Τεχνικών Δεξιοτήτων μείωσε το σφάλμα (SSE) και βελτίωσε την ακρίβεια της πρόβλεψης.
Εφαρμογή στην Πράξη: Το μοντέλο μπορεί να χρησιμοποιηθεί ως ένα πρώτο εργαλείο “Digital Scouting”, επιτρέποντας την αυτόματη αξιολόγηση παικτών με βάση τα στατιστικά τους χαρακτηριστικά.