dataecommerce <- read.csv("D:/Rdata/ecommerce_synthetic_dataset.csv",
                          stringsAsFactors = FALSE)
# Tạo bảng ánh xạ (mapping)
category_map <- data.frame(
  ProductName = c("Laptop", "Smartphone", "Headphones", "Shoes", "T-shirt", "Book", "Watch"),
  CorrectCategory = c("Electronics", "Electronics", "Electronics", "Apparel", "Apparel", "Books", "Accessories")
)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Kết hợp (join) để thay thế Category cũ bằng Category đúng
dataecommerce <- dataecommerce %>%
  left_join(category_map, by = "ProductName") %>%
  mutate(Category = CorrectCategory) %>%
  select(-CorrectCategory)

Bộ dữ liệu tổng hợp thương mại, điện tử

Bộ dữ liệu E-commerce synthetic gồm 100.000 bản ghi và 21 biến. Dữ liệu mô tả hành vi mua sắm trực tuyến của khách hàng, bao gồm thông tin cá nhân (tuổi, giới tính, quốc gia), thông tin sản phẩm (tên, danh mục, giá, số lượng, tổng giá trị đơn hàng), cùng các yếu tố hành vi như giảm giá, điểm đánh giá, thời lượng phiên đăng nhập và nguồn truy cập. Dữ liệu có tính đầy đủ và đa dạng, phù hợp cho các phân tích về hành vi người tiêu dùng, xây dựng mô hình dự đoán trong lĩnh vực thương mại điện tử.

1 Những thông tin cơ bản liên quan đế bộ dữ liệu

1.1 Kích thước bộ dữ liệu

library(dplyr)
# Tạo bảng ánh xạ (mapping)
category_map <- data.frame(
  ProductName = c("Laptop", "Smartphone", "Headphones", "Shoes", "T-shirt", "Book", "Watch"),
  CorrectCategory = c("Electronics", "Electronics", "Electronics", "Apparel", "Apparel", "Books", "Accessories")
)

# Kết hợp (join) để thay thế Category cũ bằng Category đúng
dataecommerce <- dataecommerce %>%
  left_join(category_map, by = "ProductName") %>%
  mutate(Category = CorrectCategory) %>%
  select(-CorrectCategory)

