PHẦN MỞ ĐẦU

1. Lý do chọn đề tài

Trong bối cảnh nền kinh tế số phát triển mạnh mẽ, các tổ chức tài chính ngày càng phụ thuộc vào dữ liệu để ra quyết định, đặc biệt trong lĩnh vực phê duyệt tín dụng cá nhân. Việc mô hình hóa quá trình cho vay không chỉ là một xu thế tất yếu nhằm thay thế các phương pháp thẩm định truyền thống vốn phụ thuộc vào yếu tố chủ quan, mà còn là một giải pháp chiến lược giúp nâng cao độ chính xác, tối ưu hóa quy trình và quản trị rủi ro hiệu quả.

Để phát triển một mô hình dự báo toàn diện trong lĩnh vực cho vay cá nhân, phân tích cần được xây dựng trên hai nhóm thông tin chủ đạo: các chỉ số tài chính định lượng và các đặc điểm nhân khẩu học. Những chỉ số như thu nhập, số năm kinh nghiệm tín dụng và điểm tín dụng đóng vai trò là các chỉ báo trực tiếp về mức độ uy tín tài chính của khách hàng. Bên cạnh đó, tỷ lệ vay trên thu nhập phản ánh năng lực thanh toán và lịch sử sử dụng tín dụng. Tuy nhiên, các yếu tố tài chính đơn thuần chưa thể phác họa đầy đủ bức tranh hành vi tín dụng. Các đặc điểm nhân khẩu học như độ tuổi, trình độ học vấn, tình trạng hôn nhân hay sở hữu nhà ở cung cấp thêm ngữ cảnh về sự ổn định cá nhân, giai đoạn cuộc sống và mức độ trách nhiệm - những yếu tố có ảnh hưởng đáng kể đến quyết định cho vay nhưng thường không thể hiện rõ qua các con số tài chính.

Tầm quan trọng của việc kết hợp hai nhóm yếu tố này đã được khẳng định trong nhiều công trình nghiên cứu. Các tác giả kinh điển như Hand & Henley (1997) đã sớm chỉ ra rằng các mô hình dự đoán dựa trên dữ liệu định lượng mang lại hiệu quả vượt trội trong việc phân loại hồ sơ vay. Sau đó, nghiên cứu của Khandani, Kim & Lo (2010) tiếp tục nhấn mạnh rằng các biến số như tỷ lệ nợ trên thu nhập và lãi suất vay đóng vai trò cốt lõi trong việc dự báo khả năng vỡ nợ. Tuy nhiên, sức mạnh thực sự của mô hình nằm ở khả năng kết hợp các yếu tố này với dữ liệu nhân khẩu học. Thomas, Crook & Edelman (2002) trong các công trình của mình đã nhấn mạnh rằng các yếu tố nền tảng như điểm tín dụng (credit score) khi được đặt trong bối cảnh các biến nhân khẩu (ví dụ: tuổi, tình trạng hôn nhân) sẽ tạo ra một mô hình dự báo toàn diện và mạnh mẽ hơn nhiều.

Trong bối cảnh ngành tài chính yêu cầu sự minh bạch và hiệu quả ngày càng cao, việc phân tích các yếu tố định lượng và định tính trong hồ sơ vay vốn trở nên vô cùng quan trọng. Về mặt thực tiễn, việc xác định các biến số có ảnh hưởng rõ rệt sẽ là nền tảng để xây dựng các mô hình, giúp tối ưu hóa quy trình phê duyệt, giảm thiểu rủi ro và đảm bảo tính công bằng. Về mặt học thuật, nghiên cứu này phân tích mối quan hệ giữa đặc điểm của người vay và hành vi tín dụng, đồng thời cung cấp bằng chứng thực nghiệm nhằm mở rộng cơ hội học tập và khám phá trong lĩnh vực phân tích dữ liệu định tính.

Xuất phát từ những yêu cầu đó, đề tài “Phân tích hành vi cho vay và giám sát tín dụng cá nhân dựa trên đặc điểm hồ sơ vay” được lựa chọn. Mục tiêu của đề tài là xây dựng một phương pháp luận hệ thống, kết hợp giữa phân tích thống kê và mô hình hóa dự báo, nhằm cung cấp một cái nhìn sâu sắc và định lượng về rủi ro tín dụng. Đề tài không chỉ nhằm giải quyết những vấn đề thực tiễn cấp bách của các tổ chức tài chính, mà còn khẳng định vai trò thiết yếu của phân tích dữ liệu trong việc phát hiện cơ hội thúc đẩy các quyết định cho vay hiệu quả, minh bạch và có trách nhiệm hơn.


2. Mục tiêu nghiên cứu

2.1. Mục tiêu tổng quát

Xây dựng và đánh giá các mô hình dự báo nhằm hỗ trợ ra quyết định trong cho vay cá nhân và xem xét các rủi ro vỡ nợ. Tập trung vào ba khía cạnh chính: khả năng được phê duyệt hồ sơ vay, mục đích đi vay và thời gian khách hàng đã sử dụng tín dụng. Các mô hình này được phát triển dựa trên phân tích các yếu tố nhân khẩu học và tài chính của người vay.

2.2. Mục tiêu cụ thể

  1. Hệ thống hóa cơ sở lý thuyết về rủi ro tín dụng và các phương pháp dự báo cụ thể trong lĩnh vực tài chính, đồng thời xây dựng và so sánh hiệu quả của các mô hình dự đoán đối với ba biến mục tiêu:
  • Dự đoán khả năng được duyệt vay: Bài toán phân loại.

  • Dự đoán múc đích đi vay: Bài toán phân loại.

  • Ước lượng độ dài lịch sử tín dụng/thăm niên tín dụng: Bài toán hồi quy về biến đếm.

  1. Xây dựng mô hình và xác định và phân tích mức độ ảnh hưởng của các yếu tố nhân khẩu và tài chính đến từng quyết định và dự báo, nhằm rút ra các hiểu biết sâu sắc về đặc điểm của người đi vay.

  2. Dựa trên kết quả nghiên cứu, đề xuất các hàm ý quản trị thiết thực nhằm giúp các tổ chức tài chính cải thiện quy trình thẩm định, quản lý rủi ro và phát triển sản phẩm hiệu quả hơn.


3. Đối tượng và phạm vi nghiên cứu

  • Đối tượng nghiên cứu là các hồ sơ vay cá nhân được mô phỏng trong một bộ dữ liệu tổng hợp. Dữ liệu này được xây dựng có chủ đích từ các nguồn thứ cấp công khai (Kaggle), kết hợp các đặc điểm nhân khẩu và tài chính nhằm phản ánh sự phức tạp của quy trình xét duyệt tín dụng.

  • Nghiên cứu sử dụng dữ liệu thứ cấp công khai, do đó không có một khung thời gian khảo sát cụ thể. Trọng tâm của đề tài là phân tích các mối quan hệ vốn có trong dữ liệu, không phải là phân tích xu hướng theo thời gian.


4. Phương pháp nghiên cứu

1. Mô hình dự báo Khả năng được Duyệt vay (Phân loại Nhị phân)

Việc phân tích khả năng chấp thuận hồ sơ vay được thực hiện thông qua mô hình hồi quy nhị phân, trong đó biến phụ thuộc nhận giá trị 1 nếu hồ sơ được duyệt, và 0 nếu bị từ chối. Mô hình Logistic (Logit) được lựa chọn làm mô hình chính để xác định các yếu tố ảnh hưởng đến quyết định phê duyệt. Nhằm kiểm tra độ ổn định và so sánh hiệu suất dự báo, các mô hình thay thế như Probit và Cloglog, cũng được đưa vào phân tích nhằm cung cấp thêm góc nhìn về tác động của các biến đầu vào. Từ đó đánh giá độ chính xác trong dự báo qua các kiểm định thống kê.

2. Mô hình dự báo mục đích đi vay (hồi quy đa thức )

Sau đó, biến mục đích vay vốn — mang tính chất phân loại đa mức — được tách riêng để phân tích bằng mô hình hồi quy đa thức (Multinomial Logistic Regression). Mô hình này kết hợp thêm biến nhị phân về trạng thái phê duyệt cùng các yếu tố như độ tuổi, hình thức sở hữu nhà ở và tỷ lệ khoản vay so với thu nhập. Phân tích mở rộng này giúp nhận diện xu hướng lựa chọn mục đích vay của từng nhóm người vay, qua đó tăng cường tính logic, độ tin cậy và khả năng triển khai thực tế của hệ thống dự báo trong thẩm định tín dụng.

2. Mô hình dự báo thâm niên tín dụng (Biến đếm)

Sử dụng hồi quy Poisson để dự báo Độ dài lịch sử tín dụng/Thâm niên tính dụng (tính theo năm). Nếu kiểm định cho thấy có hiện tượng phân tán quá mức (overdispersion), đề tài sẽ chuyển sang mô hình hồi quy Nhị thức Âm (Negative Binomial) để đảm bảo kết quả ước lượng chính xác và đáng tin cậy hơn.


5. Kết cấu đề tàia

Nội dung bài tiểu luận bao gồm:

Chương 1: Tổng quan lý thuyết và dữ liệu nghiên cứu

Chương 2: Phương pháp nghiên cứu

Chương 3: Phân tích hồi quy

Chương 4: Kết quả mô hình hồi quy

Chương 5: Kết luận


CHƯƠNG 1: TỔNG QUAN LÝ THUYẾT VÀ DỮ LIỆU NGHIÊN CỨU

1.1. Cơ sở lý thuyết

1.1.1 Bối cảnh Quyết định cho vay và Rủi ro Tín dụng

a) Tín dụng Cá nhân và Tầm quan trọng

Tín dụng cá nhân là việc các tổ chức tài chính cung cấp vốn cho khách hàng cá nhân nhằm đáp ứng các nhu cầu như tiêu dùng, mua sắm, giáo dục, đầu tư. Đây là một trong những nguồn thu nhập chính và là trụ cột của ngành ngân hàng hiện đại.

Quyết định cho vay, do đó, phải cân bằng giữa hai mục tiêu: tối đa hóa lợi nhuận và kiểm soát rủi ro.

b) Rủi ro Tín dụng (Credit Risk)

Rủi ro tín dụng là khả năng người vay không thể hoàn trả khoản nợ (cả gốc và lãi) đúng hạn, gây ra tổn thất tài chính cho bên cho vay. Đây là loại rủi ro cố hữu và quan trọng nhất trong hoạt động tín dụng. Mục tiêu của việc thẩm định hồ sơ là dự báo và giảm thiểu rủi ro này. (Thể hiện việc khách hàng đã từng vỡ nợ)

c) Vấn đề Thông tin Bất đối xứng (Asymmetric Information)

Thị trường tín dụng luôn tồn tại vấn đề thông tin bất đối xứng, khi người cho vay biết ít thông tin về khả năng và ý định trả nợ của người vay hơn chính họ.

Hai vấn đề phát sinh chính:

  • Lựa chọn đối nghịch (Adverse Selection): Những người có rủi ro cao nhất thường là những người tích cực tìm kiếm khoản vay.
  • Rủi ro đạo đức (Moral Hazard): Sau khi được vay, khách hàng có thể sử dụng vốn vào các hoạt động rủi ro hơn dự tính.

Giải pháp là dựa vào thu thập và phân tích dữ liệu người vay một cách khoa học.

1.1.2. Các Yếu tố Chính trong Đánh giá Tín dụng

Các yếu tố này vẽ nên bức tranh tổng thể về người vay, giúp tổ chức tín dụng hiểu được bối cảnh, sự ổn định và các cam kết tiềm tàng của họ trong cuộc sống.

*Yếu tố Nhân khẩu học

1. Tuổi tác và Giai đoạn cuộc đời

Tuổi tác là một chỉ số gián tiếp về giai đoạn sự nghiệp và sự ổn định thu nhập. Theo giả thuyết “vòng đời” (life-cycle hypothesis) của nhà kinh tế học Franco Modigliani, người trẻ tuổi thường đang trong giai đoạn tích lũy và thu nhập có tiềm năng tăng trưởng, nhưng công việc và lịch sử tín dụng có thể chưa vững chắc. Ngược lại, người ở độ tuổi trung niên thường có thu nhập ở đỉnh cao và nhiều ràng buộc hơn, tạo động lực trả nợ. Do đó, tuổi tác giúp người cho vay định vị rủi ro và tiềm năng của người vay trong dài hạn.

2. Trình độ học vấn và Tiềm năng thu nhập

Trình độ học vấn thường được xem là một yếu tố dự báo cho tiềm năng thu nhập và sự ổn định công việc. Theo lý thuyết vốn con người (human capital theory), đầu tư vào giáo dục sẽ mang lại lợi tức dưới dạng thu nhập cao hơn và rủi ro thất nghiệp thấp hơn. Mặc dù không phải là yếu tố quyết định, một người có trình độ chuyên môn cao thường được đánh giá là có khả năng duy trì hoặc cải thiện thu nhập tốt hơn, qua đó giảm thiểu rủi ro cho khoản vay.

3. Tình trạng sở hữu nhà ở và Hôn nhân

Sở hữu nhà và tình trạng hôn nhân là những dấu hiệu mạnh mẽ về sự ổn định. Như Thomas J. Stanley và William D. Danko đã chỉ ra trong cuốn sách kinh điển “The Millionaire Next Door”, những người có tài chính vững vàng thường có lối sống ổn định, bao gồm việc sở hữu nhà và duy trì gia đình. Đối với người cho vay, một người đã sở hữu nhà không chỉ cho thấy họ có tài sản thế chấp tiềm năng mà còn chứng tỏ họ đã vượt qua một quy trình thẩm định tài chính nghiêm ngặt trước đó và có xu hướng gắn bó lâu dài tại một nơi, giảm rủi ro “biến mất”.

⟶ cung cấp gợi ý gián tiếp về tính ổn định, giai đoạn cuộc đời, và mức độ trách nhiệm của người vay.

Yếu tố Tài chính (Financial Factors): Là chỉ số định lượng trực tiếp

1. Thu nhập và Tỷ lệ Nợ trên Thu nhập (DTI)

Thu nhập là yếu tố trả lời câu hỏi “Người vay có đủ khả năng trả nợ không?”. Tuy nhiên, thu nhập cao không có ý nghĩa nếu các nghĩa vụ nợ cũng cao. Đó là lý do Tỷ lệ Nợ trên Thu nhập (DTI) cực kỳ quan trọng. Các tổ chức như Cục Bảo vệ Tài chính Người tiêu dùng Hoa Kỳ (CFPB) thường xem DTI là một chỉ số trọng yếu để đánh giá rủi ro. Một tỷ lệ DTI thấp cho thấy người vay có nhiều “dư địa” tài chính để xử lý các khoản thanh toán mới, trong khi DTI cao (thường trên 43-50%) là một cảnh báo đỏ, cho thấy họ có thể đang quá tải về nợ.

2. Điểm và Lịch sử tín dụng

Đây là thước đo uy tín, trả lời câu hỏi “Người vay có đáng tin để trả nợ không?”. Như FICO (Fair Isaac Corporation), tổ chức tiên phong tạo ra điểm tín dụng, nhấn mạnh, lịch sử thanh toán là yếu tố quan trọng nhất (chiếm 35% điểm số). Một lịch sử tín dụng “sạch” với các khoản thanh toán đúng hạn cho thấy thói quen tài chính có trách nhiệm. Ngược lại, các vi phạm như trả chậm, nợ xấu sẽ làm giảm điểm tín dụng nghiêm trọng, khiến việc được phê duyệt khoản vay trở nên khó khăn và tốn kém hơn rất nhiều.

3. Thâm niên Tín dụng

Thâm niên tín dụng (độ dài của lịch sử tín dụng) cung cấp cho người cho vay một lượng dữ liệu đủ lớn để đưa ra quyết định đáng tin cậy. Một người có lịch sử tín dụng dài 10 năm và luôn thanh toán đúng hạn sẽ được tin tưởng hơn nhiều so với một người chỉ mới có lịch sử tín dụng 1 năm, ngay cả khi người mới này chưa từng trả chậm. Lịch sử lâu dài chứng tỏ sự bền bỉ và nhất quán trong hành vi tài chính, một yếu tố mà mọi tổ chức cho vay đều đánh giá cao.

⟶ phản ánh sức khỏe tài chính và uy tín quá khứ của người vay.

Sự kết hợp cả hai nhóm có thể tạo ra mô hình dự báo toàn diện hơn.


1.2. Giới thiệu về bộ dữ liệu

Nghiên cứu này sử dụng một bộ dữ liệu tổng hợp được xây dựng có chủ đích, kết hợp các đặc điểm từ bộ dữ liệu Rủi ro Tín dụng của Kaggle và các biến số từ dữ liệu Phê duyệt Khoản vay. Việc tích hợp hai nguồn dữ liệu này nhằm tạo ra một cái nhìn đa chiều hơn về hành vi tài chính và yếu tố quyết định đến việc phê duyệt khoản vay, từ đó nâng cao độ chính xác trong phân tích và dự đoán. Để giải quyết vấn đề mất cân bằng dữ liệu, kỹ thuật SMOTENC đã được áp dụng nhằm tạo ra các mẫu thiểu số hợp lý. Kết quả là một tập dữ liệu cân bằng, bao gồm cả đặc trưng phân loại và liên tục, mô phỏng sát hơn với sự phức tạp của hồ sơ tài chính trong thực tế, phản ánh đúng những khó khăn và sự đa dạng trong quy trình ra quyết định tín dụng.

Nguồn từ trang web (https://www.kaggle.com/datasets/taweilo/loan-approval-classification-data/data)

library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
dl <- read_excel("D:/tai/loan_data.xlsx")
dl
str(dl)
## tibble [45,000 × 14] (S3: tbl_df/tbl/data.frame)
##  $ person_age                    : num [1:45000] 22 21 25 23 24 21 26 24 24 21 ...
##  $ person_gender                 : chr [1:45000] "female" "female" "female" "female" ...
##  $ person_education              : chr [1:45000] "Master" "High School" "High School" "Bachelor" ...
##  $ person_income                 : num [1:45000] 71948 12282 12438 79753 66135 ...
##  $ person_emp_exp                : num [1:45000] 0 0 3 0 1 0 1 5 3 0 ...
##  $ person_home_ownership         : chr [1:45000] "RENT" "OWN" "MORTGAGE" "RENT" ...
##  $ loan_amnt                     : num [1:45000] 35000 1000 5500 35000 35000 2500 35000 35000 35000 1600 ...
##  $ loan_intent                   : chr [1:45000] "PERSONAL" "EDUCATION" "MEDICAL" "MEDICAL" ...
##  $ loan_int_rate                 : num [1:45000] 16 11.1 12.9 15.2 14.3 ...
##  $ loan_percent_income           : num [1:45000] 0.49 0.08 0.44 0.44 0.53 0.19 0.37 0.37 0.35 0.13 ...
##  $ cb_person_cred_hist_length    : num [1:45000] 3 2 3 2 4 2 3 4 2 3 ...
##  $ credit_score                  : num [1:45000] 561 504 635 675 586 532 701 585 544 640 ...
##  $ previous_loan_defaults_on_file: chr [1:45000] "No" "Yes" "No" "No" ...
##  $ loan_status                   : num [1:45000] 1 0 1 1 1 1 1 1 1 1 ...

File dữ liệu có 45.000 quan sát và 14 biến

Mô tả cho từng cột trong tập dữ liệu:

1.person_age: Tuổi của người đi vay.

2.person_gender: Giới tính của người vay (female/male).

3.person_education: Trình độ học vấn cao nhất của người đi vay.

4.person_income: Thu nhập hàng năm (USD).

5.person_emp_exp: Số năm kinh nghiệm làm việc.

6.person_home_ownership: Tình trạng sở hữu nhà (thuê, sở hữu, thế chấp).

7.loan_amnt: Số tiền vay được yêu cầu.

8.loan_intent: Mục đích của khoản vay.

9.loan_int_rate: Lãi suất vay (%).

10.loan_percent_income:Tỷ lệ khoản vay yêu cầu trên thu nhập.

11.cb_person_cred_hist_length: Thâm niên tín dụng (năm).

12.credit_score: Điểm tín dụng của người vay.

13.previous_loan_defaults_on_file: Chỉ báo về các khoản vay từng bị vỡ nợ trước đó (Yes/No)

14.loan_status(biến mục tiêu): Trạng thái phê duyệt khoản vay: 1 = đã phê duyệt; 0 = bị từ chối

=> Với 6 biến định tính và 8 biến định lượng

1.2.1. Lọc dữ liệu

Thực hiện lấy các biến cần thiết cho chủ đề nghiên cứu lựa chọn

tl <- c("person_age", "person_education", "loan_int_rate", "credit_score", "cb_person_cred_hist_length", "loan_status", "person_home_ownership", "loan_intent","previous_loan_defaults_on_file", "loan_percent_income")
tl_dt <- dl[,tl]

Kết quả sau khi lọc thể hiện có 10 biến với 4 biến định tính và 5 biến định lượng

- Mục tiêu 1 (Mô hình nhị phân)

Thông qua việc phân tích các yếu tố như điểm tín dụng, thu nhập, và mục đích vay, đề tài hướng tới xây dựng một công cụ hỗ trợ ra quyết định trong lĩnh vực cho vay cá nhân, đảm bảo quá trình đánh giá hồ sơ khách hàng diễn ra nhanh chóng và khách quan hơn. Mục tiêu là giảm thiểu sai lệch trong phán đoán và hạn chế rủi ro tín dụng phát sinh từ việc phê duyệt các hồ sơ có khả năng không hoàn trả khoản vay.

## Warning: package 'knitr' was built under R version 4.4.3
## Warning: package 'kableExtra' was built under R version 4.4.3
Bảng 1: Giới thiệu và mô tả các biến đầu vào trong mô hình phân tích quyết định phê duyệt khoản vay giai đoạn đầu
Kiểu dữ liệu Loại biến Tên biến Mô tả
Định tính Biến phụ thuộc loan_status Trạng thái phê duyệt khoản vay: 1 = đã phê duyệt; 0 = bị từ chối
Định tính Biến độc lập person_education Trình độ học vấn cao nhất của người đi vay
Định tính Biến độc lập person_home_ownership Tình trạng sở hữu nhà
Định tính Biến độc lập loan_intent Mục đích của khoản vay
Định tính Biến độc lập previous_loan_defaults_on_file Chỉ báo về các khoản vay từng bị vỡ nợ trước đó (Yes/No)
Định lượng Biến độc lập person_age Tuổi của người đi vay
Định lượng Biến độc lập loan_int_rate Lãi suất vay (%)
Định lượng Biến độc lập loan_percent_income Tỷ lệ khoản vay yêu cầu trên thu nhập
Định lượng Biến độc lập credit_score Điểm tín dụng của người vay
Định lượng Biến độc lập cb_person_cred_hist_length Thâm niên tín dụng (năm)

- Mục tiêu 2 đa biểu hiện (Multinomial Logistic Regression)

Tiếp nối mô hình nhị phân về trạng thái phê duyệt, bước này phân tích biến mục đích vay vốn — dạng định tính đa mức — bằng hồi quy đa thức. Các yếu tố được xem xét gồm tuổi, sở hữu nhà ở, tỷ lệ vay/thu nhập và kết quả xét duyệt. Mô hình giúp nhận diện sự khác biệt trong xu hướng lựa chọn mục đích vay giữa các nhóm người vay, góp phần tăng độ tin cậy và khả năng ứng dụng trong thẩm định tín dụng.

# Gọi thư viện
library(knitr)
library(kableExtra)

# Tạo bảng mô tả các biến
mo_ta_bien <- data.frame(
  Kiểu_dữ_liệu = c(rep("Định tính", 3), 
                rep("Định lượng", 2)),
  Loại_biến = c("Biến phụ thuộc", rep("Biến độc lập", 4)),
  Ten_bien = c("loan_intent", "loan_status", "person_home_ownership", 
               "person_age", "loan_percent_income"),
  Ghi_chu = c("Mục đích vay vốn",
              "Trạng thái phê duyệt khoản vay: 1 = đã phê duyệt; 0 = bị từ chối",
              "Tình trạng sở hữu nhà",
              "Tuổi người đi vay",
              "Tỷ lệ khoản vay yêu cầu trên thu nhập")
)

# Xuất bảng
kable(mo_ta_bien,
      caption = "Bảng 2: Mô tả các biến trong mô hình dự báo mục đích vay",
      col.names = c("Kiểu dữ liệu","Loại biến", "Tên biến", "Mô tả"),
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE,
                position = "center") %>%
  row_spec(0, bold = TRUE, background = "#DDEBF7")
Bảng 2: Mô tả các biến trong mô hình dự báo mục đích vay
Kiểu dữ liệu Loại biến Tên biến Mô tả
Định tính Biến phụ thuộc loan_intent Mục đích vay vốn
Định tính Biến độc lập loan_status Trạng thái phê duyệt khoản vay: 1 = đã phê duyệt; 0 = bị từ chối
Định tính Biến độc lập person_home_ownership Tình trạng sở hữu nhà
Định lượng Biến độc lập person_age Tuổi người đi vay
Định lượng Biến độc lập loan_percent_income Tỷ lệ khoản vay yêu cầu trên thu nhập

- Mục tiêu 3 (Mô hình Poisson)

Nghiên cứu này tập trung vào việc mô hình hóa thâm niên tín dụng của khách hàng — một biến đếm thể hiện khoảng thời gian (tính theo năm) kể từ khi khách hàng bắt đầu sử dụng các dịch vụ tín dụng. Mục tiêu là xác định các yếu tố nhân khẩu học và tài chính có ảnh hưởng đến mức độ kinh nghiệm tín dụng. Thông qua việc phân tích chủ yếu các biến định lượng như độ tuổi, điểm tín dụng và thu nhập, nghiên cứu hướng đến việc làm rõ mối liên hệ giữa đặc điểm cá nhân và hành vi sử dụng tín dụng. Kết quả kỳ vọng sẽ giúp phân nhóm khách hàng theo đặc điểm tín dụng, từ đó hỗ trợ các tổ chức tài chính trong việc phân loại và đánh giá hồ sơ vay một cách hợp lý và hiệu quả hơn.

Bảng 3: Giới thiệu và mô tả các biến đầu vào trong mô hình thâm niên tín dụng
Kiểu dữ liệu Loại biến Tên biến Mô tả
Định lượng Biến phụ thuộc cb_person_cred_hist_length Thâm niên tín dụng (năm)
Định lượng Biến độc lập person_age Tuổi của người đi vay
Định lượng Biến độc lập loan_int_rate Lãi suất vay (%)
Định lượng Biến độc lập loan_percent_income Tỷ lệ khoản vay yêu cầu trên thu nhập
Định lượng Biến độc lập credit_score Điểm tín dụng của người vay

1.2.2. Kiểm tra giá trị bị thiếu

Bước quan trọng cần xử lý vì nếu bỏ qua có thể làm sai lệch kết quả phân tích. Cách khắc phục thường dùng bao gồm loại bỏ quan sát, thay thế bằng giá trị trung bình, mode hoặc sử dụng kỹ thuật dự đoán để điền dữ liệu.

colSums(is.na(tl_dt))
##                     person_age               person_education 
##                              0                              0 
##                  loan_int_rate                   credit_score 
##                              0                              0 
##     cb_person_cred_hist_length                    loan_status 
##                              0                              0 
##          person_home_ownership                    loan_intent 
##                              0                              0 
## previous_loan_defaults_on_file            loan_percent_income 
##                              0                              0

1.2.3. Chuyển đổi đổi dữ liệu (kiểu factor)

Bước thực hiện để giúp R nhận diện đúng các biến phân loại, phục vụ cho việc phân tích, mô hình hóa và trực quan hóa dữ liệu chính xác hơn.

df <- lapply(tl_dt, function(x) {  if(is.character(x)) factor(x) else x})# lapply() áp dụng hàm cho từng cột trong df_dt.

Dòng lệnh sau thực hiện việc chuyển đổi tất cả các cột có kiểu dữ liệu character trong tl_dt thành kiểu factor, giữ nguyên các cột khác không đổi.


ChƯƠNG 2: PHƯƠNG PHÁP NGHIÊN CỨU

2.1. Các chỉ số đo lường hiệu ứng (Effect Measures)

2.1.1. Lý thuyết bảng ngẫu nhiên (Contingency Table & Probability Models)

Khái niệm:

Bảng ngẫu nhiên là một công cụ thống kê dùng để trình bày tần suất hoặc xác suất xảy ra của các biến phân loại (categorical variables). Qua đó, bảng giúp phân tích mối quan hệ giữa hai hoặc nhiều biến rời rạc, ví dụ như giới tính và loại hiện vật được phát hiện trong khảo cổ học.

Mục đích sử dụng:

  • Kiểm tra mối liên hệ hoặc tính độc lập giữa các biến phân loại.

  • Mô hình hóa xác suất xảy ra của một sự kiện trong những điều kiện cụ thể.

  • Là nền tảng để áp dụng các mô hình xác suất như:

    • Phân phối Poisson

    • Phân phối đa thức (Multinomial)

So sánh xác suất giữa hai nhóm

Giả sử bảng 2 × 2 có dạng:

Nhóm (X) Kết quả (Y) Thành công (\(y_1\)) Thất bại (\(y_2\)) Tổng hàng (\(n_{i.}\))
Nhóm 1 (\(x_1\)) \(n_{11}\) \(n_{12}\) \(n_{1.}\)
Nhóm 2 (\(x_2\)) \(n_{21}\) \(n_{22}\) \(n_{2.}\)
Tổng cột \(n_{.1}\) \(n_{.2}\) \(n\)

Tỷ lệ thành công

  • Nhóm 1: \(\hat{p}_1 = \dfrac{n_{11}}{n_{1.}}\)
  • Nhóm 2: \(\hat{p}_2 = \dfrac{n_{21}}{n_{2.}}\)

a) Hiệu số hai tỷ lệ (Difference in Proportions)

