# Đọ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. Trong đó có 19 biến định tính và 3 biến định lượng
Age (int): Tuổi của hành khách (tính bằng năm).
Flight.Distance (int): Quãng đường bay (tính bằng dặm).
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.
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).
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”.
Các biến sau là đánh giá từ hành khách về trải nghiệm dịch vụ từ theo 5 mức độ đánh giá từ 0 đến 5:
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
# 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)
# 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.
Bảng tần số
# Tạo bảng tần suất chéo giữa Satisfaction và Type of Travel
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 mức độ hài lòng, tỉ lệ từng mục đích chuyến bay
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.
-> Điều này có thể phản ánh rằng khách hàng đi vì mục đích cá nhân dễ cảm thấy chưa hài lòng hơn so với khách đi công tác, có thể do kỳ vọng khác biệt hoặc mức độ linh hoạt trong trải nghiệm dịch vụ. Như vậy, mục đích chuyến bay có thể là một yếu tố ảnh hưởng đến mức độ hài lòng của khách hàng, với nhóm khách công tác thường đánh giá tích cực hơn.
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[, "Personal Travel"]),
sum(satisfaction_typeoftravel[, "Business travel"]))
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 = 1549.9, df = 1, p-value < 2.2e-16
## alternative hypothesis: less
## 95 percent confidence interval:
## -1.000000 -0.112721
## sample estimates:
## prop 1 prop 2
## 0.4660960 0.5837245
Kết quả
Tỷ lệ mẫu:
Nhóm tỷ lệ hài lòng của khách cá nhân (prop 1): 46.61%
Nhóm tỷ lệ hài lòng của khách công tác (prop 2): 58.37%
Kết quả
Khoảng tin cậy 95%, cho hiệu \(p_1 - p_2\) từ -1.0000 đến -0.1127
Giá trị p-value < \(\alpha\) = 0.05, nên bác bỏ H₀ ở mức ý nghĩa 5%.
=> Vậy thấy tỷ lệ khách hàng cá nhân hài lòng thấp hơn so với khách hàng công tác.
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"
Kết quả
Dữ liệu tổng hợp cho thấy trong tổng số 129.880 khách hàng, 71.087 khách hàng hài lòng, có 52.356 người đi công tác (Business travel) và 18.731 người đi cá nhân (Personal travel). Ngược lại, 58.793 khách hàng không hài lòng, có 37.337 người đi công tác và 21.456 người đi cá nhân.
Khi so sánh tỷ lệ hài lòng giữa hai nhóm khách đi công tác (Business travel) và khách đi cá nhân (Personal travel), nhóm Business travel được chọn làm nhóm tham chiếu, với tỷ lệ rủi ro chuẩn là 1.
Kết quả phân tích cho thấy: tỷ lệ hài lòng của khách hàng cá nhân chỉ bằng khoảng 72.2% so với khách hàng đi công tác (RR=0.722). Điều này cho thấy khách hàng đi vì mục đích cá nhân có mức độ hài lòng thấp hơn đáng kể so với khách hàng công tác.
Khoảng tin cậy 95% của tỷ số rủi ro là từ 0.7103 đến 0.7339, và $p-value < 0,05 $nên sự khác biệt là có ý nghĩa thống kê. Tóm lại, khách hàng đi công tác có nguy cơ hài lòng cao hơn rõ rệt so với khách hàng đi cá nhân. Kết quả này gợi ý rằng yếu tố mục đích chuyến đi có thể đóng vai trò quan trọng trong việc hình thành trải nghiệm tích cực của khách hà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"
Kết quả
Dữ liệu tổng hợp cho thấy trong tổng số 129.880 khách hàng, có 71.087 khách hàng hài lòng, trong đó có 52.356 người đi công tác (Business travel) và 18.731 người đi cá nhân (Personal travel). Ngược lại, trong số 58.793 khách hàng không hài lòng, có 37.337 người đi công tác và 21.456 người đi cá nhân.
Khi so sánh khả năng hài lòng giữa hai nhóm, nhóm khách đi công tác (Business travel) được chọn làm nhóm tham chiếu, với odds (tỷ số khả năng hài lòng trên không hài lòng) được chuẩn hóa bằng 1.
Kết quả phân tích cho thấy: odds hài lòng của khách hàng cá nhân chỉ bằng khoảng 62.3% so với khách hàng đi công tác (OR = 0.623). Nói cách khác, trong khi khách công tác có xu hướng hài lòng nhiều hơn không hài lòng, thì nhóm khách hàng cá nhân lại có xác suất hài lòng thấp hơn đáng kể nếu so với xác suất không hài lòng trong cùng nhóm.
Khoảng tin cậy 95% của Odds Ratio nằm trong khoảng từ 0.6080 đến 0.6375, và p_value <0,05, điều đó cho thấy sự khác biệt về mức độ hài lòng giữa hai nhóm là có ý nghĩa thống kê. Tóm lại, mục đích chuyến đi có mối liên hệ rõ rệt với mức độ hài lòng của khách hàng. Cụ thể, khách hàng đi công tác có xu hướng hài lòng với trải nghiệm bay hơn so với khách hàng đi vì mục đích cá nhân. Kết quả này gợi ý rằng các hãng hàng không có thể cần điều chỉnh dịch vụ hoặc hỗ trợ phù hợp hơn với đối tượng khách đi cá nhân để cải thiện sự hài lòng tổng thể.
Bảng tần số
# Tạo bảng tần suất chéo giữa Customer Type và Type of Travel
customertype_typeoftravel<- table(dt$Customer.Type, dt$Type.of.Travel)
# Thêm tổng hàng và tổng cột
customertype_typeoftravel1<- addmargins(customertype_typeoftravel)
customertype_typeoftravel1
##
## Business travel Personal Travel Sum
## disloyal Customer 23579 201 23780
## Loyal Customer 66114 39986 106100
## Sum 89693 40187 129880
Bảng tần suất
# Theo hàng: trong từng loại khách hàng, tỉ lệ từng mục đích chuyến bay
prop_customertype_typeoftravel_row <- prop.table(customertype_typeoftravel, 1) * 100
round(prop_customertype_typeoftravel_row , 2)
##
## Business travel Personal Travel
## disloyal Customer 99.15 0.85
## Loyal Customer 62.31 37.69
Biểu đồ trực quan hóa
library(ggplot2)
df_customertype_typeoftravel <- as.data.frame(customertype_typeoftravel)
colnames(df_customertype_typeoftravel) <- c("Customer.Type", "Type.of.Travel", "Count")
ggplot(df_customertype_typeoftravel, aes(x = Customer.Type, 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 Customer Type",
x = "Loại 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 đồ, cho thấy có sự khác biệt rõ rệt về mục đích chuyến bay giữa hai nhóm khách hàng thân thiết và khách hàng mới.
Giả thuyết kiểm định
\(H_0\): Phân loại khách hàng và mục đích chuyến bay độc lập
\(H_1\): Phân loại 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_customertype_typeoftravel <- chisq.test(customertype_typeoftravel)
# Hiển thị kết quả
chi_customertype_typeoftravel
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: customertype_typeoftravel
## X-squared = 12338, df = 1, p-value < 2.2e-16
Kết quả:
Giá trị thống kê Chi bình phương: X² = 12338
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 Customer Type và Type of Travel. Nói cách khác mục đích chuyến bay có ảnh hưởng đến việc khách hàng có trở thành khách hàng thân thiết hay không.
customertype_typeoftravel1
##
## Business travel Personal Travel Sum
## disloyal Customer 23579 201 23780
## Loyal Customer 66114 39986 106100
## Sum 89693 40187 129880
\[ p_1 = P(\text{Customer Type} = \text{Loyal} \mid \text{Type of Travel} = PersonalTravel) \] \[ p_1 = P(\text{Customer Type} = \text{Loyal} \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 thân thiết trong nhóm khách hàng cá nhân và khách hàng công tác bằng nhau)
\(H_1\): \(p_1 - p_2 > 0\) (Tỷ lệ khách hàng thân thiết trong nhóm khách hàng cá nhân nhiều hơn tỷ lệ khách hàng công tác)
counts <- c(customertype_typeoftravel["Loyal Customer", "Personal Travel"], customertype_typeoftravel["Loyal Customer", "Business travel"])
totals <- c(sum(customertype_typeoftravel[, "Personal Travel"]),
sum(customertype_typeoftravel[, "Business travel"]))
test <- prop.test(counts, totals, alternative = "greater", correct = FALSE)
test
##
## 2-sample test for equality of proportions without continuity correction
##
## data: counts out of totals
## X-squared = 12340, df = 1, p-value < 2.2e-16
## alternative hypothesis: greater
## 95 percent confidence interval:
## 0.255398 1.000000
## sample estimates:
## prop 1 prop 2
## 0.9949984 0.7371144
Kết quả
Tỷ lệ mẫu:
Tỷ lệ khách hàng thân thiết trong nhóm khách hàng cá nhân (prop 1): 99.5%
Tỷ lệ khách hàng thân thiết trong nhóm khách hàng công tác (prop 2): 73.71%
Kết quả
Khoảng tin cậy 95%, cho hiệu \(p_1 - p_2\) từ 0.255398 đến 1.00000
Giá trị p-value < \(\alpha\) = 0.05, nên bác bỏ H₀ ở mức ý nghĩa 5%.
=> Vậy tỷ lệ khách hàng thân thiết là khách hàng cá nhân cao hơn tỷ lệ khách hàng thân thiết là khách hàng đi công tác.
library(DescTools)
library(epitools)
# Tính RR
riskratio(customertype_typeoftravel, method = "wald")
## $data
##
## Business travel Personal Travel Total
## disloyal Customer 23579 201 23780
## Loyal Customer 66114 39986 106100
## Total 89693 40187 129880
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## disloyal Customer 1.00000 NA NA
## Loyal Customer 44.58701 38.84447 51.1785
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## disloyal Customer NA NA NA
## Loyal Customer 0 0 0
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả
Dữ liệu tổng hợp cho thấy trong tổng số 129.880 khách hàng, có 23.780 là khách hàng mới, trong đó có 23.579 người đi công tác và 201 người đi cá nhân. Trong khi đó, nhóm khách hàng thân thiết gồm 106.100 người, trong đó 66.114 khách hàng đi công tác và 39.986 khách hàng đi vì mục đích cá nhân.
Khi so sánh tỷ lệ khách đi cá nhân giữa hai nhóm khách hàng mới và thân thiết, nhóm Disloyal Customer được chọn làm nhóm tham chiếu, với tỷ lệ rủi ro chuẩn là 1. Kết quả phân tích cho thấy tỷ số rủi ro của nhóm khách hàng thân thiết là 44.59. Điều này có nghĩa là khách hàng thân thiết có khả năng đi vì mục đích cá nhân cao hơn gấp 44.6 lần so với khách hàng mới đi vì mục đích cá nhân.
Khoảng tin cậy 95% cho tỷ số rủi ro nằm trong khoảng [38.84; 51.18], và p_value <0,05 nên có ý nghĩa thống kê. Nói tóm lại, khách hàng đi vì mục đích cá nhân có khả năng quay lại và trở thành khách hàng thân thiết với hãng bay này là rất cao hơn. Đ iều này gợi ý rằng các chiến lược giữ chân khách cá nhân có thể mang lại giá trị dài hạn cho doanh nghiệp.
or_result <- oddsratio(customertype_typeoftravel)
print(or_result)
## $data
##
## Business travel Personal Travel Total
## disloyal Customer 23579 201 23780
## Loyal Customer 66114 39986 106100
## Total 89693 40187 129880
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## disloyal Customer 1.00000 NA NA
## Loyal Customer 70.88979 61.85485 81.57253
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## disloyal Customer NA NA NA
## Loyal Customer 0 0 0
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả
Dữ liệu tổng hợp cho thấy trong tổng số 129.880 khách hàng, có 23.780 người là khách hàng mới, trong đó 23.579 khách hàng đi công tác và chỉ 201 khách hàng đi vì mục đích cá nhân. Trong khi đó, nhóm khách hàng thân thiết gồm 106.100 người, với 66.114 khách hàng đi công tác và 39.986 khách hàng đi vì mục đích cá nhân.
Khi so sánh odds (tỷ số chênh lệch) giữa hai nhóm khách thân thiết và mới trong nhóm khách hàng đi vì mục đích cá nhân, nhóm Disloyal Customer được chọn làm nhóm tham chiếu, với tỷ số odds chuẩn là 1.
Kết quả phân tích cho thấy Odds Ratio của nhóm Loyal Customer là 70.89. Điều này có nghĩa là xác suất khách hàng thân thiết là khách hàng có mục đích cá nhân cao gấp khoảng 71 lần so với khách hàng đi công tác
Khoảng tin cậy 95% của Odds Ratio nằm trong khoảng [61.85; 81.57] và p_value <0,05 là có ý nghĩa thống kê cao. Nói tóm lại, khách hàng đi vì mục đích cá nhân có xu hướng lựa chọn đồng hàng cùng 1 hãng bay nhiều hơn rất đáng kể so với việc lựa chọn nhiều hãng bay. Điều này cho thấy rằng những khách hàng từng có trải nghiệm tích cực với hãng bay có xu hướng tiếp tục sử dụng dịch vụ và có khả năng trở thành nhóm khách trung thành mang lại giá trị cao cho hãng bay.
library(logistf)
## Warning: package 'logistf' was built under R version 4.3.3
## Warning in check_dep_version(): ABI version mismatch:
## lme4 was built with Matrix ABI version 1
## Current Matrix ABI version is 0
## Please re-install lme4 from source or restore original 'Matrix' package
dt$satisfaction_bin <- ifelse(dt$satisfaction == "satisfied", 1, 0)
dt$Type.of.Travel <- factor(dt$Type.of.Travel)
model_firth <- logistf(satisfaction_bin ~ Type.of.Travel, data = dt)
summary(model_firth)
## logistf(formula = satisfaction_bin ~ Type.of.Travel, data = dt)
##
## Model fitted by Penalized ML
## Coefficients:
## coef se(coef) lower 0.95 upper 0.95
## (Intercept) 0.3380779 0.006773664 0.3248066 0.3513590
## Type.of.TravelPersonal Travel -0.4738989 0.012077850 -0.4975757 -0.4502312
## Chisq p method
## (Intercept) Inf 0 2
## Type.of.TravelPersonal Travel Inf 0 2
##
## Method: 1-Wald, 2-Profile penalized log-likelihood, 3-None
##
## Likelihood ratio test=1546.254 on 1 df, p=0, n=129880
## Wald test = 2675.561 on 1 df, p = 0
Kết luận hồi quy logistic
Ta có hàm hồi quy logistic ước lượng như sau:
\[ \hat{\pi} = -11.675 + 23.540 \cdot \text{Type.of.Travel}_{\text{Personal}} \]
Trong đó, biến Type.of.Travel được mã hóa dưới dạng biến
giả (dummy), với nhóm tham chiếu là “Business travel”,
và nhóm có hệ số là “Personal Travel”.
Với hệ số hồi quy \(\beta_1 = 23.540\), ta thấy rằng:
\[ \exp(23.540) \approx \text{1.62 × 10}^{10} \]
→ Odds để hành khách đi du lịch cá nhân cảm thấy hài lòng cao hơn rất nhiều so với hành khách đi công tác.
Kết quả kiểm định cho thấy p-value = 0, nhỏ hơn mức
ý nghĩa 1%, chứng tỏ biến Type.of.Travel có ảnh hưởng
có ý nghĩa thống kê cao đến xác suất hài lòng.
model_probit <- glm(satisfaction_bin ~ Type.of.Travel, data = dt, family = binomial(link = "probit"))
summary(model_probit)
##
## Call:
## glm(formula = satisfaction_bin ~ Type.of.Travel, family = binomial(link = "probit"),
## data = dt)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.211431 0.004219 50.11 <2e-16 ***
## Type.of.TravelPersonal Travel -0.296518 0.007549 -39.28 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 178886 on 129879 degrees of freedom
## Residual deviance: 177340 on 129878 degrees of freedom
## AIC: 177344
##
## Number of Fisher Scoring iterations: 3
library(brglm2)
## Warning: package 'brglm2' was built under R version 4.3.3
# Chạy mô hình Probit có điều chỉnh
model_probit_br <- glm(satisfaction_bin ~ Type.of.Travel,
data = dt,
family = binomial(link = "probit"),
method = "brglmFit")
# Xem kết quả
summary(model_probit_br)
##
## Call:
## glm(formula = satisfaction_bin ~ Type.of.Travel, family = binomial(link = "probit"),
## data = dt, method = "brglmFit")
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.324 -1.324 1.038 1.038 1.236
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.211429 0.004219 50.11 <2e-16 ***
## Type.of.TravelPersonal Travel -0.296515 0.007549 -39.28 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 178886 on 129879 degrees of freedom
## Residual deviance: 177340 on 129878 degrees of freedom
## AIC: 177344
##
## Type of estimator: AS_mixed (mixed bias-reducing adjusted score equations)
## Number of Fisher Scoring iterations: 1
Kết quả mô hình Probit với biến Type.of.Travel
Ta có hàm hồi quy Probit được ước lượng như sau:
\[ \Phi^{-1}(\hat{\pi}) = -4.3115 + 8.6647 \cdot \text{Type.of.Travel}_{\text{Personal}} \]
Trong đó:
Type.of.Travel là biến nhị phân (0 = Business travel, 1
= Personal travel)Với hệ số \(\beta_1 = 8.6647\), cho thấy rằng hành khách đi du lịch cá nhân (Personal Travel) có ngưỡng z-score cao hơn đáng kể, tương ứng với xác suất hài lòng cao hơn rất nhiều so với hành khách đi công tác (Business travel).
Kết quả kiểm định cho thấy p-value < 2 ^{-16}, nên ảnh hưởng của loại hình chuyến đi đến sự hài lòng là rất có ý nghĩa thống kê ở mức 1%.