Mục đích của nghiên cứu này là phân tích hành vi lựa chọn hạng vé bao gồm hạng thương gia và hạng phổ thông của khách hàng khi đặt vé máy bay trên trang web EaseMy Trip. Bằng cách thu thập và phân tích các thông tin liên quan đến giá vé, tên chuyến bay, nơi khởi hành, điểm đến, thời gian khởi hành, và các yếu tố khác. Nghiên cứu nhằm đưa ra các thông tin hữu ích giúp cải thiện dịch vụ của EaseMy Trip và có thể áp dụng cho các doanh nghiệp khác trong ngành du lịch và hàng không.
library(tidyverse)
library(readxl)
library(DT)
library(DescTools)
library(epitools)
library(scales)
data <- read.csv("D:/Phantichdulieudinhtinh/Easymytrip.csv")
df <- data
str(df)
## 'data.frame': 300153 obs. of 12 variables:
## $ X : int 0 1 2 3 4 5 6 7 8 9 ...
## $ airline : chr "SpiceJet" "SpiceJet" "AirAsia" "Vistara" ...
## $ flight : chr "SG-8709" "SG-8157" "I5-764" "UK-995" ...
## $ source_city : chr "Delhi" "Delhi" "Delhi" "Delhi" ...
## $ departure_time : chr "Evening" "Early_Morning" "Early_Morning" "Morning" ...
## $ stops : chr "zero" "zero" "zero" "zero" ...
## $ arrival_time : chr "Night" "Morning" "Early_Morning" "Afternoon" ...
## $ destination_city: chr "Mumbai" "Mumbai" "Mumbai" "Mumbai" ...
## $ class : chr "Economy" "Economy" "Economy" "Economy" ...
## $ duration : num 2.17 2.33 2.17 2.25 2.33 2.33 2.08 2.17 2.17 2.25 ...
## $ days_left : int 1 1 1 1 1 1 1 1 1 1 ...
## $ price : int 5953 5953 5956 5955 5955 5955 6060 6060 5954 5954 ...
head(df,6)
## X airline flight source_city departure_time stops arrival_time
## 1 0 SpiceJet SG-8709 Delhi Evening zero Night
## 2 1 SpiceJet SG-8157 Delhi Early_Morning zero Morning
## 3 2 AirAsia I5-764 Delhi Early_Morning zero Early_Morning
## 4 3 Vistara UK-995 Delhi Morning zero Afternoon
## 5 4 Vistara UK-963 Delhi Morning zero Morning
## 6 5 Vistara UK-945 Delhi Morning zero Afternoon
## destination_city class duration days_left price
## 1 Mumbai Economy 2.17 1 5953
## 2 Mumbai Economy 2.33 1 5953
## 3 Mumbai Economy 2.17 1 5956
## 4 Mumbai Economy 2.25 1 5955
## 5 Mumbai Economy 2.33 1 5955
## 6 Mumbai Economy 2.33 1 5955
‘EaseMy Trip’ là một nền tảng internet để đặt vé máy bay. Dữ liệu được thu thập chia thành 2 nhóm vé: một nhóm dành cho vé hạng phổ thông và nhóm còn lại dành cho vé hạng thương gia. Tổng cộng có 300153 thông tin đặt vé máy bay riêng biệt được trích xuất từ trang web. Dữ liệu được thu thập trong 50 ngày, từ ngày 11 tháng 2 đến ngày 31 tháng 3 năm 2022.
Airline: Tên của hãng hàng không, gồm có 6 hãng hàng không
Flight: Mã chuyến bay
Source City: Thành phố nơi chuyến bay cất cánh
Departure Time: Khoảng thời gian chuyến bay khởi hành
Stops: Số điểm dừng chân.
Arrival Time: Khoảng thời gian chuyến bay hạ cánh
Destination City: Thành phố nơi chuyến bay hạ cánh
Class: Hạng ghế mà khách hàng lựa chọn. Có 2 hạng ghế là hạng phổ thông và hạng thương gia
Duration: Khoảng thời gian chuyến bay di chuyển (được tính bằng giờ)
Days Left: Chênh lệch giữa thời gian bay và thời gian đặt vé
Price: Giá vé
Trong ngành hàng không, chúng ta cần phải hiểu rõ hành vi và nhu cầu của khách hàng để có thể tối ưu hoá các dịch vụ, nâng cao doanh thu và trải nghiệm của khách hàng. Một trong những yếu tố quan trọng trong ngành hàng không là dự đoán được xác suất khách hàng chọn hạng vé thương gia để kịp thời đưa ra các chương trình đáp ứng cho nhu cầu của họ.
Biến phụ thuộc (biến được giải thích): Class (Gồm 2 biểu hiện: Business và Economy)
Biến giải thích:
Source City: Kinh tế thị trường ở các thành phố có thể ảnh hưởng đến xác suất chọn hạng vé thương gia của khách hàng, ở những thành phố có nền kinh tế phát triển thì dự đoán nhu cầu chọn hạng vé thương gia của khách hàng có thể lớn hơn so với những thành phố có nền kinh tế ít phát triển.
Airline: Mỗi hãng hàng không có chất lượng dịch vụ và giá cả khách nhau. Ví dụ, những hãng hàng không mang thương hiệu lớn thì tỷ lệ chọn vé hạng thương gia sẽ cao hơn.
Price: Theo dự đoán thì mức giá là một yếu tố quan trọng ảnh hưởng đến lựa chọn hạng vé của khách hàng. Từng phân khúc khách hàng sẽ lựa chọn hạng vé phù hợp với nhu cầu và khả năng chi trả của họ.
Stop_ans: Giả thiết số điểm dừng của chuyến bay cũng có ảnh hưởng đến hành vi lựa chọn hạng vé của khách hàng. Những khách hàng chọn hạng vé thương gia thường sẽ chú trọng vào dịch vụ của chuyến bay hơn so với khách hàng chọn hạng vé phổ thông. Những chuyến bay có điểm dừng thường gây ra những rắc rối về việc chuyển hành lý và mất thời gian hơn, nên dự đoán xác suất chọn hạng vé thương gia ở những chuyến bay không có điểm dừng sẽ cao hơn so với những chuyến bay có điểm dừng.
Day_left: Thời gian đặt vé trước chuyến bay cũng có thể ảnh hưởng đến lựa chọn hạng vé của khách hàng. Đối với những chuyến bay có thời gian đặt vé sớm, thì sẽ có nhiều lựa chọn về giá cả, dịch vụ hoặc hạng ghế. Nhưng đối với những chuyến bay đặt quá gần ngày bay thì sẽ có những hạn chế, ví dụ như hết vé hạng phổ thông.
Duration: Thời gian bay cũng là một trong những yếu tố quan trọng ảnh hưởng tới hành vi lựa chọn hạng vé của khách hàng. Đối với những chuyến bay dài thì khách hàng sẽ có xu hướng lựa chọn hạng vé thương gia để đảm bảo về dịch vụ và sự thoải mái.
Phân tổ giá của mỗi chuyến bay thành 2 biểu hiện: Thấp và Cao
str(df)
## 'data.frame': 300153 obs. of 12 variables:
## $ X : int 0 1 2 3 4 5 6 7 8 9 ...
## $ airline : chr "SpiceJet" "SpiceJet" "AirAsia" "Vistara" ...
## $ flight : chr "SG-8709" "SG-8157" "I5-764" "UK-995" ...
## $ source_city : chr "Delhi" "Delhi" "Delhi" "Delhi" ...
## $ departure_time : chr "Evening" "Early_Morning" "Early_Morning" "Morning" ...
## $ stops : chr "zero" "zero" "zero" "zero" ...
## $ arrival_time : chr "Night" "Morning" "Early_Morning" "Afternoon" ...
## $ destination_city: chr "Mumbai" "Mumbai" "Mumbai" "Mumbai" ...
## $ class : chr "Economy" "Economy" "Economy" "Economy" ...
## $ duration : num 2.17 2.33 2.17 2.25 2.33 2.33 2.08 2.17 2.17 2.25 ...
## $ days_left : int 1 1 1 1 1 1 1 1 1 1 ...
## $ price : int 5953 5953 5956 5955 5955 5955 6060 6060 5954 5954 ...
summary(df$price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1105 4783 7425 20890 42521 123071
df$price_level <- cut(df$price, breaks = c(0, 20890, 123071), labels = c("Thap", "Cao"))
str(df$price_level)
## Factor w/ 2 levels "Thap","Cao": 1 1 1 1 1 1 1 1 1 1 ...
Phân tổ thời gian đặt vé trước chuyến bay thành 2 biểu hiện “sớm”,“Muộn”
df$dayleft_level <- cut(df$days_left, breaks = c(0, 26, 50), labels = c("Muộn", "Sớm"))
str(df$dayleft_level)
## Factor w/ 2 levels "Muộn","Sớm": 1 1 1 1 1 1 1 1 1 1 ...
summary(df$dayleft_level)
## Muộn Sớm
## 152712 147441
Phân tổ thời gian đặt vé trước chuyến bay thành 2 biểu hiện “sớm”,“Muộn”
df$duration_level <- cut(df$duration, breaks = c(0, 12.22, 50), labels = c("Thấp", "Cao"))
str(df$duration_level)
## Factor w/ 2 levels "Thấp","Cao": 1 1 1 1 1 1 1 1 1 1 ...
summary(df$duration_level)
## Thấp Cao
## 166999 133154
Trong phần này, chúng tôi thực hiện thống kê mô tả cho dữ liệu bao gồm dữ liệu định tính và dữ liệu định lượng. Đối với dữ liệu định tính, thực hiện lập bảng tần số, bảng tần suất và vẽ đồ thị. Đối với dữ liệu định lượng, thực hiện thống kê các đặc trưng đo lường.
Đầu tiên, thực hiện thống kê mô tả cho biến Class thể hiện hạng vé mà khách hàng lựa chọn. Bao gồm hai biểu hiện là hạng ghế phổ thông và hạng ghế thương gia. Đây cũng chính là biến được giải thích trong bài nghiên cứu.
tmp <- table(df$class)
addmargins(tmp)
##
## Business Economy Sum
## 93487 206666 300153
round((table(df$class)/sum(table(df$class))*100),2)
##
## Business Economy
## 31.15 68.85
df %>% ggplot(map = aes(x=fct_infreq(class), y= after_stat(count)))+geom_bar(fill = 'skyblue')+geom_text(aes(label=percent(after_stat(count/sum(count)),accuracy = .01)), stat = 'count', color = 'black',vjust = 2) + labs(x = 'Hạng ghế',y="số lượng", title="Phân chia số lượng vé theo từng hạng ghế")+theme_minimal()
Trong số 300153 vé máy bay:
Số người đặt hạng ghế phổ thông có 206666 vé, chiếm 68,85%
Số người đặt hạng ghế thương gia có 93487 vé, chiếm 31,15%
Như vậy, số người đặt vé hạng ghế phổ thông nhiều hơn 113179 (Khoảng 37,71%) so với số người sở hữu vé là hạng ghế thương gia.
Biến airline là biến đại diện cho các hãng hàng không. Có 6 hãng hàng không trong bài nghiên cứu này.
tmp1 <- table(df$airline)
addmargins(tmp1)
##
## Air_India AirAsia GO_FIRST Indigo SpiceJet Vistara Sum
## 80892 16098 23173 43120 9011 127859 300153
round((table(df$airline)/sum(table(df$airline))*100),2)
##
## Air_India AirAsia GO_FIRST Indigo SpiceJet Vistara
## 26.95 5.36 7.72 14.37 3.00 42.60
df %>% ggplot(map = aes(x=fct_infreq(airline), y= after_stat(count)))+geom_bar(fill = 'salmon')+geom_text(aes(label=percent(after_stat(count/sum(count)),accuracy = .01)), stat = 'count', color = 'black',vjust = 1) + labs(x = 'Hãng hàng không',y="số lượng", title="Phân chia số lượng vé theo từng hãng hàng không")+theme_minimal()
Thống kê cho thấy trong số 300153 vé máy bay được bán ra sắp xếp theo thứ tự tăng dần, ta có thể thấy rằng hãng hàng không Vistara chiếm tỷ lệ cao nhất và hãng Spicejet chiếm tỷ lệ thấp nhất cụ thể như sau:
Hãng hàng không Vistara có 127859 vé chiếm tỷ lệ là 42.6%
Hãng hàng không Air_India có 80892 vé chiếm tỷ lệ là 26.95%
Hãng hàng không Indigo có 43120 vé chiếm tỷ lệ là 14.37%
Hãng hàng không GO_FIRST có 23173 vé chiếm tỷ lệ là 7.72%
Hãng hàng không AirAsia có 16098 vé chiếm tỷ lệ là 5.36%
Hãng hàng không SpiceJet có 9011 vé chiếm tỷ lệ là 3%
source_frequency <- table(df$source_city)
addmargins(source_frequency)
##
## Bangalore Chennai Delhi Hyderabad Kolkata Mumbai Sum
## 52061 38700 61343 40806 46347 60896 300153
round((table(df$source_city)/sum(table(df$source_city))*100),2)
##
## Bangalore Chennai Delhi Hyderabad Kolkata Mumbai
## 17.34 12.89 20.44 13.60 15.44 20.29
df %>% ggplot(map = aes(x=fct_infreq(source_city), y=after_stat(count)))+geom_bar(fill='skyblue')+geom_text(aes(label=percent(after_stat(count/sum(count)),accuracy = .01)), stat = 'count', color = 'black',vjust = 2) + labs(x = 'Thành phố khởi hành', y = 'Số lượng', title = "Số lượng chuyến bay tương ứng với từng thành phố mà chuyến bay khởi hành")+theme_minimal()
Trong số 300153 thông tin về điểm khởi hành của các chuyến bay, thành phố có chuyến bay khởi hành nhiều nhất là Delhi và thành phố có chuyến bay khỏi hành ít nhất là Chennai, cụ thể như sau:
Số lượng chuyến bay ở Delhi là 52061, chiếm 20,44% tổng chuyến bay.
Số lượng chuyến bay ở Mumbai là 60896 , chiếm 20,29% tổng số chuyến bay
Số lượng chuyến bay ở Bangalore là 52061 , chiếm 17,34% tổng số chuyến bay
Số lượng chuyến bay ở Kolkata là 46347 , chiếm 15,44% tổng số chuyến bay
Số lượng chuyến bay ở Hyderabad là 40806, chiếm 13,60% tổng số chuyến bay
Số lượng chuyến bay ở Chennai là 38700, chiếm 12,89% tổng số chuyến bay.
Nhận xét: Qua biểu đồ này, chúng ta có thể thấy rõ ràng rằng Delhi và Mumbai là hai trung tâm hàng không lớn nhất, trong khi các thành phố khác như Bangalore, Kolkata, Hyderabad, và Chennai có số lượng chuyến bay ít hơn đáng kể.
stops_frequency <- table(df$stops)
addmargins(stops_frequency)
##
## one two_or_more zero Sum
## 250863 13286 36004 300153
round((table(df$stops)/sum(table(df$stops))*100),2)
##
## one two_or_more zero
## 83.58 4.43 12.00
df %>% ggplot(map = aes(x=fct_infreq(stops), y=after_stat(count)))+geom_bar(fill='violet')+geom_text(aes(label=percent(after_stat(count/sum(count)),accuracy = .01)), stat = 'count', color = 'black',vjust = 1.2) + labs(x = 'Số điểm dừng', y = 'Số lượng', title = "Số lượng chuyến bay tương ứng với số điểm dừng")+theme_minimal()
Trong tổng số 300153 thông tin về số điểm dừng của các chuyến bay
Đa số khách hàng lựa chọn chuyến bay không có điểm dừng và nó chiếm tới 83,58% so với tổng 300153 chuyến bay.
Số chuyến bay có 1 điểm dừng chiếm 12%.
Số chuyến bay có 2 hoặc nhiều hơn 2 điểm dừng chỉ chiếm 4,43%.
Nhận xét: Đa số hành khách ưu tiên lựa chọn chuyến bay thẳng, không có điểm dừng. Điều này có thể do các lý do như tiết kiệm thời gian, giảm thiểu rủi ro mất hành lý và hạn chế phiền toái khi chuyển giữa các chuyến bay. Có 12% khách hàng lựa chọn chuyến bay có 1 điểm dừng, các chuyến bay này thường có giá rẻ hơn so với chuyến bay thẳng, hoặc có thể hành khách không tìm được chuyến bay thẳng phù hợp với lịch trình của họ.Rất ít hành khách chọn chuyến bay có 2 hoặc nhiều hơn 2 điểm dừng. Những chuyến bay này thường kéo dài thời gian di chuyển, có thể gây mệt mỏi cho hành khách và tăng khả năng gặp sự cố.
Biến Price là biến thể hiện cho giá vé máy bay mà khách hàng đã mua, là một biến định lượng. Để mô tả cho biến này, ta thực hiện tính toán các đặc trưng đo lường:
summary(df$price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1105 4783 7425 20890 42521 123071
var(df$price)
## [1] 515188643
sd(df$price)
## [1] 22697.77
ggplot(df, aes(x = price)) +
geom_density(fill = "skyblue", color = "blue", alpha = 0.5) +
labs(x = "Giá vé máy bay", y="Mật độ", title="Biểu đồ phân phối của giá vé")+theme_minimal()
Từ kết quả trên, ta nhận thấy rằng:
Giá vé thấp nhất là 1105 đơn vị tiền tệ, giá vé cao nhất là 123071 đơn vị tiền tệ. Có khoảng cách giữa vé thấp nhất và vé cao nhất là rất lớn, cho thấy có sự đa dạng rất lớn trong giá vé.
Có 25% giá vé thấp hơn giá 4783 đơn vị tiền tệ, có 50% giá vé thấp hơn giá trị 7425 đơn vị tiền tệ, có 75% giá vé thấp hơn 42521 đơn vị tiền tệ. Phân phối giá vé lệch, phần lớn giá vé nằm dưới mức 42521 đơn vị tiền tệ.
Mức trung bình của giá vé là 20890 đơn vị tiền, cao hơn giá trị trung vị. Điều này cho thấy rằng có một số giá trị rất cao kéo giá trị trung bình lên.
Nhìn vào phương sai của dữ liệu, Phương sai lớn cho thấy sự biến thiên lớn trong dữ liệu. Độ lệch chuẩn cao cũng phán ánh sự phân tán lớn xung quanh giá trị trung bình.
summary(df$days_left)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 15 26 26 38 49
var(df$days_left)
## [1] 183.9008
sd(df$days_left)
## [1] 13.561
Trong 300513 người trong khảo sát cho biết thông tin về khoảng thời gian từ lúc đặt vé đén lúc đặt vé đến lúc bay như sau:
Thời gian từ lúc đặt vé đến khi bay của các hành khách ngắn nhất là một ngày và dài nhất là 49 ngày.
Thời gian trung bình của số lượng hành khách khảo sát được là 26 ngày.
25% người trong nhóm trên đặt vé trước ngày bay 15 ngày
50% người trong nhóm khảo sát đặt vé trước ngày bay 26 ngày
75% người trong nhóm đặt vé trước ngày bay 38 ngày
Độ lệch chuẩn của biến days-left là 13.561 cho biết mức đọ phân tán của thời gian từ ngày đặt vé đến ngày bay trong nhóm người khảo sát được so với giá trị trung bình là 13.561 ngày.
ggplot(df, aes(x = days_left)) +
geom_density(fill = "skyblue", color = "blue", alpha = 0.5) +
labs(x = "thời gian đặt vé trước chuyến bay",y="Mật độ", title="Biểu đồ phân phối của thời gian đặt vé trước chuyến bay")+theme_minimal()
Nhận xét
Hình dạng phân bố: Mật độ phân bố có xu hướng gần như đều từ khoảng ngày thứ 10 đến ngày thứ 45 trước ngày bay. Điều này cho thấy nhiều người có xu hướng đặt vé trong khoảng thời gian này.
Đặt vé sớm: Số người đặt vé bắt đầu tăng từ rất ít ở gần ngày thứ 0 và tăng dần đến khoảng ngày thứ 10. Có rất ít người đặt vé gần ngày bay.
Giảm đặt vé gần ngày bay: Có sự giảm đột ngột trong số người đặt vé khi còn ít ngày trước ngày bay (dưới 10 ngày). Điều này có thể do giá vé tăng hoặc thiếu vé.
Phân bố ổn định: Trong khoảng từ 10 ngày đến 45 ngày trước ngày bay, mật độ phân bố ổn định, cho thấy nhiều người có xu hướng đặt vé trong giai đoạn này, có thể do đây là khoảng thời gian tối ưu về giá cả
Giảm mạnh sau ngày 45: Số người đặt vé giảm dần sau khoảng 45 ngày trước ngày bay. Có thể vì việc đặt vé quá xa trước ngày bay ít phổ biến hoặc ít người có kế hoạch cụ thể xa đến vậy.
summary(df$duration)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.83 6.83 11.25 12.22 16.17 49.83
var(df$duration)
## [1] 51.72482
sd(df$duration)
## [1] 7.191997
Trong bộ dữ liệu khảo sát được ta có thông tin về thời gian bay như sau:
Chuyến bay ngắn nhất kéo dài 0.83 giờ tương đương với khoảng 50 phút
chuyến bay dài nhất kéo dài 49.83 giờ tương đương với khoảng 2 ngày 1 giờ 50 phút
25% chuyến bay kéo dài trong 6.83 giờ
50% chuyến bay kéo dài trng 11.25 giờ
75% chuyến bay kéo dài trong 16.17 giờ
Thời gian bay trung bình khảo sát được là 12.22 giờ
ggplot(df, aes(x = duration)) +
geom_density(fill = "skyblue", color = "blue", alpha = 0.5) +
labs(x = "thời gian bay")+theme_minimal()
Nhận xét
Đỉnh cao ngay sát gần 0: Có một đỉnh rất cao ở khoảng thời gian ngắn nhất, cho thấy rằng phần lớn các chuyến bay kéo dài rất ngắn, có thể là các chuyến bay nội địa hoặc các chuyến bay chỉ kéo dài khoảng 2-3 giờ.
Giảm dần sau đỉnh đầu tiên: Sau đỉnh cao ban đầu, mật độ giảm dần nhưng vẫn có những đỉnh cao khác trong khoảng từ 6 đến 12 giờ. Điều này có thể biểu hiện cho các chuyến bay nội địa dài hơn hoặc các chuyến bay quốc tế ngắn.
Đỉnh nhỏ khoảng từ 14 đến 20 giờ: Có một đỉnh nhỏ từ khoảng thời gian 14 đến 20 giờ, cho thấy có một số chuyến bay kéo dài trong khoảng thời gian này, có thể là các chuyến bay quốc tế dài.
Giảm mạnh sau 20 giờ: Sau khoảng 20 giờ, mật độ giảm đáng kể, cho thấy rất ít chuyến bay kéo dài hơn 20 giờ. Điều này hợp lý vì hầu hết các chuyến bay quốc tế dài nhất thường không kéo dài hơn khoảng thời gian này.
Gần như không có chuyến bay kéo dài hơn 30 giờ: Từ khoảng 30 giờ trở đi, mật độ giảm xuống gần bằng 0, cho thấy rất ít hoặc không có chuyến bay nào kéo dài hơn khoảng thời gian này. Điều này có thể bao gồm các chuyến bay có nhiều điểm dừng hoặc các hành trình đặc biệt.
Tóm lại, biểu đồ này cho thấy hầu hết các chuyến bay kéo dài dưới 10 giờ, với phần lớn các chuyến bay rất ngắn. Có một số ít chuyến bay kéo dài từ 10 đến 20 giờ, và rất hiếm có chuyến bay kéo dài hơn 20 giờ.
addmargins(table(df$airline, df$class))
##
## Business Economy Sum
## Air_India 32898 47994 80892
## AirAsia 0 16098 16098
## GO_FIRST 0 23173 23173
## Indigo 0 43120 43120
## SpiceJet 0 9011 9011
## Vistara 60589 67270 127859
## Sum 93487 206666 300153
prop.table(table(df$airline, df$class), margin = 2) * 100
##
## Business Economy
## Air_India 35.189919 23.222978
## AirAsia 0.000000 7.789380
## GO_FIRST 0.000000 11.212778
## Indigo 0.000000 20.864583
## SpiceJet 0.000000 4.360175
## Vistara 64.810081 32.550105
df %>% count(class,airline) %>% group_by(class) %>% mutate(psl = n/sum(n)) %>% ggplot(aes(x=class,y=n,fill= airline))+geom_col() + geom_text(aes(label = percent(psl,accuracy = .01)), position = position_stack(vjust = .5), color = 'black') + labs( x ='Hạng vé', y = 'số lượng', title = "Đồ thị của số lượng chuyến bay của hãng hàng không theo hạng ghế")+theme_minimal()
Nhìn vào bảng và đồ thị số lượng chuyến bay của các hãng hàng không theo hạng ghế, chúng ta có thể đưa ra một số nhận xét:
Vistara: Chiếm tỉ lệ cao nhất trong hạng Business (64.81%) và cũng có tỉ lệ cao nhất trong hạng Economy (32.55%). Điều này cho thấy Vistara có sự phân phối đều hơn giữa hai hạng ghế so với các đối thủ khác.
Air_India: Chiếm tỉ lệ cao thứ hai trong hạng Business (35.19%), nhưng chỉ chiếm tỉ lệ cao thứ hai trong hạng Economy (23.22%).
AirAsia và GO_FIRST, Indigo và SpiceJet: Không được khách hàng ưa chuộng cho hạng Business, chỉ có trong hạng Economy. Điều này có thể cho thấy các hãng này chủ yếu cung cấp dịch vụ Economy và ít được người dùng chọn lựa trong hạng ghế cao cấp hơn.
class_source <- table(df$class,df$source_city)
addmargins(class_source)
##
## Bangalore Chennai Delhi Hyderabad Kolkata Mumbai Sum
## Business 16441 12529 18316 12870 13473 19858 93487
## Economy 35620 26171 43027 27936 32874 41038 206666
## Sum 52061 38700 61343 40806 46347 60896 300153
df %>% ggplot(aes(x = fct_infreq(source_city), fill = class)) +
geom_bar(position = "dodge") +
geom_text(aes(label = scales::percent(after_stat(count / sum(count)), accuracy = 0.01)),
stat = "count",
position = position_dodge(width = 0.9),
vjust = -0.5,
color = 'black') +
scale_fill_manual(values = c("Economy" = "skyblue", "Business" = "brown")) + labs(x = 'Thành phố', y = 'Số lượng', fill = 'Hạng vé',
title = "Số lượng chuyến bay tương ứng với hạng vé và thành phố xuất phát") + theme_minimal()
Trong tổng số 300153 quan sát
Đối với 61343 chuyến bay khởi hành ở Delhi, có 18316 hành khách chọn hạng vé thương gia, chiếm 6,1% so với tổng chuyến bay
Đối với 60896 chuyến bay khởi hành ở Mumbai, có 19858 hàng khách chọn hạng vé thương gia, chiếm 6,62% so với tổng chuyến bay
Đối với 52061 chuyến bay khởi hành ở Bangalore, có 16441 hành khách chọn hạng vé thương gia,chiếm 5,48% so với tổng chuyến bay
Đối với 46347 chuyến bay khởi hành ở Kolkata, có 13473 hành khách chọn hạng vé thương gia, chiếm 4,49% so với tổng chuyến bay
Đối với 40806 chuyến bay khởi hành ở Hyderabad, có 12870 hành khách chọn hạng vé thương gia, chiếm 4,29% so với tổng chuyến bay
Đối với 38700 chuyến bay khởi hành ở Chennai, có 12529 hành khách chọn hạng vé thương gia,chiếm 4,17% so với tổng chuyến bay
Nhận xét: Nhìn vào kết quả trên ta thấy, mặc dù Delhi là thành phố có nhiều chuyến bay khởi hành nhất, tuy nhiên Mumbai là thành phố có nhiều hành khách chọn hạng vé thương gia nhất (chiếm 6,62% so với tổng chuyến bay). Số liệu trên cho thấy sự khác biệt rõ rệt trong hành vi chọn hạng vé của hành khách tại các thành phố khác nhau. Các thành phố lớn như Delhi và Mumbai có tỷ lệ hành khách chọn hạng vé thương gia cao hơn so với các thành phố nhỏ hơn.
df %>% ggplot(aes(x = class , y = duration)) +
geom_boxplot(fill = "lightblue", color = "steelblue") +
labs(x = "Hạng vé", y = "Thời gian của chuyến bay", title = "Sự phân bố thời gian của chuyến bay theo từng hạng vé") +
theme_minimal()
Nhận xét: Nhìn vào đồ thị ta thấy, đối với hạng ghế thương gia, khoảng thời gian di chuyển của chuyến bay chủ yếu giao động từ khoảng 8-18h. Đối với hạng ghế phổ thông, khoảng thời gian di chuyển của chuyến bay chủ yếu giao động ở khoảng 2h-16h. Ta nhận ra khoảng thời gian di chuyển của chuyến bay đối với hạng ghế thương gia phân bổ ở khoảng cao hơn so với thời gian di chuyển của chuyến bay đối với hạng ghế phổ thông. Điều này nguyên nhân có thể do đối với các chuyến bay càng dài thì khách hàng sẽ có xu hướng chọn hạng ghế thương gia. Ở cả 2 hạng ghế thương gia và hạng ghế phổ thông đều có xuất hiện một số chuyến bay có khoảng thời gian di chuyển cao (giao động từ 30h - 50h).
df$stop_ans <- ifelse(df$stops == "zero", "no", "yes")
addmargins(table(df$stop_ans,df$class))
##
## Business Economy Sum
## no 8102 27902 36004
## yes 85385 178764 264149
## Sum 93487 206666 300153
prop.table(table(df$stop_ans,df$class),margin=2)*100
##
## Business Economy
## no 8.666446 13.501011
## yes 91.333554 86.498989
prop.table(table(df$stop_ans,df$class))*100
##
## Business Economy
## no 2.699290 9.295926
## yes 28.447159 59.557626
Trong bộ dữ liệu thu thập được ta một số thông tin về việc quá cảnh ở các hành khách như sau:
df %>% ggplot(aes(x = fct_infreq(stop_ans), fill = class)) +
geom_bar(position = "dodge") +
geom_text(aes(label = scales::percent(after_stat(count / sum(count)), accuracy = 0.01)),
stat = "count",
position = position_dodge(width = 0.9),
vjust = -0.5,
color = 'black') +
scale_fill_manual(values = c("Economy" = "skyblue", "Business" = "brown")) + labs( fill = 'Hạng vé',title = "Số lượng chuyến bay có quá cảnh ở các hạng vé") + theme_minimal()
Nhận xét
day<- cut(df$days_left,breaks = c(0,10.5,30.5,50),label=c('trễ','vừa','sớm'))
df<-df%>%mutate(df,day)
addmargins(table(df$class,df$day))
##
## trễ vừa sớm Sum
## Business 16394 39754 37339 93487
## Economy 32973 89371 84322 206666
## Sum 49367 129125 121661 300153
prop.table(table(df$class,df$day))*100
##
## trễ vừa sớm
## Business 5.461881 13.244579 12.439989
## Economy 10.985397 29.775148 28.093006
df %>% na.omit() %>% count(class, day) %>% group_by(class) %>% mutate(pvi = n/sum(n)) %>% ggplot(aes(x=class,y=n,fill= day))+geom_col(position = 'dodge') + geom_text(aes(label = percent(pvi,accuracy = .01)), position = position_dodge(1), vjust = -0.5,color = 'black') + theme_classic()
Biến day_lesft được chia thành 3 nhóm gồm nhóm có thời gian đặt vé từ trễ (1-10 ngày), vừa(10-30 ngày), sớm (30-49 ngày).
Từ đó bảng tần số và đồ thị vừa lập được ta có một số nhận xét sau:
Đầu tiên để thực hiện được lập bảng tần số giữa để chỉ ra mối liên hệ giữa hạng ghế và giá vé, trước tiên phải tiến hành phân tổ giá và gán vào biến mới có tên là price_level.
summary(df$price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1105 4783 7425 20890 42521 123071
df$price_level <- cut(df$price, breaks = c(0, 20890, 123071), labels = c("Thap", "Cao"))
addmargins(table(df$price_level, df$class))
##
## Business Economy Sum
## Thap 1400 205235 206635
## Cao 92087 1431 93518
## Sum 93487 206666 300153
prop.table(table(df$price_level, df$class), margin = 2) * 100
##
## Business Economy
## Thap 1.4975344 99.3075784
## Cao 98.5024656 0.6924216
tmp2<- table(df$price_level, df$class)
RelRisk(tmp2)
## [1] 0.006880516
riskratio(tmp2, rev = 'b')
## $data
##
## Economy Business Total
## Cao 1431 92087 93518
## Thap 205235 1400 206635
## Total 206666 93487 300153
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Cao 1.000000000 NA NA
## Thap 0.006880516 0.006530497 0.007249296
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Cao NA NA NA
## Thap 0 0 0
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kiểm định tính độc lập cho biến Class và Airline Giả thuyết: H0: Không có sự tương quan giữa biến Class và Airline H1: Có sự tương quan giữa biến Clas và Airline
chisq.test(table(df$class,df$airline))
##
## Pearson's Chi-squared test
##
## data: table(df$class, df$airline)
## X-squared = 60493, df = 5, p-value < 2.2e-16
Kết quả p-value < 2.2e-16. Nghĩa là, với mức ý nghĩa 5%, giá trị p_value <0.05 nên ta bác bỏ H0. Vậy ta kết luận là hành vi lựa chọn hạng ghế của khách hàng có liên quan đến hành vi lựa chọn hãng hàng không.
Kiểm định tính độc lập cho biến Class và Source_City
Giả thuyết: H0: Không có sự tương quan giữa biến Class và Source_City H1: Có sự tương quan giữa biến Clas và Source_City
chisq.test(table(df$class,df$source_city))
##
## Pearson's Chi-squared test
##
## data: table(df$class, df$source_city)
## X-squared = 236.19, df = 5, p-value < 2.2e-16
Kết quả p-value < 2.2e-16. Nghĩa là, với mức ý nghĩa 5%, giá trị p_value <0.05 nên ta bác bỏ H0. Vậy ta kết luận là hành vi lựa chọn hạng ghế của khách hàng có liên quan đến điểm xuất phát của chuyến bay.
Kiểm định tính độc lập cho biến Class và Stops_ans
Giả thuyết: H0: Không có sự tương quan giữa biến Class và Stops_ans H1: Có sự tương quan giữa biến Clas và Stops_ans
chisq.test(table(df$class,df$stop_ans))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(df$class, df$stop_ans)
## X-squared = 1424.7, df = 1, p-value < 2.2e-16
Kết quả p-value < 2.2e-16. Nghĩa là, với mức ý nghĩa 5%, giá trị p_value <0.05 nên ta bác bỏ H0. Vậy ta kết luận là hành vi lựa chọn hạng ghế của khách hàng có liên quan đến số điểm dừng của chuyến bay.
Kiểm định tính độc lập cho biến Class và Price_level Giả thuyết: H0: Không có sự tương quan giữa biến Class và Price_level H1: Có sự tương quan giữa biến Clas và Price_level
chisq.test(table(df$class,df$price_level))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(df$class, df$price_level)
## X-squared = 287094, df = 1, p-value < 2.2e-16
Kết quả p-value < 2.2e-16. Nghĩa là, với mức ý nghĩa 5%, giá trị p_value <0.05 nên ta bác bỏ H0. Vậy ta kết luận là hành vi lựa chọn hạng ghế của khách hàng có liên quan đến mức giá vé của chuyến bay.
Kiểm định tính độc lập cho biến Class và Dayleft_level
Giả thuyết: H0: Không có sự tương quan giữa biến Class và Dayleft_level H1: Có sự tương quan giữa biến Clas và Dayleft_level
chisq.test(table(df$class,df$dayleft_level))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(df$class, df$dayleft_level)
## X-squared = 23.064, df = 1, p-value = 1.567e-06
Kết quả p-value < 1.567e-06 . Nghĩa là, với mức ý nghĩa 5%, giá trị p_value <0.05 nên ta bác bỏ H0. Vậy ta kết luận là hành vi lựa chọn hạng ghế của khách hàng có liên quan đến thời gian đặt vé của chuyến bay.
Kiểm định tính độc lập cho biến Class và Duration_level
Giả thuyết: H0: Không có sự tương quan giữa biến Class và Duration_level H1: Có sự tương quan giữa biến Clas và Duration_level
chisq.test(table(df$class,df$duration_level))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(df$class, df$duration_level)
## X-squared = 7999.8, df = 1, p-value < 2.2e-16
Kết quả p-value < 2.2e-16. Nghĩa là, với mức ý nghĩa 5%, giá trị p_value <0.05 nên ta bác bỏ H0. Vậy ta kết luận là hành vi lựa chọn hạng ghế của khách hàng có liên quan đến thời gian bay của chuyến bay.
Hồi quy biến Class và Airline
classairline <- glm(factor(class, levels = c("Economy","Business")) ~ airline, family = binomial(link = 'logit'), data = df)
summary(classairline)
##
## Call:
## glm(formula = factor(class, levels = c("Economy", "Business")) ~
## airline, family = binomial(link = "logit"), data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.377664 0.007158 -52.763 <2e-16 ***
## airlineAirAsia -18.188404 51.408787 -0.354 0.723
## airlineGO_FIRST -18.188404 42.848161 -0.424 0.671
## airlineIndigo -18.188404 31.411158 -0.579 0.563
## airlineSpiceJet -18.188404 68.712670 -0.265 0.791
## airlineVistara 0.273063 0.009089 30.045 <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: 372350 on 300152 degrees of freedom
## Residual deviance: 286207 on 300147 degrees of freedom
## AIC: 286219
##
## Number of Fisher Scoring iterations: 17
Kết quả hồi quy mô hình logistic trên cho ta thấy mối quan hệ giữa biến Class và Airline. Hệ số Intercept trong kết quả của mô hình đại diện cho \(\beta_0\) (đại diện cho log(odds) khi chuyến bay đó mang nhãn hiệu India)
Phương trình hồi quy Logistic của Class và Airline có dạng:
\[ log(odds) = -0.377664 - 18.188404.AirAsia -18.188404.Gofrist -18.188404.Indigo -18.188404.SpiceJet +0.273063.Vistara \]
Giải thích kết quả:
Đối với chuyến bay mang nhãn hiện là Vistara
-> tỷ lệ chênh giữa xác suất chọn hạng ghế thương gia và xác suất chọn hạng ghế phổ thông là 0.9 , tức là xác suất khách hàng chọn hạng vé thương gia bé hơn xác suất hành khách chọn hạng vé phổ thông 10% (\(1 +0.9 =0.1\))
Đối với chuyến bay mang nhãn hiệu là India
-> tỷ lệ chênh giữa xác suất chọn hạng ghế thương gia và xác suất chọn hạng ghế phổ thông là 0.685 , tức là xác suất khách hàng chọn hạng vé thương gia bé hơn xác suất hành khách chọn hạng vé phổ thông 31.5% (\(1- -0.685 =0.315\))
Hãng hàng không Vistara có tỷ lệ khách hàng chọn hạng vé hạng thương gia nhiều hơn so với hãng hàng không India
Hệ số AIC của mô hình này = 286219
Hồi quy biến Class và Source_city
classsource <- glm(factor(class,levels = c("Economy","Business")) ~ source_city, family = binomial(link = 'logit'), data = df)
unique(df$source_city)
## [1] "Delhi" "Mumbai" "Bangalore" "Kolkata" "Hyderabad" "Chennai"
summary(classsource)
##
## Call:
## glm(formula = factor(class, levels = c("Economy", "Business")) ~
## source_city, family = binomial(link = "logit"), data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.773129 0.009429 -81.999 < 2e-16 ***
## source_cityChennai 0.036523 0.014385 2.539 0.011117 *
## source_cityDelhi -0.080924 0.012913 -6.267 3.68e-10 ***
## source_cityHyderabad -0.001888 0.014227 -0.133 0.894417
## source_cityKolkata -0.118865 0.013912 -8.544 < 2e-16 ***
## source_cityMumbai 0.047238 0.012792 3.693 0.000222 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 372350 on 300152 degrees of freedom
## Residual deviance: 372113 on 300147 degrees of freedom
## AIC: 372125
##
## Number of Fisher Scoring iterations: 4
Kết quả hồi quy mô hình logistic trên cho ta thấy mối quan hệ giữa biến Class và Source_city.
Phương trình hồi quy Logistic của Class và Source_city có dạng:
\[ log(odds) = -0.773129 +0.036523.Chennai -0.080924.Delhi -0.001888.Hyderabad -0.118865.Kolkata +0.047238.Mumbai \]
Giải thích kết quả:
Đối với thành phố Chennai
-> tỷ lệ chênh giữa xác suất chọn hạng ghế thương gia và xác suất chọn hạng ghế phổ thông là 0.4787 , tức là xác suất khách hàng chọn hạng vé thương gia bé hơn xác suất hành khách chọn hạng vé phổ thông 52.13% (\(1-0.4787 =0.5213\))
Đối với thành phố Delhi
-> tỷ lệ chênh giữa xác suất chọn hạng ghế thương gia và xác suất chọn hạng ghế phổ thông là 0.4256, tức là xác suất khách hàng chọn hạng vé thương gia bé hơn xác suất hành khách chọn hạng vé phổ thông 42,56%
Đối với thành phố Kolkata
-> tỷ lệ chênh giữa xác suất chọn hạng ghế thương gia và xác suất chọn hạng ghế phổ thông là 0.4098, tức là xác suất khách hàng chọn hạng vé thương gia bé hơn xác suất hành khách chọn hạng vé phổ thông 59,02%
Đối với thành phố Mumbai
-> tỷ lệ chênh giữa xác suất chọn hạng ghế thương gia và xác suất chọn hạng ghế phổ thông là 0.4402, tức là xác suất khách hàng chọn hạng vé thương gia bé hơn xác suất hành khách chọn hạng vé phổ thông 55,98%
Đối với thành phố Bangalore
-> tỷ lệ chênh giữa xác suất chọn hạng ghế thương gia và xác suất chọn hạng ghế phổ thông là 0.4615, tức là xác suất khách hàng chọn hạng vé thương gia bé hơn xác suất hành khách chọn hạng vé phổ thông 53,84%
Thành phố Chennai có xác suất chọn hạng vé thương gia là lớn nhất (32.37%), tiếp đến là thành phố bangalore với xác suất là 31,57%, thứ 3 là thành phố Mumabai với xác suất là 30,56%, thành phố helhi có xác suất 29,85% và cuối cùng là thành phố Kolkata có xác suất là 29,06%. Giữa những thành phố này có sự chênh lệch trong xác suất chọn hạng vé thương gia, tuy nhiên sự chênh lệch này không đáng kể
Hệ số AIC của mô hình này = 372125
Hồi quy biến Class và Price_level
classprice <- glm(factor(class,levels = c("Economy","Business")) ~ price_level, family = binomial(link = 'logit'), data = df)
summary(classprice)
##
## Call:
## glm(formula = factor(class, levels = c("Economy", "Business")) ~
## price_level, family = binomial(link = "logit"), data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -4.98768 0.02681 -186.0 <2e-16 ***
## price_levelCao 9.15204 0.03780 242.1 <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: 372350 on 300152 degrees of freedom
## Residual deviance: 31578 on 300151 degrees of freedom
## AIC: 31582
##
## Number of Fisher Scoring iterations: 7
Kết quả hồi quy mô hình logistic trên cho ta thấy mối quan hệ giữa biến Class và Price_level.
Phương trình hồi quy Logistic của Class và Price_levels có dạng:
\[ log(odds) = -4.98768 + 9.15204.Cao \]
Đối với chuyến bay có mức giá cao
odds = \(e^{-4.98768 + 9.15204} = 64.35\)
Xác suất khách hàng chọn hạng vé thương gia là 98,46%.
Đối với chuyến bay có mức giá thấp
odds = \(e^{-4.98768} = 6,82.10^{-3}\)
Xác suất khách hàng chọn vé thương gia là 1.54%
Đối với những chuyến bay có mức giá cao, hầu như đều rơi vào hạng vé thương gia. Xác suất vé đó là vé hạng thương gia đối với mức giá cao là 98,46%.
Mô hình này có hệ số AIC là 31582
Hồi quy biến Class và Stop_ans
classstopans <- glm(factor(class,levels = c("Economy","Business")) ~ stop_ans, family = binomial(link = 'logit'), data = df)
summary(classstopans)
##
## Call:
## glm(formula = factor(class, levels = c("Economy", "Business")) ~
## stop_ans, family = binomial(link = "logit"), data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.23659 0.01262 -97.99 <2e-16 ***
## stop_ansyes 0.49769 0.01329 37.45 <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: 372350 on 300152 degrees of freedom
## Residual deviance: 370848 on 300151 degrees of freedom
## AIC: 370852
##
## Number of Fisher Scoring iterations: 4
Kết quả hồi quy mô hình logistic trên cho ta thấy mối quan hệ giữa biến Class và Stops_ans.
Phương trình hồi quy Logistic của Class và Stop_ans có dạng:
\[ log(odds) = -1.23659 + 0.49769.Yes \]
Đối với chuyến bay có điểm dừng
-> Tỷ lệ giữa xác suất khách chọn hạng ghế thương gia và xác suất khách hàng chọn hạng ghế phổ thông là 0,4776. Khách hàng chọn hạng ghế thương gia bé hơn khách hàng chọn ghế phổ phông 52,24%
Đối với chuyến bay không có điểm dừng
-> Tỷ lệ giữa xác suất khách hàng chọn ghế thương gia và xác suất khách hàng chọn hạng ghế phổ thông là 0,29. Khách hàng chọn hạng ghế thương gia bé hơn khách hàng chọn hạng ghế phổ thông là 71%
Xác suất chọn hạng vé thương gia của những chuyến bay có điểm dừng (32,32%) cao hơn những chuyến bay không có điểm dừng (22,48%)
Hệ số AIC của mô hình này là 370852
Hồi quy biến Class và day_left
classdayleft <- glm(factor(class,levels = c("Economy","Business")) ~ days_left, family = binomial(link = 'logit'), data = df)
summary(classdayleft)
##
## Call:
## glm(formula = factor(class, levels = c("Economy", "Business")) ~
## days_left, family = binomial(link = "logit"), data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.7394429 0.0084874 -87.123 < 2e-16 ***
## days_left -0.0020761 0.0002907 -7.143 9.14e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 372350 on 300152 degrees of freedom
## Residual deviance: 372299 on 300151 degrees of freedom
## AIC: 372303
##
## Number of Fisher Scoring iterations: 4
Kết quả hồi quy mô hình logistic trên cho ta thấy mối quan hệ giữa biến Class và days_left
Phương trình hồi quy Logistic của Class và day_left có dạng:
\[ log(odds) = -0.7394429 -0.0020761.daysleft \]
\(\beta = -0.0020761\) thể hiện sự giảm xác suất “chọn hạng vé thương gia” đối với “số ngày đặt vé trước chuyến bay” cao hơn
Kết quả này thể hiện: Khi số ngày đặt vé trước chuyến bay tăng lên 1 ngày, thì xác suất “khách hàng chọn ghế hạng thương gia” giảm xuống
Khi daysleft = 0 thì, \(odds = e^{-0.7394429} = 0.4773798\)
Ví dụ: Khi daysleft = 2 thì \(odds = e^{-0.7394429 -0.0020761*2= 0.4754017}\), nghĩa là tỷ lệ giữa xác suất “khách hàng chọn hạng vé thương gia” và “khách hàng chọn hạng vé phổ thông” là 0.4754017. Xác suất khách hàng chọn hạng vé thương gia là 32,22%
Hệ số AIC của mô hình = 372303
Hồi quy biến Class và Duration
classduration <- glm(factor(class,levels = c("Economy","Business")) ~ duration, family = binomial(link = 'logit'), data = df)
summary(classduration)
##
## Call:
## glm(formula = factor(class, levels = c("Economy", "Business")) ~
## duration, family = binomial(link = "logit"), data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.3103180 0.0081039 -161.69 <2e-16 ***
## duration 0.0410424 0.0005453 75.27 <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: 372350 on 300152 degrees of freedom
## Residual deviance: 366650 on 300151 degrees of freedom
## AIC: 366654
##
## Number of Fisher Scoring iterations: 4
Kết quả hồi quy mô hình logistic trên cho ta thấy mối quan hệ giữa biến Class và Duration
Phương trình hồi quy Logistic của Class và Duration có dạng:
\[ log(odds) = -1.3103180 +0.0410424.duration \]
\(\beta = 0.0410424\) lớn hơn 0, thể hiện sự gia tăng xác suất chọn hạng vé thương gia đối với “thời gian bay” cao hơn
Kết quả này thể hiện: Khi thời gian bay tăng lên 1 giờ, thì xác suất “khách hàng chọn ghế hạng thương gia” tăng lên. Odds được nhân lên \(e^{0.0410424}\)
Khi duration = 0 thì, \(odds = e^{-1.3103180}=0.2697343\)
Ví dụ: Khi duration = 1 thì \(odds = e^{-1.3103180+0.0410424} = 0.2810351\), nghĩa là tỷ lệ giữa xác suất “khách hàng chọn hạng vé thương gia” và “khách hàng chọn hạng vé phổ thông” là 0.2810351. Xác suất khách hàng chọn hạng vé thương gia là 21,94%
Hệ số AIC của mô hình = 366654
Mô hình hồi quy đa biến bao gồm:
classall <- glm(factor(class,levels = c("Economy","Business")) ~ df$airline + df$source_city + df$stop_ans + df$days_left +df$price_level + df$duration, family = binomial(link = 'logit'), data = df)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(classall)
##
## Call:
## glm(formula = factor(class, levels = c("Economy", "Business")) ~
## df$airline + df$source_city + df$stop_ans + df$days_left +
## df$price_level + df$duration, family = binomial(link = "logit"),
## data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.130734 0.088552 -35.355 < 2e-16 ***
## df$airlineAirAsia -20.581479 314.290916 -0.065 0.947787
## df$airlineGO_FIRST -20.429177 257.964662 -0.079 0.936879
## df$airlineIndigo -26.811395 209.744852 -0.128 0.898285
## df$airlineSpiceJet -20.119323 416.310379 -0.048 0.961455
## df$airlineVistara 0.209473 0.044695 4.687 2.78e-06 ***
## df$source_cityChennai -1.424089 0.084248 -16.903 < 2e-16 ***
## df$source_cityDelhi -1.479210 0.073554 -20.110 < 2e-16 ***
## df$source_cityHyderabad -0.058340 0.084652 -0.689 0.490711
## df$source_cityKolkata -0.945625 0.086088 -10.984 < 2e-16 ***
## df$source_cityMumbai -0.258672 0.070950 -3.646 0.000267 ***
## df$stop_ansyes -7.648603 0.412834 -18.527 < 2e-16 ***
## df$days_left 0.061338 0.001827 33.571 < 2e-16 ***
## df$price_levelCao 15.197435 0.412239 36.866 < 2e-16 ***
## df$duration -0.038228 0.004516 -8.466 < 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: 372350 on 300152 degrees of freedom
## Residual deviance: 18080 on 300138 degrees of freedom
## AIC: 18110
##
## Number of Fisher Scoring iterations: 21
Kết quả của mô hình hồi quy logistic có dạng:
\[ log(odds) = -3.130734 -20.581479.airlineAirAsia -20.429177.airlineGofirst -26.811395.airlineIndigo -20.119323.airlineSpiceJet + 0.209473.airlineVistara -1.424089.sourcecityChennai -1.479210.sourcecityDelhi -0.058340.sourcecityHyderabad -0.945625.sourcecityKolkata -0.258672.sourcecityMumbai -7.648603.stopansyes +0.061338.days_left + 15.197435.price_levelCao -0.038228.duration \]
Giải thích kết quả của mô hình:
Các biến airlineAirAsia, airlineGofirst, airlineIndigo,airlineSpiceJet, source_cityHyderabad có giá trị P_value rất lớn, p_value > 0.05 nên không có ý nghĩa thống kê trong mô hình này
Hệ số \(\beta_5 =0.209473\) có ý nghĩa là: trong trường hợp các yếu tố khác không đổi, nếu chuyến bay mang nhãn hiệu là Vistara thì xác suất “khách hàng chọn vé hạng thương gia là 5,11%
Hệ số \(\beta_6 =-1.424089\) có ý nghĩa là: trong trường hợp các yếu tố khác không đổi, nếu chuyến bay xuất phát từ thành phố Chennai thì xác suất “khách hàng chọn vé hạng thương gia là 10,4%
Hệ số \(\beta_7 =-1.479210\) có ý nghĩa là: trong trường hợp các yếu tố khác không đổi, nếu chuyến bay xuất phát từ thành phố Delhi thì xác suất “khách hàng chọn vé hạng thương gia là 0.98%
Hệ số \(\beta_9 =-0.945625\) có ý nghĩa là: trong trường hợp các yếu tố khác không đổi, nếu chuyến bay xuất phát từ thành phố Kolkata thì xác suất “khách hàng chọn vé hạng thương gia là 1.669%
Hệ số \(\beta_{10} =-0.258672\) có ý nghĩa là: trong trường hợp các yếu tố khác không đổi, nếu chuyến bay xuất phát từ thành phố Mumbai thì xác suất “khách hàng chọn vé hạng thương gia là 3.26%
Hệ số \(\beta_{11} =-7.648603\) có ý nghĩa là: trong trường hợp các yếu tố khác không đổi, nếu chuyến bay có điểm dừng thì xác suất “khách hàng chọn vé hạng thương gia là 0.00208%.
Hệ số \(\beta_{12} =0.061338\) có ý nghĩa là: trong trường hợp các yếu tố khác không đổi, nếu “số ngày đặt vé trước chuyến bay” tăng lên 1 ngày (nghĩa là đặt vé sớm hơn 1 ngày) thì xác suất “khách hàng chọn hạng vé thương gia sẽ tăng lên”
Hệ số \(\beta_{13} =15.197435\) có ý nghĩa là: trong trường hợp các yếu tố khác không đổi, nếu chuyến bay có mức giá cao xác suất “khách hàng chọn vé hạng thương gia là 99.99%
Hệ số \(\beta_{14} =-0.038228\) có ý nghĩa là: trong trường hợp các yếu tố khác không đổi, nếu “thời gian bay” tăng lên 1 giờ thì xác suất “khách hàng chọn hạng vé thương gia sẽ giảm xuống