Công thức tính:

\[ D = p_1 - p_2 \]

Ước lượng điểm:

\[ \hat{D} = \hat{p}_1 - \hat{p}_2 = \dfrac{n_{11}}{n_{1.}} - \dfrac{n_{21}}{n_{2.}} \]

Giải thích: Giá trị \(D\) nằm trong khoảng [-1,1]

  • Nếu \(D > 0\): Nhóm 1 có tỷ lệ thành công cao hơn Nhóm 2
  • Nếu \(D < 0\): Nhóm 1 có tỷ lệ thành công thấp hơn Nhóm 2
  • Nếu \(D = 0\): Không có sự khác biệt

Sai số chuẩn:

\[ SE(\hat{D}) = \sqrt{ \dfrac{\hat{p}_1 (1 - \hat{p}_1)}{n_{1.}} + \dfrac{\hat{p}_2 (1 - \hat{p}_2)}{n_{2.}} } \]

Khoảng tin cậy 95%:

\[ \hat{D} \pm z_{\alpha/2} \times SE(\hat{D}) \quad \text{(với } z_{\alpha/2} \approx 1.96 \text{)} \]

Tỷ số nguy cơ (Relative Risk - RR)

Công thức tính:

\[ RR = \dfrac{p_1}{p_2} \]

Ước lượng điểm:

\[ \widehat{RR} = \dfrac{\hat{p}_1}{\hat{p}_2} = \dfrac{n_{11}/n_{1.}}{n_{21}/n_{2.}} \]

Giải thích: Giá trị RR nằm trong khoảng [0, \(\infty\)]

  • Nếu \(RR > 1\): Nguy cơ thành công ở Nhóm 1 cao hơn
  • Nếu \(RR < 1\): Nguy cơ thành công ở Nhóm 1 thấp hơn
  • Nếu \(RR = 1\): Không có sự khác biệt

Sai số chuẩn:

\[ SE\left( \log(\widehat{RR}) \right) = \sqrt{ \dfrac{n_{12}}{n_{11} n_{1.}} + \dfrac{n_{22}}{n_{21} n_{2.}} } \]

Khoảng tin cậy 95%:

\[ \log(\widehat{RR}) \pm z_{\alpha/2} \times SE(\log(\widehat{RR})) \]

b) Tỷ số chênh (Odds Ratio - OR)

Odds:

  • Nhóm 1: \(\text{Odds}_1 = \dfrac{n_{11}}{n_{12}}\)
  • Nhóm 2: \(\text{Odds}_2 = \dfrac{n_{21}}{n_{22}}\)

Tỷ số chênh:

\[ OR = \dfrac{\text{Odds}_1}{\text{Odds}_2} = \dfrac{n_{11} \cdot n_{22}}{n_{12} \cdot n_{21}} \]

Giải thích: Giá trị RR nằm trong khoảng [\(\infty\),0]

  • Nếu \(OR > 1\): Odds thành công ở Nhóm 1 cao hơn
  • Nếu \(OR < 1\): Odds thành công ở Nhóm 1 thấp hơn
  • Nếu \(OR = 1\): Hai biến độc lập

Sai số chuẩn: Tương tự như tỷ số nguy cơ (RR), phân phối của \(\widehat{OR}\) thường không đối xứng, vì vậy ta thường sử dụng \(\log(\widehat{OR})\) để làm việc và phân tích.

Theo Woolf (1955), sai số chuẩn của \(\log(\widehat{OR})\) được xác định như sau:

\[ SE(\log(\widehat{OR})) = \sqrt{ \dfrac{1}{n_{11}} + \dfrac{1}{n_{12}} + \dfrac{1}{n_{21}} + \dfrac{1}{n_{22}} } \]

Khoảng tin cậy 95%:

\[ \log(\widehat{OR}) \pm z_{\alpha/2} \times SE(\log(\widehat{OR})) \]

2.2. Nền tảng các Mô hình Dự báo

2.2.1. Mô hình Phân loại (Classification Models)

Khi bạn có biến kết quả dạng nhị phân (0/1, Có/Không), bạn sẽ sử dụng mô hình hồi quy tổng quát (GLM) với họ phân phối binomial.
Sự khác biệt giữa Logit, Probit và Clog-log nằm ở hàm liên kết (link function), quyết định cách mô hình chuyển đổi từ tổ hợp tuyến tính các biến độc lập sang thang đo xác suất.

Mô hình hồi quy nhị phân: Logit, Probit và Cloglog

Mô hình hồi quy nhị phân thuộc họ mô hình tuyến tính tổng quát (GLM) với biến phản hồi là nhị phân (0 hoặc 1), thường tuân theo phân phối Bernoulli hoặc Binomial. Mỗi mô hình sử dụng một hàm liên kết (link function) khác nhau để kết nối xác suất xảy ra sự kiện với tổ hợp tuyến tính của các biến giải thích.

1. Hồi quy Logit (Logistic Regression)

  • Thành phần ngẫu nhiên: \(Y \sim \text{Bernoulli}(\pi)\)
  • Hàm liên kết: \[ \text{logit}(\pi) = \log\left( \frac{\pi}{1 - \pi} \right) \]

Trong đó, \(\pi = P(Y = 1 \mid X)\) là xác suất xảy ra sự kiện. Mô hình tuyến tính:

\[ \log\left( \frac{\pi}{1 - \pi} \right) = \beta_0 + \beta_1 X_1 + \dots + \beta_k X_k \]

Hàm nghịch đảo (inverse link):

\[ \pi = \frac{\exp(\beta_0 + \beta_1 X_1 + \dots + \beta_k X_k)}{1 + \exp(\beta_0 + \beta_1 X_1 + \dots + \beta_k X_k)} \]

Mô hình logit giúp diễn giải thông qua Odds Ratio: mỗi hệ số \(\beta_j\) tương ứng với sự thay đổi \(\exp(\beta_j)\) lần của tỷ số chênh (odds) khi \(X_j\) tăng một đơn vị.

2. Hồi quy Probit

  • Hàm liên kết: \[ \text{probit}(\pi) = \Phi^{-1}(\pi) \]

Trong đó \(\Phi^{-1}\)hàm phân vị (inverse CDF) của phân phối chuẩn chuẩn hóa.

Xác suất mô hình:

\[ \pi = \Phi(Z) = \int_{-\infty}^{Z} \frac{1}{\sqrt{2\pi}} e^{-\frac{t^2}{2}} dt \]

Trong đó:

\(Z = \beta_0 + \beta_1 X_1 + \dots + \beta_k X_k\)

Hệ số Probit phản ánh sự thay đổi trong điểm z (z-score) chứ không dễ diễn giải trực tiếp như Odds Ratio trong Logit, nên thường cần tính hiệu ứng biên để minh hoạ.

3. Hồi quy Complementary Log-log (Cloglog)

  • Hàm liên kết: \[ \text{cloglog}(\pi) = \log\left( -\log(1 - \pi) \right) \]

  • Hàm nghịch đảo: \[ \pi = 1 - \exp\left( -\exp(\eta) \right), \quad \text{với } \eta = \beta_0 + \beta_1 X_1 + \dots + \beta_k X_k \]

Hàm liên kết này bất đối xứng, rất phù hợp khi phân tích các sự kiện hiếm hoặc dữ liệu mất cân bằng. Cloglog có tốc độ tăng xác suất nhanh hơn khi \(\pi\) gần 1 và chậm hơn khi \(\pi\) gần 0, giúp mô tả hiện tượng thiên lệch một chiều.

Việc diễn giải các hệ số \(\beta_j\) trong cloglog không trực quan, nhưng vẫn cho thấy hướng và mức độ ảnh hưởng của biến giải thích tới xác suất xảy ra sự kiện.

Bảng tóm tắt so sánh

Mô hình Hàm liên kết (Link function) Tính đối xứng Diễn giải hệ số Phù hợp với dữ liệu
Logit \(\log\left(\frac{p}{1 - p}\right)\) Tỷ số chênh (OR) Phổ biến, dễ hiểu, sự kiện không quá hiếm
Probit \(\Phi^{-1}(p)\) Biến ẩn (z-score) Mô hình kinh tế lượng, có yếu tố tiềm ẩn
Clog-log \(\log(-\log(1 - p))\) Không Rủi ro tương đối (RR) Sự kiện hiếm hoặc mất cân bằng nghiêm trọng

4. Mô hình hồi quy đa phạm trụ Multinomial Logistic

Mô hình Multinomial Logistic Regression (MLR) mở rộng từ hồi quy logistic nhị phân, được sử dụng khi biến phụ thuộc là biến định tính không thứ tự với từ 3 mức trở lên.

Mô hình chọn một mức làm phạm trù tham chiếu. Với mỗi mức \(j \neq k\) (k là mức tham chiếu), phương trình logit có dạng:

\[ \log\left( \frac{P(Y = j \mid X)}{P(Y = k \mid X)} \right) = \beta_{j0} + \beta_{j1}X_1 + \cdots + \beta_{jp}X_p \]

  • \(\beta_{jk}\): hệ số hồi quy mô tả thay đổi log-odds của mức \(j\) so với mức tham chiếu khi \(X_k\) tăng một đơn vị.
  • Hàm liên kết: logit tổng quát
  • Tham số ước lượng bằng: MLE (Maximum Likelihood Estimation)

Giả định:

  • Các quan sát độc lập

  • Không có đa cộng tuyến nghiêm trọng

  • IIA (Independence of Irrelevant Alternatives): xác suất chọn một mức không bị ảnh hưởng bởi mức khác

Ứng dụng: nó thường dùng trong các nghiên cứu lựa chọn phương tiện, ngành nghề, thương hiệu sản phẩm.

5. Mô hình Hồi quy Biến đếm (Count Regression Models)

a) Hồi quy Poisson

Áp dụng cho biến “thâm niên tín dụng” (là biến đếm):

Phương trình:

\[ \log(\lambda) = \beta_0 + \beta_1 X_1 + \dots + \beta_k X_k \]

  • \(\lambda\): số năm tín dụng trung bình
  • Giả định: trung bình = phương sai

b) Hồi quy Nhị thức Âm (Negative Binomial)

Dùng khi có hiện tượng overdispersion (phương sai lớn hơn trung bình).
⟶ Linh hoạt và chính xác hơn trong dữ liệu thực tế.

Việc chọn giữa PoissonNhị thức âm phụ thuộc vào kiểm định phân tán của dữ liệu.

- Ma trận nhầm lẫn

Ma trận nhầm lẫn (Confusion Matrix) là một bảng tóm tắt hiệu suất của mô hình phân loại. Nó thể hiện số lần mô hình dự đoán đúng hoặc sai cho từng lớp, qua đó giúp đánh giá độ chính xác và loại sai sót mô hình mắc phải.

2. Cấu trúc ma trận nhầm lẫn (2 lớp: Positive / Negative)

Giả sử “Positive” là lớp quan tâm (ví dụ: phê duyêt khoản vay) và “Negative” là lớp còn lại (từ chối khoản vay). Ma trận có dạng:

Dự đoán: Positive Dự đoán: Negative
Thực tế: Positive True Positive (TP) False Negative (FN)
Thực tế: Negative False Positive (FP) True Negative (TN)

Giải thích:

  • TP (True Positive): Dự đoán đúng trường hợp thực sự là Positive
  • TN (True Negative): Dự đoán đúng trường hợp thực sự là Negative
  • FP (False Positive): Dự đoán sai là Positive (thực tế là Negative) – Lỗi loại I (báo động giả)
  • FN (False Negative): Dự đoán sai là Negative (thực tế là Positive) – Lỗi loại II (bỏ sót)

3. Các chỉ số đánh giá mô hình phân loại

Từ các giá trị TP, TN, FP, FN, ta tính được các chỉ số đánh giá hiệu suất:

a. Accuracy (Độ chính xác)

Tỷ lệ dự đoán đúng trên tổng số quan sát.

\[ Accuracy = \frac{TP + TN}{TP + TN + FP + FN} \]

Lưu ý: Accuracy có thể gây hiểu nhầm nếu dữ liệu mất cân bằng (ví dụ: quá nhiều khách bị từ chối vay – Negative), vì chỉ cần mô hình dự đoán “từ chối” cho tất cả cũng sẽ đạt accuracy cao.

b. Precision (Độ chuẩn xác)

Trong số các dự đoán là Positive, có bao nhiêu là đúng?

\[ Precision = \frac{TP}{TP + FP} \]

Ý nghĩa: Precision đặc biệt quan trọng trong bối cảnh tín dụng, khi việc duyệt nhầm khoản vay cho khách hàng không đủ điều kiện (False Positive) có thể gây ra rủi ro nợ xấu và tổn thất nghiêm trọng cho bên cho vay.

→ Precision cao giúp đảm bảo rằng những người được duyệt vay thực sự có khả năng hoàn trả.

c. Recall (Độ nhạy / Sensitivity)

Mô hình phát hiện đúng bao nhiêu trong số các trường hợp Positive thật?

\[ Recall = \frac{TP}{TP + FN} \]

Ý nghĩa: Recall quan trọng khi việc bỏ sót khách hàng đủ điều kiện vay (False Negative) khiến tổ chức tài chính mất đi khách hàng tiềm năng, ảnh hưởng đến doanh thu và sự hài lòng của khách.

d. F1-Score

Chỉ số cân bằng giữa Precision và Recall. Là trung bình điều hòa giữa hai chỉ số này.

\[ F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall} \]

Ý nghĩa: Phù hợp trong trường hợp dữ liệu mất cân bằng và cần cân nhắc đồng thời cả Precision và Recall.

2.2.2. Ước lượng tham số bằng MLE trong hồi quy Logistic

  • Hàm xác suất (Hàm Sigmoid)

Trong hồi quy logistic, xác suất một quan sát \(y_i = 1\) được xác định bởi hàm sigmoid (hay còn gọi là hàm logistic):

\[ p_i = P(Y_i = 1 \mid \boldsymbol{x}_i) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_{1i} + \beta_2 X_{2i} + \cdots + \beta_k X_{ki})}} \]

Hàm sigmoid đảm bảo \(0 < p_i < 1\), phù hợp với yêu cầu của một xác suất.

  • Nguyên tắc của MLE

Phương pháp Ước lượng Hợp lý Cực đại (MLE) tìm bộ tham số \(\boldsymbol{\beta} = (\beta_0, \beta_1, \ldots, \beta_k)\) sao cho xác suất xảy ra của toàn bộ dữ liệu quan sát là lớn nhất.

Với từng quan sát \(i\):

  • Nếu \(y_i = 1\): xác suất là \(p_i\)
  • Nếu \(y_i = 0\): xác suất là \(1 - p_i\)

Do đó, hàm hợp lý tổng thể là:

\[ L(\boldsymbol{\beta}) = \prod_{i=1}^{N} p_i^{y_i} (1 - p_i)^{1 - y_i} \]

Trong đó:

\[ p_i = \frac{1}{1 + e^{-\boldsymbol{x}_i^\top \boldsymbol{\beta}}} \]

  • Hàm log-likelihood

Để dễ tính toán, ta lấy log của hàm hợp lý (log-likelihood):

\[ \ell(\boldsymbol{\beta}) = \log L(\boldsymbol{\beta}) = \sum_{i=1}^{N} \left[ y_i \cdot \log(p_i) + (1 - y_i) \cdot \log(1 - p_i) \right] \]

  • Tối đa hóa hàm log-likelihood

Để tìm bộ tham số tối ưu, ta giải hệ phương trình đạo hàm riêng theo từng \(\beta_j\):

\[ \frac{\partial \ell(\boldsymbol{\beta})}{\partial \beta_j} = 0, \quad \text{với } j = 0, 1, \ldots, k \]

Vì hệ phương trình không thể giải được bằng cách thông thường (không có công thức giải cụ thể), ta cần sử dụng các phương pháp tính toán gần đúng như phép lặp Newton-Raphson hoặc tìm dần lời giải bằng cách điều chỉnh từng bước (Gradient Descent) để tìm ra nghiệm.

2.2.3. Kiểm định lựa chọn mô hình và đánh giá độ phù hợp của mô hình

a) Lựa chọn mô hình: AIC & BIC

Dùng để so sánh và chọn ra mô hình tốt nhất trong nhiều mô hình. Nguyên tắc chung là tìm sự cân bằng giữa độ chính xác (mức độ phù hợp với dữ liệu) và độ đơn giản (ít tham số).

a) AIC (Akaike Information Criterion):

  • Mục đích: Chọn mô hình có khả năng dự đoán tốt mà không quá phức tạp.

  • Cách dùng: Ưu tiên mô hình có giá trị AIC thấp hơn giữa các ứng viên (mô hình).

  • Công thức:

\[ AIC = -2\ell_{fit} + 2p \]

Trong đó: - \(\ell_{fit}\): log-likelihood (đo độ phù hợp của mô hình với dữ liệu)
- \(p\): số lượng tham số trong mô hình

b) BIC (Bayesian Information Criterion):

  • Mục đích: Giống AIC nhưng áp dụng mức phạt nặng hơn cho các mô hình phức tạp khi kích thước mẫu lớn.

  • Cách dùng: Chọn mô hình có giá trị BIC thấp nhất.

  • Công thức:

\[ BIC = -2\ell_{fit} + p \log(N) \]

Trong đó: - \(N\): số lượng quan sát trong mẫu
- Các ký hiệu khác giống AIC

BIC thường có xu hướng chọn các mô hình đơn giản hơn so với AIC, đặc biệt khi \(N\) lớn.

b) Đánh giá độ phù hợp của mô hình

Dùng để đánh giá chất lượng của một mô hình đã chọn.

- Brier Score:

  • Mục đích: Đo lường độ chính xác của xác suất mà mô hình dự đoán (ví dụ: dự đoán 70% khả năng bị bệnh).

  • Cách dùng: Điểm số càng gần 0 càng tốt. (0 = hoàn hảo, 0.25 = vô dụng).

c) Đánh giá khả năng phân loại: ROC & AUC

Dùng để đánh giá khả năng phân biệt giữa các lớp trong mô hình nhị phân (ví dụ: phân biệt “phê duyệt khoản vay” và “từ chối khoản vay”).

Đường cong ROC (Receiver Operating Characteristic)

  • Mô tả:
    ROC là đồ thị biểu diễn sự đánh đổi giữa:

    • True Positive Rate (TPR): tỷ lệ phát hiện đúng các trường hợp dương tính (hay còn gọi là Recall).
    • False Positive Rate (FPR): tỷ lệ báo động giả – số âm tính bị dự đoán sai là dương tính.
  • Công thức:

    \[ \text{TPR} = \frac{TP}{TP + FN}, \quad \text{FPR} = \frac{FP}{FP + TN} \]

  • Diễn giải:
    Đường ROC càng cong về góc trên bên trái thì mô hình càng tốt (TPR cao và FPR thấp).

AUC (Area Under the ROC Curve)

  • Mô tả:
    AUC là diện tích dưới đường cong ROC, thể hiện xác suất mà mô hình phân biệt đúng giữa một trường hợp dương tính và một trường hợp âm tính được chọn ngẫu nhiên.

  • Giá trị AUC:

    • AUC = 1: Mô hình phân loại hoàn hảo
    • AUC ≈ 0.5: Mô hình ngẫu nhiên, không phân biệt được
    • AUC > 0.8: Mô hình hiệu quả tốt
  • Công thức tổng quát:

    \[ \text{AUC} = \int_0^1 \text{TPR}(\text{FPR}) \, d\text{FPR} \]

Ghi chú: ROC và AUC cung cấp đánh giá tổng thể về hiệu suất mô hình qua mọi ngưỡng phân loại, không bị giới hạn ở ngưỡng 0.5 như ma trận nhầm lẫn.


CHƯƠNG 3: PHÂN TÍCH THỐNG KÊ

3.1. Thống kê mô tả

3.1.1. Biến định tính

a) Trạng thái phê duyệt khoản vay (loan_status)

  • Lặp bảng tần số, tần suất
# Lập bảng tần số của biến 
freq_tbl <- table(tl_dt$loan_status)
# Chuyển bảng tần số thành data frame
freq_df <- as.data.frame(freq_tbl)
# Đổi tên cột cho dễ dùng
colnames(freq_df) <- c("Trạng thái phê duyệt khoản vay", "Count")
# Tính phần trăm
freq_df$Percent <- freq_df$Count / sum(freq_df$Count) * 100
# In ra bảng 
freq_df[, c("Trạng thái phê duyệt khoản vay", "Count", "Percent")]
  • Thể hiện ở biểu đồ
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(freq_df, aes(x = "", y = Count, fill = `Trạng thái phê duyệt khoản vay`)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +  # Biểu đồ tròn
  geom_text(aes(label = sprintf("%.1f%%", Percent)),
            position = position_stack(vjust = 0.5), size = 5) +
  labs(title = "Phân bổ trạng thái phê duyệt khoản vay",
    x = NULL, y = NULL, fill = "Trạng thái phê duyệt khoản vay") +
  scale_fill_brewer(palette = "Set1") +  # chữ S viết hoa
  theme_void()

Nhận xét

  • Biểu đồ cho thấy sự phân bổ của các hồ sơ vay, với một sự chênh lệch rõ rệt giữa hai trạng thái được phê duyệt (ký hiệu 1) và bị từ chối (ký hiệu 0).

  • Cụ thể, nhóm hồ sơ bị từ chối chiếm tới 77,8%, cao gần gấp bốn lần so với nhóm được phê duyệt (22,2%), tương ứng với mức chênh lệch 55,5%. Sự phân bổ này cho thấy bộ dữ liệu bị mất cân đối đáng kể, với việc bị từ chối là kết quả chiếm tỷ lệ cao nhất.

b) Trình độ học vấn cao nhất từ người đi vay (person_education)

  • Lặp bảng tần số, tần suất
# Lập bảng tần số của biến 
freq_tbl1 <- table(tl_dt$person_education)
# Chuyển bảng tần số thành data frame
freq_df1 <- as.data.frame(freq_tbl1)
# Đổi tên cột cho dễ dùng
colnames(freq_df1) <- c("Trình độ học vấn", "Count")
# Tính phần trăm
freq_df1$Percent <- freq_df1$Count / sum(freq_df1$Count) * 100
# In ra bảng
freq_df1[, c("Trình độ học vấn", "Count", "Percent")]
  • Thể hiện ở biểu đồ
ggplot(freq_df1, aes(x = `Trình độ học vấn`, y = Count, fill = `Trình độ học vấn`)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = sprintf("%.1f%%", Percent)), vjust = -0.5, size = 4) +
  labs(title = "Tỷ lệ người đi vay theo trình độ học vấn cao nhất",
    x = "Trình độ học vấn", y = "Số lượng",
    fill = "Trình độ học vấn") +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal() +
  theme(legend.position = "none")

Nhận xét

  • Nhóm có bằng Cử nhân (Bachelor) chiếm tỷ lệ cao nhất với 29,8%, phản ánh đây là đối tượng vay phổ biến nhất trong tập dữ liệu.

  • Nhóm Cao đẳng (Associate) và Trung học (High School) bám sát phía sau với tỷ lệ gần tương đương (26,6% – 26,7%), cho thấy nhu cầu vay cũng rất phổ biến ở những người có trình độ học vấn trung bình.

  • Nhóm Tiến sĩ (Doctorate) chỉ chiếm 1,4%, là mức thấp nhất, có thể phản ánh số lượng mẫu nhỏ, mức độ nhu cầu vay thấp hơn, hoặc xu hướng ít tiếp cận tín dụng từ nhóm có học vấn cao.

→ Sự phân bố này cho thấy trình độ học vấn là một đặc điểm cá nhân đáng quan tâm, có thể tác động đến xu hướng tiếp cận tín dụng, mức độ rủi ro và hành vi tài chính của người vay.

c) Tình trạng sở hữu nhà(person_home_ownership)

  • Lặp bảng tần số, tần suất
# Lập bảng tần số của biến 
freq_tbl5 <- table(tl_dt$person_home_ownership)
# Chuyển bảng tần số thành data frame
freq_df5 <- as.data.frame(freq_tbl5)
# Đổi tên cột cho dễ dùng
colnames(freq_df5) <- c("Tình trạng sở hữu nhà", "Count")
# Tính phần trăm
freq_df5$Percent <- freq_df5$Count / sum(freq_df5$Count) * 100
# In ra bảng 
  • Thể hiển biểu đồ
ggplot(freq_df5, aes(x = `Tình trạng sở hữu nhà`, y = Count, fill = `Tình trạng sở hữu nhà`)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = sprintf("%.1f%%", Percent)), vjust = -0.5, size = 4) +
  labs(title = "Tỷ lệ người đi vay theo tình trạng sở hữu nhà",
    x = "Tình trạng sở hữu nhà",
    y = "Số lượng") +
  scale_fill_brewer(palette = "Paired") +
  theme_minimal() +
  theme(legend.position = "none")

Nhận xét

Biểu đồ cho thấy sự phân bổ của người đi vay theo tình trạng sở hữu nhà. Có hai nhóm chiếm tỷ lệ áp đảo:

  • Nhóm đang thuê nhà (RENT) chiếm tỷ lệ cao nhất với 52,1%, phản ánh đây là đối tượng có nhu cầu vay phổ biến.

  • Nhóm đang trả góp mua nhà (MORTGAGE) đứng thứ hai với 41,1%, thể hiện nhóm khách hàng đang trong quá trình tích lũy tài sản và thường gắn liền với các khoản vay dài hạn.

  • Tổng cộng, hai nhóm này chiếm đến hơn 93% tổng số người đi vay. Ngược lại, nhóm đã sở hữu nhà hoàn toàn (OWN) chỉ chiếm một phần nhỏ (6,6%) và nhóm Khác (OTHER) gần như không đáng kể.

d) Mục đích đi vay (loan_intent)

  • Lặp bảng tần số, tần suất
# Lập bảng tần số của biến 
freq_tbl4 <- table(tl_dt$loan_intent)
# Chuyển bảng tần số thành data frame
freq_df4 <- as.data.frame(freq_tbl4)
# Đổi tên cột cho dễ dùng
colnames(freq_df4) <- c("Mục đích đi vay", "Count")
# Tính phần trăm
freq_df4$Percent <- freq_df4$Count / sum(freq_df4$Count) * 100
# In ra bảng 
freq_df4[, c("Mục đích đi vay", "Count", "Percent")]
  • Thể hiện ở biểu đồ
ggplot(freq_df4, aes(x = `Mục đích đi vay`, y = Count, fill = `Mục đích đi vay`)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = sprintf("%.1f%%", Percent)), vjust = 0, size = 4) +
  labs(title = "Tỷ lệ người đi vay phân bổ theo mục đích",
    x = "Mục đích đi vay",
    y = "Số lượng") +
  scale_fill_brewer(palette = "Pastel1") +
  theme_minimal() + theme(axis.text.x = element_text(angle = 30, hjust = 1)) +
  theme(legend.position = "none")

Nhận xét

Biểu đồ cho thấy sự phân bố khá cân đối giữa các mục đích vay vốn, phản ánh sự đa dạng nhu cầu tài chính của khách hàng cá nhân.

  • Học tập (EDUCATION) là mục đích phổ biến nhất, chiếm 20,3%, cho thấy nhu cầu tài trợ chi phí học tập là rất đáng kể.

  • Các nhóm Chữa bệnh (MEDICAL), Đầu tư kinh doanh (VENTURE), Tiêu dùng cá nhân (PERSONAL) và Tái cấu trúc nghĩa vụ tài chính (DEBTCONSOLIDATION) có tỷ lệ tương đối đồng đều, dao động từ 16% đến 19%.

  • Sửa chữa nhà ở (HOMEIMPROVEMENT) là mục đích ít phổ biến nhất, chiếm 10,6%, cho thấy loại hình này ít được lựa chọn hơn trong hồ sơ vay hiện tại.

Việc vay để tái cấu trúc nghĩa vụ tài chính thường liên quan đến việc gộp các khoản nợ nhỏ thành một khoản duy nhất nhằm đơn giản hoá việc trả nợ và giảm áp lực chi phí hàng tháng.

e) Tình trạng vỡ nợ trước đây của người vay (previous_loan_defaults_on_file)

  • Lặp bảng tần số, tần suất
