Đây là bộ dữ liệu Marketing Campaign Dataset với 1,058 chiến dịch từ 5 công ty công nghệ, ghi nhận hiệu suất đa dạng các loại hình marketing (Email, Influencer, Social Media, Display Ads, Search) từ 1/2021 đến 11/2021. Dữ liệu bao gồm các metrics quan trọng như Conversion Rate, Acquisition Cost, ROI, Clicks, Impressions và Engagement Score, nhắm đến nhiều phân khúc khách hàng (Tech Enthusiasts, Health & Wellness, Fashionistas…) qua đa kênh và ngôn ngữ, cung cấp nền tảng toàn diện cho phân tích và tối ưu hóa chiến lược marketing data-driven.

1 Đọc dữ liệu

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
library(readr)
library(knitr)
library(ggplot2)
da <- read.csv("C:/Users/ASUS/Desktop/dulieu/marketing_campaign_dataset.csv")
head(da)

2 Thông tin cơ bản của dữ liệu

Ý nghĩa của các biến:

1. Company: Tên công ty thực hiện chiến dịch.
2. Campaign_Type: Loại hình chiến dịch marketing.
- Email: Email marketing.
- Influencer: Tiếp thị qua người có sức ảnh hưởng.
- Display: Quảng cáo hiển thị.
- Search: Quảng cáo tìm kiếm.
- Social Media: Mạng xã hội.
3. Target_Audience: Nhóm đối tượng mục tiêu
- Phân theo giới tính và độ tuổi.
4. Duration: Thời gian chạy chiến dịch (ngày).
5. Channel_Used: Kênh phân phối chiến dịch.
- Google Ads, YouTube, Instagram, Facebook, Email, Website.
6. Conversion_Rate: Tỷ lệ chuyển đổi - phần trăm người dùng thực hiện hành động mong muốn.
7. Acquisition_Cost: Chi phí thu hút khách hàng.
8. ROI (Return on Investment): Tỷ suất hoàn vốn.
9. Location: Địa điểm triển khai chiến dịch.
10. Language: Ngôn ngữ sử dụng trong chiến dịch.
11. Clicks: Số lượt nhấp chuột vào quảng cáo.
12. Impressions: Số lần quảng cáo được hiển thị.
13. Engagement_Score: Đo lường mức độ tương tác.
14. Customer_Segment: Phân khúc khách hàng.
- Health & Wellness: Sức khỏe.
- Fashionistas: Thời trang.
- Outdoor Adventurers: Du lịch ngoài trời.
- Tech Enthusiasts: Công nghệ.
- Foodies: Ẩm thực.
15. Date: Ngày thực hiện chiến dịch.

2.1 Số biến và số quan sát

dim(da)
## [1] 200000     15

Dữ liệu có 15 biến và 200.000 quan sát

2.2 Tên biến và cấu trúc dữ liệu

names(da) 
##  [1] "Company"          "Campaign_Type"    "Target_Audience"  "Duration"        
##  [5] "Channel_Used"     "Conversion_Rate"  "Acquisition_Cost" "ROI"             
##  [9] "Location"         "Language"         "Clicks"           "Impressions"     
## [13] "Engagement_Score" "Customer_Segment" "Date"
str(da)   
## 'data.frame':    200000 obs. of  15 variables:
##  $ Company         : chr  "Innovate Industries" "NexGen Systems" "Alpha Innovations" "DataTech Solutions" ...
##  $ Campaign_Type   : chr  "Email" "Email" "Influencer" "Display" ...
##  $ Target_Audience : chr  "Men 18-24" "Women 35-44" "Men 25-34" "All Ages" ...
##  $ Duration        : chr  "30 days" "60 days" "30 days" "60 days" ...
##  $ Channel_Used    : chr  "Google Ads" "Google Ads" "YouTube" "YouTube" ...
##  $ Conversion_Rate : num  0.04 0.12 0.07 0.11 0.05 0.07 0.13 0.08 0.09 0.09 ...
##  $ Acquisition_Cost: chr  "$16,174.00" "$11,566.00" "$10,200.00" "$12,724.00" ...
##  $ ROI             : num  6.29 5.61 7.18 5.55 6.5 4.36 2.86 5.55 6.73 3.78 ...
##  $ Location        : chr  "Chicago" "New York" "Los Angeles" "Miami" ...
##  $ Language        : chr  "Spanish" "German" "French" "Mandarin" ...
##  $ Clicks          : int  506 116 584 217 379 100 817 624 861 642 ...
##  $ Impressions     : int  1922 7523 7698 1820 4201 1643 8749 7854 1754 3856 ...
##  $ Engagement_Score: int  6 7 1 7 3 1 10 7 6 3 ...
##  $ Customer_Segment: chr  "Health & Wellness" "Fashionistas" "Outdoor Adventurers" "Health & Wellness" ...
##  $ Date            : chr  "01/01/2021" "02/01/2021" "03/01/2021" "04/01/2021" ...

