Το 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() auc_val

Η ROC απεικονίζει την απόδοση για όλα τα thresholds.

Το AUC συνοψίζει τη διαχωριστική ικανότητα του μοντέλου: όσο πιο κοντά στο 1, τόσο καλύτερα.

ΣΥΜΠΕΡΑΣΜΑΤΑ

Το case study μοντελοποίησε την πιθανότητα ένα λευκό κρασί να είναι υψηλής ποιότητας (quality >= 7) χρησιμοποιώντας λογιστική παλινδρόμηση και όλα τα διαθέσιμα φυσικο