1 Phân tích bộ dữ liệu Loan_default

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

# Đọ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"

1.2 Xử lý dữ liệu thô, mã hóa dữ liệu

# 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"))

1.3 Thực hiện các thống kê

# 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.

1.4 Trực quan hóa dữ liệu