Em xin cam đoan rằng tiểu luận này là kết quả của quá trình nghiên cứu độc lập do cá nhân em thực hiện, dưới sự hướng dẫn khoa học của thầy ThS. Trần Mạnh Tường. Trong suốt quá trình thực hiện, em đã tuân thủ nghiêm túc các nguyên tắc về đạo đức học thuật và đạo đức nghiên cứu, đảm bảo không sao chép, sử dụng trái phép hay vi phạm bản quyền bất kỳ tài liệu nào. Mọi dữ liệu, trích dẫn, tài liệu tham khảo được sử dụng đều đã được ghi rõ nguồn theo đúng quy định.
Trước tiên, em xin chân thành cảm ơn đến Ban giám hiệu, các thầy cô trong khoa Khoa học dữ liệu đã luôn đồng hành, nhiệt tình trong quá trình truyền đạt kiến thức, định hướng, và tạo điều kiện thuận lợi giúp em có thể trải nghiệm và tiếp thu những môn học cần thiết cho việc định hướng nghề nghiệp sắp tới. Và đặc biệt là em rất cảm ơn thầy ThS. Trần Mạnh Tường người thầy dẫn dắt trực tiếp em trong quá trình môn học này. Những lời chỉ dẫn, kinh nghiệm quý báu của thầy đã giúp em hoàn tất bài tiểu luận một cách hoàn thiện nhất có thể. Em vô cùng biết ơn về điều đó.
Bằng tất cả sự cố gắng của mình em sẽ hoàn thành bài tiêu luận này một cách tối ưu trong khả năng của mình. Trong quá trình thực hiện. Kết quả khó tránh khỏi những sai lầm, thiếu sót không mong muốn, vì vậy em rất hy vọng được sự góp ý của thầy, để bản thân hoàn thiện hơn nữa trên hành trình và con đường của mình.
Sau tất cả, em xin gửi lời cảm ơn chân thành đến mọi người đã luôn đồng hành, giúp đỡ và hỗ trợ em trong suốt hành trình học tập cũng như quá trình thực hiện bài tiểu luận.
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 không nhỏ đế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.
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.
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.
Xây dựng mô hình, 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.
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.
Đố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.
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.
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
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.
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ợ)
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:
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.
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 trả góp mua nhà 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
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 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 tỷ lệ nợ trên thu nhập là một chỉ số trọng yếu để đánh giá rủi ro. Một tỷ lệ nợ trên thu nhập thấp cho thấy người vay có khả năng tài chính ổn định để chi trả cho các khoản vay mới, trong khi tỷ lệ nợ trên thu nhập cao (thường trên 43-50%) được xem là dấu hiệu cảnh báo, phản ánh nguy cơ người vay đang gánh chịu áp lực tài chính lớ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.
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)
suppressPackageStartupMessages({
suppressWarnings({
# 1. Gói xử lý và thao tác dữ liệu (Data Wrangling)
library(readxl) # Đọc file Excel
library(dplyr) # Thao tác dữ liệu (filter, mutate, group_by,...)
library(tidyr) # Tái cấu trúc dữ liệu (pivot_longer,...)
# 2. Gói trực quan hóa dữ liệu (Visualization)
library(ggplot2) # Vẽ biểu đồ
library(gridExtra)# Sắp xếp nhiều biểu đồ
library(pROC) # Vẽ đường cong ROC
# 3. Gói mô hình hóa và phân tích thống kê (Modeling & Analysis)
library(caret) # Tạo ma trận nhầm lẫn và các công cụ machine learning
library(car) # Kiểm tra đa cộng tuyến (hàm vif)
library(AER) # Kiểm định kinh tế lượng (dispersiontest)
library(MASS) # Chứa hàm glm.nb cho mô hình Nhị thức Âm
library(nnet) # Chứa hàm multinom cho mô hình Đa thức
library(logistf) # Hồi quy logistic cho dữ liệu hiếm/phân tách
library(epitools) # Tính OR, RR (oddsratio, riskratio)
# 4. Gói báo cáo và trình bày kết quả (Reporting)
library(knitr) # Gói lõi của R Markdown
library(kableExtra) # Làm đẹp bảng biểu
library(jtools) # Xuất bảng tóm tắt hồi quy (export_summs)
library(DescTools)# Tính Brier Score
})
})
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, trả góp mua nhà).
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
: 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
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 5 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.
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 (Mô đa phạm trù)
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.
# 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")
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.
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 |
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
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.
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) | Thành công (y₁) | Thất bại (y₂) | Tổng hàng (nᵢ.) |
---|---|---|---|
Nhóm 1 (x₁) | n₁₁ | n₁₂ | n₁. |
Nhóm 2 (x₂) | n₂₁ | n₂₂ | n₂. |
Tổng cột | n.₁ | n.₂ | n |
Tỷ lệ thành công
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]
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{)} \]
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\)]
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})) \]
Odds:
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]
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})) \]
- Mô hình hồi quy nhị phân: Logit, Probit và Cloglog
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 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.
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ị.
Trong đó \(\Phi^{-1}\) là 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ạ.
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.
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)\] | Có | Tỷ số chênh (OR) | Phổ biến, dễ hiểu, sự kiện không quá hiếm |
Probit | \[\Phi^{-1}(p)\] | Có | 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 |
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 \]
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.
- 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:
- 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)
Precision phản ánh độ tin cậy/ tính chính xác của mô hình khi dự đoán Positive. Nghĩa là, trong số những người được dự đoán là “được duyệt vay”, thì có bao nhiêu người thật sự được duyệt trên thực tế.
\[ 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)
Recall đo lường khả năng không bỏ sót các trường hợp thực sự nên được duyệt. Thể hiện, trong số tất cả những người đủ điều kiện vay, mô hình nhận diện được bao nhiêu người.
\[ 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
F1-score là chỉ số thể hiện sự cân bằng giữa độ chính xác (Precision) và khả năng phát hiện đúng (Recall). Nó cho biết mức độ tốt của mô hình khi cả hai yếu tố này đều quan trọng.
\[ 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.
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.
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\):
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}}} \]
Để 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ì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.
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ố).
- 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
- 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.
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).
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:
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:
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.
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 \]
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 Poisson và Nhị 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.
loan_status
)# 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")]
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, với việc bị từ chối là kết quả chiếm tỷ lệ cao nhất.
person_education
)# 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")]
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.
person_home_ownership
)# 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
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ể.
loan_intent
)# 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")]
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 rõ rệt.
Các nhóm chữa bệnh/dành cho y tế (MEDICAL), đầu tư kinh doanh (VENTURE), tiêu dùng cá nhân (PERSONAL) và hợp nhất các khoản nợ (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 để hợp nhất các khoản nợ 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.
previous_loan_defaults_on_file
)# 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")]
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.
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)
library(tidyr)
summary_stats <- tl_dt %>%
dplyr::select(where(is.numeric)) %>%
dplyr::select(-any_of("loan_status")) %>%
tidyr::pivot_longer(cols = everything(),
names_to = "Variable",
values_to = "Value") %>%
dplyr::group_by(Variable) %>%
dplyr::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
)
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
# 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
)
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 (dưới 600 điểm).
→ Đ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
# 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
# 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
# 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
# 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.
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.
previous_loan_defaults_on_file
Giả thuyết nền được đặt ra là: phần lớn khách hàng tiềm năng cần có lịch sử tín dụng tích cực nhằm đáp ứng yêu cầu kiểm soát rủi ro của tổ chức tài chính. Biến “previous_loan_defaults_on_file” được sử dụng như một chỉ báo trực tiếp để kiểm định giả thuyết này. Tác giả sẽ tiến hành đánh giá xem tỷ lệ khách hàng có ghi nhận vỡ nợ trong quá khứ có nằm dưới ngưỡng an toàn dự kiến (20%) hay không. Kết quả kiểm định sẽ cung cấp cơ sở thực tiễn để đá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:
# 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
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ế.
loan_status
Do tỷ lệ vỡ nợ trước đó lên tới 50,8%. Vì vậy, tác giả giả định rằng tỷ lệ hồ sơ tín dụng bị từ chối sẽ ở mức tương đối cao, khoảng 50% tổng số hồ sơ trong bộ dữ liệu.
Giả thuyết
# 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.5 là tỷ lệ kỳ vọng để kiểm định)
test_2 <- prop.test(n_2, n_total, p = 0.5, 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.5
## X-squared = 13889, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 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:
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 50% 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.
- Giả thuyết kiểm định Chi-squared:
# Kiểm định Chi-squared giữa loan_status và các biến phân loại
test_results <- list(
chisq.test(table(tl_dt$loan_status, tl_dt$previous_loan_defaults_on_file)),
chisq.test(table(tl_dt$loan_status, tl_dt$person_education)),
chisq.test(table(tl_dt$loan_status, tl_dt$person_home_ownership)),
chisq.test(table(tl_dt$loan_status, tl_dt$loan_intent)))
Biến độc lập | Giá trị Chi.squared | Giá trị p-value |
---|---|---|
Tình trạng vỡ nợ trước đó | 13270.29 | 0.0000 |
Trình độ học vấn | 2.02 | 0.7328 |
Tình trạng sở hữu nhà | 2989.51 | 0.0000 |
Mục đích vay vốn | 909.65 | 0.0000 |
Kết quả kiểm định Chi-bình phương cho thấy các yếu tố tình trạng vỡ nợ trước đó, tình trạng sở hữu nhà và mục đích vay vốn đều có ý nghĩa thống kê (\(p-value\) < 5%) và có mối liên hệ chặt chẽ với quyết định phê duyệt khoản vay. Điều này bác bỏ \(H_0\) và chấp nhận \(H_1\). Điều này cho thấy, trong quy trình thẩm định tín dụng, các tổ chức tài chính nhiều khả năng sẽ dựa vào những biến này như các chỉ báo quan trọng khi đánh giá hồ sơ vay.
Ngược lại, yếu tố trình độ học vấn có giá trị (\(p-value\) > 5%, không có cơ sở để bác bỏ giả thuyết \(H_0\)), cho thấy không có đủ bằng chứng thống kê để nói rằng trình độ học vấn của người đi vay là một yếu tố ảnh hưởng đến việc khoản vay của họ có được duyệt hay không.
- Xét dựa trên các biến có tác động
loan_status
và
previous_loan_defaults_on_file
# 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 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
# 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.
- Hệ 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\) và \(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\) và \(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.
- 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\)
# Bảng 2 chiều giữa loan_status và tình trạng 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):
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ệ.
loan_status
và
person_home_ownership
# 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 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
# 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 đồ
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 tình trạng sở hữu nhà",
x = "Tình trạng khoản vay", y = "Tỷ lệ (%)",
fill = "Tình trạng sở hữu nhà") +
scale_fill_brewer(palette = "Set3") +
theme_minimal()
Nhận xét:
Mối liên hệ giữa tình trạng sở hữu nhà và trạng thái 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”.
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 trả góp mua nhà (MORTGAGE) và sở hữu nhà (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 “Tình trạng 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 trả góp mua nhà (MORTGAGE) hoặc đã sở hữu nhà (OWN) lại chiếm tỷ trọng lớn hơn rõ rệt trong các khoản vay bị từ chối.
- Hệ 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\) và
\(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\) và \(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ề tình trạng 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 (trả góp mua nhà) (chênh lệch +54,5%) và vượt trội hoàn toàn so với nhóm OWN (sở hữu nhà) (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%).
- 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\)
# Bảng 2 chiều giữa loan_status và tình trạng 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 tình trạng 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 trả góp mua nhà (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 trả góp mua nhà, 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 trả góp mua nhà. 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 trả góp mua nhà. Khoảng tin cậy 95% là [0,57; 0,74], cho thấy việc đã sở hữu nhà (không còn nợ thế chấp) có thể làm giảm khả năng tiếp cận khoản vay.
- 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 tình trạng 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 trả góp mua nhà (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 trả góp mua nhà. 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 trả góp mua nhà. 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 trả góp mua nhà. Khoảng tin cậy 95% [0,54 – 0,72] cho thấy việc đã sở hữu nhà (Không còn nợ 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.
loan_status
và
loan_intent
# 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 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
# 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 đồ
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à trạng thái 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”.
Nhóm mục đích hợp nhất các khoản nợ (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 hợp nhất các khoản nợ 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 rõ rệt trong nhóm bị từ chối.
- Hệ 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\) và \(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\) và \(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 (hợp nhất các khoản nợ) với 21,6% (mức chênh lệch 2,2%).
Mức chênh lệch giữa các nhóm ở mức cao: tỷ lệ hồ sơ thuộc nhóm MEDICAL vượt trội so với các nhóm còn lại như PERSONAL (cao hơn 8,6%), HOMEIMPROVEMENT (cao hơn 11,2%) và đặc biệt là VENTURE (cao hơn tới 12,5%). Tương tự, nhóm DEBTCONSOLIDATION cũng ghi nhận tỷ lệ cao hơn so với nhóm còn lại trừ MEDICAL, với mức chênh lệch dao động từ 6% đến 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/sửa nhà) (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ê.
- 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\)
# Bảng 2 chiều giữa loan_status và tình trạng 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 hợp nhất các khoản nợ (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 hợp nhất các khoản nợ. Khoảng tin cậy 95% là [0,87; 0,97].
Nhóm cải thiện/sửa nhà (HOMEIMPROVEMENT): Có cơ hội được duyệt vay thấp hơn, bằng 0,869 lần so với nhóm hợp nhất các khoản nợ. 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 hợp nhất các khoản nợ, 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 hợp nhất các khoản nợ. 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 hợp nhất các khoản nợ. Đ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].
- 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 mục đích vay có mối liên hệ chặt chẽ với khả năng được phê duyệt. So với nhóm vay để hợp nhất nợ (DEBTCONSOLIDATION – nhóm tham chiếu), tỷ lệ được duyệt ở các nhóm còn lại nhìn chung thay đổi rõ rệt, phần lớn theo hướng tiêu cực.
Nhóm y tế (MEDICAL) và cải thiện/sửa nhà (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 hợp nhất các khoản nợ. 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 hợp nhất các khoản nợ. 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 hợp nhất các khoản nợ. 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.
loan_status
và và biến
định lượng- Giả thuyết kiểm định Chi-squared:
# Kiểm định Chi-squared giữa loan_status và các biến phân loại
test_results <- list(
chisq.test(table(tl_dt$loan_status, tl_dt$person_age_group)),
chisq.test(table(tl_dt$loan_status, tl_dt$loan_int_cat)),
chisq.test(table(tl_dt$loan_status, tl_dt$loan_inc_cat)),
chisq.test(table(tl_dt$loan_status, tl_dt$cred_hist_cat)), chisq.test(table(tl_dt$loan_status, tl_dt$score_group)))
Biến độc lập | Giá trị Chi.squared | Giá trị p-value |
---|---|---|
Phân khúc độ tuổi | 18.78 | 0.0003 |
Phân khúc lãi suất | 5714.71 | 0.0000 |
Phân khúc tỷ lệ vay trên thu nhập | 8404.42 | 0.0000 |
Phân khúc thâm niên tín dụng | 18.88 | 0.0003 |
Phân khúc điểm tín dụng | 3.22 | 0.3591 |
Kết quả kiểm định Chi-bình phương cho thấy các yếu tố như phân khúc độ tuổi, lãi suất, tỷ lệ vay trên thu nhập và thâm niên tín dụng có mối liên hệ thống kê rõ rệt với quyết định phê duyệt khoản vay (\(p-value\) < 5%, bác bỏ giả thuyết \(H_0\), chấp nhận \(H_1\)). Điều này cho thấy đây là những biến dự báo quan trọng trong quy trình thẩm định tín dụng.
Ngược lại, yếu tố phân khúc điểm tín dụng” (\(p-value\) > 5%, không có cơ sở để bác bỏ giả thuyết \(H_0\)), cho thấy không có đủ bằng chứng thống kê để nói rằng phân khúc điểm tín dụng của người đi vay là một yếu tố ảnh hưởng đến việc khoản vay của họ có được duyệt hay không.
Để đảm bảo tính chính xác và khoa học, nghiên cứu này không chia các biến định lượng (như tuổi, tỷ lệ vay trên thu nhập) thành nhóm. Cách làm này có thể làm mất thông tin và khiến kết quả phụ thuộc vào cách chọn ngưỡng, làm giảm tính khách quan. Thay vào đó, các chỉ số như Tỷ số chênh (OR) sẽ được ước tính trực tiếp khi xây dựng các mô hình hồi quy, và chỉ những biến có mối liên hệ ý nghĩa thống kê mới được đưa vào phân tích.
loan_status
và
person_age
# 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 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
# 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
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:
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%.
loan_status
và
loan_int_rate
# 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 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
# 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
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:
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. Có thể là yếu tố có tác động không nhỏ đến quyết định phê duyệ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%).
loan_status
và
loan_percent_income
# 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 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
# 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
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à trạng thái 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ó tác động rõ rệt đến quyết định phê duyệt.
Nhóm tỷ lệ vay trên thu nhập cao (≥25%): Cho thấy sự thay đổi lớn nhất, tăng đột biến từ 5,2% trong nhóm bị từ chối lên 39.1% trong nhóm được duyệt (tăng khoảng 33,9%). Đ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 mẽ, từ 29,3% xuống chỉ còn 13% (giảm khoảng 16,3%). Đâ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%-15%): Mặc dù chiếm tỷ trọng lớn nhất trong nhóm bị từ chối nhưng vẫn sụt giảm đáng chú ý, từ 38,1% xuống 22,2% (giảm khoảng 15,9%).
Nhóm tỷ lệ vay trên thu nhập trung bình (15%-25%): Cũng ghi nhận sự sụt giảm rõ rệt, nhóm này giảm nhẹ nhất, từ 27,4% xuống 25,7% (giảm khoảng 2,7%).
loan_status
và
cb_person_cred_hist_length
# 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 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
# 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
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à trạng thái 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ẽ.
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%).
- Giả thuyết kiểm định Chi-squared:
# Kiểm định Chi-squared giữa loan_status và các biến phân loại
test_results <- list(
chisq.test(table(tl_dt$loan_intent, tl_dt$loan_status)),
chisq.test(table(tl_dt$loan_intent, tl_dt$person_age_group)),
chisq.test(table(tl_dt$loan_intent, tl_dt$person_home_ownership)),
chisq.test(table(tl_dt$loan_intent, tl_dt$loan_inc_cat)))
Biến độc lập | Giá trị Chi-squared | Giá trị p-value |
---|---|---|
Trạng thái phê duyệt khoản vay | 909.65 | < 1e-04 |
Phân khúc độ tuổi | 318.82 | < 1e-04 |
Tình trạng sở hữu nhà | 926.20 | < 1e-04 |
Phân khúc tỷ lệ vay trên thu nhập | 52.69 | < 1e-04 |
Phân tích cho thấy mục đích vay vốn của khách hàng có mối liên hệ chặt chẽ với tất cả các yếu tố được xem xét: trạng thái phê duyệt khoản vay; tình trạng sở hữu nhà; phân khúc độ tuổi và tỷ lệ vay trên thu nhập (tất cả đều có \(p-value\) < 5%, bác bỏ giả thuyết \(H_0\) và chấp nhận giả thuyết \(H_1\)). Nói cách khác, những đặc điểm này cung cấp thông tin giá trị để xác định lý do một khách hàng tìm đến khoản vay.
person_age
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
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 về mục đích 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, hợp nhất các khoản nợ (DEBTCONSOLIDATION) khá tương đồng.
Nhu cầu vay sửa nhà (HOMEIMPROVEMENT): 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.
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, tùy vào đặc điểm của từng biểu hiện mà người vay sẽ có xu hướng ưu tiên những mục đích vay khác nhau.
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 để hợp nhất các khoản nợ (DEBTCONSOLIDATION) 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à (HOMEIMPROVEMENT) 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à (HOMEIMPROVEMENT) chỉ chiếm 10,3%.
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
# Vẽ biểu đồ
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 phân khúc tỷ lệ khoản vay trên thu nhập, không có sự khác biệt quá vượt trội.
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à (HOMEIMPROVEMENT) 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.
# 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 10: 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")
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:
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_length
và person_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)
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
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.
# 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
cat("Bảng 11: Phân tích mối liên hệ giữa tình trạng vỡ nợ và phê duyệt khoản vay\n\n")
## Bảng 11: Phân tích mối liên hệ giữa tình trạng vỡ nợ và phê duyệt khoản vay
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
Logit | Probit | Cloglog | |
---|---|---|---|
(Intercept) | 0.19 *** | 0.12 *** | -0.23 *** |
(0.01) | (0.01) | (0.01) | |
previous_loan_defaults_on_fileYes | 19.37 | 5.80 | 3.22 |
(71.13) | (16.74) | (4.36) | |
N | 45000 | 45000 | 45000 |
AIC | 30491.79 | 30491.79 | 30491.79 |
BIC | 30509.22 | 30509.22 | 30509.22 |
Pseudo R2 | 0.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.
# 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"))
cat("Bảng 12: Kết quả mô hình nhị phân\n\n")
## Bảng 12: Kết quả mô hình nhị phân
export_summs(list("Logit" = Logit, "Probit" = probit, "Cloglog" = cloglog),
scale = FALSE,
digits = 5,
output = "markdown")
Logit | Probit | Cloglog | |
---|---|---|---|
(Intercept) | 6.58622 *** | 3.62853 *** | 2.72794 *** |
(0.12731) | (0.06905) | (0.06020) | |
person_age | 0.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_ownershipOWN | 0.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_intentEDUCATION | 0.92377 *** | 0.51397 *** | 0.43429 *** |
(0.04559) | (0.02544) | (0.02283) | |
loan_intentHOMEIMPROVEMENT | 0.11128 * | 0.05874 * | 0.03215 |
(0.05109) | (0.02888) | (0.02659) | |
loan_intentMEDICAL | 0.23645 *** | 0.13080 *** | 0.11296 *** |
(0.04301) | (0.02442) | (0.02270) | |
loan_intentPERSONAL | 0.66416 *** | 0.36544 *** | 0.30040 *** |
(0.04676) | (0.02623) | (0.02372) | |
loan_intentVENTURE | 1.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) | |
N | 45000 | 45000 | 45000 |
AIC | 33559.92430 | 33808.46027 | 34663.36134 |
BIC | 33673.21173 | 33921.74770 | 34776.64877 |
Pseudo R2 | 0.41271 | 0.40651 | 0.38496 |
*** p < 0.001; ** p < 0.01; * p < 0.05. |
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 = 6.5862) trong mô hình hồi quy logistic cho
thấy rằng, với khách hàng thuộc nhóm tham chiếu (sở hữu nhà theo hình
thức đang trả góp mua nhà MORTGAGE
và mục đích vay là hợp
nhất khoản nợ DEBTCONSOLIDATION
), khi tất cả các biến định
lượng trong mô hình bằng 0, thì log(odds) bị từ chối khoản vay là
6.5862. Xác suất bị từ chối được tính theo công thức:
\[ P = \frac{e^{\beta_0}}{1 + e^{\beta_0}} = \frac{e^{6.5862}}{1 + e^{6.5862}} \approx \frac{725.69}{1 + 725.69} \approx 0.9986 \]
Do đó, xác suất bị từ chối khoản vay trong giả định trên là khoảng 99.86% (trường hợp này rất khó xảy ra).
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
person_age
(p = 0.107) và
cb_person_cred_hist_length
(p = 0.976) đều có \(p-value\) > 0,05.person_home_ownership
(so với nhóm MORTGAGE) -
exp(β)loan_intent
(so với nhóm DEBTCONSOLIDATION) -
exp(β)loan_int_rate
- Lãi suất vayloan_percent_income
- Tỷ lệ vay trên thu nhậpPhươ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 = 3.6285) trong mô hình hồi quy Probit biểu thị
z-score (chỉ số Probit), phản ánh mức độ bị từ chối khoản vay của một
khách hàng thuộc nhóm tham chiếu, tức là có tình trạng sở hữu nhà theo
hình thức đang trả góp (MORTGAGE
), mục đích vay là hợp nhất
các khoản nợ (DEBTCONSOLIDATION
), và khi tất cả các biến
định lượng trong mô hình bằng 0. Khi đó, xác suất bị từ chối được tính
thông qua hàm phân phối chuẩn tích lũy (CDF) như sau:
\[ P = \Phi(z) = \Phi(3.6285) \approx 0.99986 \]
Do đó, xác suất bị từ chối khoản vay trong giả định trên là khoảng 99.986% (trường hợp này rất khó xảy ra).
Diễn giải các Biến Độc lập
Giá trị z-score trong mô hình Probit sẽ tăng hoặc giảm tùy theo dấu và độ lớn của hệ số ước lượng, từ đó ảnh hưởng gián tiếp đến xác suất bị từ chối khoản vay
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.
person_home_ownership
– So với nhóm tham chiếu:
MORTGAGEloan_intent
– So với nhóm tham chiếu:
DEBTCONSOLIDATIONloan_int_rate
– (Lãi suất vay)loan_percent_income
– (Tỷ lệ vay trên thu
nhập)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 (Intercept = 2.7279) trong mô hình biểu thị giá trị của
hàm liên kết cloglog
- cụ thể là (log(-log(1 - p))) - tương
ứng với khả năng bị từ chối khoản vay của một khách hàng thuộc nhóm tham
chiếu, bao gồm: tình trạng sở hữu nhà là MORTGAGE
(đang trả
góp mua nhà) và mục đích vay là DEBTCONSOLIDATION
(hợp nhất
các khoản nợ), khi tất cả các biến định lượng trong mô hình bằng 0. Khi
đó, xác suất bị từ chối được tính theo công thức:
\[ P = 1 - \exp(-\exp(2.7279)) \approx 1 - \exp(-15.301) \approx 0.9999998 \]
Do đó, xác suất bị từ chối khoản vay trong giả định trên là xấp xỉ 99.99998% (trường hợp này rất khó xảy ra).
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
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.
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 trả góp mua nhà, nhóm này có xác suất bị từ chối cao hơn 49%.
RENT (Thuê nhà): Hệ số = -0.471. So với người đang trả góp mua nhà, nhóm này có xác suất 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 trả góp mua nhà, nhóm này có xác suất bị từ chối thấp hơn 26%.
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%).
loan_int_rate
- Lãi suất vay→ 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%)
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 cho 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à trả góp mua nhà. Trong khi đó, các nhóm thuê nhà và 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 để hợp nhất các khoản nợ – 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.
models <- list(Logit = Logit, Probit = probit, Cloglog = cloglog)
# Tính Brier Score cho từng mô hình
brier_scores <- sapply(models, BrierScore)
Tiêu chí | Logit | Probit | Clog-log |
---|---|---|---|
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)
# 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ả.
# 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
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.
Trong các phân tích trước, “Mục tiêu vay” cho thấy ý nghĩa thống kê rõ rệt trong việc dự báo “Trạng thái phê duyệt khoản vay”. Để mở rộng góc nhìn, ta đảo ngược vai trò: xem “Mục tiêu vay” là biến phụ thuộc đa phân loại, còn “Trạng thái phê duyệt” là biến độc lập. Do “Mục tiêu vay” không có thứ tự tự nhiên, mô hình Multinomial Logit được sử dụng nhằm khám phá sự khác biệt về phân bố các mục tiêu phổ biến (giáo dục, y tế, kinh doanh…) giữa hai nhóm duyệt và từ chối và các yếu tố khác, từ đó hiểu sâu hơn hành vi người vay.
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à “hợp nhất các khoản
nợ”).
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 dược đuyệ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 rõ rệt (OR ≈ 2.40). • Tiêu dùng (PERSONAL): Tăng rõ rệt (OR ≈ 1.77). • Sửa nhà, y tế: Tăng nhẹ 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): - Đầu tư kinh doanh (VENTURE): Tăng mạnh nhất (OR ≈ 9.45). - Y tế, tiêu dùng, sửa nhà, giáo dục: Tăng mạnh (OR từ 5.45 đến 5.66). • Thuê nhà (so với đang trả góp): - Sửa nhà (HOMEIMPROVEMENT): Giảm tương đối (OR ≈ 0.72). - Y tế (MEDICAL): Tăng tương đối (OR ≈ 1.31). - Đầu tư kinh doanh, tiêu dùng, giáo dục: Tăng nhẹ (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 nhất 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): Tăng mạnh nhất (OR ≈ 5.31). • Giáo dục (EDUCATION): Tăng mạnh (OR ≈ 4.05). • Tiêu dùng (PERSONAL): Tăng rõ rệt (OR ≈ 2.38). • Y tế (MEDICAL): Tăng tương đối (OR ≈ 1.86). • Sửa nhà (HOMEIMPROVEMENT): Giảm mạnh (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à (HOMEIMPROVEMENT): 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). |
# 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
- Giả thuyết được kiểm định phân tán:
Nhận xét: Kết quả kiểm định phân tán
→ 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
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_income
và credit_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_income
và credit_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.
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 phạm trù đượ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 phạm trù.
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.
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 “hợp nhất các khoản nợ”).
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.
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.
Để 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.
Becker, G. S. (1964). Human Capital: A Theoretical and Empirical Analysis, with Special Reference to Education. University of Chicago Press.
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.
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.
Modigliani, F., & Brumberg, R. (1954). “Utility Analysis and the Consumption Function: An Interpretation of Cross-Section Data”.
Powers, D. A., & Xie, Y. (2008). Statistical Methods for Categorical Data Analysis (2nd ed.). Emerald Group Publishing.
Stanley, T. J., & Danko, W. D. (1996). The Millionaire Next Door: The Surprising Secrets of America’s Wealthy.
Thomas, L. C., Crook, J. N., & Edelman, D. B. (2002). Credit Scoring and Its Applications. Society for Industrial and Applied Mathematics (SIAM).