Η παρούσα μελέτη εξετάζει τη συσχέτιση διαφόρων παραγόντων με το ποσό
αγοράς (Purchase_Amount) σε περιβάλλον ηλεκτρονικού
εμπορίου. Μέσω της γραμμικής παλινδρόμησης, αναλύουμε αν και πώς
μεταβλητές όπως η πίστη στη μάρκα, η ικανοποίηση του πελάτη και άλλα
χαρακτηριστικά επηρεάζουν το ποσό που δαπανάται.
#️ Παρουσίαση του Dataset Το dataset περιλαμβάνει πληροφορίες για
πελάτες e-commerce, με δημογραφικά και αγοραστικά χαρακτηριστικά. Η
εξαρτημένη μεταβλητή είναι το Purchase_Amount.
# Φόρτωση των δεδομένων
data <- read_csv("Ecommerce_Consumer_Behavior_Analysis_Data.csv")
## Rows: 1000 Columns: 28
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (18): Customer_ID, Gender, Income_Level, Marital_Status, Education_Level...
## dbl (8): Age, Frequency_of_Purchase, Brand_Loyalty, Product_Rating, Time_Sp...
## lgl (2): Discount_Used, Customer_Loyalty_Program_Member
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Μετατροπή της στήλης Purchase_Amount σε αριθμητική
data$Purchase_Amount <- as.numeric(gsub("\\$", "", data$Purchase_Amount))
# Έλεγχος για ελλιπείς τιμές
summary(data)
## Customer_ID Age Gender Income_Level
## Length:1000 Min. :18.0 Length:1000 Length:1000
## Class :character 1st Qu.:26.0 Class :character Class :character
## Mode :character Median :34.5 Mode :character Mode :character
## Mean :34.3
## 3rd Qu.:42.0
## Max. :50.0
## Marital_Status Education_Level Occupation Location
## Length:1000 Length:1000 Length:1000 Length:1000
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Purchase_Category Purchase_Amount Frequency_of_Purchase Purchase_Channel
## Length:1000 Min. : 50.71 Min. : 2.000 Length:1000
## Class :character 1st Qu.:162.24 1st Qu.: 4.000 Class :character
## Mode :character Median :276.17 Median : 7.000 Mode :character
## Mean :275.06 Mean : 6.945
## 3rd Qu.:388.98 3rd Qu.:10.000
## Max. :498.33 Max. :12.000
## Brand_Loyalty Product_Rating Time_Spent_on_Product_Research(hours)
## Min. :1.000 Min. :1.000 Min. :0.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:0.000
## Median :3.000 Median :3.000 Median :1.000
## Mean :3.026 Mean :3.033 Mean :1.013
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:2.000
## Max. :5.000 Max. :5.000 Max. :2.000
## Social_Media_Influence Discount_Sensitivity Return_Rate
## Length:1000 Length:1000 Min. :0.000
## Class :character Class :character 1st Qu.:0.000
## Mode :character Mode :character Median :1.000
## Mean :0.954
## 3rd Qu.:2.000
## Max. :2.000
## Customer_Satisfaction Engagement_with_Ads Device_Used_for_Shopping
## Min. : 1.000 Length:1000 Length:1000
## 1st Qu.: 3.000 Class :character Class :character
## Median : 5.000 Mode :character Mode :character
## Mean : 5.399
## 3rd Qu.: 8.000
## Max. :10.000
## Payment_Method Time_of_Purchase Discount_Used
## Length:1000 Length:1000 Mode :logical
## Class :character Class :character FALSE:479
## Mode :character Mode :character TRUE :521
##
##
##
## Customer_Loyalty_Program_Member Purchase_Intent Shipping_Preference
## Mode :logical Length:1000 Length:1000
## FALSE:509 Class :character Class :character
## TRUE :491 Mode :character Mode :character
##
##
##
## Time_to_Decision
## Min. : 1.000
## 1st Qu.: 4.000
## Median : 8.000
## Mean : 7.547
## 3rd Qu.:11.000
## Max. :14.000
# Αφαίρεση γραμμών με NA
data_clean <- na.omit(data)
# Έλεγχος μετά την αφαίρεση
summary(data_clean)
## Customer_ID Age Gender Income_Level
## Length:1000 Min. :18.0 Length:1000 Length:1000
## Class :character 1st Qu.:26.0 Class :character Class :character
## Mode :character Median :34.5 Mode :character Mode :character
## Mean :34.3
## 3rd Qu.:42.0
## Max. :50.0
## Marital_Status Education_Level Occupation Location
## Length:1000 Length:1000 Length:1000 Length:1000
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Purchase_Category Purchase_Amount Frequency_of_Purchase Purchase_Channel
## Length:1000 Min. : 50.71 Min. : 2.000 Length:1000
## Class :character 1st Qu.:162.24 1st Qu.: 4.000 Class :character
## Mode :character Median :276.17 Median : 7.000 Mode :character
## Mean :275.06 Mean : 6.945
## 3rd Qu.:388.98 3rd Qu.:10.000
## Max. :498.33 Max. :12.000
## Brand_Loyalty Product_Rating Time_Spent_on_Product_Research(hours)
## Min. :1.000 Min. :1.000 Min. :0.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:0.000
## Median :3.000 Median :3.000 Median :1.000
## Mean :3.026 Mean :3.033 Mean :1.013
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:2.000
## Max. :5.000 Max. :5.000 Max. :2.000
## Social_Media_Influence Discount_Sensitivity Return_Rate
## Length:1000 Length:1000 Min. :0.000
## Class :character Class :character 1st Qu.:0.000
## Mode :character Mode :character Median :1.000
## Mean :0.954
## 3rd Qu.:2.000
## Max. :2.000
## Customer_Satisfaction Engagement_with_Ads Device_Used_for_Shopping
## Min. : 1.000 Length:1000 Length:1000
## 1st Qu.: 3.000 Class :character Class :character
## Median : 5.000 Mode :character Mode :character
## Mean : 5.399
## 3rd Qu.: 8.000
## Max. :10.000
## Payment_Method Time_of_Purchase Discount_Used
## Length:1000 Length:1000 Mode :logical
## Class :character Class :character FALSE:479
## Mode :character Mode :character TRUE :521
##
##
##
## Customer_Loyalty_Program_Member Purchase_Intent Shipping_Preference
## Mode :logical Length:1000 Length:1000
## FALSE:509 Class :character Class :character
## TRUE :491 Mode :character Mode :character
##
##
##
## Time_to_Decision
## Min. : 1.000
## 1st Qu.: 4.000
## Median : 8.000
## Mean : 7.547
## 3rd Qu.:11.000
## Max. :14.000
# Περιγραφική ανάλυση βασικών μεταβλητών
describe_vars <- data_clean %>% select(Purchase_Amount, Age, Brand_Loyalty, Product_Rating, `Time_Spent_on_Product_Research(hours)`, Customer_Satisfaction, Return_Rate)
describe_table <- summary(describe_vars)
describe_table
## Purchase_Amount Age Brand_Loyalty Product_Rating
## Min. : 50.71 Min. :18.0 Min. :1.000 Min. :1.000
## 1st Qu.:162.24 1st Qu.:26.0 1st Qu.:2.000 1st Qu.:2.000
## Median :276.17 Median :34.5 Median :3.000 Median :3.000
## Mean :275.06 Mean :34.3 Mean :3.026 Mean :3.033
## 3rd Qu.:388.98 3rd Qu.:42.0 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :498.33 Max. :50.0 Max. :5.000 Max. :5.000
## Time_Spent_on_Product_Research(hours) Customer_Satisfaction Return_Rate
## Min. :0.000 Min. : 1.000 Min. :0.000
## 1st Qu.:0.000 1st Qu.: 3.000 1st Qu.:0.000
## Median :1.000 Median : 5.000 Median :1.000
## Mean :1.013 Mean : 5.399 Mean :0.954
## 3rd Qu.:2.000 3rd Qu.: 8.000 3rd Qu.:2.000
## Max. :2.000 Max. :10.000 Max. :2.000
# Πίνακας συχνοτήτων για το Income_Level
income_table <- table(data_clean$Income_Level)
income_table_df <- as.data.frame(income_table)
colnames(income_table_df) <- c("Income Level", "Count")
kable(income_table_df, col.names = c("Income Level", "Count"))
| Income Level | Count |
|---|---|
| High | 515 |
| Middle | 485 |
# Histogram
ggplot(data, aes(x = Purchase_Amount)) +
geom_histogram(fill = "skyblue", bins = 30) +
labs(title = "Κατανομή Ποσού Αγοράς")
# Boxplot vs Income_Level
ggplot(data, aes(x = Income_Level, y = Purchase_Amount)) +
geom_boxplot(fill = "lightgreen") +
labs(title = "Purchase Amount ανά Εισόδημα")
# Scatter με γραμμική τάση
ggplot(data, aes(x = Brand_Loyalty, y = Purchase_Amount)) +
geom_jitter(width = 0.2, alpha = 0.5) +
geom_smooth(method = "lm", se = FALSE, color = "blue") +
labs(title = "Σχέση Brand Loyalty και Ποσού Αγοράς")
## `geom_smooth()` using formula = 'y ~ x'
model1 <- lm(Purchase_Amount ~ Brand_Loyalty, data = data)
summary(model1)
##
## Call:
## lm(formula = Purchase_Amount ~ Brand_Loyalty, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -237.584 -111.799 1.606 113.286 236.768
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 295.915 9.791 30.223 <2e-16 ***
## Brand_Loyalty -6.891 2.931 -2.351 0.0189 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 131.2 on 998 degrees of freedom
## Multiple R-squared: 0.005509, Adjusted R-squared: 0.004512
## F-statistic: 5.528 on 1 and 998 DF, p-value: 0.0189
data <- data %>% mutate(
Income_Level = factor(Income_Level),
Discount_Sensitivity = factor(Discount_Sensitivity),
Customer_Loyalty_Program_Member = as.numeric(Customer_Loyalty_Program_Member)
)
model2 <- lm(Purchase_Amount ~ Age + Brand_Loyalty + Product_Rating +
`Time_Spent_on_Product_Research(hours)` +
Customer_Satisfaction + Return_Rate +
Income_Level + Discount_Sensitivity +
Customer_Loyalty_Program_Member,
data = data)
summary(model2)
##
## Call:
## lm(formula = Purchase_Amount ~ Age + Brand_Loyalty + Product_Rating +
## `Time_Spent_on_Product_Research(hours)` + Customer_Satisfaction +
## Return_Rate + Income_Level + Discount_Sensitivity + Customer_Loyalty_Program_Member,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -246.630 -108.040 -1.215 111.836 259.597
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 318.3752 24.1764 13.169 < 2e-16
## Age -0.2705 0.4433 -0.610 0.54185
## Brand_Loyalty -6.6994 2.9298 -2.287 0.02243
## Product_Rating 1.3415 2.8951 0.463 0.64321
## `Time_Spent_on_Product_Research(hours)` -3.2217 5.2395 -0.615 0.53877
## Customer_Satisfaction -1.0070 1.4513 -0.694 0.48795
## Return_Rate -2.8771 5.1275 -0.561 0.57485
## Income_LevelMiddle -0.7129 8.3129 -0.086 0.93168
## Discount_SensitivitySomewhat Sensitive 14.2580 10.2873 1.386 0.16607
## Discount_SensitivityVery Sensitive 7.2851 10.0726 0.723 0.46969
## Customer_Loyalty_Program_Member -26.7498 8.2863 -3.228 0.00129
##
## (Intercept) ***
## Age
## Brand_Loyalty *
## Product_Rating
## `Time_Spent_on_Product_Research(hours)`
## Customer_Satisfaction
## Return_Rate
## Income_LevelMiddle
## Discount_SensitivitySomewhat Sensitive
## Discount_SensitivityVery Sensitive
## Customer_Loyalty_Program_Member **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 130.9 on 989 degrees of freedom
## Multiple R-squared: 0.01961, Adjusted R-squared: 0.009694
## F-statistic: 1.978 on 10 and 989 DF, p-value: 0.0326
# SSE
sse1 <- sum(residuals(model1)^2)
sse2 <- sum(residuals(model2)^2)
# R²
r2_1 <- summary(model1)$r.squared
r2_2 <- summary(model2)$r.squared
adj_r2_1 <- summary(model1)$adj.r.squared
adj_r2_2 <- summary(model2)$adj.r.squared
cat("Model 1 SSE:", sse1, "\n")
## Model 1 SSE: 17188414
cat("Model 2 SSE:", sse2, "\n")
## Model 2 SSE: 16944744
cat("Model 1 R²:", r2_1, ", Adjusted R²:", adj_r2_1, "\n")
## Model 1 R²: 0.005508929 , Adjusted R²: 0.004512445
cat("Model 2 R²:", r2_2, ", Adjusted R²:", adj_r2_2, "\n")
## Model 2 R²: 0.01960727 , Adjusted R²: 0.009694305
Η παρούσα ανάλυση κατέδειξε ότι: - Η μεταβλητή Brand_Loyalty έχει θετική επίδραση στο ποσό αγοράς. - Το πολλαπλό μοντέλο εξηγεί μεγαλύτερο ποσοστό της διακύμανσης (R² ↑, SSE ↓). - Μεταβλητές όπως η Customer Satisfaction και η Return Rate είναι σημαντικοί παράγοντες πρόβλεψης.
Η προσθήκη ή αφαίρεση μεταβλητών αλλάζει σημαντικά την ακρίβεια του μοντέλου, γεγονός που καταδεικνύει την ανάγκη προσεκτικής επιλογής χαρακτηριστικών.