2.3 Chuyển đổi kiểu dữ liệu

da$Date <- as.Date(da$Date, format = "%d/%m/%Y")
da$Acquisition_Cost <- as.numeric(gsub("[\\$,]", "", da$Acquisition_Cost))
da$Duration <- as.numeric(gsub(" days", "", da$Duration))
str(da)
## 'data.frame':    200000 obs. of  15 variables:
##  $ Company         : chr  "Innovate Industries" "NexGen Systems" "Alpha Innovations" "DataTech Solutions" ...
##  $ Campaign_Type   : chr  "Email" "Email" "Influencer" "Display" ...
##  $ Target_Audience : chr  "Men 18-24" "Women 35-44" "Men 25-34" "All Ages" ...
##  $ Duration        : num  30 60 30 60 15 15 60 45 15 15 ...
##  $ Channel_Used    : chr  "Google Ads" "Google Ads" "YouTube" "YouTube" ...
##  $ Conversion_Rate : num  0.04 0.12 0.07 0.11 0.05 0.07 0.13 0.08 0.09 0.09 ...
##  $ Acquisition_Cost: num  16174 11566 10200 12724 16452 ...
##  $ ROI             : num  6.29 5.61 7.18 5.55 6.5 4.36 2.86 5.55 6.73 3.78 ...
##  $ Location        : chr  "Chicago" "New York" "Los Angeles" "Miami" ...
##  $ Language        : chr  "Spanish" "German" "French" "Mandarin" ...
##  $ Clicks          : int  506 116 584 217 379 100 817 624 861 642 ...
##  $ Impressions     : int  1922 7523 7698 1820 4201 1643 8749 7854 1754 3856 ...
##  $ Engagement_Score: int  6 7 1 7 3 1 10 7 6 3 ...
##  $ Customer_Segment: chr  "Health & Wellness" "Fashionistas" "Outdoor Adventurers" "Health & Wellness" ...
##  $ Date            : Date, format: "2021-01-01" "2021-01-02" ...

Các biến định lượng bao gồm: Conversion_Rate, ROI, Clicks, Impressions, Engagements_Score, Acquisition_Cost, Duration
Các biến định tính: Company, Campaign_Type, Target_Audience, Channel_Used, Location, Language, Customer_Segment, Date

2.4 Kiểm tra dữ liệu trùng lặp

sum(duplicated(da))
## [1] 0
# kiểm tra trùng lặp theo từng biến
variables <- c("Company", "Campaign_Type", "Target_Audience", "Duration", 
               "Channel_Used", "Conversion_Rate", "Acquisition_Cost", "ROI", 
               "Location", "Language", "Clicks", "Impressions", "Engagement_Score", 
               "Customer_Segment")
for(var in variables) {
  cat("Số trùng lặp cho", var, ":", sum(duplicated(da[[var]])), "\n")}
## Số trùng lặp cho Company : 199995 
## Số trùng lặp cho Campaign_Type : 199995 
## Số trùng lặp cho Target_Audience : 199995 
## Số trùng lặp cho Duration : 199996 
## Số trùng lặp cho Channel_Used : 199994 
## Số trùng lặp cho Conversion_Rate : 199985 
## Số trùng lặp cho Acquisition_Cost : 184999 
## Số trùng lặp cho ROI : 199399 
## Số trùng lặp cho Location : 199995 
## Số trùng lặp cho Language : 199995 
## Số trùng lặp cho Clicks : 199099 
## Số trùng lặp cho Impressions : 190999 
## Số trùng lặp cho Engagement_Score : 199990 
## Số trùng lặp cho Customer_Segment : 199995

