Nguyễn Ngọc Bình
22 Apr 2019
Feature selection: Là các kỹ thuật lựa chọn tổ hợp biến tốt nhất cho mô hình
Mục đích:
Tùy thuộc vào loại mô hình và loại dữ liệu sẽ có những phương pháp feature selection phù hợp
Ví dụ:
Nếu có 1000 biến numeric, có thể dùng fisher's linear discriminant function, hàm này chạy nhanh kể cả đối với dữ liệu lớn. Vì hàm này chỉ cần đầu vào là mean, variance, tỷ lệ missing
Nếu có ít hơn 500 biến numeric và 50 biến phân loại, bạn có thể dùng information value để chọn 250 biến phù hợp
Nếu có 300 biến có thể sử dụng stepwise regression để chọn top 150 biến (dùng forward selection), nếu còn 60 biến có thể sử dụng stepwise (kết hợp forward và backward)
Sau đó có thể sử dụng hệ số VIF, Eigen value để khắc phục đa cộng tuyến
Cuối cùng nếu mô hình còn khoảng 20 biến, có thể tiếp tục dùng stepwise kết hợp với KS, GINI … để lựa chọn tổ hợp biến tốt nhất cho mô hình
Theo John et al. 1994, có 2 phân loại chính như sau:
Phương pháp Wrapper sử dụng thủ tục thêm hoặc bớt các biến predictors để tìm kết hợp tối ưu sao cho mô hình cuối cùng có khả năng dự báo tốt nhất (maximizes model performance) hay (minimize error)
Phương pháp Filter đánh giá các biến predictors bên ngoài mô hình dự báo (predictive model) và qua các bước lọc, chỉ những biến thỏa mãn các tiêu chí thì sẽ được chọn
Ưu, nhược điểm:
Phương pháp Filter sử dụng không tốn nhiều tài nguyên máy tính như Wrapper, nhưng tiêu chí lựa chọn không liên quan trực tiếp đến hiệu quả của mô hình (model performance). Vì các phương pháp Filter đánh giá các biến predictor một cách riêng rẽ, nên kết quả là những predictors thừa có thể được lựa chọn và những tương tác quan trọng giữa các biến không được tính đến.
Phương pháp Wrapper nhược điểm là có rất nhiều mô hình phải tính toán (có thể yêu cầu parameter tuning), vì vậy làm tốn nhiều tài nguyên máy tính, ngoài ra còn làm tăng nguy cơ over-fitting do phương pháp này chủ yếu tối ưu model performance.
Thêm biến giả (dummy variables)
Do lớp mô hình hồi quy không sử dụng trực tiếp được biến định danh. Nên phải tạo biến giả (là biến có 2 giá trị 0 và 1) như là biến predictor trong mô hình.
Cách tạo biến giả: Ví dụ: Biến tình trạng hôn nhân (marital) có 3 giá trị (chưa kết hôn, đã kết hôn, góa). Biến giả được tạo như sau
Như vậy, có 3 biến giả được tạo ra từ biến marital. Nhưng nếu sử dụng 3 biến này trong mô hình thì sẽ xảy ra hiện tượng đa cộng tuyến hoàn hảo vì khi x1 = 0 và x2 =0 tương đương với x3 = 1. Nên với biến có n phạm trù thì sẽ tạo ra n-1 biến giả.
NZV là trường hợp một biến có 1 giá trị duy nhất (zero variance predictor), hay 1 biến có 1 giá trị ở hầu hết các quan sát (near zero variance predictor). Tức là biến này không có thông tin đối với mô hình
? Đối với biến phụ thuộc imbalance, biến nzv có thể là biến giải thích tốt cho biến phu thuộc -> cần kiểm tra
Chuyển đổi WoE
Ưu điểm 2:
\[ WoE = ln(\frac{DistGood_i}{DistBad_i})=ln(\frac{\frac{good_i} {GOOD}}{\frac{bad_i} {BAD}}) \]
\[ IV = \sum_{i=1}^{k} (DistGood_i - DistBad_i) * WoE_i \]
Quy tắc (rules of thumb) lựa chọn ngưỡng IV (Bart Baesens, Daniel Roesch, Harald Scheule - Credit risk analytics - measurement techniques, applications, and examples in SAS (2016, Wiley))
Cộng tuyến (Collinearity) hoặc đa cộng tuyến (multicollinearity) là khi có tương quan cao giữa 2 hay nhiều biến predictors trong mô hình hồi quy.
Một số phương pháp có thể sử dụng để giải quyết vấn đề này:
- Tính matrix hệ số tương quan
- Xác định 2 biến có tương quan cao (A và B).
- Tính trung bình giá trị hệ số tương quan của biến A và các biến còn lại. Làm tương tự với B
- Nếu A có trung bình lớn hơn thì loại A, ngược lại loại B
- Lặp lại từ bước 2-4 đến khi không còn hệ số tương quan nào ngoài ngưỡng.
Thủ tục thực hiện như sau (VD: forward linear regressiion)
Thuật toán mô tả như sau:
Các biến predictors được đánh giá từng biến 1 trong mô hình linear regression.
Kiểm định giả thiết thống kê được thực hiện xem xem biến predictors thêm mới có ý nghĩa thống kê hay không (với ngưỡng p-value xác định trước).
Nếu ít nhất 1 predictor có p-value không thỏa mãn, mô hình được thực hiện lại với biến thêm mới khác.
Thuật toán dừng lại khi tất cả p-values đều thỏa mãn.
Đánh giá
Vấn đề thứ 2, 3 có thể được giảm nhẹ bằng việc sử dụng thước đo khả năng dự đoán mô hình như RMSE, classification accuracy, or the error under the ROC curve
Giả sử rằng RMSE là hàm mục tiêu thay cho ý nghĩa thống kê. Thuật toán có thể giống hệt, nhưng thay vì sử dụng p-value, thuật toán sẽ thêm biến để đạt được RMSE nhỏ nhất. Thuật toán sẽ tiếp tục cho đến khi đạt đến số predictors cần thiết hoặc full model. Theo thuật toán này, RMSE được ghi lại qua các bước, tập hợp mô hình có RMSE nhỏ nhất sẽ được chọn. Thuật toán này có thể gặp 1 vấn đề là thu được các ước lượng tốt với tỷ lệ sai số thấp nhưng có thể gặp vấn đề overfitting
\[ AIC = nlog(\sum^n_{i=1}(y_i-\hat{y_i})^2) + 2P \]
Trong đó: P số lượng biến trong mô hình
AIC không có bất kỳ ngưỡng tham chiếu cho trước nào, chỉ đơn giản là mô hình có AIC nhỏ hơn thì sẽ tốt hơn (khi các yếu tố khác như nhau). Mô hình với AIC nhỏ nhất có thể tránh khỏi hiện tượng over-fitting
\[ G = \frac{P R_y} {\sqrt{P + P(P-1) \overline{R_x}}} \]
Trong đó: \( R_y \) đo lường mức độ tương quan giữa các biến độc lập (candidate predictor) và biến phụ thuộc (outcome). \( \overline{R_x} \) là giá trị trung bình của hệ số tương quan giữa biến x và P biến khác trong tập con đã chọn. Mỗi bước trong thuật toán sẽ xếp hạng các biến để giữ lại biến hiệu quả và loại biến thừa.
Forward: Thuật toán đã được mô tả ở hình trên.
Backward: Thuật toán bắt đầu với P predictors, thuật toán lặp sẽ loại bỏ những biến không có ý nghĩa trong mô hình. Thuật toán này tránh được việc refitting nhiều mô hình tại mỗi bước. Khi full model được tạo, variable importance được tính toán để xếp hạng các predictors.
Stepwise là một phiên bản điều chỉnh của Forward, Backward, trong đó, cứ sau mỗi bước predictor được thêm vào mô hình, các kiểm định lại được thực hiện lại để loại bỏ khỏi mô hình. Trong nhiều trường hợp, p-value khi thêm 1 biến bất kỳ vào, khác với p-value khi loại bỏ biến đó (Derksen and Keselman 1992). Mặc dù thuật toán này bớt tham (less greedy) nhưng nó vẫn gặp vấn đề trong kiểm định các giả thiết.
Thuật toán Backward:
Simulated Annealing (tham khảo)
Genetic Algorithms (tham khảo)
Dùng dữ liệu germancredit
data("germancredit")
raw_data <- germancredit
set.seed(1611)
train_test_split <- initial_split(raw_data, strata = "creditability")
credit_train <- training(train_test_split)
credit_test <- testing(train_test_split)
rec_obj <- recipe(creditability ~., data = credit_train)
prep_obj <- rec_obj %>%
# Chuyển từ character -> factor
step_string2factor(all_nominal()) %>%
# Xử lý missing
step_medianimpute(all_numeric()) %>%
# Xử lý trường hợp near zero variance
step_nzv(all_predictors()) %>%
prep()
train_data <- bake(prep_obj, new_data = credit_train)
setdiff(names(credit_train), names(train_data))
[1] "other.debtors.or.guarantors" "foreign.worker"