# Lập bảng tần số của biến 
freq_tbl4 <- table(dl$previous_loan_defaults_on_file)
# Chuyển bảng tần số thành data frame
freq_df4 <- as.data.frame(freq_tbl4)
# Đổi tên cột cho dễ dùng
colnames(freq_df4) <- c("Tình trạng vỡ nợ trước đây", "Count")
# Tính phần trăm
freq_df4$Percent <- freq_df4$Count / sum(freq_df4$Count) * 100
# In ra bảng
freq_df4[, c("Tình trạng vỡ nợ trước đây", "Count", "Percent")]
  • Thể hiện trên biểu đồ
ggplot(freq_df4, aes(x = "", y = Count, fill = `Tình trạng vỡ nợ trước đây`)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +  # Chuyển thành biểu đồ tròn
  geom_text(aes(label = sprintf("%.1f%%", Percent)), 
            position = position_stack(vjust = 0.5), size = 5) +
  labs(title = "Tỷ lệ người vay theo tình trạng vỡ nợ trước đây",
    x = NULL, y = NULL, fill = "Tình trạng vỡ nợ trước đây"  ) +
  scale_fill_brewer(palette = "Set3") +
  theme_void()  # Bỏ khung trục cho biểu đồ tròn gọn đẹp

Nhận xét

  • Biểu đồ thể hiện sự phân bố gần như cân bằng giữa hai nhóm người vay: nhóm từng vỡ nợ (Yes) chiếm 50,8%, trong khi nhóm chưa từng vỡ nợ (No) chiếm 49,2%.

  • Mức chênh lệch chỉ khoảng 1,6%, cho thấy không có sự khác biệt lớn giữa hai trạng thái trong tập dữ liệu. Dù tỷ lệ chênh lệch không lớn, nhưng người từng vỡ nợ vẫn chiếm phần trội trong tập hồ sơ vay.

3.1.2. Biến định lượng

Vì đây là các biến định lượng, ta có thể áp dụng các phương pháp thống kê mô tả để phân tích. Các chỉ số thông dụng bao gồm: giá trị trung bình, trung vị, độ lệch chuẩn, giá trị lớn nhất (max) và nhỏ nhất (min)

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.4.3
summary_stats <- tl_dt %>%
  select(where(is.numeric), -loan_status) %>%
  pivot_longer(everything(), names_to = "Variable", values_to = "Value") %>%
  group_by(Variable) %>%
  summarise(
    Mean = mean(Value, na.rm = TRUE),
    SD = sd(Value, na.rm = TRUE),
    Min = min(Value, na.rm = TRUE),
    Max = max(Value, na.rm = TRUE),
    Median = median(Value, na.rm = TRUE),
    .groups = "drop") 
summary_stats

Tuổi của người vay (person_age) có phân phối lệch phải, với giá trị trung bình là 27,76, cao hơn trung vị là 26.0. Điều này cho thấy phần lớn người vay còn khá trẻ, tập trung quanh độ tuổi 26. Dữ liệu dao động từ 20 đến 144 tuổi, với độ lệch chuẩn là 3,88, cho thấy có thể tồn tại giá trị ngoại lệ, chẳng hạn như trên 100 tuổi (144 tuổi).

  • Điểm tín dụng (credit_score) lệch trái nhẹ, trung bình 632,6 thấp hơn trung vị 640.0, dao động trong khoảng 390-850, với độ lệch chuẩn 50,44. Đa số người vay có điểm khá tốt (gần 640), nhưng một số điểm thấp đã kéo giảm giá trị trung bình.

  • Lãi suất vay (loan_int_rate) gần như đối xứng, với trung bình 11,006%, trung vị 11,01% và độ lệch chuẩn 2,98%. Dải giá trị 5,42% đến 20,00%, cho thấy lãi suất phân bổ đều quanh mức 11%.

  • Tỷ lệ vay trên thu nhập (loan_percent_income) lệch phải, trung bình 0,140, trung vị 0,12, với độ lệch chuẩn 0.087. Dao động từ 0 đến 0.66, đa số ở mức vừa phải (~12%), một số trường hợp vay nhiều kéo trung bình tăng.

  • Thâm niên tín dụng (cb_person_cred_hist_length) lệch phải rõ rệt, với trung bình 5,87 năm, trung vị 4,0 năm, độ lệch chuẩn 3,88. Phần lớn người vay còn ít kinh nghiệm (~4 năm), một nhóm nhỏ có thâm niên dài làm tăng trung bình chung.

- Thể hiện ở biểu đồ

1. Tuổi của người đi vay (person_age)

library(ggplot2)
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.4.3
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
ggplot(tl_dt, aes(x = person_age)) +
  geom_histogram(binwidth = 2, fill = "#4DB6AC", color = "white") +
  labs(title = "Phân phối tuổi người vay theo nhóm (5 năm)", 
       x = "Tuổi", y = "Tần số") +
  theme_minimal()

Nhận xét

Dựa trên biểu đồ phân phối tuổi người vay, có thể nhận diện một số đặc điểm nổi bật:

  • Tập trung ở nhóm tuổi trẻ: Phần lớn người vay nằm trong khoảng 20–35 tuổi, với nhóm 20–25 tuổi chiếm tỷ lệ cao nhất. Điều này cho thấy khách hàng trẻ là nhóm phổ biến nhất trong tập dữ liệu.

  • Phân phối lệch phải: Số lượng người vay giảm dần khi độ tuổi tăng, tạo thành đuôi dài bên phải biểu đồ, phản ánh sự suy giảm rõ rệt ở nhóm khách hàng lớn tuổi.

  • Giá trị ngoại lệ: Biểu đồ xuất hiện một trường hợp đặc biệt với độ tuổi cao. Chính những giá trị rất cao này đã góp phần kéo tuổi trung bình tăng lên, dù phần lớn người vay thực tế đều thuộc nhóm tuổi trẻ.

- Rời rạc hóa biến

library(dplyr)
library(ggplot2)
# Bước 1: Phân nhóm tuổi
tl_dt$person_age_group <- cut(
  tl_dt$person_age,
  breaks = c(0, 30, 40, 60, Inf),
  labels = c("Trẻ (≤30)", "Trưởng thành (31–40)", "Trung niên (41–60)", "Cao tuổi (>60)"),
  right = FALSE,
  include.lowest = TRUE)
# Bước 2: Tính số lượng và phần trăm
summary_df <- tl_dt %>%
  count(person_age_group) %>%
  mutate(percentage = n / sum(n) * 100)
# Bước 3: Vẽ biểu đồ
ggplot(summary_df, aes(x = person_age_group, y = n, fill = person_age_group)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = paste0(n, " (", sprintf("%.1f%%", percentage), ")")), 
            vjust = -0.3, size = 4) +
  labs(title = "Phân bố người vay theo nhóm tuổi",
    x = "Nhóm tuổi", y = "Số lượng người vay", fill = "Nhóm tuổi") +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal() +
  theme(legend.position = "none")

Nhận xét

Biểu đồ phân bổ người đi vay theo biểu hiện trong độ tuổi cho thấy một sự tập trung rất lớn vào độ tuổi trẻ. Cụ thể:

  • Độ tuổi Trẻ (dưới 30 tuổi) chiếm đa số áp đảo với 70%.

  • Độ tuổi trưởng thành (31-40 tuổi) đứng thứ hai nhưng với tỷ lệ nhỏ hơn nhiều, chỉ 23,2%.

  • Trong khi đó, hai độ tuổi trung niên (41-60) và cao tuổi (trên 60) cộng lại chỉ chiếm khoảng 4,9%, cho thấy đây không phải là đối tượng khách hàng phổ biến.

2. Điểm tín dụng (credit_score)

library(ggplot2)
library(dplyr)
library(gridExtra)
ggplot(tl_dt, aes(x = credit_score)) +
  geom_histogram(binwidth = 10, fill = "green", color = "white") +
  labs(title = "Phân phối điểm tín dụng", 
       x = "Điểm tín dụng", y = "Tần số") +
  theme_minimal()

Nhận xét

Dựa trên biểu đồ phân phối điểm tín dụng của người vay, có thể nhận diện một số đặc điểm nổi bật:

  • Tập trung ở điểm khá cao: Phần lớn điểm tín dụng tập trung trong khoảng 600-700, với đỉnh cao nhất vào khoảng 660 điểm.

  • Phân phối lệch trái: Biểu đồ không đối xứng mà có phần đuôi kéo dài về phía các mức điểm thấp hơn. Tuy nhiên, số lượng người vay có điểm dưới 600 ít hơn đáng kể so với nhóm đa số.

→ Điều này cho thấy phần lớn khách hàng trong bộ dữ liệu có mức điểm tín dụng ở ngưỡng trung bình trở lên, phản ánh năng lực tín dụng tương đối ổn định, dù vẫn tồn tại một nhóm nhỏ có mức rủi ro cao hơn.

- Rời rạc hóa biến

library(dplyr)
library(ggplot2)
# Bước 1: Phân nhóm điểm tín dụng thành các mức
tl_dt$score_group <- cut(tl_dt$credit_score,
                         breaks = c(-Inf, 580, 640, 700, Inf),
                         labels = c("Rất thấp (<580)", "Thấp (580–639)", "Trung bình (640–699)", "Cao (≥700)"),
                         right = FALSE, include.lowest = TRUE)
# Bước 2: Tính tần suất và phần trăm
score_freq <- tl_dt %>%
  count(score_group) %>%
  mutate(percent = n / sum(n) * 100)
# Bước 3: Vẽ biểu đồ cột
ggplot(score_freq, aes(x = score_group, y = n, fill = score_group)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = paste0(n, " (", sprintf("%.1f%%", percent), ")")),
            vjust = -0.3, size = 4) +
  labs(title = "Phân bố người vay theo mức điểm tín dụng",
       x = "Nhóm điểm tín dụng", y = "Số lượng") +
  scale_fill_brewer(palette = "Pastel2") +
  theme_minimal() +
  theme(legend.position = "none")

Nhận xét

Biểu đồ phân bổ người đi vay theo biểu hiện trong điểm tín dụng cho thấy một sự tập trung rõ rệt:

  • Hai nhóm có điểm tín dụng Trung bình (640-699) và Thấp (580-639) chiếm tỷ lệ lần lượt là 43,7% và 34,6%, hợp lại khoảng 78,3% tổng số hồ sơ vay. Đây là phân khúc phổ biến, thường cần đánh giá kỹ về khả năng hoàn trả do tiềm ẩn rủi ro tài chính.

  • Ngược lại, nhóm có điểm tín dụng Cao (≥700) chỉ chiếm 6,4%, phản ánh nhóm khách hàng có hồ sơ tốt khá hiếm trong dữ liệu và không đại diện cho phần lớn người vay.

  • Đáng chú ý, nhóm có điểm tín dụng rất thấp (dưới 580) cũng chiếm 15,7%, là phân khúc rủi ro cao, cần được xem xét cẩn trọng trong quy trình xét duyệt để giảm thiểu nguy cơ nợ xấu.

3. Lãi suất vay (loan_int_rate)

ggplot(tl_dt, aes(x = loan_int_rate)) +
  geom_histogram(binwidth = 1, fill = "lightblue", color = "white") +
  labs(title = "Phân phối lãi suất vay", 
       x = "Lãi suất vay (%)", y = "Tần số") +
  theme_minimal()

Nhận xét

Dựa trên biểu đồ phân phối lãi suất vay, có thể nhận diện một số đặc điểm nổi bật:

  • Tập trung ở mức lãi suất phổ biến: Phần lớn các khoản vay có lãi suất nằm trong khoảng 10% đến 14%, với tần suất xuất hiện cao nhất ở mức khoảng 11%. Đây là khoảng lãi suất chủ đạo trong bộ dữ liệu.

  • Xu hướng phân phối lệch phải nhẹ: Với phần đuôi vẫn kéo dài về phía các mức lãi suất cao hơn. Cụ thể, số lượng khoản vay có lãi suất từ 15% trở lên tuy ít nhưng vẫn đáng chú ý.

  • Phân phối cho thấy lãi suất vay không tập trung ở một mức nhất định. Mặc dù phần lớn dao động quanh ngưỡng cao nhất 11%, vẫn có một nhóm nhỏ khách hàng phải chịu lãi suất cao vượt trội, có thể do rủi ro tín dụng hoặc điều kiện vay đặc thù.

- Rời rạc hóa biến

library(dplyr)
library(ggplot2)
# Tạo biến phân loại (nếu chưa tạo)
tl_dt$loan_int_cat <- cut(tl_dt$loan_int_rate,
                          breaks = c(0, 8, 11, 14, Inf),
                          labels = c("Rất thấp (<8%)", "Thấp (8%–11%)", "Trung bình (11%–14%)", "Cao (≥14%)"),
                          right = FALSE)
# Tính tần suất theo nhóm lãi suất
loan_freq <- tl_dt %>%
  count(loan_int_cat) %>%
  mutate(percent = n / sum(n) * 100)
# Biểu đồ tròn
ggplot(loan_freq, aes(x = "", y = percent, fill = loan_int_cat)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  geom_text(aes(label = paste0(sprintf("%.1f", percent), "%")),
            position = position_stack(vjust = 0.5), size = 4) +
  labs(title = "Tỷ lệ người vay theo phân khúc lãi suất vay",
       fill = "Phân khúc lãi suất") +
  scale_fill_brewer(palette = "Dark2") +
  theme_void() +
  theme()

Nhận xét

Biểu đồ phân bổ người đi vay theo biểu hiện về mức lãi suất cho thấy một sự phân hóa rõ rệt:

  • Hai phân khúc phổ biến: Lãi suất trung bình (11%–14%) và thấp (8%–11%) lần lượt chiếm 37,0% và 25,0%, hợp lại vượt quá 60% tổng số hồ sơ vay. Đây là nhóm khách hàng phổ biến nhất, phản ánh chính sách lãi suất áp dụng cho phần lớn người vay.

  • Ngược lại, tỷ lệ hồ sơ hưởng lãi suất rất thấp (<8%) chỉ chiếm 21,8%, đại diện cho nhóm khách hàng có hồ sơ tín dụng tốt, đủ điều kiện hưởng mức ưu đãi từ tổ chức cho vay.

  • Đáng chú ý, có tới 16,2% khách hàng chịu lãi suất cao (≥14%), là phân khúc rủi ro cao nhất. Nhóm này cần được xem xét cẩn trọng, vì thường bao gồm các trường hợp thể hiện khả năng thanh toán yếu hơn hoặc hồ sơ tín dụng chưa đạt yêu cầu.

4. Tỷ lệ vay trên thu nhập (loan_percent_income)

ggplot(tl_dt, aes(x = loan_percent_income)) +
  geom_histogram(binwidth = 0.02, fill = "orange", color = "white") +
  labs(title = "Phân phối tỷ lệ vay trên thu nhập", 
       x = "Tỷ lệ vay trên thu nhập", y = "Tần số") +
  theme_minimal()

Nhận xét

Dựa trên biểu đồ phân phối tỷ lệ vay trên thu nhập, có thể nhận diện một số đặc điểm nổi bật:

  • Tỷ lệ vay trên thu nhập phổ biến: Phần lớn các khoản vay có tỷ lệ nợ trên thu nhập tập trung trong khoảng 0,0–0,2, cao nhất ở mức khoảng 0,1, phản ánh đa số người vay có gánh nặng nợ ở mức quản lý được.

  • Phân phối lệch phải: Với phần đuôi kéo dài về phía các tỷ lệ cao (từ 0,25 trở lên), cho thấy sự tồn tại của một nhóm nhỏ khách hàng có gánh nặng nợ lớn.

→ Điều này cho thấy gánh nặng nợ là một yếu tố quan trọng trong việc đánh giá rủi ro tín dụng. Những người có tỷ lệ nợ trên thu nhập cao, dù chiếm số lượng ít, nhưng là nhóm tiềm ẩn nguy cơ vỡ nợ cao nhất, đòi hỏi sự thẩm định chặt chẽ từ bên cho vay.

- Rời rạc hóa biến

library(dplyr)
library(ggplot2)
# Phân nhóm loan_percent_income theo đặc điểm lệch phải
tl_dt$loan_inc_cat <- cut(tl_dt$loan_percent_income,
                          breaks = c(0, 0.08, 0.15, 0.25, Inf),
                          labels = c("Rất thấp (<8%)", "Thấp (8%–15%)", "Trung bình (15%–25%)", "Cao (≥25%)"),
                          right = FALSE,
                          include.lowest = TRUE)
# Tính tần suất theo nhóm loan_percent_income
loan_inc_freq <- tl_dt %>%
  count(loan_inc_cat) %>%
  mutate(percent = n / sum(n) * 100)
# Biểu đồ tròn
ggplot(loan_inc_freq, aes(x = "", y = percent, fill = loan_inc_cat)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  geom_text(aes(label = paste0(sprintf("%.1f", percent), "%")),
            position = position_stack(vjust = 0.5), size = 4) +
  labs(title = "Tỷ lệ người vay theo tỷ lệ vay trên thu nhập",
       fill = "Phân khúc tỷ lệ vay trên thu nhập") +
  scale_fill_brewer(palette = "Set3") +
  theme_void()

Nhận xét

Biểu đồ phân bổ người đi vay theo phân khúc tỷ lệ vay trên thu nhập cho thấy một sự tập trung rõ rệt:

  • Hai phân khúc phổ biến: Nhóm có tỷ lệ vay thấp (8%–15%) và trung bình (15%-25%) lần lượt chiếm 34,6% và 27,0%, hợp lại chiếm khoảng 61,6% tổng số hồ sơ vay. Đây là nhóm khách hàng phổ biến nhất, phản ánh gánh nặng nợ ở mức chấp nhận được đối với phần lớn người vay.

  • Ngược lại, tỷ lệ hồ sơ thuộc phân khúc rất thấp (<8%) chiếm 25,7%, đại diện cho nhóm khách hàng có sức khỏe tài chính tốt nhất và ít rủi ro nhất.

  • Đáng chú ý, có tới 12,7% khách hàng thuộc phân khúc cao (≥25%), là phân khúc rủi ro cao nhất. Nhóm này cần được xem xét cẩn trọng, vì thường bao gồm các trường hợp có gánh nặng nợ lớn, ảnh hưởng đến khả năng thanh toán trong tương lai.

5. Thâm niên tín dụng (cb_person_cred_hist_length)

ggplot(tl_dt, aes(x = cb_person_cred_hist_length)) +
  geom_histogram(binwidth = 1, fill = "#FF6961", color = "white") +
  labs(title = "Phân phối thâm niên tín dụng", 
       x = "Thâm niên tín dụng (năm)", y = "Tần số") +
  theme_minimal()

Nhận xét

Dựa trên biểu đồ phân phối thâm niên tín dụng, có thể nhận diện một số đặc điểm nổi bật:

  • Thâm niên tín dụng phổ biến: Phần lớn người vay có thâm niên tín dụng tập trung ở mức ngắn, dưới 10 năm, với đỉnh cao nhất ở khoảng 3-4 năm. Điều này phản ánh đa số khách hàng trong bộ dữ liệu có lịch sử tín dụng tương đối mới.

  • Phân phối lệch phải: Biểu đồ có dạng lệch phải rất rõ, với phần đuôi kéo dài về phía các mức thâm niên cao (trên 10 năm), cho thấy sự tồn tại của một nhóm nhỏ khách hàng có lịch sử tín dụng lâu đời nhưng không chiếm đa số.

→ Thâm niên tín dụng là yếu tố quan trọng để đánh giá mức độ ổn định của khách hàng. Những người có thời gian tín dụng ngắn tuy chiếm tỷ lệ lớn, nhưng do thiếu dữ liệu lịch sử nên khó xác định độ tin cậy, từ đó có thể bị xem là nhóm tiềm ẩn rủi ro và cần được xem xét kỹ lưỡng hơn.

- Rời rạc hóa biến

library(dplyr)
library(ggplot2)

# Phân nhóm thâm niên tín dụng theo đặc điểm lệch phải
tl_dt$cred_hist_cat <- cut(tl_dt$cb_person_cred_hist_length,
                           breaks = c(0, 3, 6, 10, Inf),
                           labels = c("Rất thấp (<3 năm)", "Thấp (3–6 năm)", "Trung bình (6–10 năm)", "Cao (≥10 năm)"),
                           right = FALSE,
                          include.lowest = TRUE)
# Tính tần suất theo nhóm
cred_hist_freq <- tl_dt %>%
  count(cred_hist_cat) %>%
  mutate(percent = n / sum(n) * 100)
# Biểu đồ tròn
ggplot(cred_hist_freq, aes(x = "", y = percent, fill = cred_hist_cat)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  geom_text(aes(label = paste0(sprintf("%.1f", percent), "%")),
            position = position_stack(vjust = 0.5), size = 4) +
  labs(title = "Tỷ lệ người vay theo thâm niên tín dụng",
       fill = "Phân khúc thâm niên tín dụng") +
  scale_fill_brewer(palette = "Accent") +
  theme_void()

Nhẫn xét

Biểu đồ phân bổ người đi vay theo phân khúc thâm niên tín dụng cho thấy một sự tập trung rõ rệt:

  • Hai phân khúc phổ biến: Nhóm có thâm niên thấp (3–6 năm) và trung bình (6–10 năm) lần lượt chiếm 44,5% và 25,2%, hợp lại chiếm khoảng 69,7% tổng số hồ sơ vay. - Điều này cho thấy phần lớn người vay có lịch sử tín dụng ổn định ở mức vừa phải, đủ để hỗ trợ quá trình đánh giá sơ bộ về độ tin cậy.

  • Ngược lại, tỷ lệ hồ sơ thuộc phân khúc cao (≥10 năm) chiếm 15,7%, đại diện cho nhóm khách hàng có lịch sử tín dụng lâu đời, hường được xếp vào diện ít rủi ro hơn.

  • Đáng chú ý, có tới 14,5% khách hàng thuộc phân khúc rất thấp (<3 năm) là nhóm có rủi ro cao hơn do hồ sơ tín dụng còn mới, ít thông tin lịch sử để đánh giá khả năng chi trả dài hạn. Nhóm này cần được thẩm định kỹ lưỡng hơn trước khi phê duyệt khoản vay.

3.2. Thống kê suy diễn

3.2.1. Ước lượng khoảng và kiểm định giả thuyết cho tỷ lệ (một biến)

Mục tiêu của phân tích là đánh giá rủi ro tín dụng đối với nhóm khách hàng có lịch sử trả nợ không tốt, được xác định thông qua biến previous_loan_defaults_on_file. Đồng thời, tác giả thực hiện ước lượng khoảng và kiểm định tỷ lệ bị từ chối khoản vay, thể hiện qua biến loan_status, đại diện cho xác suất hồ sơ vay không được chấp thuận trong toàn bộ tập dữ liệu. Cả hai biến này đều là những chỉ báo quan sát quan trọng trong nghiên cứu, góp phần mô tả rủi ro liên quan đến đặc điểm tín dụng của khách hàng, đồng thời hỗ trợ phân tích xu hướng xét duyệt hồ sơ vay trong bối cảnh giả định của nghiên cứu.

a) Khách hàng đã từng vỡ nỡ trước đó - previous_loan_defaults_on_file

Một giả thuyết nền tảng là phần lớn khách hàng tiềm năng của tổ chức cần có lịch sử tín dụng tích cực để đáp ứng yêu cầu kiểm soát rủi ro. Biến previous_loan_defaults_on_file được sử dụng như một chỉ báo trực tiếp cho giả thuyết này. Do đó, tác giả sẽ tiến hành kiểm định xem tỷ lệ khách hàng từng ghi nhận vỡ nợ trong quá khứ có nằm dưới ngưỡng an toàn - ước tính là 20% - hay không. Kết quả sẽ cung cấp cơ sở đánh giá mức độ phù hợp của tệp khách hàng hiện tại với định hướng quản trị rủi ro của tổ chức.

Giả thuyết

  • \(H_0: p = 0,20\) (Tỷ lệ khách hàng đã từng vỡ nợ trong thời gian khảo sát đúng 20%)
  • \(H_1: p \neq 0,20\) (Tỷ lệ khách hàng đã từng vỡ nợ trong thời gian khảo sát khác 20%)
# Số người có Category là "Groceries"
n_2 <- sum(tl_dt$previous_loan_defaults_on_file == "Yes")
# Tổng số quan sát
n_total <- nrow(tl_dt)
# Kiểm định tỷ lệ (giả định p = 0.2)
test_2 <- prop.test(x = n_2, n = n_total, p = 0.2, correct = FALSE)
# In kết quả
print(test_2)
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_2 out of n_total, null probability 0.2
## X-squared = 26673, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.2
## 95 percent confidence interval:
##  0.5033360 0.5125738
## sample estimates:
##         p 
## 0.5079556

Kết quả kiểm định tỷ lệ mẫu đơn không hiệu chỉnh liên tục

  • Giá trị thống kê: \(\chi^2\) = 26673, \(df\) = 1
  • \(p-value\) < 2.2e-16
  • Ước lượng mẫu: \(\hat{p}\) = 0,5079556
  • Khoảng tin cậy 95%: (0,5033360; 0,5125738)

Kết luận:

Với \(p-value\) < 2.2e-16 < 0,05, có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Trong giai đoạn khảo sát, 50,8% khách hàng từng vỡ nợ – cao hơn nhiều so với giả định ban đầu là 20%. Kết quả phân tích cho thấy nhóm khách hàng có lịch sử tín dụng kém chiếm tỷ trọng lớn, phản ánh rằng giả định ban đầu chưa mô tả chính xác thực trạng rủi ro từ dữ liệu thực tế.

b) Yêu cầu cho vay bị từ chối - loan_status

Trong bối cảnh lãi suất cao, các tổ chức tín dụng trở nên thận trọng hơn đáng kể để kiểm soát rủi ro. Sự thận trọng này đặc biệt khắt khe đối với những khách hàng vốn đã có nguy cơ vỡ nợ cao. Vì vậy, nhóm giả định rằng tỷ lệ hồ sơ bị từ chối sẽ tăng vọt trong các giai đoạn “thắt chặt tiền tệ” – được xác định là khi lãi suất điều hành ở mức cao và tương ứng với khoảng 45% số hồ sơ trong dữ liệu.

Giả thuyết

  • \(H_0: p = 0,45\) (Yêu cầu cho vay bị từ chối trong thời gian khảo sát đúng 45%)
  • \(H_1: p \neq 0,45\) (TYêu cầu cho vay bị từ chối trong thời gian khảo sát khác 45%)
# Số người đã phục hồi
n_2 <- sum(tl_dt$loan_status == "0")
# Tổng số quan sát
n_total <- nrow(tl_dt)
# Ước lượng khoảng tin cậy 95% cho tỷ lệ phục hồi (p = 0.4 là tỷ lệ kỳ vọng để kiểm định)
test_2 <- prop.test(n_2, n_total, p = 0.45, correct = FALSE)
# In kết quả
test_2
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_2 out of n_total, null probability 0.45
## X-squared = 19534, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.45
## 95 percent confidence interval:
##  0.7739130 0.7815951
## sample estimates:
##         p 
## 0.7777778

Kết quả kiểm định tỷ lệ mẫu đơn không hiệu chỉnh liên tục

  • Giá trị thống kê: \(\chi^2\) = 13889, \(df\) = 1
  • \(p-value\) < 2.2e-16
  • Ước lượng mẫu: \(\hat{p}\) = 0,7777778
  • Khoảng tin cậy 95%: (0,7739130; 0,7815951)

Kết luận:

Với \(p-value\) < 2.2e-16 < 0,05, có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Tức tỷ lệ hồ sơ vay bị từ chối trong giai đoạn khảo sát không bằng đúng 45% như giả định ban đầu. Trên thực tế, tỷ lệ quan sát lên tới 77,8%, phản ánh mức độ thắt chặt chính sách tín dụng cao hơn so với ước tính.

3.2.2. Phân tích mối quan hệ giữa hai biến định tính (BIVARIATE ANALYSIS)

a) Mối quan hệ giữa loan_statusprevious_loan_defaults_on_file

  • Bảng tần số
# Lập bảng chéo
freq_tb_5 <- table(tl_dt$loan_status, tl_dt$previous_loan_defaults_on_file)
# Kiểm tra và hiển thị
print(freq_tb_5)
##    
##        No   Yes
##   0 12142 22858
##   1 10000     0
  • Bảng tần suất
# Bảng tần suất theo hàng (mỗi hàng cộng 100%)
prop_tb_5 <- prop.table(freq_tb_5, margin = 1) * 100
# Làm tròn để dễ đọc
prop_tb_5 <- round(prop_tb_5, 2)
# Thêm tổng hàng (tùy chọn)
prop_tb_5a <- addmargins(prop_tb_5)
prop_tb_5a
##      
##           No    Yes    Sum
##   0    34.69  65.31 100.00
##   1   100.00   0.00 100.00
##   Sum 134.69  65.31 200.00
  • Thể hiện biểu đồ
# Tính bảng tần suất theo hàng (từng mức của loan_status)
prop_tb_5 <- round(prop.table(freq_tb_5, 1), 4)
# Chuyển thành data frame
df <- as.data.frame(prop_tb_5)
colnames(df) <- c("loan_status", "previous_loan_defaults_on_file", "percent")
df$percent <- df$percent * 100
# Đặt nhãn cho biến loan_status
df$loan_status <- factor(df$loan_status, levels = c("0", "1"),
                         labels = c("Bị từ chối", "Được phê duyệt"))
