# Đọc bộ dữ liệu
d <- read.csv("D:/naaaaaa/PTDLDT/Invistico_Airline.csv", header = T)
Bộ dữ liệu bao gồm thông tin chi tiết về những khách hàng đã từng bay cùng họ. Phản hồi của khách hàng về nhiều bối cảnh khác nhau và dữ liệu chuyến bay của họ đã được hợp nhất. Mục đích chính của bộ dữ liệu này là dự đoán liệu một khách hàng tương lai có hài lòng với dịch vụ của họ hay không dựa trên thông tin chi tiết về các giá trị tham số khác.
Ngoài ra, các hãng hàng không cần biết khía cạnh nào của các dịch vụ mà họ cung cấp phải được nhấn mạnh hơn để tạo ra nhiều khách hàng hài lòng hơn.
# Cấu trúc bộ dữ liệu
str(d)
## 'data.frame': 129880 obs. of 22 variables:
## $ satisfaction : chr "satisfied" "satisfied" "satisfied" "satisfied" ...
## $ Gender : chr "Female" "Male" "Female" "Female" ...
## $ Customer.Type : chr "Loyal Customer" "Loyal Customer" "Loyal Customer" "Loyal Customer" ...
## $ Age : int 65 47 15 60 70 30 66 10 56 22 ...
## $ Type.of.Travel : chr "Personal Travel" "Personal Travel" "Personal Travel" "Personal Travel" ...
## $ Class : chr "Eco" "Business" "Eco" "Eco" ...
## $ Flight.Distance : int 265 2464 2138 623 354 1894 227 1812 73 1556 ...
## $ Seat.comfort : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Departure.Arrival.time.convenient: int 0 0 0 0 0 0 0 0 0 0 ...
## $ Food.and.drink : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Gate.location : int 2 3 3 3 3 3 3 3 3 3 ...
## $ Inflight.wifi.service : int 2 0 2 3 4 2 2 2 5 2 ...
## $ Inflight.entertainment : int 4 2 0 4 3 0 5 0 3 0 ...
## $ Online.support : int 2 2 2 3 4 2 5 2 5 2 ...
## $ Ease.of.Online.booking : int 3 3 2 1 2 2 5 2 4 2 ...
## $ On.board.service : int 3 4 3 1 2 5 5 3 4 2 ...
## $ Leg.room.service : int 0 4 3 0 0 4 0 3 0 4 ...
## $ Baggage.handling : int 3 4 4 1 2 5 5 4 1 5 ...
## $ Checkin.service : int 5 2 4 4 4 5 5 5 5 3 ...
## $ Cleanliness : int 3 3 4 1 2 4 5 4 4 4 ...
## $ Online.boarding : int 2 2 2 3 5 2 3 2 4 2 ...
## $ Departure.Delay.in.Minutes : int 0 310 0 0 0 0 17 0 0 30 ...
Bộ dữ liệu gồm 129.880 quan sát và 22 biến, thu thập thông tin về trải nghiệm khách hàng trên các chuyến bay thương mại, tập trung vào mức độ hài lòng và các yếu tố ảnh hưởng đến đánh giá của khách hàng.
satisfaction (chr): Mức độ hài lòng của khách hàng. Gồm 2 giá trị: “satisfied” và “dissatisfied”.
Gender (chr): Giới tính của hành khách: “Male” hoặc “Female”.
Customer.Type (chr): Loại khách hàng: “Loyal Customer” (khách thân thiết) hoặc “disloyal Customer” (khách không thường xuyên).
Age (int): Tuổi của hành khách (tính bằng năm).
Type.of.Travel (chr): Mục đích chuyến đi: “Business travel” hoặc “Personal Travel”.
Class (chr): Hạng ghế: “Eco”, “Eco Plus”, hoặc “Business”.
Flight.Distance (int): Quãng đường bay (tính bằng dặm).
Các biến sau là đánh giá từ hành khách về trải nghiệm dịch vụ:
Seat.comfort: Độ thoải mái ghế ngồi
Departure.Arrival.time.convenient: Thuận tiện thời gian bay
Food.and.drink: Đánh giá đồ ăn và thức uống
Gate.location: Vị trí cổng lên máy bay
Inflight.wifi.service: Dịch vụ wifi trên máy bay
Inflight.entertainment: Giải trí trên máy bay
Online.support: Hỗ trợ trực tuyến
Ease.of.Online.booking: Dễ dàng khi đặt vé online
On.board.service: Dịch vụ trên khoang
Leg.room.service: Chỗ để chân
Baggage.handling: Xử lý hành lý
Checkin.service: Dịch vụ làm thủ tục check-in
Cleanliness: Mức độ sạch sẽ
Online.boarding: Trải nghiệm lên máy bay online
Departure.Delay.in.Minutes (int): Thời gian trễ khởi hành (tính bằng phút).Giá trị lớn biểu thị chuyến bay bị trễ nhiều.
# Kiểm tra dữ liệu thiếu
sum(is.na(d))
## [1] 0
Khi thực hiện lệnh sum(is.na(data)), kết quả trả về là 0, cho thấy bộ dữ liệu hoàn toàn không chứa giá trị bị thiếu (NA).
d$FlightRangeGroup <- cut(d$Flight.Distance,
breaks = c(0, 1000, 3500, Inf),
labels = c("Short-haul", "Medium-haul", "Long-haul"),
right = TRUE)
d$satisfaction <- as.factor(d$satisfaction)
d$Gender <- as.factor(d$Gender)
d$Customer.Type <- as.factor(d$Customer.Type)
d$Type.of.Travel <- as.factor(d$Type.of.Travel)
d$Class <- as.factor(d$Class)
summary(d$Flight.Distance)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 50 1359 1925 1981 2544 6951
# Tạo biến định tính
bdt <- c( "satisfaction", "Gender", "Customer.Type", "Type.of.Travel", "Class", "FlightRangeGroup" )
# Tạo bộ dữ liệu mới chỉ có biến định tính
dt <- d[, bdt]
Các biến này được trích xuất và tạo thành một bộ dữ liệu con, dùng riêng cho phân tích định tính (bảng tần số, biểu đồ cột, kiểm định tỉ lệ, odds ratio, risk ratio…). Việc giới hạn phân tích vào các biến định tính giúp tập trung vào so sánh đặc điểm giữa các nhóm, đồng thời tránh sự phức tạp từ các biến định lượng trong phạm vi phân tích hiện tại.
# Lập bảng tần số
hailong <- table(dt$satisfaction)
hailong
##
## dissatisfied satisfied
## 58793 71087
# Lập bảng tần suất
table(dt$satisfaction)/sum(nrow(dt))
##
## dissatisfied satisfied
## 0.4526717 0.5473283
library(ggplot2)
# Đưa về dạng data frame
df_hailong <- as.data.frame(hailong)
colnames(df_hailong) <- c("satisfaction", "Count")
# Tính phần trăm và thêm vào data frame
df_hailong$Percent <- round(df_hailong$Count / sum(df_hailong$Count) * 100, 1)
# Tạo nhãn ghép với %
df_hailong$Label <- paste0(df_hailong$Percent, "%")
# Vẽ biểu đồ tròn
ggplot(df_hailong, aes(x = "", y = Count, fill = satisfaction)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = Label), position = position_stack(vjust = 0.5)) +
labs(title = "Biểu đồ 1: Biểu đồ thể hiện mức độ hài lòng của khách hàng") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
Biểu đồ thể hiện tỷ lệ giữa hai nhóm mức độ hài lòng cho thấy tỷ lệ hành khách không hài lòng chiếm khoảng 45,3%, trong khi số hài lòng chiếm khoảng 54,7%. Mặc dù nhóm hài lòng chiếm ưu thế, khoảng cách không quá lớn, cho thấy vẫn còn một tỷ lệ đáng kể hành khách chưa hài lòng. Điều này là dấu hiệu cần cải thiện chất lượng dịch vụ để tăng mức độ hài lòng chung.
# Lập bảng tần số
gioitinh <- table(dt$Gender)
gioitinh
##
## Female Male
## 65899 63981
# Lập bảng tần suất
table(dt$Gender)/sum(nrow(dt))
##
## Female Male
## 0.5073837 0.4926163
library(ggplot2)
# Đưa về dạng data frame
df_gioitinh <- as.data.frame(gioitinh)
colnames(df_gioitinh) <- c("Gender", "Count")
# Tính phần trăm và thêm vào data frame
df_gioitinh$Percent <- round(df_gioitinh$Count / sum(df_gioitinh$Count) * 100, 1)
# Tạo nhãn ghép với %
df_gioitinh$Label <- paste0(df_gioitinh$Percent, "%")
# Vẽ biểu đồ tròn
ggplot(df_gioitinh, aes(x = "", y = Count, fill = Gender)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = Label), position = position_stack(vjust = 0.5)) +
labs(title = "Biểu đồ 2: Biểu đồ thể hiện giới tính của khách hàng") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
Tỷ lệ giới tính trong tập dữ liệu khá cân bằng, với nữ chiếm khoảng 50,7% và nam chiếm khoảng 49,3%. Sự phân bố gần như ngang nhau này giúp đảm bảo tính đại diện giữa hai giới khi phân tích các yếu tố liên quan đến mức độ hài lòng hoặc hành vi du lịch. Điều này cũng tạo điều kiện thuận lợi cho việc so sánh giới tính mà không bị thiên lệch.
# Lập bảng tần số
phanloai <- table(dt$Customer.Type)
phanloai
##
## disloyal Customer Loyal Customer
## 23780 106100
# Lập bảng tần suất
table(dt$Customer.Type)/sum(nrow(dt))
##
## disloyal Customer Loyal Customer
## 0.1830921 0.8169079
library(ggplot2)
# Đưa về dạng data frame
df_phanloai <- as.data.frame(phanloai)
colnames(df_phanloai) <- c("Customer.Type", "Count")
# Tính phần trăm và thêm vào data frame
df_phanloai$Percent <- round(df_phanloai$Count / sum(df_phanloai$Count) * 100, 1)
# Tạo nhãn ghép với %
df_phanloai$Label <- paste0(df_phanloai$Percent, "%")
# Vẽ biểu đồ tròn
ggplot(df_phanloai, aes(x = "", y = Count, fill = Customer.Type)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = Label), position = position_stack(vjust = 0.5)) +
labs(title = "Biểu đồ 3: Biểu đồ thể hiện phân bố loại khách hàng") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
Phần lớn khách hàng trong tập dữ liệu là khách hàng thân thiết (Loyal Customer), chiếm khoảng 81,7%, trong khi khách hàng không trung thành (Disloyal Customer) chỉ chiếm khoảng 18,3%. Sự chênh lệch này cho thấy nhóm khách hàng thân thiết là đối tượng chính trong khảo sát, và có thể ảnh hưởng đến mức độ hài lòng chung của toàn bộ dữ liệu. Đây cũng là yếu tố quan trọng cần xem xét khi phân tích hành vi hoặc cảm nhận dịch vụ.
# Lập bảng tần số
mucdich <- table(dt$Type.of.Travel)
mucdich
##
## Business travel Personal Travel
## 89693 40187
# Lập bảng tần suất
table(dt$Type.of.Travel)/sum(nrow(dt))
##
## Business travel Personal Travel
## 0.6905836 0.3094164
library(ggplot2)
# Đưa về dạng data frame
df_mucdich <- as.data.frame(mucdich)
colnames(df_mucdich) <- c("Type.of.Travel", "Count")
# Tính phần trăm và thêm vào data frame
df_mucdich$Percent <- round(df_mucdich$Count / sum(df_mucdich$Count) * 100, 1)
# Tạo nhãn ghép với %
df_mucdich$Label <- paste0(df_mucdich$Percent, "%")
# Vẽ biểu đồ tròn
ggplot(df_mucdich, aes(x = "", y = Count, fill = Type.of.Travel)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = Label), position = position_stack(vjust = 0.5)) +
labs(title = "Biểu đồ 4: Biểu đồ thể hiện mục đích bay của khách hàng") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
Đa số hành khách trong bộ dữ liệu thực hiện Business Travel (công tác),
chiếm khoảng 69%, trong khi Personal Travel (du lịch cá nhân) chiếm
khoảng 31%. Điều này cho thấy mẫu dữ liệu thiên về nhóm khách đi công
tác, và có thể ảnh hưởng đến mức độ hài lòng hoặc các yếu tố dịch vụ
được đánh giá, vì mục đích chuyến đi thường ảnh hưởng đến kỳ vọng và
trải nghiệm của khách hàng.
# Lập bảng tần số
hangve <- table(dt$Class)
hangve
##
## Business Eco Eco Plus
## 62160 58309 9411
# Lập bảng tần suất
table(dt$Class)/sum(nrow(dt))
##
## Business Eco Eco Plus
## 0.47859563 0.44894518 0.07245919
library(ggplot2)
# Đưa về dạng data frame
df_hangve <- as.data.frame(hangve)
colnames(df_hangve) <- c("Class", "Count")
# Tính phần trăm và thêm vào data frame
df_hangve$Percent <- round(df_hangve$Count / sum(df_hangve$Count) * 100, 1)
# Tạo nhãn ghép với %
df_hangve$Label <- paste0(df_hangve$Percent, "%")
# Vẽ biểu đồ tròn
ggplot(df_hangve, aes(x = "", y = Count, fill = Class)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = Label), position = position_stack(vjust = 0.5)) +
labs(title = "Biểu đồ 5: Biểu đồ phân bố khách hàng theo hạng vé") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
Trong bộ dữ liệu, đa số hành khách sử dụng ghế hạng Business, chiếm khoảng 47.9%, theo sau là hạng Eco (phổ thông) với 44.9%, và Eco Plus chỉ chiếm 7.2%. Điều này cho thấy mẫu dữ liệu có xu hướng tập trung vào nhóm khách hàng cao cấp hơn, và có thể phản ánh các đánh giá dịch vụ ở góc nhìn của nhóm khách chi tiêu nhiều hơn.
# Lập bảng tần số
khoangcach <- table(dt$FlightRangeGroup)
khoangcach
##
## Short-haul Medium-haul Long-haul
## 22572 95940 11368
# Lập bảng tần suất
table(dt$FlightRangeGroup)/sum(nrow(dt))
##
## Short-haul Medium-haul Long-haul
## 0.17379119 0.73868186 0.08752695
library(ggplot2)
# Đưa về dạng data frame
df_khoangcach <- as.data.frame(khoangcach)
colnames(df_khoangcach) <- c("FlightRangerGroup", "Count")
# Tính phần trăm và thêm vào data frame
df_khoangcach$Percent <- round(df_khoangcach$Count / sum(df_khoangcach$Count) * 100, 1)
# Tạo nhãn ghép với %
df_khoangcach$Label <- paste0(df_khoangcach$Percent, "%")
# Vẽ biểu đồ tròn
ggplot(df_khoangcach, aes(x = "", y = Count, fill = FlightRangerGroup)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = Label), position = position_stack(vjust = 0.5)) +
labs(title = "Biểu đồ 6: Biểu đồ phân bố chuyến bay theo khoảng cách") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
Khoảng cách chuyến bay trong bộ dữ liệu được phân loại thành ba nhóm
chính: Short-haul (chuyến bay ngắn), Medium-haul (chuyến bay tầm trung),
và Long-haul (chuyến bay dài). Kết quả phân tích cho thấy phần lớn khách
hàng trong bộ dữ liệu chọn chuyến bay tầm trung, chiếm đến gần 74% tổng
số chuyến bay. Đây là nhóm chiếm ưu thế, thể hiện rằng đa số hành khách
có xu hướng di chuyển trong phạm vi khoảng cách trung bình, có thể do
nhu cầu công việc hoặc du lịch trong các vùng địa lý không quá xa
nhau.
Ngược lại, các chuyến bay ngắn chiếm khoảng 17.4%, cho thấy một tỷ lệ nhỏ hành khách sử dụng các chuyến bay trong khoảng cách gần hơn, có thể là các chuyến bay nội địa hoặc các chặng bay ngắn lân cận. Chuyến bay dài, tuy chiếm tỷ lệ thấp nhất với khoảng 8.8%, vẫn phản ánh sự hiện diện của một nhóm hành khách cần di chuyển quãng đường xa hơn, có thể là các chuyến bay quốc tế hoặc xuyên lục địa.
Giả thuyết kiểm định
\(H_0\): p ≤ 0.5 (Tỷ lệ khách hàng hài lòng nhỏ hơn bằng 50%
\(H_1\): p > 0.5 (Tỷ lệ khách hàng hài lòng lớn hơn 50%
# Lấy số lượng Female và tổng số quan sát
count_satisfied <- hailong["satisfied"]
n_satisfaction <- sum(hailong)
# 1. Ước lượng khoảng tin cậy 95% cho tỷ lệ Female
prop.test_satisfaction <- prop.test(count_satisfied, n_satisfaction,p = 0.5, conf.level = 0.95, correct = TRUE, alternative = "greater")
print(prop.test_satisfaction)
##
## 1-sample proportions test with continuity correction
##
## data: count_satisfied out of n_satisfaction, null probability 0.5
## X-squared = 1163.5, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.5
## 95 percent confidence interval:
## 0.5450517 1.0000000
## sample estimates:
## p
## 0.5473283
Tỷ lệ khách hàng hài lòng trong mẫu khảo sát thực tế là 54.73%.
Khoảng tin cậy 95%, khoảng ước lượng tỷ lệ khách hàng hài lòng nằm trong khoảng từ 54.5% đến 100%
Giá trị p-value < (\(\alpha\) = 0.05), bác bỏ giả thuyết \(H_0\) ở mức ý nghĩa 5%.
=> Vậy tỷ lệ khách hàng hài lòng lớn hơn 50%
Giả thuyết kiểm định
\(H_0\): p \(\neq\) 0.5 (Tỷ lệ khách hàng nữ khác 50%)
\(H_1\): p = 0.5 (Tỷ lệ khách hàng nữ là 50%)
# Lấy số lượng Female và tổng số quan sát
count_female <- gioitinh["Female"]
n_gender <- sum(gioitinh)
# 1. Ước lượng khoảng tin cậy 95% cho tỷ lệ Female
prop.test_gender <- prop.test(count_female, n_gender,p = 0.5, conf.level = 0.95)
print(prop.test_gender)
##
## 1-sample proportions test with continuity correction
##
## data: count_female out of n_gender, null probability 0.5
## X-squared = 28.294, df = 1, p-value = 1.042e-07
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5046608 0.5101063
## sample estimates:
## p
## 0.5073837
Tỷ lệ khách hàng nữ trong mẫu khảo sát thực tế là 50.74%.
Khoảng tin cậy 95%, khoảng ước lượng tỷ lệ khách hàng nữ nằm trong khoảng từ 50.47% đến 51.01%
Giá trị p-value < (\(\alpha\) = 0.05), bác bỏ giả thuyết \(H_0\) ở mức ý nghĩa 5%.
=> Vậy tỷ lệ khách hàng nữ khác 50%
Giả thuyết kiểm định
\(H_0\): p ≤ 0.8 (Tỷ lệ khách hàng trung thành nhỏ hơn bằng 80%)
\(H_1\): p > 0.8 (Tỷ lệ khách hàng trung thành lớn hơn 80%)
# Lấy số lượng Female và tổng số quan sát
count_loyal <- phanloai["Loyal Customer"]
n_customertype <- sum(phanloai)
# 1. Ước lượng khoảng tin cậy 95% cho tỷ lệ Loyal Customer
prop.test_customertype <- prop.test(count_loyal, n_customertype, p = 0.8, conf.level = 0.95, alternative = "greater")
print(prop.test_customertype)
##
## 1-sample proportions test with continuity correction
##
## data: count_loyal out of n_customertype, null probability 0.8
## X-squared = 231.96, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.8
## 95 percent confidence interval:
## 0.8151323 1.0000000
## sample estimates:
## p
## 0.8169079
Tỷ lệ khách hàng trung thành trong mẫu khảo sát thực tế là 81.7%.
Khoảng tin cậy 95%, khoảng ước lượng tỷ lệ khách hàng trung thành nằm trong khoảng từ 81.51% đến 100%
Giá trị p-value < (\(\alpha\) = 0.05), bác bỏ giả thuyết \(H_0\) ở mức ý nghĩa 5%.
=> Vậy tỷ lệ khách hàng trung thành lớn hơn 80%
Giả thuyết kiểm định
\(H_0\): p ≥ 0.5 (Tỷ lệ khách hàng cá nhân lớn hơn bằng 50%)
\(H_1\): p < 0.5 (Tỷ lệ khách hàng cá nhân bé hơn 50%)
# Lấy số lượng Female và tổng số quan sát
count_personal <- mucdich["Personal Travel"]
n_typeoftravel <- sum(mucdich)
# 1. Ước lượng khoảng tin cậy 95% cho tỷ lệ Loyal Customer
prop.test_typeoftravel <- prop.test(count_personal, n_typeoftravel, p = 0.5, conf.level = 0.95, alternative = "less")
print(prop.test_typeoftravel)
##
## 1-sample proportions test with continuity correction
##
## data: count_personal out of n_typeoftravel, null probability 0.5
## X-squared = 18869, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is less than 0.5
## 95 percent confidence interval:
## 0.000000 0.311534
## sample estimates:
## p
## 0.3094164
Tỷ lệ khách hàng trung thành trong mẫu khảo sát thực tế là 30.94%.
Khoảng tin cậy 95%, khoảng ước lượng tỷ lệ khách hàng cá nhân nằm trong khoảng từ 0% đến 31.15%
Giá trị p-value < (\(\alpha\) = 0.05), bác bỏ giả thuyết \(H_0\) ở mức ý nghĩa 5%.
=> Vậy tỷ lệ khách hàng cá nhân bé hơn 50%
Bảng tần số
# Tạo bảng tần suất chéo giữa Gender và MaritalStatus
satisfaction_typeoftravel<- table(dt$satisfaction, dt$Type.of.Travel)
# Thêm tổng hàng và tổng cột
satisfaction_typeoftravel1<- addmargins(satisfaction_typeoftravel)
satisfaction_typeoftravel1
##
## Business travel Personal Travel Sum
## dissatisfied 37337 21456 58793
## satisfied 52356 18731 71087
## Sum 89693 40187 129880
Bảng tần suất
# Theo hàng: trong từng giới tính, tỉ lệ từng tình trạng hôn nhân
prop_satisfaction_typeoftravel_row <- prop.table(satisfaction_typeoftravel, 1) * 100
round(prop_satisfaction_typeoftravel_row , 2)
##
## Business travel Personal Travel
## dissatisfied 63.51 36.49
## satisfied 73.65 26.35
Biểu đồ trực quan hóa
library(ggplot2)
df_satisfaction_typeoftravel <- as.data.frame(satisfaction_typeoftravel)
colnames(df_satisfaction_typeoftravel) <- c("satisfaction", "Type.of.Travel", "Count")
ggplot(df_satisfaction_typeoftravel, aes(x = satisfaction, y = Count, fill = Type.of.Travel)) +
geom_bar(stat = "identity", position = "fill") + # hoặc "dodge" nếu muốn số lượng
labs(title = "Tỷ lệ Type of Travel theo Satisfaction",
x = "Trải nghiệm khách hàng", y = "Tỷ lệ", fill = "Phân loại mục đích chuyến bay") +
scale_y_continuous(labels = scales::percent) +
theme_minimal()
Nhận xét
Từ biểu đồ trên, có thể thấy rõ sự khác biệt về mục đích chuyến bay giữa hai nhóm khách hàng: hài lòng và không hài lòng với trải nghiệm chuyến bay.
Cụ thể, trong nhóm khách hàng hài lòng (Satisfied), phần lớn là những người đi công tác (Business Travel), chiếm tỷ lệ 73.65%, trong khi chỉ có 26.35% là khách hàng đi vì mục đích cá nhân (Personal Travel). Điều này cho thấy nhóm khách hàng đi công tác có xu hướng đánh giá cao hơn về dịch vụ hoặc trải nghiệm tổng thể của chuyến bay.
Ngược lại, trong nhóm khách hàng không hài lòng (Dissatisfied), mặc dù tỷ lệ khách đi công tác vẫn chiếm đa số (63.51%), nhưng tỷ lệ khách đi vì mục đích cá nhân đã tăng lên, chiếm 36.49% cao hơn so với nhóm hài lòng.
Giả thuyết kiểm định
\(H_0\): Trải nghiệm khách hàng và mục đích chuyến bay độc lập
\(H_1\): Trải nghiệm khách hàng và mục đích chuyến bay phụ thuộc
# Thực hiện kiểm định Chi bình phương
chi_satisfaction_typeoftravel <- chisq.test(satisfaction_typeoftravel)
# Hiển thị kết quả
chi_satisfaction_typeoftravel
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: satisfaction_typeoftravel
## X-squared = 1549.4, df = 1, p-value < 2.2e-16
Kết quả:
Giá trị thống kê Chi bình phương: X² = 0.45349
Bậc tự do (df) = 1
p-value < 2.2e-16
Giá trị p-value < \(\alpha\) = 0.05, nên bác bỏ H₀ ở mức ý nghĩa 5%.
Điều này cho thấy có mối liên hệ có ý nghĩa thống kê giữa Satisfaction và Type of Travel. Nói cách khác mục đích chuyến bay có ảnh hưởng đến mức độ hài lòng của khách hàng.
satisfaction_typeoftravel1
##
## Business travel Personal Travel Sum
## dissatisfied 37337 21456 58793
## satisfied 52356 18731 71087
## Sum 89693 40187 129880
\[ p_1 = P(\text{Satisfaction} = \text{Satisfied} \mid \text{Type of Travel} = PersonalTravel) \] \[ p_1 = P(\text{Satisfaction} = \text{Satisfied} \mid \text{Type of Travel} = BusinessTravel) \] Giả thuyết kiểm định
\(H_0\): \(p_1 - p_2 = 0\) (Tỷ lệ khách hàng cá nhân và công tác hài lòng bằng nhau)
\(H_1\): \(p_1 - p_2 < 0\) (Tỷ lệ khách hàng cá nhân hài lòng ít hơn tỷ lệ khách hàng công tác hài lòng)
counts <- c(satisfaction_typeoftravel["satisfied", "Personal Travel"], satisfaction_typeoftravel["satisfied", "Business travel"])
totals <- c(sum(satisfaction_typeoftravel["satisfied", ]), sum(satisfaction_typeoftravel["dissatisfied", ]))
test <- prop.test(counts, totals, alternative = "less", correct = FALSE)
test
##
## 2-sample test for equality of proportions without continuity correction
##
## data: counts out of totals
## X-squared = 51063, df = 1, p-value < 2.2e-16
## alternative hypothesis: less
## 95 percent confidence interval:
## -1.0000000 -0.6235745
## sample estimates:
## prop 1 prop 2
## 0.2634940 0.8905142
Tỷ lệ mẫu:
Nhóm 1 (prop 1): 26.35%
Nhóm 2 (prop 2): 89.05%
Kết quả
Khoảng tin cậy 95%, cho hiệu \(p_1 - p_2\) từ -1.0000 đến -0.6236
Giá trị p-value < \(\alpha\) = 0.05, nên bác bỏ H₀ ở mức ý nghĩa 5%.
=> Vậy tỷ lệ ở nhóm 1 (26.35%) nhỏ hơn có ý nghĩa thống kê so với nhóm 2 (89.05%).
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.3
library(epitools)
# Tính RR
riskratio(satisfaction_typeoftravel, method = "wald")
## $data
##
## Business travel Personal Travel Total
## dissatisfied 37337 21456 58793
## satisfied 52356 18731 71087
## Total 89693 40187 129880
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## dissatisfied 1.0000000 NA NA
## satisfied 0.7220174 0.7103644 0.7338614
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## dissatisfied NA NA NA
## satisfied 0 0 0
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Dữ liệu tổng hợp cho thấy trong số 129.880 khách hàng, có 58.793 người không hài lòng với 37.337 người với mục đích Business travel , và 71.087 người hài lòng với 52.356 người với mục đích Business Travel. Khi so sánh tỷ lệ nhập viện giữa hai nhóm, nhóm người không hài lòng được chọn làm nhóm tham chiếu với tỷ lệ rủi ro chuẩn là 1.
Kết quả tính toán cho thấy tỷ số rủi ro (Risk Ratio) của số người không hài lòng so với số người hài lòng là 0.722. Điều này có nghĩa là số người không hài lòng có nguy cơ là người có mục đích Business travel thấp hơn 27.8% so với số người hài lòng trong mẫu dữ liệu này.
Khoảng tin cậy 95% của tỷ số rủi ro cho số người hài lòng dao động từ 0.7103 đến 0.7339. Vì khoảng này không bao gồm giá trị 1, điều đó cho thấy sự khác biệt về khánh hàng công tác hài lòng và không hài lòng có mức ý nghĩa thống kê. Nói tóm lại, tỷ lệ không hài lòng ở nhóm Business travel chỉ bằng khoảng 72.2% so với tỉ lệ hài lòng, cho thấy mức độ hài lòng của khách đi công tác cao hơn rõ rệt so với tỉ lệ khách hàng không hài lòng.
or_result <- oddsratio(satisfaction_typeoftravel)
print(or_result)
## $data
##
## Business travel Personal Travel Total
## dissatisfied 37337 21456 58793
## satisfied 52356 18731 71087
## Total 89693 40187 129880
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## dissatisfied 1.0000000 NA NA
## satisfied 0.6225699 0.6080022 0.6374796
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## dissatisfied NA NA NA
## satisfied 0 0 0
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Khách hàng đi công tác (Business travel) có odds hài lòng thấp hơn đáng kể so với khách đi cá nhân (Personal travel), với OR = 0.623; 95% CI [0.608, 0.637]. Điều này cho thấy khách đi công tác có xu hướng đánh giá chuyến bay thấp hơn, và sự khác biệt này có ý nghĩa thống kê (p < 0.001).