str(dataecommerce) #xem cấu trúc
## 'data.frame':    100000 obs. of  21 variables:
##  $ UserID            : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ UserName          : chr  "User_1" "User_2" "User_3" "User_4" ...
##  $ Age               : int  39 25 43 44 23 54 64 59 50 47 ...
##  $ Gender            : chr  "Male" "Female" "Male" "Male" ...
##  $ Country           : chr  "UK" "Canada" "Canada" "Germany" ...
##  $ SignUpDate        : chr  "2021-02-01" "2020-12-04" "2022-07-08" "2021-06-07" ...
##  $ ProductID         : int  8190 9527 3299 8795 1389 1524 4981 1847 3054 4719 ...
##  $ ProductName       : chr  "Shoes" "T-shirt" "Headphones" "T-shirt" ...
##  $ Category          : chr  "Apparel" "Apparel" "Electronics" "Apparel" ...
##  $ Price             : num  532.4 848.8 64.9 465.1 331.8 ...
##  $ PurchaseDate      : chr  "2021-02-25" "2021-09-22" "2021-11-30" "2021-10-14" ...
##  $ Quantity          : int  1 1 2 2 1 1 2 4 1 1 ...
##  $ TotalAmount       : num  532 849 130 930 332 ...
##  $ HasDiscountApplied: chr  "False" "True" "False" "False" ...
##  $ DiscountRate      : num  0.02 0.29 0.03 0.23 0.02 0.21 0.06 0.34 0.48 0.25 ...
##  $ ReviewScore       : num  5.1 5.1 3.2 4.3 5.1 4.6 3.7 3.6 4.8 5.2 ...
##  $ ReviewText        : chr  "Excellent" "Excellent" "Good" "Good" ...
##  $ LastLogin         : chr  "2024-05-03 04:04:27.591583" "2024-08-31 04:04:27.591606" "2024-07-28 04:04:27.591611" "2024-03-11 04:04:27.591615" ...
##  $ SessionDuration   : num  45 13.8 59.1 55.4 15 ...
##  $ DeviceType        : chr  "Mobile" "Mobile" "Tablet" "Desktop" ...
##  $ ReferralSource    : chr  "Social Media" "Social Media" "Organic Search" "Email Marketing" ...
head(dataecommerce, 10) #xem 10 cái đầu
##    UserID UserName Age     Gender Country SignUpDate ProductID ProductName
## 1       1   User_1  39       Male      UK 2021-02-01      8190       Shoes
## 2       2   User_2  25     Female  Canada 2020-12-04      9527     T-shirt
## 3       3   User_3  43       Male  Canada 2022-07-08      3299  Headphones
## 4       4   User_4  44       Male Germany 2021-06-07      8795     T-shirt
## 5       5   User_5  23     Female  Canada 2021-11-06      1389       Shoes
## 6       6   User_6  54       Male     USA 2021-04-04      1524  Smartphone
## 7       7   User_7  64       Male     USA 2021-07-07      4981      Laptop
## 8       8   User_8  59       Male   India 2020-08-10      1847  Headphones
## 9       9   User_9  50 Non-Binary     USA 2021-01-03      3054     T-shirt
## 10     10  User_10  47 Non-Binary      UK 2020-01-31      4719        Book
##       Category  Price PurchaseDate Quantity TotalAmount HasDiscountApplied
## 1      Apparel 532.37   2021-02-25        1      532.37              False
## 2      Apparel 848.83   2021-09-22        1      848.83               True
## 3  Electronics  64.88   2021-11-30        2      129.76              False
## 4      Apparel 465.08   2021-10-14        2      930.16              False
## 5      Apparel 331.82   2021-01-12        1      331.82              False
## 6  Electronics 939.70   2021-08-05        1      939.70              False
## 7  Electronics 692.04   2021-12-02        2     1384.08               True
## 8  Electronics 571.93   2021-05-17        4     2287.72               True
## 9      Apparel 605.22   2021-07-13        1      605.22              False
## 10       Books 250.35   2021-01-19        1      250.35               True
##    DiscountRate ReviewScore ReviewText                  LastLogin
## 1          0.02         5.1  Excellent 2024-05-03 04:04:27.591583
## 2          0.29         5.1  Excellent 2024-08-31 04:04:27.591606
## 3          0.03         3.2       Good 2024-07-28 04:04:27.591611
## 4          0.23         4.3       Good 2024-03-11 04:04:27.591615
## 5          0.02         5.1    Average 2024-07-02 04:04:27.591619
## 6          0.21         4.6       Poor 2024-09-26 04:04:27.591623
## 7          0.06         3.7       Poor 2024-04-17 04:04:27.591627
## 8          0.34         3.6  Excellent 2024-07-20 04:04:27.591631
## 9          0.48         4.8  Excellent 2024-03-19 04:04:27.591635
## 10         0.25         5.2       Good 2024-08-06 04:04:27.591640
##    SessionDuration DeviceType  ReferralSource
## 1            45.02     Mobile    Social Media
## 2            13.83     Mobile    Social Media
## 3            59.09     Tablet  Organic Search
## 4            55.42    Desktop Email Marketing
## 5            14.99     Tablet Email Marketing
## 6            37.30     Mobile    Social Media
## 7            60.09     Mobile Email Marketing
## 8           114.18    Desktop Email Marketing
## 9            24.97     Tablet    Social Media
## 10           71.17     Tablet  Organic Search
tail(dataecommerce, 10) #xem cái đuôi
##        UserID    UserName Age     Gender Country SignUpDate ProductID
## 99991   99991  User_99991  51       Male     USA 2022-08-20      4917
## 99992   99992  User_99992  60       Male      UK 2021-12-11      6618
## 99993   99993  User_99993  39 Non-Binary  Canada 2022-02-12      9197
## 99994   99994  User_99994  58 Non-Binary Germany 2022-02-14      6578
## 99995   99995  User_99995  18 Non-Binary   India 2020-10-05      5520
## 99996   99996  User_99996  25     Female      UK 2020-11-18      8401
## 99997   99997  User_99997  53 Non-Binary  Canada 2020-07-28      6555
## 99998   99998  User_99998  25       Male  Canada 2020-04-13      7686
## 99999   99999  User_99999  63     Female Germany 2022-12-23      2885
## 100000 100000 User_100000  52     Female Germany 2020-07-12      3963
##        ProductName    Category  Price PurchaseDate Quantity TotalAmount
## 99991       Laptop Electronics  45.94   2021-10-01        2       91.88
## 99992        Shoes     Apparel  23.86   2021-03-06        4       95.44
## 99993   Smartphone Electronics 541.95   2021-04-02        1      541.95
## 99994      T-shirt     Apparel 857.30   2021-09-26        1      857.30
## 99995   Headphones Electronics 932.63   2021-07-24        2     1865.26
## 99996        Shoes     Apparel 213.12   2021-11-10        1      213.12
## 99997      T-shirt     Apparel 672.12   2021-10-29        3     2016.36
## 99998       Laptop Electronics 515.35   2021-07-02        3     1546.05
## 99999        Watch Accessories 448.82   2021-09-27        2      897.64
## 100000      Laptop Electronics 117.13   2021-10-30        2      234.26
##        HasDiscountApplied DiscountRate ReviewScore ReviewText
## 99991               False         0.15         6.3       Good
## 99992                True         0.12         4.6    Average
## 99993                True         0.11         4.4       Poor
## 99994               False         0.25         4.2       Poor
## 99995               False         0.45         3.5  Excellent
## 99996                True         0.04         4.9       Poor
## 99997                True         0.42         5.4  Excellent
## 99998                True         0.21         4.0    Average
## 99999                True         0.09         2.0       Poor
## 100000              False         0.21         3.2       Good
##                         LastLogin SessionDuration DeviceType  ReferralSource
## 99991  2024-06-16 04:04:28.072357           74.74     Tablet Email Marketing
## 99992  2024-03-27 04:04:28.072361           43.98    Desktop  Organic Search
## 99993  2023-11-28 04:04:28.072365            5.81    Desktop Email Marketing
## 99994  2024-08-19 04:04:28.072369           63.29     Mobile  Organic Search
## 99995  2024-03-06 04:04:28.072373           14.48     Mobile  Organic Search
## 99996  2024-04-05 04:04:28.072377           96.64     Tablet  Organic Search
## 99997  2024-04-16 04:04:28.072381           60.98     Tablet    Social Media
## 99998  2024-08-28 04:04:28.072384           15.69     Tablet    Social Media
## 99999  2024-10-07 04:04:28.072388           28.95     Tablet  Organic Search
## 100000 2024-10-11 04:04:28.072392           68.52    Desktop  Organic Search
summary(dataecommerce) #tóm tắt thống kê cho mỗi cột 
##      UserID         UserName              Age           Gender         
##  Min.   :     1   Length:100000      Min.   :18.00   Length:100000     
##  1st Qu.: 25001   Class :character   1st Qu.:31.00   Class :character  
##  Median : 50001   Mode  :character   Median :43.00   Mode  :character  
##  Mean   : 50001                      Mean   :43.46                     
##  3rd Qu.: 75000                      3rd Qu.:56.00                     
##  Max.   :100000                      Max.   :69.00                     
##    Country           SignUpDate          ProductID    ProductName       
##  Length:100000      Length:100000      Min.   :1000   Length:100000     
##  Class :character   Class :character   1st Qu.:3228   Class :character  
##  Mode  :character   Mode  :character   Median :5520   Mode  :character  
##                                        Mean   :5508                     
##                                        3rd Qu.:7776                     
##                                        Max.   :9998                     
##    Category             Price        PurchaseDate          Quantity    
##  Length:100000      Min.   :  10.0   Length:100000      Min.   :1.000  
##  Class :character   1st Qu.: 257.1   Class :character   1st Qu.:1.000  
##  Mode  :character   Median : 505.9   Mode  :character   Median :2.000  
##                     Mean   : 505.6                      Mean   :2.496  
##                     3rd Qu.: 753.7                      3rd Qu.:4.000  
##                     Max.   :1000.0                      Max.   :4.000  
##   TotalAmount      HasDiscountApplied  DiscountRate     ReviewScore    
##  Min.   :  10.02   Length:100000      Min.   :0.0000   Min.   :-0.600  
##  1st Qu.: 494.68   Class :character   1st Qu.:0.1300   1st Qu.: 3.300  
##  Median : 966.08   Mode  :character   Median :0.2500   Median : 4.000  
##  Mean   :1260.85                      Mean   :0.2498   Mean   : 4.006  
##  3rd Qu.:1850.33                      3rd Qu.:0.3700   3rd Qu.: 4.700  
##  Max.   :3999.72                      Max.   :0.5000   Max.   : 8.600  
##   ReviewText         LastLogin         SessionDuration   DeviceType       
##  Length:100000      Length:100000      Min.   :  5.00   Length:100000     
##  Class :character   Class :character   1st Qu.: 33.72   Class :character  
##  Mode  :character   Mode  :character   Median : 62.41   Mode  :character  
##                                        Mean   : 62.41                     
##                                        3rd Qu.: 91.04                     
##                                        Max.   :120.00                     
##  ReferralSource    
##  Length:100000     
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
dim(dataecommerce)
## [1] 100000     21
names(dataecommerce) #trả về tên các cột biến 
##  [1] "UserID"             "UserName"           "Age"               
##  [4] "Gender"             "Country"            "SignUpDate"        
##  [7] "ProductID"          "ProductName"        "Category"          
## [10] "Price"              "PurchaseDate"       "Quantity"          
## [13] "TotalAmount"        "HasDiscountApplied" "DiscountRate"      
## [16] "ReviewScore"        "ReviewText"         "LastLogin"         
## [19] "SessionDuration"    "DeviceType"         "ReferralSource"