# Vẽ biểu đồ
library(ggplot2)
ggplot(df, aes(x = loan_status, y = percent, fill = previous_loan_defaults_on_file)) +
  geom_col(position = "stack", width = 0.7, color = "black") +
  geom_text(aes(label = sprintf("%.1f%%", percent)),
            position = position_stack(vjust = 0.5),
            size = 4, color = "black") +
  labs(title = "Tỷ lệ phê duyệt khoản vay theo lịch sử vỡ nợ của khách hàng",
    x = "Tình trạng khoản vay", y = "Tỷ lệ (%)",
    fill = "lịch sử vỡ nợ"  ) +
  scale_fill_brewer(palette = "Pastel2") +
  theme_minimal()

Nhận xét

Mối liên hệ giữa lịch sử vỡ nợ và việc phê duyệt khoản vay là tuyệt đối, cho thấy đây là một yếu tố quyết định.

  • Điểm nổi bật nhất là 100% các khoản vay được duyệt đều thuộc về khách hàng không có lịch sử vỡ nợ (No).

  • Ngược lại, khách hàng có lịch sử vỡ nợ (Yes) chiếm đa số áp đảo (65,3%) trong nhóm bị từ chối và hoàn toàn không xuất hiện trong nhóm được phê duyệt.

-> Tóm lại, dữ liệu cho thấy việc có lịch sử vỡ nợ là điều kiện gần như chắc chắn dẫn đến việc khoản vay bị từ chối.

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Tình trạng duyệt vay và lịch sử vỡ nợ là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và lịch sử vỡ nợ là 2 biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_5)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  freq_tb_5
## X-squared = 13270, df = 1, p-value < 2.2e-16

Kết quả kiểm định Chi-squared

  • Giá trị thống kê: \(\chi^2\) = 13270
  • Bậc tự do: \(df\) = 1
  • Giá trị \(p-value\) < 2.2e-16

Kết luận:

Với \(p-value\) < 2.2e-16 < 0.05, ta bác bỏ giả thuyết \(H_0\), Kết quả phân tích cho thấy có mối liên hệ giữa hai biến đang được xem xét, phản ánh sự ảnh hưởng hoặc tương quan nhất định giữa chúng.

a) Hiệu tỷ lệ (Risk Difference - RD)

Giả thuyết kiểm định:

  • \(H_0: p_i - p_j = 0\)
    (Không có sự khác biệt đáng kể giữa tỷ lệ được phê duyệt khoản vay và lịch sử vỡ nợ \(i\)\(j\))

  • \(H_1: p_i - p_j \ne 0\)
    (Có sự khác biệt đáng kể giữa tỷ lệ được phê duyệt khoản vay và lịch sử vỡ nợ \(i\)\(j\))

# Hàng: loan_status, Cột: previous_loan_defaults_on_file
default_status_names <- colnames(freq_tb_5)
for (status in rownames(freq_tb_5)) {
  row_values <- as.numeric(freq_tb_5[status, ])
  total_row <- sum(row_values)
  cat(sprintf("\n📊 So sánh theo lịch sử vỡ nợ trong nhóm loan_status = %s\n", status))
  for (i in 1:(length(default_status_names) - 1)) {
    for (j in (i + 1):length(default_status_names)) {
      x1 <- row_values[i]; x2 <- row_values[j]
      p1 <- x1 / total_row
      p2 <- x2 / total_row
      test <- suppressWarnings(prop.test(c(x1, x2), c(total_row, total_row), correct = FALSE))
      cat(sprintf("📌 '%s' vs '%s': %.2f%% vs %.2f%% | Mức chênh lệch = %.2f%%\n",
                  default_status_names[i], default_status_names[j],
                  p1 * 100, p2 * 100, (p1 - p2) * 100))
      cat(sprintf("   95%% CI: [%.2f%%, %.2f%%], p = %.4f\n",
                  test$conf.int[1] * 100, test$conf.int[2] * 100, test$p.value))
      cat("--------------------------------------------------\n")    }  }}
## 
## 📊 So sánh theo lịch sử vỡ nợ trong nhóm loan_status = 0
## 📌 'No' vs 'Yes': 34.69% vs 65.31% | Mức chênh lệch = -30.62%
##    95% CI: [-31.32%, -29.91%], p = 0.0000
## --------------------------------------------------
## 
## 📊 So sánh theo lịch sử vỡ nợ trong nhóm loan_status = 1
## 📌 'No' vs 'Yes': 100.00% vs 0.00% | Mức chênh lệch = 100.00%
##    95% CI: [100.00%, 100.00%], p = 0.0000
## --------------------------------------------------

Kết quả kiểm định

Kết quả cho thấy một điều cực kỳ rõ ràng: Lịch sử vỡ nợ chính là yếu tố quyết định việc một khoản vay có được duyệt hay không (p < 5%).

1. Với các khoản vay “Được phê duyệt”:

Với 100% các khoản vay được duyệt đều là của những người chưa từng vỡ nợ (No). Ngược lại, không có một ai từng vỡ nợ (Yes) được duyệt vay. Đây gần như là một điều kiện bắt buộc.

2. Với các khoản vay “Không được phê duyệt”:

Tình hình đảo ngược hoàn toàn: Nhóm khách hàng có lịch sử vỡ nợ (Yes) chiếm đa số áp đảo với tỷ lệ 65,3%. Tỷ lệ của nhóm này cao hơn đáng kể so với nhóm không có lịch sử vỡ nợ (No) (34,7%), với mức chênh lệch là 30,6%. Nói một cách đơn giản, nếu bạn đã từng vỡ nợ, khả năng rất cao là khoản vay của bạn sẽ bị từ chối.

b) Tỷ số Nguy cơ (Relative Risk - RR)

Giả thuyết kiểm định:

  • \(H_0: p_i = p_j\)

  • \(H_1: p_i ≠ p_j \neq 0\)

library(epitools)
# Bảng 2 chiều giữa loan_status và quyền sở hữu nhà, sắp xếp hàng theo "0", "1"
freq_tb2 <- table(tl_dt$previous_loan_defaults_on_file, tl_dt$loan_status)[,c("0", "1") ]
# Tính Risk Ratio
riskratio(freq_tb2)
## $data
##        
##             0     1 Total
##   No    12142 10000 22142
##   Yes   22858     0 22858
##   Total 35000 10000 45000
## 
## $measure
##      risk ratio with 95% C.I.
##       estimate lower upper
##   No         1    NA    NA
##   Yes        0     0   NaN
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact chi.square
##   No          NA           NA         NA
##   Yes          0            0          0
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả phân tích cho thấy lịch sử vỡ nợ là một yếu tố có tác động tuyệt đối và mang tính quyết định đến khả năng được phê duyệt khoản vay. So với nhóm không có lịch sử vỡ nợ (No) được chọn làm mốc so sánh, khả năng này thay đổi hoàn toàn ở nhóm còn lại.

Phân tích Tỷ lệ rủi ro (Risk Ratio - RR):

  • Nhóm có lịch sử vỡ nợ (Yes): Có cơ hội được duyệt vay bằng 0 lần so với nhóm không có lịch sử vỡ nợ. Điều này có nghĩa là không có bất kỳ khách hàng nào trong nhóm này được phê duyệt, cho thấy đây là một yếu tố loại trừ tuyệt đối.

Do trong nhóm khách hàng có lịch sử vỡ nợ (Yes) không có bất kỳ trường hợp nào được phê duyệt (giá trị bằng 0), phép tính Tỷ lệ chênh (Odds Ratio) không thể thực hiện được một cách hợp lệ.

b) Mối quan hệ giữa loan_statusperson_education

  • Bảng tần số
# Lập bảng chéo
freq_tb_2 <- table(tl_dt$loan_status, tl_dt$person_education)
# Kiểm tra và hiển thị
print(freq_tb_2)
##    
##     Associate Bachelor Doctorate High School Master
##   0      9378    10381       479        9301   5461
##   1      2650     3018       142        2671   1519
  • Bảng tần suất
# Bảng tần suất theo hàng (mỗi hàng cộng 100%)
prop_tb_2 <- prop.table(freq_tb_2, margin = 1) * 100
# Làm tròn để dễ đọc
prop_tb_2 <- round(prop_tb_2, 3)
# Thêm tổng hàng (tùy chọn)
prop_tb_2 <- addmargins(prop_tb_2)
prop_tb_2
##      
##       Associate Bachelor Doctorate High School  Master     Sum
##   0      26.794   29.660     1.369      26.574  15.603 100.000
##   1      26.500   30.180     1.420      26.710  15.190 100.000
##   Sum    53.294   59.840     2.789      53.284  30.793 200.000
  • Thể hiện biểu đồ
# Tính bảng tần suất theo hàng, bỏ dòng/cột "Sum" nếu có
prop_tb_2 <- round(prop.table(freq_tb_2, 1), 4)
prop_tb_2 <- prop_tb_2[rownames(prop_tb_2) != "Sum", colnames(prop_tb_2) != "Sum"]
# Chuyển thành data frame và đổi tỉ lệ sang %
df <- as.data.frame(prop_tb_2)
names(df) <- c("loan_status", "education", "percent")
df$percent <- df$percent * 100
# Đảm bảo biến loan_status có thứ tự và nhãn phù hợp
df$loan_status <- factor(df$loan_status, levels = c("0", "1"),
                         labels = c("Bị từ chối", "Được phê duyệt"))
# Vẽ biểu đồ
library(ggplot2)
ggplot(df, aes(x = loan_status, y = percent, fill = education)) +
  geom_col(width = 0.7, color = "black") +
  geom_text(aes(label = sprintf("%.1f%%", percent)), 
            position = position_stack(vjust = 0.5), size = 4) +
  labs(title = "Tỷ lệ phê duyệt khoản vay theo trình độ học vấn",
    x = "Tình trạng khoản vay", y = "Tỷ lệ (%)"  ) +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal()

Nhận xét

Biến động theo trình độ học vấn: Khi so sánh giữa nhóm bị từ chối (cột 0) và nhóm được phê duyệt (cột 1), ta thấy sự dịch chuyển tỷ lệ như sau:

  • Nhóm Cử nhân (Bachelor): Cho thấy sự gia tăng rõ nhất, từ 29,7% trong nhóm bị từ chối lên 30,2% trong nhóm được phê duyệt (tăng khoảng 0,5%).

  • Nhóm Thạc sĩ (Master): Ngược lại, nhóm này lại có xu hướng giảm, từ 15,6% trong nhóm bị từ chối xuống còn 15,2% trong nhóm được phê duyệt (giảm khoảng 0,4%).

  • Nhóm Cao đẳng (Associate): Tương tự, nhóm này cũng giảm nhẹ, từ 26,8% xuống còn 26,5% (giảm khoảng 0,3%).

  • Nhóm Trung học (High School): Gần như không thay đổi, chỉ tăng nhẹ không đáng kể từ 26,6% lên 26,7% (tăng khoảng 0,1%).

  • Nhóm Tiến sĩ (Doctorate): Tỷ lệ duy trì ở mức xấp xỉ 1,4% ở cả hai nhóm, phản ánh sự khác biệt rất nhỏ — dưới 0,1% — và không có ý nghĩa đáng kể.

-> Dữ liệu gợi ý rằng trình độ học vấn có thể là một yếu tố liên quan đến việc phê duyệt khoản vay, dù ảnh hưởng không lớn. Cụ thể, việc có bằng Cử nhân dường như là một yếu tố tích cực nhỏ, làm tăng nhẹ tỷ trọng trong nhóm được duyệt vay. Trong khi đó, người có bằng Thạc sĩ và Cao đẳng lại chiếm tỷ lệ thấp hơn một chút trong nhóm này so với nhóm bị từ chối. Các trình độ còn lại cho thấy sự ổn định, không có sự khác biệt rõ rệt.

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Tình trạng cho vay và trình độ học vấn là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng cho vay và trình độ học vấn là 2 biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_2)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_2
## X-squared = 2.0159, df = 4, p-value = 0.7328

Kết quả kiểm định Chi-squared

  • Giá trị thống kê: \(\chi^2\) = 2,0159
  • Bậc tự do: \(df\) = 4
  • Giá trị \(p-value\) = 0,7328

Kết luận:

Với \(p-value\) = 0.7328 > 0.05, ta có không có cơ sở để bác bỏ giả thuyết \(H_0\). Điều này cho thấy không có mối liên hệ có ý nghĩa thống kê giữa hai biến quan sát — chúng có thể xem là độc lập với nhau.

c) Mối quan hệ giữa loan_statusperson_home_ownership

  • Bảng tần số
# Lập bảng chéo
freq_tb_3 <- table(tl_dt$loan_status, tl_dt$person_home_ownership)
# Kiểm tra và hiển thị
print(freq_tb_3)
##    
##     MORTGAGE OTHER   OWN  RENT
##   0    16345    78  2729 15848
##   1     2144    39   222  7595
  • Bảng tần suất
# Bảng tần suất theo hàng (mỗi hàng cộng 100%)
prop_tb_3 <- prop.table(freq_tb_3, margin = 1) * 100
# Làm tròn để dễ đọc
prop_tb_3 <- round(prop_tb_3, 3)
# Thêm tổng hàng (tùy chọn)
prop_tb_3a <- addmargins(prop_tb_3)
prop_tb_3a
##      
##       MORTGAGE   OTHER     OWN    RENT     Sum
##   0     46.700   0.223   7.797  45.280 100.000
##   1     21.440   0.390   2.220  75.950 100.000
##   Sum   68.140   0.613  10.017 121.230 200.000
  • Thể hiện biểu đồ
# Tính bảng tần suất theo hàng (từng mức của loan_status)
prop_tb_3 <- round(prop.table(freq_tb_3, 1), 4)
prop_tb_3 <- prop_tb_3[rownames(prop_tb_3) != "Sum", colnames(prop_tb_3) != "Sum"]
# Chuyển thành data frame
df <- as.data.frame(prop_tb_3)
colnames(df) <- c("loan_status", "home_ownership", "percent")
df$percent <- df$percent * 100
# Đặt nhãn cho biến loan_status
df$loan_status <- factor(df$loan_status, levels = c("0", "1"),
                         labels = c("Bị từ chối", "Được phê duyệt"))
# Vẽ biểu đồ
library(ggplot2)
ggplot(df, aes(x = loan_status, y = percent, fill = home_ownership)) +
  geom_col(position = position_dodge(width = 0.7), width = 0.7, color = "black") +
  geom_text(aes(label = sprintf("%.1f%%", percent)),
            position = position_dodge(width = 0.7),
            size = 4, color = "black", vjust = -0.3) +
  labs(title = "Tỷ lệ phê duyệt khoản vay theo quyền sở hữu nhà",
    x = "Tình trạng khoản vay", y = "Tỷ lệ (%)",
    fill = "Quyền sở hữu nhà") +
  scale_fill_brewer(palette = "Set3") +
  theme_minimal()

Nhận xét

Mối liên hệ giữa quyền sở hữu nhà và tình trạng phê duyệt khoản vay thể hiện rõ nét, với sự thay đổi rất lớn về tỷ lệ phân bố giữa trạng thái “Được phê duyệt” và “Bị từ chối”. Khác với các biến khác, yếu tố quyền sở hữu nhà cho thấy sự tương quan mạnh trong dữ liệu.

  • Nhóm Thuê nhà (RENT): Tăng đột biến từ 45,3% lên 75,9% (tăng khoảng 30,6%), chiếm tỷ trọng áp đảo trong các khoản vay được phê duyệt.

  • Nhóm Thế chấp (MORTGAGE) và Sở hữu (OWN): Giảm rất rõ rệt. Cụ thể, MORTGAGE giảm từ 46,7% xuống 21,4% (giảm 25,3%), và OWN giảm từ 7,8% xuống 2,2% (giảm khoảng 5,6%).

  • Nhóm Khác (OTHER): Gần như không đổi và chiếm tỷ lệ rất nhỏ ở cả hai trạng thái (chênh lệch khoảng 0,2%).

-> Từ đó, có thể nhận định rằng “Quyền sở hữu nhà” là một biến dự báo rất tiềm năng trong việc xác định khả năng được phê duyệt khoản vay. Dữ liệu cho thấy nhóm khách hàng đang thuê nhà (RENT) có mối liên hệ mạnh mẽ với các khoản vay được phê duyệt, trong khi nhóm đang có khoản vay thế chấp (MORTGAGE) hoặc đã sở hữu nhà (OWN) lại chiếm tỷ trọng lớn hơn đáng kể trong các khoản vay bị từ chối.

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Tình trạng cho vay và quyền sở hữu nhà là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng cho vay và quyền sở hữu nhà là 2 biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_3)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_3
## X-squared = 2989.5, df = 3, p-value < 2.2e-16

Kết quả kiểm định Chi-squared

  • Giá trị thống kê: \(\chi^2\) = 2989,5
  • Bậc tự do: \(df\) = 3
  • Giá trị \(p-value\) < 2.2e-16

Kết luận:

Với \(p-value\) = 2.2e-16 < 0.05, ta bác bỏ giả thuyết \(H_0\), Kết quả phân tích cho thấy có mối liên hệ giữa hai biến đang được xem xét, phản ánh sự ảnh hưởng hoặc tương quan nhất định giữa chúng.

a) Hiệu tỷ lệ (Risk Difference - RD)

Giả thuyết kiểm định:

  • \(H_0: p_i - p_j = 0\)
    (Không có sự khác biệt đáng kể giữa tỷ lệ không/được phê duyệt khoản vay và hình thức sở hữu nhà \(i\)\(j\))

  • \(H_1: p_i - p_j \ne 0\)
    (Có sự khác biệt đáng kể giữa tỷ lệ không/được phê duyệt khoản vay và hình thức sở hữu nhà \(i\)\(j\))

# Hàng: loan_status, Cột: home_ownership
home_names <- colnames(freq_tb_3)
for (status in rownames(freq_tb_3)) {
  total_row <- sum(freq_tb_3[status, ])
  row_values <- as.numeric(freq_tb_3[status, ])
  cat(sprintf("\n📊 So sánh trong nhóm loan_status = %s\n", status))
  for (i in 1:(length(home_names) - 1)) {
    for (j in (i + 1):length(home_names)) {
      x1 <- row_values[i]; n1 <- total_row
      x2 <- row_values[j]; n2 <- total_row
      p1 <- x1 / n1
      p2 <- x2 / n2
      test <- suppressWarnings(prop.test(c(x1, x2), c(n1, n2), correct = FALSE))
      cat(sprintf("🏠 %s vs %s\n", home_names[i], home_names[j]))
      cat(sprintf("- Tỷ lệ trong hàng %s: %.2f%% vs %.2f%%\n", status, p1 * 100, p2 * 100))
      cat(sprintf("- Chênh lệch tỷ lệ: %.2f%%\n", (p1 - p2) * 100))
      cat(sprintf("- Khoảng tin cậy 95%%: [%.2f%%, %.2f%%]\n",
                  test$conf.int[1] * 100, test$conf.int[2] * 100))
      cat(sprintf("- p-value: %.4f\n", test$p.value))
      cat("--------------------------------------------------\n")   }  }}
## 
## 📊 So sánh trong nhóm loan_status = 0
## 🏠 MORTGAGE vs OTHER
## - Tỷ lệ trong hàng 0: 46.70% vs 0.22%
## - Chênh lệch tỷ lệ: 46.48%
## - Khoảng tin cậy 95%: [45.95%, 47.00%]
## - p-value: 0.0000
## --------------------------------------------------
## 🏠 MORTGAGE vs OWN
## - Tỷ lệ trong hàng 0: 46.70% vs 7.80%
## - Chênh lệch tỷ lệ: 38.90%
## - Khoảng tin cậy 95%: [38.31%, 39.50%]
## - p-value: 0.0000
## --------------------------------------------------
## 🏠 MORTGAGE vs RENT
## - Tỷ lệ trong hàng 0: 46.70% vs 45.28%
## - Chênh lệch tỷ lệ: 1.42%
## - Khoảng tin cậy 95%: [0.68%, 2.16%]
## - p-value: 0.0002
## --------------------------------------------------
## 🏠 OTHER vs OWN
## - Tỷ lệ trong hàng 0: 0.22% vs 7.80%
## - Chênh lệch tỷ lệ: -7.57%
## - Khoảng tin cậy 95%: [-7.86%, -7.29%]
## - p-value: 0.0000
## --------------------------------------------------
## 🏠 OTHER vs RENT
## - Tỷ lệ trong hàng 0: 0.22% vs 45.28%
## - Chênh lệch tỷ lệ: -45.06%
## - Khoảng tin cậy 95%: [-45.58%, -44.53%]
## - p-value: 0.0000
## --------------------------------------------------
## 🏠 OWN vs RENT
## - Tỷ lệ trong hàng 0: 7.80% vs 45.28%
## - Chênh lệch tỷ lệ: -37.48%
## - Khoảng tin cậy 95%: [-38.08%, -36.89%]
## - p-value: 0.0000
## --------------------------------------------------
## 
## 📊 So sánh trong nhóm loan_status = 1
## 🏠 MORTGAGE vs OTHER
## - Tỷ lệ trong hàng 1: 21.44% vs 0.39%
## - Chênh lệch tỷ lệ: 21.05%
## - Khoảng tin cậy 95%: [20.24%, 21.86%]
## - p-value: 0.0000
## --------------------------------------------------
## 🏠 MORTGAGE vs OWN
## - Tỷ lệ trong hàng 1: 21.44% vs 2.22%
## - Chênh lệch tỷ lệ: 19.22%
## - Khoảng tin cậy 95%: [18.37%, 20.07%]
## - p-value: 0.0000
## --------------------------------------------------
## 🏠 MORTGAGE vs RENT
## - Tỷ lệ trong hàng 1: 21.44% vs 75.95%
## - Chênh lệch tỷ lệ: -54.51%
## - Khoảng tin cậy 95%: [-55.67%, -53.35%]
## - p-value: 0.0000
## --------------------------------------------------
## 🏠 OTHER vs OWN
## - Tỷ lệ trong hàng 1: 0.39% vs 2.22%
## - Chênh lệch tỷ lệ: -1.83%
## - Khoảng tin cậy 95%: [-2.14%, -1.52%]
## - p-value: 0.0000
## --------------------------------------------------
## 🏠 OTHER vs RENT
## - Tỷ lệ trong hàng 1: 0.39% vs 75.95%
## - Chênh lệch tỷ lệ: -75.56%
## - Khoảng tin cậy 95%: [-76.41%, -74.71%]
## - p-value: 0.0000
## --------------------------------------------------
## 🏠 OWN vs RENT
## - Tỷ lệ trong hàng 1: 2.22% vs 75.95%
## - Chênh lệch tỷ lệ: -73.73%
## - Khoảng tin cậy 95%: [-74.62%, -72.84%]
## - p-value: 0.0000
## --------------------------------------------------

Kết quả kiểm định

Phân tích cho thấy sự khác biệt về quyền sở hữu nhà giữa hai nhóm khoản vay “Được duyệt” và “Bị từ chối” là rất rõ rệt và có ý nghĩa thống kê cao (tất cả các p < 5%).

1. Trong nhóm “Được phê duyệt” (loan_status = 1):

  • Nhóm RENT (Thuê nhà) chiếm ưu thế tuyệt đối: Với tỷ lệ 75,9%, nhóm này chiếm đa số áp đảo trong các khoản vay thành công.

  • Sự chênh lệch rất lớn: Tỷ lệ của nhóm RENT cao hơn rất nhiều so với nhóm MORTGAGE (Thế chấp) (chênh lệch +54,5%) và vượt trội hoàn toàn so với nhóm OWN (Sở hữu) (chênh lệch +73,7%) và OTHER (chênh lệch +75,65%).

  • Nhóm MORTGAGE (21,4%) là nhóm lớn thứ hai, trong khi các nhóm OWN (2,2%) và OTHER (0,4%) có tỷ lệ rất nhỏ. Mức chênh lệch lần lượt là +19,22% và +21,05%, cho thấy sự khác biệt rõ rệt về quy mô giữa các nhóm.

2. Trong nhóm “Bị từ chối” (loan_status = 0):

  • Bức tranh hoàn toàn khác: Hai nhóm MORTGAGE (46,7%) và RENT (45,3%) là hai nhóm chiếm tỷ trọng lớn nhất và gần như tương đương nhau. Sự khác biệt có ý nghĩa thống kê nhưng rất nhỏ, chỉ 1,4%.

  • OWN có tỷ lệ thấp hơn đáng kể so với MORTGAGE và RENT: Với tỷ lệ 7,8%, nhóm OWN vẫn nằm sau MORTGAGE và RENT, với mức chênh lệch tương ứng là +38,9% và +37,5%.

  • OTHER là nhóm có tỷ lệ thấp nhất: Chỉ chiếm 0,22%, nhóm OTHER có tỷ lệ thấp hơn nhiều so với MORTGAGE (+46,48%) nhưng lại thấp hơn cả nhóm RENT (-45,06%).

b) Tỷ số Nguy cơ (Relative Risk - RR)

Giả thuyết kiểm định:

  • \(H_0: p_i = p_j\)

  • \(H_1: p_i ≠ p_j \neq 0\)

library(epitools)
# Bảng 2 chiều giữa loan_status và quyền sở hữu nhà, sắp xếp hàng theo "0", "1"
freq_tb <- table(tl_dt$person_home_ownership, tl_dt$loan_status)[,c("0", "1") ]
# Tính Risk Ratio
riskratio(freq_tb)
## $data
##           
##                0     1 Total
##   MORTGAGE 16345  2144 18489
##   OTHER       78    39   117
##   OWN       2729   222  2951
##   RENT     15848  7595 23443
##   Total    35000 10000 45000
## 
## $measure
##           risk ratio with 95% C.I.
##             estimate     lower     upper
##   MORTGAGE 1.0000000        NA        NA
##   OTHER    2.8745336 2.2179083 3.7255568
##   OWN      0.6487426 0.5681716 0.7407391
##   RENT     2.7938509 2.6738946 2.9191887
## 
## $p.value
##           two-sided
##              midp.exact fisher.exact   chi.square
##   MORTGAGE           NA           NA           NA
##   OTHER    7.402248e-10 5.909352e-10 3.257752e-13
##   OWN      7.416179e-12 9.046027e-12 5.458450e-11
##   RENT     0.000000e+00 0.000000e+00 0.000000e+00
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả phân tích cho thấy quyền sở hữu nhà là một yếu tố có tác động rất mạnh đến khả năng được phê duyệt khoản vay. So với nhóm đang có khoản vay thế chấp (MORTGAGE) được chọn làm mốc so sánh, khả năng này thay đổi rõ rệt ở các nhóm còn lại.

Phân tích Tỷ lệ rủi ro (Risk Ratio - RR):

  • Nhóm Thuê nhà (RENT): Có cơ hội được phê duyệt khoản vay cao hơn 2,794 lần so với nhóm Thế chấp, cho thấy lợi thế rõ rệt của nhóm này trong việc tiếp cận nguồn vốn. Khoảng tin cậy 95% là [2,67; 2,92].

  • Nhóm Khác (OTHER): Tương tự, nhóm này có cơ hội được duyệt vay cao hơn 2,875 lần so với nhóm Thế chấp. Khoảng tin cậy 95% là [2,22; 3,73].

  • Nhóm Sở hữu nhà (OWN): Ngược lại, nhóm này có cơ hội được duyệt vay thấp hơn, chỉ bằng 0,649 lần so với nhóm Thế chấp. Khoảng tin cậy 95% là [0,57; 0,74], cho thấy việc đã sở hữu nhà (không thế chấp) có thể làm giảm khả năng tiếp cận khoản vay.

c) Tỷ số Chênh (Odds Ratio - OR)

oddsratio(freq_tb)
## $data
##           
##                0     1 Total
##   MORTGAGE 16345  2144 18489
##   OTHER       78    39   117
##   OWN       2729   222  2951
##   RENT     15848  7595 23443
##   Total    35000 10000 45000
## 
## $measure
##           odds ratio with 95% C.I.
##             estimate     lower     upper
##   MORTGAGE 1.0000000        NA        NA
##   OTHER    3.8193344 2.5671609 5.5892698
##   OWN      0.6205367 0.5359937 0.7150581
##   RENT     3.6532810 3.4663940 3.8519145
## 
## $p.value
##           two-sided
##              midp.exact fisher.exact   chi.square
##   MORTGAGE           NA           NA           NA
##   OTHER    7.402248e-10 5.909352e-10 3.257752e-13
##   OWN      7.416179e-12 9.046027e-12 5.458450e-11
##   RENT     0.000000e+00 0.000000e+00 0.000000e+00
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Phân tích Tỷ lệ chênh (Odds Ratio - OR):

