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

Tổng quan về tập dữ liệu: Bộ dữ liệu này chứa 100.000 quan sát với thông tin chi tiết về người dùng, sản phẩm và giao dịch, cũng như mức độ tương tác của người dùng và các thuộc tính giao dịch. Bộ dữ liệu được thiết kế sao cho giống với dữ liệu thương mại điện tử thực tế, cung cấp thông tin chi tiết về nhân khẩu học, xu hướng mua sắm và mức độ tương tác của khách hàng.

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

1.1 Ý nghĩa các biến

1.1.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

-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.1.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: Gía của sản phẩm mà khách hàng mua.

1.1.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 trong 1 lần đi mua sắm.

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

1.1.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.2 Số quan sát, số biến

library(readr)
dataecommerce <- read_csv(file.choose())
## Rows: 100000 Columns: 21
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (8): UserName, Gender, Country, ProductName, Category, ReviewText, Devi...
## dbl  (9): UserID, Age, ProductID, Price, Quantity, TotalAmount, DiscountRate...
## lgl  (1): HasDiscountApplied
## dttm (1): LastLogin
## date (2): SignUpDate, PurchaseDate
## 
## ℹ 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.
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
# 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
## tibble [100,000 × 21] (S3: tbl_df/tbl/data.frame)
##  $ UserID            : num [1:100000] 1 2 3 4 5 6 7 8 9 10 ...
##  $ UserName          : chr [1:100000] "User_1" "User_2" "User_3" "User_4" ...
##  $ Age               : num [1:100000] 39 25 43 44 23 54 64 59 50 47 ...
##  $ Gender            : chr [1:100000] "Male" "Female" "Male" "Male" ...
##  $ Country           : chr [1:100000] "UK" "Canada" "Canada" "Germany" ...
##  $ SignUpDate        : Date[1:100000], format: "2021-02-01" "2020-12-04" ...
##  $ ProductID         : num [1:100000] 8190 9527 3299 8795 1389 ...
##  $ ProductName       : chr [1:100000] "Shoes" "T-shirt" "Headphones" "T-shirt" ...
##  $ Category          : chr [1:100000] "Apparel" "Apparel" "Electronics" "Apparel" ...
##  $ Price             : num [1:100000] 532.4 848.8 64.9 465.1 331.8 ...
##  $ PurchaseDate      : Date[1:100000], format: "2021-02-25" "2021-09-22" ...
##  $ Quantity          : num [1:100000] 1 1 2 2 1 1 2 4 1 1 ...
##  $ TotalAmount       : num [1:100000] 532 849 130 930 332 ...
##  $ HasDiscountApplied: logi [1:100000] FALSE TRUE FALSE FALSE FALSE FALSE ...
##  $ DiscountRate      : num [1:100000] 0.02 0.29 0.03 0.23 0.02 0.21 0.06 0.34 0.48 0.25 ...
##  $ ReviewScore       : num [1:100000] 5.1 5.1 3.2 4.3 5.1 4.6 3.7 3.6 4.8 5.2 ...
##  $ ReviewText        : chr [1:100000] "Excellent" "Excellent" "Good" "Good" ...
##  $ LastLogin         : POSIXct[1:100000], format: "2024-05-03 04:04:27" "2024-08-31 04:04:27" ...
##  $ SessionDuration   : num [1:100000] 45 13.8 59.1 55.4 15 ...
##  $ DeviceType        : chr [1:100000] "Mobile" "Mobile" "Tablet" "Desktop" ...
##  $ ReferralSource    : chr [1:100000] "Social Media" "Social Media" "Organic Search" "Email Marketing" ...
head(dataecommerce, 10) #xem 10 cái đầu
## # A tibble: 10 × 21
##    UserID UserName   Age Gender     Country SignUpDate ProductID ProductName
##     <dbl> <chr>    <dbl> <chr>      <chr>   <date>         <dbl> <chr>      
##  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       
## # ℹ 13 more variables: Category <chr>, Price <dbl>, PurchaseDate <date>,
## #   Quantity <dbl>, TotalAmount <dbl>, HasDiscountApplied <lgl>,
## #   DiscountRate <dbl>, ReviewScore <dbl>, ReviewText <chr>, LastLogin <dttm>,
## #   SessionDuration <dbl>, DeviceType <chr>, ReferralSource <chr>
tail(dataecommerce, 10) #xem cái đuôi
## # A tibble: 10 × 21
##    UserID UserName      Age Gender     Country SignUpDate ProductID ProductName
##     <dbl> <chr>       <dbl> <chr>      <chr>   <date>         <dbl> <chr>      
##  1  99991 User_99991     51 Male       USA     2022-08-20      4917 Laptop     
##  2  99992 User_99992     60 Male       UK      2021-12-11      6618 Shoes      
##  3  99993 User_99993     39 Non-Binary Canada  2022-02-12      9197 Smartphone 
##  4  99994 User_99994     58 Non-Binary Germany 2022-02-14      6578 T-shirt    
##  5  99995 User_99995     18 Non-Binary India   2020-10-05      5520 Headphones 
##  6  99996 User_99996     25 Female     UK      2020-11-18      8401 Shoes      
##  7  99997 User_99997     53 Non-Binary Canada  2020-07-28      6555 T-shirt    
##  8  99998 User_99998     25 Male       Canada  2020-04-13      7686 Laptop     
##  9  99999 User_99999     63 Female     Germany 2022-12-23      2885 Watch      
## 10 100000 User_100000    52 Female     Germany 2020-07-12      3963 Laptop     
## # ℹ 13 more variables: Category <chr>, Price <dbl>, PurchaseDate <date>,
## #   Quantity <dbl>, TotalAmount <dbl>, HasDiscountApplied <lgl>,
## #   DiscountRate <dbl>, ReviewScore <dbl>, ReviewText <chr>, LastLogin <dttm>,
## #   SessionDuration <dbl>, DeviceType <chr>, ReferralSource <chr>
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      Min.   :2020-01-01   Min.   :1000   Length:100000     
##  Class :character   1st Qu.:2020-09-28   1st Qu.:3228   Class :character  
##  Mode  :character   Median :2021-06-30   Median :5520   Mode  :character  
##                     Mean   :2021-06-30   Mean   :5508                     
##                     3rd Qu.:2022-03-31   3rd Qu.:7776                     
##                     Max.   :2022-12-31   Max.   :9998                     
##    Category             Price         PurchaseDate           Quantity    
##  Length:100000      Min.   :  10.0   Min.   :2021-01-01   Min.   :1.000  
##  Class :character   1st Qu.: 257.1   1st Qu.:2021-04-02   1st Qu.:1.000  
##  Mode  :character   Median : 505.9   Median :2021-07-03   Median :2.000  
##                     Mean   : 505.6   Mean   :2021-07-02   Mean   :2.496  
##                     3rd Qu.: 753.7   3rd Qu.:2021-10-03   3rd Qu.:4.000  
##                     Max.   :1000.0   Max.   :2022-01-01   Max.   :4.000  
##   TotalAmount      HasDiscountApplied  DiscountRate     ReviewScore    
##  Min.   :  10.02   Mode :logical      Min.   :0.0000   Min.   :-0.600  
##  1st Qu.: 494.68   FALSE:50221        1st Qu.:0.1300   1st Qu.: 3.300  
##  Median : 966.08   TRUE :49779        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 
##  Length:100000      Min.   :2023-11-10 04:04:27   Min.   :  5.00  
##  Class :character   1st Qu.:2024-02-10 04:04:27   1st Qu.: 33.72  
##  Mode  :character   Median :2024-05-11 04:04:28   Median : 62.41  
##                     Mean   :2024-05-10 17:33:36   Mean   : 62.41  
##                     3rd Qu.:2024-08-09 04:04:27   3rd Qu.: 91.04  
##                     Max.   :2024-11-08 04:04:28   Max.   :120.00  
##   DeviceType        ReferralSource    
##  Length:100000      Length:100000     
##  Class :character   Class :character  
##  Mode  :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"