2.5 Kiểm tra dữ liệu bị thiếu

sum(is.na(da))  
## [1] 0
colSums(is.na(da))  
##          Company    Campaign_Type  Target_Audience         Duration 
##                0                0                0                0 
##     Channel_Used  Conversion_Rate Acquisition_Cost              ROI 
##                0                0                0                0 
##         Location         Language           Clicks      Impressions 
##                0                0                0                0 
## Engagement_Score Customer_Segment             Date 
##                0                0                0

Dữ liệu không có giá trị bị thiếu

2.6 Kiểm tra dữ liệu không nhất quán

table(da$Channel_Used)
## 
##      Email   Facebook Google Ads  Instagram    Website    YouTube 
##      33599      32819      33438      33392      33360      33392
unique(da$Channel_Used)
## [1] "Google Ads" "YouTube"    "Instagram"  "Website"    "Facebook"  
## [6] "Email"

Các giá trị đều thống nhất về cách viết (chữ hoa đầu, không thừa khoảng trắng) và không có biến thể trùng lặp.
Do đó, dữ liệu không xuất hiện lỗi không nhất quán ở biến này.

2.7 Thống kê mô tả dữ liệu

2.7.1 Thống kê các biến định lượng

sapply(da[c("Conversion_Rate", "ROI", "Clicks", "Impressions", "Engagement_Score", "Acquisition_Cost", "Duration")],
       function(x) c(Mean=mean(x, na.rm=TRUE),
                     Median=median(x, na.rm=TRUE),
                     SD=sd(x, na.rm=TRUE),
                     var=var(x, na.rm=TRUE),
                     quartile_1=quantile(x, 0.25, na.rm=TRUE),
                     quartile_3=quantile(x, 0.75, na.rm=TRUE),
                     mode=as.numeric(names(sort(table(x), decreasing=TRUE)[1])),
                     Min=min(x, na.rm=TRUE),
                     Max=max(x, na.rm=TRUE)))
##                Conversion_Rate      ROI     Clicks Impressions Engagement_Score
## Mean               0.080069650 5.002438   549.7720    5507.302         5.494710
## Median             0.080000000 5.010000   550.0000    5517.500         5.000000
## SD                 0.040601649 1.734488   260.0191    2596.864         2.872581
## var                0.001648494 3.008450 67609.9094 6743704.121         8.251723
## quartile_1.25%     0.050000000 3.500000   325.0000    3266.000         3.000000
## quartile_3.75%     0.120000000 6.510000   775.0000    7753.000         8.000000
## mode               0.130000000 7.430000   477.0000    1602.000         4.000000
## Min                0.010000000 2.000000   100.0000    1000.000         1.000000
## Max                0.150000000 8.000000  1000.0000   10000.000        10.000000
##                Acquisition_Cost  Duration
## Mean                  12504.393  37.50397
## Median                12496.500  30.00000
## SD                     4337.665  16.74672
## var                18815333.705 280.45264
## quartile_1.25%         8739.750  30.00000
## quartile_3.75%        16264.000  45.00000
## mode                  16578.000  30.00000
## Min                    5000.000  15.00000
## Max                   20000.000  60.00000

2.7.2 Thống kê tần số các biến định tính

lapply(da[c("Company", "Campaign_Type", "Target_Audience", "Duration",
            "Channel_Used", "Location", "Language", "Customer_Segment" )],
       table)
## $Company
## 
##   Alpha Innovations  DataTech Solutions Innovate Industries      NexGen Systems 
##               40051               40012               39709               39991 
##            TechCorp 
##               40237 
## 
## $Campaign_Type
## 
##      Display        Email   Influencer       Search Social Media 
##        39987        39870        40169        40157        39817 
## 
## $Target_Audience
## 
##    All Ages   Men 18-24   Men 25-34 Women 25-34 Women 35-44 
##       40019       40258       40023       40013       39687 
## 
## $Duration
## 
##    15    30    45    60 
## 49779 50255 50100 49866 
## 
## $Channel_Used
## 
##      Email   Facebook Google Ads  Instagram    Website    YouTube 
##      33599      32819      33438      33392      33360      33392 
## 
## $Location
## 
##     Chicago     Houston Los Angeles       Miami    New York 
##       40010       39750       39947       40269       40024 
## 
## $Language
## 
##  English   French   German Mandarin  Spanish 
##    39896    39764    39983    40255    40102 
## 
## $Customer_Segment
## 
##        Fashionistas             Foodies   Health & Wellness Outdoor Adventurers 
##               39742               40208               39888               40011 
##    Tech Enthusiasts 
##               40151