Kết quả phân tích cho thấy có một mối liên hệ rất mạnh mẽ giữa quyền sở hữu nhà và khả năng được phê duyệt khoản vay. So với nhóm đang có khoản vay thế chấp (MORTGAGE), vốn được chọn làm mốc tham chiếu, tỷ lệ chênh (odds) được duyệt thay đổi rõ rệt ở các nhóm còn lại.

  • Nhóm Thuê nhà (RENT): OR = 3,65, với odds được duyệt vay cao gấp 3,65 lần so với nhóm Thế chấp. Khoảng tin cậy 95% [3,47 – 3,85] cho thấy yếu tố “thuê nhà” có tác động tích cực rõ rệt đến việc phê duyệt khoản vay.

  • Nhóm Khác (OTHER): OR = 3,82, với odds được duyệt vay cao hơn 3,82 lần so với nhóm Thế chấp. Khoảng tin cậy 95% [2,57 – 5,59] xác nhận đây là yếu tố có ảnh hưởng mạnh mẽ, dù chưa rõ đặc điểm cụ thể của nhóm.

  • Nhóm Sở hữu nhà (OWN): OR = 0,62, tức odds được duyệt vay thấp hơn, chỉ bằng 62% so với nhóm Thế chấp. Khoảng tin cậy 95% [0,54 – 0,72] cho thấy việc đã sở hữu nhà không thế chấp là yếu tố có ảnh hưởng tiêu cực rõ ràng đến khả năng được duyệt vay.

d) Mối quan hệ giữa loan_statusloan_intent

  • Bảng tần số
# Lập bảng chéo
freq_tb_4 <- table(tl_dt$loan_status, tl_dt$loan_intent)
# Kiểm tra và hiển thị
print(freq_tb_4)
##    
##     DEBTCONSOLIDATION EDUCATION HOMEIMPROVEMENT MEDICAL PERSONAL VENTURE
##   0              4982      7601            3525    6170     6031    6691
##   1              2163      1552            1258    2378     1521    1128
  • Bảng tần suất
# Bảng tần suất theo hàng (mỗi hàng cộng 100%)
prop_tb_4 <- prop.table(freq_tb_4, margin = 1) * 100
# Làm tròn để dễ đọc
prop_tb_4 <- round(prop_tb_4, 2)
# Thêm tổng hàng (tùy chọn)
prop_tb_4a <- addmargins(prop_tb_3)
prop_tb_4a
##      
##       MORTGAGE  OTHER    OWN   RENT    Sum
##   0     0.4670 0.0022 0.0780 0.4528 1.0000
##   1     0.2144 0.0039 0.0222 0.7595 1.0000
##   Sum   0.6814 0.0061 0.1002 1.2123 2.0000
  • Thể hiện biểu đồ
# Tính bảng tần suất theo hàng (từng mức của loan_status)
prop_tb_4 <- round(prop.table(freq_tb_4, 1), 4)
# Chuyển thành data frame
df <- as.data.frame(prop_tb_4)
colnames(df) <- c("loan_status", "loan_intent", "percent")
df$percent <- df$percent * 100
# Đặt nhãn cho biến loan_status
df$loan_status <- factor(df$loan_status, levels = c("0", "1"),
                         labels = c("Bị từ chối", "Được phê duyệt"))
# Vẽ biểu đồ
library(ggplot2)
ggplot(df, aes(x = loan_status, y = percent, fill = loan_intent)) +
  geom_col(position = "stack", width = 0.7, color = "black") +
  geom_text(aes(label = sprintf("%.1f%%", percent)),
            position = position_stack(vjust = 0.5),
            size = 4, color = "black") +
  labs(title = "Tỷ lệ phê duyệt khoản vay theo mục đích khoản vay",
    x = "Tình trạng khoản vay", y = "Tỷ lệ (%)",
    fill = "Mục đích khoản vay"  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal()

Nhận xét

Mối liên hệ giữa mục đích khoản vay và tình trạng phê duyệt thể hiện rõ nét, với sự thay đổi lớn về tỷ lệ phân bố giữa trạng thái “Được phê duyệt” và “Bị từ chối”. Yếu tố mục đích khoản vay cho thấy một sự tương quan mạnh trong dữ liệu.

  • Nhóm mục đích Tái cấu trúc nghĩa vụ tài chính (DEBTCONSOLIDATION) và Y tế (MEDICAL) tăng đột biến trong nhóm được phê duyệt. Cụ thể, DEBTCONSOLIDATION tăng từ 14,2% lên 21,6% (tăng khoảng 7,4%), và MEDICAL tăng từ 17,6% lên 23,8% (tăng khoảng 6,2%).

  • Ngược lại, nhóm Đầu tư kinh doanh (VENTURE) và Giáo dục (EDUCATION) giảm rất rõ rệt. VENTURE giảm mạnh nhất từ 19,1% xuống 11,3% (giảm khoảng 7,8%), và EDUCATION cũng giảm đáng kể từ 21,7% xuống 15,5% (giảm khoảng 6,2%). Các nhóm còn lại như Cải thiện nhà cửa (HOMEIMPROVEMENT) tăng nhẹ (tăng khoảng 2,5%), trong khi Cá nhân (PERSONAL) giảm nhẹ (giảm khoảng 2,0%).

-> Từ đó, có thể nhận định rằng “Mục đích khoản vay” là một biến dự báo rất tiềm năng trong việc xác định khả năng được phê duyệt khoản vay. Dữ liệu cho thấy các khoản vay cho mục đích Tái cấu trúc nghĩa vụ tài chính và Y tế có mối liên hệ mạnh mẽ với việc được phê duyệt, trong khi các khoản vay cho Đầu tư kinh doanh và Giáo dục lại chiếm tỷ trọng lớn hơn đáng kể trong nhóm bị từ chối.

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Tình trạng duyệt vay và mục tiêu vay là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và mục tiêu vay là 2 biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_4)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_4
## X-squared = 909.65, df = 5, p-value < 2.2e-16

Kết quả kiểm định Chi-squared

  • Giá trị thống kê: \(\chi^2\) = 909,65
  • Bậc tự do: \(df\) = 5
  • Giá trị \(p-value\) < 2.2e-16

Kết luận:

Với \(p-value\) = 2.2e-16 < 0.05, ta bác bỏ giả thuyết \(H_0\), Kết quả phân tích cho thấy có mối liên hệ giữa hai biến đang được xem xét, phản ánh sự ảnh hưởng hoặc tương quan nhất định giữa chúng.

a) Hiệu tỷ lệ (Risk Difference - RD)

Vì quá nhiều biểu hiện (trên 5) cho xét dựa chọn khoản vay được phê duyệt

Giả thuyết kiểm định:

  • \(H_0: p_i - p_j = 0\)
    (Không có sự khác biệt đáng kể giữa tỷ lệ được phê duyệt khoản vay và mục đích đi vay \(i\)\(j\))

  • \(H_1: p_i - p_j \ne 0\)
    (Có sự khác biệt đáng kể giữa tỷ lệ được phê duyệt khoản vay và mục đích đi vay \(i\)\(j\))

# Hàng: loan_status, Cột: loan_intent
status <- "1"  # Chỉ xét nhóm được phê duyệt
loan_intent_names <- colnames(freq_tb_4)
row_values <- as.numeric(freq_tb_4[status, ])
total_row <- sum(row_values)
cat("📊 So sánh các mục đích vay trong nhóm được phê duyệt (loan_status = 1)\n")
## 📊 So sánh các mục đích vay trong nhóm được phê duyệt (loan_status = 1)
for (i in 1:(length(loan_intent_names) - 1)) {
  for (j in (i + 1):length(loan_intent_names)) {
    x1 <- row_values[i]; x2 <- row_values[j]
    p1 <- x1 / total_row
    p2 <- x2 / total_row
    test <- suppressWarnings(prop.test(c(x1, x2), c(total_row, total_row), correct = FALSE))
    cat(sprintf("📌 '%s' vs '%s': %.2f%% vs %.2f%% | Mức chênh lệch = %.2f%%\n",
                loan_intent_names[i], loan_intent_names[j],
                p1 * 100, p2 * 100, (p1 - p2) * 100))
    cat(sprintf("   95%% CI: [%.2f%%, %.2f%%], p = %.4f\n",
                test$conf.int[1] * 100, test$conf.int[2] * 100, test$p.value))
    cat("--------------------------------------------------\n")  }}
## 📌 'DEBTCONSOLIDATION' vs 'EDUCATION': 21.63% vs 15.52% | Mức chênh lệch = 6.11%
##    95% CI: [5.04%, 7.18%], p = 0.0000
## --------------------------------------------------
## 📌 'DEBTCONSOLIDATION' vs 'HOMEIMPROVEMENT': 21.63% vs 12.58% | Mức chênh lệch = 9.05%
##    95% CI: [8.01%, 10.09%], p = 0.0000
## --------------------------------------------------
## 📌 'DEBTCONSOLIDATION' vs 'MEDICAL': 21.63% vs 23.78% | Mức chênh lệch = -2.15%
##    95% CI: [-3.31%, -0.99%], p = 0.0003
## --------------------------------------------------
## 📌 'DEBTCONSOLIDATION' vs 'PERSONAL': 21.63% vs 15.21% | Mức chênh lệch = 6.42%
##    95% CI: [5.35%, 7.49%], p = 0.0000
## --------------------------------------------------
## 📌 'DEBTCONSOLIDATION' vs 'VENTURE': 21.63% vs 11.28% | Mức chênh lệch = 10.35%
##    95% CI: [9.33%, 11.37%], p = 0.0000
## --------------------------------------------------
## 📌 'EDUCATION' vs 'HOMEIMPROVEMENT': 15.52% vs 12.58% | Mức chênh lệch = 2.94%
##    95% CI: [1.98%, 3.90%], p = 0.0000
## --------------------------------------------------
## 📌 'EDUCATION' vs 'MEDICAL': 15.52% vs 23.78% | Mức chênh lệch = -8.26%
##    95% CI: [-9.36%, -7.16%], p = 0.0000
## --------------------------------------------------
## 📌 'EDUCATION' vs 'PERSONAL': 15.52% vs 15.21% | Mức chênh lệch = 0.31%
##    95% CI: [-0.69%, 1.31%], p = 0.5433
## --------------------------------------------------
## 📌 'EDUCATION' vs 'VENTURE': 15.52% vs 11.28% | Mức chênh lệch = 4.24%
##    95% CI: [3.30%, 5.18%], p = 0.0000
## --------------------------------------------------
## 📌 'HOMEIMPROVEMENT' vs 'MEDICAL': 12.58% vs 23.78% | Mức chênh lệch = -11.20%
##    95% CI: [-12.26%, -10.14%], p = 0.0000
## --------------------------------------------------
## 📌 'HOMEIMPROVEMENT' vs 'PERSONAL': 12.58% vs 15.21% | Mức chênh lệch = -2.63%
##    95% CI: [-3.59%, -1.67%], p = 0.0000
## --------------------------------------------------
## 📌 'HOMEIMPROVEMENT' vs 'VENTURE': 12.58% vs 11.28% | Mức chênh lệch = 1.30%
##    95% CI: [0.40%, 2.20%], p = 0.0046
## --------------------------------------------------
## 📌 'MEDICAL' vs 'PERSONAL': 23.78% vs 15.21% | Mức chênh lệch = 8.57%
##    95% CI: [7.48%, 9.66%], p = 0.0000
## --------------------------------------------------
## 📌 'MEDICAL' vs 'VENTURE': 23.78% vs 11.28% | Mức chênh lệch = 12.50%
##    95% CI: [11.46%, 13.54%], p = 0.0000
## --------------------------------------------------
## 📌 'PERSONAL' vs 'VENTURE': 15.21% vs 11.28% | Mức chênh lệch = 3.93%
##    95% CI: [2.99%, 4.87%], p = 0.0000
## --------------------------------------------------

Kết quả kiểm định

Phân tích cho thấy sự khác biệt về tỷ lệ giữa các mục đích vay trong nhóm “Được duyệt” là rất rõ rệt và hầu hết đều có ý nghĩa thống kê cao (p < 5%).

  • Nhóm MEDICAL (Y tế) chiếm ưu thế lớn nhất: Với tỷ lệ 23,8%, đây là mục đích vay phổ biến nhất trong các khoản vay thành công, theo sau sát sao là nhóm DEBTCONSOLIDATION (Tái cấu trúc nghĩa vụ tài chính) với 21,6% (mức chênh lệch 2,2%).

  • Sự chênh lệch ở mức lớn: Tỷ lệ của nhóm MEDICAL cao hơn đáng kể so với các nhóm khác như PERSONAL (+8,6%), HOMEIMPROVEMENT (+11,2%), và đặc biệt là VENTURE (+12,5%). Tương tự, nhóm DEBTCONSOLIDATION cũng cao hơn hẳn các nhóm này (chênh lệch 6%-9%).

  • Hai nhóm EDUCATION (Giáo dục) (15,5%) và PERSONAL (Cá nhân) (15,2%), với tỷ lệ gần như tương đương (chênh lệch 0,31%) và không có sự khác biệt có ý nghĩa thống kê (p > 5%).

  • Các nhóm HOMEIMPROVEMENT (Cải thiện nhà cửa) (12,6%) và VENTURE (Đầu tư kinh doanh) (11,3%) có tỷ lệ thấp nhất trong nhóm được duyệt vay, và sự khác biệt giữa chúng là nhỏ tầm 1,3% nhưng vẫn có ý nghĩa thống kê.

b) Tỷ số Nguy cơ (Relative Risk - RR)

Giả thuyết kiểm định:

  • \(H_0: p_i = p_j\)

  • \(H_1: p_i ≠ p_j \neq 0\)

library(epitools)

# Bảng 2 chiều giữa loan_status và quyền sở hữu nhà, sắp xếp hàng theo "0", "1"
freq_tb1 <- table(tl_dt$loan_intent, tl_dt$loan_status)[,c("0", "1") ]

# Tính Risk Ratio
riskratio(freq_tb1)
## $data
##                    
##                         0     1 Total
##   DEBTCONSOLIDATION  4982  2163  7145
##   EDUCATION          7601  1552  9153
##   HOMEIMPROVEMENT    3525  1258  4783
##   MEDICAL            6170  2378  8548
##   PERSONAL           6031  1521  7552
##   VENTURE            6691  1128  7819
##   Total             35000 10000 45000
## 
## $measure
##                    risk ratio with 95% C.I.
##                      estimate     lower     upper
##   DEBTCONSOLIDATION 1.0000000        NA        NA
##   EDUCATION         0.5601108 0.5288701 0.5931969
##   HOMEIMPROVEMENT   0.8688123 0.8189810 0.9216756
##   MEDICAL           0.9189525 0.8749792 0.9651357
##   PERSONAL          0.6652930 0.6283972 0.7043551
##   VENTURE           0.4765447 0.4468043 0.5082645
## 
## $p.value
##                    two-sided
##                       midp.exact  fisher.exact    chi.square
##   DEBTCONSOLIDATION           NA            NA            NA
##   EDUCATION         0.000000e+00  2.462986e-89  6.238619e-90
##   HOMEIMPROVEMENT   2.440859e-06  2.479814e-06  2.598883e-06
##   MEDICAL           7.436820e-04  7.837599e-04  7.370214e-04
##   PERSONAL          0.000000e+00  1.177707e-45  1.483425e-45
##   VENTURE           0.000000e+00 6.439001e-122 7.413421e-121
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả phân tích cho thấy mục đích khoản vay là một yếu tố có tác động rất mạnh đến khả năng được phê duyệt khoản vay. So với nhóm vay với mục đích Tái cấu trúc nghĩa vụ tài chính (DEBTCONSOLIDATION) được chọn làm mốc so sánh, khả năng này thay đổi rõ rệt ở các nhóm còn lại.

Phân tích Tỷ lệ rủi ro (Risk Ratio - RR):

  • Nhóm Y tế (MEDICAL): Có cơ hội được duyệt vay gần như tương đương nhưng vẫn thấp hơn một chút, bằng 0,919 lần so với nhóm Tái cấu trúc nghĩa vụ tài chính. Khoảng tin cậy 95% là [0,87; 0,97].

  • Nhóm Cải thiện nhà cửa (HOMEIMPROVEMENT): Có cơ hội được duyệt vay thấp hơn, bằng 0,869 lần so với nhóm Tái cấu trúc nghĩa vụ tài chính. Khoảng tin cậy 95% là [0,82; 0,92].

  • Nhóm Cá nhân (PERSONAL): Có cơ hội được duyệt vay thấp hơn đáng kể, chỉ bằng 0,665 lần so với nhóm Tái cấu trúc nghĩa vụ tài chính, cho thấy một sự sụt giảm rõ rệt về khả năng tiếp cận vốn. Khoảng tin cậy 95% là [0,63; 0,70].

  • Nhóm Giáo dục (EDUCATION): Có cơ hội được duyệt vay thấp hơn nhiều, chỉ bằng 0,560 lần so với nhóm Tái cấu trúc nghĩa vụ tài chính. Khoảng tin cậy 95% là [0,53; 0,59].

  • Nhóm Đầu tư kinh doanh (VENTURE): Đây là nhóm có cơ hội được duyệt vay thấp nhất, chỉ bằng 0,477 lần so với nhóm Tái cấu trúc nghĩa vụ tài chính. Điều này cho thấy đây là mục đích vay có rủi ro bị từ chối cao nhất so với các nhóm còn lại. Khoảng tin cậy 95% là [0,45; 0,51].

c) Tỷ số Chênh (Odds Ratio - OR)

oddsratio(freq_tb1)
## $data
##                    
##                         0     1 Total
##   DEBTCONSOLIDATION  4982  2163  7145
##   EDUCATION          7601  1552  9153
##   HOMEIMPROVEMENT    3525  1258  4783
##   MEDICAL            6170  2378  8548
##   PERSONAL           6031  1521  7552
##   VENTURE            6691  1128  7819
##   Total             35000 10000 45000
## 
## $measure
##                    odds ratio with 95% C.I.
##                      estimate     lower     upper
##   DEBTCONSOLIDATION 1.0000000        NA        NA
##   EDUCATION         0.4703273 0.4365617 0.5065744
##   HOMEIMPROVEMENT   0.8220675 0.7573434 0.8920069
##   MEDICAL           0.8877197 0.8284143 0.9513026
##   PERSONAL          0.5809179 0.5385756 0.6264574
##   VENTURE           0.3883577 0.3580937 0.4209365
## 
## $p.value
##                    two-sided
##                       midp.exact  fisher.exact    chi.square
##   DEBTCONSOLIDATION           NA            NA            NA
##   EDUCATION         0.000000e+00  2.462986e-89  6.238619e-90
##   HOMEIMPROVEMENT   2.440859e-06  2.479814e-06  2.598883e-06
##   MEDICAL           7.436820e-04  7.837599e-04  7.370214e-04
##   PERSONAL          0.000000e+00  1.177707e-45  1.483425e-45
##   VENTURE           0.000000e+00 6.439001e-122 7.413421e-121
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Phân tích Tỷ lệ chênh (Odds Ratio - OR):

Kết quả phân tích cho thấy có một mối liên hệ rất mạnh mẽ và có ý nghĩa thống kê giữa mục đích khoản vay và khả năng được phê duyệt. So với nhóm vay với mục đích Tái cấu trúc nghĩa vụ tài chính (DEBTCONSOLIDATION), vốn được chọn làm mốc tham chiếu, tỷ lệ chênh (odds) được duyệt thay đổi rõ rệt ở tất cả các nhóm còn lại, đa số theo hướng tiêu cực.

  • Nhóm Y tế (MEDICAL) và Cải thiện nhà cửa (HOMEIMPROVEMENT): Có OR lần lượt là 0,888 và 0,822, nghĩa là odds được duyệt vay của hai nhóm này thấp hơn một chút, bằng khoảng 82% - 89% so với nhóm Tái cấu trúc nghĩa vụ tài chính. Khoảng tin cậy 95% tương ứng là [0,83 – 0,95] và [0,76 – 0,89], cho thấy đây là các yếu tố có ảnh hưởng tiêu cực nhưng ở mức độ vừa phải.

  • Nhóm Cá nhân (PERSONAL) và Giáo dục (EDUCATION): Có OR thấp hơn đáng kể, lần lượt là 0,581 và 0,470. Điều này cho thấy odds được duyệt vay của họ giảm mạnh, chỉ còn khoảng 47% - 58% so với nhóm Tái cấu trúc nghĩa vụ tài chính. Khoảng tin cậy 95% tương ứng là [0,54 – 0,63] và [0,44 – 0,51], xác nhận đây là những mục đích vay có ảnh hưởng tiêu cực rất rõ rệt.

  • Nhóm Đầu tư kinh doanh (VENTURE): Đây là nhóm có ảnh hưởng tiêu cực nhất với OR là 0,388, tức odds được duyệt vay chỉ bằng khoảng 39% so với nhóm Tái cấu trúc nghĩa vụ tài chính. Khoảng tin cậy 95% [0,36 – 0,42] cho thấy đây là mục đích vay có rủi ro bị từ chối cao nhất trong các nhóm được so sánh.

2.2.3. Mối quan hệ giữa biến loan_status và và biến định lượng

Việc phân nhóm các biến định lượng thành các mức rời rạc có thể dẫn đến mất mát thông tin chi tiết, làm giảm độ chính xác của phân tích. Ngoài ra, kết quả OR/RR thu được thường phụ thuộc vào cách chọn ngưỡng phân nhóm, từ đó ảnh hưởng đến tính khách quan của phân tích.

Thay vào đó, việc khai thác xu hướng tổng thể của biến định lượng liên tục sẽ cung cấp cái nhìn đầy đủ và phản ánh chính xác hơn mối quan hệ thực tiễn giữa các biến. Vì vậy, phần phân tích OR/RR dựa trên các nhóm phân loại đã được lược bỏ trong nghiên cứu này nhằm đảm bảo tính khoa học và hợp lý về phương pháp luận.

a) Mối quan hệ giữa loan_statusperson_age

  • Bảng tần số
# Lập bảng chéo
freq_tb_1 <- table(tl_dt$loan_status, tl_dt$person_age_group)
# Kiểm tra và hiển thị
print(freq_tb_1)
##    
##     Trẻ (≤30) Trưởng thành (31–40) Trung niên (41–60) Cao tuổi (>60)
##   0     25023                 8256               1653             68
##   1      7355                 2178                441             26
  • Bảng tần suất
# Bảng tần suất theo hàng (mỗi hàng cộng 100%)
prop_tb_1 <- prop.table(freq_tb_1, margin = 1) * 100
# Làm tròn để dễ đọc
prop_tb_1 <- round(prop_tb_1,3)
# Thêm tổng hàng (tùy chọn)
prop_tb_1a <- addmargins(prop_tb_1)
prop_tb_1a
##      
##       Trẻ (≤30) Trưởng thành (31–40) Trung niên (41–60) Cao tuổi (>60)     Sum
##   0      71.494               23.589              4.723          0.194 100.000
##   1      73.550               21.780              4.410          0.260 100.000
##   Sum   145.044               45.369              9.133          0.454 200.000
  • Thể hiện biểu đồ
# Tính bảng tần suất theo hàng
prop_tb_1 <- round(prop.table(freq_tb_1, margin = 1), 4)
# Loại bỏ dòng hoặc cột "Sum" nếu có
prop_tb_1 <- prop_tb_1[rownames(prop_tb_1) != "Sum", colnames(prop_tb_1) != "Sum"]
# Chuyển sang data frame
E_1_freq_df <- as.data.frame(prop_tb_1)
colnames(E_1_freq_df) <- c("loan_status", "person_age_group", "Percent")
# Đổi tỷ lệ sang phần trăm
E_1_freq_df$Percent <- E_1_freq_df$Percent * 100
# Đặt nhãn cho biến loan_status (phải áp dụng đúng cho data frame đang dùng)
E_1_freq_df$loan_status <- factor(E_1_freq_df$loan_status,
                                  levels = c("0", "1"),
                                  labels = c("Bị từ chối", "Được phê duyệt"))
# Vẽ biểu đồ cột song song
library(ggplot2)
ggplot(E_1_freq_df, aes(x = loan_status, y = Percent, fill = person_age_group)) +
  geom_col(position = position_dodge(width = 0.7), width = 0.7, color = "black") +
  geom_text(aes(label = sprintf("%.1f%%", Percent)),
            position = position_dodge(width = 0.7),
            vjust = -0.3, size = 4, color = "black") +
  labs(title = "Tỷ lệ phê duyệt khoản vay theo nhóm tuổi",
    x = "Tình trạng khoản vay", 
    y = "Tỷ lệ (%)",
    fill = "Phân bố nhóm tuổi") +
  scale_fill_brewer(palette = "Set3") +
  theme_minimal()

Nhận xét

Mối liên hệ giữa nhóm tuổi và tình trạng phê duyệt khoản vay không thể hiện sự khác biệt lớn, cho thấy đây không phải là một yếu tố có ảnh hưởng mạnh mẽ. Cơ cấu độ tuổi ở cả hai nhóm “Được phê duyệt” và “Bị từ chối” là rất tương đồng.

  • Nhóm Trẻ (≤30): Chiếm đa số áp đảo ở cả hai trạng thái, tăng nhẹ từ 71,5% trong nhóm bị từ chối lên 73,6% trong nhóm được duyệt (tăng khoảng 2,1%). Điều này cho thấy nhóm khách hàng trẻ tuổi là nhóm đi vay chủ yếu, bất kể kết quả phê duyệt.

  • Nhóm Trưởng thành (31-40): Ngược lại, nhóm này lại có xu hướng giảm nhẹ, từ 23,6% xuống còn 21,8% (giảm khoảng 1,8%). Đây là nhóm lớn thứ hai nhưng tỷ trọng của họ lại thấp hơn một chút trong các khoản vay thành công.

  • Nhóm Trung niên (41-60): Cũng ghi nhận sự sụt giảm không đáng kể, từ 4,7% xuống 4,4% (giảm khoảng 0,3%).

  • Nhóm Cao tuổi (>60): Gần như không thay đổi và chiếm tỷ lệ rất nhỏ ở cả hai nhóm, chỉ tăng nhẹ từ 0,2% lên 0,3%.

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Tình trạng duyệt vay và độ tuổi là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và độ tuổi là 2 biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_1)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_1
## X-squared = 18.784, df = 3, p-value = 0.000303

Kết quả kiểm định Chi-squared

  • Giá trị thống kê: \(\chi^2\) = 18,784
  • Bậc tự do: \(df\) = 3
  • Giá trị \(p-value\) = 0,000303

Kết luận:

Với \(p-value\) = 0,000303 < 0.05, ta bác bỏ giả thuyết \(H_0\), Kết quả phân tích cho thấy có mối liên hệ giữa hai biến đang được xem xét, phản ánh sự ảnh hưởng hoặc tương quan nhất định giữa chúng.

b) Mối quan hệ giữa loan_statusloan_int_rate

  • Bảng tần số
# Lập bảng chéo
freq_tb_1 <- table(tl_dt$loan_status, tl_dt$loan_int_cat)
# Kiểm tra và hiển thị
print(freq_tb_1)
##    
##     Rất thấp (<8%) Thấp (8%–11%) Trung bình (11%–14%) Cao (≥14%)
##   0           8938          9577                13151       3334
##   1            886          1658                 3493       3963
  • Bảng tần suất
# Bảng tần suất theo hàng (mỗi hàng cộng 100%)
prop_tb_1 <- prop.table(freq_tb_1, margin = 1) * 100
# Làm tròn để dễ đọc
prop_tb_1 <- round(prop_tb_1,3)
# Thêm tổng hàng (tùy chọn)
prop_tb_1a <- addmargins(prop_tb_1)
prop_tb_1a
##      
##       Rất thấp (<8%) Thấp (8%–11%) Trung bình (11%–14%) Cao (≥14%)     Sum
##   0           25.537        27.363               37.574      9.526 100.000
##   1            8.860        16.580               34.930     39.630 100.000
##   Sum         34.397        43.943               72.504     49.156 200.000
  • Thể hiện biểu đồ
# Tính bảng tần suất theo hàng (tức là tính theo từng mức của biến Epidemic)
prop_tb_1 <- round(prop.table(freq_tb_1, margin = 1), 4)
# Loại bỏ dòng hoặc cột "Sum" nếu có (nếu bạn từng dùng addmargins trước đó)
prop_tb_1 <- prop_tb_1[rownames(prop_tb_1) != "Sum", colnames(prop_tb_1) != "Sum"]
# Chuyển sang data frame
E_1_freq_df <- as.data.frame(prop_tb_1)
colnames(E_1_freq_df) <- c("loan_status", "loan_int_rate", "Percent")
# Đổi tỷ lệ sang phần trăm
E_1_freq_df$Percent <- E_1_freq_df$Percent * 100
# Đặt nhãn cho biến loan_status (phải áp dụng đúng cho data frame đang dùng)
E_1_freq_df$loan_status <- factor(E_1_freq_df$loan_status,
                                  levels = c("0", "1"),
                                  labels = c("Bị từ chối", "Được phê duyệt"))
