Đánh giá độ phù hợp của mô hình

Mô hình hóa với tidymodels trong R

David Svancer

Data Scientist

Phân loại nhị phân

Biến đầu ra hai mức

  • Lớp dương (Positive class)
    • Sự kiện cần dự đoán
    • "yes" trong biến purchased
  • Lớp âm (Negative class)

    • "no"
  • Trong tidymodels, biến đầu ra phải là factor

    • Mức đầu là lớp dương
    • Kiểm tra thứ tự bằng levels()
leads_df
# A tibble: 1,328 x 7
  purchased total_visits  ...   us_location
   <fct>        <dbl>     ...     <fct>
 1 yes            7       ...     west
 2 no             8       ...     west
 3 no             5       ...     southeast
# ... with 1,325 more rows
levels(leads_df[['purchased']])
[1] "yes" "no"
Mô hình hóa với tidymodels trong R

Ma trận nhầm lẫn

 

Ma trận đếm mọi kết hợp của giá trị thực tế và dự đoán

Dự đoán đúng

  • Dương tính thật (TP)
  • Âm tính thật (TN)

Lỗi phân loại

  • Dương tính giả (FP)
  • Âm tính giả (FN)

 

Ma trận nhầm lẫn

Mô hình hóa với tidymodels trong R

Chỉ số phân loại với yardstick

Tạo ma trận nhầm lẫn và chỉ số độ phù hợp bằng yardstick

  • Cần một tibble kết quả mô hình gồm:
    • Giá trị thực
      • purchased
    • Nhãn dự đoán
      • .pred_class
    • Xác suất ước tính cho từng nhãn
      • .pred_yes
      • .pred_no
leads_results
# A tibble: 332 x 4
   purchased .pred_class .pred_yes .pred_no
   <fct>     <fct>           <dbl>    <dbl>
 1 no        no             0.134     0.866
 2 yes       yes            0.729     0.271
 3 no        no             0.133     0.867
 4 no        no             0.0916    0.908
 5 yes       yes            0.598     0.402
 6 no        no             0.128     0.872
 7 yes       no             0.112     0.888
 8 no        no             0.169     0.831
 9 no        no             0.158     0.842
10 yes       yes            0.520     0.480
# ... with 322 more rows
Mô hình hóa với tidymodels trong R

Ma trận nhầm lẫn với yardstick

Hàm conf_mat()

  • Tibble kết quả mô hình
  • truth - cột nhãn thực
  • estimate - cột nhãn dự đoán

Hồi quy logistic trên leads_df

  • Phân loại đúng 252/332 khách hàng (76%)
  • 46 âm tính giả
  • 34 dương tính giả
conf_mat(leads_results,

truth = purchased,
estimate = .pred_class)
          Truth
Prediction yes  no
       yes  74  34
       no   46 178
Mô hình hóa với tidymodels trong R

Độ chính xác phân loại

Hàm accuracy()

  • Tham số giống conf_mat()
  • Tính độ chính xác phân loại

 

$$\frac{TP + TN}{TP + TN + FP + FN}$$

 

  • Hàm yardstick luôn trả về tibble
    • .metric - loại chỉ số
    • .estimate - giá trị tính được
accuracy(leads_results, 
         truth = purchased, 
         estimate = .pred_class)
# A tibble: 1 x 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 accuracy binary         0.759
Mô hình hóa với tidymodels trong R

Độ nhạy

Nhiều trường hợp accuracy không phải chỉ số tốt nhất

  • Dữ liệu leads_df
    • Gán tất cả là 'no' cho 64% accuracy

 

Độ nhạy (Sensitivity)

Tỷ lệ các trường hợp dương tính được phân loại đúng

  • Với khách hàng đã mua, mô hình dự đoán đúng bao nhiêu phần trăm?
    • Ít âm tính giả hơn → độ nhạy cao hơn

Cách tính độ nhạy

Mô hình hóa với tidymodels trong R

Tính độ nhạy

Hàm sens()

  • Tham số giống conf_mat()accuracy()
  • Trả về độ nhạy trong cột .estimate
sens(leads_results, 
     truth = purchased, 
     estimate = .pred_class)
# A tibble: 1 x 3
  .metric .estimator .estimate
  <chr>   <chr>          <dbl>
1 sens    binary         0.617
Mô hình hóa với tidymodels trong R

Độ đặc hiệu

Độ đặc hiệu (Specificity) là tỷ lệ các trường hợp âm tính được phân loại đúng

  • Với khách hàng không mua, mô hình dự đoán đúng bao nhiêu phần trăm?
    • Ít dương tính giả hơn → đặc hiệu cao hơn

 

1 - Độ đặc hiệu

  • Còn gọi là tỷ lệ dương tính giả (FPR)
  • Tỷ lệ dương tính giả trong số âm tính thật

Cách tính độ đặc hiệu

Mô hình hóa với tidymodels trong R

Tính độ đặc hiệu

Hàm spec()

  • Tham số giống sens()
  • Trả về độ đặc hiệu trong cột .estimate
spec(leads_results, 
     truth = purchased, 
     estimate = .pred_class)
# A tibble: 1 x 3
  .metric .estimator .estimate
  <chr>   <chr>          <dbl>
1 spec    binary         0.840
Mô hình hóa với tidymodels trong R

Tạo bộ chỉ số

Bộ chỉ số do người dùng định nghĩa

  • Hàm metric_set()
    • Tạo hàm chỉ số tùy chọn với các chỉ số yardstick đã chọn
    • Truyền tên hàm chỉ số yardstick vào metric_set()
    • Dùng hàm tùy chọn để tính chỉ số
custom_metrics <-
  metric_set(accuracy, sens, spec)
custom_metrics(leads_results, 
               truth = purchased, 
               estimate = .pred_class)
# A tibble: 3 x 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 accuracy binary         0.759
2 sens     binary         0.617
3 spec     binary         0.840
Mô hình hóa với tidymodels trong R

Nhiều chỉ số

Chỉ số phân loại nhị phân

  • Nhiều chỉ số cho phân loại nhị phân

    • accuracy(), kap(), sens(), spec(), ppv(), npv(), mcc(), j_index(), bal_accuracy(), detection_prevalence(), precision(), recall(), f_meas()
  • Truyền kết quả conf_mat() vào summary() để tính tất cả

 

https://yardstick.tidymodels.org/reference

conf_mat(leads_results, truth = purchased, 
         estimate = .pred_class) %>% 
  summary()
# A tibble: 13 x 3
   .metric              .estimator .estimate
   <chr>                <chr>          <dbl>
 1 accuracy             binary         0.759
 2 kap                  binary         0.466
 3 sens                 binary         0.617
 4 spec                 binary         0.840
 5 ppv                  binary         0.685
 6 npv                  binary         0.795
 7 mcc                  binary         0.468
 8 j_index              binary         0.456
 9 bal_accuracy         binary         0.728
10 detection_prevalence binary         0.325
11 precision            binary         0.685
12 recall               binary         0.617
13 f_meas               binary         0.649
Mô hình hóa với tidymodels trong R

Ayo berlatih!

Mô hình hóa với tidymodels trong R

Preparing Video For Download...