Bộ dữ liệu có 100000 quan sát và 21 biến

1.2 Tên và ý nghĩa các biến

names(dataecommerce)
##  [1] "UserID"             "UserName"           "Age"               
##  [4] "Gender"             "Country"            "SignUpDate"        
##  [7] "ProductID"          "ProductName"        "Category"          
## [10] "Price"              "PurchaseDate"       "Quantity"          
## [13] "TotalAmount"        "HasDiscountApplied" "DiscountRate"      
## [16] "ReviewScore"        "ReviewText"         "LastLogin"         
## [19] "SessionDuration"    "DeviceType"         "ReferralSource"

1.2.1 Thông tin cơ bản

-UserID : Mã định danh duy nhất cho mỗi người dùng.

-UserName : Tên người dùng mô phỏng cho mỗi người dùng.

-Age: Độ tuổi của người dùng (từ 18 đến 70).

-Gender: Giới tính của khách hàng

-Country: Quốc gia của khách hàng

-SignUpDate: Ngày đăng kí tài khoản của khách hàng

1.2.2 Thông tin sản phẩm

-ProductID: Mã định danh sản phẩm

-ProductName: Tên sản phẩm mà khách hàng mua

-Category: Danh mục sản phẩm

-Price: Giá của sản phẩm mà khách hàng mua

