Em xin gửi lời cảm ơn tới thầy Trần Mạnh Tường vì đã dành thời gian hướng dẫn và hỗ trợ em trong suốt quá trình thực hiện bài tiểu luận. Những nhận xét và định hướng của thầy đã giúp em hoàn thiện nội dung một cách rõ ràng và đúng trọng tâm hơn. Sự đồng hành của thầy là nguồn động lực quan trọng giúp em hoàn thành tốt bài làm này. Em xin trân trọng cảm ơn.
Em xin cam kết báo cáo tiểu luận môn học này được hoàn thành dựa trên các kết quả nghiên cứu của em và các kết quả nghiên cứu này chưa được dùng cho bất cứ đề tài nào khác.
Trong những năm gần đây, lĩnh vực tài chính – ngân hàng không ngừng phát triển với sự đa dạng hóa các sản phẩm và dịch vụ nhằm thu hút và giữ chân khách hàng. Tuy nhiên, thực tế cho thấy nhiều ngân hàng đang phải đối mặt với một thách thức lớn: đó là tình trạng khách hàng ngừng sử dụng dịch vụ sau một thời gian gắn bó, đặc biệt là trong mảng dịch vụ thẻ tín dụng. Việc không thể duy trì mối quan hệ lâu dài với khách hàng không chỉ ảnh hưởng đến doanh thu của ngân hàng mà còn làm gia tăng thêm chi phí chăm sóc và tìm kiếm nguồn khách hàng mới.
Chính vì vậy, việc phân tích và tìm hiểu các yếu tố ảnh hưởng đến hành vi ngừng sử dụng dịch vụ ngân hàng của khách hàng thẻ tín dụng là điều hết sức cần thiết. Nghiên cứu này sẽ góp phần nhận diện những đặc điểm chung của nhóm khách hàng có nguy cơ rời bỏ cao, từ đó giúp các ngân hàng đưa ra các chính sách phù hợp nhằm giữ chân khách hàng và nâng cao chất lượng dịch vụ.
Để thực hiện nghiên cứu, tác giả lựa chọn bộ dữ liệu “Bank Churners” được công bố trên nền tảng Kaggle. Dữ liệu mô phỏng thông tin của hơn 10.000 khách hàng sử dụng dịch vụ thẻ tín dụng tại một ngân hàng thương mại ở Mỹ, bao gồm nhiều đặc điểm như: giới tính, độ tuổi, tình trạng hôn nhân, thu nhập, số dư tài khoản, số lượng giao dịch, mức độ hài lòng, loại thẻ đang sử dụng,… Đây là cơ sở dữ liệu có tính ứng dụng cao, thường được sử dụng để phân tích hành vi khách hàng và dự đoán khả năng ngừng sử dụng dịch vụ.
Thông qua việc khai thác và phân tích bộ dữ liệu trên, tác giả kỳ vọng sẽ hiểu rõ hơn về các yếu tố có liên quan đến hành vi ngừng sử dụng dịch vụ thẻ tín dụng của khách hàng, từ đó đưa ra những nhận định và gợi ý có giá trị cho công tác quản trị khách hàng trong ngành ngân hàng hiện nay.
Mục tiêu chính của đề tài là phân tích các yếu tố có ảnh hưởng đến hành vi ngừng sử dụng dịch vụ thẻ tín dụng của khách hàng tại ngân hàng, thông qua việc khai thác và xử lý bộ dữ liệu “Bank Churners”. Cụ thể, đề tài tập trung vào các nội dung sau:
Xác định mối liên hệ giữa các đặc điểm nhân khẩu học (giới tính, độ tuổi, tình trạng hôn nhân,…) và khả năng khách hàng duy trì hay ngừng sử dụng dịch vụ thẻ tín dụng.
Phân tích ảnh hưởng của các yếu tố tài chính và hành vi sử dụng dịch vụ (thu nhập, số dư tài khoản, loại thẻ, số lượng sản phẩm sử dụng, số lượng giao dịch, mức độ hài lòng,…) đến quyết định tiếp tục hay ngừng sử dụng dịch vụ thẻ tín dụng.
Xây dựng mô hình hồi quy để dự đoán khả năng khách hàng ngừng sử dụng dịch vụ thẻ tín dụng dựa trên các biến định tính và định lượng trong bộ dữ liệu.
Cung cấp các gợi ý, định hướng để ngân hàng có thể chủ động nhận diện sớm nhóm khách hàng có nguy cơ rời bỏ cao và có chiến lược chăm sóc phù hợp nhằm nâng cao khả năng giữ chân khách hàng.
Đối tượng nghiên cứu: Đối tượng mà đề tài hướng đến là hành vi ngừng sử dụng dịch vụ thẻ tín dụng của khách hàng tại ngân hàng, được thể hiện qua biến Attrition_Flag trong bộ dữ liệu, với hai biểu hiện cụ thể:
“Existing Customer”: Khách hàng vẫn đang sử dụng dịch vụ.
“Attrited Customer”: Khách hàng đã ngừng sử dụng dịch vụ.
Phạm vi nghiên cứu: Nghiên cứu tập trung vào việc phân tích các đặc điểm nhân khẩu học, tài chính và hành vi sử dụng dịch vụ của hơn 10.000 khách hàng, dựa trên bộ dữ liệu “Bank Churners” được công bố trên nền tảng Kaggle. Dữ liệu mô phỏng từ một ngân hàng thương mại tại Mỹ, bao gồm nhiều biến thông tin liên quan đến thu nhập, loại thẻ sử dụng, thời gian gắn bó với ngân hàng, tần suất giao dịch, mức độ hài lòng, v.v.
Đề tài giới hạn trong phạm vi phân tích thống kê mô tả và xây dựng các mô hình hồi quy áp dụng cho dữ liệu định tính, nhằm phát hiện các yếu tố ảnh hưởng đáng kể đến khả năng khách hàng ngừng sử dụng dịch vụ thẻ tín dụng.
Trong đề tài này, tác giả lựa chọn phương pháp phân tích dữ liệu định tính kết hợp với các kỹ thuật thống kê suy diễn nhằm làm rõ mối quan hệ giữa hành vi ngừng sử dụng dịch vụ thẻ tín dụng và các yếu tố đặc trưng của khách hàng. Phương pháp được lựa chọn phù hợp với mục tiêu nghiên cứu, loại biến phân tích và bản chất của bộ dữ liệu.
Trước tiên, tác giả tiến hành xử lý và thống kê mô tả để làm rõ đặc điểm phân bố của từng biến định tính trong bộ dữ liệu, từ đó hình thành cái nhìn tổng quan về cấu trúc khách hàng. Tiếp theo, để kiểm tra mối liên hệ giữa biến phụ thuộc Attrition_Flag (với hai biểu hiện: “Existing Customer” – khách hàng còn sử dụng dịch vụ và “Attrited Customer” – khách hàng đã ngừng sử dụng dịch vụ) và các biến giải thích, tác giả sử dụng các kiểm định thống kê như kiểm định Chi-square để đánh giá mức độ độc lập giữa các biến định tính.
Bên cạnh đó, đề tài cũng ứng dụng các chỉ số đo lường mức độ rủi ro và khả năng xảy ra sự kiện như Relative Risk, Odds Ratio, cùng với khoảng ước lượng tương ứng nhằm định lượng xác suất khách hàng rơi vào nhóm ngừng sử dụng dịch vụ dưới ảnh hưởng của các yếu tố khác nhau.
Cuối cùng, tác giả xây dựng mô hình hồi quy nhị phân nhằm dự đoán khả năng khách hàng rời bỏ dịch vụ dựa trên các đặc điểm nhân khẩu học và hành vi sử dụng dịch vụ. Ba mô hình chính được áp dụng gồm: mô hình xác suất tuyến tính, mô hình logit và mô hình probit. Việc ước lượng và đánh giá các mô hình được thực hiện trên phần mềm R – một công cụ phổ biến trong phân tích dữ liệu, giúp đảm bảo độ chính xác, khả năng trực quan hóa và kiểm tra thống kê chặt chẽ.
Chương 1: Tổng quan về đề tài
Chương 2: Cơ sở lý thuyết
Chương 3: Phương pháp nghiên cứu
Chương 4: Phân tích dữ liệu
Chương 5: Kết luận và khuyến nghị
Hành vi ngừng sử dụng dịch vụ là hiện tượng người tiêu dùng chấm dứt việc sử dụng sản phẩm hay dịch vụ của một doanh nghiệp, công ty và chuyển sang lựa chọn sử dụng sản phẩm dịch vụ của nhà cung cấp khác. Trong lĩnh vực ngân hàng, hành vi này thường được thể hiện thông qua việc khách hàng đóng tài khoản, hủy thẻ tín dụng hay chỉ đơn giản là không còn thực hiện các giao dịch tài chính thường xuyên nữa. Đây có thể được xem như là một vấn đề chiến lược mang tính sống còn đối với các tổ chức tài chính, bởi việc giữ chân được khách hàng hiện hữu luôn có chi phí thấp hơn đáng kể so với việc tìm kiếm thu hút khách hàng mới.
Hành vi này có thể bắt nguồn từ nhiều nguyên nhân khác nhau, bao gồm sự không hài lòng với chất lượng phục vụ, chi phí dịch vụ không tương xứng, sự thiếu đa dạng trong sản phẩm hoặc sự xuất hiện của các lựa chọn thay thế hấp dẫn hơn đến từ các đối thủ cạnh tranh. Ngoài ra, sự thay đổi trong nhu cầu cá nhân hoặc hoàn cảnh tài chính của khách hàng cũng có thể là yếu tố dẫn đến quyết định chấm dứt dịch vụ. Những nguyên nhân này, dù xuất phát từ phía khách hàng hay từ nội tại doanh nghiệp, đều có thể ảnh hưởng đến mức độ gắn bó và lòng trung thành của khách hàng với tổ chức tài chính.
Tình trạng ngừng sử dụng dịch vụ thường được phân thành hai dạng chính:
Chủ động: Xảy ra khi Khách hàng chủ động yêu cầu chấm dứt dịch vụ do không hài lòng, không còn nhu cầu, hoặc tìm được nhà cung cấp khác phù hợp hơn.
Thụ động: Xảy ra khi khách hàng không sử dụng dịch vụ trong thời gian dài hoặc để tài khoản “đóng băng” mà không đưa ra thông báo chính thức.
Việc phân biệt giữa hai hình thức rời bỏ không chỉ giúp tổ chức tài chính nắm bắt tốt hơn hành vi khách hàng, mà còn đóng vai trò quan trọng trong quá trình phân tích và dự báo. Thông qua đó, ngân hàng có thể xác định được nhóm khách hàng nào sẽ có nguy cơ rời bỏ cao, từ đó triển khai các biện pháp phòng ngừa thích hợp.
Trong bối cảnh ngành ngân hàng ngày càng cạnh tranh khốc liệt, khả năng phát hiện sớm nguy cơ ngừng sử dụng dịch vụ và chủ động ứng phó đóng vai trò thiết yếu trong chiến lược phát triển bền vững của tổ chức. Việc ứng dụng các phương pháp phân tích định tính để mô hình hóa hành vi rời bỏ sẽ cung cấp cơ sở dữ liệu thực tiễn và có hệ thống cho quá trình ra quyết định, góp phần nâng cao chất lượng dịch vụ, gia tăng sự hài lòng và duy trì mối quan hệ lâu dài với khách hàng.
Từ góc độ thực tiễn, hành vi ngừng sử dụng dịch vụ của khách hàng thường không xảy ra một cách ngẫu nhiên, mà là kết quả của quá trình tích lũy trải nghiệm và đánh giá dịch vụ trong một khoảng thời gian nhất định. Có nhiều yếu tố khác nhau – từ đặc điểm cá nhân, nhân khẩu học đến hành vi tiêu dùng và mức độ tương tác với tổ chức cung cấp dịch vụ – có thể góp phần hình thành nên quyết định ngừng sử dụng dịch vụ. Trong bối cảnh hoạt động của các ngân hàng, việc nhận diện và tìm hiểu các yếu tố này mang ý nghĩa quan trọng trong việc xây dựng chiến lược chăm sóc và giữ chân khách hàng.
Dưới đây là một số yếu tố thường được đề cập trong thực tiễn quản trị và nghiên cứu, được cho là có khả năng ảnh hưởng đến hành vi rời bỏ dịch vụ của khách hàng trong lĩnh vực tài chính – ngân hàng:
Đặc điểm nhân khẩu học: Tuổi, giới tính, trình độ học vấn, tình trạng hôn nhân có thể phản ánh thói quen tài chính, khả năng chi tiêu và nhu cầu sử dụng dịch vụ tài chính. Ví dụ, khách hàng trẻ tuổi có thể dễ bị ảnh hưởng bởi các xu hướng mới và ít gắn bó với ngân hàng so với nhóm trung niên hoặc người cao tuổi.
Tình trạng tài chính: Thu nhập, số người phụ thuộc, và khả năng chi trả có thể tác động đến việc duy trì hoặc ngừng sử dụng các sản phẩm tài chính, đặc biệt là thẻ tín dụng hoặc các khoản vay.
Mức độ tương tác với ngân hàng: Số lần liên hệ, số lượng sản phẩm sử dụng (tài khoản, thẻ tín dụng, tiết kiệm…) hay thời gian gắn bó có thể phản ánh mức độ trung thành. Khách hàng ít tương tác hoặc chỉ sử dụng một dịch vụ duy nhất thường có nguy cơ cao hơn trong việc ngừng sử dụng.
Hành vi chi tiêu và sử dụng thẻ tín dụng: Tổng số giao dịch, mức tiêu dùng, tần suất giao dịch hay tỷ lệ sử dụng thẻ có thể giúp nhận diện nhóm khách hàng có hành vi không ổn định hoặc không sử dụng dịch vụ hiệu quả – những người có khả năng chấm dứt sử dụng dịch vụ trong tương lai.
Việc hiểu và phân loại những yếu tố trên sẽ giúp tổ chức dễ dàng hơn trong việc dự báo xu hướng rời bỏ dịch vụ và xây dựng các chiến lược giữ chân khách hàng phù hợp.
Trên thế giới và tại Việt Nam, nhiều nghiên cứu đã đề cập đến việc xác định các yếu tố ảnh hưởng đến hành vi ngừng sử dụng dịch vụ trong các lĩnh vực như ngân hàng, viễn thông, bảo hiểm và thương mại điện tử. Việc phân tích và dự báo hành vi này được xem là giải pháp chiến lược giúp doanh nghiệp giữ chân khách hàng và tối ưu hiệu quả vận hành.
Thanh và cộng sự (2022) sử dụng dữ liệu khách hàng từ Ngân hàng VIB để xây dựng mô hình dự báo hành vi ngừng sử dụng dịch vụ ngân hàng điện tử. Mô hình Gradient Boosting cho kết quả chính xác cao nhất với độ chính xác 79,71% và AUC đạt 86,23%.
Bùi Xuân Vĩ (2024) nghiên cứu hành vi ngừng sử dụng dịch vụ viễn thông bằng cách so sánh hiệu quả các mô hình Logistic Regression, Decision Tree, SVM và ANN trên bộ dữ liệu IBM. Kết quả cho thấy Logistic Regression cho hiệu suất dự báo ổn định và dễ triển khai.
Nguyễn Minh Trí và cộng sự (2021) khảo sát 273 khách hàng sử dụng dịch vụ viễn thông tại TP.HCM và phân tích bằng mô hình PLS-SEM. Nghiên cứu chỉ ra rằng sự hài lòng và giá trị cảm nhận đóng vai trò trung gian giữa chất lượng dịch vụ và sự gắn kết của khách hàng.
Trang (2023) áp dụng các mô hình học máy như Random Forest, SVM, Naive Bayes và Logistic Regression để dự báo khả năng ngừng sử dụng thẻ tín dụng. Random Forest cho hiệu suất dự báo cao nhất theo nhiều chỉ số như Accuracy và F1-score.
Charandabi và cộng sự (2021) phân tích dữ liệu của 10.000 khách hàng tại châu Âu để so sánh hiệu quả của sáu mô hình phân loại. Trong đó, mạng nơ-ron nhân tạo (ANN) được đánh giá cao nhờ khả năng chống quá khớp và độ ổn định trong phân loại hành vi rời bỏ dịch vụ ngân hàng.
Guliyev và cộng sự (2021) sử dụng dữ liệu thực tế từ lĩnh vực ngân hàng để ứng dụng các mô hình học máy hiện đại kết hợp kỹ thuật SHAP nhằm giải thích mức độ ảnh hưởng của từng yếu tố đến hành vi rời bỏ. Mô hình XGBoost được đánh giá có hiệu suất tốt nhất và cung cấp thông tin giải thích rõ ràng cho nhà quản lý.
Tuy nhiên, phần lớn các nghiên cứu trên đều xác định sẵn biến đầu vào để đưa vào mô hình phân tích. Trong khi đó, nghiên cứu hiện tại tiếp cận theo hướng khám phá dữ liệu định tính, sử dụng kiểm định thống kê để xác định các biến có liên hệ với hành vi ngừng sử dụng, từ đó làm cơ sở xây dựng mô hình phân tích sâu hơn.
Bộ dữ liệu được sử dụng trong bài nghiên cứu có tên là “Bank Churners”, mô phỏng thông tin của hơn 10.000 khách hàng đang sử dụng thẻ tín dụng tại một ngân hàng thương mại tại Hoa Kỳ. Dữ liệu được công bố trên nền tảng Kaggle với mục đích phục vụ học tập, nghiên cứu và thực hành trong các lĩnh vực phân tích hành vi khách hàng, khai phá dữ liệu và dự báo rủi ro trong ngành tài chính – ngân hàng.
Nguồn cụ thể: Sakshi Goyal (2020). Credit Card Customers mydataset
Bộ dữ liệu bao gồm nhiều nhóm thông tin như:
Đặc điểm nhân khẩu học: giới tính, độ tuổi, trình độ học vấn, tình trạng hôn nhân, số người phụ thuộc.
Tình hình tài chính cá nhân: mức thu nhập, hạn mức tín dụng, số dư quay vòng.
Hành vi sử dụng sản phẩm ngân hàng: số sản phẩm/dịch vụ đang dùng, tần suất giao dịch, thay đổi số tiền và số lượt giao dịch theo quý.
Chỉ số tương tác với ngân hàng: thời gian gắn bó, số tháng không hoạt động, số lần liên hệ với ngân hàng.
Trạng thái duy trì sử dụng thẻ: khách hàng còn sử dụng hay đã ngừng sử dụng thẻ tín dụng.
Thông qua cấu trúc đa chiều như vậy, bộ dữ liệu tạo điều kiện thuận lợi để nghiên cứu các yếu tố ảnh hưởng đến hành vi ngừng sử dụng dịch vụ của khách hàng – một vấn đề có ý nghĩa thực tiễn đối với các ngân hàng thương mại hiện nay.
Tập dữ liệu sử dụng trong nghiên cứu bao gồm 10.127 quan sát và 21 biến, trong đó mỗi quan sát đại diện cho một khách hàng sử dụng thẻ tín dụng tại một ngân hàng thương mại ở Hoa Kỳ. Các biến trong tập dữ liệu phản ánh đầy đủ thông tin về đặc điểm nhân khẩu học, tình trạng tài chính, hành vi sử dụng sản phẩm, cũng như mức độ tương tác giữa khách hàng và ngân hàng.
Dưới đây là bảng thể hiện nội dung chi tiết của các biến được thu thập từ từng khách hàng trong bộ dữ liệu:
datatable(mydata)
head(mydata, 10)
| CLIENTNUM | Attrition_Flag | Customer_Age | Gender | Dependent_count | Education_Level | Marital_Status | Income_Category | Card_Category | Months_on_book | Total_Relationship_Count | Months_Inactive_12_mon | Contacts_Count_12_mon | Credit_Limit | Total_Revolving_Bal | Avg_Open_To_Buy | Total_Amt_Chng_Q4_Q1 | Total_Trans_Amt | Total_Trans_Ct | Total_Ct_Chng_Q4_Q1 | Avg_Utilization_Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 768805383 | Existing Customer | 45 | M | 3 | High School | Married | $60K - $80K | Blue | 39 | 5 | 1 | 3 | 12691 | 777 | 11914 | 1.335 | 1144 | 42 | 1.625 | 0.061 |
| 818770008 | Existing Customer | 49 | F | 5 | Graduate | Single | Less than $40K | Blue | 44 | 6 | 1 | 2 | 8256 | 864 | 7392 | 1.541 | 1291 | 33 | 3.714 | 0.105 |
| 713982108 | Existing Customer | 51 | M | 3 | Graduate | Married | $80K - $120K | Blue | 36 | 4 | 1 | 0 | 3418 | 0 | 3418 | 2.594 | 1887 | 20 | 2.333 | 0.000 |
| 769911858 | Existing Customer | 40 | F | 4 | High School | Unknown | Less than $40K | Blue | 34 | 3 | 4 | 1 | 3313 | 2517 | 796 | 1.405 | 1171 | 20 | 2.333 | 0.760 |
| 709106358 | Existing Customer | 40 | M | 3 | Uneducated | Married | $60K - $80K | Blue | 21 | 5 | 1 | 0 | 4716 | 0 | 4716 | 2.175 | 816 | 28 | 2.500 | 0.000 |
| 713061558 | Existing Customer | 44 | M | 2 | Graduate | Married | $40K - $60K | Blue | 36 | 3 | 1 | 2 | 4010 | 1247 | 2763 | 1.376 | 1088 | 24 | 0.846 | 0.311 |
| 810347208 | Existing Customer | 51 | M | 4 | Unknown | Married | $120K + | Gold | 46 | 6 | 1 | 3 | 34516 | 2264 | 32252 | 1.975 | 1330 | 31 | 0.722 | 0.066 |
| 818906208 | Existing Customer | 32 | M | 0 | High School | Unknown | $60K - $80K | Silver | 27 | 2 | 2 | 2 | 29081 | 1396 | 27685 | 2.204 | 1538 | 36 | 0.714 | 0.048 |
| 710930508 | Existing Customer | 37 | M | 3 | Uneducated | Single | $60K - $80K | Blue | 36 | 5 | 2 | 0 | 22352 | 2517 | 19835 | 3.355 | 1350 | 24 | 1.182 | 0.113 |
| 719661558 | Existing Customer | 48 | M | 2 | Graduate | Single | $80K - $120K | Blue | 36 | 6 | 3 | 3 | 11656 | 1677 | 9979 | 1.524 | 1441 | 32 | 0.882 | 0.144 |
Trước khi tiến hành phân tích, việc tìm hiểu rõ tên gọi, loại dữ liệu và ý nghĩa nội dung của từng biến là điều cần thiết. Điều này giúp đảm bảo lựa chọn đúng các phương pháp xử lý và phân tích phù hợp cho từng loại biến, đặc biệt trong bối cảnh phân tích định tính, nơi sự phân biệt giữa biến định tính và định lượng đóng vai trò quan trọng.
Tên của các biến trong bộ dữ liệu có thể được liệt kê như sau:
names(mydata)
## [1] "CLIENTNUM" "Attrition_Flag"
## [3] "Customer_Age" "Gender"
## [5] "Dependent_count" "Education_Level"
## [7] "Marital_Status" "Income_Category"
## [9] "Card_Category" "Months_on_book"
## [11] "Total_Relationship_Count" "Months_Inactive_12_mon"
## [13] "Contacts_Count_12_mon" "Credit_Limit"
## [15] "Total_Revolving_Bal" "Avg_Open_To_Buy"
## [17] "Total_Amt_Chng_Q4_Q1" "Total_Trans_Amt"
## [19] "Total_Trans_Ct" "Total_Ct_Chng_Q4_Q1"
## [21] "Avg_Utilization_Ratio"
Bảng sau đây sẽ trình bày tên và mô tả ngắn gọn về ý nghĩa của từng biến trong tập dữ liệu:
variable_description <- data.frame(
Bien = c("CLIENTNUM", "Attrition_Flag", "Customer_Age", "Gender",
"Dependent_count", "Education_Level", "Marital_Status",
"Income_Category", "Card_Category", "Months_on_book",
"Total_Relationship_Count", "Months_Inactive_12_mon",
"Contacts_Count_12_mon", "Credit_Limit", "Total_Revolving_Bal",
"Avg_Open_To_Buy", "Total_Amt_Chng_Q4_Q1", "Total_Trans_Amt",
"Total_Trans_Ct", "Total_Ct_Chng_Q4_Q1", "Avg_Utilization_Ratio"),
Mo_ta = c(
"Mã số định danh khách hàng (không trùng lặp)",
"Tình trạng sử dụng thẻ (Còn hoạt động hoặc không)",
"Tuổi của khách hàng",
"Giới tính của khách hàng",
"Số lượng người phụ thuộc tài chính",
"Trình độ học vấn của khách hàng",
"Tình trạng hôn nhân của khách hàng",
"Mức thu nhập hàng năm (theo khoảng)",
"Loại thẻ tín dụng đang sử dụng",
"Thời gian gắn bó với ngân hàng (tháng)",
"Tổng số số sản phẩm/dịch vụ ngân hàng mà khách hàng sử dụng",
"Số tháng không hoạt động trong 12 tháng qua",
"Số lần liên hệ với ngân hàng trong 12 tháng",
"Hạn mức tín dụng được cấp",
"Số dư nợ quay vòng (revolving balance)",
"Số tiền còn có thể chi tiêu trong hạn mức tín dụng",
"Mức thay đổi số tiền giao dịch Q4 so với Q1",
"Tổng số tiền giao dịch trong năm",
"Tổng số lần giao dịch trong năm",
"Mức thay đổi số lần giao dịch Q4 so với Q1",
"Tỷ lệ sử dụng thẻ tín dụng trung bình"
),
stringsAsFactors = FALSE
)
my_kable(variable_description,
caption_text = "Bảng mô tả các biến.",
col_names = c("Biến", "Mô tả"))
| Biến | Mô tả |
|---|---|
| CLIENTNUM | Mã số định danh khách hàng (không trùng lặp) |
| Attrition_Flag | Tình trạng sử dụng thẻ (Còn hoạt động hoặc không) |
| Customer_Age | Tuổi của khách hàng |
| Gender | Giới tính của khách hàng |
| Dependent_count | Số lượng người phụ thuộc tài chính |
| Education_Level | Trình độ học vấn của khách hàng |
| Marital_Status | Tình trạng hôn nhân của khách hàng |
| Income_Category | Mức thu nhập hàng năm (theo khoảng) |
| Card_Category | Loại thẻ tín dụng đang sử dụng |
| Months_on_book | Thời gian gắn bó với ngân hàng (tháng) |
| Total_Relationship_Count | Tổng số số sản phẩm/dịch vụ ngân hàng mà khách hàng sử dụng |
| Months_Inactive_12_mon | Số tháng không hoạt động trong 12 tháng qua |
| Contacts_Count_12_mon | Số lần liên hệ với ngân hàng trong 12 tháng |
| Credit_Limit | Hạn mức tín dụng được cấp |
| Total_Revolving_Bal | Số dư nợ quay vòng (revolving balance) |
| Avg_Open_To_Buy | Số tiền còn có thể chi tiêu trong hạn mức tín dụng |
| Total_Amt_Chng_Q4_Q1 | Mức thay đổi số tiền giao dịch Q4 so với Q1 |
| Total_Trans_Amt | Tổng số tiền giao dịch trong năm |
| Total_Trans_Ct | Tổng số lần giao dịch trong năm |
| Total_Ct_Chng_Q4_Q1 | Mức thay đổi số lần giao dịch Q4 so với Q1 |
| Avg_Utilization_Ratio | Tỷ lệ sử dụng thẻ tín dụng trung bình |
Để có cái nhìn tổng quan ban đầu về tập dữ liệu, việc khảo sát cấu trúc là bước không thể thiếu nhằm đánh giá số lượng biến, kiểu dữ liệu cũng như đặc điểm cơ bản của từng biến. Thông qua việc kiểm tra cấu trúc, người nghiên cứu có thể xác định số lượng quan sát, số biến, tên biến và kiểu dữ liệu tương ứng (số, chuỗi ký tự, nhân tố…), từ đó đưa ra định hướng phù hợp cho các bước xử lý và phân tích tiếp theo.
str(mydata)
## 'data.frame': 10127 obs. of 21 variables:
## $ CLIENTNUM : int 768805383 818770008 713982108 769911858 709106358 713061558 810347208 818906208 710930508 719661558 ...
## $ Attrition_Flag : chr "Existing Customer" "Existing Customer" "Existing Customer" "Existing Customer" ...
## $ Customer_Age : int 45 49 51 40 40 44 51 32 37 48 ...
## $ Gender : chr "M" "F" "M" "F" ...
## $ Dependent_count : int 3 5 3 4 3 2 4 0 3 2 ...
## $ Education_Level : chr "High School" "Graduate" "Graduate" "High School" ...
## $ Marital_Status : chr "Married" "Single" "Married" "Unknown" ...
## $ Income_Category : chr "$60K - $80K" "Less than $40K" "$80K - $120K" "Less than $40K" ...
## $ Card_Category : chr "Blue" "Blue" "Blue" "Blue" ...
## $ Months_on_book : int 39 44 36 34 21 36 46 27 36 36 ...
## $ Total_Relationship_Count: int 5 6 4 3 5 3 6 2 5 6 ...
## $ Months_Inactive_12_mon : int 1 1 1 4 1 1 1 2 2 3 ...
## $ Contacts_Count_12_mon : int 3 2 0 1 0 2 3 2 0 3 ...
## $ Credit_Limit : num 12691 8256 3418 3313 4716 ...
## $ Total_Revolving_Bal : int 777 864 0 2517 0 1247 2264 1396 2517 1677 ...
## $ Avg_Open_To_Buy : num 11914 7392 3418 796 4716 ...
## $ Total_Amt_Chng_Q4_Q1 : num 1.33 1.54 2.59 1.4 2.17 ...
## $ Total_Trans_Amt : int 1144 1291 1887 1171 816 1088 1330 1538 1350 1441 ...
## $ Total_Trans_Ct : int 42 33 20 20 28 24 31 36 24 32 ...
## $ Total_Ct_Chng_Q4_Q1 : num 1.62 3.71 2.33 2.33 2.5 ...
## $ Avg_Utilization_Ratio : num 0.061 0.105 0 0.76 0 0.311 0.066 0.048 0.113 0.144 ...
Dựa trên kết quả từ hàm str() cho thấy bộ dữ liệu bao gồm 10127 quan sát và 21 biến. Trong đó, mỗi dòng dữ liệu đại diện cho một khách hàng sử dụng thẻ tín dụng tại một ngân hàng thương mại ở Hoa Kỳ. Các biến phản ánh thông tin nhân khẩu học, đặc điểm tài chính cá nhân, hành vi sử dụng sản phẩm ngân hàng và mức độ tương tác giữa khách hàng và tổ chức tín dụng.
Trong khuôn khổ nghiên cứu, việc phân loại các biến theo bản chất định tính hay định lượng đóng vai trò đặc biệt quan trọng, bởi mỗi loại biến sẽ phù hợp với các phương pháp phân tích và mô hình hóa khác nhau. Để xác định nhóm biến định tính, có thể sử dụng đoạn mã sau nhằm lọc ra các biến có kiểu dữ liệu dạng chuỗi ký tự (character) hoặc nhân tố (factor):
qualitative_vars <- names(mydata)[sapply(mydata, function(x) is.factor(x) || is.character(x))]
qualitative_vars
## [1] "Attrition_Flag" "Gender" "Education_Level" "Marital_Status"
## [5] "Income_Category" "Card_Category"
Kết quả cho thấy bộ dữ liệu bao gồm 6 biến định tính chính, thường đại diện cho thông tin phân loại hoặc danh mục:
Attrition_Flag: Trạng thái khách hàng
(Existing Customer – Khách hàng còn sử dụng dịch vụ, Attrited
Customer – Khách hàng đã ngừng sử dụng dịch vụ)
Gender: Giới tính
(M – Nam, F – Nữ)
Education_Level: Trình độ học vấn
(Graduate, High School, College, Doctorate, Uneducated, Unknown,
Post-Graduate)
Marital_Status: Tình trạng hôn nhân
(Single – Độc thân, Married – Đã kết hôn, Divorced – Ly hôn, Unknown
- Không rõ / Không cung cấp thông tin)
Income_Category: Nhóm thu nhập hàng năm
(< $40K, $40K - $60K, $60K - $80K, $80K - $120K, $120K +, Unknown
- Không rõ / Không cung cấp thông tin)
Card_Category: Loại thẻ tín dụng mà khách hàng sở hữu
(Blue, Silver, Gold, Platinum)
Bên cạnh đó, phần lớn các biến còn lại trong bộ dữ liệu là biến định lượng, phản ánh giá trị đo lường cụ thể liên quan đến đặc điểm cá nhân và hành vi tài chính của khách hàng. Một số biến nổi bật bao gồm:
Customer_Age: Tuổi của khách hàng
Dependent_count: Số người phụ thuộc tài chính
Months_on_book: Số tháng sử dụng thẻ
Total_Relationship_Count: Số sản phẩm/dịch vụ ngân hàng đang sử dụng
Months_Inactive_12_mon: Số tháng không hoạt động trong năm gần nhất
Contacts_Count_12_mon: Số lần liên hệ với ngân hàng trong năm
Credit_Limit: Hạn mức tín dụng được cấp
Total_Revolving_Bal: Số dư nợ quay vòng
Avg_Open_To_Buy: Số tiền còn lại có thể sử dụng trong hạn mức
Total_Amt_Chng_Q4_Q1: Mức thay đổi số tiền giao dịch từ quý 1 đến quý 4
Total_Trans_Amt: Tổng số tiền giao dịch trong năm
Total_Trans_Ct: Tổng số lượt giao dịch trong năm
Total_Ct_Chng_Q4_Q1: Mức thay đổi số lượt giao dịch từ quý 1 đến quý 4
Avg_Utilization_Ratio: Tỷ lệ sử dụng thẻ tín dụng trung bình
Kiểm định Chi-bình phương là một phương pháp phi tham số thường dùng để đánh giá liệu hai biến phân loại có mối liên hệ với nhau hay không. Cụ thể, nó kiểm tra tính độc lập giữa hai biến trong bảng tần suất chéo.
Giả thuyết kiểm định:
Công thức tính thống kê kiểm định:
\[ \chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
Trong đó:
Giá trị \(\chi^2\) được so sánh với phân phối chuẩn Chi-bình phương với bậc tự do \((r - 1)(c - 1)\). Nếu p-value < 0.05, bác bỏ \(H_0\), tức có mối liên hệ giữa hai biến.
Lưu ý: Kiểm định chỉ phù hợp khi các tần suất kỳ vọng đều ≥ 5. Nếu vi phạm điều kiện này, nên thay bằng kiểm định Fisher.
Khi nghiên cứu các biến phân loại nhị phân (ví dụ: khách hàng còn sử dụng hay đã ngừng sử dụng dịch vụ), một trong những mục tiêu quan trọng là ước lượng tỷ lệ (tỉ lệ phần trăm) một đặc điểm nào đó xuất hiện trong tổng thể và kiểm định xem tỷ lệ này có khác biệt so với một giá trị giả định hoặc giữa hai nhóm khác nhau hay không. Hai kỹ thuật thường dùng trong trường hợp này là ước lượng khoảng tin cậy cho tỷ lệ và kiểm định giả thuyết về tỷ lệ.
a. Ước lượng khoảng tin cậy cho tỷ lệ
Ước lượng khoảng tin cậy (Confidence Interval - CI) cho tỷ lệ giúp xác định một khoảng giá trị mà tỷ lệ thật sự trong tổng thể có khả năng nằm trong đó với mức tin cậy nhất định (thường là 95%).
Giả sử có tỷ lệ quan sát từ mẫu là \(\hat{p}\), kích thước mẫu là \(n\), thì khoảng tin cậy 95% cho tỷ lệ này được tính như sau:
\[ \hat{p} \pm z_{\alpha/2} \cdot \sqrt{ \frac{\hat{p}(1 - \hat{p})}{n} } \]
Trong đó:
Ví dụ: Nếu khảo sát cho thấy 60% khách hàng trong mẫu ngừng sử dụng dịch vụ, thì khoảng tin cậy 95% cho thấy tỷ lệ thật sự trong tổng thể có thể nằm trong khoảng từ 54% đến 66%.
b. Kiểm định giả thuyết cho một tỷ lệ
Mục tiêu là kiểm tra xem tỷ lệ quan sát từ mẫu có khác biệt có ý nghĩa thống kê so với một tỷ lệ giả định \(p_0\) trong tổng thể hay không.
Giả thuyết kiểm định:
Công thức tính thống kê kiểm định:
\[ z = \frac{\hat{p} - p_0}{ \sqrt{ \frac{p_0(1 - p_0)}{n} } } \]
Kết luận dựa trên p-value:
c. So sánh tỷ lệ giữa hai nhóm
Khi muốn so sánh tỷ lệ giữa hai nhóm (ví dụ: tỷ lệ ngừng sử dụng dịch vụ giữa nam và nữ), có thể sử dụng kiểm định hai tỷ lệ độc lập.
Giả thuyết kiểm định:
Công thức thống kê kiểm định:
\[ z = \frac{\hat{p}_1 - \hat{p}_2}{ \sqrt{p(1 - p) \left( \frac{1}{n_1} + \frac{1}{n_2} \right)} } \]
Trong đó:
Rủi ro tương đối (RR) là một chỉ số thống kê được sử dụng để so sánh khả năng xảy ra một hiện tượng nào đó giữa hai nhóm: nhóm có yếu tố nghiên cứu (nhóm phơi nhiễm) và nhóm không có yếu tố đó (nhóm không phơi nhiễm). Trong bối cảnh nghiên cứu định tính, RR thường được sử dụng để đánh giá liệu sự hiện diện của một đặc điểm nào đó (ví dụ: là khách hàng nữ, có thẻ tín dụng, hoặc có người phụ thuộc) có làm tăng hay giảm nguy cơ xảy ra sự kiện (ví dụ: ngừng sử dụng dịch vụ) hay không.
Cách tính RR dựa trên bảng 2x2:
| Sự kiện xảy ra | Không xảy ra | Tổng | |
|---|---|---|---|
| Nhóm có đặc điểm | a | b | a + b |
| Nhóm không có đặc điểm | c | d | c + d |
\[ RR = \frac{a / (a + b)}{c / (c + d)} \]
Diễn giải:
Chẳng hạn, nếu RR = 2 thì có thể hiểu rằng nhóm có đặc điểm nghiên cứu có khả năng xảy ra sự kiện gấp đôi so với nhóm còn lại.
Tỷ số chênh (OR) là một chỉ số thống kê khác cũng dùng để so sánh mức độ xảy ra một sự kiện giữa hai nhóm, tuy nhiên thay vì dựa vào xác suất, OR sử dụng tỷ lệ odds – tức là xác suất xảy ra sự kiện chia cho xác suất không xảy ra sự kiện.
Công thức tính OR:
\[ OR = \frac{a \cdot d}{b \cdot c} \]
Diễn giải:
OR thường được sử dụng phổ biến trong các mô hình hồi quy logistic nhị phân, vì nó cho phép ước lượng ảnh hưởng tương đối của các biến giải thích đến khả năng xảy ra sự kiện.
Tuy nhiên, cần lưu ý rằng khi xác suất xảy ra sự kiện cao, OR có xu hướng đánh giá quá mức mức độ khác biệt so với RR. Do đó, cần cẩn trọng trong diễn giải kết quả và không nhầm lẫn giữa OR và RR.
Để đánh giá độ chính xác của OR và kiểm tra ý nghĩa thống kê, ta thường sử dụng khoảng tin cậy (confidence interval – CI) cho OR, được tính thông qua logarit tự nhiên của OR.
Công thức:
\[ \log(OR) \pm z_{\alpha/2} \cdot \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}} \]
\[ CI_{OR} = \left(e^L,\ e^U\right) \]
Trong đó:
Diễn giải kết quả:
Mô hình hồi quy nhị phân được sử dụng khi biến phụ thuộc \(Y\) là biến định tính nhị phân, chỉ nhận giá trị 0 hoặc 1. Đây là trường hợp đặc biệt trong họ các mô hình hồi quy tổng quát (Generalized Linear Models - GLM), cho phép mô hình hóa xác suất xảy ra của một hiện tượng dưới tác động của các biến độc lập.
GLM bao gồm ba thành phần chính:
Thành phần hệ thống (System component):
Mối quan hệ tuyến tính giữa biến phụ thuộc và biến giải thích được biểu
diễn qua:
\[
\eta = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k
\]
Hàm liên kết (Link function):
Hàm liên kết \(g(p)\) kết nối kỳ vọng
của biến phụ thuộc với hàm tuyến tính \(\eta\). Tùy loại mô hình, ta sử dụng hàm
logit, probit hoặc cloglog.
Thành phần ngẫu nhiên (Random component):
Biến phụ thuộc \(Y \sim \text{Binomial}(1,
p)\) với:
\[
\mathbb{E}(Y) = p,\quad \text{Var}(Y) = p(1 - p)
\]
Các tham số trong mô hình được ước lượng bằng phương pháp tối đa hóa hàm hợp lý (MLE - Maximum Likelihood Estimation). Ý tưởng là tìm bộ tham số \(\boldsymbol{\beta}\) sao cho mô hình có xác suất tạo ra dữ liệu quan sát là lớn nhất.
Hàm hợp lý (likelihood): \[ L(\boldsymbol{\beta}) = \prod_{i=1}^{n} p_i^{y_i} (1 - p_i)^{1 - y_i} \] với \(p_i = G(X_i \boldsymbol{\beta})\) là xác suất dự báo, phụ thuộc vào dạng hàm liên kết.
Log-likelihood: \[ \log L(\boldsymbol{\beta}) = \sum_{i=1}^{n} \left[ y_i \log(p_i) + (1 - y_i) \log(1 - p_i) \right] \]
Việc tối đa hóa log-likelihood thường được thực hiện bằng các thuật toán số như Newton-Raphson hoặc Fisher scoring.
Mô hình Logit là một mô hình hồi quy nhị phân, trong đó xác suất xảy ra sự kiện được mô hình hóa bằng hàm logistic. Mô hình này giúp đảm bảo đầu ra luôn nằm trong khoảng (0, 1) – phù hợp với bản chất xác suất.
Hàm liên kết: \[ g(p) = \log\left( \frac{p}{1 - p} \right) = \eta \]
Xác suất xảy ra sự kiện: \[ p = \frac{e^{\eta}}{1 + e^{\eta}} \]
Diễn giải hệ số: Hệ số \(\beta_j\) biểu thị thay đổi trong log-odds khi \(X_j\) tăng một đơn vị. Giá trị \(e^{\beta_j}\) là odds ratio (tỷ số chênh), phản ánh mức tăng/giảm khả năng xảy ra sự kiện.
Mô hình logit được sử dụng phổ biến vì dễ diễn giải và đảm bảo đầu ra nằm trong khoảng \([0, 1]\).
Ưu điểm
Nhược điểm
Mô hình Probit cũng là một mô hình hồi quy nhị phân, nhưng thay vì dùng hàm logistic, nó sử dụng hàm phân phối tích lũy chuẩn chuẩn hóa (standard normal CDF). Mô hình này giả định rằng có một biến tiềm ẩn tuân theo phân phối chuẩn đứng sau quyết định xảy ra hay không xảy ra sự kiện.
Hàm liên kết: \[ g(p) = \Phi^{-1}(p) = \eta \]
Xác suất xảy ra sự kiện: \[ p = \Phi(\eta) = \int_{-\infty}^{\eta} \frac{1}{\sqrt{2\pi}} e^{-t^2 / 2} \, dt \]
Giải thích: Các hệ số \(\beta_j\) không diễn giải trực tiếp qua odds ratio, mà tác động được thể hiện gián tiếp thông qua thay đổi trong xác suất \(p\) qua hàm \(\Phi\).
Probit phù hợp khi giả định biến tiềm ẩn có phân phối gần chuẩn. Mô hình này thường cho kết quả tương tự Logit.
Ưu điểm
Nhược điểm
Mô hình Complementary Log-Log (Cloglog) là mô hình hồi quy nhị phân với hàm liên kết bất đối xứng, đặc biệt phù hợp trong các tình huống xác suất xảy ra sự kiện rất nhỏ (sự kiện hiếm) hoặc phân phối xác suất bất đối xứng.
Hàm liên kết: \[ g(p) = \log[-\log(1 - p)] = \eta \]
Xác suất xảy ra sự kiện: \[ p = 1 - e^{-e^{\eta}} \]
Đặc điểm: Hàm liên kết không đối xứng, nhạy hơn với các giá trị nhỏ của \(p\). Mô hình thường dùng trong phân tích sống sót và dữ liệu có phân phối không cân bằng.
Ưu điểm
Nhược điểm
Sau khi xây dựng các mô hình hồi quy nhị phân, việc lựa chọn mô hình tốt nhất đòi hỏi sử dụng các tiêu chí đánh giá phù hợp. Trong nghiên cứu này, ba tiêu chí chính được sử dụng gồm: AIC, Brier Score và Ma trận nhầm lẫn (Confusion Matrix).
AIC là một chỉ số dùng để so sánh các mô hình thống kê, giúp đánh giá mức độ phù hợp của mô hình với dữ liệu quan sát, đồng thời có tính đến mức độ phức tạp (số lượng tham số).
\[ \text{AIC} = -2 \log(L) + 2k \]
Trong đó:
Diễn giải:
Brier Score là một chỉ số đo lường độ chính xác của dự báo xác suất. Nó đo khoảng cách trung bình bình phương giữa xác suất dự đoán và kết quả thực tế (0 hoặc 1).
\[ \text{Brier Score} = \frac{1}{n} \sum_{i=1}^{n} (p_i - y_i)^2 \]
Trong đó:
Diễn giải:
Khác với các tiêu chí chỉ dựa vào phân loại đúng/sai, Brier Score đánh giá độ lệch giữa xác suất dự đoán và thực tế, giúp phản ánh chất lượng dự báo xác suất của mô hình thay vì chỉ quan tâm đến nhãn nhị phân.
Ma trận nhầm lẫn là công cụ đánh giá độ chính xác phân loại của mô hình khi áp dụng một ngưỡng cắt (thường là 0.5) để biến xác suất thành nhãn 0/1.
| Dự đoán = 1 | Dự đoán = 0 | |
|---|---|---|
| Thực tế = 1 | TP | FN |
| Thực tế = 0 | FP | TN |
Trong đó:
Từ ma trận này, có thể tính các chỉ số:
Accuracy (Độ chính xác tổng thể):
\[
\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}
\]
Precision (Độ chính xác dương):
\[
\text{Precision} = \frac{TP}{TP + FP}
\]
Recall (Độ nhạy):
\[
\text{Recall} = \frac{TP}{TP + FN}
\]
F1-score (Trung bình điều hòa giữa Precision và
Recall):
\[
F1 = 2 \cdot \frac{\text{Precision} \cdot
\text{Recall}}{\text{Precision} + \text{Recall}}
\]
Diễn giải:
Tùy vào mục tiêu nghiên cứu, mỗi tiêu chí sẽ mang trọng số khác nhau. Trong nghiên cứu này, cả ba tiêu chí được sử dụng đồng thời để đánh giá toàn diện hiệu quả của các mô hình hồi quy nhị phân.
dldt <- mydata[, qualitative_vars]
tanso_flag <- table(dldt$Attrition_Flag)
tansuat_flag <- prop.table(tanso_flag) * 100
bang_flag <- data.frame(
DienGiai = names(tanso_flag),
Tanso = as.numeric(tanso_flag),
Tansuat = round(as.numeric(tansuat_flag), 2)
)
my_kable(bang_flag,
caption_text = "Phân phối khách hàng theo tình trạng sử dụng dịch vụ.",
col_names = c("DienGiai", "Tanso", "Tansuat"))
| DienGiai | Tanso | Tansuat |
|---|---|---|
| Attrited Customer | 1627 | 16.07 |
| Existing Customer | 8500 | 83.93 |
Trực quan hóa dữ liệu
barplot(
tanso_flag,
main = "Tần số theo trạng thái khách hàng",
xlab = "Trạng thái sử dụng dịch vụ",
ylab = "Số lượng khách hàng",
las = 1,
col = c("salmon", "lightgreen"),
border = "white"
)
# Màu cho từng lát
cols = c("steelblue", "tomato")
# Nhãn phần trăm
nhanflag <- paste0(round(tansuat_flag, 2), "%")
# Vẽ pie chart không nhãn
pie(
tansuat_flag,
labels = NA, # ẩn nhãn ngay trên lát
main = "Tần suất theo trạng thái khách hàng",
col = cols,
border = "white"
)
# Thêm legend bên ngoài góc phải
legend(
x = "topright",
legend = paste(names(tansuat_flag), nhanflag),
fill = cols,
)
Nhận xét:
Kết quả thống kê mô tả cho thấy cơ cấu trạng thái khách hàng trong bộ dữ liệu có sự phân bố không đồng đều giữa hai nhóm. Cụ thể, trong tổng số 10.127 khách hàng, có 8.500 người tiếp tục sử dụng dịch vụ (chiếm 83,93%), trong khi chỉ có 1.627 người đã ngừng sử dụng (chiếm 16,07%).
Biểu đồ tần suất minh họa rõ sự chênh lệch này, khi phần lớn khách hàng vẫn duy trì việc sử dụng dịch vụ của ngân hàng. Tỷ lệ khách hàng ngừng sử dụng tuy chiếm tỷ trọng thấp hơn nhưng không thể xem nhẹ, bởi đây chính là nhóm đối tượng mà nghiên cứu hướng đến nhằm tìm hiểu nguyên nhân và các yếu tố dẫn đến hành vi rời bỏ.
Từ kết quả này, có thể nhận định rằng vấn đề ngừng sử dụng dịch vụ tuy không phổ biến nhưng vẫn tồn tại trong một tỷ lệ đáng kể. Điều này đặt ra yêu cầu cần phải phân tích sâu hơn ở các phần tiếp theo để xác định đâu là các biến số có khả năng tác động đến quyết định duy trì hay ngừng sử dụng của khách hàng, từ đó hỗ trợ ngân hàng trong việc xây dựng chiến lược giữ chân khách hàng hiệu quả hơn.
Để hiểu rõ hơn về đặc điểm phân phối của biến phụ thuộc, phần này tiến hành ước lượng khoảng tin cậy 95% cho tỷ lệ khách hàng ngừng sử dụng dịch vụ, đồng thời kiểm định xem tỷ lệ này có khác biệt so với một giá trị giả định (50%) hay không.
# Số khách hàng ngừng sử dụng dịch vụ
n_attrited <- sum(dldt$Attrition_Flag == "Attrited Customer")
# Tổng số khách hàng
n_total <- nrow(dldt)
# Kiểm định tỷ lệ khách hàng ngừng sử dụng dịch vụ có khác 50% không
prop.test(n_attrited, n_total, p = 0.5, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_attrited out of n_total, null probability 0.5
## X-squared = 4663.2, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.1535880 0.1679904
## sample estimates:
## p
## 0.1606596
Kết quả phân tích cho thấy tỷ lệ khách hàng ngừng sử dụng dịch vụ trong mẫu khảo sát đạt khoảng 16.07%.
Vì khoảng tin cậy không bao gồm giá trị 50% và giá trị p rất nhỏ, có thể kết luận rằng tỷ lệ khách hàng ngừng sử dụng dịch vụ khác biệt có ý nghĩa thống kê so với mức giả định 50%.
Trên thực tế, tỷ lệ ngừng sử dụng dịch vụ trong mẫu thấp hơn đáng kể so với mốc giả định, cho thấy phần lớn khách hàng vẫn đang duy trì sử dụng dịch vụ. Tuy nhiên, nhóm khách hàng đã ngừng sử dụng vẫn chiếm một tỷ lệ nhất định và cần được xem xét trong các phân tích tiếp theo nhằm nhận diện các yếu tố ảnh hưởng và đề xuất giải pháp nâng cao khả năng giữ chân khách hàng.
Đặt giả thuyết và Kiểm định
Tiếp theo, tiến hành kiểm định giả thuyết rằng tỷ lệ khách hàng ngừng sử dụng dịch vụ lớn hơn 50%.
Giả thuyết H₀ (H0): Tỷ lệ khách hàng ngừng sử dụng dịch vụ bằng 50% (p = 0.5).
Giả thuyết H₁ (H1): Tỷ lệ khách hàng ngừng sử dụng dịch vụ lớn hơn 50% (p > 0.5).
Quy tắc ra quyết định:
Nếu p-value < 0.05 → Bác bỏ giả thuyết H₀: Có đủ bằng chứng thống kê để kết luận rằng tỷ lệ khách hàng ngừng sử dụng dịch vụ lớn hơn 50%.
Nếu p-value ≥ 0.05 → Không bác bỏ giả thuyết H₀: Chưa có đủ bằng chứng để kết luận rằng tỷ lệ khách hàng ngừng sử dụng dịch vụ lớn hơn 50%.
prop.test(n_attrited, n_total, p = 0.5, alternative = "greater", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_attrited out of n_total, null probability 0.5
## X-squared = 4663.2, df = 1, p-value = 1
## alternative hypothesis: true p is greater than 0.5
## 95 percent confidence interval:
## 0.1546996 1.0000000
## sample estimates:
## p
## 0.1606596
Kết quả kiểm định cho thấy p-value = 1 (lớn hơn 0.05), do đó không có đủ bằng chứng để bác bỏ giả thuyết H₀. Nói cách khác, chưa có cơ sở thống kê để kết luận rằng tỷ lệ khách hàng ngừng sử dụng dịch vụ lớn hơn 50%.
Tỷ lệ thực tế chỉ khoảng 16.07%, cho thấy phần lớn khách hàng vẫn duy trì việc sử dụng dịch vụ, và hành vi ngừng sử dụng chỉ chiếm một tỷ lệ nhỏ trong mẫu khảo sát.
Bảng tần số và tần suất
tanso_gender <- table(dldt$Gender)
tansuat_gender <- prop.table(tanso_gender) * 100
bang_flag <- data.frame(
DienGiai = names(tanso_gender),
Tanso = as.numeric(tanso_gender),
Tansuat = round(as.numeric(tansuat_gender), 2)
)
my_kable(bang_flag,
caption_text = "Phân phối khách hàng theo giới tính",
col_names = c("DienGiai", "Tanso", "Tansuat"))
| DienGiai | Tanso | Tansuat |
|---|---|---|
| F | 5358 | 52.91 |
| M | 4769 | 47.09 |
Trực quan hóa dữ liệu
barplot(
tanso_gender,
main = "Tần số theo giới tính",
xlab = "Giới tính",
ylab = "Số quan sát",
las = 1,
col = c("pink", "blue"),
border = "white")
# Màu cho từng lát
cols <- c("pink", "green","yellow")
# Nhãn phần trăm
nhangender <- paste0(round(tansuat_gender, 1), "%")
# Vẽ pie chart không nhãn
pie(
tansuat_gender,
labels = NA, # ẩn nhãn ngay trên lát
main = "Tần suất theo giới tính",
col = cols,
border = "white"
)
# Thêm legend bên ngoài góc phải
legend(
x = "topright",
legend = paste(names(tansuat_gender), nhangender),
fill = cols,
)
Nhận xét:
Kết quả thống kê mô tả cho thấy cơ cấu giới tính trong bộ dữ liệu tương đối cân đối giữa hai nhóm. Cụ thể, nhóm nữ (Female) chiếm 5.358 quan sát, tương ứng với 52,91% tổng số mẫu, trong khi nhóm nam (Male) có 4.769 quan sát, chiếm 47,09%.
Biểu đồ tần số và tần suất cho thấy sự phân bố giới tính không có sự chênh lệch đáng kể, cho thấy dữ liệu có tính đại diện tương đối tốt về mặt giới tính. Điều này là cơ sở thuận lợi cho việc phân tích các mối quan hệ giữa giới tính và hành vi ngừng sử dụng dịch vụ trong các bước tiếp theo của nghiên cứu.
Bảng tần số và tần suất
tanso_edu <- table(dldt$Education_Level)
tansuat_edu <- prop.table(tanso_edu) * 100
bang_flag <- data.frame(
DienGiai = names(tanso_edu),
Tanso = as.numeric(tanso_edu),
Tansuat = round(as.numeric(tansuat_edu), 2)
)
my_kable(bang_flag,
caption_text = "Phân phối khách hàng theo trình độ học vấn",
col_names = c("DienGiai", "Tanso", "Tansuat"))
| DienGiai | Tanso | Tansuat |
|---|---|---|
| College | 1013 | 10.00 |
| Doctorate | 451 | 4.45 |
| Graduate | 3128 | 30.89 |
| High School | 2013 | 19.88 |
| Post-Graduate | 516 | 5.10 |
| Uneducated | 1487 | 14.68 |
| Unknown | 1519 | 15.00 |
Trực quan hóa dữ liệu
barplot(
tanso_edu,
main = "Tần số theo trình độ học vấn",
xlab = "Trình độ học vấn",
ylab = "Số quan sát",
las = 1,
col = rainbow(length(tanso_edu)),
border = "white",
cex.names = 0.8
)
cols_edu <- rainbow(length(tansuat_edu))
nhan_edu <- paste0(round(tansuat_edu, 1), "%")
pie(
tansuat_edu,
labels = NA,
main = "Tần suất theo trình độ học vấn",
col = cols_edu,
border = "white"
)
legend(
x = "topright",
legend = paste(names(tansuat_edu), nhan_edu),
fill = cols_edu
)
Nhận xét:
Kết quả thống kê mô tả cho thấy trình độ học vấn của khách hàng trong bộ dữ liệu được phân bố khá đa dạng, phản ánh đặc điểm nhân khẩu học phong phú của tập khách hàng. Nhóm khách hàng có trình độ tốt nghiệp đại học (Graduate) chiếm tỷ trọng cao nhất với 30,89%, cho thấy đây là đối tượng chủ yếu trong cơ sở dữ liệu.
Các nhóm còn lại như High School, Uneducated và College chiếm tỷ lệ từ khoảng 10% đến dưới 20%, thể hiện mức độ phổ biến vừa phải. Trong khi đó, nhóm có trình độ Doctorate và Post-Graduate chiếm tỷ lệ tương đối thấp, lần lượt là 4,45% và 5,10%.
Đáng lưu ý, nhóm Unknown (không rõ trình độ học vấn) chiếm khoảng 15% tổng số quan sát. Việc tồn tại tỷ lệ lớn các giá trị không xác định này có thể ảnh hưởng đến tính toàn vẹn và độ tin cậy của các phân tích tiếp theo nếu không được xử lý thích hợp.
Tổng thể, dữ liệu phản ánh rõ ràng sự hiện diện nổi bật của nhóm khách hàng có trình độ học vấn cao, đồng thời vẫn đảm bảo độ đa dạng cần thiết để thực hiện các phân tích liên quan đến biến học vấn trong mô hình nghiên cứu.
Bảng tần số và tần suất
tanso_marital <- table(dldt$Marital_Status)
tansuat_marital <- prop.table(tanso_marital) * 100
bang_flag <- data.frame(
DienGiai = names(tanso_marital),
Tanso = as.numeric(tanso_marital),
Tansuat = round(as.numeric(tansuat_marital), 2)
)
my_kable(bang_flag,
caption_text = "Phân phối khách hàng theo tình trạng hôn nhân",
col_names = c("DienGiai", "Tanso", "Tansuat"))
| DienGiai | Tanso | Tansuat |
|---|---|---|
| Divorced | 748 | 7.39 |
| Married | 4687 | 46.28 |
| Single | 3943 | 38.94 |
| Unknown | 749 | 7.40 |
Trực quan hóa dữ liệu
barplot(
tanso_marital,
main = "Tần số theo tình trạng hôn nhân",
xlab = "Tình trạng hôn nhân",
ylab = "Số quan sát",
las = 1,
col = terrain.colors(length(tanso_marital)),
border = "white"
)
cols_marital <- terrain.colors(length(tansuat_marital))
nhanmarital <- paste0(round(tansuat_marital, 1), "%")
pie(
tansuat_marital,
labels = NA,
main = "Tần suất theo tình trạng hôn nhân",
col = cols_marital,
border = "white"
)
legend(
x = "topright",
legend = paste(names(tansuat_marital), nhanmarital),
fill = cols_marital
)
Nhận xét:
Kết quả phân tích cho thấy tình trạng hôn nhân của khách hàng trong bộ dữ liệu được phân bố không đồng đều giữa các nhóm. Nhóm Married (đã kết hôn) chiếm tỷ lệ lớn nhất với 46,3%, tiếp theo là nhóm Single (độc thân) với 38,9%. Hai nhóm còn lại là Divorced (ly hôn) và Unknown (không rõ) có tỷ lệ thấp hơn và gần tương đương nhau (7.4%).
Xét về số lượng tuyệt đối, nhóm Married có 4.687 khách hàng, cao nhất trong các nhóm, trong khi nhóm Single chiếm 3.943 người. Hai nhóm Divorced và Unknown có số lượng gần bằng nhau (748 và 749 người).
Sự phân bố này phản ánh đặc điểm nhân khẩu học của mẫu khảo sát, trong đó khách hàng đã kết hôn chiếm ưu thế đáng kể. Tuy nhiên, sự hiện diện đáng kể của nhóm Unknown cũng đặt ra yêu cầu cần xem xét và xử lý phù hợp để đảm bảo độ chính xác và đại diện của dữ liệu trong các phân tích tiếp theo liên quan đến tình trạng hôn nhân.
Bảng tần số và tần suất
tanso_income <- table(dldt$Income_Category)
tansuat_income <- prop.table(tanso_income) * 100
bang_flag <- data.frame(
DienGiai = names(tanso_income),
Tanso = as.numeric(tanso_income),
Tansuat = round(as.numeric(tansuat_income), 2)
)
my_kable(bang_flag,
caption_text = "Phân phối khách hàng theo nhóm thu nhập",
col_names = c("DienGiai", "Tanso", "Tansuat"))
| DienGiai | Tanso | Tansuat |
|---|---|---|
| $120K + | 727 | 7.18 |
| $40K - $60K | 1790 | 17.68 |
| $60K - $80K | 1402 | 13.84 |
| $80K - $120K | 1535 | 15.16 |
| Less than $40K | 3561 | 35.16 |
| Unknown | 1112 | 10.98 |
Trực quan hóa dữ liệu
barplot(
tanso_income,
main = "Tần số theo nhóm thu nhập",
xlab = "Nhóm thu nhập",
ylab = "Số quan sát",
las = 1,
col = rainbow(length(tanso_income)),
border = "white",
cex.names = 0.8
)
cols_income <- rainbow(length(tansuat_income))
nhan_income <- paste0(round(tansuat_income, 1), "%")
pie(
tansuat_income,
labels = NA,
main = "Tần suất theo nhóm thu nhập",
col = cols_income,
border = "white"
)
legend(
x = "topright",
legend = paste(names(tansuat_income), nhan_income),
fill = cols_income
)
Nhận xét:
Kết quả phân tích cho thấy cơ cấu thu nhập của khách hàng trong bộ dữ liệu có sự phân bố không đồng đều giữa các nhóm. Nhóm Less than $40K (dưới 40 nghìn đô la/năm) chiếm tỷ trọng lớn nhất, khoảng 35,2%, trong khi nhóm $120K+ (trên 120 nghìn đô la/năm) chiếm tỷ trọng thấp nhất, chỉ khoảng 7,2%. Các nhóm còn lại phân bố lần lượt như sau: $40K–$60K chiếm 17,7%, $60K–$80K chiếm 13,8%, $80K–$120K chiếm 15,2%, và nhóm Unknown (không rõ thu nhập) chiếm 10,9%.
Biểu đồ tần số và tần suất cho thấy phần lớn khách hàng thuộc nhóm thu nhập trung bình–thấp, đặc biệt là nhóm có thu nhập dưới $40K, có tỷ lệ vượt trội so với các nhóm còn lại. Điều này phản ánh đặc điểm dân số của tập khách hàng trong mẫu nghiên cứu có xu hướng nghiêng về những cá nhân có mức thu nhập hạn chế hơn.
Sự phân bố thu nhập như vậy là một yếu tố cần đặc biệt lưu ý trong các phân tích tiếp theo liên quan đến hành vi tài chính, khả năng tín dụng hoặc rủi ro ngừng sử dụng dịch vụ. Bởi lẽ, thu nhập là một trong những biến số có thể tác động đáng kể đến quyết định tài chính cũng như hành vi duy trì hay chấm dứt sử dụng dịch vụ của khách hàng.
Bảng tần số và tần suất
tanso_card <- table(dldt$Card_Category)
tansuat_card <- prop.table(tanso_card) * 100
bang_flag <- data.frame(
DienGiai = names(tanso_card),
Tanso = as.numeric(tanso_card),
Tansuat = round(as.numeric(tansuat_card), 2)
)
my_kable(bang_flag,
caption_text = "Phân phối khách hàng theo hạng thẻ",
col_names = c("DienGiai", "Tanso", "Tansuat"))
| DienGiai | Tanso | Tansuat |
|---|---|---|
| Blue | 9436 | 93.18 |
| Gold | 116 | 1.15 |
| Platinum | 20 | 0.20 |
| Silver | 555 | 5.48 |
Trực quan hóa dữ liệu
cols_card <- c("#4E79A7", "#F28E2B", "#E15759", "#76B7B2")
barplot(
tanso_card,
main = "Tần số theo hạng thẻ",
xlab = "Hạng thẻ",
ylab = "Số quan sát",
las = 1,
col = cols_card[1:length(tanso_card)],
border = "white",
cex.names = 0.8
)
cols_card <- c("#4E79A7", "#F28E2B", "#59A14F", "#76B7B2")[1:length(tansuat_card)]
nhan_card <- paste0(round(tansuat_card, 1), "%")
pie(
tansuat_card,
labels = NA,
main = "Tần suất theo hạng thẻ",
col = cols_card,
border = "white"
)
legend(
x = "topright",
legend = paste(names(tansuat_card), nhan_card),
fill = cols_card
)
Nhận xét:
Kết quả phân tích cho thấy cơ cấu hạng thẻ (Card Category) của khách hàng trong bộ dữ liệu phân bố rất không đồng đều giữa các nhóm. Nhóm Blue (thẻ phổ thông) chiếm tỷ trọng vượt trội, khoảng 93,2%, trong khi ba nhóm còn lại chỉ chiếm tỷ lệ rất nhỏ: Silver (thẻ bạc) khoảng 5,5%, Gold (thẻ vàng) khoảng 1,1% và Platinum (thẻ bạch kim) chỉ chiếm khoảng 0,2%.
Biểu đồ tần số và tần suất cho thấy phần lớn khách hàng trong tập dữ liệu sở hữu thẻ phổ thông, cho thấy đây là loại thẻ phổ biến nhất trong chính sách sản phẩm của ngân hàng. Ngược lại, các loại thẻ cao cấp như Silver, Gold và đặc biệt là Platinum lại có số lượng khách hàng rất hạn chế.
Sự chênh lệch lớn này phản ánh đặc điểm phân khúc khách hàng mà ngân hàng đang phục vụ, đồng thời đặt ra câu hỏi liệu hạng thẻ có liên quan đến hành vi ngừng sử dụng dịch vụ hay không. Trong các phân tích tiếp theo, biến hạng thẻ cần được xem xét như một yếu tố tiềm năng ảnh hưởng đến mức độ gắn bó và giá trị lâu dài của khách hàng đối với ngân hàng.
# Tạo danh sách các biến định lượng
quantitative_vars <- c(
"Customer_Age", "Dependent_count", "Months_on_book", "Total_Relationship_Count",
"Months_Inactive_12_mon", "Contacts_Count_12_mon", "Credit_Limit", "Total_Revolving_Bal",
"Avg_Open_To_Buy", "Total_Amt_Chng_Q4_Q1", "Total_Trans_Amt", "Total_Trans_Ct",
"Total_Ct_Chng_Q4_Q1", "Avg_Utilization_Ratio"
)
# Lọc dữ liệu chứa các biến định lượng
dldl <- mydata[, quantitative_vars]
# Tạo bảng thống kê mô tả (không còn dùng rownames)
summary_stats <- data.frame(
Số_lượng = sapply(dldl, function(x) sum(!is.na(x))),
Trung_bình = sapply(dldl, mean, na.rm = TRUE),
Độ_lệch_chuẩn = sapply(dldl, sd, na.rm = TRUE),
Min = sapply(dldl, min, na.rm = TRUE),
Max = sapply(dldl, max, na.rm = TRUE)
)
# Hiển thị bảng bằng kable
my_kable(summary_stats,
caption_text = "Bảng thống kê mô tả các biến định lượng",
digits = 2,
align = "c",
col_names = c("Số_lượng", "Trung_bình", "Độ_lệch_chuẩn", "Min", "Max"))
| Số_lượng | Trung_bình | Độ_lệch_chuẩn | Min | Max | |
|---|---|---|---|---|---|
| Customer_Age | 10127 | 46.33 | 8.02 | 26.0 | 73.00 |
| Dependent_count | 10127 | 2.35 | 1.30 | 0.0 | 5.00 |
| Months_on_book | 10127 | 35.93 | 7.99 | 13.0 | 56.00 |
| Total_Relationship_Count | 10127 | 3.81 | 1.55 | 1.0 | 6.00 |
| Months_Inactive_12_mon | 10127 | 2.34 | 1.01 | 0.0 | 6.00 |
| Contacts_Count_12_mon | 10127 | 2.46 | 1.11 | 0.0 | 6.00 |
| Credit_Limit | 10127 | 8631.95 | 9088.78 | 1438.3 | 34516.00 |
| Total_Revolving_Bal | 10127 | 1162.81 | 814.99 | 0.0 | 2517.00 |
| Avg_Open_To_Buy | 10127 | 7469.14 | 9090.69 | 3.0 | 34516.00 |
| Total_Amt_Chng_Q4_Q1 | 10127 | 0.76 | 0.22 | 0.0 | 3.40 |
| Total_Trans_Amt | 10127 | 4404.09 | 3397.13 | 510.0 | 18484.00 |
| Total_Trans_Ct | 10127 | 64.86 | 23.47 | 10.0 | 139.00 |
| Total_Ct_Chng_Q4_Q1 | 10127 | 0.71 | 0.24 | 0.0 | 3.71 |
| Avg_Utilization_Ratio | 10127 | 0.27 | 0.28 | 0.0 | 1.00 |
Bảng thống kê mô tả cho thấy các biến định lượng trong tập dữ liệu có đặc điểm phân bố đa dạng.
Tuổi trung bình của khách hàng là khoảng 46.33, với độ lệch chuẩn 8.02, cho thấy ngân hàng phục vụ chủ yếu nhóm khách hàng trung niên. Số người phụ thuộc trung bình là 2.35, còn thời gian giữ tài khoản trung bình là 35.93 tháng, phản ánh mối quan hệ tương đối bền vững với ngân hàng.
Về tương tác, khách hàng trung bình liên hệ với ngân hàng khoảng 2.46 lần/năm, và có khoảng 2.34 tháng không hoạt động trong 12 tháng gần nhất.
Ở khía cạnh tài chính, hạn mức tín dụng trung bình là 8.631 USD, nhưng dao động lớn, cho thấy sự phân hóa giữa các nhóm khách hàng. Tổng số tiền giao dịch trung bình là 4.404 USD và số giao dịch trung bình là 64.86 lần, thể hiện mức độ sử dụng dịch vụ khá tích cực. Tỷ lệ sử dụng thẻ trung bình đạt 0.27, cho thấy phần lớn khách hàng vẫn còn dư địa tín dụng.
Nhìn chung, các biến định lượng phản ánh được đặc điểm nhân khẩu học, hành vi chi tiêu và mức độ tương tác của khách hàng – những yếu tố có thể ảnh hưởng đến khả năng ngừng sử dụng dịch vụ trong các phân tích tiếp theo.
Để xác định xem liệu các đặc điểm định tính của khách hàng như giới tính, trình độ học vấn, tình trạng hôn nhân, thu nhập và hạng thẻ có liên quan đến hành vi ngừng sử dụng dịch vụ hay không (biến phụ thuộc: Attrition_Flag), nghiên cứu áp dụng kiểm định Chi-bình phương (Chi-squared test) nhằm đánh giá sự độc lập giữa các cặp biến phân loại.
Giả thuyết kiểm định:
Giả thuyết H₀ (Giả thuyết không): Biến định tính và biến phụ thuộc là độc lập nhau (không có mối liên hệ).
Giả thuyết H₁ (Giả thuyết thay thế): Giữa biến định tính và biến phụ thuộc tồn tại mối liên hệ có ý nghĩa thống kê.
Ý nghĩa kiểm định:
Nếu p-value < 0.05 → Bác bỏ H₀: Có mối liên hệ giữa hai biến.
Nếu p-value ≥ 0.05 → Chưa đủ cơ sở để bác bỏ H₀: Chưa có đủ bằng chứng về mối liên hệ.
Kết quả được tổng hợp trong bảng sau:
# Tạo bảng p-value
p_values <- data.frame(
Biến = c("Giới tính", "Trình độ học vấn", "Tình trạng hôn nhân", "Nhóm thu nhập", "Hạng thẻ"),
P_value = c(
chisq.test(table(dldt$Gender, dldt$Attrition_Flag))$p.value,
chisq.test(table(dldt$Education_Level, dldt$Attrition_Flag))$p.value,
chisq.test(table(dldt$Marital_Status, dldt$Attrition_Flag))$p.value,
chisq.test(table(dldt$Income_Category, dldt$Attrition_Flag))$p.value,
chisq.test(table(dldt$Card_Category, dldt$Attrition_Flag))$p.value
)
)
# Hiển thị bảng với định dạng đẹp
my_kable(p_values,
caption_text = "Kết quả kiểm định Chi-bình phương giữa các biến định tính và biến phụ thuộc",
digits = 4,
align = "c",
col_names = c("Biến", "P_value"))
| Biến | P_value |
|---|---|
| Giới tính | 0.0002 |
| Trình độ học vấn | 0.0515 |
| Tình trạng hôn nhân | 0.1089 |
| Nhóm thu nhập | 0.0250 |
| Hạng thẻ | 0.5252 |
Nhận xét:
Dựa vào bảng kết quả trên, có thể thấy chỉ có giới tính và nhóm thu nhập là hai biến có mối liên hệ thống kê có ý nghĩa với hành vi ngừng sử dụng dịch vụ của khách hàng (p-value < 0.05). Các biến còn lại như trình độ học vấn, tình trạng hôn nhân và hạng thẻ không cho thấy mối liên hệ rõ ràng với biến phụ thuộc trong phạm vi mức ý nghĩa 5%.
Do đó, hai biến giới tính (Gender) và nhóm thu nhập (Income_Category) sẽ được lựa chọn để đưa vào các phân tích tiếp theo trong mô hình hồi quy nhằm tìm hiểu sâu hơn về các yếu tố ảnh hưởng đến việc khách hàng ngừng sử dụng dịch vụ.
Mục tiêu của bước này là xác định các biến độc lập nào sẽ phù hợp để đưa vào phân tích hồi quy nhằm tìm hiểu các yếu tố có thể ảnh hưởng đến hành vi ngừng sử dụng dịch vụ của khách hàng.
Biến định tính được lựa chọn
Dựa trên kết quả kiểm định Chi-bình phương ở Mục 4.2, hai biến định tính Gender (Giới tính) và Income_Category (Nhóm thu nhập) được lựa chọn để đưa vào phân tích tiếp theo.Cả hai biến đều có giá trị p nhỏ hơn 0.05, cho thấy tồn tại mối liên hệ có ý nghĩa thống kê với biến phụ thuộc. Việc đưa vào hai biến này giúp xem xét liệu các đặc điểm nhân khẩu học có ảnh hưởng đến quyết định ngừng sử dụng dịch vụ hay không.
Gender: Giới tính có thể phản ánh sự khác biệt trong hành vi tiêu dùng và mức độ trung thành với dịch vụ. Việc phân tích biến này có thể giúp xác định xem có sự khác biệt đáng kể giữa nam và nữ trong quyết định tiếp tục hay ngừng sử dụng dịch vụ hay không.
Income_Category: Nhóm thu nhập được xem là một yếu tố quan trọng liên quan đến khả năng chi tiêu và nhu cầu sử dụng dịch vụ ngân hàng. Việc kiểm tra mối liên hệ giữa thu nhập và hành vi rời bỏ dịch vụ giúp ngân hàng xác định nhóm khách hàng có nguy cơ cao hơn để từ đó có chiến lược phù hợp.
Biến định lượng được lựa chọn
Đối với các biến định lượng, nghiên cứu lựa chọn hai biến là Months_Inactive_12_mon và Total_Trans_Ct dựa trên cả cơ sở lý thuyết và thống kê mô tả ban đầu. Đây là hai biến đại diện cho mức độ tương tác và tần suất sử dụng dịch vụ, vốn được xem là những yếu tố có khả năng ảnh hưởng trực tiếp đến quyết định ngừng sử dụng của khách hàng:
Months_Inactive_12_mon (Số tháng không hoạt động trong 12 tháng gần nhất): Phản ánh tình trạng ít tương tác của khách hàng với dịch vụ ngân hàng trong năm qua – một dấu hiệu tiềm ẩn của việc mất kết nối với ngân hàng.
Total_Trans_Ct (Tổng số giao dịch trong quý gần nhất): Đại diện cho mức độ sử dụng dịch vụ gần đây, cho phép nhận diện các khách hàng vẫn đang tích cực tương tác hoặc bắt đầu giảm dần hoạt động.
# Chia khoảng theo tertiles
mydata$Total_Trans_Ct_group <- cut(mydata$Total_Trans_Ct,
breaks = quantile(mydata$Total_Trans_Ct, probs = c(0, 1/3, 2/3, 1), na.rm = TRUE),
labels = c("Thấp", "Trung bình", "Cao"),
include.lowest = TRUE)
mydata$Months_Inactive_12_mon_group <- cut(mydata$Months_Inactive_12_mon,
breaks = quantile(mydata$Months_Inactive_12_mon, probs = c(0, 1/3, 2/3, 1), na.rm = TRUE),
labels = c("Thấp", "Trung bình", "Cao"),
include.lowest = TRUE)
# Tạo bảng p-value đã định dạng
p1 <- chisq.test(table(mydata$Total_Trans_Ct_group, mydata$Attrition_Flag))$p.value
p2 <- chisq.test(table(mydata$Months_Inactive_12_mon_group, mydata$Attrition_Flag))$p.value
chisq_summary <- data.frame(
Biến = c("Tổng số giao dịch (Total_Trans_Ct)",
"Số tháng không hoạt động (Months_Inactive_12_mon)"),
P_value = c(formatC(p1, format = "f", digits = 4),
formatC(p2, format = "f", digits = 4))
)
# Hiển thị bảng đẹp
my_kable(chisq_summary,
caption_text = "Kết quả kiểm định Chi-bình phương giữa các biến định lượng đã chia khoảng và biến phụ thuộc",
col_names = c("Biến", "P_value"),
digits = 4,
align = "c")
| Biến | P_value |
|---|---|
| Tổng số giao dịch (Total_Trans_Ct) | 0.0000 |
| Số tháng không hoạt động (Months_Inactive_12_mon) | 0.0000 |
Việc lựa chọn hai biến định lượng này nhằm tập trung vào những yếu tố phản ánh mức độ tương tác và tần suất sử dụng dịch vụ của khách hàng – vốn được xem là các dấu hiệu tiềm tàng liên quan đến hành vi ngừng sử dụng. Kết quả kiểm định Chi-bình phương khi phân loại các biến này thành nhóm (thấp – trung bình – cao) cho thấy có mối liên hệ thống kê có ý nghĩa với biến phụ thuộc, qua đó củng cố thêm lập luận rằng các đặc điểm hành vi như số lần giao dịch hay mức độ không hoạt động có thể ảnh hưởng đến quyết định tiếp tục hay rời bỏ dịch vụ của khách hàng. Trong bước tiếp theo, các biến này sẽ được kiểm định sâu hơn và đưa vào mô hình hồi quy để phân tích mức độ tác động cụ thể.
# Tạo bảng tần số chéo (không dùng addmargins để tránh tổng tự động)
freq_table <- table(dldt$Gender, dldt$Attrition_Flag)
# Chuyển thành data frame và tính tổng theo hàng
freq_df <- as.data.frame.matrix(freq_table)
freq_df$Sum <- rowSums(freq_df)
# Thêm dòng tổng (chỉ 1 lần)
freq_df <- rbind(freq_df, Sum = colSums(freq_df))
# Thêm cột Giới tính
freq_df <- cbind(`Giới tính` = rownames(freq_df), freq_df)
rownames(freq_df) <- NULL
# Hiển thị bảng bằng my_kable, chỉ có 1 dòng Sum cuối đúng chuẩn
my_kable(freq_df,
caption_text = "Bảng tần số chéo giữa Giới tính và Trạng thái sử dụng thẻ",
col_names = c(" ", "Attrited Customer", "Existing Customer", "Sum"),
align = "lccc")
| Attrited Customer | Existing Customer | Sum | |
|---|---|---|---|
| F | 930 | 4428 | 5358 |
| M | 697 | 4072 | 4769 |
| Sum | 1627 | 8500 | 10127 |
Biểu đồ
ggplot(
dldt %>%
group_by(Gender, Attrition_Flag) %>%
summarise(count = n()) %>%
ungroup(),
aes(x = Gender, y = count, fill = Attrition_Flag)
) +
geom_col(position = position_dodge()) +
geom_text(aes(label = count), position = position_dodge(width = 0.9), vjust = -0.5) +
labs(
title = "Số lượng khách hàng theo giới tính và tình trạng sử dụng thẻ",
y = "Số lượng khách hàng",
x = "Giới tính",
fill = "Tình trạng sử dụng"
) +
theme_minimal()
## `summarise()` has grouped output by 'Gender'. You can override using the
## `.groups` argument.
Nhận xét
Khi xét theo giới tính, có thể thấy tình trạng sử dụng thẻ phân bố như sau:
Trong nhóm nữ giới, có 930 khách hàng đã ngừng sử dụng thẻ và 4428 khách hàng vẫn tiếp tục sử dụng.
Trong nhóm nam giới, có 697 khách hàng đã ngừng sử dụng và 4072 khách hàng vẫn tiếp tục sử dụng.
Nhìn chung, từ bảng số liệu có thể thấy tỷ lệ khách hàng ngừng sử dụng thẻ giữa nam và nữ có sự khác biệt nhất định. Cụ thể, tỷ lệ ngừng sử dụng trong nhóm nữ cao hơn nhóm nam, cho thấy giới tính có thể là một yếu tố ảnh hưởng đến quyết định tiếp tục sử dụng dịch vụ thẻ của khách hàng.
Giả thuyết H₀ (Giả thuyết không): Tỷ lệ ngừng sử dụng dịch vụ giữa nữ và nam là bằng nhau (p₁ = p₂).
Giả thuyết H₁ (Giả thuyết thay thế): Tỷ lệ ngừng sử dụng dịch vụ giữa nữ và nam là khác nhau (p₁ ≠ p₂).
Quy tắc ra quyết định:
Nếu p-value < 0.05 → Bác bỏ H₀.
Nếu p-value ≥ 0.05 → Không đủ cơ sở để bác bỏ H₀.
# Lấy số người ngừng sử dụng dịch vụ theo giới tính
GA <- table(dldt$Gender, dldt$Attrition_Flag)
n_female <- GA["F", "Attrited Customer"]
n_male <- GA["M", "Attrited Customer"]
# Tổng số người nữ và nam trong tập dữ liệu
total_female <- GA["F", "Attrited Customer"] + GA["F", "Existing Customer"]
total_male <- GA["M", "Attrited Customer"] + GA["M", "Existing Customer"]
# Kiểm định chênh lệch tỷ lệ
prop.test(
x = c(n_female, n_male),
n = c(total_female, total_male),
alternative = "two.sided",
conf.level = 0.95
)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(n_female, n_male) out of c(total_female, total_male)
## X-squared = 13.866, df = 1, p-value = 0.0001964
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.01296124 0.04187875
## sample estimates:
## prop 1 prop 2
## 0.1735722 0.1461522
Kết quả kiểm định tỷ lệ hai mẫu độc lập cho thấy giá trị p-value = 0.0001964 < 0.05, do đó có thể bác bỏ giả thuyết H₀ tại mức ý nghĩa 5%. Điều này cho thấy sự khác biệt về tỷ lệ ngừng sử dụng dịch vụ giữa nam và nữ là có ý nghĩa thống kê.
Cụ thể, tỷ lệ khách hàng nữ ngừng sử dụng dịch vụ là khoảng 17.36%, trong khi ở nam là khoảng 14.62%. Khoảng tin cậy 95% cho hiệu số tỷ lệ giữa hai nhóm nằm trong khoảng từ 1.30% đến 4.19%, không bao gồm giá trị 0, cho thấy sự khác biệt là có thật trên tổng thể.
Kết quả này gợi ý rằng giới tính có thể là một yếu tố ảnh hưởng đến hành vi ngừng sử dụng dịch vụ, do đó cần được xem xét trong các phân tích tiếp theo nhằm hiểu rõ hơn đặc điểm nhóm khách hàng có nguy cơ rời bỏ dịch vụ.
sub_mydata <- subset(dldt, Gender %in% c("F", "M") & Attrition_Flag %in% c("Attrited Customer", "Existing Customer"))
# Tạo bảng tần số chéo giữa giới tính và tình trạng thẻ
table(sub_mydata$Gender, sub_mydata$Attrition_Flag)
##
## Attrited Customer Existing Customer
## F 930 4428
## M 697 4072
library(epitools)
riskratio(table(sub_mydata$Gender, sub_mydata$Attrition_Flag), rev = "c")
## $data
##
## Existing Customer Attrited Customer Total
## F 4428 930 5358
## M 4072 697 4769
## Total 8500 1627 10127
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## F 1.0000000 NA NA
## M 0.8420254 0.7694698 0.9214226
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## F NA NA NA
## M 0.0001727462 0.0001824515 0.0001762977
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích cho thấy Risk Ratio (RR) = 0.8420, đồng nghĩa với việc nam giới có xác suất ngừng sử dụng dịch vụ thấp hơn khoảng 15.8% so với nữ giới. Vì khoảng tin cậy 95% của RR không bao gồm giá trị 1, sự khác biệt này có ý nghĩa thống kê. Điều này cho thấy giới tính có ảnh hưởng đến hành vi rời bỏ dịch vụ, trong đó nam giới ít có khả năng ngừng sử dụng dịch vụ hơn nữ giới.
oddsratio(sub_mydata$Gender, sub_mydata$Attrition_Flag)
## $data
## Outcome
## Predictor Attrited Customer Existing Customer Total
## F 930 4428 5358
## M 697 4072 4769
## Total 1627 8500 10127
##
## $measure
## odds ratio with 95% C.I.
## Predictor estimate lower upper
## F 1.000000 NA NA
## M 1.226906 1.102607 1.365788
##
## $p.value
## two-sided
## Predictor midp.exact fisher.exact chi.square
## F NA NA NA
## M 0.0001727462 0.0001824515 0.0001762977
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích cho thấy nữ giới có khả năng ngừng sử dụng dịch vụ cao hơn khoảng 22.7% so với nam giới, với odds ratio = 1.227. Đồng thời, khoảng tin cậy 95% của OR không bao gồm giá trị 1, điều này cho thấy sự khác biệt giữa hai nhóm giới tính là có ý nghĩa thống kê.
Nói cách khác, nữ giới có xu hướng ngừng sử dụng dịch vụ nhiều hơn nam giới trong tập dữ liệu khảo sát. Kết quả này củng cố giả định rằng giới tính là một yếu tố tiềm năng ảnh hưởng đến hành vi ngừng sử dụng dịch vụ, và cần được xem xét trong các phân tích sâu hơn về khả năng duy trì khách hàng.
library(jtools)
##
## Attaching package: 'jtools'
## The following object is masked from 'package:DescTools':
##
## %nin%
library(huxtable)
##
## Attaching package: 'huxtable'
## The following object is masked from 'package:kableExtra':
##
## add_footnote
## The following object is masked from 'package:ggplot2':
##
## theme_grey
## The following object is masked from 'package:dplyr':
##
## add_rownames
# Biến nhị phân
mydata$attrition_binary <- ifelse(mydata$Attrition_Flag == "Attrited Customer", 1, 0)
# Mã hóa giới tính: M = 0, F = 1
mydata$Gender <- factor(mydata$Gender, levels = c("M", "F"))
# Các mô hình
logit_model <- glm(attrition_binary ~ Gender, data = mydata, family = binomial(link = "logit"))
probit_model <- glm(attrition_binary ~ Gender, data = mydata, family = binomial(link = "probit"))
cloglog_model <- glm(attrition_binary ~ Gender, data = mydata, family = binomial(link = "cloglog"))
export_summs(
list("Logit" = logit_model,
"Probit" = probit_model,
"Cloglog" = cloglog_model),
scale = FALSE,
digits = 4,
stars = c(`*` = 0.05, `**` = 0.01, `***` = 0.001)
)
| Logit | Probit | Cloglog | |
|---|---|---|---|
| (Intercept) | -1.7651 *** | -1.0531 *** | -1.8451 *** |
| (0.0410) | (0.0223) | (0.0379) | |
| GenderF | 0.2046 *** | 0.1129 *** | 0.1878 *** |
| (0.0546) | (0.0301) | (0.0502) | |
| N | 10127 | 10127 | 10127 |
| AIC | 8917.0743 | 8917.0743 | 8917.0743 |
| BIC | 8931.5202 | 8931.5202 | 8931.5202 |
| Pseudo R2 | 0.0024 | 0.0024 | 0.0024 |
| *** p < 0.001; ** p < 0.01; * p < 0.05. | |||
Kết quả phân tích hồi quy nhị phân sử dụng ba mô hình Logit, Probit và Cloglog nhằm đánh giá ảnh hưởng của giới tính đến hành vi ngừng sử dụng dịch vụ cho thấy rằng biến Gender có ảnh hưởng thống kê đáng kể trong cả ba mô hình.
Với mô hình Logit, hệ số chặn (Intercept) là -1.7651, đại diện cho log-odds của việc ngừng sử dụng dịch vụ đối với nhóm nam giới (nhóm tham chiếu). Hệ số của biến GenderF là 0.2046 với p-value < 0.001, cho thấy giới tính nữ có tác động đáng kể đến xác suất ngừng sử dụng dịch vụ. Khi chuyển hệ số logit sang tỷ số odds (odds ratio), ta có:
\[ \exp(0.2046) \approx 1.227 \]
Nghĩa là khách hàng nữ có khả năng ngừng sử dụng dịch vụ cao hơn khoảng 22.7% so với khách hàng nam. Phương trình hồi quy từ mô hình Logit có thể biểu diễn như sau:
\[ \log \left( \frac{P(\text{Ngừng sử dụng})}{1 - P(\text{Ngừng sử dụng})} \right) = -1.7651 + 0.2046 \cdot \text{GenderF} \]
Với mô hình Probit, hệ số chặn ước lượng được là -1.05308, trong khi hệ số của biến GenderF là 0.11294 với p-value < 0.001. Mặc dù hệ số trong mô hình Probit không thể trực tiếp chuyển thành odds ratio như trong Logit, dấu dương của hệ số vẫn cho thấy chiều hướng tăng xác suất ngừng sử dụng dịch vụ khi khách hàng là nữ giới. Phương trình hồi quy có dạng:
\[ P(\text{Ngừng sử dụng}) = \Phi(-1.05308 + 0.11294 \cdot \text{GenderF}) \]
Trong đó, \(\Phi(.)\) là hàm phân phối tích lũy chuẩn hóa. Kết quả này tiếp tục khẳng định rằng nữ giới có xác suất ngừng sử dụng dịch vụ cao hơn so với nam giới.
Tương tự, trong mô hình Cloglog, hệ số chặn là -1.84515 và hệ số của GenderF là 0.18779, với p-value < 0.001. Hệ số dương trong mô hình này cho thấy giới tính nữ làm tăng xác suất ngừng sử dụng dịch vụ. Công thức hồi quy của mô hình Cloglog được thể hiện như sau:
\[ \log[-\log(1 - P(\text{Ngừng sử dụng}))] = -1.84515 + 0.18779 \cdot \text{GenderF} \]
Tương đương với:
\[ P(\text{Ngừng sử dụng}) = 1 - \exp\left[-\exp(-1.84515 + 0.18779 \cdot \text{GenderF})\right] \]
Cả ba mô hình đều cho thấy hệ số của biến GenderF có ý nghĩa thống kê cao, đồng thời có cùng chiều tác động dương đến xác suất ngừng sử dụng dịch vụ. Điều này cho thấy rằng giới tính là một yếu tố có ảnh hưởng đáng kể đến hành vi ngừng sử dụng của khách hàng, trong đó nữ giới có xu hướng rời bỏ dịch vụ nhiều hơn nam giới.
model_eval <- data.frame(
Mô_hình = c("Logit", "Probit", "Cloglog"),
AIC = c(AIC(logit_model), AIC(probit_model), AIC(cloglog_model)),
BIC = c(BIC(logit_model), BIC(probit_model), BIC(cloglog_model)),
Brier_Score = c(BrierScore(logit_model), BrierScore(probit_model), BrierScore(cloglog_model))
)
# Hiển thị bảng bằng kable
my_kable(model_eval,
caption_text = "So sánh các chỉ số đánh giá mô hình",
col_names = c("Mô hình", "AIC", "BIC", "Brier Score"),
align = rep("c", ncol(model_eval)))
| Mô hình | AIC | BIC | Brier Score |
|---|---|---|---|
| Logit | 8917.07 | 8931.52 | 0.13 |
| Probit | 8917.07 | 8931.52 | 0.13 |
| Cloglog | 8917.07 | 8931.52 | 0.13 |
Dựa trên kết quả bảng so sánh, cả ba mô hình nhị phân gồm Logit, Probit và Cloglog đều cho ra giá trị AIC và BIC bằng nhau (AIC = 8917.074; BIC = 8931.520), đồng thời cùng có Brier Score là 0.1347. Điều này cho thấy mức độ phù hợp và khả năng dự báo của ba mô hình là tương đương nhau trong trường hợp chỉ sử dụng biến giới tính làm biến độc lập. Do không có sự khác biệt đáng kể về hiệu năng, lựa chọn mô hình nào trong ba mô hình này có thể phụ thuộc vào mục tiêu diễn giải hoặc định hướng mở rộng mô hình ở các bước tiếp theo.
Ma trận nhầm lẫn
library(caret)
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following objects are masked from 'package:DescTools':
##
## MAE, RMSE
# Tạo biến nhãn thực tế
actual <- factor(ifelse(mydata$attrition_binary == 1, "Yes", "No"), levels = c("No", "Yes"))
# Ma trận nhầm lẫn cho mô hình Logit
pred_logit <- factor(ifelse(predict(logit_model, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_logit <- confusionMatrix(pred_logit, actual, positive = "Yes")
cm_logit
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8500 1627
## Yes 0 0
##
## Accuracy : 0.8393
## 95% CI : (0.832, 0.8464)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.5066
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.8393
## Prevalence : 0.1607
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Probit
pred_probit <- factor(ifelse(predict(probit_model, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_probit <- confusionMatrix(pred_probit, actual, positive = "Yes")
cm_probit
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8500 1627
## Yes 0 0
##
## Accuracy : 0.8393
## 95% CI : (0.832, 0.8464)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.5066
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.8393
## Prevalence : 0.1607
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Cloglog
pred_cloglog <- factor(ifelse(predict(cloglog_model, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_cloglog <- confusionMatrix(pred_cloglog, actual, positive = "Yes")
cm_cloglog
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8500 1627
## Yes 0 0
##
## Accuracy : 0.8393
## 95% CI : (0.832, 0.8464)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.5066
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.8393
## Prevalence : 0.1607
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : Yes
##
Dựa trên kết quả ma trận nhầm lẫn của ba mô hình hồi quy nhị phân (Logit, Probit và Cloglog), có thể thấy rằng cả ba mô hình đều cho kết quả hoàn toàn giống nhau về mặt dự đoán:
Tỷ lệ chính xác (Accuracy) của cả ba mô hình đều đạt 83.93%, tức là khoảng 84% các quan sát được dự đoán đúng so với thực tế. Tuy nhiên, điều này chủ yếu đến từ việc mô hình dự đoán toàn bộ khách hàng là “còn sử dụng”, mà không phát hiện được khách hàng nào thuộc nhóm “ngừng sử dụng”.
Độ nhạy (Sensitivity) của cả ba mô hình đều bằng 0.0000, phản ánh việc không có trường hợp nào ngừng sử dụng được dự đoán đúng. Ngược lại, độ đặc hiệu (Specificity) đạt 100%, tức là mô hình luôn dự đoán đúng khách hàng còn sử dụng.
Giá trị Kappa bằng 0, cho thấy không có sự đồng thuận nào giữa mô hình và thực tế trong việc phát hiện nhóm khách hàng ngừng sử dụng.
P-value của kiểm định McNemar đều nhỏ hơn 0.05 (cụ thể là < 2e-16), cho thấy có sự mất cân đối đáng kể giữa các lỗi loại I và loại II, và đây là dấu hiệu cho thấy mô hình đang nghiêng hẳn về một phía – trong trường hợp này là phía khách hàng “còn sử dụng”.
Tổng kết:
Mặc dù độ chính xác tổng thể của ba mô hình đều khá cao (~84%), nhưng hiệu quả phân loại không thực sự tốt do không mô hình nào dự đoán đúng khách hàng ngừng sử dụng. Điều này cho thấy biến độc lập Gender khi đứng một mình không đủ mạnh để phân biệt nhóm khách hàng có khả năng rời bỏ dịch vụ, và do đó cần bổ sung thêm các biến khác vào mô hình để cải thiện hiệu năng dự báo.
# Tạo bảng tần số chéo (không dùng addmargins để tránh tổng tự động)
freq_table1 <- table(dldt$Income_Category, dldt$Attrition_Flag)
# Chuyển thành data frame và tính tổng theo hàng
freq_df1 <- as.data.frame.matrix(freq_table1)
freq_df1$Sum <- rowSums(freq_df1)
# Thêm dòng tổng (chỉ 1 lần)
freq_df1 <- rbind(freq_df1, Sum = colSums(freq_df1))
# Thêm cột Nhóm thu nhập
freq_df1 <- cbind(`Nhóm thu nhập` = rownames(freq_df1), freq_df1)
rownames(freq_df1) <- NULL
# Hiển thị bảng bằng my_kable, chỉ có 1 dòng Sum cuối đúng chuẩn
my_kable(freq_df1,
caption_text = "Bảng tần số chéo giữa Nhóm thu nhập và Trạng thái sử dụng thẻ",
col_names = c(" ", "Attrited Customer", "Existing Customer", "Sum"),
align = "lccc")
| Attrited Customer | Existing Customer | Sum | |
|---|---|---|---|
| $120K + | 126 | 601 | 727 |
| $40K - $60K | 271 | 1519 | 1790 |
| $60K - $80K | 189 | 1213 | 1402 |
| $80K - $120K | 242 | 1293 | 1535 |
| Less than $40K | 612 | 2949 | 3561 |
| Unknown | 187 | 925 | 1112 |
| Sum | 1627 | 8500 | 10127 |
Biểu đồ
ggplot(
dldt %>%
group_by(Income_Category, Attrition_Flag) %>%
summarise(count = n()) %>%
ungroup(),
aes(x = Income_Category, y = count, fill = Attrition_Flag)
) +
geom_col(position = position_dodge()) +
geom_text(aes(label = count), position = position_dodge(width = 0.9), vjust = -0.5) +
labs(
title = "Số lượng khách hàng theo nhóm thu nhập và tình trạng sử dụng thẻ",
y = "Số lượng",
x = "Nhóm thu nhập",
fill = "Tình trạng sử dụng thẻ"
) +
theme_minimal()
## `summarise()` has grouped output by 'Income_Category'. You can override using
## the `.groups` argument.
Nhận xét
Khi xét theo mức thu nhập, có thể thấy tình trạng sử dụng thẻ phân bố như sau:
Trong nhóm khách hàng có thu nhập dưới $40K, có 612 người đã ngừng sử dụng thẻ và 2.949 người vẫn tiếp tục sử dụng. Đây cũng là nhóm chiếm tỷ trọng cao nhất trong toàn bộ tập dữ liệu.
Nhóm thu nhập từ $40K - $60K có 271 khách hàng ngừng sử dụng và 1.519 khách hàng tiếp tục sử dụng thẻ, đứng thứ hai về quy mô.
Các nhóm thu nhập cao hơn như $60K - $80K, $80K - $120K, và $120K+ đều ghi nhận số lượng khách hàng còn sử dụng thẻ cao hơn số lượng đã ngừng sử dụng, tuy nhiên quy mô nhỏ hơn đáng kể so với hai nhóm thu nhập thấp hơn.
Riêng nhóm “Unknown” – tức là không xác định được mức thu nhập – cũng cho thấy sự phân bổ tương tự, với 187 khách hàng ngừng sử dụng thẻ và 925 khách hàng vẫn tiếp tục sử dụng.
Nhìn chung, có thể thấy rằng tất cả các nhóm thu nhập đều có số lượng khách hàng tiếp tục sử dụng thẻ nhiều hơn so với số đã ngừng sử dụng. Đặc biệt, nhóm thu nhập dưới $40K là nhóm có quy mô lớn nhất và cũng chiếm tỷ lệ cao nhất trong cả hai trạng thái. Những quan sát này cho thấy mức thu nhập có thể là một yếu tố liên quan đến quyết định tiếp tục sử dụng dịch vụ thẻ của khách hàng. Tuy nhiên, để đưa ra kết luận chính xác hơn về mối liên hệ này, cần thực hiện các kiểm định thống kê phù hợp ở các phần phân tích tiếp theo.
Giả thuyết H₀ (Giả thuyết không): Tỷ lệ khách hàng thu nhập cao (≥ 120K) lớn hơn hoặc bằng tỷ lệ khách hàng thu nhập thấp (< 40K) tiếp tục sử dụng thẻ (p₁ ≥ p₂).
Giả thuyết H₁ (Giả thuyết thay thế): Tỷ lệ khách hàng thu nhập cao (≥ 120K) nhỏ hơn tỷ lệ khách hàng thu nhập thấp (< 40K) tiếp tục sử dụng thẻ (p₁ < p₂).
Quy tắc quyết định:
# Lấy số khách hàng còn sử dụng thẻ theo nhóm thu nhập
IN <- table(dldt$Income_Category, dldt$Attrition_Flag)
n_high_income <- IN["$120K +", "Existing Customer"]
n_low_income <- IN["Less than $40K", "Existing Customer"]
# Tổng số khách hàng trong mỗi nhóm (còn + ngừng sử dụng thẻ)
total_high_income <- IN["$120K +", "Existing Customer"] + IN["$120K +", "Attrited Customer"]
total_low_income <- IN["Less than $40K", "Existing Customer"] + IN["Less than $40K", "Attrited Customer"]
# Kiểm định chênh lệch tỷ lệ còn sử dụng thẻ giữa hai nhóm thu nhập
prop.test(
x = c(n_high_income, n_low_income),
n = c(total_high_income, total_low_income),
alternative = "less", # Giả thuyết: tỷ lệ high income < low income
conf.level = 0.95
)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(n_high_income, n_low_income) out of c(total_high_income, total_low_income)
## X-squared = 0.0016551, df = 1, p-value = 0.4838
## alternative hypothesis: less
## 95 percent confidence interval:
## -1.00000000 0.02469975
## sample estimates:
## prop 1 prop 2
## 0.8266850 0.8281382
Kết quả kiểm định tỷ lệ hai mẫu độc lập cho thấy giá trị p-value = 0.4838 > 0.05, do đó chưa có đủ bằng chứng để bác bỏ giả thuyết H₀ tại mức ý nghĩa 5%. Nói cách khác, chưa thể kết luận rằng có sự khác biệt có ý nghĩa thống kê về tỷ lệ tiếp tục sử dụng thẻ giữa nhóm khách hàng thu nhập cao và nhóm thu nhập thấp.
Cụ thể, tỷ lệ khách hàng tiếp tục sử dụng thẻ trong nhóm thu nhập thấp (<$40K) là khoảng 82.81%, trong khi ở nhóm thu nhập cao ($120K+) là khoảng 82.67%. Mặc dù nhóm thu nhập thấp có tỷ lệ duy trì sử dụng thẻ cao hơn một chút, sự chênh lệch này chỉ ở mức dưới 0.2% và không mang ý nghĩa thống kê theo kiểm định tỷ lệ một phía với giả thuyết thay thế là nhóm thu nhập cao có tỷ lệ tiếp tục sử dụng thấp hơn.
Kết quả này cho thấy chưa có đủ cơ sở để khẳng định mức thu nhập là yếu tố ảnh hưởng rõ rệt đến hành vi tiếp tục sử dụng dịch vụ thẻ. Do đó, cần kết hợp thêm các yếu tố khác trong phân tích đa biến để có cái nhìn đầy đủ và chính xác hơn.
Để làm rõ hơn mối liên hệ giữa mức thu nhập và hành vi ngừng sử dụng dịch vụ, phân tích tỷ số rủi ro (Relative Risk - RR) được thực hiện giữa hai nhóm thu nhập đại diện: “Less than $40K” (nhóm có mức thu nhập thấp nhất) và “$120K+” (nhóm có mức thu nhập cao nhất). Việc lựa chọn hai nhóm này nhằm tạo ra sự đối lập rõ ràng về điều kiện kinh tế, qua đó đánh giá liệu khách hàng có thu nhập cao có thực sự ít có xu hướng rời bỏ dịch vụ hơn so với nhóm thu nhập thấp. Phân tích RR trong trường hợp này giúp lượng hóa mức chênh lệch rủi ro ngừng sử dụng dịch vụ giữa hai nhóm, góp phần cung cấp bằng chứng thực nghiệm cho việc xác định các nhóm khách hàng cần được ưu tiên trong chiến lược giữ chân.
sub_mydata2 <- subset(dldt,
Income_Category %in% c("$120K +", "Less than $40K") &
Attrition_Flag %in% c("Attrited Customer", "Existing Customer"))
table(sub_mydata2$Income_Category, sub_mydata2$Attrition_Flag)
##
## Attrited Customer Existing Customer
## $120K + 126 601
## Less than $40K 612 2949
library(epitools)
riskratio(table(sub_mydata2$Income_Category, sub_mydata2$Attrition_Flag), rev = "c")
## $data
##
## Existing Customer Attrited Customer Total
## $120K + 601 126 727
## Less than $40K 2949 612 3561
## Total 3550 738 4288
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## $120K + 1.0000000 NA NA
## Less than $40K 0.9916155 0.8329503 1.180504
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## $120K + NA NA NA
## Less than $40K 0.9186529 0.9142192 0.9246396
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích cho thấy Risk Ratio (RR) = 0.9916, nghĩa là tỷ lệ khách hàng thu nhập thấp (<$40K) ngừng sử dụng dịch vụ chỉ bằng khoảng 99.16% so với nhóm thu nhập cao ($120K+). Điều này cho thấy mức độ chênh lệch về hành vi ngừng sử dụng dịch vụ giữa hai nhóm thu nhập là rất nhỏ, gần như không đáng kể trên thực tế. Hơn nữa, khoảng tin cậy 95% của RR là [0.83295 ; 1.1805], trong đó có chứa giá trị 1, cho thấy sự khác biệt này không có ý nghĩa thống kê ở mức ý nghĩa 5%.
Như vậy, kết quả phân tích không cung cấp đủ bằng chứng để khẳng định rằng mức thu nhập là yếu tố ảnh hưởng đến hành vi ngừng sử dụng thẻ trong trường hợp so sánh hai nhóm thu nhập thấp nhất và cao nhất. Điều này gợi ý rằng, ngoài thu nhập, các yếu tố khác như độ tuổi, mức độ tương tác với ngân hàng, hoặc trải nghiệm dịch vụ có thể đóng vai trò quan trọng hơn trong việc quyết định duy trì sử dụng dịch vụ của khách hàng.
oddsratio(sub_mydata2$Income_Category, sub_mydata2$Attrition_Flag, rev = "c")
## $data
## Outcome
## Predictor Existing Customer Attrited Customer Total
## $120K + 601 126 727
## Less than $40K 2949 612 3561
## Total 3550 738 4288
##
## $measure
## odds ratio with 95% C.I.
## Predictor estimate lower upper
## $120K + 1.0000000 NA NA
## Less than $40K 0.9890646 0.8033919 1.225517
##
## $p.value
## two-sided
## Predictor midp.exact fisher.exact chi.square
## $120K + NA NA NA
## Less than $40K 0.9186529 0.9142192 0.9246396
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích cho thấy khách hàng thuộc nhóm thu nhập thấp (dưới $40K) có khả năng ngừng sử dụng dịch vụ thấp hơn một chút so với nhóm thu nhập cao ($120K+), với odds ratio = 0.9891. Tuy nhiên, mức chênh lệch là rất nhỏ (chỉ khoảng 1.09%) và khoảng tin cậy 95% của OR có bao gồm giá trị 1, cho thấy sự khác biệt giữa hai nhóm thu nhập không có ý nghĩa thống kê.
Nói cách khác, trong tập dữ liệu khảo sát, không có đủ bằng chứng để kết luận rằng mức thu nhập là yếu tố ảnh hưởng rõ rệt đến hành vi ngừng sử dụng dịch vụ. Điều này cho thấy thu nhập có thể không phải là yếu tố quan trọng trong việc phân biệt khả năng rời bỏ dịch vụ của khách hàng, và cần được kết hợp với các biến khác trong phân tích mở rộng để có cái nhìn toàn diện hơn.
# Mã hóa biến Income_Category (chuyển thành factor với cấp bậc cụ thể nếu cần)
mydata$Income_Category <- factor(mydata$Income_Category,
levels = c("Less than $40K", "$40K - $60K", "$60K - $80K",
"$80K - $120K", "$120K +", "Unknown"))
# Các mô hình hồi quy nhị phân sử dụng Income_Category
logit_model1 <- glm(attrition_binary ~ Income_Category, data = mydata, family = binomial(link = "logit"))
probit_model1 <- glm(attrition_binary ~ Income_Category, data = mydata, family = binomial(link = "probit"))
cloglog_model1 <- glm(attrition_binary ~ Income_Category, data = mydata, family = binomial(link = "cloglog"))
# Xuất bảng so sánh kết quả
export_summs(
list("Logit" = logit_model1,
"Probit" = probit_model1,
"Cloglog" = cloglog_model1),
scale = FALSE,
digits = 4,
stars = c(`*` = 0.05, `**` = 0.01, `***` = 0.001)
)
| Logit | Probit | Cloglog | |
|---|---|---|---|
| (Intercept) | -1.5725 *** | -0.9468 *** | -1.6683 *** |
| (0.0444) | (0.0248) | (0.0405) | |
| Income_Category$40K - $60K | -0.1512 | -0.0836 | -0.1386 |
| (0.0795) | (0.0438) | (0.0731) | |
| Income_Category$60K - $80K | -0.2866 ** | -0.1571 ** | -0.2641 ** |
| (0.0899) | (0.0488) | (0.0833) | |
| Income_Category$80K - $120K | -0.1033 | -0.0573 | -0.0945 |
| (0.0829) | (0.0459) | (0.0760) | |
| Income_Category$120K + | 0.0102 | 0.0057 | 0.0093 |
| (0.1076) | (0.0602) | (0.0980) | |
| Income_CategoryUnknown | -0.0262 | -0.0146 | -0.0239 |
| (0.0917) | (0.0511) | (0.0837) | |
| N | 10127 | 10127 | 10127 |
| AIC | 8926.0979 | 8926.0979 | 8926.0979 |
| BIC | 8969.4356 | 8969.4356 | 8969.4356 |
| Pseudo R2 | 0.0022 | 0.0022 | 0.0022 |
| *** p < 0.001; ** p < 0.01; * p < 0.05. | |||
Kết quả phân tích hồi quy nhị phân với ba mô hình Logit, Probit và Cloglog nhằm đánh giá ảnh hưởng của mức thu nhập đến hành vi ngừng sử dụng dịch vụ cho thấy rằng chỉ có nhóm thu nhập từ $60K đến $80K có ảnh hưởng thống kê rõ rệt đến xác suất rời bỏ dịch vụ.
Trong mô hình Logit, hệ số của nhóm thu nhập “$60K - $80K” là -0.2866 (p < 0.01), cho thấy khách hàng thuộc nhóm này có xác suất ngừng sử dụng dịch vụ thấp hơn đáng kể so với nhóm thu nhập thấp nhất (“Less than $40K”). Các nhóm còn lại như “$40K - $60K”, “$80K - $120K”, “$120K+” và “Unknown” đều có hệ số không có ý nghĩa thống kê (p > 0.05), hàm ý rằng không có sự khác biệt rõ rệt về hành vi ngừng sử dụng giữa các nhóm này và nhóm tham chiếu.
Tương tự, mô hình Probit và Cloglog cũng phản ánh xu hướng tương đồng. Cụ thể, nhóm “$60K - $80K” có hệ số âm và có ý nghĩa thống kê trong cả hai mô hình, trong khi các nhóm còn lại không đạt mức ý nghĩa 5%. Mặc dù các hệ số trong mô hình Probit và Cloglog nhỏ hơn do sự khác biệt về hàm liên kết, kết luận tổng thể vẫn giữ nguyên: thu nhập trung bình có liên quan đến khả năng duy trì sử dụng dịch vụ tốt hơn so với nhóm thu nhập thấp nhất.
Nhìn chung, ba mô hình đều chỉ ra rằng mức thu nhập có thể đóng vai trò trong việc dự đoán hành vi ngừng sử dụng dịch vụ. Tuy nhiên, ảnh hưởng này không xuất hiện đồng đều ở tất cả các nhóm thu nhập. Đáng chú ý là nhóm thu nhập trung bình “$60K - $80K” có xu hướng gắn bó với dịch vụ hơn, trong khi nhóm thu nhập cao hơn hoặc không xác định không thể hiện sự khác biệt đáng kể trong mẫu dữ liệu này.
model_eval1 <- data.frame(
Mô_hình = c("Logit", "Probit", "Cloglog"),
AIC = c(AIC(logit_model1), AIC(probit_model1), AIC(cloglog_model1)),
BIC = c(BIC(logit_model1), BIC(probit_model1), BIC(cloglog_model1)),
Brier_Score = c(BrierScore(logit_model1), BrierScore(probit_model1), BrierScore(cloglog_model1))
)
my_kable(model_eval1,
caption_text = "So sánh các chỉ số đánh giá mô hình",
col_names = c("Mô hình", "AIC", "BIC", "Brier Score"),
align = rep("c", ncol(model_eval1)))
| Mô hình | AIC | BIC | Brier Score |
|---|---|---|---|
| Logit | 8926.1 | 8969.44 | 0.13 |
| Probit | 8926.1 | 8969.44 | 0.13 |
| Cloglog | 8926.1 | 8969.44 | 0.13 |
Dựa trên bảng kết quả so sánh, cả ba mô hình hồi quy nhị phân gồm Logit, Probit và Cloglog đều cho ra giá trị AIC và BIC bằng nhau (AIC = 8926.098; BIC = 8969.436), đồng thời cùng có Brier Score là 0.1347. Điều này cho thấy mức độ phù hợp của mô hình với dữ liệu cũng như khả năng dự báo xác suất ngừng sử dụng dịch vụ là tương đương nhau giữa ba mô hình.
Sự đồng nhất này phản ánh rằng khi chỉ sử dụng biến độc lập là mức thu nhập, không có mô hình nào vượt trội hơn rõ rệt về mặt hiệu suất. Do đó, việc lựa chọn mô hình cụ thể nên dựa trên mục tiêu phân tích: nếu quan tâm đến khả năng giải thích, mô hình Logit thường được ưa chuộng hơn; còn nếu tập trung vào đặc điểm phân phối xác suất hoặc định hướng mở rộng mô hình, Probit hoặc Cloglog có thể là những lựa chọn phù hợp hơn.
Ma trận nhầm lẫn
library(caret)
# Tạo biến nhãn thực tế
actual <- factor(ifelse(mydata$attrition_binary == 1, "Yes", "No"), levels = c("No", "Yes"))
# Ma trận nhầm lẫn cho mô hình Logit
pred_logit1 <- factor(ifelse(predict(logit_model1, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_logit1 <- confusionMatrix(pred_logit1, actual, positive = "Yes")
cm_logit1
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8500 1627
## Yes 0 0
##
## Accuracy : 0.8393
## 95% CI : (0.832, 0.8464)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.5066
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.8393
## Prevalence : 0.1607
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Probit
pred_probit1 <- factor(ifelse(predict(probit_model1, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_probit1 <- confusionMatrix(pred_probit1, actual, positive = "Yes")
cm_probit1
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8500 1627
## Yes 0 0
##
## Accuracy : 0.8393
## 95% CI : (0.832, 0.8464)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.5066
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.8393
## Prevalence : 0.1607
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Cloglog
pred_cloglog1 <- factor(ifelse(predict(cloglog_model1, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_cloglog1 <- confusionMatrix(pred_cloglog1, actual, positive = "Yes")
cm_cloglog1
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8500 1627
## Yes 0 0
##
## Accuracy : 0.8393
## 95% CI : (0.832, 0.8464)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.5066
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.8393
## Prevalence : 0.1607
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : Yes
##
Dựa trên kết quả ma trận nhầm lẫn của ba mô hình hồi quy nhị phân (Logit, Probit và Cloglog), có thể thấy rằng cả ba mô hình đều cho kết quả phân loại giống hệt nhau:
Tỷ lệ chính xác (Accuracy) đạt 83.93%, nghĩa là khoảng 84% số quan sát được dự đoán đúng. Tuy nhiên, kết quả này chủ yếu đến từ việc mô hình luôn dự đoán khách hàng thuộc nhóm “còn sử dụng”, và không dự đoán được trường hợp nào đã ngừng sử dụng.
Độ nhạy (Sensitivity) bằng 0.0000, phản ánh rằng mô hình hoàn toàn không phát hiện được khách hàng nào ngừng sử dụng dịch vụ. Ngược lại, độ đặc hiệu (Specificity) đạt 100%, nghĩa là tất cả khách hàng còn sử dụng đều được mô hình dự đoán đúng.
Chỉ số Kappa = 0, cho thấy không có sự đồng thuận nào giữa dự đoán của mô hình và thực tế đối với nhóm ngừng sử dụng. Đây là dấu hiệu mô hình không có khả năng phân biệt giữa hai nhóm khách hàng.
Kiểm định McNemar cho kết quả p-value < 2e-16, chỉ ra rằng có sự mất cân đối nghiêm trọng trong sai số dự đoán, với mô hình thiên hoàn toàn về một phía – trong trường hợp này là nhóm khách hàng còn sử dụng.
Tổng kết
Mặc dù có độ chính xác tổng thể cao (~84%), cả ba mô hình đều không mang lại hiệu quả phân loại thực sự do không dự đoán được khách hàng nào thuộc nhóm ngừng sử dụng. Kết quả này cho thấy việc sử dụng một biến độc lập duy nhất là chưa đủ, và cần kết hợp thêm các biến khác để nâng cao khả năng phát hiện sớm nhóm khách hàng có nguy cơ rời bỏ dịch vụ.
# Histogram số tháng không hoạt động, phân theo trạng thái khách hàng
ggplot(mydata, aes(x = Months_Inactive_12_mon, fill = Attrition_Flag)) +
geom_histogram(position = "dodge", binwidth = 1, color = "black") +
labs(title = "Phân bố số tháng không hoạt động theo trạng thái khách hàng",
x = "Số tháng không hoạt động (12 tháng gần nhất)",
y = "Số lượng khách hàng",
fill = "Tình trạng") +
theme_minimal()
Có thể thấy, biểu đồ phân bố số tháng không hoạt động trong 12 tháng gần nhất đã thể hiện xu hướng khác biệt tương đối giữa hai nhóm khách hàng theo trạng thái sử dụng dịch vụ. Cụ thể, cả hai nhóm – khách hàng còn sử dụng và khách hàng đã ngừng sử dụng – đều tập trung chủ yếu ở mức 2 đến 3 tháng không hoạt động, cho thấy đây là khoảng thời gian gián đoạn phổ biến nhất.
Tuy nhiên, điểm khác biệt nổi bật nằm ở phần đuôi của phân phối. Mặc dù tổng thể số lượng khách hàng còn sử dụng vẫn cao hơn, nhưng từ mức 4 tháng trở lên, biểu đồ cho thấy khoảng cách giữa hai nhóm đã thu hẹp đáng kể. Sự gia tăng tương đối của nhóm đã ngừng sử dụng ở các khoảng thời gian không hoạt động dài hơn cho thấy xu hướng rằng khách hàng càng ít tương tác trong thời gian gần đây thì khả năng rời bỏ dịch vụ càng cao. Dù không phải khách hàng nào không hoạt động trong 4–6 tháng đều sẽ ngừng sử dụng dịch vụ, nhưng tỷ lệ này là đủ để ngân hàng cần theo dõi sát sao hơn. Việc xác định và tiếp cận nhóm khách hàng có thời gian không hoạt động kéo dài sẽ giúp ngân hàng chủ động triển khai các chiến lược giữ chân phù hợp, như gửi nhắc nhở, khuyến mãi, hoặc hỗ trợ cá nhân hóa.
# Các mô hình hồi quy nhị phân sử dụng biến Months_Inactive_12_mon
logit_model2 <- glm(attrition_binary ~ Months_Inactive_12_mon, data = mydata, family = binomial(link = "logit"))
probit_model2 <- glm(attrition_binary ~ Months_Inactive_12_mon, data = mydata, family = binomial(link = "probit"))
cloglog_model2 <- glm(attrition_binary ~ Months_Inactive_12_mon, data = mydata, family = binomial(link = "cloglog"))
# Xuất bảng so sánh kết quả
export_summs(
list("Logit" = logit_model2,
"Probit" = probit_model2,
"Cloglog" = cloglog_model2),
scale = FALSE,
digits = 4,
stars = c(`*` = 0.05, `**` = 0.01, `***` = 0.001)
)
| Logit | Probit | Cloglog | |
|---|---|---|---|
| (Intercept) | -2.6159 *** | -1.5544 *** | -2.5627 *** |
| (0.0726) | (0.0398) | (0.0646) | |
| Months_Inactive_12_mon | 0.3891 *** | 0.2288 *** | 0.3294 *** |
| (0.0259) | (0.0147) | (0.0223) | |
| N | 10127 | 10127 | 10127 |
| AIC | 8705.6432 | 8693.7763 | 8716.4768 |
| BIC | 8720.0891 | 8708.2222 | 8730.9227 |
| Pseudo R2 | 0.0376 | 0.0396 | 0.0358 |
| *** p < 0.001; ** p < 0.01; * p < 0.05. | |||
Kết quả phân tích hồi quy nhị phân với ba mô hình Logit, Probit và Cloglog nhằm đánh giá ảnh hưởng của số tháng không hoạt động trong 12 tháng gần nhất đến hành vi ngừng sử dụng dịch vụ cho thấy biến này có ý nghĩa thống kê rõ rệt trong cả ba mô hình (p < 0.001).
Cụ thể, hệ số của biến Months_Inactive_12_mon đều mang giá trị dương, cho thấy số tháng không hoạt động càng cao thì xác suất khách hàng ngừng sử dụng dịch vụ càng tăng. Trong mô hình Logit, hệ số là 0.3891, nghĩa là mỗi tháng không hoạt động gia tăng sẽ làm tăng log-odds ngừng sử dụng dịch vụ. Xu hướng này được củng cố bởi hai mô hình còn lại: Probit (hệ số = 0.2288) và Cloglog (hệ số = 0.3294), mặc dù độ lớn hệ số khác nhau do sự khác biệt về hàm liên kết.
Về mức độ phù hợp mô hình, ba mô hình có giá trị AIC và BIC khá tương đồng, trong đó mô hình Probit có AIC và BIC nhỏ nhất, gợi ý khả năng phù hợp tốt hơn một chút. Tuy nhiên, sự khác biệt này không đáng kể.
Tóm lại, số tháng khách hàng không tương tác với ngân hàng trong năm gần nhất là một biến dự báo mạnh cho khả năng ngừng sử dụng dịch vụ. Đây là dấu hiệu cảnh báo quan trọng cho ngân hàng trong việc phát hiện sớm nguy cơ rời bỏ và triển khai các biện pháp giữ chân phù hợp.
# Bảng so sánh các chỉ số đánh giá mô hình
model_eval2 <- data.frame(
Mô_hình = c("Logit", "Probit", "Cloglog"),
AIC = c(AIC(logit_model2), AIC(probit_model2), AIC(cloglog_model2)),
BIC = c(BIC(logit_model2), BIC(probit_model2), BIC(cloglog_model2)),
Brier_Score = c(BrierScore(logit_model2), BrierScore(probit_model2), BrierScore(cloglog_model2))
)
# Hiển thị bảng bằng kable
my_kable(model_eval2,
caption_text = "So sánh các chỉ số đánh giá mô hình",
col_names = c("Mô hình", "AIC", "BIC", "Brier Score"),
align = rep("c", ncol(model_eval2)))
| Mô hình | AIC | BIC | Brier Score |
|---|---|---|---|
| Logit | 8705.64 | 8720.09 | 0.13 |
| Probit | 8693.78 | 8708.22 | 0.13 |
| Cloglog | 8716.48 | 8730.92 | 0.13 |
Dựa trên bảng kết quả so sánh, cả ba mô hình hồi quy nhị phân gồm Logit, Probit và Cloglog đều cho thấy hiệu suất dự báo tương đương nhau, thể hiện qua giá trị Brier Score khá sát nhau (dao động quanh 0.1325). Tuy nhiên, mô hình Probit có mức AIC và BIC thấp nhất (AIC = 8693.776; BIC = 8708.222), cho thấy đây là mô hình phù hợp nhất về mặt thông tin trong ba mô hình.
Mô hình Logit và Cloglog tuy có chỉ số đánh giá không kém quá xa, nhưng vẫn cao hơn một chút so với Probit, đặc biệt là Cloglog có AIC và BIC cao nhất. Điều này gợi ý rằng mô hình Probit có khả năng cân bằng tốt nhất giữa độ phù hợp và độ phức tạp mô hình khi chỉ sử dụng biến Months_Inactive_12_mon.
Tóm lại, trong trường hợp này, Probit là lựa chọn hợp lý nếu ưu tiên tiêu chí đánh giá mô hình bằng AIC, BIC và độ chính xác dự báo xác suất. Tuy vậy, sự chênh lệch là không quá lớn, nên việc lựa chọn mô hình cũng có thể cân nhắc thêm yếu tố dễ diễn giải (Logit) hoặc phù hợp phân phối (Cloglog) tùy theo mục tiêu phân tích tiếp theo.
Ma trận nhầm lẫn
# Tạo biến nhãn thực tế
actual <- factor(ifelse(mydata$attrition_binary == 1, "Yes", "No"), levels = c("No", "Yes"))
# Ma trận nhầm lẫn cho mô hình Logit
pred_logit2 <- factor(ifelse(predict(logit_model2, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_logit2 <- confusionMatrix(pred_logit2, actual, positive = "Yes")
cm_logit2
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8500 1627
## Yes 0 0
##
## Accuracy : 0.8393
## 95% CI : (0.832, 0.8464)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.5066
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.8393
## Prevalence : 0.1607
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Probit
pred_probit2 <- factor(ifelse(predict(probit_model2, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_probit2 <- confusionMatrix(pred_probit2, actual, positive = "Yes")
cm_probit2
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8500 1627
## Yes 0 0
##
## Accuracy : 0.8393
## 95% CI : (0.832, 0.8464)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.5066
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.8393
## Prevalence : 0.1607
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Cloglog
pred_cloglog2 <- factor(ifelse(predict(cloglog_model2, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_cloglog2 <- confusionMatrix(pred_cloglog2, actual, positive = "Yes")
cm_cloglog2
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8500 1627
## Yes 0 0
##
## Accuracy : 0.8393
## 95% CI : (0.832, 0.8464)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.5066
##
## Kappa : 0
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0000
## Specificity : 1.0000
## Pos Pred Value : NaN
## Neg Pred Value : 0.8393
## Prevalence : 0.1607
## Detection Rate : 0.0000
## Detection Prevalence : 0.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : Yes
##
Dựa trên kết quả ma trận nhầm lẫn của ba mô hình hồi quy nhị phân (Logit, Probit và Cloglog), có thể thấy rằng tất cả các mô hình đều đưa ra kết quả phân loại giống hệt nhau:
Tỷ lệ chính xác (Accuracy) đạt 83.93%, tức là khoảng 84% số quan sát được dự đoán đúng. Tuy nhiên, độ chính xác cao này chủ yếu đến từ việc mô hình chỉ dự đoán duy nhất một loại kết quả – rằng khách hàng vẫn còn sử dụng dịch vụ – mà không phân biệt được nhóm khách hàng đã ngừng sử dụng.
Độ nhạy (Sensitivity) bằng 0.0000, phản ánh rằng cả ba mô hình đều không nhận diện được bất kỳ trường hợp nào thuộc nhóm ngừng sử dụng. Trong khi đó, độ đặc hiệu (Specificity) đạt 100%, tức là tất cả các khách hàng còn sử dụng đều được mô hình dự đoán đúng.
Chỉ số Kappa = 0, cho thấy không có sự đồng thuận nào giữa kết quả dự đoán và thực tế trong việc phát hiện khách hàng ngừng sử dụng. Điều này cho thấy mô hình không phân biệt được hai trạng thái trong biến phụ thuộc.
Kiểm định McNemar cho kết quả p-value rất nhỏ (p < 2e-16), hàm ý rằng có sự mất cân đối nghiêm trọng giữa hai loại lỗi trong phân loại, với mô hình hoàn toàn thiên lệch về phía nhóm khách hàng còn sử dụng.
Tổng kết:
Mặc dù cả ba mô hình đều có độ chính xác tổng thể cao, song hiệu quả phân loại lại rất hạn chế khi không có mô hình nào phát hiện được khách hàng đã ngừng sử dụng. Kết quả này cho thấy việc chỉ sử dụng một biến định lượng duy nhất như Months_Inactive_12_mon là không đủ để xây dựng mô hình dự báo hiệu quả. Việc mở rộng mô hình bằng cách kết hợp thêm các biến phản ánh hành vi và đặc điểm của khách hàng là cần thiết để cải thiện khả năng phân biệt giữa hai nhóm và hỗ trợ tốt hơn cho việc dự báo rủi ro rời bỏ dịch vụ.
ggplot(mydata, aes(x = Total_Trans_Ct, color = Attrition_Flag, fill = Attrition_Flag)) +
geom_density(alpha = 0.4) +
labs(title = "Biểu đồ mật độ tổng số giao dịch theo trạng thái khách hàng",
x = "Tổng số giao dịch (trong quý gần nhất)",
y = "Mật độ",
color = "Tình trạng",
fill = "Tình trạng") +
theme_minimal()
Biểu đồ mật độ tổng số giao dịch trong quý gần nhất cho thấy sự khác biệt rõ rệt về hành vi sử dụng dịch vụ giữa hai nhóm khách hàng. Nhóm khách hàng đã ngừng sử dụng có một đỉnh mật độ nổi bật ở khoảng dưới 40 giao dịch, cho thấy phần lớn nhóm này có mức độ tương tác rất thấp trong giai đoạn gần đây. Điều này phản ánh xu hướng rõ ràng rằng khách hàng thực hiện càng ít giao dịch thì càng có khả năng rời bỏ dịch vụ.
Ngược lại, nhóm khách hàng còn sử dụng tập trung nhiều hơn ở vùng có số giao dịch cao hơn, đặc biệt là trong khoảng 60 đến 90 giao dịch. Sự chênh lệch giữa hai phân phối cho thấy tần suất giao dịch là một chỉ báo mạnh giúp phân biệt giữa khách hàng duy trì sử dụng và khách hàng có nguy cơ ngừng sử dụng.
Khoảng giao nhau giữa hai đường mật độ cho thấy vẫn tồn tại một nhóm khách hàng có mức độ giao dịch trung bình, tuy nhiên phần lớn khách hàng có tương tác thường xuyên đều thuộc nhóm đang còn sử dụng dịch vụ.
Kết quả này gợi ý rằng ngân hàng cần theo dõi sát những khách hàng có xu hướng sụt giảm tần suất giao dịch, nhất là những người rơi vào vùng dưới 50 giao dịch mỗi quý. Việc chủ động tiếp cận và triển khai các chiến lược giữ chân phù hợp có thể giúp ngăn ngừa khả năng rời bỏ dịch vụ, đồng thời tăng cường sự gắn kết lâu dài giữa khách hàng và ngân hàng.
# Các mô hình hồi quy nhị phân sử dụng biến Total_Trans_Ct
logit_model3 <- glm(attrition_binary ~ Total_Trans_Ct, data = mydata, family = binomial(link = "logit"))
probit_model3 <- glm(attrition_binary ~ Total_Trans_Ct, data = mydata, family = binomial(link = "probit"))
cloglog_model3 <- glm(attrition_binary ~ Total_Trans_Ct, data = mydata, family = binomial(link = "cloglog"))
# Xuất bảng so sánh kết quả
export_summs(
list("Logit" = logit_model3,
"Probit" = probit_model3,
"Cloglog" = cloglog_model3),
scale = FALSE,
digits = 4,
stars = c(`*` = 0.05, `**` = 0.01, `***` = 0.001)
)
| Logit | Probit | Cloglog | |
|---|---|---|---|
| (Intercept) | 1.3910 *** | 0.7853 *** | 0.7856 *** |
| (0.0830) | (0.0482) | (0.0656) | |
| Total_Trans_Ct | -0.0543 *** | -0.0313 *** | -0.0458 *** |
| (0.0016) | (0.0009) | (0.0013) | |
| N | 10127 | 10127 | 10127 |
| AIC | 7354.6480 | 7292.0640 | 7413.7018 |
| BIC | 7369.0939 | 7306.5099 | 7428.1477 |
| Pseudo R2 | 0.2461 | 0.2551 | 0.2375 |
| *** p < 0.001; ** p < 0.01; * p < 0.05. | |||
Kết quả phân tích hồi quy nhị phân với ba mô hình Logit, Probit và Cloglog nhằm đánh giá ảnh hưởng của tổng số giao dịch trong quý gần nhất (Total_Trans_Ct) đến hành vi ngừng sử dụng dịch vụ cho thấy biến này có ý nghĩa thống kê rõ rệt trong cả ba mô hình (p < 0.001).
Cụ thể, hệ số của biến Total_Trans_Ct đều mang giá trị âm, cho thấy số lượng giao dịch càng cao thì xác suất khách hàng ngừng sử dụng dịch vụ càng giảm. Trong mô hình Logit, hệ số là -0.0543, tức là mỗi lần giao dịch tăng thêm sẽ làm giảm log-odds của việc ngừng sử dụng dịch vụ. Xu hướng tương tự được duy trì trong mô hình Probit (hệ số = -0.0313) và Cloglog (hệ số = -0.0458), dù mức độ ảnh hưởng khác nhau do đặc điểm của từng hàm liên kết.
Xét về mức độ phù hợp mô hình, cả ba mô hình đều cho kết quả tốt, tuy nhiên mô hình Probit có AIC và BIC thấp nhất, cho thấy mức độ phù hợp với dữ liệu cao hơn một chút so với hai mô hình còn lại. Ngoài ra, giá trị Pseudo R² của ba mô hình đều khá cao, đặc biệt là ở Probit (0.2551), cho thấy biến Total_Trans_Ct có đóng góp đáng kể trong việc giải thích xác suất khách hàng rời bỏ dịch vụ.
Tóm lại, tổng số giao dịch trong quý gần nhất là một biến dự báo mạnh cho khả năng ngừng sử dụng dịch vụ. Việc theo dõi mức độ tương tác giao dịch định kỳ của khách hàng có thể giúp ngân hàng nhận diện sớm các dấu hiệu giảm tương tác, từ đó có các hành động chủ động như cá nhân hóa dịch vụ, gửi lời nhắc, hoặc khuyến mãi để giữ chân khách hàng hiệu quả hơn.
# Bảng so sánh các chỉ số đánh giá mô hình
model_eval3 <- data.frame(
Mô_hình = c("Logit", "Probit", "Cloglog"),
AIC = c(AIC(logit_model3), AIC(probit_model3), AIC(cloglog_model3)),
BIC = c(BIC(logit_model3), BIC(probit_model3), BIC(cloglog_model3)),
Brier_Score = c(BrierScore(logit_model3), BrierScore(probit_model3), BrierScore(cloglog_model3))
)
# Hiển thị bảng bằng kable
my_kable(model_eval3,
caption_text = "So sánh các chỉ số đánh giá mô hình",
col_names = c("Mô hình", "AIC", "BIC", "Brier Score"),
align = rep("c", ncol(model_eval3)))
| Mô hình | AIC | BIC | Brier Score |
|---|---|---|---|
| Logit | 7354.65 | 7369.09 | 0.12 |
| Probit | 7292.06 | 7306.51 | 0.12 |
| Cloglog | 7413.70 | 7428.15 | 0.12 |
Dựa trên bảng kết quả so sánh, cả ba mô hình hồi quy nhị phân gồm Logit, Probit và Cloglog đều cho thấy hiệu suất dự báo tương đối tốt, thể hiện qua giá trị Brier Score khá thấp và xấp xỉ nhau, dao động quanh mức 0.117. Trong đó, mô hình Probit có Brier Score thấp nhất (0.1166), cho thấy khả năng dự báo xác suất chính xác hơn một chút so với hai mô hình còn lại.
Xét về tiêu chí thông tin, Probit tiếp tục là mô hình nổi bật với AIC = 7292.064 và BIC = 7306.510, thấp hơn so với Logit (AIC = 7354.648) và đặc biệt là Cloglog (AIC = 7413.702). Điều này phản ánh rằng mô hình Probit không chỉ dự báo tốt hơn một chút, mà còn cân bằng tốt hơn giữa độ phù hợp và mức độ phức tạp mô hình khi sử dụng biến Total_Trans_Ct.
Tóm lại, trong trường hợp này, Probit là lựa chọn tối ưu nhất nếu ưu tiên các chỉ số đánh giá mô hình như AIC, BIC và Brier Score. Tuy nhiên, sự khác biệt không quá lớn nên các mô hình khác như Logit (dễ giải thích hơn) hay Cloglog (phù hợp trong một số tình huống phân phối bất đối xứng) vẫn có thể được cân nhắc tùy theo mục đích sử dụng cụ thể trong phân tích tiếp theo.
Ma trận nhầm lẫn
# Tạo biến nhãn thực tế
actual <- factor(ifelse(mydata$attrition_binary == 1, "Yes", "No"), levels = c("No", "Yes"))
# Ma trận nhầm lẫn cho mô hình Logit
pred_logit3 <- factor(ifelse(predict(logit_model3, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_logit3 <- confusionMatrix(pred_logit3, actual, positive = "Yes")
cm_logit3
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8306 1493
## Yes 194 134
##
## Accuracy : 0.8334
## 95% CI : (0.826, 0.8406)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.9487
##
## Kappa : 0.0879
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.08236
## Specificity : 0.97718
## Pos Pred Value : 0.40854
## Neg Pred Value : 0.84764
## Prevalence : 0.16066
## Detection Rate : 0.01323
## Detection Prevalence : 0.03239
## Balanced Accuracy : 0.52977
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Probit
pred_probit3 <- factor(ifelse(predict(probit_model3, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_probit3 <- confusionMatrix(pred_probit3, actual, positive = "Yes")
cm_probit3
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8306 1493
## Yes 194 134
##
## Accuracy : 0.8334
## 95% CI : (0.826, 0.8406)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.9487
##
## Kappa : 0.0879
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.08236
## Specificity : 0.97718
## Pos Pred Value : 0.40854
## Neg Pred Value : 0.84764
## Prevalence : 0.16066
## Detection Rate : 0.01323
## Detection Prevalence : 0.03239
## Balanced Accuracy : 0.52977
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Cloglog
pred_cloglog3 <- factor(ifelse(predict(cloglog_model3, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_cloglog3 <- confusionMatrix(pred_cloglog3, actual, positive = "Yes")
cm_cloglog3
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8306 1493
## Yes 194 134
##
## Accuracy : 0.8334
## 95% CI : (0.826, 0.8406)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.9487
##
## Kappa : 0.0879
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.08236
## Specificity : 0.97718
## Pos Pred Value : 0.40854
## Neg Pred Value : 0.84764
## Prevalence : 0.16066
## Detection Rate : 0.01323
## Detection Prevalence : 0.03239
## Balanced Accuracy : 0.52977
##
## 'Positive' Class : Yes
##
Dựa trên kết quả ma trận nhầm lẫn của ba mô hình Logit, Probit và Cloglog, có thể thấy rằng cả ba mô hình đều cho ra kết quả phân loại giống nhau:
Tỷ lệ chính xác (Accuracy) đạt mức 83.34%, cho thấy mô hình dự đoán đúng phần lớn các quan sát. Tuy nhiên, mức độ chính xác này chủ yếu đến từ khả năng nhận diện đúng khách hàng còn sử dụng dịch vụ, vốn chiếm đa số trong tập dữ liệu.
Độ nhạy (Sensitivity) chỉ đạt 0.08236, nghĩa là chỉ khoảng 8% khách hàng đã ngừng sử dụng được mô hình phát hiện đúng. Trong khi đó, độ đặc hiệu (Specificity) lên tới 97.72%, phản ánh rằng mô hình rất tốt trong việc xác định đúng khách hàng vẫn còn sử dụng.
Giá trị dương dự đoán (Positive Predictive Value) là 40.85%, tức trong số những người được mô hình dự đoán sẽ ngừng sử dụng, chỉ khoảng 41% thực sự đã rời bỏ dịch vụ. Ngược lại, giá trị âm dự đoán (Negative Predictive Value) đạt 84.76%, phù hợp với tỷ lệ khách hàng không rời bỏ.
Chỉ số Kappa chỉ đạt 0.0879, cho thấy mức độ đồng thuận rất thấp giữa dự đoán của mô hình và dữ liệu thực tế, đặc biệt là trong việc nhận diện nhóm ngừng sử dụng.
Kiểm định McNemar cho kết quả p < 2e-16, chỉ ra rằng có sự thiên lệch nghiêm trọng giữa hai loại lỗi phân loại. Cụ thể, mô hình vẫn chưa thể cân bằng được giữa việc nhận diện đúng khách hàng còn sử dụng và khách hàng đã rời bỏ.
Tổng kết:
Mặc dù mô hình hồi quy nhị phân sử dụng biến Total_Trans_Ct đã cải thiện phần nào hiệu quả phân loại so với khi chỉ dùng biến Months_Inactive_12_mon (thể hiện qua độ nhạy lớn hơn 0), nhưng mức độ phát hiện nhóm ngừng sử dụng vẫn còn rất hạn chế. Điều này cho thấy việc sử dụng duy nhất một biến định lượng tuy giúp mô hình dễ hiểu nhưng không đủ mạnh để dự đoán chính xác hành vi rời bỏ dịch vụ.
Để nâng cao hiệu quả dự đoán, việc kết hợp thêm nhiều biến độc lập phản ánh hành vi giao dịch, tần suất tương tác, và đặc điểm khách hàng là cần thiết. Mô hình chỉ thực sự hữu ích cho ứng dụng thực tiễn khi có thể nhận diện tốt cả hai nhóm khách hàng, đặc biệt là nhóm có nguy cơ cao ngừng sử dụng – đối tượng chính cần được ngân hàng theo dõi và can thiệp kịp thời.
Sau khi đã tiến hành phân tích riêng biệt nhằm đánh giá tác động của từng biến độc lập đơn lẻ đến xác suất khách hàng ngừng sử dụng dịch vụ, bước tiếp theo là xây dựng mô hình hồi quy nhị phân với nhiều biến đồng thời để đánh giá hiệu ứng tổng hợp. Cụ thể, bốn biến được đưa vào mô hình gồm: giới tính (Gender), nhóm thu nhập (Income_Category), số tháng không hoạt động trong 12 tháng gần nhất (Months_Inactive_12_mon), và tổng số giao dịch trong quý gần nhất (Total_Trans_Ct). Việc kết hợp các biến này trong một mô hình cho phép xem xét mức độ ảnh hưởng tương đối của từng yếu tố khi được điều chỉnh bởi các yếu tố còn lại, đồng thời giúp cải thiện khả năng dự báo hành vi ngừng sử dụng dịch vụ của khách hàng. Đây là bước quan trọng nhằm đảm bảo tính đầy đủ và chính xác trong phân tích, từ đó cung cấp cơ sở đáng tin cậy cho các đề xuất chính sách giữ chân khách hàng.
# Các mô hình hồi quy nhị phân với nhiều biến độc lập
logit_model4 <- glm(attrition_binary ~ Gender + Income_Category + Months_Inactive_12_mon + Total_Trans_Ct,
data = mydata, family = binomial(link = "logit"))
probit_model4 <- glm(attrition_binary ~ Gender + Income_Category + Months_Inactive_12_mon + Total_Trans_Ct,
data = mydata, family = binomial(link = "probit"))
cloglog_model4 <- glm(attrition_binary ~ Gender + Income_Category + Months_Inactive_12_mon + Total_Trans_Ct,
data = mydata, family = binomial(link = "cloglog"))
# Xuất bảng so sánh kết quả
export_summs(
list("Logit" = logit_model4,
"Probit" = probit_model4,
"Cloglog" = cloglog_model4),
scale = FALSE,
digits = 4,
stars = c(`*` = 0.05, `**` = 0.01, `***` = 0.001)
)
| Logit | Probit | Cloglog | |
|---|---|---|---|
| (Intercept) | 0.0035 | 0.0056 | -0.3757 ** |
| (0.1570) | (0.0880) | (0.1334) | |
| GenderF | 0.7227 *** | 0.3506 *** | 0.6343 *** |
| (0.1182) | (0.0652) | (0.1008) | |
| Income_Category$40K - $60K | -0.0255 | -0.0078 | -0.0229 |
| (0.0964) | (0.0542) | (0.0799) | |
| Income_Category$60K - $80K | 0.0677 | 0.0324 | 0.0599 |
| (0.1485) | (0.0820) | (0.1270) | |
| Income_Category$80K - $120K | 0.2693 | 0.1500 | 0.2133 |
| (0.1437) | (0.0796) | (0.1225) | |
| Income_Category$120K + | 0.4369 ** | 0.2362 ** | 0.3761 ** |
| (0.1636) | (0.0912) | (0.1376) | |
| Income_CategoryUnknown | -0.0288 | -0.0176 | -0.0146 |
| (0.1027) | (0.0579) | (0.0847) | |
| Months_Inactive_12_mon | 0.4512 *** | 0.2523 *** | 0.3534 *** |
| (0.0297) | (0.0166) | (0.0239) | |
| Total_Trans_Ct | -0.0582 *** | -0.0326 *** | -0.0482 *** |
| (0.0017) | (0.0009) | (0.0014) | |
| N | 10127 | 10127 | 10127 |
| AIC | 7042.3777 | 7011.9427 | 7101.9973 |
| BIC | 7107.3843 | 7076.9494 | 7167.0039 |
| Pseudo R2 | 0.2924 | 0.2966 | 0.2840 |
| *** p < 0.001; ** p < 0.01; * p < 0.05. | |||
Kết quả hồi quy nhị phân với ba mô hình liên kết – Logit, Probit và Cloglog – cho thấy các biến được đưa vào đều có mức độ ảnh hưởng nhất định đến xác suất khách hàng ngừng sử dụng dịch vụ, trong đó một số biến thể hiện ý nghĩa thống kê mạnh mẽ và ổn định trên cả ba mô hình.
Trước tiên, biến giới tính (GenderF) có hệ số dương và có ý nghĩa thống kê ở mức 1% trong cả ba mô hình, cho thấy khách hàng là nữ có xác suất ngừng sử dụng dịch vụ cao hơn đáng kể so với khách hàng nam, khi các yếu tố khác được giữ không đổi. Mặc dù mức độ ảnh hưởng khác nhau tùy theo mô hình – cao nhất trong mô hình Logit (0.7227) và thấp hơn trong Probit (0.3506) – xu hướng tổng thể là nhất quán. Điều này gợi ý rằng giới tính là một đặc điểm nhân khẩu học có thể liên quan đến mức độ gắn bó với dịch vụ ngân hàng, có thể do sự khác biệt trong hành vi tài chính hoặc kỳ vọng dịch vụ giữa nam và nữ.
Đối với biến nhóm thu nhập (Income_Category), chỉ có nhóm khách hàng có thu nhập từ trên $120K cho thấy ảnh hưởng rõ rệt đến hành vi ngừng sử dụng. Cụ thể, trong cả ba mô hình, hệ số của nhóm này đều dương và có ý nghĩa thống kê ở mức 5%, cho thấy khách hàng thuộc nhóm thu nhập cao nhất có xác suất rời bỏ dịch vụ cao hơn so với nhóm thu nhập thấp nhất (dưới $40K, nhóm tham chiếu). Các nhóm thu nhập còn lại không có hệ số ước lượng có ý nghĩa thống kê, cho thấy không có sự khác biệt rõ rệt về xác suất rời bỏ giữa các nhóm này và nhóm tham chiếu. Kết quả này hàm ý rằng việc giữ chân khách hàng thu nhập cao có thể đòi hỏi chiến lược riêng biệt, do họ có xu hướng ít gắn bó với một dịch vụ cụ thể nếu không được đáp ứng đúng kỳ vọng.
Hai biến định lượng phản ánh hành vi sử dụng dịch vụ là Months_Inactive_12_mon và Total_Trans_Ct đều có ý nghĩa thống kê rất cao (p < 0.001) và giữ được dấu hiệu ổn định qua ba mô hình. Cụ thể, biến Months_Inactive_12_mon có hệ số dương, cho thấy số tháng không hoạt động càng nhiều thì xác suất ngừng sử dụng dịch vụ càng cao. Ngược lại, Total_Trans_Ct có hệ số âm, cho thấy khách hàng càng giao dịch nhiều trong quý gần nhất thì càng có xu hướng tiếp tục duy trì sử dụng dịch vụ. Hai yếu tố này phản ánh rõ nét hành vi tương tác gần đây của khách hàng và là chỉ báo quan trọng cho việc phát hiện nguy cơ rời bỏ dịch vụ từ sớm.
Xét về mức độ phù hợp của mô hình, cả ba mô hình đều có chỉ số Pseudo R² tương đối cao (Logit: 0.2924; Probit: 0.2966; Cloglog: 0.2840), cho thấy các biến độc lập đã giải thích được gần 30% phương sai trong xác suất rời bỏ dịch vụ – một con số đáng kể trong bối cảnh dữ liệu hành vi khách hàng thường rất phân tán. Ngoài ra, mô hình Probit tiếp tục cho thấy khả năng phù hợp tốt nhất với dữ liệu khi có AIC và BIC thấp nhất trong ba mô hình (AIC = 7011.94; BIC = 7076.95).
Tổng kết lại, mô hình hồi quy nhị phân đa biến với sự kết hợp của đặc điểm nhân khẩu học (giới tính, thu nhập) và hành vi tương tác (số tháng không hoạt động, số giao dịch gần đây) đã mang lại cái nhìn rõ nét hơn về các yếu tố ảnh hưởng đến hành vi ngừng sử dụng dịch vụ. Kết quả này không chỉ giúp nâng cao khả năng dự báo mà còn cung cấp cơ sở thực tiễn để thiết kế các chương trình can thiệp phù hợp nhằm giữ chân khách hàng có nguy cơ cao.
model_eval4 <- data.frame(
Mô_hình = c("Logit", "Probit", "Cloglog"),
AIC = c(AIC(logit_model4), AIC(probit_model4), AIC(cloglog_model4)),
BIC = c(BIC(logit_model4), BIC(probit_model4), BIC(cloglog_model4)),
Brier_Score = c(BrierScore(logit_model4), BrierScore(probit_model4), BrierScore(cloglog_model4))
)
# Hiển thị bảng bằng kable
my_kable(model_eval4,
caption_text = "So sánh các chỉ số đánh giá mô hình",
col_names = c("Mô hình", "AIC", "BIC", "Brier Score"),
align = rep("c", ncol(model_eval4)))
| Mô hình | AIC | BIC | Brier Score |
|---|---|---|---|
| Logit | 7042.38 | 7107.38 | 0.11 |
| Probit | 7011.94 | 7076.95 | 0.11 |
| Cloglog | 7102.00 | 7167.00 | 0.11 |
Bảng kết quả cho thấy cả ba mô hình hồi quy nhị phân – Logit, Probit và Cloglog – đều thể hiện hiệu suất dự báo tốt khi đồng thời đưa ra giá trị Brier Score thấp và xấp xỉ nhau, dao động quanh mức 0.110. Điều này cho thấy các mô hình đều có khả năng ước lượng xác suất khách hàng ngừng sử dụng dịch vụ một cách tương đối chính xác.
Xét riêng từng mô hình, Probit đạt kết quả tốt nhất với Brier Score nhỏ nhất (0.1100), cho thấy đây là mô hình dự báo chính xác hơn một chút so với Logit (0.1102) và Cloglog (0.1109). Ngoài ra, Probit cũng có giá trị AIC (7011.943) và BIC (7076.949) thấp nhất trong ba mô hình, phản ánh mức độ phù hợp cao hơn với dữ liệu mà vẫn duy trì được cấu trúc mô hình tương đối đơn giản. Trong khi đó, Cloglog có AIC và BIC cao nhất, cho thấy mức độ phù hợp tương đối kém hơn so với hai mô hình còn lại.
Tóm lại, trong bối cảnh phân tích với các biến giải thích gồm giới tính, thu nhập, số tháng không hoạt động và số lượng giao dịch, mô hình Probit tỏ ra ưu việt nhất dựa trên các chỉ tiêu AIC, BIC và Brier Score. Tuy nhiên, sự chênh lệch giữa ba mô hình là không quá lớn, do đó việc lựa chọn mô hình nên được cân nhắc thêm dựa trên mục tiêu phân tích cụ thể. Nếu ưu tiên khả năng diễn giải trực quan, mô hình Logit có thể là lựa chọn phù hợp; trong khi Cloglog có thể hữu ích trong các tình huống dữ liệu mất cân bằng mạnh hoặc khi hiện tượng rời bỏ diễn ra hiếm hoi.
Ma trận nhầm lẫn
# Ma trận nhầm lẫn cho mô hình Logit
pred_logit4 <- factor(ifelse(predict(logit_model4, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_logit4 <- confusionMatrix(pred_logit4, actual, positive = "Yes")
cm_logit4
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8223 1386
## Yes 277 241
##
## Accuracy : 0.8358
## 95% CI : (0.8284, 0.843)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.8384
##
## Kappa : 0.1595
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.14813
## Specificity : 0.96741
## Pos Pred Value : 0.46525
## Neg Pred Value : 0.85576
## Prevalence : 0.16066
## Detection Rate : 0.02380
## Detection Prevalence : 0.05115
## Balanced Accuracy : 0.55777
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Probit
pred_probit4 <- factor(ifelse(predict(probit_model4, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_probit4 <- confusionMatrix(pred_probit4, actual, positive = "Yes")
cm_probit4
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8244 1407
## Yes 256 220
##
## Accuracy : 0.8358
## 95% CI : (0.8284, 0.843)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.8384
##
## Kappa : 0.1472
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.13522
## Specificity : 0.96988
## Pos Pred Value : 0.46218
## Neg Pred Value : 0.85421
## Prevalence : 0.16066
## Detection Rate : 0.02172
## Detection Prevalence : 0.04700
## Balanced Accuracy : 0.55255
##
## 'Positive' Class : Yes
##
# Ma trận nhầm lẫn cho mô hình Cloglog
pred_cloglog4 <- factor(ifelse(predict(cloglog_model4, type = "response") >= 0.5, "Yes", "No"), levels = c("No", "Yes"))
cm_cloglog4 <- confusionMatrix(pred_cloglog4, actual, positive = "Yes")
cm_cloglog4
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 8252 1410
## Yes 248 217
##
## Accuracy : 0.8363
## 95% CI : (0.8289, 0.8434)
## No Information Rate : 0.8393
## P-Value [Acc > NIR] : 0.8032
##
## Kappa : 0.1465
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.13337
## Specificity : 0.97082
## Pos Pred Value : 0.46667
## Neg Pred Value : 0.85407
## Prevalence : 0.16066
## Detection Rate : 0.02143
## Detection Prevalence : 0.04592
## Balanced Accuracy : 0.55210
##
## 'Positive' Class : Yes
##
Kết quả ma trận nhầm lẫn cho thấy ba mô hình hồi quy nhị phân (Logit, Probit và Cloglog) đều cho ra kết quả phân loại tương đối giống nhau khi sử dụng đồng thời các biến độc lập: giới tính (Gender), thu nhập (Income_Category), số tháng không hoạt động trong 12 tháng gần nhất (Months_Inactive_12_mon) và số lượng giao dịch (Total_Trans_Ct).
Cụ thể, độ chính xác tổng thể (Accuracy) của cả ba mô hình đều xấp xỉ nhau, dao động quanh mức 83.6%. Tuy nhiên, cần lưu ý rằng độ chính xác cao chưa đủ phản ánh hiệu quả mô hình trong bối cảnh dữ liệu mất cân đối, khi tỷ lệ khách hàng ngừng sử dụng dịch vụ chiếm tỷ lệ nhỏ hơn trong tổng thể.
Độ nhạy (Sensitivity), tức khả năng phát hiện đúng khách hàng ngừng sử dụng dịch vụ, tuy còn thấp nhưng đã có cải thiện đáng kể so với các mô hình đơn biến trước đó. Mô hình Logit đạt độ nhạy cao nhất (14.81%), theo sau là Probit (13.52%) và Cloglog (13.34%). Đây là dấu hiệu tích cực cho thấy mô hình đã bắt đầu nhận diện được nhóm khách hàng có nguy cơ rời bỏ dịch vụ.
Trong khi đó, độ đặc hiệu (Specificity) – khả năng dự đoán đúng nhóm khách hàng còn sử dụng – vẫn duy trì ở mức cao (từ 96.7% đến 97.1%) ở cả ba mô hình. Điều này cho thấy các mô hình ít khi đánh nhầm khách hàng trung thành là người có khả năng rời bỏ.
Chỉ số Kappa, phản ánh mức độ đồng thuận giữa dự đoán và thực tế sau khi loại bỏ ảnh hưởng ngẫu nhiên, đạt từ 0.146 đến 0.159. Mặc dù còn ở mức thấp, nhưng đã cao hơn nhiều so với khi chỉ dùng một biến đầu vào, chứng minh hiệu quả của việc mở rộng mô hình đa biến.
Cuối cùng, kiểm định McNemar đều cho kết quả p-value rất nhỏ (p < 2e-16), cho thấy vẫn còn tồn tại sự mất cân đối giữa các loại lỗi phân loại (dự đoán sai nhóm “Yes” so với “No”), tuy nhiên mức độ lệch đã giảm so với mô hình đơn biến trước.
Tổng kết:
Việc mở rộng mô hình hồi quy nhị phân với nhiều biến giải thích đã cải thiện rõ rệt khả năng nhận diện nhóm khách hàng có nguy cơ ngừng sử dụng dịch vụ. Dù các chỉ số như độ nhạy và Kappa vẫn còn hạn chế, nhưng so với mô hình đơn biến, hiệu suất phân loại đã được nâng cao đáng kể. Điều này khẳng định tính cần thiết của việc kết hợp nhiều yếu tố hành vi và nhân khẩu học để xây dựng mô hình dự báo hiệu quả hơn trong thực tiễn ngân hàng.
Nghiên cứu đã tiến hành phân tích các yếu tố ảnh hưởng đến hành vi ngừng sử dụng dịch vụ của khách hàng thông qua chuỗi mô hình hồi quy nhị phân, bao gồm các mô hình đơn biến và đa biến. Mục tiêu là không chỉ xác định vai trò của từng biến độc lập mà còn đánh giá hiệu quả dự báo khi các yếu tố cùng tồn tại trong một mô hình tổng hợp.
Trong các mô hình đơn biến, hai biến phản ánh hành vi sử dụng dịch vụ — số tháng không hoạt động trong 12 tháng gần nhất (Months_Inactive_12_mon) và tổng số giao dịch gần đây (Total_Trans_Ct) — đều cho thấy ảnh hưởng mạnh mẽ và nhất quán đến xác suất rời bỏ dịch vụ. Khách hàng ít tương tác hơn có khả năng cao sẽ ngừng sử dụng dịch vụ, trong khi nhóm duy trì giao dịch thường xuyên lại có xác suất rời bỏ thấp hơn đáng kể.
Biến Gender cũng thể hiện ý nghĩa thống kê trong cả ba mô hình đơn biến. Khách hàng nữ có khả năng ngừng sử dụng dịch vụ cao hơn nam giới khoảng 22–23%, theo ước lượng từ mô hình Logit. Mặc dù hiệu ứng này không lớn, nhưng nhất quán giữa các mô hình và mang ý nghĩa thực tiễn trong việc nhận diện phân khúc khách hàng có nguy cơ cao hơn.
Đối với biến Income_Category, chỉ nhóm thu nhập từ $60K đến $80K cho thấy sự khác biệt đáng kể về hành vi so với nhóm thu nhập thấp nhất. Nhóm này có xác suất rời bỏ dịch vụ thấp hơn, cho thấy thu nhập trung bình có thể gắn liền với mức độ ổn định và gắn bó cao hơn với dịch vụ tài chính. Các nhóm thu nhập còn lại không thể hiện sự khác biệt rõ rệt khi phân tích độc lập.
Khi chuyển sang mô hình đa biến kết hợp các yếu tố, hiệu quả phân loại được cải thiện rõ rệt. Các chỉ số đánh giá như AIC, BIC và Brier Score đều cho thấy mức độ phù hợp tốt hơn so với mô hình đơn biến. Trong bối cảnh này, một số biến thể hiện rõ hơn vai trò của mình: Gender tiếp tục giữ được ý nghĩa thống kê và thậm chí có hệ số ước lượng cao hơn, cho thấy tác động của giới tính nữ chỉ bộc lộ rõ ràng khi đồng thời kiểm soát các yếu tố khác. Trong khi đó, hiệu ứng của thu nhập trở nên tập trung vào các nhóm cao hơn, đặc biệt là nhóm trên $120K cũng cho thấy dấu hiệu gắn bó tích cực hơn — điều không thể hiện trong phân tích đơn biến.
So sánh giữa ba hàm liên kết cho thấy mô hình Probit thường có AIC, BIC và Brier Score thấp nhất, phản ánh khả năng dự báo tốt nhất về mặt định lượng. Tuy nhiên, sự chênh lệch giữa các mô hình là không lớn, và mô hình Logit vẫn là lựa chọn hợp lý trong các trường hợp yêu cầu giải thích đơn giản và trực quan hơn. Cloglog có thể hữu ích trong bối cảnh dữ liệu mất cân đối nghiêm trọng, tuy nhiên trong nghiên cứu này, lợi thế đó không được thể hiện rõ.
Tóm lại, kết quả nghiên cứu khẳng định rằng hành vi sử dụng dịch vụ là chỉ báo mạnh nhất để nhận diện nguy cơ rời bỏ. Bên cạnh đó, giới tính và mức thu nhập trung bình–cao cũng góp phần lý giải sự khác biệt trong hành vi khách hàng. Việc xây dựng mô hình đa biến cho phép khai thác đầy đủ sức mạnh của các yếu tố này, từ đó mở ra tiềm năng ứng dụng trong dự báo rủi ro và xây dựng chiến lược giữ chân khách hàng hiệu quả hơn.
Từ những phát hiện của nghiên cứu,tác giả đưa ra một số khuyến nghị sau nhằm hỗ trợ các tổ chức tài chính, đặc biệt là ngân hàng, trong việc quản trị rủi ro ngừng sử dụng dịch vụ của khách hàng. Trước hết, kết quả cho thấy hành vi sử dụng dịch vụ, như tần suất giao dịch và mức độ tương tác gần đây, là những chỉ báo quan trọng giúp nhận diện nhóm khách hàng có khả năng ngừng sử dụng cao. Do đó, ngân hàng nên thường xuyên theo dõi các chỉ số này để phát hiện sớm các dấu hiệu suy giảm hoạt động và chủ động triển khai các chiến lược giữ chân phù hợp, chẳng hạn như gợi ý dịch vụ, ưu đãi cá nhân hóa hoặc tiếp cận chăm sóc qua các kênh trực tuyến.
Ngoài ra, ảnh hưởng của giới tính và mức thu nhập gợi ý rằng ngân hàng nên xem xét phân khúc khách hàng theo đặc điểm nhân khẩu học. Nhóm khách hàng nữ và những người có thu nhập trung bình đến cao thể hiện xu hướng rời bỏ hoặc duy trì dịch vụ khác biệt. Do vậy, các chương trình chăm sóc khách hàng nên được thiết kế linh hoạt và có tính cá nhân hóa cao hơn, nhằm tăng cường sự hài lòng và duy trì mối quan hệ lâu dài với từng nhóm cụ thể.
Bên cạnh việc ứng dụng trong phân tích dữ liệu hiện tại, mô hình dự báo có thể được tích hợp vào hệ thống CRM (quản trị quan hệ khách hàng) nhằm tự động phát hiện các khách hàng có rủi ro rời bỏ, từ đó gửi cảnh báo sớm cho bộ phận chăm sóc khách hàng. Việc này không chỉ giúp tối ưu hóa nguồn lực mà còn góp phần giảm thiểu tỷ lệ mất khách hàng một cách hiệu quả.
Mặc dù nghiên cứu đã đạt được một số kết quả đáng chú ý, song vẫn tồn tại những hạn chế cần được thừa nhận. Thứ nhất, tập dữ liệu sử dụng trong nghiên cứu mang tính chất mô phỏng và có thể chưa phản ánh đầy đủ tính chất của dữ liệu khách hàng trong thực tế, đặc biệt là các yếu tố định tính sâu hơn như mức độ hài lòng, nhận thức thương hiệu, hay trải nghiệm dịch vụ – vốn có thể đóng vai trò quan trọng trong hành vi rời bỏ nhưng chưa được đưa vào mô hình.
Thứ hai, mô hình phân tích chủ yếu sử dụng các biến độc lập đã được mã hóa sẵn và không kiểm soát được yếu tố thời gian hay thay đổi hành vi theo chu kỳ. Trong khi đó, hành vi khách hàng thường không tĩnh tại và có thể bị chi phối bởi nhiều yếu tố ngoại sinh như thay đổi chính sách, điều kiện kinh tế vĩ mô hay xu hướng công nghệ.
Cuối cùng, nghiên cứu mới chỉ sử dụng các mô hình hồi quy nhị phân truyền thống (Logit, Probit, Cloglog), trong khi các phương pháp học máy hiện đại như Random Forest, Gradient Boosting hay Neural Networks có thể mang lại hiệu quả dự báo cao hơn nếu được xử lý và hiệu chỉnh phù hợp. Do đó, việc mở rộng mô hình và so sánh với các thuật toán dự báo tiên tiến là một hướng nghiên cứu tiềm năng trong tương lai.
[1]. Bình, Phùng Thanh, và Nguyễn Minh Trí. Các yếu tố ảnh hưởng đến sự gắn kết của khách hàng mạng viễn thông di động tại Thành phố Hồ Chí Minh. Tạp chí Quản lý Kinh tế Quốc tế (Journal of International Economics and Management), 135 (2021): 70–89.
[2]. Trang, Nguyễn Thị Thu, và cộng sự. Ứng dụng phương pháp học máy dự báo khả năng khách hàng rời bỏ dịch vụ thẻ tín dụng.
[3]. Tường, Trần Mạnh. Phân tích tác động của các yếu tố đến lòng trung thành của khách hàng. Quarto, 2024, https://tmtuong.quarto.pub/ptdldt/. (2025).
[4]. Vĩ, Bùi Xuân. Dự đoán và phân tích khả năng khách hàng rời bỏ của hệ thống viễn thông. (2024).
[5]. Charandabi, Sina Esmaeilpour. “Prediction of customer churn in banking industry.” arXiv preprint arXiv:2301.13099 (2023).
[6]. Guliyev, Hasraddin, and Ferda Yerdelen Tatoğlu. “Customer churn analysis in banking sector: Evidence from explainable machine learning models.” Journal of Applied Microeconometrics 1.2 (2021): 85–99.
[7]. Thanh, Nguyen, and Nguyen Vy. “Building a proper churn prediction model for Vietnam’s mobile banking service.” International Journal of Advanced and Applied Sciences 9.7 (2022): 139–149.