1.3 Kiểm tra NA của bộ 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

Vậy bộ dữ liệu cho thấy không xuất hiện quan sát bị thiếu cho thấy đây là bộ dữ liệu sạch

1.4 Kiểm tra trùng lặp

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

1.5 (THIẾU) Tần suất xuất hiện

library(dplyr)

# ví dụ: biến DeviceType
dataecommerce %>% count(DeviceType, sort = TRUE)
## # A tibble: 3 × 2
##   DeviceType     n
##   <chr>      <int>
## 1 Mobile     33568
## 2 Tablet     33456
## 3 Desktop    32976
# kèm tỷ lệ %
dataecommerce %>%
  count(DeviceType) %>%
  mutate(pct = round(100 * n / sum(n), 2)) %>%
  arrange(desc(n))
## # A tibble: 3 × 3
##   DeviceType     n   pct
##   <chr>      <int> <dbl>
## 1 Mobile     33568  33.6
## 2 Tablet     33456  33.5
## 3 Desktop    32976  33.0

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

2.1 Phân tổ thành các khoảng tứ phân vị

2.2 Phân tổ theo nhóm tuổi khách hàng

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

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.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)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
dataecommerce <- dataecommerce %>%
  mutate(
    Quy = case_when(
      quarter(PurchaseDate) == 1 ~ "Quý 1",
      quarter(PurchaseDate) == 2 ~ "Quý 2",
      quarter(PurchaseDate) == 3 ~ "Quý 3",
      quarter(PurchaseDate) == 4 ~ "Quý 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 Quý 1       1268.           970. 24877
## 2 Quý 2       1264.           976. 24643
## 3 Quý 3       1249.           958. 25132
## 4 Quý 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

table(dataecommerce$Category)
## 
## Accessories     Apparel       Books Electronics 
##       14287       28662       14360       42691

Kết quả cho thấy có sự chênh lệch rõ giữa các nhóm sản phẩm. Nhóm Electronics (nhóm điện tử) chiếm tỷ trọng cao nhất với 42.691 giao dịch, cho thấy khách hàng mua sắm trực tuyến có xu hướng ưu tiên các sản phẩm công nghệ. Nhóm Apparel(nhóm trang phục) đạt 28.662 giao dịch, phản ánh nhu cầu lớn về thời trang, trong khi Books(nhóm sách, vở) và Accessories (nhóm phụ kiện) chỉ quanh 14.000 giao dịch(cụ thể: Accessories đạt 14.287 giao dịch và Books đạt 14.360 giao dịch), thể hiện mức độ quan tâm thấp hơn.

Từ đó có thể thấy người tiêu dùng tập trung mạnh vào các mặt hàng điện tử và thời trang - hai lĩnh vực mang lại doanh thu chính cho nền tảng.

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 Quý 1 Book           11.4   3984.    1295.       994.  4618672.
##  2 Quý 1 Headphones     10.8   3998.    1288.       971.  4669855.
##  3 Quý 1 Laptop         12.1   3986.    1288.       991.  4526483.
##  4 Quý 1 Shoes          11.3   3988.    1246.       961.  4274226.
##  5 Quý 1 Smartphone     10.3   3997.    1266.       990.  4576605.
##  6 Quý 1 T-shirt        10.9   3991.    1219.       932.  4343239.
##  7 Quý 1 Watch          10.1   3998.    1269.       954.  4524728.
##  8 Quý 2 Book           10.6   3996.    1258.       959.  4452181.
##  9 Quý 2 Headphones     10.2   4000.    1249.       968.  4360843.
## 10 Quý 2 Laptop         10.5   3999.    1282.       989.  4468986.
## # ℹ 18 more rows