3 Phân tổ dữ liệu

Để phục vụ mục tiêu phân tích hiệu quả chiến dịch marketing, nhóm tiến hành phân tổ dữ liệu dựa trên các tiêu chí sau: Các tiêu chí được chọn nhằm phản ánh các khía cạnh khác nhau của hoạt động marketing:

  • ROI (Return on Investment): Đánh giá hiệu quả tổng thể của chiến dịch.
  • Acquisition_Cost: Phản ánh quy mô ngân sách.
  • Engagement_Score: Đo mức độ tương tác với khách hàng.
  • Conversion_Rate: Thể hiện hiệu suất chuyển đổi.
  • Duration: Cho biết thời gian và quy mô chiến dịch.
  • Channel_Used: Cho phép xác định kênh truyền thông phổ biến và hiệu quả.

Mục tiêu của việc phân tổ là xác định đặc điểm của từng nhóm chiến dịch (hiệu quả thấp, trung bình, cao) để từ đó đưa ra nhận định về xu hướng và hiệu suất marketing.

3.1 Phân tổ theo hiệu quả chiến dịch (ROI)

da$ROI_Group <- cut(da$ROI, 
                    breaks = c(-Inf, 4, 7, Inf),
                    labels = c("ROI thap", "ROI trung binh", "ROI cao"))
roi_table <- as.data.frame(table(da$ROI_Group))
colnames(roi_table) <- c("Nhóm ROI", "Số lượng")
roi_table$`Tỷ lệ (%)` <- round(roi_table$`Số lượng` / sum(roi_table$`Số lượng`) * 100, 2)
knitr::kable(roi_table, align = "c", caption = "Bảng 1. Phân tổ theo hiệu quả chiến dịch (ROI)")
Bảng 1. Phân tổ theo hiệu quả chiến dịch (ROI)
Nhóm ROI Số lượng Tỷ lệ (%)
ROI thap 66822 33.41
ROI trung binh 99877 49.94
ROI cao 33301 16.65

Kết quả cho thấy nhóm ROI trung bình chiếm tỷ trọng lớn nhất (49.94%), phản ánh đa số chiến dịch đạt hiệu quả đầu tư ở mức ổn định.
Nhóm ROI thấp chiếm 33.41%, cho thấy vẫn còn nhiều chiến dịch hiệu quả chưa cao, trong khi ROI cao chỉ 16.65%, biểu thị số chiến dịch mang lại lợi nhuận vượt trội còn hạn chế.

3.2 Phân tổ theo quy mô ngân sách

da$Budget_Group <- cut(da$Acquisition_Cost,
                       breaks = c(-Inf, 10000, 15000, Inf),
                       labels = c("Ngân sách nhỏ", "Ngân sách trung bình", "Ngân sách lớn"))
budget_table <- as.data.frame(table(da$Budget_Group))
colnames(budget_table) <- c("Nhóm ngân sách", "Số lượng")
budget_table$`Tỷ lệ (%)` <- round(budget_table$`Số lượng` / sum(budget_table$`Số lượng`) * 100, 2)
knitr::kable(budget_table, align = "c", caption = "Bảng 2. Phân tổ theo quy mô ngân sách")
Bảng 2. Phân tổ theo quy mô ngân sách
Nhóm ngân sách Số lượng Tỷ lệ (%)
Ngân sách nhỏ 66704 33.35
Ngân sách trung bình 66495 33.25
Ngân sách lớn 66801 33.40

Tỷ lệ các nhóm ngân sách gần như tương đương nhau, phản ánh dữ liệu được phân bổ khá đồng đều giữa các mức chi tiêu.
Các chiến dịch được triển khai đa dạng về quy mô tài chính, giúp việc so sánh hiệu quả giữa các nhóm ngân sách trở nên khách quan hơn.

3.3 Phân tổ theo mức độ tương tác