1.2.3 Chi tiết giao dịch

-PurchaseDate: Ngày mua sản phẩm

-Quantity: Số lượng sản phẩm mà khách hàng mua (1-4)

-TotalAmount: Tổng tiền mà khách hàng phải bỏ ra khi mua sản phẩm

-PaymentMethod: Phương thức thanh toán

1.2.4 Số liệu về mức độ tương tác của người dùng

-HasDiscountApplied: Giao dịch đó có áp dụng bất kỳ hình thức giảm giá nào hay không. (TRUE/FALSE)

-DiscountRate: Tỷ lệ chiết khấu

-ReviewScore: Điểm đánh giá sản phẩm/giao dịch do khách để lại

-ReviewText: Nội dung/nhãn đánh giá

-LastLogin: Thời điểm đăng nhập gần nhất của người dùng

-SessionDuration: Thời lượng phiên truy cập

-DeviceType: Thiết bị truy cập

-ReferralSource: Nguồn giới thiệu

1.3 Kiểu dữ liệu của các biến trong bộ

str(dataecommerce) 
## 'data.frame':    100000 obs. of  21 variables:
##  $ UserID            : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ UserName          : chr  "User_1" "User_2" "User_3" "User_4" ...
##  $ Age               : int  39 25 43 44 23 54 64 59 50 47 ...
##  $ Gender            : chr  "Male" "Female" "Male" "Male" ...
##  $ Country           : chr  "UK" "Canada" "Canada" "Germany" ...
##  $ SignUpDate        : chr  "2021-02-01" "2020-12-04" "2022-07-08" "2021-06-07" ...
##  $ ProductID         : int  8190 9527 3299 8795 1389 1524 4981 1847 3054 4719 ...
##  $ ProductName       : chr  "Shoes" "T-shirt" "Headphones" "T-shirt" ...
##  $ Category          : chr  "Apparel" "Apparel" "Electronics" "Apparel" ...
##  $ Price             : num  532.4 848.8 64.9 465.1 331.8 ...
##  $ PurchaseDate      : chr  "2021-02-25" "2021-09-22" "2021-11-30" "2021-10-14" ...
##  $ Quantity          : int  1 1 2 2 1 1 2 4 1 1 ...
##  $ TotalAmount       : num  532 849 130 930 332 ...
##  $ HasDiscountApplied: chr  "False" "True" "False" "False" ...
##  $ DiscountRate      : num  0.02 0.29 0.03 0.23 0.02 0.21 0.06 0.34 0.48 0.25 ...
##  $ ReviewScore       : num  5.1 5.1 3.2 4.3 5.1 4.6 3.7 3.6 4.8 5.2 ...
##  $ ReviewText        : chr  "Excellent" "Excellent" "Good" "Good" ...
##  $ LastLogin         : chr  "2024-05-03 04:04:27.591583" "2024-08-31 04:04:27.591606" "2024-07-28 04:04:27.591611" "2024-03-11 04:04:27.591615" ...
##  $ SessionDuration   : num  45 13.8 59.1 55.4 15 ...
##  $ DeviceType        : chr  "Mobile" "Mobile" "Tablet" "Desktop" ...
##  $ ReferralSource    : chr  "Social Media" "Social Media" "Organic Search" "Email Marketing" ...

