Ở bài trước (http://rpubs.com/phamdinhkhanh/375440) chúng ta đã lọc bỏ các biến đưa vào model knn để phân loại các hợp đồng nợ xấu dựa trên đánh giá mức độ tương quan của các biến dự báo đối với biến được dự báo. Kết quả cho thấy việc loại bỏ các biến không tương quan cải thiện mức độ dự báo chính xác nợ xấu lên 3 lần (từ 22.7% lên 71.3%). Tuy nhiên thay vì loại bỏ các biến đó, ta sẽ tích hợp chúng vào các biến thành phần chính thông qua sử dụng phương pháp PCA liệu có cải thiện chất lượng dự báo của model hay không? Chúng ta sẽ cùng nghiên cứu ở bài viết này.
Để khách quan trong so sánh hiệu quả dự báo, chúng ta vẫn sử dụng các tập dữ liệu training và testing sau chuẩn hóa ở các bài phân tích trước mà không chia lại dữ liệu. Sử dụng package psych để phân tích các thành phần chính.
library(psych)
library(rio)
library(dplyr)
#Lay du lieu da chuan hoa duoc luu tu bai phan tich truoc
#Link http://rpubs.com/phamdinhkhanh/375440
hmeq_chuanhoa <- import("D:/Rcode/RPub/BankingData/hmeq_chuanhoa.rds")
training_chuanhoa <- import("D:/Rcode/RPub/BankingData/training_chuanhoa.rds")
#Ve bieu do xac dinh so thanh phan chinh cua du lieu
fa.parallel(select(hmeq_chuanhoa,-BAD,-STT),
n.obs = 500,
fa = "both",
show.legend = TRUE,
main = "Scree plot with parallel analysis")
## Parallel analysis suggests that the number of factors = 5 and the number of components = 4
Kết quả phân tích cho thấy chúng ta nên lựa chọn 4 thành phần chính trở xuống.
Xây dựng model với 4 thành phần chính:
library(dplyr)
library(psych)
pc <- principal(select(hmeq_chuanhoa,-BAD,-STT),
nfactors = 4,
rotate = "varimax")
pc
## Principal Components Analysis
## Call: principal(r = select(hmeq_chuanhoa, -BAD, -STT), nfactors = 4,
## rotate = "varimax")
## Standardized loadings (pattern matrix) based upon correlation matrix
## RC1 RC3 RC2 RC4 h2 u2 com
## LOAN 0.29 0.11 -0.21 0.43 0.32 0.68 2.4
## MORTDUE 0.87 0.07 -0.03 0.18 0.79 0.21 1.1
## VALUE 0.86 0.08 -0.13 0.10 0.78 0.22 1.1
## YOJ -0.11 0.66 -0.03 -0.06 0.46 0.54 1.1
## DEROG -0.02 -0.14 0.61 0.20 0.44 0.56 1.3
## DELINQ 0.02 0.28 0.67 -0.03 0.52 0.48 1.3
## CLAGE 0.15 0.76 -0.05 0.03 0.61 0.39 1.1
## NINQ 0.00 -0.16 0.35 0.59 0.49 0.51 1.8
## CLNO 0.40 0.52 0.22 0.32 0.58 0.42 3.0
## DEBTINC 0.11 0.09 -0.62 0.24 0.46 0.54 1.4
## REASON.LV 0.00 0.06 -0.08 0.69 0.49 0.51 1.0
## JOB.LV -0.59 0.07 -0.05 0.39 0.51 0.49 1.8
##
## RC1 RC3 RC2 RC4
## SS loadings 2.14 1.46 1.44 1.40
## Proportion Var 0.18 0.12 0.12 0.12
## Cumulative Var 0.18 0.30 0.42 0.54
## Proportion Explained 0.33 0.23 0.22 0.22
## Cumulative Proportion 0.33 0.56 0.78 1.00
##
## Mean item complexity = 1.5
## Test of the hypothesis that 4 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0.11
## with the empirical chi square 8883.17 with prob < 0
##
## Fit based upon off diagonal values = 0.58
Sử dụng ngưỡng cut là 0.3 để đánh giá hệ số tương quan giữa các biến dự báo với các biến thành phần chính ta có:
print.psych(pc,cut = 0.3, sort = TRUE)
## Principal Components Analysis
## Call: principal(r = select(hmeq_chuanhoa, -BAD, -STT), nfactors = 4,
## rotate = "varimax")
## Standardized loadings (pattern matrix) based upon correlation matrix
## item RC1 RC3 RC2 RC4 h2 u2 com
## MORTDUE 2 0.87 0.79 0.21 1.1
## VALUE 3 0.86 0.78 0.22 1.1
## JOB.LV 12 -0.59 0.39 0.51 0.49 1.8
## CLAGE 7 0.76 0.61 0.39 1.1
## YOJ 4 0.66 0.46 0.54 1.1
## CLNO 9 0.40 0.52 0.32 0.58 0.42 3.0
## DELINQ 6 0.67 0.52 0.48 1.3
## DEBTINC 10 -0.62 0.46 0.54 1.4
## DEROG 5 0.61 0.44 0.56 1.3
## REASON.LV 11 0.69 0.49 0.51 1.0
## NINQ 8 0.35 0.59 0.49 0.51 1.8
## LOAN 1 0.43 0.32 0.68 2.4
##
## RC1 RC3 RC2 RC4
## SS loadings 2.14 1.46 1.44 1.40
## Proportion Var 0.18 0.12 0.12 0.12
## Cumulative Var 0.18 0.30 0.42 0.54
## Proportion Explained 0.33 0.23 0.22 0.22
## Cumulative Proportion 0.33 0.56 0.78 1.00
##
## Mean item complexity = 1.5
## Test of the hypothesis that 4 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0.11
## with the empirical chi square 8883.17 with prob < 0
##
## Fit based upon off diagonal values = 0.58
Nhận xét:
RC1 giải thích được 33% sự phân loại của dữ liệu.
RC3 giải thích được 23% sự phân loại dữ liệu; RC2, RC4 mỗi biến giải thích được 22% sự phân loại dữ liệu.
SS loadings là giá trị riêng của các thành phần chính được biểu diễn trên biểu đồ Scree. Đây là giá trị đánh giá việc lựa chọn số thành phần chính phù hợp. Ta sẽ chỉ chọn số thành phần chính ứng với giá trị SS loading >= 1.
Các hệ số ở bảng correlation matrix cho thấy mối quan hệ tương quan giữa các biến dự báo đối với thành phần chính.
Visualize các kết quả phân tích:
plot(pc)
Đồ thị trên biểu diễn 12 biến gốc khi được xoay theo các chiều của thành phần chính trên không gian 2 chiều.
Lưu giá trị các thành phần chính vào dataframe hmeq_pc
hmeq_pc <- as.data.frame(pc$scores)
#Them bien STT
hmeq_pc$STT <- hmeq_chuanhoa$STT
#Them bien BAD
hmeq_pc$BAD <- hmeq_chuanhoa$BAD
Xây dựng model knn với voting size = 10 trên dữ liệu thành phần chính hmeq_pc. Để khách quan khi phân chia tập train/test, ta sẽ giữ nguyên các quát theo đúng thứ tự trên tập train và test ở các phân tích trước.
training_pc <- hmeq_pc %>% filter(STT %in% training_chuanhoa$STT)
testing_pc <- setdiff(hmeq_pc,training_pc)
library(class)
library(gmodels)
set.seed(1)
#Lay factor nhan loai no cua tap traing
cl_training_pc <- as.factor(training_pc$BAD)
knn <- knn(train = select(training_pc, -BAD,-STT,-RC3,-RC4),test = select(testing_pc, -BAD,-STT,-RC3,-RC4), cl = cl_training_pc,k=10)
# giá trị dự báo trên tập test:
head(knn,10)
## [1] 0 1 1 0 0 1 0 1 0 1
## Levels: 0 1
#so sanh ket qua du bao tren tap test
CrossTable(knn,testing_pc$BAD)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 1193
##
##
## | testing_pc$BAD
## knn | 0 | 1 | Row Total |
## -------------|-----------|-----------|-----------|
## 0 | 917 | 129 | 1046 |
## | 7.581 | 30.420 | |
## | 0.877 | 0.123 | 0.877 |
## | 0.960 | 0.542 | |
## | 0.769 | 0.108 | |
## -------------|-----------|-----------|-----------|
## 1 | 38 | 109 | 147 |
## | 53.945 | 216.460 | |
## | 0.259 | 0.741 | 0.123 |
## | 0.040 | 0.458 | |
## | 0.032 | 0.091 | |
## -------------|-----------|-----------|-----------|
## Column Total | 955 | 238 | 1193 |
## | 0.801 | 0.199 | |
## -------------|-----------|-----------|-----------|
##
##
Kết quả cho thấy hồi qui theo thành phần chính sẽ có độ chính xác cao hơn so với hồi qui theo biến gốc gấp 2 lần trong việc dự báo tỷ lệ hồ sơ nợ xấu (từ 22.7% lên 45.8%). Độ chính xác này cũng gần bằng với việc lựa chọn hệ số tương quan > 0.15 ở bài phân tích trước (57.6%) tuy nhiên thấp hơn so với ngưỡng lựa chọn hệ số tương quan là >0.3 (71.3%).