Το dataset περιγράφει φυσικοχημικά χαρακτηριστικά λευκών κρασιών και
περιλαμβάνει τη μεταβλητή quality(βαθμολογία από ειδικούς). Στο παρόν
case study διατυπώνεται επιχειρηματικό πρόβλημα ταξινόμησης:
Στόχος: πρόβλεψη αν ένα κρασί είναι υψηλής ποιότητας (premium) ή
όχι, με βάση χημικές μετρήσεις, ώστε να υποστηριχθούν αποφάσεις
ποιοτικού ελέγχου και παραγωγής.
Ορίζουμε δυαδικό στόχο:
yes αν quality >= 7 (high quality)
no αν quality < 7
install.packages(“caTools”) library(caTools)
install.packages(“ROCR”) library(ROCR)
wine <- read.csv(“winequality-white.csv”, sep = “;”)
Δυαδικοποίηση στόχου για Logistic Regression
wine\(y <- ifelse(wine\)quality
>= 7, “yes”, “no”) wine\(y <-
factor(wine\)y, levels = c(“no”, “yes”))
Αφαιρούμε την αρχική quality από τους predictors
wine$quality <- NULL
table(wine\(y)
str(wine\)y)
Train/Test Split (65/35) με Seed 900–999
seed_val <- 937 set.seed(seed_val) split <-
sample.split(wine$y, SplitRatio = 0.65)
train <- subset(wine, split == TRUE) test <- subset(wine, split
== FALSE)
n_train <- nrow(train) n_test <- nrow(test)
n_train n_test
Μοντέλο Λογιστικής Παλινδρόμησης (όλες οι ανεξάρτητες)
fit <- glm(y ~ ., data = train, family = binomial())
summary(fit)
coef_table <- summary(fit)$coefficients coef_table <-
coef_table[order(coef_table[, “Pr(>|z|)”]), , drop = FALSE]
head(coef_table, 20)
Οι μεταβλητές με μικρό p-value (π.χ. < 0.05 ή < 0.01)
θεωρούνται στατιστικά σημαντικές ως προς τη σχέση τους με την πιθανότητα
y = yes. Ο πίνακας είναι ταξινομημένος ώστε οι πιο σημαντικές να
εμφανίζονται πρώτες.
Προβλέψεις στο Test Set
predictTest <- predict(fit, newdata = test, type = “response”)
summary(predictTest) head(predictTest, 10)
Η predict() με type=“response” στη λογιστική παλινδρόμηση επιστρέφει
για κάθε γραμμή του test την εκτιμώμενη πιθανότητα P(y=“yes” | x) ότι το
κρασί είναι υψηλής ποιότητας, με βάση τα χαρακτηριστικά του.
Threshold Classification & Confusion Matrix
pred_class <- ifelse(predictTest >= 0.5, “yes”, “no”)
pred_class <- factor(pred_class, levels = c(“no”, “yes”))
table(Predicted = pred_class, Actual = test$y)
Ο πίνακας σύγχυσης δείχνει σωστές/λάθος ταξινομήσεις για threshold =
0.5. Το threshold μπορεί να αλλάξει ανάλογα με το trade-off false
positives/false negatives.
ROC Curve & AUC (ROCR)
pred_rocr <- prediction(predictTest, test$y) perf_roc <-
performance(pred_rocr, “tpr”, “fpr”) plot(perf_roc, main = “ROC Curve -
Logistic Regression (Wine)”)
perf_auc <- performance(pred_rocr, “auc”) auc_val <-
as.numeric(perf_auc@y.values) auc_val
Η ROC απεικονίζει την απόδοση για όλα τα thresholds.
Το AUC συνοψίζει τη διαχωριστική ικανότητα του μοντέλου: όσο πιο
κοντά στο 1, τόσο καλύτερα.
ΣΥΜΠΕΡΑΣΜΑΤΑ
Το case study μοντελοποίησε την πιθανότητα ένα λευκό κρασί να είναι
υψηλής ποιότητας (quality >= 7) χρησιμοποιώντας λογιστική
παλινδρόμηση και όλα τα διαθέσιμα φυσικο