1.4 Kiểm tra các dòng trùng lặp

sum(duplicated(dataecommerce))
## [1] 0

Vậy không có quan sát nào trùng lặp

1.5 Xem các giá trị bị thiếu của dữ liệu

colSums(is.na(dataecommerce))
##             UserID           UserName                Age             Gender 
##                  0                  0                  0                  0 
##            Country         SignUpDate          ProductID        ProductName 
##                  0                  0                  0                  0 
##           Category              Price       PurchaseDate           Quantity 
##                  0                  0                  0                  0 
##        TotalAmount HasDiscountApplied       DiscountRate        ReviewScore 
##                  0                  0                  0                  0 
##         ReviewText          LastLogin    SessionDuration         DeviceType 
##                  0                  0                  0                  0 
##     ReferralSource 
##                  0

Ta thấy cũng không có biến nào bị trùng lặp trong bộ

2 Phân tổ các biến

2.1 Nhóm tuổi khách hàng và thiết bị sử dụng để mua sắm trực tuyến

library(dplyr)
dataecommerce <- dataecommerce %>%
  mutate(AgeGroup = case_when(
    Age < 18 ~ "Dưới 18",
    Age >= 18 & Age <= 25 ~ "18-25",
    Age > 25 & Age <= 35 ~ "26-35",
    Age > 35 & Age <= 50 ~ "36-50",
    TRUE ~ "Trên 50"
  ))

table(dataecommerce$AgeGroup, dataecommerce$DeviceType)
##          
##           Desktop Mobile Tablet
##   18-25      5140   5185   5117
##   26-35      6244   6418   6531
##   36-50      9589   9730   9607
##   Trên 50   12003  12235  12201

Bảng phân tổ cho thấy số lượng người dùng có xu hướng tăng dần theo độ tuổi ở cả ba loại thiết bị. Nhóm khách hàng trên 50 tuổi chiếm tỷ trọng cao nhất với khoảng hơn 12.000 người ở mỗi thiết bị, trong khi nhóm 18-25 tuổi có số lượng thấp nhất, chỉ khoảng 5.000 người. Điều này cho thấy người tiêu dùng lớn tuổi có xu hướng sử dụng các nền tảng thương mại điện tử thường xuyên hơn, có thể do họ có thu nhập ổn định và nhu cầu mua sắm đa dạng hơn.

Xét theo loại thiết bị, Mobile là phương tiện được sử dụng nhiều nhất trong hầu hết các nhóm tuổi, phản ánh xu hướng mua sắm qua điện thoại ngày càng phổ biến. Tuy nhiên, sự chênh lệch giữa ba loại thiết bị (Desktop, Mobile, Tablet) là không lớn, cho thấy hành vi sử dụng thiết bị tương đối đồng đều và đa nền tảng.

2.2 Nhóm tuổi khách hàng và sản phẩm mua trên trực tuyến

table(dataecommerce$AgeGroup, dataecommerce$Category)
##          
##           Accessories Apparel Books Electronics
##   18-25          2206    4404  2228        6604
##   26-35          2751    5560  2743        8139
##   36-50          4102    8281  4202       12341
##   Trên 50        5228   10417  5187       15607

Bảng phân tổ cho thấy nhóm khách hàng trên 50 tuổi và 36–50 tuổi là hai nhóm có hoạt động mua sắm sôi nổi nhất, đặc biệt ở các sản phẩm điện tử và thời trang. Điều này phản ánh khả năng chi tiêu ổn định và nhu cầu cao của nhóm khách hàng có thu nhập vững.

