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
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 Dataset
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:
data <- read.csv("F:/PTDLDT/BankChurners.csv", header = T)
datatable(data)
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(data)
## [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
)
kbl(variable_description, col.names = c("Biến", "Mô tả"), booktabs = TRUE) %>%
kable_styling(latex_options = c("striped", "hold_position"))
| 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(data)
## '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(data)[sapply(data, 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 <- data[, 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)
)
knitr::kable(bang_flag, caption = "Bảng 4.1.1.1: Phân phối khách hàng theo tình trạng sử dụng dịch vụ.", format = "html") %>%
kableExtra::kable_styling(full_width = FALSE, position = "center")
| 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)
)
knitr::kable(bang_flag, caption = "Bảng 4.1.1.2: Phân phối khách hàng theo giới tính", format = "html") %>%
kableExtra::kable_styling(full_width = FALSE, position = "center")
| 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)
)
knitr::kable(bang_flag, caption = "Bảng 4.1.1.3: Phân phối khách hàng theo trình độ học vấn", format = "html") %>%
kableExtra::kable_styling(full_width = FALSE, position = "center")
| 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)
)
knitr::kable(bang_flag, caption = "Bảng 4.1.1.4: Phân phối khách hàng theo tình trạng hôn nhân", format = "html") %>%
kableExtra::kable_styling(full_width = FALSE, position = "center")
| 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)
)
knitr::kable(bang_flag, caption = "Bảng 4.1.1.5: Phân phối khách hàng theo nhóm thu nhập", format = "html") %>%
kableExtra::kable_styling(full_width = FALSE, position = "center")
| 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)
)
knitr::kable(bang_flag, caption = "Bảng 4.1.1.6: Phân phối khách hàng theo hạng thẻ", format = "html") %>%
kableExtra::kable_styling(full_width = FALSE, position = "center")
| 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 <- data[, 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
library(knitr)
kable(summary_stats, digits = 2, align = "c",
caption = "Bảng thống kê mô tả các biến định lượng")
| 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
kable(p_values, format = "html", digits = 4, align = "c",
caption = "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") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = F, position = "center") %>%
row_spec(0, bold = T, background = "#DDEBF7")
| 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
data$Total_Trans_Ct_group <- cut(data$Total_Trans_Ct,
breaks = quantile(data$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)
data$Months_Inactive_12_mon_group <- cut(data$Months_Inactive_12_mon,
breaks = quantile(data$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(data$Total_Trans_Ct_group, data$Attrition_Flag))$p.value
p2 <- chisq.test(table(data$Months_Inactive_12_mon_group, data$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
kable(chisq_summary, format = "html",
col.names = c("Biến", "P_value"),
caption = "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") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE, position = "center")
| 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 có tổng hàng/cột
freq_table <- addmargins(table(dldt$Gender, dldt$Attrition_Flag))
# Hiển thị bảng đẹp bằng kable
kable(freq_table,
caption = "Bảng tần số chéo giữa Giới tính và Trạng thái sử dụng thẻ",
align = "c")
| 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_data <- 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_data$Gender, sub_data$Attrition_Flag)
##
## Attrited Customer Existing Customer
## F 930 4428
## M 697 4072
library(epitools)
riskratio(table(sub_data$Gender, sub_data$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_data$Gender, sub_data$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
data$attrition_binary <- ifelse(data$Attrition_Flag == "Attrited Customer", 1, 0)
# Mã hóa giới tính: M = 0, F = 1
data$Gender <- factor(data$Gender, levels = c("M", "F"))
# Các mô hình
logit_model <- glm(attrition_binary ~ Gender, data = data, family = binomial(link = "logit"))
probit_model <- glm(attrition_binary ~ Gender, data = data, family = binomial(link = "probit"))
cloglog_model <- glm(attrition_binary ~ Gender, data = data, 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
kable(model_eval, align = "c", caption = "So sánh các chỉ số đánh giá mô hình") %>%
kable_styling(full_width = FALSE, position = "center", font_size = 14)
| Mô_hình | AIC | BIC | Brier_Score |
|---|---|---|---|
| Logit | 8917.074 | 8931.52 | 0.1346608 |
| Probit | 8917.074 | 8931.52 | 0.1346608 |
| Cloglog | 8917.074 | 8931.52 | 0.1346608 |
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(data$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 có tổng hàng/cột
freq_table1 <- addmargins(table(dldt$Income_Category, dldt$Attrition_Flag))
# Hiển thị bảng đẹp bằng kable
kable(freq_table1,
caption = "Bảng tần số chéo giữa Nhóm thu nhập và Trạng thái sử dụng thẻ",
align = "c")
| 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_data2 <- subset(dldt,
Income_Category %in% c("$120K +", "Less than $40K") &
Attrition_Flag %in% c("Attrited Customer", "Existing Customer"))
table(sub_data2$Income_Category, sub_data2$Attrition_Flag)
##
## Attrited Customer Existing Customer
## $120K + 126 601
## Less than $40K 612 2949
library(epitools)
riskratio(table(sub_data2$Income_Category, sub_data2$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_data2$Income_Category, sub_data2$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)
data$Income_Category <- factor(data$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 = data, family = binomial(link = "logit"))
probit_model1 <- glm(attrition_binary ~ Income_Category, data = data, family = binomial(link = "probit"))
cloglog_model1 <- glm(attrition_binary ~ Income_Category, data = data, 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))
)
# Hiển thị bảng bằng kable
kable(model_eval1, align = "c", caption = "So sánh các chỉ số đánh giá mô hình") %>%
kable_styling(full_width = FALSE, position = "center", font_size = 14)
| Mô_hình | AIC | BIC | Brier_Score |
|---|---|---|---|
| Logit | 8926.098 | 8969.436 | 0.1346772 |
| Probit | 8926.098 | 8969.436 | 0.1346772 |
| Cloglog | 8926.098 | 8969.436 | 0.1346772 |
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(data$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ụ.