da$Engagement_Group <- cut(da$Engagement_Score,
                           breaks = c(-Inf, 4, 7, Inf),
                           labels = c("Tương tác thấp", "Tương tác trung bình", "Tương tác cao"))
engage_table <- as.data.frame(table(da$Engagement_Group))
colnames(engage_table) <- c("Nhóm tương tác", "Số lượng")
engage_table$`Tỷ lệ (%)` <- round(engage_table$`Số lượng` / sum(engage_table$`Số lượng`) * 100, 2)
knitr::kable(engage_table, align = "c", caption = "Bảng 3. Phân tổ theo mức độ tương tác")
Bảng 3. Phân tổ theo mức độ tương tác
Nhóm tương tác Số lượng Tỷ lệ (%)
Tương tác thấp 80228 40.11
Tương tác trung bình 59838 29.92
Tương tác cao 59934 29.97

Nhóm tương tác thấp chiếm tỷ trọng cao nhất (40.11%), cho thấy nhiều chiến dịch chưa đạt được mức độ tương tác mong muốn từ khách hàng.
Ngược lại, nhóm tương tác cao chỉ chiếm 29.97%, phản ánh số chiến dịch tạo được sự kết nối mạnh mẽ với khách hàng còn hạn chế.

3.4 Phân tổ theo hiệu suất chuyển đổi

da$Conversion_Group <- cut(da$Conversion_Rate,
                           breaks = c(-Inf, 0.05, 0.10, Inf),
                           labels = c("Chuyển đổi kém", "Chuyển đổi khá", "Chuyển đổi tốt"))
conv_table <- as.data.frame(table(da$Conversion_Group))
colnames(conv_table) <- c("Nhóm chuyển đổi", "Số lượng")
conv_table$`Tỷ lệ (%)` <- round(conv_table$`Số lượng` / sum(conv_table$`Số lượng`) * 100, 2)
knitr::kable(conv_table, align = "c", caption = "Bảng 4. Phân tổ theo hiệu suất chuyển đổi")
Bảng 4. Phân tổ theo hiệu suất chuyển đổi
Nhóm chuyển đổi Số lượng Tỷ lệ (%)
Chuyển đổi kém 64117 32.06
Chuyển đổi khá 71468 35.73
Chuyển đổi tốt 64415 32.21

Kết quả phân tổ cho thấy nhóm chuyển đổi khá chiếm tỷ lệ cao nhất (35.73%), phản ánh đa số chiến dịch đạt hiệu suất chuyển đổi ở mức ổn định. Nhóm chuyển đổi kém chiếm 32.06%, cho thấy vẫn còn nhiều chiến dịch chưa tối ưu hóa hiệu quả chuyển đổi, trong khi nhóm chuyển đổi tốt chỉ chiếm 32.21%, biểu thị số chiến dịch đạt hiệu suất xuất sắc còn hạn chế.

3.5 Phân tổ theo thời gian chạy chiến dịch

da$Duration_Group <- cut(da$Duration,
                          breaks = c(-Inf,30 ,45 , Inf),
                          labels = c("Ngắn hạn", "Trung hạn", "Dài hạn"))
duration_table <- as.data.frame(table(da$Duration_Group))
colnames(duration_table) <- c("Nhóm thời gian chạy", "Số lượng")
duration_table$`Tỷ lệ (%)` <- round(duration_table$`Số lượng` / sum(duration_table$`Số lượng`) * 100, 2)
knitr::kable(duration_table, align = "c", caption = "Bảng 5. Phân tổ theo thời gian chạy chiến dịch")
Bảng 5. Phân tổ theo thời gian chạy chiến dịch
Nhóm thời gian chạy Số lượng Tỷ lệ (%)
Ngắn hạn 100034 50.02
Trung hạn 50100 25.05
Dài hạn 49866 24.93

Nhóm chiến dịch ngắn hạn chiếm tỷ lệ cao nhất (50.02%), chiến dịch được triển khai trong khoảng thời gian ngắn để nhanh chóng tiếp cận khách hàng.

3.6 Phân tổ theo kênh phân phối