Ngược lại, nhóm 18–25 tuổi và 26–35 tuổi có số giao dịch thấp hơn, chủ yếu tập trung vào các sản phẩm giá vừa và thấp. Nhìn chung, độ tuổi càng cao thì mức chi tiêu và tần suất mua hàng càng lớn, cho thấy doanh nghiệp nên chú trọng hơn vào nhóm khách hàng trung niên và lớn tuổi trong chiến lược tiếp thị.

2.3 Phân tổ theo khu vực và giá trị đơn hàng

library(dplyr)

dataecommerce %>%
  group_by(Country) %>%
  summarise(
    AvgPurchase = mean(TotalAmount, na.rm = TRUE),
    MedianPurchase = median(TotalAmount, na.rm = TRUE),
    Count = n()
  ) %>%
  arrange(desc(AvgPurchase))
## # A tibble: 6 × 4
##   Country   AvgPurchase MedianPurchase Count
##   <chr>           <dbl>          <dbl> <int>
## 1 UK              1266.           969. 16699
## 2 Australia       1264.           979. 16570
## 3 Canada          1263.           958. 16767
## 4 India           1261.           972. 16538
## 5 USA             1256.           962. 16844
## 6 Germany         1255.           957. 16582

Kết quả phân tổ theo quốc gia (Country) cho thấy mức chi tiêu trung bình (AvgPurchase) của khách hàng ở các nước có sự khác biệt nhẹ nhưng ổn định quanh mức 1255.20-11265.534 đơn vị tiền tệ. Trong đó, Vương quốc Anh (UK) dẫn đầu với mức chi tiêu trung bình cao nhất (≈ 1265.5), tiếp theo là Australia và Canada, trong khi Đức (Germany) có mức chi tiêu trung bình thấp nhất (≈ 1255.2).

Giá trị trung vị (MedianPurchase) cũng có xu hướng tương tự, dao động từ 956 đến 979, cho thấy phân phối chi tiêu tương đối cân đối, không có chênh lệch cực đoan giữa các nước. Bên cạnh đó, số lượng giao dịch (Count) khá đồng đều giữa các quốc gia, phản ánh quy mô dữ liệu được thu thập công bằng.

Như vậy, giả định “Khách hàng ở các đất nước khác nhau có mức chi tiêu trung bình khác nhau” được chấp nhận một phần: mặc dù có sự khác biệt nhỏ giữa các nước, xu hướng chi tiêu của người dùng nhìn chung khá đồng nhất. Điều này gợi ý rằng hành vi mua sắm trong bộ dữ liệu này ít bị chi phối bởi yếu tố quốc gia, có thể do các quốc gia đều thuộc nhóm thị trường phát triển với mức sống tương đồng.

2.4 Phân tổ theo mùa vụ

Giả định:“Mức chi tiêu của khách hàng có xu hướng tăng vào các quý cuối năm do ảnh hưởng của mùa lễ hội (Noel, Black Friday, Tết, v.v.).”

Trước khi phân tổ các mức chi tiêu theo mùa vụ,ta cần thực hiện chia thời gian thành 4 quý (quý 1, quý 2, quý 3, quý 4). Rồi sau đó thực hiện các bước tiếp theo.

library(dplyr)
library(lubridate)  # để dùng hàm quarter()
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
dataecommerce <- dataecommerce %>%
  mutate(
    Quy = case_when(
      quarter(PurchaseDate) == 1 ~ "Quy 1",
      quarter(PurchaseDate) == 2 ~ "Quy 2",
      quarter(PurchaseDate) == 3 ~ "Quy 3",
      quarter(PurchaseDate) == 4 ~ "Quy 4"
    )
  )

library(dplyr)

summary_by_quy <- dataecommerce %>%
  group_by(Quy) %>%
  summarise(
    AvgPurchase = mean(TotalAmount, na.rm = TRUE),
    MedianPurchase = median(TotalAmount, na.rm = TRUE),
    Count = n()
  ) %>%
  arrange(Quy)

summary_by_quy
## # A tibble: 4 × 4
##   Quy   AvgPurchase MedianPurchase Count
##   <chr>       <dbl>          <dbl> <int>
## 1 Quy 1       1268.           970. 24877
## 2 Quy 2       1264.           976. 24643
## 3 Quy 3       1249.           958. 25132
## 4 Quy 4       1263.           962. 25348

