To Online Retail Dataset κοινοποιήθηκε στις 11/5/2015 στην UC Irvine Machine Learning Repository, ένα αποθετήριο βάσεων, συνόλων δεδομένων και θεωριών πεδίων. Περιλαμβάνει τις συναλλαγές ενός διαδικτυακού καταστήματος με έδρα το Ηνωμένο Βασίλειο, που πραγματοποιήθηκαν μεταξύ 1 Δεκεμβρίου 2010 και 9 Δεκεμβρίου 2011.
Η ανάλυση των δεδομένων του Dataset μπορεί να βοηθήσει στην κατανόηση της συμπεριφοράς των πελατών, στην αναγνώριση δημοφιλών προϊόντων, στη διαχείριση αποθεμάτων και στην ανάπτυξη στρατηγικών μάρκετινγκ.
kable(stats, col.names = c("Μεταβλητή", "Περιγραφή", "Τύπος", "Εύρος", "Μονάδα Μέτρησης"), caption = "Αναλυτικός πίνακας με τα στοιχεία των μεταβλητών:")
| Μεταβλητή | Περιγραφή | Τύπος | Εύρος | Μονάδα Μέτρησης |
|---|---|---|---|---|
| InvoiceNo | Αριθμός τιμολογίου | Κατηγορική | - | - |
| StockCode | Κωδικός προϊόντος | Κατηγορική | - | - |
| Description | Περιγραφή προϊόντος | Κατηγορική | - | - |
| Quantity | Ποσότητα προϊόντος ανά συναλλαγή | Αριθμητική | 1 - 80995 | - |
| InvoiceDate | Ημερομηνία τιμολογίου | Αριθμητική | 2010-12-01 - 2011-12-09 | - |
| UnitPrice | Τιμή ανά μονάδα προϊόντος | Αριθμητική | 0.001 - 8142.75 | Pounds(£) |
| CustomerID | Αναγνωριστικό πελάτη | Αριθμητική | 12346 - 18287 | - |
| Country | Χώρα πελάτη | Κατηγορική | - | - |
Υπολογίζονται και παρουσιάζονται τα περιγραφικά στατιστικά των αριθμητικών μεταβλητών.
kable(summary(onlineRetail[, c("Quantity", "UnitPrice", "InvoiceDate")]))
| Quantity | UnitPrice | InvoiceDate | |
|---|---|---|---|
| Min. : 1.00 | Min. : 0.001 | Min. :2010-12-01 | |
| 1st Qu.: 2.00 | 1st Qu.: 1.250 | 1st Qu.:2011-04-07 | |
| Median : 6.00 | Median : 1.950 | Median :2011-07-31 | |
| Mean : 13.12 | Mean : 3.126 | Mean :2011-07-10 | |
| 3rd Qu.: 12.00 | 3rd Qu.: 3.750 | 3rd Qu.:2011-10-20 | |
| Max. :80995.00 | Max. :8142.750 | Max. :2011-12-09 |
kable(results, digits = 2, align = c("l", "l", "l"), col.names = c("Μεταβλητή", "Τυπική Απόκλιση", "Διακύμανση"))
| Μεταβλητή | Τυπική Απόκλιση | Διακύμανση |
|---|---|---|
| Quantity | 180.49 | 32577.66 |
| UnitPrice | 22.24 | 494.70 |
| InvoiceDate | 112.67 | 12694.93 |
Στο Online Retail Dataset, έχει νόημα να υπολογίσουμε μόνο την συσχέτιση μεταξύ των αριθμητικών μεταβλητών UnitPrice και Quantity, καθώς οι υπόλοιπες στήλες έχουν ποιοτικά δεδομένα.
cor(onlineRetail$UnitPrice, onlineRetail$Quantity, method = "pearson")
## [1] -0.004578314
cor(onlineRetail$UnitPrice, onlineRetail$Quantity, method = "spearman")
## [1] -0.414859
Παρατηρήσεις
Και στις δύο περιπτώσεις
παρατηρούμε πως ο συντελεστής συσχέτισης των μεταβλητών είναι αρνητικός
που σημαίνει ότι όσο αυξάνεται η Τιμή των Προϊόντων↑, τόσο
μειώνεται η Zήτηση↓ τους, καθώς οι πελάτες αναγκάζονται να τα
αγοράσουν σε μικρότερες ποσότητες. Η μέθοδος Spearman
μας δίνει μεγαλύτερο συντελεστή συσχέτισης σε σχέση με την μέθοδο
Pearson, καθώς δεν είναι ευαίσθητη σε ακραίες τιμές που
πιθανώς υπάρχουν στο Dataset.
scatterData <- subset(onlineRetail, UnitPrice < 2000 & Quantity < 5000)
ggplot(scatterData, aes(UnitPrice, Quantity)) +
geom_point(color = "blue", alpha = 0.5, size = 2) +
scale_x_continuous(name = "Unit Price (£)") +
scale_y_continuous(name = "Quantity per Order") +
theme_minimal() +
labs(title = "Scatterplot of Product Unit Prices and Quantity of each order")
Σχόλιο
Έχοντας αφαιρέσει τα outliers για
UnitPrice και Quantity, παρατηρούμε πως τα
οικονομικότερα προϊόντα έχουν μεγαλύτερη ζήτηση σε σχέση με τα
ακριβότερα, καθώς οι ποσότητες για κάθε παραγγελία αυξάνονται όσο
μειώνεται η τιμή (αρνητική συσχέτιση μεταβλητών).
boxplotData <- subset(onlineRetail, onlineRetail$Quantity < 100)
category_summary <- aggregate(Quantity ~ Description, data = boxplotData, sum)
category_summary <- category_summary[order(-category_summary$Quantity), ]
top_categories <- head(category_summary, 5)
filtered_data <- boxplotData[boxplotData$Description %in% top_categories$Description, ]
ggplot(filtered_data, aes(reorder(Description, -Quantity), Quantity)) +
geom_boxplot(fill = "cyan", outlier.color = "red", outlier.shape = 8) +
coord_flip() +
labs(
title = "Boxplot of Quantity Sold (Top 5 Product Categories)",
x = "Product Descreption",
y = "Quantity Sold"
) +
theme_minimal()
Σχόλια
Περιορίζουμε το dataset ελλατώνοντας κι
άλλο τις Ποσότητες Προϊόντων ανά παραγγελία (Quantity<100),
για να πετύχουμε ένα διακριτό αποτέλεσμα. Παρατηρώντας τις διακυμάνσεις
στις πωλήσεις των 5 κορυφαίων προϊόντων, εντοπίζουμε μεγάλη
διασπορά. Για παράδειγμα το PACK OF 72 RETROSPOT CAKE
CASES έχει τη μεγαλύτερη διασπορά και ένα από τα μεγαλύτερα box,
πράγμα που σημαίνει ότι πωλείται σε μεταβαλλόμενες
ποσότητες. Αντίθετα, το VICTORIAN GLASS HANGING T-LIGHT έχει
σχετικά μικρότερη διακύμανση, κάτι που σημαίνει ότι πωλείται σε πιο
σταθερές ποσότητες.
histData <- subset(onlineRetail, UnitPrice < 2000 & Quantity < 5000 & Country != "United Kingdom")
country_summary <- aggregate(UnitPrice ~ Country, data = histData, sum)
country_summary <- country_summary[order(-country_summary$UnitPrice), ]
top_countries <- head(country_summary, 6)
data <- histData[histData$Country %in% top_countries$Country, ]
ggplot(data, aes(UnitPrice)) +
geom_histogram(binwidth=500, fill = "orange", color = "black") +
facet_wrap(~Country, ncol = 6)+
labs(
title = "Histogram of Product Prices per Country (Top 6 / Excluding UK)",
x = "Country",
y = "Unit Price (£)"
) +
theme_minimal() +
theme(axis.text.x = element_blank())
Σχόλια
Γνωρίζοντας ότι το κατάστημα εδρεύει στο
Ηνωμένο Βασίλειο, παρατηρούμε πως η πλειοψηφία των συναλλαγών
πραγματοποιείται εντός της ίδιας χώρας. Προκειμένου να εξετάσουμε τις
εξαγωγές στις υπόλοιπες χώρες, αφαιρούμε το Ηνωμένο
Βασίλειο από τα δεδομένα. Επιπλέον, ταξινομούμε τις
τιμές των προϊόντων ανά χώρα και κρατάμε τις 6 χώρες που αγοράζουν τα
ακριβότερα προϊόντα. Από το διάγραμμα παρατηρούμε ότι οι ακριβότερες
εξαγωγές γίνονται κυρίως σε οικονομικά ισχυρές χώρες της Ευρωπαϊκής
Ένωσης. Αυτό το συμπέρασμα μπορεί να βοηθήσει το κατάστημα να στραφεί σε
αγορές, που η αγοραστική δύναμη των καταναλωτών είναι υψηλή.
onlineRetail$YearMonth <- format(onlineRetail$InvoiceDate, "%Y-%m")
sales_per_month <- aggregate(UnitPrice * Quantity ~ YearMonth, data = onlineRetail, sum)
colnames(sales_per_month) <- c("Month", "TotalSales")
ggplot(sales_per_month, aes(Month, TotalSales)) +
geom_bar(stat = "identity", fill = "steelblue") +
labs(
title = "Bar Chart Total Sales per Month",
x = "Year-Month",
y = "Total Sales (£)"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 50, hjust = 1))
Σχόλια
Το διάγραμμα παρέχει μια ετήσια συνολική
εικόνα της πορείας των πωλήσεων και βοηθά την εταιρεία να αναγνωρίζει
τις εποχικές τάσεις της αγοράς. Γενικότερα παρατηρείται μία
αύξηση στις πωλήσεις κατά την φθινοπωρινή
περίοδο του έτους και αντίστοιχα μείωση κατά τους
καλοκαιρινούς μήνες. Η απότομη μείωση των πωλήσεων τον
Δεκέμβριο του 2011 οφείλεται στην έλλειψη δεδομένων για τον μήνα αυτόν,
καθώς οι εγγραφές του dataset περιορίζονται μέχρι και τις 9/12. Η
κατανόηση των τάσεων των πωλήσεων είναι εξαιρετικά σημαντική για την
ερμηνεία της μεγάλης διασποράς στις πωλήσεις των προϊόντων και την
πρόβλεψη της μελλοντικής ζήτησης.