# Đọc dữ liệu
loan <- read.csv("Loan_default.csv")
#Xem kích thước dữ liệu
dim(loan)
## [1] 255347 18
# Xem 6 dòng đầu tiên của dữ liệu
head(loan)
## LoanID Age Income LoanAmount CreditScore MonthsEmployed NumCreditLines
## 1 I38PQUQS96 56 85994 50587 520 80 4
## 2 HPSK72WA7R 69 50432 124440 458 15 1
## 3 C1OZ6DPJ8Y 46 84208 129188 451 26 3
## 4 V2KKSFM3UN 32 31713 44799 743 0 3
## 5 EY08JDHTZP 60 20437 9139 633 8 4
## 6 A9S62RQ7US 25 90298 90448 720 18 2
## InterestRate LoanTerm DTIRatio Education EmploymentType MaritalStatus
## 1 15.23 36 0.44 Bachelor's Full-time Divorced
## 2 4.81 60 0.68 Master's Full-time Married
## 3 21.17 24 0.31 Master's Unemployed Divorced
## 4 7.07 24 0.23 High School Full-time Married
## 5 6.51 48 0.73 Bachelor's Unemployed Divorced
## 6 22.72 24 0.10 High School Unemployed Single
## HasMortgage HasDependents LoanPurpose HasCoSigner Default
## 1 Yes Yes Other Yes 0
## 2 No No Other Yes 0
## 3 Yes Yes Auto No 1
## 4 No No Business No 0
## 5 No Yes Auto No 0
## 6 Yes No Business Yes 1
# Xem cấu trúc kiểu dữ liệu từng cột
str(loan)
## 'data.frame': 255347 obs. of 18 variables:
## $ LoanID : chr "I38PQUQS96" "HPSK72WA7R" "C1OZ6DPJ8Y" "V2KKSFM3UN" ...
## $ Age : int 56 69 46 32 60 25 38 56 36 40 ...
## $ Income : int 85994 50432 84208 31713 20437 90298 111188 126802 42053 132784 ...
## $ LoanAmount : int 50587 124440 129188 44799 9139 90448 177025 155511 92357 228510 ...
## $ CreditScore : int 520 458 451 743 633 720 429 531 827 480 ...
## $ MonthsEmployed: int 80 15 26 0 8 18 80 67 83 114 ...
## $ NumCreditLines: int 4 1 3 3 4 2 1 4 1 4 ...
## $ InterestRate : num 15.23 4.81 21.17 7.07 6.51 ...
## $ LoanTerm : int 36 60 24 24 48 24 12 60 48 48 ...
## $ DTIRatio : num 0.44 0.68 0.31 0.23 0.73 0.1 0.16 0.43 0.2 0.33 ...
## $ Education : chr "Bachelor's" "Master's" "Master's" "High School" ...
## $ EmploymentType: chr "Full-time" "Full-time" "Unemployed" "Full-time" ...
## $ MaritalStatus : chr "Divorced" "Married" "Divorced" "Married" ...
## $ HasMortgage : chr "Yes" "No" "Yes" "No" ...
## $ HasDependents : chr "Yes" "No" "Yes" "No" ...
## $ LoanPurpose : chr "Other" "Other" "Auto" "Business" ...
## $ HasCoSigner : chr "Yes" "Yes" "No" "No" ...
## $ Default : int 0 0 1 0 0 1 0 0 1 0 ...
# Ý nghĩa các biến
variable_description <- data.frame(
Variable = c("LoanID", "Age", "Income", "LoanAmount", "CreditScore",
"MonthsEmployed", "NumCreditLines", "InterestRate",
"LoanTerm", "DTIRatio", "Education", "EmploymentType",
"MaritalStatus", "HasMortgage", "HasDependents",
"LoanPurpose", "HasCoSigner", "Default"),
Meaning = c("Mã khoản vay",
"Tuổi người vay",
"Thu nhập hàng năm",
"Số tiền vay",
"Điểm tín dụng",
"Số tháng làm việc",
"Số hạn mức tín dụng",
"Lãi suất vay",
"Kỳ hạn vay",
"Tỷ lệ nợ/thu nhập",
"Trình độ học vấn",
"Loại hình công việc",
"Tình trạng hôn nhân",
"Có thế chấp",
"Có người phụ thuộc",
"Mục đích vay",
"Có người đồng vay",
"Tình trạng vỡ nợ (0/1)")
)
# Số dữ liệu bị thiếu
colSums(is.na(loan))
## LoanID Age Income LoanAmount CreditScore
## 0 0 0 0 0
## MonthsEmployed NumCreditLines InterestRate LoanTerm DTIRatio
## 0 0 0 0 0
## Education EmploymentType MaritalStatus HasMortgage HasDependents
## 0 0 0 0 0
## LoanPurpose HasCoSigner Default
## 0 0 0
# Số dữ liệu bị trùng lặp
sum(duplicated(loan))
## [1] 0
# Đếm số biến định lượng
num_numeric <- sum(sapply(loan, is.numeric))
cat("Số biến định lượng:", num_numeric, "\n")
## Số biến định lượng: 10
# Đếm số biến định tính
num_categorical <- sum(sapply(loan, function(x) is.factor(x) | is.character(x)))
cat("Số biến định tính:", num_categorical, "\n")
## Số biến định tính: 8
# Liệt kê các biến định lượng
cat("Các biến định lượng:\n")
## Các biến định lượng:
names(loan)[sapply(loan, is.numeric)]
## [1] "Age" "Income" "LoanAmount" "CreditScore"
## [5] "MonthsEmployed" "NumCreditLines" "InterestRate" "LoanTerm"
## [9] "DTIRatio" "Default"
# Liệt kê các biến định tính
cat("Các biến định tính:\n")
## Các biến định tính:
names(loan)[sapply(loan, function(x) is.factor(x) | is.character(x))]
## [1] "LoanID" "Education" "EmploymentType" "MaritalStatus"
## [5] "HasMortgage" "HasDependents" "LoanPurpose" "HasCoSigner"
# Chuyển đổi các biến phân loại sang factor (để phân tích dễ hơn)
loan$Education <- as.factor(loan$Education)
loan$EmploymentType <- as.factor(loan$EmploymentType)
loan$MaritalStatus <- as.factor(loan$MaritalStatus)
loan$HasMortgage <- as.factor(loan$HasMortgage)
loan$Default <- as.factor(loan$Default)
# Loại bỏ cột dữ liệu không cần thiết ( LoanID)
loan <- subset(loan, select = -LoanID)
# Mã hóa các biến nhị phân (Yes/No → 1/0)
loan$HasMortgage <- ifelse(loan$HasMortgage == "yes", 1, 0)
loan$HasCoSigner <- ifelse(loan$HasCoSigner == "Yes", 1, 0)
# Loại bỏ các bản ghi trùng lặp
loan <- loan[!duplicated(loan), ]
# Xác định nhóm vay nhỏ lẻ
freq <- table(loan$LoanPurpose)
rare_groups <- names(freq[freq < 0.1 * nrow(loan)])
rare_groups
## character(0)
# Mã hóa biến Education theo thứ bậc học vấn.
loan$Education <- factor(loan$Education, levels=c("High School","Bachelor's","Master's","PhD"), labels=c(1,2,3,4))
# Cột Age cần nhóm lại để phân tích nhân khẩu học.
loan$AgeGroup <- cut(loan$Age, breaks=c(18,30,45,60,70), labels=c("Young","Adult","Mid-age","Senior"))
# Tạo thêm biến tỷ lệ vay trên thu nhập để thể hiện khả năng tài chính khách hàng.
loan$LoanToIncome <- loan$LoanAmount / loan$Income
# Để so sánh khả năng trả nợ của nhóm giàu và nghèo nhóm thu nhập theo tứ phân vị.
loan$IncomeGroup <- cut(loan$Income, breaks=quantile(loan$Income, probs=seq(0,1,0.25)), include.lowest=TRUE, labels=c("Low","Medium","High","Very High"))
# Biến Default (0/1) cần hiển thị dạng “No/Yes”.
loan$Default <- factor(loan$Default, levels=c(0,1), labels=c("No","Yes"))
# Thống kê mô tả độ tuổi vay
summary(loan$Age)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.0 31.0 43.0 43.5 56.0 69.0
Kết quả mô tả độ tuổi khách hàng vay vốn cho thấy độ tuổi nhỏ nhất là 18, lớn nhất là 69, tuổi trung bình đạt 43,5 và trung vị là 43. Giá trị phân vị thứ nhất (25%) là 31, còn phân vị thứ ba (75%) là 56, điều này có nghĩa là 50% khách hàng nằm trong độ tuổi từ 31 đến 56 – nhóm tuổi được xem là giai đoạn có thu nhập ổn định và nhu cầu vay tiêu dùng, vay mua nhà hoặc kinh doanh cao.
Sự gần bằng giữa tuổi trung bình (43,5) và trung vị (43) cho thấy phân bố độ tuổi khá cân đối, không bị lệch về phía người quá trẻ hay quá già. Khoảng chênh lệch giữa giá trị nhỏ nhất và lớn nhất (51 tuổi) thể hiện phạm vi phục vụ khách hàng rộng, từ những người trẻ mới đi làm đến nhóm khách hàng trung niên và lớn tuổi có tài sản hoặc thu nhập ổn định.
Từ kết quả này, có thể kết luận rằng phần lớn người vay của ngân hàng nằm trong nhóm lao động trung niên (31–56 tuổi), đây là nhóm khách hàng có khả năng tài chính và nhu cầu vay cao, đồng thời vẫn có một tỷ lệ đáng kể khách hàng trẻ (18–30 tuổi) đang bắt đầu tích lũy tài chính và nhóm lớn tuổi (trên 60 tuổi) có thể vay cho mục đích đầu tư hoặc hỗ trợ gia đình.
# Thống kê mô tả thu nhập khách hàng
summary(loan$Income)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 15000 48826 82466 82499 116219 149999
Kết quả thống kê mô tả cho biến thu nhập (Income) cho thấy giá trị nhỏ nhất là 15.000, lớn nhất là 149.999, thu nhập trung bình đạt 82.499, và trung vị là 82.466. Các phân vị 25% và 75% lần lượt là 48.826 và 116.219, cho thấy 50% khách hàng có thu nhập nằm trong khoảng từ 48.826 đến 116.219. Khoảng chênh lệch giữa giá trị nhỏ nhất và lớn nhất (134.999) phản ánh độ phân tán thu nhập cao, thể hiện sự đa dạng về khả năng tài chính trong danh mục khách hàng. Tuy nhiên, việc giá trị trung bình (82.499) gần bằng trung vị (82.466) cho thấy phân phối thu nhập khá cân đối, không bị lệch về phía nhóm có thu nhập cực cao hay cực thấp. Như vậy, phần lớn khách hàng của ngân hàng nằm trong nhóm thu nhập trung bình đến khá, còn các nhóm thu nhập rất thấp hoặc rất cao chỉ chiếm tỷ trọng nhỏ trong tổng thể.
# Thống kê mô tả số tiền vay
summary(loan$LoanAmount)
Kết quả thống kê mô tả cho biến số tiền vay (LoanAmount) cho thấy giá trị nhỏ nhất là 5.000, lớn nhất là 249.999, với số tiền vay trung bình đạt 127.579 và trung vị là 127.556. Hai giá trị trung bình và trung vị gần tương đương nhau, cho thấy phân phối dữ liệu khá cân đối, không bị lệch mạnh về phía các khoản vay quá lớn.
Giá trị phân vị thứ nhất (Q1 = 66.156) và phân vị thứ ba (Q3 = 188.985) cho biết 50% khách hàng có số tiền vay nằm trong khoảng từ 66.156 đến 188.985, phản ánh rằng phần lớn khách hàng vay các khoản trung bình đến cao. Khoảng chênh lệch giữa giá trị nhỏ nhất và lớn nhất (244.999) thể hiện độ phân tán cao, nghĩa là danh mục vay rất đa dạng, bao gồm cả những khoản vay nhỏ phục vụ tiêu dùng cá nhân và những khoản vay lớn hơn dành cho đầu tư hoặc mua nhà.
Tổng thể, có thể nhận thấy mức vay phổ biến của khách hàng dao động quanh 120.000–130.000, cho thấy ngân hàng chủ yếu phục vụ nhóm khách hàng có nhu cầu vay trung bình – khá, trong khi nhóm vay quá thấp hoặc quá cao chỉ chiếm tỷ trọng nhỏ trong toàn bộ dữ liệu.
``` r
# Thống kê mô tả điểm tín dụng khách hàng
summary(loan$CreditScore)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 300.0 437.0 574.0 574.3 712.0 849.0
Kết quả thống kê mô tả cho biến điểm tín dụng khách hàng (CreditScore) cho thấy giá trị nhỏ nhất là 300, lớn nhất là 849, điểm trung bình đạt 574,3, trong khi trung vị là 574. Hai giá trị này gần như trùng nhau, cho thấy phân phối điểm tín dụng khá cân đối, không có sự lệch lớn về phía một nhóm điểm nào.
Giá trị phân vị thứ nhất (Q1 = 437) và phân vị thứ ba (Q3 = 712) cho biết 50% khách hàng có điểm tín dụng nằm trong khoảng từ 437 đến 712. Điều này thể hiện phần lớn khách hàng thuộc nhóm điểm tín dụng trung bình, trong khi vẫn có một tỷ lệ nhỏ khách hàng có điểm thấp (dưới 400 – nhóm rủi ro cao) và một nhóm khác có điểm cao trên 700 (đáng tin cậy hơn).
Khoảng dao động từ 300 đến 849 phản ánh độ phân tán tương đối rộng, cho thấy danh mục khách hàng của ngân hàng bao gồm cả nhóm rủi ro thấp lẫn nhóm rủi ro cao. Nhìn chung, có thể kết luận rằng phần lớn khách hàng vay có điểm tín dụng ở mức trung bình (khoảng 570), chứng tỏ chính sách cho vay khá linh hoạt, không chỉ tập trung vào nhóm khách hàng có hồ sơ tín dụng hoàn hảo mà còn mở rộng cho các nhóm có mức độ tín nhiệm vừa phải.
# Thống kê thời gian vay
summary(loan$LoanTerm)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 12.00 24.00 36.00 36.03 48.00 60.00
Kết quả thống kê mô tả cho biến thời gian vay (LoanTerm) cho thấy các khoản vay được chia đều theo kỳ hạn từ 1 năm đến 5 năm, với số lượng khách hàng lần lượt là 50.957 (1 năm), 51.009 (2 năm), 51.061 (3 năm), 51.166 (4 năm) và 51.154 (5 năm).
Nhìn chung, phân bố thời gian vay khá đồng đều giữa các kỳ hạn, cho thấy ngân hàng cung cấp sản phẩm vay linh hoạt để đáp ứng nhiều nhu cầu khác nhau — từ các khoản vay ngắn hạn (12 tháng) phục vụ chi tiêu, vay tiêu dùng nhỏ, cho đến các khoản vay trung và dài hạn (48–60 tháng) thường dùng để mua sắm tài sản lớn hoặc đầu tư kinh doanh.