# Vẽ biểu đồ cột chồng
library(ggplot2)
ggplot(E_1_freq_df, aes(x = loan_status, y = Percent, fill = loan_int_rate)) +
  geom_col(position = "stack", width = 0.7, color = "black") +
  geom_text(aes(label = sprintf("%.1f%%", Percent)),
            position = position_stack(vjust = 0.5),
            size = 4, color = "black") +
  labs(title = "Tỷ lệ phê duyệt khoản vay theo lãi suất (%)",
    x = "Tình trạng khoản vay", 
    y = "Tần suất (%)",
    fill = "Phân khúc lãi suất") +
  scale_fill_brewer(palette = "Set3") +
  theme_minimal()

Nhận xét

Mối liên hệ giữa lãi suất và tình trạng phê duyệt khoản vay thể hiện sự khác biệt rất lớn, cho thấy đây là một yếu tố có ảnh hưởng mạnh mẽ. Cơ cấu lãi suất ở hai nhóm “Được duyệt” và “Bị từ chối” là hoàn toàn khác biệt.

  • Nhóm Lãi suất Cao (≥14%): Cho thấy sự thay đổi lớn nhất, tăng đột biến từ 9,5% trong nhóm bị từ chối lên 39,6% trong nhóm được duyệt (tăng khoảng 30,1%). Điều này cho thấy các khoản vay được duyệt có xu hướng tập trung ở mức lãi suất cao nhất.

  • Nhóm Lãi suất Rất thấp (<8%): Ngược lại, nhóm này có xu hướng giảm mạnh nhất, từ 25,5% xuống chỉ còn 8,9% (giảm khoảng 16,6%). Đây là nhóm có sự sụt giảm tỷ trọng lớn nhất khi khoản vay được phê duyệt.

  • Nhóm Lãi suất Thấp (8%–11%): Cũng ghi nhận sự sụt giảm đáng kể, từ 27,4% xuống 16,6% (giảm khoảng 10,8%).

  • Nhóm Lãi suất Trung bình (11%–14%): Mặc dù vẫn chiếm tỷ trọng lớn, nhóm này giảm nhẹ nhất, từ 37,6% xuống 34,9% (giảm khoảng 2,7%).

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Tình trạng duyệt vay và lãi suất là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và lãi suất là 2 biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_1)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_1
## X-squared = 5714.7, df = 3, p-value < 2.2e-16

Kết quả kiểm định Chi-squared

  • Giá trị thống kê: \(\chi^2\) = 5714,7
  • Bậc tự do: \(df\) = 3
  • Giá trị \(p-value\) < 2.2e-16

Kết luận:

Với \(p-value\) < 2.2e-16 < 0.05, ta bác bỏ giả thuyết \(H_0\), Kết quả phân tích cho thấy có mối liên hệ giữa hai biến đang được xem xét, phản ánh sự ảnh hưởng hoặc tương quan nhất định giữa chúng.

c) Mối quan hệ giữa loan_statusloan_percent_income

  • Bảng tần số
# Lập bảng chéo
freq_tb_1 <- table(tl_dt$loan_status, tl_dt$loan_inc_cat)
# Kiểm tra và hiển thị
print(freq_tb_1)
##    
##     Rất thấp (<8%) Thấp (8%–15%) Trung bình (15%–25%) Cao (≥25%)
##   0          10261         13330                 9588       1821
##   1           1296          2223                 2570       3911
  • Bảng tần suất
# Bảng tần suất theo hàng (mỗi hàng cộng 100%)
prop_tb_1 <- prop.table(freq_tb_1, margin = 1) * 100
# Làm tròn để dễ đọc
prop_tb_1 <- round(prop_tb_1,3)
# Thêm tổng hàng (tùy chọn)
prop_tb_1a <- addmargins(prop_tb_1)
prop_tb_1a
##      
##       Rất thấp (<8%) Thấp (8%–15%) Trung bình (15%–25%) Cao (≥25%)     Sum
##   0           29.317        38.086               27.394      5.203 100.000
##   1           12.960        22.230               25.700     39.110 100.000
##   Sum         42.277        60.316               53.094     44.313 200.000
  • Thể hiện biểu đồ
# Tính bảng tần suất theo hàng (tức là tính theo từng mức của biến Epidemic)
prop_tb_1 <- round(prop.table(freq_tb_1, margin = 1), 4)
# Loại bỏ dòng hoặc cột "Sum" nếu có (nếu bạn từng dùng addmargins trước đó)
prop_tb_1 <- prop_tb_1[rownames(prop_tb_1) != "Sum", colnames(prop_tb_1) != "Sum"]
# Chuyển sang data frame
E_1_freq_df <- as.data.frame(prop_tb_1)
colnames(E_1_freq_df) <- c("loan_status", "loan_inc_cat", "Percent")
# Đổi tỷ lệ sang phần trăm
E_1_freq_df$Percent <- E_1_freq_df$Percent * 100
# Đặt nhãn cho biến loan_status (phải áp dụng đúng cho data frame đang dùng)
E_1_freq_df$loan_status <- factor(E_1_freq_df$loan_status,
                                  levels = c("0", "1"),
                                  labels = c("Bị từ chối", "Được phê duyệt"))
# Vẽ biểu đồ cột chồng
library(ggplot2)
ggplot(E_1_freq_df, aes(x = loan_status, y = Percent, fill = loan_inc_cat)) +
  geom_col(position = "stack", width = 0.7, color = "black") +
  geom_text(aes(label = sprintf("%.1f%%", Percent)),
            position = position_stack(vjust = 0.5),
            size = 4, color = "black") +
  labs(title = "Tỷ lệ phê duyệt khoản vay theo mức độ vay so với thu nhập",
    x = "Tình trạng khoản vay", 
    y = "Tỷ lệ (%)",
    fill = " Phân khúc tỷ lệ vay trên thu nhập") +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal()

Nhận xét

Mối liên hệ giữa tỷ lệ vay trên thu nhập và tình trạng phê duyệt khoản vay thể hiện sự khác biệt rất lớn, cho thấy đây là một yếu tố có ảnh hưởng mạnh mẽ. Cơ cấu tỷ lệ vay trên thu nhập ở hai nhóm “Được duyệt” và “Bị từ chối” là hoàn toàn khác biệt.

  • Nhóm tỷ lệ vay trên thu nhập Cao (≥14%): Cho thấy sự thay đổi lớn nhất, tăng đột biến từ 9.5% trong nhóm bị từ chối lên 39.6% trong nhóm được duyệt (tăng khoảng 30.1%). Điều này cho thấy các khoản vay được duyệt có xu hướng tập trung mạnh ở nhóm có tỷ lệ vay trên thu nhập cao.

  • Nhóm tỷ lệ vay trên thu nhập Rất thấp (<8%): Ngược lại, nhóm này có xu hướng giảm mạnh nhất, từ 25.5% xuống chỉ còn 8.9% (giảm khoảng 16.6%). Đây là nhóm có sự sụt giảm tỷ trọng lớn nhất khi khoản vay được phê duyệt.

  • Nhóm tỷ lệ vay trên thu nhập Thấp (8%–11%): Cũng ghi nhận sự sụt giảm đáng kể, từ 27.4% xuống 16.6% (giảm khoảng 10.8%).

  • Nhóm tỷ lệ vay trên thu nhập Trung bình (11%–14%): Mặc dù chiếm tỷ trọng lớn nhất trong nhóm bị từ chối, nhóm này giảm nhẹ nhất, từ 37.6% xuống 34.9% (giảm khoảng 2.7%).

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Tình trạng duyệt vay và tỷ lệ vay trên thu nhập là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và tỷ lệ vay trên thu nhập là biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_1)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_1
## X-squared = 8404.4, df = 3, p-value < 2.2e-16

Kết quả kiểm định Chi-squared

  • Giá trị thống kê: \(\chi^2\) = 5714,7
  • Bậc tự do: \(df\) = 3
  • Giá trị \(p-value\) < 2.2e-16

Kết luận:

Với \(p-value\) < 2.2e-16 < 0.05, ta bác bỏ giả thuyết \(H_0\), Kết quả phân tích cho thấy có mối liên hệ giữa hai biến đang được xem xét, phản ánh sự ảnh hưởng hoặc tương quan nhất định giữa chúng.

d) Mối quan hệ giữa loan_statuscredit_score

  • Bảng tần số
# Lập bảng chéo
freq_tb_1 <- table(tl_dt$loan_status, tl_dt$score_group)
# Kiểm tra và hiển thị
print(freq_tb_1)
##    
##     Rất thấp (<580) Thấp (580–639) Trung bình (640–699) Cao (≥700)
##   0            5362          12057                15316       2265
##   1            1539           3516                 4336        609
  • Bảng tần suất
# Bảng tần suất theo hàng (mỗi hàng cộng 100%)
prop_tb_1 <- prop.table(freq_tb_1, margin = 1) * 100
# Làm tròn để dễ đọc
prop_tb_1 <- round(prop_tb_1,3)
# Thêm tổng hàng (tùy chọn)
prop_tb_1a <- addmargins(prop_tb_1)
prop_tb_1a
##      
##       Rất thấp (<580) Thấp (580–639) Trung bình (640–699) Cao (≥700)     Sum
##   0            15.320         34.449               43.760      6.471 100.000
##   1            15.390         35.160               43.360      6.090 100.000
##   Sum          30.710         69.609               87.120     12.561 200.000
  • Thể hiện biểu đồ
# Tính bảng tần suất theo hàng (tức là tính theo từng mức của biến Epidemic)
prop_tb_1 <- round(prop.table(freq_tb_1, margin = 1), 4)
# Loại bỏ dòng hoặc cột "Sum" nếu có (nếu bạn từng dùng addmargins trước đó)
prop_tb_1 <- prop_tb_1[rownames(prop_tb_1) != "Sum", colnames(prop_tb_1) != "Sum"]
# Chuyển sang data frame
E_1_freq_df <- as.data.frame(prop_tb_1)
colnames(E_1_freq_df) <- c("loan_status", "score_group", "Percent")
# Đổi tỷ lệ sang phần trăm
E_1_freq_df$Percent <- E_1_freq_df$Percent * 100
# Đặt nhãn cho biến loan_status (phải áp dụng đúng cho data frame đang dùng)
E_1_freq_df$loan_status <- factor(E_1_freq_df$loan_status,
                                  levels = c("0", "1"),
                                  labels = c("Bị từ chối", "Được phê duyệt"))
# Vẽ biểu đồ cột chồng
library(ggplot2)
ggplot(E_1_freq_df, aes(x = loan_status, y = Percent, fill = score_group)) +
  geom_col(position = "stack", width = 0.7, color = "black") +
  geom_text(aes(label = sprintf("%.1f%%", Percent)),
            position = position_stack(vjust = 0.5),
            size = 4, color = "black") +
  labs(title = "Tỷ lệ phê duyệt khoản vay theo điểm tín dụng",
    x = "Tình trạng khoản vay", 
    y = "Tỷ lệ (%)",
    fill = "Phân khúc điểm tín dụng") +
  scale_fill_brewer(palette = "Set3") +
  theme_minimal()

Nhận xét

Mối liên hệ giữa điểm tín dụng và tình trạng phê duyệt khoản vay không thể hiện sự khác biệt lớn, cho thấy đây không phải là một yếu tố có ảnh hưởng mạnh mẽ. Cơ cấu phân khúc điểm tín dụng ở hai nhóm “Được duyệt” và “Bị từ chối” là rất tương đồng.

  • Nhóm điểm tín dụng Thấp (580–639) và Rất thấp (<580): Ghi nhận sự thay đổi không đáng kể. Nhóm “Thấp” tăng nhẹ từ 34,4% lên 35,2% (tăng khoảng 0,8%), trong khi nhóm “Rất thấp” gần như giữ nguyên, tăng từ 15,3% lên 15,4% (tăng khoảng 0,1%).

  • Nhóm điểm tín dụng Trung bình (640–699) và Cao (≥700): Tương tự, hai nhóm này cũng chỉ giảm nhẹ. Nhóm “Trung bình” giảm từ 43,8% xuống 43,4% (giảm khoảng 0,4%), và nhóm “Cao” giảm từ 6,5% xuống 6,1% (giảm khoảng 0,4%).

  • Nhìn chung, sự thay đổi tỷ lệ giữa các nhóm là không đáng kể, cho thấy rằng điểm tín dụng (khi được phân loại theo các phân khúc cụ thể) không đóng vai trò quyết định đối với việc khoản vay được phê duyệt hay từ chối trong tập dữ liệu hiện tại.

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Tình trạng duyệt vay và điểm tín dụng là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và điểm tín dụng là biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_1)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_1
## X-squared = 3.2191, df = 3, p-value = 0.3591

Kết quả kiểm định Chi-squared

  • Giá trị thống kê: \(\chi^2\) = 3,2191
  • Bậc tự do: \(df\) = 3
  • Giá trị \(p-value\) = 0.3591

Kết luận:

Với \(p-value\) = 0.3591 > 0.05, ta có không có cơ sở bác bỏ giả thuyết \(H_0\), Do đó, kết quả phân tích không cho thấy mối liên hệ có ý nghĩa thống kê giữa các biến; nói cách khác, các biến được xem là độc lập với nhau.

e) Mối quan hệ giữa loan_statuscb_person_cred_hist_length

  • Bảng tần số
# Lập bảng chéo
freq_tb_1 <- table(tl_dt$loan_status, tl_dt$cred_hist_cat)
# Kiểm tra và hiển thị
print(freq_tb_1)
##    
##     Rất thấp (<3 năm) Thấp (3–6 năm) Trung bình (6–10 năm) Cao (≥10 năm)
##   0              4986          15525                  8904          5585
##   1              1551           4522                  2436          1491
  • Bảng tần suất
# Bảng tần suất theo hàng (mỗi hàng cộng 100%)
prop_tb_1 <- prop.table(freq_tb_1, margin = 1) * 100
# Làm tròn để dễ đọc
prop_tb_1 <- round(prop_tb_1,3)
# Thêm tổng hàng (tùy chọn)
prop_tb_1a <- addmargins(prop_tb_1)
prop_tb_1a
##      
##       Rất thấp (<3 năm) Thấp (3–6 năm) Trung bình (6–10 năm) Cao (≥10 năm)
##   0              14.246         44.357                25.440        15.957
##   1              15.510         45.220                24.360        14.910
##   Sum            29.756         89.577                49.800        30.867
##      
##           Sum
##   0   100.000
##   1   100.000
##   Sum 200.000
  • Thể hiện biểu đồ
# Tính bảng tần suất theo hàng (tức là tính theo từng mức của biến Epidemic)
prop_tb_1 <- round(prop.table(freq_tb_1, margin = 1), 4)
# Loại bỏ dòng hoặc cột "Sum" nếu có (nếu bạn từng dùng addmargins trước đó)
prop_tb_1 <- prop_tb_1[rownames(prop_tb_1) != "Sum", colnames(prop_tb_1) != "Sum"]
# Chuyển sang data frame
E_1_freq_df <- as.data.frame(prop_tb_1)
colnames(E_1_freq_df) <- c("loan_status", "cred_hist_cat", "Percent")
# Đổi tỷ lệ sang phần trăm
E_1_freq_df$Percent <- E_1_freq_df$Percent * 100
# Đặt nhãn cho biến loan_status (phải áp dụng đúng cho data frame đang dùng)
E_1_freq_df$loan_status <- factor(E_1_freq_df$loan_status,
                                  levels = c("0", "1"),
                                  labels = c("Bị từ chối", "Được phê duyệt"))
# Vẽ biểu đồ cột chồng
library(ggplot2)
ggplot(E_1_freq_df, aes(x = loan_status, y = Percent, fill = cred_hist_cat)) +
  geom_col(position = "stack", width = 0.7, color = "black") +
  geom_text(aes(label = sprintf("%.1f%%", Percent)),
            position = position_stack(vjust = 0.5),
            size = 4, color = "black") +
  labs(
    title = "Tỷ lệ phê duyệt khoản vay theo lịch sử tín dụng",
    x = "Tình trạng khoản vay", 
    y = "Tỷ lệ (%)",
    fill = "Phân khúc thâm niên tín dụng") +
  scale_fill_brewer(palette = "Set3") +
  theme_minimal()

Nhận xét

Mối liên hệ giữa thâm niên tín dụng và tình trạng phê duyệt khoản vay không thể hiện sự khác biệt lớn, cho thấy đây không phải là một yếu tố có ảnh hưởng mạnh mẽ. Cơ cấu phân khúc thâm niên tín dụng ở hai nhóm “Được duyệt” và “Bị từ chối” là rất gần nhau.

  • Nhóm thâm niên Thấp (3–6 năm) và Rất thấp (<3 năm): Ghi nhận sự thay đổi không đáng kể. Nhóm “Thấp” tăng nhẹ từ 44,4% lên 45,2% (tăng khoảng 0,8%), trong khi nhóm “Rất thấp” cũng tăng nhẹ từ 14,2% lên 15,5% (tăng khoảng 1,3%).

  • Nhóm thâm niên Trung bình (6–10 năm) và Cao (≥10 năm): Tương tự, hai nhóm này cũng chỉ giảm nhẹ. Nhóm “Trung bình” giảm từ 25,4% xuống 24,4% (giảm khoảng 1,0%), và nhóm “Cao” giảm từ 16,0% xuống 14,9% (giảm khoảng 1,1%).

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Tình trạng duyệt vay và thâm niên tín dụng là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và thâm niên tín dụng là biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_1)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_1
## X-squared = 18.882, df = 3, p-value = 0.0002892

Kết quả kiểm định Chi-squared

  • Giá trị thống kê: \(\chi^2\) = 18.882
  • Bậc tự do: \(df\) = 3
  • Giá trị \(p-value\) = 0.0002892

Kết luận:

Với \(p-value\) = 0.0002892 < 0.05, ta bác bỏ giả thuyết \(H_0\), Kết quả phân tích cho thấy có mối liên hệ giữa hai biến đang được xem xét, phản ánh sự ảnh hưởng hoặc tương quan nhất định giữa chúng.

3.2.4. Mối quan hệ giữa biến phân loại đa phạm trù (loan_intent) và các yếu tố liên quan

a) person_age

  • Thể hiện biểu đồ
freq_tb_1 <- table(tl_dt$person_age_group, tl_dt$loan_intent)
# Tính bảng tần suất theo hàng
prop_tb_1 <- round(prop.table(freq_tb_1, margin = 1), 4)
# Loại bỏ dòng hoặc cột "Sum" nếu có
prop_tb_1 <- prop_tb_1[rownames(prop_tb_1) != "Sum", colnames(prop_tb_1) != "Sum"]
# Chuyển sang data frame
E_1_freq_df <- as.data.frame(prop_tb_1)
colnames(E_1_freq_df) <- c("person_age", "loan_intent", "Percent")
# Đổi tỷ lệ sang phần trăm
E_1_freq_df$Percent <- E_1_freq_df$Percent * 100
# Vẽ biểu đồ cột song song
library(ggplot2)
ggplot(E_1_freq_df, aes(x = person_age, y = Percent, fill = loan_intent)) +
  geom_col(position = "dodge", width = 0.7) +
  geom_text(aes(label = sprintf("%.1f%%", Percent)),
            position = position_dodge(width = 0.7),
            hjust = 1, size = 2.5, color = "black") +
  labs(title = "Phân bố mục đích vay theo nhóm tuổi",
       x = "Nhóm tuổi", 
       y = "Tỷ lệ (%)",
       fill = "Mục đích vay") +
  scale_fill_brewer(palette = "Set2") +
  coord_flip() +  # << chuyển biểu đồ thành ngang
  theme_minimal(base_size = 11) +
  theme_minimal()

Nhận xét

Mục đích vay vốn thay đổi rõ rệt theo từng giai đoạn cuộc đời: Mỗi nhóm tuổi có những ưu tiên vay khác nhau.

  • Nhóm trẻ (≤30 tuổi): Nhu cầu vay cho Giáo dục (Education) là cao nhất (21,9%), phản ánh giai đoạn học tập và phát triển sự nghiệp.

  • Nhóm cao tuổi (>60): Nhu cầu vay tập trung chủ yếu vào Tiêu dùng cá nhân (Personal) và Y tế (Medical) với tỷ lệ lần lượt 36,2% và 27,7%, chiếm tỷ lệ vượt trội so với các mục đích khác.

  • Các nhóm tuổi ở giữa (31-60): Cơ cấu vay vốn cân bằng hơn, không có mục đích nào quá lấn át. Các nhu cầu về y tế, tiêu dùng, tái cấu trúc nghĩa vụ tài chính (debt consolidation) khá tương đồng.

  • Nhu cầu vay sửa nhà (Home Improvement): Tỷ lệ này thấp nhất ở nhóm trẻ và nhóm cao tuổi, nhưng cao hơn ở độ tuổi trưởng thành và trung niên khi họ đã ổn định cuộc sống.

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Mục đích đi vay và độ tuổi là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và độ tuổi là biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_1)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_1
## X-squared = 318.82, df = 15, p-value < 2.2e-16

b) person_home_ownership

- Thể hiện biểu đồ

freq_tb_1 <- table(tl_dt$person_home_ownership, tl_dt$loan_intent)
# Tính bảng tần suất theo hàng
prop_tb_1 <- round(prop.table(freq_tb_1, margin = 1), 4)
# Loại bỏ dòng hoặc cột "Sum" nếu có
prop_tb_1 <- prop_tb_1[rownames(prop_tb_1) != "Sum", colnames(prop_tb_1) != "Sum"]
# Chuyển sang data frame
E_1_freq_df <- as.data.frame(prop_tb_1)
colnames(E_1_freq_df) <- c("person_home_ownership", "loan_intent", "Percent")
# Đổi tỷ lệ sang phần trăm
E_1_freq_df$Percent <- E_1_freq_df$Percent * 100
# Vẽ biểu đồ cột song song
library(ggplot2)
ggplot(E_1_freq_df, aes(x = person_home_ownership, y = Percent, fill = loan_intent)) +
  geom_col(position = "dodge", width = 0.7) +
  geom_text(aes(label = sprintf("%.1f%%", Percent)),
            position = position_dodge(width = 0.7),
            hjust = 1, size = 2.5, color = "black") +
  labs(title = "Phân bố mục đích vay theo tình trạng sở hữu nhà",
       x = "Tình trạng sở hữu nhà", 
       y = "Tỷ lệ (%)",
       fill = "Mục đích vay") +
  scale_fill_brewer(palette = "Set3") +
  coord_flip() +
  theme_minimal(base_size = 11) +
  theme()

Nhận xét

Tình trạng sở hữu nhà ảnh hưởng rất lớn đến mục đích vay: Mỗi nhóm có những ưu tiên khác biệt rõ rệt.

  • Người đã sở hữu nhà (OWN): Có xu hướng vay để Đầu tư kinh doanh (Venture) cao vượt trội (30,4%). Đáng chú ý, họ có tỷ lệ vay để Tái cấu trúc nghĩa vụ tài chính (Debt Consolidation) thấp nhất tuyệt đối (chỉ 2,9%), cho thấy tình hình tài chính của họ rất ổn định.

  • Người đi thuê nhà (RENT): Tập trung vào các nhu cầu cá nhân như Y tế (Medical) (21,3%) và Giáo dục (Education) (20,4%). Họ có tỷ lệ vay để Sửa nhà (Home Improvement) thấp một cách hợp lý (9,0%).

  • Người đang trả góp (MORTGAGE): Có cơ cấu vay vốn cân bằng và đa dạng nhất, không có mục đích nào quá chênh lệch so với các mục đích còn lại.

  • Người đi vay thuộc nhóm khác (OTHER): Chủ yếu vay với nhu cấu Đầu tư kinh doanh (Venture) 23,1%, ngoài ra các mục đích khác đều nằm ở ngưỡng 10% - 19%. Thấp nhất là vay để sửa nhà (Home Improvement) chỉ chiếm 10,3%.

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Mục đích đi vay và tình trạng sở hữu nhà là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và tình trạng sở hữu nhà là biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_1)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_1
## X-squared = 926.2, df = 15, p-value < 2.2e-16

c) loan_percent_income

- Thể hiện biểu đồ

freq_tb_1 <- table(tl_dt$loan_inc_cat, tl_dt$loan_intent)
# Tính bảng tần suất theo hàng
prop_tb_1 <- round(prop.table(freq_tb_1, margin = 1), 4)
# Loại bỏ dòng hoặc cột "Sum" nếu có
prop_tb_1 <- prop_tb_1[rownames(prop_tb_1) != "Sum", colnames(prop_tb_1) != "Sum"]
# Chuyển sang data frame
E_1_freq_df <- as.data.frame(prop_tb_1)
colnames(E_1_freq_df) <- c("loan_percent_income", "loan_intent", "Percent")
# Đổi tỷ lệ sang phần trăm
E_1_freq_df$Percent <- E_1_freq_df$Percent * 100
library(ggplot2)
ggplot(E_1_freq_df, aes(x = loan_percent_income, y = Percent, fill = loan_intent)) +
  geom_col(position = "dodge", width = 0.7) +
  geom_text(aes(label = sprintf("%.1f%%", Percent)),
            position = position_dodge(width = 0.7),
            hjust = 1, size = 2.5, color = "black") +
  labs(title = "Phân bố mục đích vay theo tỷ lệ khoản vay trên thu nhập",
    x = "Tỷ lệ khoản vay trên thu nhập", 
    y = "Tỷ lệ (%)",
    fill = "Mục đích vay") +
  scale_fill_brewer(palette = "Set3") +
  coord_flip() +
  theme_minimal(base_size = 11)

Nhận xét

Nhìn chung, phân bổ các mục đích vay khá tương đồng giữa các nhóm tỷ lệ khoản vay trên thu nhập, không có sự khác biệt quá đột biến.

  • Có hai xu hướng ngược chiều rõ rệt:

  • Nhu cầu vay cho Y tế (Medical) có xu hướng tăng lên rõ rệt khi tỷ lệ vay trên thu nhập tăng cao (từ 18,0% lên 20,5%).

  • Ngược lại, tỷ lệ vay để Sửa nhà (Home Improvement) lại giảm xuống khi gánh nặng tài chính tăng lên (từ 11,4% xuống 9,3%).

  • Vay cho Giáo dục (Education) luôn là một trong những mục đích chiếm tỷ lệ cao nhất ở mọi nhóm, cho thấy đây là một nhu cầu vay quan trọng và ổn định.

  • Kiểm định thống kê

Giả thuyết

  • \(H_0:\) Mục đích đi vay và tỷ lệ vay trên thu nhập là hai biến số độc lập với nhau.
  • \(H_1:\) Tình trạng duyệt vay và tỷ lệ vay trên thu nhập là biến có mối liên hệ với nhau.
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_1)
# In kết quả kiểm định
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  freq_tb_1
## X-squared = 52.691, df = 15, p-value = 4.339e-06

Với \(p-value\) của 3 trường hợp đều thấp hơn mức ý nghĩa 5%, ta bác bỏ giả thuyết \(H_0\), Kết quả phân tích cho thấy tồn tại mối liên hệ nhất định giữa hai biến đang xét, phản ánh mức độ ảnh hưởng hoặc tương quan giữa chúng trong quá trình người vay đưa ra quyết định.

3.2.5. Mối tương quan các biến định lượng (xây dựng mô hình Poisson)

  • Ma trận tương quan
# Chọn các biến cần tính tương quan
vars <- c("cb_person_cred_hist_length", 
          "person_age", 
          "loan_int_rate", 
          "loan_percent_income", 
          "credit_score")
# Lọc dữ liệu chỉ chứa các cột trên
cor_data <- tl_dt[, vars]
# Tính ma trận tương quan Pearson
cor_matrix <- cor(cor_data, use = "complete.obs", method = "pearson")
# Nếu bạn đang trong RMarkdown hoặc muốn bảng đẹp hơn
library(knitr)
kable(round(cor_matrix, 3), 
      caption = "Bảng 3: Ma trận tương quan giữa các biến") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE, 
                position = "center") %>%
  row_spec(0, bold = TRUE, background = "#DDEBF7")
Bảng 3: Ma trận tương quan giữa các biến
cb_person_cred_hist_length person_age loan_int_rate loan_percent_income credit_score
cb_person_cred_hist_length 1.000 0.862 0.018 -0.032 0.155
person_age 0.862 1.000 0.013 -0.043 0.178
loan_int_rate 0.018 0.013 1.000 0.125 0.011
loan_percent_income -0.032 -0.043 0.125 1.000 -0.011
credit_score 0.155 0.178 0.011 -0.011 1.000

Mối tương quan mạnh nhất:

Điểm nổi bật nhất là mối tương quan thuận chiều và rất mạnh (hệ số = 0.862) giữa tuổi (person_age) và thâm niên tín dụng (cb_person_cred_hist_length).

-> Điều này hoàn toàn hợp lý về mặt logic, vì người càng lớn tuổi thì càng có nhiều thời gian để xây dựng và kéo dài lịch sử tín dụng của mình.

Các mối tương quan yếu:

Có một vài mối tương quan thuận chiều nhưng ở mức độ yếu, ví dụ như giữa tuổi và điểm tín dụng (0.178), và giữa độ dài lịch sử tín dụng/thâm niên tín dụng và điểm tín dụng (0.155). Điều này cho thấy xu hướng người lớn tuổi hơn hoặc có lịch sử tín dụng dài hơn thì có điểm tín dụng cao hơn một chút, nhưng mối quan hệ này không chặt chẽ.