channel_table <- as.data.frame(table(da$Channel_Used))
colnames(channel_table) <- c("Kênh phân phối", "Số lượng")
channel_table$`Tỷ lệ (%)` <- round(channel_table$`Số lượng` / sum(channel_table$`Số lượng`) * 100, 2)
knitr::kable(channel_table, align = "c", caption = "Bảng 6. Phân tổ theo kênh phân phối")
Bảng 6. Phân tổ theo kênh phân phối
Kênh phân phối Số lượng Tỷ lệ (%)
Email 33599 16.80
Facebook 32819 16.41
Google Ads 33438 16.72
Instagram 33392 16.70
Website 33360 16.68
YouTube 33392 16.70

Phân tổ theo kênh phân phối bao gồm: Google Ads, YouTube, Instagram, Facebook, Email, Website
Các kênh như Email, Google Ads, Instagram và YouTube có mức sử dụng tương đương nhau. Giúp đa dạng hóa tiếp cận khách hàng và giảm rủi ro nếu một kênh hoạt động kém hiệu quả.

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

4.1 Phân tích biến ROI

ROI_stats <- summary(da$ROI)
ROI_table <- data.frame(
  Thống_kê = names(ROI_stats),
  Giá_trị = as.numeric(ROI_stats)
)
kable(ROI_table, 
      caption = "Bảng thống kê mô tả ROI", 
      align = "c",
      col.names = c("Thống kê", "Giá trị"))
Bảng thống kê mô tả ROI
Thống kê Giá trị
Min. 2.000000
1st Qu. 3.500000
Median 5.010000
Mean 5.002438
3rd Qu. 6.510000
Max. 8.000000

4.2 Phân tích biến công ty (Company)

Company_dist <- table(da$Company)
company_table <- data.frame(
  "Công ty" = names(Company_dist),
  "Số lượng chiến dịch" = as.numeric(Company_dist),
  "Tỷ lệ (%)" = round( prop.table(Company_dist) *100, 1))
knitr::kable(
  company_table,
  align = "c",
  caption = "Bảng: Phân bố chiến dịch theo công ty và tỷ lệ phần trăm")
Bảng: Phân bố chiến dịch theo công ty và tỷ lệ phần trăm
Công.ty Số.lượng.chiến.dịch Tỷ.lệ…..Var1 Tỷ.lệ…..Freq
Alpha Innovations 40051 Alpha Innovations 20.0
DataTech Solutions 40012 DataTech Solutions 20.0
Innovate Industries 39709 Innovate Industries 19.9
NexGen Systems 39991 NexGen Systems 20.0
TechCorp 40237 TechCorp 20.1

4.3 ROI KẾT HỢP VỚI CÔNG TY

ROI_by_Company <- aggregate(ROI ~ Company, da, function(x) c(
  Số_chiến_dịch = length(x),
  ROI_trung_bình = round(mean(x), 2),
  ROI_cao = sum(x > 7),
  Tỷ_lệ_ROI_cao = paste0(round(sum(x > 7)/length(x)*100, 1), "%")
))
ROI_by_Company <- ROI_by_Company[order(ROI_by_Company$ROI[,2]), ]
print(ROI_by_Company)
##               Company ROI.Số_chiến_dịch ROI.ROI_trung_bình ROI.ROI_cao
## 4      NexGen Systems             39991               4.99        6600
## 3 Innovate Industries             39709                  5        6558
## 1   Alpha Innovations             40051               5.01        6813
## 2  DataTech Solutions             40012               5.01        6658
## 5            TechCorp             40237               5.01        6672
##   ROI.Tỷ_lệ_ROI_cao
## 4             16.5%
## 3             16.5%
## 1               17%
## 2             16.6%
## 5             16.6%
conclusion <- data.frame(
  Tiêu_chí = c("Nhiều chiến dịch nhất", "ROI TB cao nhất", "Tỷ lệ ROI cao nhất"),
  Kết_quả = c(
    names(which.max(Company_dist)),
    with(ROI_by_Company, paste(Company[which.max(ROI[,2])], "(ROI =", ROI[which.max(ROI[,2]),2], ")")),
    with(ROI_by_Company, paste(Company[which.max(as.numeric(sub('%','',ROI[,4])))], "(", ROI[which.max(as.numeric(sub('%','',ROI[,4]))),4], ")"))
  )
)
knitr::kable(conclusion, align="c", caption="Bảng Kết Luận Tổng Hợp")
Bảng Kết Luận Tổng Hợp
Tiêu_chí Kết_quả
Nhiều chiến dịch nhất TechCorp
ROI TB cao nhất Alpha Innovations (ROI = 5.01 )
Tỷ lệ ROI cao nhất Alpha Innovations ( 17% )

