Sau hơn hai năm chịu tác động từ đại dịch Covid-19 và những thay đổi chóng mặt của thị trường kinh doanh, năm 2022, Việc chứng kiến nhiều xáo động về nguồn nhân lực và tổ chức trên quy mô lớn. Không chỉ dừng lại ở tình trạng nghỉ việc ồ ạt, người lao động còn sẵn sàng rời bỏ ngành nghề, chuyển đổi cách thức làm việc và đặt ra nhiều yêu cầu mới đối với nhà tuyển dụng. Kết quả khảo sát thị trường lao động nửa đầu năm 2022 của LinkedIn tại Việt Nam và Anphabe cho thấy, trào lưu chuyển việc ồ ạt không còn là dự báo, mà đã trở thành hiện thực Ngay cả khi tình trạng thất nghiệp phổ biến và gia tăng trên toàn thế giới do ảnh hưởng của Covid-19, từ giữa năm 2021, trào lưu nghỉ việc đã bắt đầu xuất hiện. Báo cáo của Microsoft cho thấy, có tới 42% người đi làm trên thế giới chia sẻ rằng, họ đang có ý định chuyển việc.
Nếu như trước đây, nghỉ việc là điều tế nhị nhiều người muốn giấu kín, nhưng nay, họ không ngần ngại đăng tải trên mạng xã hội thông điệp “đang tìm việc làm mới”… Mạng xã hội nghề nghiệp LinkedIn đang có 860 triệu thành viên trên toàn thế giới. Tính đến tháng 4/2022, có tới 260.000 trong gần 4 triệu thành viên tại Việt Nam đã cập nhật trạng thái “đang tìm việc làm mới”.
Những yếu tố có là nguyên nhân dẫn đến chuyển đổi công việc có thể kể đến như có quá nhiều việc phải làm, ảnh hưởng đến chất lượng cuộc sống, nhận thức về môi trường hay các mối quan hệ xung quanh đang rạn nứt, suy nghĩ về việc lập gia đình,.. Khi một vị trí mới phù hợp với các giá trị người đi làm quan tâm, nhiều khả năng đó sẽ là lựa chọn “dài hơi” dành cho họ.
Dựa trên những cơ sở đó, em quyết định chọn đề tài “Phân tích các yếu tố ảnh hưởng đến quyết định chuyển việc của nhân viên.” để phân tích xem những yếu tố nào là nguyên nhân dẫn đến ý định muốn nhảy việc của nhân lực hiện nay.
Dựa trên các thông tin là các yếu tố là nguyên nhân dẫn đến tình trạng nhảy việc, em sẽ đánh giá và phân tích các tác động của chúng ảnh hưởng như thế nào với việc ra định chuyển việc của nhân viên. Từ đó đề xuất ra giải pháp từ kết quả nghiên cứu.
Bài viết phân tích các yếu tố tác động đến quyết định chuyển việc của nhân viên thông qua một cuộc khảo sát tại một công ty hoạt động trong lĩnh vực dữ liệu và khoa học dữ liệu.
Nghiên cứu được tiến hành theo phương pháp phân tích dữ liệu định tính.
Biến định tính (qualitative variable) hay còn gọi là biến phân loại (categorical variable) là biến mà những giá trị nó có thể nhận không phải là số. Biến định tính thường được “đo lường” bằng thang đo Định danh hoặc thang đo Thứ bậc. Dữ liệu định tính là dữ liệu có được khi quan sát biến định tính.
Chẳng hạn, phản ứng của người dân trước một chính sách mới ban hành có thể có 3 thái độ: đồng tình, không có ý kiến, phản đối; sự nhận định của ngân hàng về khả năng trả nợ của một khách hàng là: “có khả năng” hoặc “không có khả năng”,…. Các mức độ phản ứng khác nhau về một vấn đề trong các lĩnh vực khoa học xã hội. Dữ liệu định tính cũng xuất hiện rất phổ biến trong các ngành khoa học y tế, để đo lường mức độ phản ứng của bệnh nhân đối với một loại thuốc hoặc một phương pháp điều trị mới (trị được bệnh hoặc không trị được bệnh), mức độ nghiêm trọng của thương tích (không, nhẹ, trung bình, nặng) và giai đoạn của bệnh(ban đầu, giai đoạn cuối).
Các biến định tính cũng thường xuất hiện trong các khoa học ứng xử (ví dụ: “Đồng tình” hay “Phản đối” việc hút thuốc lá nơi công cộng), sức khoẻ cộng đồng (ví dụ: uống rượu/bia, “có” hay “không” là nguyên nhân của các căn bệnh liên quan đến thần kinh ?), trong giáo dục ( các câu trả lời của học sinh “đúng” hay “sai” trong một kỳ thi), và trong hành vi tiêu dùng (ví dụ: khách hàng quyết định “mua” hoặc “không mua” một loại sản phẩm do mẫu mã, bao bì của sản phẩm).
Biến định tính thậm chí còn được quan tâm trong những lĩnh vực có tính định lượng cao như khoa học kỹ thuật và kiểm soát chất lượng công nghiệp, khi các hạng mục được phân loại “đạt” hoặc “không đạt” với các tiêu chuẩn nhất định.
Với một mô hình kinh tế lượng chúng ta đều biết sẽ có biến phụ thuộc (hay còn gọi là biến được giải thích) và biến độc lập (hay còn gọi là biến giải thích). Nếu biến phụ thuộc là biến định tính thì người ta thường gọi biến phụ thuộc này là biến đáp ứng (response variable).
Tuy nhiên khái niệm biến đáp ứng và biến giải thích chỉ mang tính tương đối, một biến đáp ứng trong mô hình nghiên cứu này có thể lại là biến giải thích trong mô hình nghiên cứu khác. Chẳng hạn khi nghiên cứu tác động của của trình độ học vấn đối với mức thu nhập, thì mức thu nhập là biến đáp ứng, nhưng khi khảo sát thái độ của công dân đối với một sắc thuế mới được trưng cầu chịu ảnh hưởng như thế nào bởi mức thu nhập của công dân, thì thu nhập lại là biến giải thích. Chủ đề của học phần này là phân tích các biến đáp ứng định tính. Các mô hình thống kê cho các biến đáp ứng định tính phân tích các phản ứng như thế nào là chịu ảnh hưởng bởi các biến giải thích. Ví dụ, người ta có thể nghiên cứu triết học chính trị phụ thuộc vào các yếu tố như thu nhập hàng năm, trình độ học vấn, tôn giáo, tuổi, giới tính và chủng tộc. Các biến giải thích có thể là định tính hoặc định lượng (rời rạc, hoặc liên tục).
Bảng tần số/suất (contingency table) là bảng được sử dụng để đánh giá mức độ tương quan hay phụ thuộc giữa hai biến số hay tiêu thức. Thông tin mẫu được so sánh với tình huống lý thuyết trong đó có sự phụ thuộc hoàn toàn giữa các tiêu thức. Các bảng tần số/suất (còn gọi là bảng ngẫu nhiên) được sử dụng trong các thống kê để tóm tắt mối quan hệ giữa một số biến phân loại. Khi lập bảng ngẫu nhiên cho 2 biến thì bảng đó được gọi là bảng ngẫu nhiên 2 chiều, nếu lập cho 3 biến thì gọi là bảng ngẫu nhiên 3 chiều và cứ thế tăng lên.
Đối với bảng tần số chúng ta quy ước biến phụ thuộc (dependent/outcome/response variable) được xắp xếp theo cột, biến độc lập (independent/explanatory/predictor variable) được xắp xếp theo hàng.
Độ nhạy là một khái niệm cơ bản để thử nghiệm chẩn đoán. Nó đo lường khả năng của bài kiểm tra để xác định chính xác các cá nhân với một điều kiện hoặc thuộc tính cụ thể. Nó định lượng tỷ lệ dương tính thực sự, hoặc cá nhân mắc bệnh được xác định chính xác là dương tính, trong số tất cả những người mắc bệnh.
Độ nhạy = số dương tính thật/(số đương tính thật + số âm tính giả)
Độ nhạy 100% được hiểu là toàn bộ những người mắc bệnh hoặc toàn bộ sản phẩm hỏng đều được phát hiện. Một mình độ nhạy không cho chúng ta biết toàn bộ về xét nghiệm bởi vì 100% độ nhạy có thể có được một cách thông thường bằng việc gán cho toàn bộ các trường hợp kết quả xét nghiệm dương tính. Chính vì vậy, chúng ta cần phải biết thêm về độ đặc hiệu của xét nghiệm.
Một xét nghiệm độ nhạy cao có sai lầm loại 2 thấp. Sai lầm loại 2 là: kết quả nghiên cứu cho thấy không có mối quan hệ giữa các yếu tố, nhưng thực tế thì có.
Độ đặc hiệu của một xét nghiệm là tỷ lệ những trường hợp thực sự không có bệnh và có kết quả xét nghiệm âm tính trong toàn bộ các trường hợp không bị bệnh. Độ đặc hiệu được tính theo công thức sau:
Độ đặc hiệu = Số trường hợp âm tính thật/ (số trường hợp âm tính thật + số trường hợp dương tính giả)
Đối với một xét nghiệm để xác định xem ai mắc bệnh nào đó, độ đặc hiệu 100% có nghĩa là toàn bộ những người khỏe mạnh (không mắc bệnh) được xác định là khỏe mạnh. Một mình độ đặc hiệu không cho chúng ta biết toàn bộ về xét nghiệm bởi vì 100% độ đặc hiệu có thể có được một cách thông thường bằng việc gán cho toàn bộ các trường hợp kết quả xét nghiệm âm tính. Chính vì vậy, chúng ta cần phải biết thêm về độ nhạy của xét nghiệm.
Một xét nghiệm với độ đặc hiệu cao có sai lầm loại 1 thấp. Sai lầm loại 1 là loại sai lầm khi kết quả nghiên cứu cho thấy có sự khác biệt (như giả thuyết đặt ra), nhưng thực tế là không có sự khác biệt.
Odds cung cấp thước đo khả năng xảy ra một kết quả cụ thể. Chúng được tính bằng tỷ lệ giữa số sự kiện tạo ra kết quả đó với số sự kiện không tạo ra kết quả đó. Tỷ lệ thường được sử dụng trong xác suất và thống kê.
OR(Odds Ratio) hay tỷ suất chênh là tỉ số giữa hai Odds và được biểu diễn là OR=O1/O2.
Một công ty đang hoạt động trong lĩnh vực dữ liệu và Khoa học dữ liệu muốn biết ai trong số những ứng viên này thực sự muốn làm việc cho công ty sau khi đào tạo hoặc tìm kiếm một công việc mới vì nó giúp giảm chi phí và thời gian cũng như chất lượng đào tạo. Bộ dữ liệu được khảo sát với mục tiêu liên quan đến các yếu tố khiến một nhân viên rời bỏ công việc hiện tại để chuyển sang công việc mới.
library(readxl)
data <- read_excel("C:/users/PM09/Downloads/datadt.xlsx")
data
## # A tibble: 19,158 × 9
## gender relevent_experience enrolled_university education_level experience
## <chr> <chr> <chr> <chr> <chr>
## 1 Male yes no_enrollment Graduate >20
## 2 Male no no_enrollment Graduate 15
## 3 Female no Full time course Graduate 5
## 4 Female no Full time course Graduate <1
## 5 Male yes no_enrollment Masters >20
## 6 Female yes Part time course Graduate 11
## 7 Male yes no_enrollment High School 5
## 8 Male yes no_enrollment Graduate 13
## 9 Male yes no_enrollment Graduate 7
## 10 Female yes no_enrollment Graduate 17
## # ℹ 19,148 more rows
## # ℹ 4 more variables: company_type <chr>, last_new_job <chr>,
## # training_hours <dbl>, move <chr>
Dữ liệu bao gồm 9 biến với 19158 quan sát (6 biến định tính, 3 biến định lượng)
Gender: Giới tính của ứng viên (male/female_nam/nữ)
Relevent_experience: Có kinh nghiệm liên quan đến ngành nghề không? (Yes/No_có/không)
Education_level: Trình độ học vấn của ứng viên (Primaryschool/highschool/graduate/master/Phd_THCS/THPT/Đại học/Thạc sĩ/Tiến sĩ)
Enrolled_university: Loại khóa học Đại học đã đăng ký nếu có (no/full time course/ part time course_ không đăng kí/khóa toàn thời gian/ khóa bán thời gian )
Experience: Tổng kinh nghiệm của ứng viên tính theo năm
company_type : Loại công ty hiện tại(Pvt Ltd/Funded Startup/NGO/Public Sector/_Công ty TNHH tư nhân/ Công ty Startup/ Tổ chức phi chính phủ/ Công ty công).
Last_new_job: Chênh lệch số năm giữa công việc trước đây và công việc hiện tại.
Training_hours: số giờ đào tạo đã hoàn thành
Move: có ý định chuyển việc hay không?(Yes/No_có/không)
Đối với biến định tính, tôi chọn biến move (biểu hiện cho việc muốn chuyển việc hay không) làm biến phụ thuộc. Xem các yếu tố giới tính, trình độ học vấn, tổng số năm kinh nghiệm, loại hình công ty… có ảnh hưởng như thế nào đến quyết định chuyển việc của nhân viên.
Gender
Relevent_experience
Education_level
Enrolled_university
Training_hours
# Bảng tần số biến Gender
table(data$gender)
##
## Female Male
## 5937 13221
Kết quả thống kê cho thấy có 13221 nam và 5937 nữ tham gia vào cuộc khảo sát
# Bảng tần suất biến Gender
table(data$gender)/sum(table(data$gender))
##
## Female Male
## 0.3098966 0.6901034
Dựa theo kết quả thống kê cho thấy, tỉ lệ nam tham gia khảo sát chiếm 69.01% và nữ chiếm 30.98%
# *Đồ thị cột biến Gender*
library(ggplot2)
data |> ggplot(aes(gender)) +
geom_bar(olor = 'blue', fill = 'pink')
## Warning in geom_bar(olor = "blue", fill = "pink"): Ignoring unknown parameters:
## `olor`
### Biến Relevent_experience
# Bảng tần số biến Relevent_experience
table(data$relevent_experience)
##
## no yes
## 5366 13792
Theo kết quả thống kê, có 13792 người có kinh nghiệm liên quan đến ngành nghề và 5366 người không có kinh nghiệm liên quan đến ngành nghề.
# Bảng tần suất biến Relevent_experience
table(data$relevent_experience)/sum(table(data$relevent_experience))
##
## no yes
## 0.2800919 0.7199081
Dựa theo kết quả thống kê những người tham gia khảo sát, tỉ lệ người có kinh nghiệm chiếm 71.99% và người không có kinh nghiệm chiếm 28.00%.
# Đồ thị biến Relevent_experience theo %
data |> ggplot( aes( x = relevent_experience, y= after_stat(count))) + geom_bar(fill='green') + geom_text(aes(label= scales :: percent(after_stat(count/sum(count)),accuracy=.01)), stat = 'count', color= 'black', vjust= -.5) + theme_classic() + xlab('Relevent_experience') + ylab('Tỷ lệ')
# Bảng tần số biến Education_level
table(data$education_level)
##
## Graduate High School Masters Phd Primary School
## 12058 2017 4361 414 308
Dựa theo thống kê về trình độ học vấn, có 308 người thuộc nhóm tốt nghiệp THCS, 2017 người thuộc nhóm tốt nghiệp THPT, 12058 người thuộc nhóm tốt nghiệp đại học, 4361 người có bằng thạc sĩ và 414 người có bằng tiến sĩ.
# Bảng tần suất biến Education_level
table(data$education_level)/sum(table(data$education_level))
##
## Graduate High School Masters Phd Primary School
## 0.62939764 0.10528239 0.22763336 0.02160977 0.01607683
Dựa theo bảng tần suất, % tỉ lệ người tốt nghiệp THCS, tốt nghiệp THPT, tốt nghiệp đại học, thạc sĩ, tiến sĩ lần lượt là: 1.607%, 10.52%, 62.93%, 22.76%, 2.16%.
## *Đồ thị cột biến Education_level*
data |> ggplot( aes( x = education_level, y= after_stat(count))) + geom_bar(fill='green') + geom_text(aes(label= scales :: percent(after_stat(count/sum(count)),accuracy=.01)), stat = 'count', color= 'black', vjust= -.5) + theme_classic() + xlab('education_level') + ylab('Tỷ lệ')
# Bảng tần số biến Enrolled_university
table(data$enrolled_university)
##
## Full time course no_enrollment Part time course
## 4143 13817 1198
Dựa theo kết quả thống kê, có 13817 người không đăng ký khóa học đại học, 4143 người đăng kí khóa học đại học toàn thời gian và 1198 đăng ký khóa học bán thời gian.
# Bảng tần suất biến enrolled_university
table(data$enrolled_university)/sum(table(data$enrolled_university))
##
## Full time course no_enrollment Part time course
## 0.21625431 0.72121307 0.06253262
Dựa theo kết quả thống kê, % tỉ lệ người không đăng ký khóa học chiếm 72.12%, người đăng ký khóa học toàn thời gian chiếm 21.62% và người đăng ký khóa học bán thời gian chiếm 6.25%
# Đồ thị cột biến Enrolled_university
data |> ggplot( aes( x = enrolled_university, y= after_stat(count))) + geom_bar(fill='green') + geom_text(aes(label= scales :: percent(after_stat(count/sum(count)),accuracy=.01)), stat = 'count', color= 'black', vjust= -.5) + theme_classic() + xlab('enrolled_university') + ylab('Tỷ lệ')
summary(data$training_hours)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 23.00 47.00 65.37 88.00 336.00
Dựa vào kết quả thống kê, cho thấy số giờ đào tạo đã hoàn thành thấp nhất là 1 giờ, cao nhất là 336 giờ, số giờ đào tạo trung bình khoảng 65 giờ và có 50% người hoàn thành 47 giờ đào tạo.
# Đồ thị cột biến training_hours
library(ggplot2)
data |> ggplot(aes(training_hours)) +
geom_bar(olor = 'blue', fill = 'green')
## Warning in geom_bar(olor = "blue", fill = "green"): Ignoring unknown
## parameters: `olor`
# Bảng tần số biến move
table(data$move)
##
## no yes
## 14381 4777
Dựa theo kết quả thống kê, có 4777 người được khảo sát có ý định chuyển việc, 14381 người không có ý định chuyển việc.
# Bảng tần suất biến move
table(data$move)/sum(table(data$move))
##
## no yes
## 0.7506525 0.2493475
Số người có ý định muốn chuyển việc chỉ chiếm khoảng 24.93%, số người không có ý định chuyển việc chiếm tói 75.06%
# Đồ thị cột biến move
data |> ggplot( aes( x = move, y= after_stat(count))) + geom_bar(fill='yellow') + geom_text(aes(label= scales :: percent(after_stat(count/sum(count)),accuracy=.01)), stat = 'count', color= 'black', vjust= -.5) + theme_classic() + xlab('move') + ylab('Tỷ lệ')
coord_polar('y')
## <ggproto object: Class CoordPolar, Coord, gg>
## aspect: function
## backtransform_range: function
## clip: on
## default: FALSE
## direction: 1
## distance: function
## is_free: function
## is_linear: function
## labels: function
## modify_scales: function
## r: x
## range: function
## render_axis_h: function
## render_axis_v: function
## render_bg: function
## render_fg: function
## setup_data: function
## setup_layout: function
## setup_panel_guides: function
## setup_panel_params: function
## setup_params: function
## start: 0
## theta: y
## train_panel_guides: function
## transform: function
## super: <ggproto object: Class CoordPolar, Coord, gg>
# Bảng ngẫu nhiên 2 chiều
table1 <- table(data$gender, data$move)
addmargins(table1)
##
## no yes Sum
## Female 4172 1765 5937
## Male 10209 3012 13221
## Sum 14381 4777 19158
Theo kết quả khảo sát cho thấy:
-Có 4172 nữ không có ý định chuyển việc, 10209 nam không có ý định chuyển việc
library(ggplot2)
# Đồ thị cột hai biến gender và move
ggplot(data, aes(gender, fill = move)) + geom_bar(position = 'dodge')
# Risk ratio
library(DescTools)
RelRisk(table1)
## [1] 0.9100355
Theo kết quả cho thấy, tỉ lệ nữ không có ý định chuyển việc = 91.11% tỉ lệ nam không có ý định chuyển việc
#Risk Ratio
library(epitools)
riskratio(table1, rev='c')
## $data
##
## yes no Total
## Female 1765 4172 5937
## Male 3012 10209 13221
## Total 4777 14381 19158
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Female 1.000000 NA NA
## Male 1.098858 1.078221 1.119891
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0 2.944108e-24 8.854871e-25
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
# Odds ratio
library(DescTools)
OddsRatio(table1)
## [1] 0.697383
Tỉ lệ người không có ý định chuyển việc so với người có ý định chuyển việc mà là nữ bằng 69.73% tỷ lệ người không có ý định chuyển việc so với người có ý định chuyển việc mà là nam.
# Bảng ngẫu nhiên 2 chiều
table <- table(data$relevent_experience, data$move)
addmargins(table)
##
## no yes Sum
## no 3550 1816 5366
## yes 10831 2961 13792
## Sum 14381 4777 19158
Có 3550 người không có kinh nghiệm và không có ý định chuyển việc, 10831 người có kinh nghiệm và không có ý định chuyển việc.
Có 1816 người không có kinh nghiệm và có ý định chuyển việc, 2961 người có kinh nghiệm và có ý định chuyển việc.
# Risk ratio
library(DescTools)
RelRisk(table)
## [1] 0.842435
Tỉ lệ người không có kinh nghiệm, không có ý định chuyển việc = 84.24% tỉ lệ người có kinh nghiệm, không có ý định chuyển việc.
#Risk Ratio
library(epitools)
riskratio(table, rev='c')
## $data
##
## yes no Total
## no 1816 3550 5366
## yes 2961 10831 13792
## Total 4777 14381 19158
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## no 1.000000 NA NA
## yes 1.187035 1.16233 1.212266
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## no NA NA NA
## yes 0 4.890032e-68 1.077342e-70
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Tỉ lệ người có kinh nghiệm, không có ý định chuyển việc gấp 1.187 lần người không có kinh nghiệm, không có ý định chuyển việc.
# Odd ratio
library(DescTools)
OddsRatio(table)
## [1] 0.5344196
Tỉ lệ người không có ý định chuyển việc so với người có ý định chuyển việc mà có kinh nghiệm làm việc = 53.44% tỉ lệ người không có ý định chuyển việc so với người có ý định chuyển việc mà có kinh nghiệm làm việc.
# Đồ thị cột hai biến relevent_experience và move
library(ggplot2)
ggplot(data, aes(relevent_experience, fill = move)) + geom_bar(position = 'dodge')
### Biến education_level và move
# Bảng ngẫu nhiên 2 chiều
table3 <- table(data$move, data$education_level)
table3
##
## Graduate High School Masters Phd Primary School
## no 8709 1623 3426 356 267
## yes 3349 394 935 58 41
Theo kết quả thống kê cho thấy:
Có 8709 nhân viên có trình độ đại học không có ý định chuyển việc, 3349 nhân viên có trình độ đại học có ý định chuyển việc.
Có 1623 nhân viên tốt nghiệp THPT không có ý định chuyển việc, 394 nhân viên tót nghiệp THPT có ý định chuyển việc.
Có 1623 nhân viên có trình độ thạc sĩ không có ý định chuyển việc, 935 nhân viên có trình độ thạc sĩ có ý định chuyển việc.
Có 356 nhân viên có trình độ thạc sĩ không có ý định chuyển việc, 58 nhân viên có trình độ thạc sĩ có ý định chuyển việc.
Có 267 nhân viên tốt nghiệp THCS không có ý định chuyển việc, 41 nhân viên tốt nghiệp THCS có ý định chuyển việc.
# Đồ thị cột 2 biến education_levels và move
library(ggplot2)
ggplot(data, aes(education_level, fill = move)) + geom_bar(position = 'dodge')
# Bảng ngẫu nhiên hai chiều biến move và biến enroll_university
table4 <- table(data$move, data$enrolled_university)
table4
##
## Full time course no_enrollment Part time course
## no 2589 10896 896
## yes 1554 2921 302
Theo kết quả thống kê, ta thấy:
Có 2589 nhân viên đăng ký khóa học toàn thời gian không có ý định chuyển việc, 1554 nhân viên đăng ký khóa học toàn thời gian có ý định chuyển việc.
10896 nhân viên không đăng ký khóa học và cũng không có ý định chuyển việc, 2921 nhân viên không đăng ký khóa học có ý định chuyển việc.
894 nhân viên đăng ký khóa học bán thời gian không có ý định chuyển việc, 302 nhân viên đăng ký khóa học bán thời gian có ý định chuyển việc.
# Đồ thị cột 2 biến enrolled_unversity và move
ggplot(data, aes(enrolled_university, fill = move)) + geom_bar(position = 'dodge')
### Biến move và biến training_hours
# Đồ thị hai biến move và biến training_hours
ggplot(data, aes(training_hours, fill = move)) + geom_bar(position = 'dodge')
Thông qua đồ thị ta thấy, số nhân viên hoàn thành số giờ đào tạo càng
cao thì có xu hướng không có ý định chuyển việc làm.
# Biến move và gender
chisq.test(table(data$gender, data$move))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(data$gender, data$move)
## X-squared = 105.27, df = 1, p-value < 2.2e-16
Dựa theo kết quả phân tích,ta thấy giới tính có ảnh hưởng đến ý định muốn chuyển việc của nhân viên.
# Biến move và relevent_experience
chisq.test(table(data$relevent_experience, data$move))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(data$relevent_experience, data$move)
## X-squared = 315.34, df = 1, p-value < 2.2e-16
Dựa theo kết quả phân tích, việc có kinh nghiệm hay không có ảnh hưởng đến ý định muốn chuyển việc của nhân viên.
# Biến move và education_level
chisq.test(table(data$move, data$education_level))
##
## Pearson's Chi-squared test
##
## data: table(data$move, data$education_level)
## X-squared = 160.45, df = 4, p-value < 2.2e-16
Dựa theo kết quả phân tích, trình độ học vấn có ảnh hưởng đến ý định muốn chuyển việc của nhân viên.
# Biến move và enrolled_university
chisq.test(table(data$move, data$enrolled_university))
##
## Pearson's Chi-squared test
##
## data: table(data$move, data$enrolled_university)
## X-squared = 456.29, df = 2, p-value < 2.2e-16
Dựa theo kết quả phân tích, loại khóa học đăng kí có ảnh hưởng đến ý định muốn chuyển việc của nhân viên.
Dựa theo kết quả phân tích, loại công ty hiện tại đang làm việc có ảnh hưởng đến ý định muốn chuyển việc của nhân viên.
Ước lượng xem tỷ lệ số ứng viên đã hoàn thành số giờ đào tạo có nhiều hơn 50 giờ không đồng thời kiểm định xem tỉ lệ(%) ứng viên đã hoàn thành 100 giờ đào tạo có phải là 40% hay không?
Kiểm định giả thuyết: H0 = 0.4
x <- data[data$training_hours > 100,]
prop.test(length(x$training_hours), length(data$training_hours), p = 0.4)
##
## 1-sample proportions test with continuity correction
##
## data: length(x$training_hours) out of length(data$training_hours), null probability 0.4
## X-squared = 3131.8, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.4
## 95 percent confidence interval:
## 0.1962500 0.2076701
## sample estimates:
## p
## 0.2019
Với độ tin cậy 95%, ước lượng tỉ lệ ứng viên đã hoàn thành 100 giờ đào tạo nằm trong khoảng 0.196 đến 0.206
Ta thấy, p_value<0.4, bác bỏ H0, vậy số ứng viên đã hoàn thành 100 giờ đào tạo không chiếm 40% với mức ý nghĩa 5%
Chọn biến move ( có ý định chuyển việc hay không) phụ thuộc vào biến Gender, Relevent_experience, Education_level, enrolled_university, Training_hours.
mh1 <- glm(factor(move) ~ data$gender + data$relevent_experience + data$education_level + data$training_hours +data$enrolled_university, family = binomial(link = 'logit'), data = data)
summary(mh1)
##
## Call:
## glm(formula = factor(move) ~ data$gender + data$relevent_experience +
## data$education_level + data$training_hours + data$enrolled_university,
## family = binomial(link = "logit"), data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.1283683 0.0483215 2.657 0.00789
## data$genderMale -0.2592190 0.0362892 -7.143 9.12e-13
## data$relevent_experienceyes -0.5326394 0.0408401 -13.042 < 2e-16
## data$education_levelHigh School -0.8447169 0.0633609 -13.332 < 2e-16
## data$education_levelMasters -0.2670739 0.0430300 -6.207 5.41e-10
## data$education_levelPhd -0.8482918 0.1448793 -5.855 4.77e-09
## data$education_levelPrimary School -1.1720690 0.1719580 -6.816 9.36e-12
## data$training_hours -0.0008172 0.0002913 -2.805 0.00503
## data$enrolled_universityno_enrollment -0.6290671 0.0428977 -14.664 < 2e-16
## data$enrolled_universityPart time course -0.4837347 0.0758186 -6.380 1.77e-10
##
## (Intercept) **
## data$genderMale ***
## data$relevent_experienceyes ***
## data$education_levelHigh School ***
## data$education_levelMasters ***
## data$education_levelPhd ***
## data$education_levelPrimary School ***
## data$training_hours **
## data$enrolled_universityno_enrollment ***
## data$enrolled_universityPart time course ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 21519 on 19157 degrees of freedom
## Residual deviance: 20644 on 19148 degrees of freedom
## AIC: 20664
##
## Number of Fisher Scoring iterations: 4
mh2 <- glm(factor(move) ~ data$gender + data$relevent_experience + data$education_level + data$training_hours +data$enrolled_university, family = binomial(link = 'probit'), data = data)
summary(mh2)
##
## Call:
## glm(formula = factor(move) ~ data$gender + data$relevent_experience +
## data$education_level + data$training_hours + data$enrolled_university,
## family = binomial(link = "probit"), data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.0630141 0.0292667 2.153 0.03131
## data$genderMale -0.1541077 0.0214970 -7.169 7.57e-13
## data$relevent_experienceyes -0.3167097 0.0244606 -12.948 < 2e-16
## data$education_levelHigh School -0.4964851 0.0363476 -13.659 < 2e-16
## data$education_levelMasters -0.1580664 0.0249716 -6.330 2.45e-10
## data$education_levelPhd -0.4799813 0.0786868 -6.100 1.06e-09
## data$education_levelPrimary School -0.6786222 0.0931791 -7.283 3.27e-13
## data$training_hours -0.0004754 0.0001694 -2.806 0.00502
## data$enrolled_universityno_enrollment -0.3790095 0.0258615 -14.655 < 2e-16
## data$enrolled_universityPart time course -0.2909508 0.0450412 -6.460 1.05e-10
##
## (Intercept) *
## data$genderMale ***
## data$relevent_experienceyes ***
## data$education_levelHigh School ***
## data$education_levelMasters ***
## data$education_levelPhd ***
## data$education_levelPrimary School ***
## data$training_hours **
## data$enrolled_universityno_enrollment ***
## data$enrolled_universityPart time course ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 21519 on 19157 degrees of freedom
## Residual deviance: 20642 on 19148 degrees of freedom
## AIC: 20662
##
## Number of Fisher Scoring iterations: 4
mh3 <- glm(factor(move) ~ data$gender + data$relevent_experience + data$education_level + data$training_hours +data$enrolled_university, family = binomial(link = 'cloglog'), data = data)
summary(mh3)
##
## Call:
## glm(formula = factor(move) ~ data$gender + data$relevent_experience +
## data$education_level + data$training_hours + data$enrolled_university,
## family = binomial(link = "cloglog"), data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.2377925 0.0379362 -6.268 3.65e-10
## data$genderMale -0.2141232 0.0305310 -7.013 2.33e-12
## data$relevent_experienceyes -0.4434026 0.0339766 -13.050 < 2e-16
## data$education_levelHigh School -0.7110931 0.0549930 -12.931 < 2e-16
## data$education_levelMasters -0.2264185 0.0373568 -6.061 1.35e-09
## data$education_levelPhd -0.7478528 0.1331452 -5.617 1.95e-08
## data$education_levelPrimary School -1.0134612 0.1580112 -6.414 1.42e-10
## data$training_hours -0.0007162 0.0002506 -2.858 0.00426
## data$enrolled_universityno_enrollment -0.5181849 0.0353741 -14.649 < 2e-16
## data$enrolled_universityPart time course -0.3929435 0.0639740 -6.142 8.14e-10
##
## (Intercept) ***
## data$genderMale ***
## data$relevent_experienceyes ***
## data$education_levelHigh School ***
## data$education_levelMasters ***
## data$education_levelPhd ***
## data$education_levelPrimary School ***
## data$training_hours **
## data$enrolled_universityno_enrollment ***
## data$enrolled_universityPart time course ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 21519 on 19157 degrees of freedom
## Residual deviance: 20650 on 19148 degrees of freedom
## AIC: 20670
##
## Number of Fisher Scoring iterations: 5
Theo kết quả hồi quy trên, ta có:
AIC(logit) = 20664
AIC(probit) = 20662
AIC(cloglog) = 20670
Vậy mô hình progit có AIC thấp nhất nên phù hợp nhất.
Deviance(logit)= 20644
Deviance(progit)= 20642
Deviance(cloglog)= 20650
Vậy mô hình progit có deviance thấp nhất nên phù hợp nhất.
library(DescTools)
BrierScore(mh1)
## [1] 0.1783755
BrierScore(mh2)
## [1] 0.1783536
BrierScore(mh3)
## [1] 0.1784412
Vậy mô hình probit có BrierScore thấp nhất nên phù hợp nhất.
library(caret)
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following objects are masked from 'package:DescTools':
##
## MAE, RMSE
predictions <- predict(mh1, type = "response")
predicted_classes <- ifelse(predictions >= 0.5, "1", "0")
predictions1<- factor(predicted_classes, levels = c("0","1"))
actual<- factor(mh1$data$move, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 14087 4502
## 1 294 275
##
## Accuracy : 0.7497
## 95% CI : (0.7435, 0.7558)
## No Information Rate : 0.7507
## P-Value [Acc > NIR] : 0.6281
##
## Kappa : 0.0526
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.97956
## Specificity : 0.05757
## Pos Pred Value : 0.75781
## Neg Pred Value : 0.48330
## Prevalence : 0.75065
## Detection Rate : 0.73531
## Detection Prevalence : 0.97030
## Balanced Accuracy : 0.51856
##
## 'Positive' Class : 0
##
Mô hình logit có độ chính xác toàn thể là 74.97%, độ nhạy là 97.956%.
library(caret)
predictions <- predict(mh2, type = "response")
predicted_classes <- ifelse(predictions >= 0.5, "1", "0")
predictions1<- factor(predicted_classes, levels = c("0","1"))
actual<- factor(mh2$data$move, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 14102 4514
## 1 279 263
##
## Accuracy : 0.7498
## 95% CI : (0.7436, 0.7559)
## No Information Rate : 0.7507
## P-Value [Acc > NIR] : 0.609
##
## Kappa : 0.0506
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.98060
## Specificity : 0.05506
## Pos Pred Value : 0.75752
## Neg Pred Value : 0.48524
## Prevalence : 0.75065
## Detection Rate : 0.73609
## Detection Prevalence : 0.97171
## Balanced Accuracy : 0.51783
##
## 'Positive' Class : 0
##
Mô hình probit có độ chính xác toàn thể là 74.98%, độ nhạy là 98.060%
library(caret)
predictions <- predict(mh3, type = "response")
predicted_classes <- ifelse(predictions >= 0.5, "1", "0")
predictions1<- factor(predicted_classes, levels = c("0","1"))
actual<- factor(mh3$data$move, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 14081 4497
## 1 300 280
##
## Accuracy : 0.7496
## 95% CI : (0.7434, 0.7557)
## No Information Rate : 0.7507
## P-Value [Acc > NIR] : 0.6344
##
## Kappa : 0.0534
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.97914
## Specificity : 0.05861
## Pos Pred Value : 0.75794
## Neg Pred Value : 0.48276
## Prevalence : 0.75065
## Detection Rate : 0.73499
## Detection Prevalence : 0.96973
## Balanced Accuracy : 0.51888
##
## 'Positive' Class : 0
##
Mô hình cloglog có độ chính xác toàn thể = 74.96%, độ nhạy là 97.91%
Trong ba mô hình ta thấy mô hình probit có độ chính xác toàn thể cao nhất = 74.98%, độ nhạy là 98.060% rất cao. Cho thấy đây là một mô hình dự báo tốt.
mh2 <- glm(factor(move) ~ data$gender + data$relevent_experience + data$education_level + data$training_hours +data$enrolled_university, family = binomial(link = 'probit'), data = data)
summary(mh2)
##
## Call:
## glm(formula = factor(move) ~ data$gender + data$relevent_experience +
## data$education_level + data$training_hours + data$enrolled_university,
## family = binomial(link = "probit"), data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.0630141 0.0292667 2.153 0.03131
## data$genderMale -0.1541077 0.0214970 -7.169 7.57e-13
## data$relevent_experienceyes -0.3167097 0.0244606 -12.948 < 2e-16
## data$education_levelHigh School -0.4964851 0.0363476 -13.659 < 2e-16
## data$education_levelMasters -0.1580664 0.0249716 -6.330 2.45e-10
## data$education_levelPhd -0.4799813 0.0786868 -6.100 1.06e-09
## data$education_levelPrimary School -0.6786222 0.0931791 -7.283 3.27e-13
## data$training_hours -0.0004754 0.0001694 -2.806 0.00502
## data$enrolled_universityno_enrollment -0.3790095 0.0258615 -14.655 < 2e-16
## data$enrolled_universityPart time course -0.2909508 0.0450412 -6.460 1.05e-10
##
## (Intercept) *
## data$genderMale ***
## data$relevent_experienceyes ***
## data$education_levelHigh School ***
## data$education_levelMasters ***
## data$education_levelPhd ***
## data$education_levelPrimary School ***
## data$training_hours **
## data$enrolled_universityno_enrollment ***
## data$enrolled_universityPart time course ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 21519 on 19157 degrees of freedom
## Residual deviance: 20642 on 19148 degrees of freedom
## AIC: 20662
##
## Number of Fisher Scoring iterations: 4