Tương quan giữa lãi suất và tỷ lệ vay trên thu nhập (0.125) cũng là tương quan dương yếu.

Các mối tương quan không đáng kể:

Hầu hết các cặp biến còn lại, như lãi suất và điểm tín dụng (0.011) hay tỷ lệ vay trên thu nhập và điểm tín dụng (-0.011), có hệ số tương quan gần bằng 0. Điều này cho thấy giữa chúng gần như không có mối quan hệ tuyến tính.

- Kiểm tra đa cộng tuyến

Giả thuyết

  • \(H_0:\) Không có đa cộng tuyến nghiêm trọng giữa các biến độc lập.
  • \(H_1:\) Tồn tại đa cộng tuyến nghiêm trọng giữa một hoặc nhiều biến độc lập.

Mặc dù kiểm định tương quan ban đầu cho thấy mối liên hệ cao (0.86) giữa cb_person_cred_hist_lengthperson_age, việc kiểm tra đa cộng tuyến bằng Hệ số Phóng đại Phương sai Tổng quát (GVIF) cung cấp một đánh giá chính xác hơn. Cụ thể, chỉ số GVIF^(1/(2*Df)) (tương đương với VIF cho các biến đơn) của hai biến này chỉ ở mức ~2.06. Giá trị này thấp hơn đáng kể so với ngưỡng cảnh báo phổ biến là 5 hoặc 10. Các biến còn lại trong mô hình đều có chỉ số gần như bằng 1, là mức lý tưởng.

Do đó, có thể kết luận rằng mô hình không có hiện tượng đa cộng tuyến nghiêm trọng, và các hệ số ước lượng thu được từ mô hình là đáng tin cậy để diễn giải.

library(car)
## Warning: package 'car' was built under R version 4.4.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.4.3
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
m <- glm(loan_status ~ person_age + person_home_ownership + loan_intent +
               loan_int_rate + loan_percent_income + 
               cb_person_cred_hist_length + previous_loan_defaults_on_file,
             data = tl_dt, family = binomial)
vif(m)
##                                    GVIF Df GVIF^(1/(2*Df))
## person_age                     4.259136  1        2.063767
## person_home_ownership          1.039638  3        1.006500
## loan_intent                    1.050733  5        1.004961
## loan_int_rate                  1.053650  1        1.026474
## loan_percent_income            1.087512  1        1.042838
## cb_person_cred_hist_length     4.245185  1        2.060385
## previous_loan_defaults_on_file 1.000000  1        1.000000

CHƯƠNG 4: KẾT QUẢ MÔ HÌNH HỒI QUY

Dữ liệu cho thấy 100% khách hàng có lịch sử vỡ nợ đều bị từ chối cấp khoản vay.

Việc đưa một biến có tính chất quyết định tuyệt đối như vậy vào mô hình dự báo có thể gây ra lỗi kỹ thuật (cảnh báo: glm.fit: fitted probabilities numerically 0 or 1 occurred) và làm cho các hệ số ước lượng trở nên không ổn định. Vì vậy, tác giả quyết định xử lý biến này bên ngoài mô hình bằng một quy tắc loại trừ rõ ràng, nhằm giảm thiểu nhiễu và giúp mô hình tập trung chính xác hơn vào các yếu tố khác có khả năng phân biệt hành vi vay vốn.

library(jtools)
## Warning: package 'jtools' was built under R version 4.4.3
# 1. Thiết lập biến phụ thuộc
tl_dt$loan_status <- factor(tl_dt$loan_status, levels = c("1", "0"))
# 2. Xây dựng các mô hình
logit_model <- glm(loan_status ~ previous_loan_defaults_on_file, data = tl_dt, family = binomial(link = "logit"))
probit_model <- glm(loan_status ~ previous_loan_defaults_on_file, data = tl_dt, family = binomial(link = "probit"))
cloglog_model <- glm(loan_status ~ previous_loan_defaults_on_file, data = tl_dt, family = binomial(link = "cloglog")) 
# 3. Xuất bảng kết quả đã chuẩn hóa
export_summs(list("Logit" = logit_model, "Probit" = probit_model, "Cloglog" = cloglog_model), scale = FALSE)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
LogitProbitCloglog
(Intercept)0.19 ***0.12 ***-0.23 ***
(0.01)   (0.01)   (0.01)   
previous_loan_defaults_on_fileYes19.37    5.80    3.22    
(71.13)   (16.74)   (4.36)   
N45000       45000       45000       
AIC30491.79    30491.79    30491.79    
BIC30509.22    30509.22    30509.22    
Pseudo R20.49    0.49    0.49    
*** p < 0.001; ** p < 0.01; * p < 0.05.

Cả ba mô hình Logit, Probit và Cloglog đều chỉ ra cùng một vấn đề: hệ số ước lượng của biến “lịch sử vỡ nợ trước đó” so với nhóm không có lịch sử vỡ nợ không ổn định do sai số chuẩn rất lớn. Điều này dẫn đến \(p-value\) > 5%, phản ánh việc mô hình không thể ước lượng đáng tin cậy cho một quy tắc phân loại tuyệt đối. Do đó, biến này được loại ra để tập trung phân tích các yếu tố còn lại trong mô hình phê khả năng bị từ chối khoản vay.

Nghiên cứu đã xây dựng mô hình hồi quy Logit để phân tích các yếu tố ảnh hưởng đến khả năng một hồ sơ vay bị từ chối (loan_status = 0). Lựa chọn này được đưa ra do đây là kết quả chiếm đa số trong tập dữ liệu, với nhóm ‘được phê duyệt’ được sử dụng làm cơ sở so sánh. Kết quả phân tích cho thấy nhiều yếu tố có ảnh hưởng đáng kể (p < 0.05), giúp làm sáng tỏ các tiêu chí quan trọng mà một tổ chức tài chính sử dụng để đánh giá rủi ro khách hàng.

4.1. loan_status (LOGIT, PROBIT, CLOG-LOG)

# Gọi thư viện nếu cần
library(logistf)
## Warning: package 'logistf' was built under R version 4.4.3
# Hồi quy logistic trên toàn bộ dữ liệu
Logit <- glm(loan_status ~ person_age + person_home_ownership + loan_intent +
               loan_int_rate + loan_percent_income + 
               cb_person_cred_hist_length,
             data = tl_dt, family = binomial(link = "logit"))
probit <- glm(loan_status ~ person_age + person_home_ownership + loan_intent +
                        loan_int_rate + loan_percent_income + 
                        cb_person_cred_hist_length, 
                      data = tl_dt, family = binomial(link = "probit"))
cloglog <- glm(loan_status ~ person_age + person_home_ownership + loan_intent +
                        loan_int_rate + loan_percent_income + 
                        cb_person_cred_hist_length, 
                      data = tl_dt, family = binomial(link = "cloglog"))
export_summs(list("Logit" = Logit, "Probit" = probit, "Cloglog" = cloglog),
  scale = FALSE,         # Tắt chuẩn hóa để hiện hệ số Estimate gốc
  digits = 5,            # Làm tròn 5 chữ số
  output = "markdown")    # Xuất ra định dạng bảng Markdown  
LogitProbitCloglog
(Intercept)6.58622 ***3.62853 ***2.72794 ***
(0.12731)   (0.06905)   (0.06020)   
person_age0.00766    0.00456    0.00394    
(0.00475)   (0.00264)   (0.00232)   
person_home_ownershipOTHER-0.91460 ***-0.46748 ***-0.29573 *  
(0.23644)   (0.13638)   (0.13046)   
person_home_ownershipOWN0.95802 ***0.50061 ***0.40039 ***
(0.08305)   (0.04262)   (0.03346)   
person_home_ownershipRENT-1.17881 ***-0.62453 ***-0.47108 ***
(0.03130)   (0.01696)   (0.01453)   
loan_intentEDUCATION0.92377 ***0.51397 ***0.43429 ***
(0.04559)   (0.02544)   (0.02283)   
loan_intentHOMEIMPROVEMENT0.11128 *  0.05874 *  0.03215    
(0.05109)   (0.02888)   (0.02659)   
loan_intentMEDICAL0.23645 ***0.13080 ***0.11296 ***
(0.04301)   (0.02442)   (0.02270)   
loan_intentPERSONAL0.66416 ***0.36544 ***0.30040 ***
(0.04676)   (0.02623)   (0.02372)   
loan_intentVENTURE1.14832 ***0.66641 ***0.60569 ***
(0.04962)   (0.02762)   (0.02455)   
loan_int_rate-0.30714 ***-0.16884 ***-0.14199 ***
(0.00517)   (0.00281)   (0.00254)   
loan_percent_income-11.15442 ***-6.23467 ***-5.40197 ***
(0.16428)   (0.08981)   (0.08716)   
cb_person_cred_hist_length-0.00021    -0.00080    -0.00129    
(0.00726)   (0.00405)   (0.00357)   
N45000          45000          45000          
AIC33559.92430    33808.46027    34663.36134    
BIC33673.21173    33921.74770    34776.64877    
Pseudo R20.41271    0.40651    0.38496    
*** p < 0.001; ** p < 0.01; * p < 0.05.

4.1.1. Nhận xét mô hình LOGIT

Phương trình hồi quy được ước lượng có dạng như sau:

\[ \begin{aligned} \text{logit}(p) =\ & 6.58622 + 0.00766 \cdot \text{person_age} \\ & - 0.91460 \cdot \text{person_home_ownership}_{OTHER} \\ & + 0.95802 \cdot \text{person_home_ownership}_{OWN} \\ & - 1.17881 \cdot \text{person_home_ownership}_{RENT} \\ & + 0.92377 \cdot \text{loan_intent}_{EDUCATION} \\ & + 0.11128 \cdot \text{loan_intent}_{HOMEIMPROVEMENT} \\ & + 0.23645 \cdot \text{loan_intent}_{MEDICAL} \\ & + 0.66416 \cdot \text{loan_intent}_{PERSONAL} \\ & + 1.14832 \cdot \text{loan_intent}_{VENTURE} \\ & - 0.30714 \cdot \text{loan_int_rate} \\ & - 11.15442 \cdot \text{loan_percent_income} \\ & - 0.00021 \cdot \text{cb_person_cred_hist_length} \end{aligned} \]

Diễn giải Hệ số chặn (Intercept)

Hệ số chặn (Intercept) trong mô hình hồi quy logistic phản ánh log(odds) được duyệt vay của một khách hàng thuộc nhóm tham chiếu, tức là khi tất cả các biến định lượng bằng 0 và các biến định tính ở nhóm cơ sở. Trong mô hình này, nhóm tham chiếu gồm:

  • Quyền sở hữu nhà: MORTGAGE (đang thế chấp),
  • Mục đích khoản vay: DEBTCONSOLIDATION (tái cấu trúc nghĩa vụ tài chính).

Điều này có nghĩa là khi không có sự tác động các biến độc lập khác thì xác suất bị từ chối các khoản vay tăng trung bình 6.5862244.

Diễn giải các biến độc lập

rr_lg <- exp(coef(Logit))
print(rr_lg)
##                (Intercept)                 person_age 
##               7.250382e+02               1.007685e+00 
## person_home_ownershipOTHER   person_home_ownershipOWN 
##               4.006781e-01               2.606535e+00 
##  person_home_ownershipRENT       loan_intentEDUCATION 
##               3.076436e-01               2.518767e+00 
## loan_intentHOMEIMPROVEMENT         loan_intentMEDICAL 
##               1.117704e+00               1.266739e+00 
##        loan_intentPERSONAL         loan_intentVENTURE 
##               1.942866e+00               3.152880e+00 
##              loan_int_rate        loan_percent_income 
##               7.355464e-01               1.431193e-05 
## cb_person_cred_hist_length 
##               9.997855e-01
  1. Biến không có ý nghĩa thống kê
  • person_age (p = 0.107) và cb_person_cred_hist_length (p = 0.976) đều có \(p-value\) > 0.05.
    → Không đủ bằng chứng thống kê để kết luận hai biến này ảnh hưởng đến xác suất bị từ chối.
  1. Biến person_home_ownership (so với nhóm MORTGAGE) - exp(β)
  • OWN: Hệ số = 0.958 → Odds bị từ chối cao hơn gấp 2.6 lần so với người thế chấp.
  • RENT: Hệ số = -1.179 → Odds bị từ chối chỉ bằng 31% so với người thế chấp.
  • OTHER: Hệ số = -0.915 → Odds bị từ chối chỉ bằng 40% so với người thế chấp.
  1. Biến loan_intent (so với nhóm DEBTCONSOLIDATION) - exp(β)
  • VENTURE: Hệ số = 1.148 → Odds bị từ chối cao hơn gấp 3.15 lần so với nhóm tham chiếu.
  • EDUCATION: Hệ số = 0.924 → Odds bị từ chối cao hơn gấp 2.52 lần so với nhóm tham chiếu.
  • PERSONAL: Hệ số = 0.664 → Odds bị từ chối cao hơn gấp 1.94 lần so với nhóm tham chiếu.
  • MEDICAL: Hệ số = 0.236 → Odds bị từ chối cao hơn gấp 1.27 lần so với nhóm tham chiếu.
  • HOMEIMPROVEMENT: Hệ số = 0.111 → Odds bị từ chối cao hơn gấp 1.12 lần so với nhóm tham chiếu ý nghĩa chỉ mức 10%.
  1. Biến loan_int_rate - Lãi suất vay
  • Hệ số hồi quy = -0.307 ⟶ Khi lãi suất tăng thêm 1%, odds bị từ chối giảm khoảng 26.4% ( 1 - 0.736 = 0.264).
  1. Biến loan_percent_income - Tỷ lệ vay trên thu nhập
  • Hệ số hồi quy = -11.15 ⟶ Khi tỷ lệ nợ trên thu nhập tăng thêm 1 đơn vị, odds bị từ chối giảm xuống khoảng giảm mạnh khoảng 10.6%. (1 - exp(-11.15 * 0.01) ≈ 1 - 0.894 = 0.106)).

4.1.2. Nhận xét mô hình (PROBIT)

Phương trình Probit có dạng:

\[ \begin{aligned} \Phi^{-1}(p) =\ & 3.62853 + 0.00456 \cdot \text{person_age} \\ & - 0.46748 \cdot \text{person_home_ownership}_{OTHER} \\ & + 0.50061 \cdot \text{person_home_ownership}_{OWN} \\ & - 0.62453 \cdot \text{person_home_ownership}_{RENT} \\ & + 0.51397 \cdot \text{loan_intent}_{EDUCATION} \\ & + 0.05874 \cdot \text{loan_intent}_{HOMEIMPROVEMENT} \\ & + 0.13080 \cdot \text{loan_intent}_{MEDICAL} \\ & + 0.36544 \cdot \text{loan_intent}_{PERSONAL} \\ & + 0.66641 \cdot \text{loan_intent}_{VENTURE} \\ & - 0.16884 \cdot \text{loan_int_rate} \\ & - 6.23467 \cdot \text{loan_percent_income} \\ & - 0.00080 \cdot \text{cb_person_cred_hist_length} \end{aligned} \]

Diễn giải Hệ số chặn (Intercept)

Hệ số chặn (Intercept) đại diện cho chỉ số probit (z-score) được duyệt vay của một khách hàng được duyệt vay thuộc nhóm tham chiếu khi tất cả các biến định lượng bằng 0. Nhóm tham chiếu trong mô hình này là:

  • Quyền sở hữu nhà: person_home_ownership MORTGAGE (Đang thế chấp)
  • Mục đích khoản vay: loan_intent: DEBTCONSOLIDATION (tái cấu trúc nghĩa vụ tài chính)

Điều này có nghĩa là khi không có sự tác động các biến độc lập khác thì xác suất bị từ chối các khoản vay tăng trung bình 3.6285284.

Diễn giải các Biến Độc lập

  1. Biến không có ý nghĩa thống kê
  • person_age (p = 0.084) và cb_person_cred_hist_length (p = 0.84) đều có \(p-value\) > 0.05.

Không đủ bằng chứng thống kê để kết luận rằng chúng ảnh hưởng đến xác suất bị từ chối.

  1. Biến person_home_ownership – So với nhóm tham chiếu: MORTGAGE
  • So với nhóm tham chiếu MORTGAGE, nhóm OWN có xác suất bị từ chối cao hơn (hệ số = +0.501), trong khi hai nhóm RENTOTHER đều có xác suất thấp hơn (hệ số = -0.625 và -0.467, tương ứng).
  1. Biến loan_intent – So với nhóm tham chiếu: DEBTCONSOLIDATION
  • So với nhóm tham chiếu DEBTCONSOLIDATION, tất cả các mục đích vay khác đều có xác suất bị từ chối cao hơn, thể hiện qua các hệ số dương. Cụ thể, nhóm VENTURE có xác suất cao nhất (hệ số = +0.666), theo sau là EDUCATION (+0.514), PERSONAL (+0.365), MEDICAL (+0.131), và cuối cùng là HOMEIMPROVEMENT (+0.059, p < 10%).
  1. Biến loan_int_rate – (Lãi suất)
  • Hệ số = -0.169 → Mỗi khi lãi suất tăng thêm 1%, khả năng bị từ chối sẽ giảm tương ứng 0.169 đơn vị.
  1. Biến loan_percent_income – (Tỷ lệ vay trên thu nhập)
  • Hệ số = -6.235 → Cứ mỗi khi lãi suất tăng thêm 0.1 (tức 10%), khả năng bị từ chối sẽ giảm rõ rệt – với mức giảm tương ứng khoảng 0.6235 đơn vị.

4.1.3. NHận xét mô hình (Clog-log)

Phương trình Complementary log-log có dạng:

\[ \begin{aligned} \log(-\log(1 - p)) =\ & 2.72794 + 0.00394 \cdot \text{person_age} \\ & - 0.29573 \cdot \text{person_home_ownership}_{OTHER} \\ & + 0.40039 \cdot \text{person_home_ownership}_{OWN} \\ & - 0.47108 \cdot \text{person_home_ownership}_{RENT} \\ & + 0.43429 \cdot \text{loan_intent}_{EDUCATION} \\ & + 0.03215 \cdot \text{loan_intent}_{HOMEIMPROVEMENT} \\ & + 0.11296 \cdot \text{loan_intent}_{MEDICAL} \\ & + 0.30040 \cdot \text{loan_intent}_{PERSONAL} \\ & + 0.60569 \cdot \text{loan_intent}_{VENTURE} \\ & - 0.14199 \cdot \text{loan_int_rate} \\ & - 5.40197 \cdot \text{loan_percent_income} \\ & - 0.00129 \cdot \text{cb_person_cred_hist_length} \end{aligned} \]

Diễn giải Hệ số (Coefficient Interpretation)

Hệ số chặn biểu diễn giá trị của hàm liên kết cloglog (log(-log(1 - p))) đối với một khách hàng thuộc nhóm tham chiếu, khi tất cả các biến định lượng bằng 0.

Nhóm tham chiếu gồm: - person_home_ownership: MORTGAGE (đang thế chấp) - loan_intent: DEBTCONSOLIDATION (tái cấu trúc nghĩa vụ tài chính)

Điều này có nghĩa là khi không có sự tác động các biến độc lập khác thì xác suất bị từ chối các khoản vay tăng trung bình 2.727943.

Diễn giải các Biến Độc lập

rr_cll <- exp(coef(cloglog))
print(rr_cll)
##                (Intercept)                 person_age 
##               15.301378880                1.003952683 
## person_home_ownershipOTHER   person_home_ownershipOWN 
##                0.743986259                1.492411930 
##  person_home_ownershipRENT       loan_intentEDUCATION 
##                0.624327714                1.543871642 
## loan_intentHOMEIMPROVEMENT         loan_intentMEDICAL 
##                1.032672159                1.119589169 
##        loan_intentPERSONAL         loan_intentVENTURE 
##                1.350394597                1.832518803 
##              loan_int_rate        loan_percent_income 
##                0.867633923                0.004507709 
## cb_person_cred_hist_length 
##                0.998705914
  1. Biến không có ý nghĩa thống kê
  • person_age (p = 0.0896) và cb_person_cred_hist_length (p = 0.72) đều có p-value > 0.05.

Không đủ bằng chứng thống kê để kết luận rằng chúng ảnh hưởng đến xác suất bị từ chối.

  1. Biến person_home_ownership (so với nhóm MORTGAGE) - (1-exp(β))
  • OWN (Sở hữu nhà): Hệ số = +0.400. So với người đang thế chấp, nhóm này có cơ hội bị từ chối cao hơn 49%.

  • RENT (Thuê nhà): Hệ số = -0.471. So với người đang thế chấp, nhóm này có cơ hội bị từ chối thấp hơn 38%.

  • OTHER (Tình trạng khác): Hệ số = -0.296. So với người đang thế chấp, nhóm này có cơ hội bị từ chối thấp hơn 26%.

  1. Biến loan_intent (so với nhóm DEBTCONSOLIDATION) - (1-exp(β))

Mục đích vay là một yếu tố dự báo quan trọng về khả năng bị từ chối. So với việc vay để tái cấu trúc nợ, các mục đích sau đây làm tăng đáng kể nguy cơ bị từ chối:

  • VENTURE (Kinh doanh): Đây là mục đích có ảnh hưởng tích cực mạnh nhất, làm tăng nguy cơ bị từ chối lên tới 83%.

  • EDUCATION (Giáo dục): Tăng nguy cơ bị từ chối lên 54%.

  • PERSONAL (Cá nhân): Tăng nguy cơ bị từ chối lên 35%.

  • MEDICAL (Y tế): Tăng nguy cơ bị từ chối lên 12%.

  • Ngược lại, mục đích vay để HOMEIMPROVEMENT (Sửa nhà) không cho thấy sự khác biệt có ý nghĩa thống kê so với nhóm tham chiếu (p > 5%).

  1. Biến loan_int_rate- Lãi suất

→ Hệ số âm (-0.142) cho thấy lãi suất càng cao, nguy cơ bị từ chối càng thấp. Cụ thể: Cứ mỗi 1% lãi suất tăng lên, nguy cơ bị từ chối giảm khoảng 13.2%. (exp(-0.142) ≈ 0.868; Mức giảm = 1 - 0.868 = 13.2%)

  1. Biến loan_percent_income - Tỷ lệ vay trên thu nhập

→ Hệ số âm và rất lớn (-5.402) cho thấy đây là yếu tố có ảnh hưởng tiêu cực. Cho rằng, cứ mỗi 1% tăng thêm trong tỷ lệ này, nguy cơ bị từ chối giảm mạnh khoảng 5.3%. (cho 1% với exp(-5.402 * 0.01) ≈ 0.947; Mức giảm = 1 - 0.947 = 5.3%)

Kết luận chung

Dựa trên kết quả phân tích hồi quy logistic, có thể rút ra một số kết luận chính như sau:

  • Tình trạng sở hữu nhà ở có ảnh hưởng đáng kể đến khả năng bị từ chối vay: Người vay thuộc nhóm sở hữu nhà có xác suất bị từ chối cao hơn so với nhóm tham chiếu là thế chấp. Trong khi đó, các nhóm thuê nhàkhác có xác suất bị từ chối thấp hơn rõ rệt.

  • Mục đích vay là yếu tố phân biệt quan trọng. Các khoản vay nhằm mục đích đầu tư kinh doanh, giáo dục hoặc chi tiêu cá nhân có xu hướng làm tăng xác suất bị từ chối, so với nhóm vay để tái cấu trúc nghĩa vụ tài chính – nhóm có tính cấp thiết và khả năng chứng minh dòng tiền tốt hơn.

  • Lãi suất có mối quan hệ nghịch chiều với xác suất bị từ chối. Khi lãi suất tăng, xác suất bị từ chối lại giảm. Điều này cho thấy các tổ chức tài chính có xu hướng áp dụng chính sách định giá theo rủi ro, thay vì từ chối hoàn toàn các hồ sơ rủi ro, họ sử dụng mức lãi suất cao như một cơ chế bù đắp rủi ro để vẫn có thể chấp thuận khoản vay.

  • Tỷ lệ nợ trên thu nhập có ảnh hưởng tiêu cực rõ rệt: tỷ lệ này càng cao thì xác suất bị từ chối càng giảm mạnh. Điều này có thể phản ánh rằng các tổ chức tín dụng ưu tiên khách hàng có thu nhập cao, cho phép họ chịu tỷ lệ nợ cao hơn. Tuy nhiên, nếu không có chính sách kiểm soát phù hợp, điều này có thể làm gia tăng rủi ro tín dụng trong dài hạn.

  • Cuối cùng, không tìm thấy bằng chứng thống kê đủ mạnh để khẳng định rằng các yếu tố như tuổi tác, thâm niên tín dụng hay lịch sử vỡ nợ, khi xét trong mối liên hệ với mục đích vay “sửa nhà” (HOMEIMPROVEMENT) sẽ có ảnh hưởng đáng kể đến xác suất bị từ chối khoản vay—trong điều kiện các yếu tố khác đã được kiểm soát trong mô hình.

4.1.4. So sánh 3 mô hình

library(DescTools)
## Warning: package 'DescTools' was built under R version 4.4.3
## 
## Attaching package: 'DescTools'
## The following object is masked from 'package:jtools':
## 
##     %nin%
## The following object is masked from 'package:car':
## 
##     Recode
models <- list(Logit = Logit, Probit = probit, Cloglog = cloglog)
# Tính Brier Score cho từng mô hình
brier_scores <- sapply(models, BrierScore)
Bảng 4: Tổng hợp các tiêu chí đánh giá mô hình hồi quy nhị phân
Tiêu chí Logit Probit Cloglog
Brier Score 0.11473 0.11545 0.11845
AIC 33559.92430 33808.46027 34663.36134
BIC 33673.21173 33921.74770 34776.64877
Pseudo R² 0.41271 0.40651 0.38496

Dựa trên các tiêu chí so sánh, mô hình Hồi quy Logistic (Logit) được lựa chọn là mô hình phù hợp nhất để dự báo khả năng phê duyệt khoản vay. Kết luận này được củng cố bởi các bằng chứng sau:’

  • Độ chính xác cao nhất: Mô hình Logit có chỉ số Brier Score thấp nhất (0.1147), chứng tỏ khả năng dự báo xác suất của nó là chính xác nhất.

  • Độ phù hợp tốt nhất: Mô hình này có cả chỉ số AIC và BIC đều thấp nhất, cho thấy đây là mô hình cân bằng tốt nhất giữa sự đơn giản và sức mạnh giải thích dữ liệu.

  • Khả năng giải thích mạnh nhất: Với chỉ số Pseudo R² cao nhất (0.4127), mô hình Logit giải thích được phần lớn sự biến thiên trong quyết định phê duyệt hơn so với hai mô hình còn lại.

- Kết qua đường cong ROC và diện tích dưới đường cong (AUC)

library(pROC)
## Warning: package 'pROC' was built under R version 4.4.3
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
library(ggplot2)
# Dự đoán xác suất
pred_logit <- predict(Logit, type = "response")
pred_probit <- predict(probit, type = "response")
pred_cloglog <- predict(cloglog, type = "response")
# Tính ROC và AUC
roc_logit <- roc(response = tl_dt$loan_status, predictor = pred_logit, levels = c(0, 1), direction = ">")
roc_probit <- roc(response = tl_dt$loan_status, predictor = pred_probit, levels = c(0, 1), direction = ">")
roc_cloglog <- roc(response = tl_dt$loan_status, predictor = pred_cloglog, levels = c(0, 1), direction = ">")
# Vẽ đường ROC
ggroc(list(Logit = roc_logit, Probit = roc_probit, Cloglog = roc_cloglog), size = 1.2, aes = c("color")) +
  geom_segment(aes(x = 1, xend = 0, y = 0, yend = 1), color = "grey60", linetype = "dashed", size = 0.8) +
  labs(title = "So sánh đường cong ROC của 3 mô hình nhị phân",
    subtitle = paste0("AUC(Logit) = ", round(auc(roc_logit), 4),
                      ", AUC(Probit) = ", round(auc(roc_probit), 4),
                      ", AUC(Cloglog) = ", round(auc(roc_cloglog), 4)),
    x = "Tỷ lệ Dương giả (FPR)",
    y = "Tỷ lệ Dương thật (TPR)",
    color = "Mô hình") +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

# Lưu hình
ggsave("images/ROC_3_models.png", width = 8, height = 6, dpi = 300)

Biểu đồ so sánh đường cong ROC và giá trị AUC cho thấy cả ba mô hình Logit, Probit và Clog-log đều đạt hiệu suất dự báo rất cao và gần như tương đương nhau. Cụ thể, chỉ số AUC của cả ba đều dao động quanh mức 0.846 - một con số cho thấy khả năng phân biệt rất tốt giữa hai nhóm đối tượng (chẳng hạn trong phê duyệt và từ từ chối). Điều đáng chú ý là các đường cong ROC của ba mô hình gần như trùng khớp hoàn toàn, và sự khác biệt về AUC là rất nhỏ không mang ý nghĩa thống kê rõ rệt.