Kết quả thống kê cho thấy mức chi tiêu trung bình của khách hàng giữa các quý trong năm có sự dao động nhẹ, nhưng không chênh lệch đáng kể. Cụ thể, Quý 1 ghi nhận mức chi tiêu trung bình cao nhất (≈ 1.267,6 đơn vị), trong khi Quý 3 có mức thấp nhất (≈ 1.248,7 đơn vị). Các quý còn lại (Quý 2 và Quý 4) dao động quanh mức 1.263 đơn vị, phản ánh xu hướng chi tiêu tương đối ổn định trong năm.

Giá trị trung vị (MedianPurchase) cũng có sự biến động nhỏ, cao nhất ở Quý 2 (976,31) và thấp nhất ở Quý 3 (957,76), cho thấy phân phối chi tiêu giữa các quý khá đồng đều, không có sự lệch mạnh do các giao dịch bất thường.

Như vậy, giả định “Mức chi tiêu trung bình của khách hàng tăng vào các quý cuối năm” không được ủng hộ rõ ràng trong tập dữ liệu này. Thay vào đó, hành vi chi tiêu có xu hướng ổn định quanh mức trung bình, chỉ giảm nhẹ ở Quý 3, có thể do giai đoạn giữa năm ít sự kiện mua sắm lớn. Kết quả này gợi ý rằng doanh nghiệp nên tập trung kích cầu mạnh hơn vào Quý 4 (qua các chiến dịch lễ hội, ưu đãi cuối năm) để khai thác tiềm năng tăng trưởng doanh thu mùa vụ.

3 Phân tích các biến

3.1 Phân tích 1 biến

3.1.1 Phân tích biến Category

library(dplyr)
thongke_category <- dataecommerce %>%
  group_by(Category) %>%
  summarise(tan_so = n()  
  ) %>%
  mutate(tan_suat = round(tan_so / sum(tan_so) * 100, 2)
  ) %>%
  arrange(desc(tan_so))   

print(thongke_category)
## # A tibble: 4 × 3
##   Category    tan_so tan_suat
##   <chr>        <int>    <dbl>
## 1 Electronics  42691     42.7
## 2 Apparel      28662     28.7
## 3 Books        14360     14.4
## 4 Accessories  14287     14.3

Kết quả thống kê tần suất cho thấy sự chênh lệch rõ rệt giữa các nhóm sản phẩm. Nhóm Electronics có tần suất xuất hiện cao nhất với 42,691 giao dịch (chiếm khoảng 42,7%), cho thấy khách hàng có xu hướng mua sắm các sản phẩm công nghệ nhiều nhất. Tiếp đến là Apparel với 28,662 giao dịch (28,7%), phản ánh nhu cầu lớn về thời trang. Trong khi đó, Books và Accessories chỉ chiếm khoảng 14% mỗi nhóm, tương đương hơn 14,000 giao dịch, thể hiện tần suất mua sắm thấp hơn đáng kể.

Tổng thể, kết quả này chỉ ra rằng các nhóm sản phẩm điện tử và thời trang có tần suất mua sắm cao nhất, là nguồn doanh thu chính của nền tảng, trong khi sách và phụ kiện có thể là phân khúc tiềm năng cần được thúc đẩy thêm thông qua chiến lược marketing phù hợp.

3.1.2 Phân tích biến TotalAmount

library(dplyr)

summary_total <- dataecommerce %>%
  summarise(
    mean_TotalAmount = mean(TotalAmount, na.rm = TRUE),
    median_TotalAmount = median(TotalAmount, na.rm = TRUE),
    sd_TotalAmount = sd(TotalAmount, na.rm = TRUE),
    min_TotalAmount = min(TotalAmount, na.rm = TRUE),
    max_TotalAmount = max(TotalAmount, na.rm = TRUE)
  )

a1 <- as.matrix(summary_total)
a1 <- t(a1)
a2 <- as.data.frame(a1)
#3 hàng trên là để hoán đổi cột thành hàng và hàng thành cột cho dễ nhìn
colnames(a2) <- "TotalAmount"
print(a2)
##                    TotalAmount
## mean_TotalAmount     1260.8524
## median_TotalAmount    966.0800
## sd_TotalAmount        964.1002
## min_TotalAmount        10.0200
## max_TotalAmount      3999.7200