4.4 Phân tích số lần kích chuột vào quảng cáo (Clicks)

Clicks_stats <- summary(da$Clicks)
Clicks_table <- data.frame(
  Thống_kê = names(Clicks_stats),
  Giá_trị = as.numeric(Clicks_stats)
)
kable(Clicks_table, 
      caption = "Bảng thống kê mô tả Clicks", 
      align = "c",
      col.names = c("Thống kê", "Giá trị"))
Bảng thống kê mô tả Clicks
Thống kê Giá trị
Min. 100.000
1st Qu. 325.000
Median 550.000
Mean 549.772
3rd Qu. 775.000
Max. 1000.000

4.5 Phân tích số lần kích chuột theo loại hình chiến dịch

Clicks_by_Campaign <- aggregate(Clicks ~ Campaign_Type, da, function(x) c(
  Số_chiến_dịch = length(x),
  Clicks_trung_bình = round(mean(x), 2),
  Clicks_cao = sum(x > 5000),
  Tỷ_lệ_Clicks_cao = paste0(round(sum(x > 5000)/length(x)*100, 1), "%")
))
Clicks_by_Campaign <- Clicks_by_Campaign[order(Clicks_by_Campaign$Clicks[,2]), ]
print(Clicks_by_Campaign)
##   Campaign_Type Clicks.Số_chiến_dịch Clicks.Clicks_trung_bình Clicks.Clicks_cao
## 3    Influencer                40169                   548.62                 0
## 4        Search                40157                   548.65                 0
## 2         Email                39870                   549.23                 0
## 1       Display                39987                   550.95                 0
## 5  Social Media                39817                   551.42                 0
##   Clicks.Tỷ_lệ_Clicks_cao
## 3                      0%
## 4                      0%
## 2                      0%
## 1                      0%
## 5                      0%
conclusion_clicks <- data.frame(
  Tiêu_chí = c("Nhiều chiến dịch nhất", "Clicks TB cao nhất", "Tỷ lệ Clicks cao nhất"),
  Kết_quả = c(
    names(which.max(table(da$Campaign_Type))),
    with(Clicks_by_Campaign, paste(Campaign_Type[which.max(Clicks[,2])], "(Clicks =", Clicks[which.max(Clicks[,2]),2], ")")),
    with(Clicks_by_Campaign, paste(Campaign_Type[which.max(as.numeric(sub('%','',Clicks[,4])))], "(", Clicks[which.max(as.numeric(sub('%','',Clicks[,4]))),4], ")"))
  )
)
knitr::kable(conclusion_clicks, align="c", caption="Bảng Kết Luận Tổng Hợp về Clicks theo Loại Hình Chiến Dịch")
Bảng Kết Luận Tổng Hợp về Clicks theo Loại Hình Chiến Dịch
Tiêu_chí Kết_quả
Nhiều chiến dịch nhất Influencer
Clicks TB cao nhất Social Media (Clicks = 551.42 )
Tỷ lệ Clicks cao nhất Influencer ( 0% )

5 Biểu đồ

5.1 Biểu đồ ROI theo công ty

library(ggplot2)
ggplot(da, aes(x=Company, y=ROI, fill=Company)) +
  geom_boxplot() +
  labs(title="Biểu đồ ROI theo công ty", x="Công ty", y="ROI") +
  theme_minimal()

Điều này cho thấy hiệu quả đầu tư marketing giữa các doanh nghiệp gần như không khác biệt đáng kể, phản ánh mức độ cạnh tranh cao và sự hội tụ về hiệu suất đầu tư.

5.2 Biểu đồ Clicks theo loại hình chiến dịch

ggplot(da, aes(x=Campaign_Type, y=Clicks, fill=Campaign_Type)) +
  geom_boxplot() +
  labs(title="Biểu đồ Clicks theo loại hình chiến dịch", x="Loại hình chiến dịch", y="Clicks") +
  theme_minimal()