Từ đó có thể kết luận rằng, trong trường hợp này, việc lựa chọn giữa ba mô hình không dẫn đến sự khác biệt đáng kể về mặt hiệu quả dự báo. Do đó, nhà phân tích có thể linh hoạt lựa chọn mô hình dựa trên mục tiêu diễn giải hoặc đặc điểm kỹ thuật của dữ liệu mà không ảnh hưởng nhiều đến chất lượng kết quả.

4.1.5. Ma trận nhầm lẫn

  • Vì mô hình logit tốt nhất dựa trên các tiêu chí nên xét ma trận nhầm lẫn của mô hình logit.
# Thiết lập lại biến phụ thuộc với mức tham chiếu là "0" (bị từ chối))
tl_dt$loan_status <- factor(tl_dt$loan_status, levels = c("0", "1"))
# Hồi quy logistic
a <- glm(loan_status ~ person_age + person_home_ownership + loan_intent +
               loan_int_rate + loan_percent_income + 
               cb_person_cred_hist_length,
             data = tl_dt, family = binomial(link = "logit"))
# Dự đoán
prob <- predict(a, newdata = tl_dt, type = "response")
pred <- factor(ifelse(prob >= 0.5, "1", "0"), levels = c("0", "1"))
actual <- factor(tl_dt$loan_status, levels = c("0", "1"))
# Tính confusion matrix
library(caret)
## Warning: package 'caret' was built under R version 4.4.3
## Loading required package: lattice
## 
## Attaching package: 'caret'
## The following objects are masked from 'package:DescTools':
## 
##     MAE, RMSE
cm <- confusionMatrix(pred, actual, positive = "1")
print(cm)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction     0     1
##          0 33191  5247
##          1  1809  4753
##                                           
##                Accuracy : 0.8432          
##                  95% CI : (0.8398, 0.8465)
##     No Information Rate : 0.7778          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.4829          
##                                           
##  Mcnemar's Test P-Value : < 2.2e-16       
##                                           
##             Sensitivity : 0.4753          
##             Specificity : 0.9483          
##          Pos Pred Value : 0.7243          
##          Neg Pred Value : 0.8635          
##              Prevalence : 0.2222          
##          Detection Rate : 0.1056          
##    Detection Prevalence : 0.1458          
##       Balanced Accuracy : 0.7118          
##                                           
##        'Positive' Class : 1               
## 

Phân tích ma trận nhầm lẫn cho thấy mô hình Logit dự đoán đúng 4.753 hồ sơ nằm trong diện “được phê duyệt”, và xác định chính xác 33.191 trường hợp bị từ chối vay. Tuy nhiên, mô hình vẫn có sai sót: phê duyệt nhầm 1.809 hồ sơ lẽ ra phải từ chối, khiến tiềm ẩn rủi ro nợ xấu; đồng thời từ chối nhầm 5.247 hồ sơ thực tế đủ điều kiện vay, gây ra mất cơ hội kinh doanh.

Mặc dù độ chính xác tổng thể đạt tới 84,32%, một con số khá ấn tượng, kết quả cũng cho thấy mô hình có xu hướng hoạt động thận trọng: nghiêng về việc từ chối nhiều hơn là chấp nhận, kể cả khi hồ sơ thực sự tốt. Vì vậy, cần điều chỉnh ngưỡng ra quyết định sao cho hợp lý hơn, nhằm cân đối giữa mục tiêu kiểm soát rủi ro và tận dụng cơ hội tăng trưởng doanh thu từ các khách hàng tiềm năng.

4.2. Multinomial Logit (loan_intent)

Trong các phân tích trước với mô hình Logit và Probit hay Clog-log, “mục tiêu vay” cho thấy ý nghĩa thống kê rõ rệt trong việc dự đoán “tình trạng phê duyệt khoản vay”. Để khai thác mối quan hệ này từ một góc nhìn khác, chúng ta đảo vai trò phân tích: xem “mục tiêu vay” là biến phụ thuộc đa phân loại, còn “tình trạng phê duyệt” là biến độc lập. Vì “mục tiêu vay” không có thứ tự tự nhiên, mô hình Multinomial Logit là lựa chọn phù hợp. Mô hình này giúp xác định liệu các loại mục tiêu vay phổ biến (Giáo dục, Y tế, Đầu tư kinh doanh…) có phân bố khác biệt giữa nhóm được duyệt và nhóm bị từ chối, từ đó cung cấp góc nhìn đa chiều hơn về hành vi người vay.

library(nnet)
tl_dt$loan_status <- factor(tl_dt$loan_status, levels = c(1, 0))
mnl_model <- multinom(loan_intent ~ loan_status + person_age + 
                        person_home_ownership + loan_percent_income, data = tl_dt)
## # weights:  48 (35 variable)
## initial  value 80629.176115 
## iter  10 value 79071.864469
## iter  20 value 78841.022549
## iter  30 value 78640.986619
## iter  40 value 78574.954244
## final  value 78574.945959 
## converged
summary(mnl_model)
## Call:
## multinom(formula = loan_intent ~ loan_status + person_age + person_home_ownership + 
##     loan_percent_income, data = tl_dt)
## 
## Coefficients:
##                 (Intercept) loan_status0   person_age
## EDUCATION         0.1512308   0.87526056 -0.032735063
## HOMEIMPROVEMENT  -1.1078298   0.02996301  0.028447490
## MEDICAL          -0.4815152   0.19963875  0.008134120
## PERSONAL         -0.8655592   0.56961814  0.010959156
## VENTURE          -1.0605679   1.02991175 -0.001307709
##                 person_home_ownershipOTHER person_home_ownershipOWN
## EDUCATION                      -0.03601291                 1.695670
## HOMEIMPROVEMENT                -0.02519014                 1.705779
## MEDICAL                         0.25237054                 1.733791
## PERSONAL                        0.32839587                 1.714664
## VENTURE                         0.60354002                 2.246105
##                 person_home_ownershipRENT loan_percent_income
## EDUCATION                      0.12162771          1.40028517
## HOMEIMPROVEMENT               -0.32707810         -0.09624803
## MEDICAL                        0.26840611          0.62003990
## PERSONAL                       0.02122702          0.86736791
## VENTURE                        0.08353020          1.66858168
## 
## Std. Errors:
##                 (Intercept) loan_status0  person_age person_home_ownershipOTHER
## EDUCATION        0.10001885   0.04260436 0.002959545                  0.3412731
## HOMEIMPROVEMENT  0.10370577   0.04668924 0.002887374                  0.3788363
## MEDICAL          0.09382998   0.03987009 0.002688718                  0.3275482
## PERSONAL         0.09737011   0.04319193 0.002745233                  0.3248836
## VENTURE          0.10118911   0.04611293 0.002846449                  0.3130867
##                 person_home_ownershipOWN person_home_ownershipRENT
## EDUCATION                      0.1186198                0.03383210
## HOMEIMPROVEMENT                0.1243962                0.04019601
## MEDICAL                        0.1204712                0.03459265
## PERSONAL                       0.1200271                0.03528200
## VENTURE                        0.1166357                0.03542771
##                 loan_percent_income
## EDUCATION                 0.2007309
## HOMEIMPROVEMENT           0.2343311
## MEDICAL                   0.1995457
## PERSONAL                  0.2083412
## VENTURE                   0.2089686
## 
## Residual Deviance: 157149.9 
## AIC: 157219.9
# Dự đoán tập huấn luyện (có thể chia train/test nếu muốn)
pred_mnl <- predict(mnl_model, newdata = tl_dt, type = "class")
# Tạo ma trận nhầm lẫn
conf_matrix <- table(Predicted = pred_mnl, Actual = tl_dt$loan_intent)
print(conf_matrix)
##                    Actual
## Predicted           DEBTCONSOLIDATION EDUCATION HOMEIMPROVEMENT MEDICAL
##   DEBTCONSOLIDATION               569       256             306     579
##   EDUCATION                      3787      5808            2269    4345
##   HOMEIMPROVEMENT                  47        27              19      52
##   MEDICAL                        2108      1874            1313    2565
##   PERSONAL                        505       517             479     488
##   VENTURE                         129       671             397     519
##                    Actual
## Predicted           PERSONAL VENTURE
##   DEBTCONSOLIDATION      252     133
##   EDUCATION             4260    4519
##   HOMEIMPROVEMENT         96      23
##   MEDICAL               1832    1633
##   PERSONAL               550     537
##   VENTURE                562     974
# Tính độ chính xác (Accuracy)
accuracy <- sum(diag(conf_matrix)) / sum(conf_matrix)
cat("Độ chính xác (Accuracy):", round(accuracy, 4), "\n")
## Độ chính xác (Accuracy): 0.233

Kết quả đánh giá cho thấy mô hình hiện tại hoạt động kém hiệu quả, với độ chính xác tổng thể chỉ đạt 23.3%. Phân tích ma trận nhầm lẫn cho thấy mô hình có xu hướng thiên lệch đáng kể: phần lớn các dự đoán đều rơi vào nhóm “EDUCATION”, bất chấp mục đích thực tế của khoản vay. Hệ quả là khả năng phân biệt các nhóm khác - đặc biệt là những nhóm có số lượng dữ liệu thấp như “HOMEIMPROVEMENT” (chỉ phân loại đúng 19 trường hợp) - gần như không đạt yêu cầu. Điều này phản ánh rằng mô hình chưa khai thác được các đặc điểm nhận diện mang tính phân loại, dẫn đến chất lượng chưa đủ đảm bảo cho ứng dụng thực tiễn.

dd <- exp(coef(mnl_model))
print(dd)
##                 (Intercept) loan_status0 person_age person_home_ownershipOTHER
## EDUCATION         1.1632651     2.399500  0.9677949                  0.9646278
## HOMEIMPROVEMENT   0.3302750     1.030416  1.0288560                  0.9751245
## MEDICAL           0.6178465     1.220962  1.0081673                  1.2870729
## PERSONAL          0.4208162     1.767592  1.0110194                  1.3887386
## VENTURE           0.3462591     2.800819  0.9986931                  1.8285806
##                 person_home_ownershipOWN person_home_ownershipRENT
## EDUCATION                       5.450297                 1.1293336
## HOMEIMPROVEMENT                 5.505673                 0.7210274
## MEDICAL                         5.662076                 1.3078782
## PERSONAL                        5.554811                 1.0214539
## VENTURE                         9.450850                 1.0871180
##                 loan_percent_income
## EDUCATION                 4.0563565
## HOMEIMPROVEMENT           0.9082387
## MEDICAL                   1.8590022
## PERSONAL                  2.3806365
## VENTURE                   5.3046388
Bảng dưới đây tóm tắt các tác động chính từ mô hình, giúp nhận diện vài đặc điểm đặc trừng cho hành vi của từng nhóm khách hàng khi họ lựa chọn mục đích vay vốn (so với mục đích tham chiếu là “tái cấu trúc nghĩa vụ tài chính”).
Bảng 5: Phân tích tác động các yếu tố lên mục đích vay dựa trên Odds Ratio
Yếu tố ảnh hưởng Phân tích tác động chính Chi tiết theo mục đích vay
Tình trạng hồ sơ (Bị từ chối so với Được duyệt) Các hồ sơ có rủi ro cao (bị từ chối) thường liên quan đến các khoản vay cần vốn lớn hoặc có tính rủi ro cao hơn như Kinh doanh và Giáo dục. Ngoài ra các mục đích khác cũng có xu hướng bị từ chối tăng. • Đầu tư kinh doanh (Venture): Tăng mạnh nhất (OR ≈ 2.80)
• Giáo dục (Education): Tăng đáng kể (OR ≈ 2.40)
• Tiêu dùng (Personal): Tăng đáng kể (OR ≈ 1.77)
• Sửa nhà, Y tế: Tăng lần lượt (OR ≈ 1.03 và OR ≈ 1.22)
Tình trạng sở hữu nhà Tài sản sở hữu là một yếu tố quyết định mạnh mẽ đến hành vi vay, phản ánh rõ rệt khả năng tài chính và mức độ chấp nhận rủi ro. • Sở hữu nhà riêng (so với Đang trả góp):
- Kinh doanh (Venture): OR ≈ 9.45
- Y tế, Tiêu dùng, Sửa nhà, Giáo dục: OR từ 5.45 đến 5.66
• Thuê nhà (so với Đang trả góp):
- Sửa nhà (Home Improvement): OR = 0.72
- Y tế (Medical): OR = 1.31
- Đầu tư kinh doanh, Tiêu dùng, Giáo dục: OR từ 1.02 đến 1.13
• Khác (so với Đang trả góp):
- Các mục tiêu dao động: OR từ 1.83 đến 0.96, với thấp là Giáo dục (Education) và mạnh nhất là Đầu tư kinh doanh (Venture)
tỷ lệ vay trên thu nhập Khách hàng vay với tỷ lệ lớn so với thu nhập thường hướng đến các mục tiêu dài hạn hoặc chi tiêu lớn như đầu tư kinh doanh, giáo dục. Trong khi đó, nhu cầu vay cho sửa nhà có xu hướng giảm, phản ánh sự ưu tiên cho các khoản thiết yếu hơn. • Đầu tư kinh doanh (Venture): OR ≈ 5.31
• Giáo dục (Education): OR ≈ 4.05
• Tiêu dùng (Personal): OR ≈ 2.38
• Y tế (Medical): OR ≈ 1.86
• Sửa nhà (HOMEIMPROVEMENT): OR ≈ 0.382
Tuổi tác Tuổi tác phản ánh giai đoạn cuộc đời và ảnh hưởng đến các mục tiêu vay vốn khác nhau. • Giáo dục (Education): Giảm nhẹ theo tuổi (OR ≈ 0.97)
• Sửa nhà (Home Improvement): Tăng nhẹ theo tuổi (OR ≈ 1.03)
• Các mục tiêu còn lại: tương tự nhau (OR ≈ 1.00)

4.3. Mô hình Poisson

library(AER)
## Warning: package 'AER' was built under R version 4.4.3
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 4.4.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.4.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: sandwich
## Warning: package 'sandwich' was built under R version 4.4.3
## Loading required package: survival
## 
## Attaching package: 'survival'
## The following object is masked from 'package:caret':
## 
##     cluster
## The following object is masked from 'package:epitools':
## 
##     ratetable
# Chạy mô hình Poisson: biến phụ thuộc là purchases, biến độc lập là age
model_pois <- glm(cb_person_cred_hist_length ~ person_age + loan_int_rate + loan_percent_income + credit_score, data = tl_dt, family = "poisson")
# Kiểm tra phân tán
dispersiontest(model_pois)
## 
##  Overdispersion test
## 
## data:  model_pois
## z = 1.926, p-value = 0.02705
## alternative hypothesis: true dispersion is greater than 1
## sample estimates:
## dispersion 
##   1.065397

Nhận xét kết quả kiểm định phân tán

  • \(p-value\) = 0.02705 < 0.05: Kết quả này có ý nghĩa thống kê ở mức tin cậy 95%. Do đó, chúng ta bác bỏ giả thuyết \(H_0\) (rằng hệ số phân tán bằng 1) và có cơ sở để khẳng định rằng hệ số phân tán thực sự lớn hơn 1.

-> Kết luận từ \(p-value\): Về mặt thống kê, mô hình có dấu hiệu của hiện tượng phân tán quá mức (overdispersion). Hệ số phân tán (Dispersion) = 1.065397: Tuy nhiên, giá trị này chỉ cao hơn mức lý tưởng (là 1) một chút. Mức độ chênh lệch này là rất nhỏ về mặt thực tế. Mô hình Poisson không phù hợp

2. Xây dựng mô hình Negative Binomial

library(MASS)
## Warning: package 'MASS' was built under R version 4.4.3
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
model_nb <- glm.nb(cb_person_cred_hist_length ~ person_age + loan_int_rate + loan_percent_income + credit_score, data = tl_dt,  control = glm.control(maxit = 50))
summary(model_nb)
## 
## Call:
## glm.nb(formula = cb_person_cred_hist_length ~ person_age + loan_int_rate + 
##     loan_percent_income + credit_score, data = tl_dt, control = glm.control(maxit = 50), 
##     init.theta = 31.22583503, link = log)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)         -2.786e-01  2.827e-02  -9.853   <2e-16 ***
## person_age           6.836e-02  2.630e-04 259.945   <2e-16 ***
## loan_int_rate        2.068e-03  7.297e-04   2.834   0.0046 ** 
## loan_percent_income -2.366e-02  2.506e-02  -0.944   0.3452    
## credit_score         4.791e-05  4.364e-05   1.098   0.2723    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for Negative Binomial(31.2258) family taken to be 1)
## 
##     Null deviance: 82167  on 44999  degrees of freedom
## Residual deviance: 28322  on 44995  degrees of freedom
## AIC: 191591
## 
## Number of Fisher Scoring iterations: 1
## 
## 
##               Theta:  31.226 
##           Std. Err.:  0.637 
## 
##  2 x log-likelihood:  -191579.253

Phân tích kết quả mô hình Nhị thức Âm (Negative Binomial)

Mô hình Nhị thức Âm (Negative Binomial) được lựa chọn để xử lý phân tán quá mức mà mô hình Poisson không kiểm soát được, giúp kết luận phân tích trở nên thận trọng hơn. Một số biến như loan_percent_incomecredit_score không còn ý nghĩa thống kê (p > 5%), cho thấy Poisson có thể đã đánh giá quá cao ảnh hưởng của chúng. Tham số Theta = 31.226 xác nhận có phân tán nhưng không nghiêm trọng, và việc chuyển sang mô hình NB là lựa chọn hợp lý để đảm bảo độ tin cậy.

Diễn giải kết quả mô hình NB

rr_nb <- exp(coef(model_nb))
print(rr_nb)
##         (Intercept)          person_age       loan_int_rate loan_percent_income 
##           0.7568584           1.0707496           1.0020703           0.9766167 
##        credit_score 
##           1.0000479
  • person_age: exp(0.06836) ≈ 1.071. Với mỗi năm tuổi tăng thêm, độ dài lịch sử tín dụng kỳ vọng tăng khoảng 7.1%, khi các yếu tố khác không đổi. Đây là yếu tố có ảnh hưởng mạnh mẽ nhất.

  • loan_int_rate: exp(0.002068) ≈ 1.002. Với mỗi điểm phần trăm (%) lãi suất tăng thêm, độ dài lịch sử tín dụng kỳ vọng tăng khoảng 0.21%, khi các yếu tố khác không đổi.

  • loan_percent_incomecredit_score: Cả hai biến này đều có p-value cao (lớn hơn 0.05). Do đó, chúng ta không có đủ bằng chứng thống kê để kết luận rằng chúng có ảnh hưởng đến độ dài lịch sử tín dụng (thâm niên tín dụng) trong mô hình này.

CHƯƠNG 5: KẾT LUẬN

5.1. Kết luận

Nghiên cứu đã xác định rõ các yếu tố ảnh hưởng đến quyết định cấp tín dụng cá nhân, bao gồm mục đích vay và thâm niên tín dụng, qua đó góp phần nâng cao hiệu quả quản trị rủi ro và định hướng phát triển hoạt động cho vay. Dữ liệu phân tích cho thấy lịch sử vỡ nợ là yếu tố tác động mạnh đến khả năng tiếp cận nguồn vốn, với 100% khách hàng thuộc nhóm này bị từ chối cấp khoản vay. Tuy nhiên, yếu tố này không ảnh hưởng đến tỷ lệ phê duyệt tổng thể.

Mô hình Logit cho thấy các chỉ số tài chính định lượng như lịch sử vỡ nợ, tỷ lệ vay trên thu nhập, và mục đích vay có ảnh hưởng mạnh nhất đến khả năng được duyệt vay. Lịch sử vỡ nợ là yếu tố loại trừ tuyệt đối, cho thấy tính nhất quán trong quản trị rủi ro. Đặc biệt, mặc dù tỷ lệ vay trên thu nhập và lãi suất có tương quan dương với xác suất được duyệt, điều này phản ánh chiến lược định giá theo rủi ro (risk-based pricing) – khách hàng rủi ro cao vẫn có thể được vay nếu chấp nhận lãi suất cao.

Ngoài ra nghiên cứu đã xác định thành công các yếu tố kinh tế - xã hội có tác động mạnh mẽ đến mục đích vay vốn của khách hàng. Các yếu tố như tình trạng sở hữu nhà, tỷ lệ vay trên thu nhập, và tuổi tác cho thấy mối liên hệ rõ rệt với các mục đích vay cụ thể như kinh doanh, giáo dục hay sửa chữa nhà cửa. Tuy nhiên, mô hình dự báo đa lớp được xây dựng để tự động phân loại mục đích vay lại hoạt động kém hiệu quả, với độ chính xác chỉ 23.3% và bị thiên lệch nghiêm trọng về một lớp.

Trong đó Tình trạng sở hữu nhà cũng là yếu tố dự báo quan trọng. Người đã sở hữu nhà có xu hướng vay cho mục đích đầu tư kinh doanh nhiều hơn (OR ≈ 9.45), trong khi người thuê nhà có xác suất được duyệt cao hơn do tính linh hoạt dòng tiền. Ngoài ra, các khoản vay rủi ro cao như kinh doanh, giáo dục dễ bị từ chối hơn so với mục đích tái cấu trúc nợ.

Mô hình Logit đạt độ chính xác 84,32%, hiệu quả trong việc nhận diện hồ sơ cần từ chối, nhưng có xu hướng từ chối nhầm hơn là phê duyệt nhầm. Do đó, cần hiệu chỉnh ngưỡng quyết định để cân bằng giữa rủi ro và cơ hội. Trong mô hình thâm niên tín dụng sử dụng phân phối Negative Binomial, tuổi tác được xác định là biến dự báo có ảnh hưởng mạnh nhất, thể hiện rõ mối liên hệ giữa độ tuổi và hành vi sử dụng tín dụng theo từng giai đoạn trong cuộc sống. Bên cạnh đó, lãi suất thể hiện mối tương quan dương nhẹ với kinh nghiệm tín dụng, cho thấy những người có thời gian sử dụng tín dụng dài hơn có xu hướng tiếp cận các mức lãi suất cao hơn.

Tổng thể, các kết quả cung cấp cơ sở vững chắc để đề xuất các chiến lược thẩm định, phân khúc khách hàng, định giá tín dụng và ứng dụng mô hình dự báo trong thực tiễn.

5.2. Khuyến nghị

Từ các kết quả phân tích, nghiên cứu đề xuất bốn chiến lược quản trị trọng tâm nhằm giúp các tổ chức tài chính cải thiện hiệu quả thẩm định, tăng cường kiểm soát rủi ro và thúc đẩy mở rộng hoạt động kinh doanh một cách ổn định và lâu dài.

1. Tối ưu hóa Quy trình Thẩm định bằng Sàng lọc Tự động

Kết quả nghiên cứu cho thấy lịch sử vỡ nợ là một yếu tố loại trừ tuyệt đối. Vì vậy, nên tích hợp một bộ lọc tự động ở giai đoạn đầu để loại bỏ ngay các hồ sơ có tiền sử vỡ nợ.
Điều này giúp:

  • Giảm tải cho bộ phận thẩm định.

  • Tăng tốc độ xử lý hồ sơ.

  • Nâng cao hiệu suất vận hành tổng thể.

2. Nâng cao Chính sách Rủi ro bằng Thẻ điểm Tín dụng Nội bộ

Cần xây dựng một Thẻ điểm Tín dụng (Credit Scorecard) nội bộ nhằm:

  • Lượng hóa và chuẩn hóa đánh giá khách hàng.

  • Gán trọng số cao cho các yếu tố có ảnh hưởng lớn như:

    • tỷ lệ vay trên thu nhập,

    • Mục đích vay (ví dụ: điểm trừ cho “Đầu tư kinh doanh”, điểm cộng cho “tái cấu trúc nghĩa vụ tài chính”).

  • Tạo nền tảng cho chiến lược định giá dựa trên rủi ro (lãi suất và hạn mức phù hợp).

3. Phát triển Kinh doanh theo Phân khúc Khách hàng

Phân tích dữ liệu giúp xác định các nhóm khách hàng có hành vi và rủi ro vay vốn khác biệt rõ ràng theo loại hình sở hữu nhà và mục đích vay. Từ đó triển khai chiến lược kinh doanh phù hợp:

  • Nhắm tới phân khúc tiềm năng:
    Thiết kế các gói vay ưu đãi, marketing nhắm đến người thuê nhà hoặc khách hàng có nhu cầu “tái cấu trúc nợ”.

  • Kiểm soát phân khúc rủi ro cao:
    Áp dụng thẩm định chặt hơn đối với người vay “đầu tư kinh doanh” hoặc đã “sở hữu nhà”.

4. AI hoạt động như công cụ hỗ trợ, chuyên gia giữ vai trò kiểm duyệt

Mô hình dự báo hoạt động hiệu quả trong việc phát hiện hồ sơ rủi ro cao, nhưng có xu hướng quá thận trọng, dễ loại bỏ cả khách hàng tốt.

Do đó, khuyến nghị không nên để mô hình tự động quyết định 100%. Thay vào đó:

  • Sử dụng mô hình như trợ lý ảo:

    • Gắn cờ rủi ro, chấm điểm hồ sơ.

    • Hỗ trợ chuyên viên ra quyết định.

  • Thiết lập quy trình cho chuyên viên xem xét lại các hồ sơ bị từ chối bởi mô hình.

    Điều này giúp:

    • “Giải cứu” các khách hàng tốt bị loại nhầm.

    • Cân bằng giữa kiểm soát rủi ro và nắm bắt cơ hội kinh doanh.

5.3. Hạn chế

Nghiên cứu này, dù đã đạt được các mục tiêu đề ra, vẫn tồn tại một số hạn chế cố hữu cần được nhìn nhận. Hạn chế lớn nhất đến từ bản chất mất cân bằng của dữ liệu, khi tỷ lệ phê duyệt chỉ chiếm khoảng 22%, gây thách thức lớn cho mô hình trong việc dự báo chính xác sự kiện thiểu số này. Việc sử dụng nguồn dữ liệu tổng hợp từ Kaggle cũng giới hạn khả năng ngoại suy của kết quả, do không thể phản ánh đầy đủ các đặc thù kinh tế - xã hội và quy định của thị trường tài chính Việt Nam. Ngoài ra, phạm vi phương pháp luận của đề tài chủ yếu tập trung vào các mô hình GLM; cách tiếp cận này, dù có khả năng diễn giải tốt, có thể chưa khai thác hết tiềm năng dự báo từ các mối quan hệ phi tuyến phức tạp mà các thuật toán học máy hiện đại có thể nắm bắt.

5.4. Hướng phát triển

Để nâng cao giá trị thực tiễn và khắc phục các hạn chế đã nêu, hướng phát triển trong tương lai nên tập trung vào các khía cạnh cụ thể và có tính ứng dụng cao. Trước hết, việc áp dụng mô hình trên dữ liệu thực tế từ một tổ chức tài chính tại Việt Nam là bước đi quan trọng nhất, đồng thời mở rộng dữ liệu bằng các biến số như chi tiết công việc, tình trạng gia đình và chi phí sinh hoạt. Trên nền tảng dữ liệu phong phú đó, nghiên cứu có thể tiến hành phân tích sâu hơn cho từng phân khúc khách hàng riêng biệt (ví dụ: theo nhóm tuổi, mức thu nhập) và thử nghiệm các phương pháp mô hình hóa khác như cây quyết định (Decision Trees) hay Gradient Boosting giúp mô hình khắc phục từ các sai sót để đạt độ chính xác cao để tìm ra những góc nhìn bổ sung. Cuối cùng, toàn bộ kết quả nên được hệ thống thành một thẻ điểm tín dụng có dạng bảng chấm điểm rõ ràng, dễ hiểu, trực quan và dễ sử dụng, nhằm hỗ trợ cán bộ tín dụng ra quyết định nhanh chóng, nhất quán và có tính căn cứ rõ ràng, từ đó nâng cao hiệu quả công tác thẩm định và hạn chế rủi ro tín dụng.

TÀI LIỆU THAM KHẢO

  1. Becker, G. S. (1964). Human Capital: A Theoretical and Empirical Analysis, with Special Reference to Education. University of Chicago Press.

  2. Hand, D. J., & Henley, W. E. (1997). Statistical classification methods in consumer credit scoring: a review. Journal of the Royal Statistical Society: Series A (Statistics in Society), 160(3), 523–541.

  3. Khandani, A. J., Kim, A. J., & Lo, A. W. (2010). Consumer Credit-Risk Models via Machine-Learning Algorithms. Journal of Banking & Finance, 34(11), 2767-2787.

  4. Modigliani, F., & Brumberg, R. (1954). “Utility Analysis and the Consumption Function: An Interpretation of Cross-Section Data”.

  5. Powers, D. A., & Xie, Y. (2008). Statistical Methods for Categorical Data Analysis (2nd ed.). Emerald Group Publishing.

  6. Stanley, T. J., & Danko, W. D. (1996). The Millionaire Next Door: The Surprising Secrets of America’s Wealthy.

  7. Thomas, L. C., Crook, J. N., & Edelman, D. B. (2002). Credit Scoring and Its Applications. Society for Industrial and Applied Mathematics (SIAM).