Sau khi xuất kết quả, ta thấy:

  • Số tiền trung bình cho mỗi lần mua sắm là 1.260,85, cho thấy mức chi tiêu phổ biến của khách hàng nằm ở ngưỡng trung bình khá.

  • Do trung vị đạt 966,08, chênh lệch khá lớn, chứng tỏ dữ liệu có xu hướng lệch phải - tức có một số giao dịch có giá trị rất cao kéo mức trung bình lên.

  • Độ lệch chuẩn cao (964,10) thể hiện sự chênh lệch lớn trong mức chi tiêu giữa các khách hàng. Có người mua rất ít, nhưng cũng có người mua với giá trị gấp nhiều lần trung bình.

  • Giá trị nhỏ nhất (10,02) phản ánh những đơn hàng có giá trị thấp, có thể là sản phẩm rẻ hoặc khách chỉ mua thử.

  • Giá trị cao nhất (3.999,72) cho thấy vẫn có những khách hàng chi tiêu lớn, thể hiện nhóm khách “chịu chi” trong mua sắm trực tuyến.

3.1.3 Phân tích nguồn

table(dataecommerce$ReferralSource)
## 
##     Ad Campaign Email Marketing  Organic Search    Social Media 
##           25087           25154           25021           24738

3.2 Phân tích ý nghĩa nhiều biến

3.2.1 Phân tích tổng giá trị trung bình mà khách hàng phải bỏ ra khi mua hàng hóa thuộc các nhóm hàng hóa, ở độ tuổi từ 36-50.

library(dplyr)

summary_age36_50 <- dataecommerce %>%
  filter(AgeGroup == "36-50") %>%        # Lọc nhóm tuổi 36–50
  group_by(Category) %>%                 # Gom theo danh mục sản phẩm
  summarise(
    Min_TTA = min(TotalAmount, na.rm = TRUE),
    Max_TTA = max(TotalAmount, na.rm = TRUE),
    Mean_TTA = mean(TotalAmount, na.rm = TRUE),
    Median_TTA = median(TotalAmount, na.rm = TRUE),
    Total_TTA = sum(TotalAmount, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(Category)

print(summary_age36_50)
## # A tibble: 4 × 6
##   Category    Min_TTA Max_TTA Mean_TTA Median_TTA Total_TTA
##   <chr>         <dbl>   <dbl>    <dbl>      <dbl>     <dbl>
## 1 Accessories    10.1   3990.    1259.       952.  5162595.
## 2 Apparel        10.0   3993.    1254.       964. 10387544.
## 3 Books          10.6   3975.    1245.       953.  5233391.
## 4 Electronics    10.2   4000.    1265.       979. 15611967.

Dựa trên giá trị Total_Value, có thể thấy ở độ tuổi 35-50, khách hàng có xu hướng chi tiêu mạnh nhất cho thiết bị điện tử (15.611.967) và quần áo, thời trang (10.387.544). Điều này phản ánh rõ đặc điểm tiêu dùng của nhóm tuổi trung niên: họ thường đã có thu nhập ổn định, sẵn sàng đầu tư vào các sản phẩm phục vụ công việc, tiện nghi gia đình và hình ảnh cá nhân.

3.2.2 Phân tích hành vi quyết định mua sản phẩm của khách hàng mua theo quý

summary_quarter <- dataecommerce %>%
  group_by(Quy, ProductName) %>%
  summarise(
    Min_TTA = min(TotalAmount, na.rm = TRUE),
    Max_TTA = max(TotalAmount, na.rm = TRUE),
    Mean_TTA = mean(TotalAmount, na.rm = TRUE),
    Median_TTA = median(TotalAmount, na.rm = TRUE),
    Total_TTA = sum(TotalAmount, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(Quy, ProductName)
print(summary_quarter)
## # A tibble: 28 × 7
##    Quy   ProductName Min_TTA Max_TTA Mean_TTA Median_TTA Total_TTA
##    <chr> <chr>         <dbl>   <dbl>    <dbl>      <dbl>     <dbl>
##  1 Quy 1 Book           11.4   3984.    1295.       994.  4618672.
##  2 Quy 1 Headphones     10.8   3998.    1288.       971.  4669855.
##  3 Quy 1 Laptop         12.1   3986.    1288.       991.  4526483.
##  4 Quy 1 Shoes          11.3   3988.    1246.       961.  4274226.
##  5 Quy 1 Smartphone     10.3   3997.    1266.       990.  4576605.
##  6 Quy 1 T-shirt        10.9   3991.    1219.       932.  4343239.
##  7 Quy 1 Watch          10.1   3998.    1269.       954.  4524728.
##  8 Quy 2 Book           10.6   3996.    1258.       959.  4452181.
##  9 Quy 2 Headphones     10.2   4000.    1249.       968.  4360843.
## 10 Quy 2 Laptop         10.5   3999.    1282.       989.  4468986.
## # ℹ 18 more rows

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.