Tính năng của bạn có quan trọng không? Không Có Nghĩa Là Họ Tốt - KDnuggets

Tính năng của bạn có quan trọng không? Không Có Nghĩa Là Họ Tốt – KDnuggets

Nút nguồn: 2893531

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
[Hình ảnh của tác giả]

 

Khái niệm “tầm quan trọng của tính năng” được sử dụng rộng rãi trong học máy như là loại khả năng giải thích mô hình cơ bản nhất. Ví dụ: nó được sử dụng trong Loại bỏ tính năng đệ quy (RFE), để loại bỏ lặp đi lặp lại tính năng ít quan trọng nhất của mô hình.

Tuy nhiên, có một quan niệm sai lầm về nó.

Việc một tính năng quan trọng không có nghĩa là nó có lợi cho mô hình!

Thật vậy, khi chúng ta nói rằng một đặc điểm nào đó là quan trọng, điều này đơn giản có nghĩa là đặc điểm đó mang lại sự đóng góp cao cho các dự đoán mà mô hình đưa ra. Nhưng chúng ta nên xem xét điều đó đóng góp như vậy có thể sai.

Lấy một ví dụ đơn giản: một nhà khoa học dữ liệu vô tình quên ID khách hàng giữa các tính năng của mô hình. Mô hình sử dụng ID khách hàng làm tính năng có tính dự đoán cao. Do đó, tính năng này sẽ có tầm quan trọng cao ngay cả khi nó thực sự làm mô hình xấu đi vì nó không thể hoạt động tốt trên dữ liệu không nhìn thấy được.

Để làm rõ hơn, chúng ta cần phân biệt hai khái niệm:

  • Đóng góp dự đoán: phần nào của dự đoán là do tính năng này; điều này tương đương với tầm quan trọng của tính năng.
  • Đóng góp lỗi: phần nào của lỗi dự đoán là do sự hiện diện của đặc điểm trong mô hình.

Trong bài viết này, chúng ta sẽ xem cách tính toán các đại lượng này cũng như cách sử dụng chúng để có được những hiểu biết sâu sắc có giá trị về mô hình dự đoán (và cách cải thiện nó).

Lưu ý: bài viết này tập trung vào trường hợp hồi quy. Nếu bạn quan tâm hơn đến trường hợp phân loại, bạn có thể đọc “Những tính năng nào có hại cho mô hình phân loại của bạn?”

Giả sử chúng ta xây dựng một mô hình để dự đoán thu nhập của mọi người dựa trên công việc, độ tuổi và quốc tịch của họ. Bây giờ chúng tôi sử dụng mô hình để đưa ra dự đoán về ba người.

Do đó, chúng ta có được sự thật cơ bản, dự đoán của mô hình và lỗi dẫn đến:

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Sự thật cơ bản, dự đoán mô hình và sai số tuyệt đối (tính bằng nghìn đô la). [Hình ảnh của tác giả]

 

Khi có một mô hình dự đoán, chúng ta luôn có thể phân tách các dự đoán của mô hình thành những đóng góp do các đặc điểm đơn lẻ mang lại. Điều này có thể được thực hiện thông qua các giá trị SHAP (nếu bạn không biết về cách hoạt động của các giá trị SHAP, bạn có thể đọc bài viết của tôi: Giá trị SHAP được giải thích chính xác như thế nào bạn mong muốn ai đó giải thích cho bạn).

Vì vậy, giả sử đây là các giá trị SHAP liên quan đến mô hình của chúng tôi dành cho ba cá nhân.

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Giá trị SHAP cho dự đoán của mô hình của chúng tôi (tính bằng nghìn đô la). [Hình ảnh của tác giả]

 

Thuộc tính chính của các giá trị SHAP là chúng có tính cộng. Điều này có nghĩa là - bằng cách lấy tổng của mỗi hàng - chúng ta sẽ có được dự đoán của mô hình cho cá nhân đó. Ví dụ: nếu chúng ta lấy hàng thứ hai: 72k $ +3k $ -22k $ = 53k $, đó chính xác là dự đoán của mô hình cho cá nhân thứ hai.

Giờ đây, giá trị SHAP là một chỉ báo tốt cho thấy tầm quan trọng của một tính năng đối với dự đoán của chúng tôi. Thật vậy, giá trị SHAP (tuyệt đối) càng cao thì tính năng dự đoán về cá nhân cụ thể đó càng có ảnh hưởng. Lưu ý rằng tôi đang nói về giá trị SHAP tuyệt đối vì dấu ở đây không quan trọng: một tính năng cũng quan trọng như nhau nếu nó đẩy dự đoán lên hoặc xuống.

Vì vậy, Đóng góp dự đoán của một đối tượng địa lý bằng giá trị trung bình của các giá trị SHAP tuyệt đối của đối tượng địa lý đó. Nếu bạn có các giá trị SHAP được lưu trữ trong khung dữ liệu Pandas, thì việc này đơn giản như:

prediction_contribution = shap_values.abs().mean()

Trong ví dụ của chúng tôi, đây là kết quả:

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Đóng góp dự đoán. [Hình ảnh của tác giả]

 

Như bạn có thể thấy, công việc rõ ràng là tính năng quan trọng nhất vì tính trung bình, nó chiếm 71.67 nghìn đô la trong dự đoán cuối cùng. Quốc tịch và tuổi tác lần lượt là đặc điểm phù hợp thứ hai và thứ ba.

Tuy nhiên, thực tế là một tính năng nhất định chiếm một phần có liên quan trong dự đoán cuối cùng không nói lên điều gì về hiệu suất của tính năng đó. Để xem xét khía cạnh này, chúng ta sẽ cần tính toán “Đóng góp lỗi”.

Giả sử chúng ta muốn trả lời câu hỏi sau: “Mô hình sẽ đưa ra dự đoán gì nếu nó không có đặc điểm việc làm?” Giá trị SHAP cho phép chúng tôi trả lời câu hỏi này. Trên thực tế, vì chúng là chất cộng nên chỉ cần trừ các giá trị SHAP liên quan đến đối tượng địa lý là đủ việc làm từ những dự đoán của mô hình.

Tất nhiên, chúng ta có thể lặp lại quy trình này cho từng tính năng. Trong gấu trúc:

y_pred_wo_feature = shap_values.apply(lambda feature: y_pred - feature)

Đây là kết quả:

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Dự đoán mà chúng tôi sẽ nhận được nếu loại bỏ tính năng tương ứng. [Hình ảnh của tác giả]

 

Điều này có nghĩa là nếu chúng ta không có tính năng này việc làm, thì mô hình sẽ dự đoán 20 nghìn đô la cho cá nhân đầu tiên, -19 nghìn đô la cho cá nhân thứ hai và -8 nghìn đô la cho cá nhân thứ ba. Thay vào đó, nếu chúng ta không có tính năng này tuổi, mô hình sẽ dự đoán 73 nghìn đô la cho cá nhân đầu tiên, 50 nghìn đô la cho cá nhân thứ hai, v.v.

Như bạn có thể thấy, dự đoán cho mỗi cá nhân sẽ khác nhau rất nhiều nếu chúng tôi loại bỏ các tính năng khác nhau. Kết quả là, các lỗi dự đoán cũng sẽ rất khác nhau. Chúng ta có thể dễ dàng tính toán chúng:

abs_error_wo_feature = y_pred_wo_feature.apply(lambda feature: (y_true - feature).abs())

Kết quả là như sau:

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Lỗi tuyệt đối mà chúng tôi sẽ gặp phải nếu loại bỏ tính năng tương ứng. [Hình ảnh của tác giả]

 

Đây là những lỗi mà chúng tôi sẽ gặp phải nếu loại bỏ tính năng tương ứng. Theo trực quan, nếu lỗi nhỏ thì việc loại bỏ tính năng này không phải là vấn đề — hoặc thậm chí còn có lợi — cho mô hình. Nếu lỗi cao thì việc loại bỏ tính năng này không phải là ý kiến ​​hay.

Nhưng chúng ta có thể làm nhiều hơn thế này. Thật vậy, chúng ta có thể tính toán sự khác biệt giữa các lỗi của mô hình đầy đủ và các lỗi chúng ta thu được nếu không có đặc điểm này:

error_diff = abs_error_wo_feature.apply(lambda feature: abs_error - feature)

Đó là:

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Sự khác biệt giữa các lỗi của mô hình và các lỗi chúng ta sẽ gặp phải nếu không có tính năng này. [Hình ảnh của tác giả]

 

Nếu con số này là:

  • âm, thì sự hiện diện của đặc điểm sẽ dẫn đến giảm lỗi dự đoán, vì vậy đặc điểm này hoạt động tốt cho quan sát đó!
  • tích cực, thì sự hiện diện của đặc điểm này sẽ dẫn đến sự gia tăng sai số dự đoán, do đó đặc điểm này có hại cho quan sát đó.

Chúng tôi có thể tính toán "Đóng góp lỗi" làm giá trị trung bình của các giá trị này cho từng tính năng. Trong gấu trúc:

error_contribution = error_diff.mean()

Đây là kết quả:

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Đóng góp lỗi. [Hình ảnh của tác giả]

 

Nếu giá trị này là dương thì điều đó có nghĩa là, về trung bình, sự hiện diện của đối tượng địa lý trong mô hình sẽ dẫn đến sai số cao hơn. Vì vậy, nếu không có tính năng đó, dự đoán nhìn chung sẽ tốt hơn. Nói cách khác, tính năng này gây hại nhiều hơn là có lợi!

Ngược lại, giá trị này càng âm thì tính năng này càng có lợi cho việc dự đoán vì sự hiện diện của nó dẫn đến sai số nhỏ hơn.

Hãy thử sử dụng các khái niệm này trên tập dữ liệu thực.

Sau đây, tôi sẽ sử dụng tập dữ liệu được lấy từ Pycaret (thư viện Python bên dưới Giấy phép MIT). Tập dữ liệu này có tên là “Vàng” và nó chứa chuỗi dữ liệu tài chính theo thời gian.

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Mẫu tập dữ liệu. Tất cả các tính năng đều được biểu thị bằng phần trăm, vì vậy -4.07 có nghĩa là lợi nhuận -4.07%. [Hình ảnh của tác giả]

 

Các đặc điểm bao gồm lợi nhuận của tài sản tài chính lần lượt là 22, 14, 7 và 1 ngày trước thời điểm quan sát (“T-22”, “T-14”, “T-7”, “T-1”). Dưới đây là danh sách đầy đủ tất cả các tài sản tài chính được sử dụng làm tính năng dự đoán:

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Danh sách các tài sản có sẵn. Mỗi nội dung được quan sát tại thời điểm -22, -14, -7 và -1. [Hình ảnh của tác giả]

 

Tổng cộng, chúng tôi có 120 tính năng.

Mục tiêu là dự đoán giá Vàng (trở lại) trước 22 ngày (“Gold_T+22”). Chúng ta hãy nhìn vào biến mục tiêu.

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Biểu đồ của biến. [Hình ảnh của tác giả]

 

Sau khi tải tập dữ liệu, đây là các bước tôi đã thực hiện:

  1. Chia ngẫu nhiên toàn bộ tập dữ liệu: 33% số hàng trong tập dữ liệu huấn luyện, 33% khác trong tập dữ liệu xác thực và 33% còn lại trong tập dữ liệu thử nghiệm.
  2. Huấn luyện một bộ hồi quy LightGBM trên tập dữ liệu huấn luyện.
  3. Đưa ra dự đoán về tập dữ liệu huấn luyện, xác thực và kiểm tra bằng cách sử dụng mô hình đã huấn luyện ở bước trước.
  4. Tính toán các giá trị SHAP của tập dữ liệu huấn luyện, xác thực và kiểm tra bằng cách sử dụng thư viện Python “shap”.
  5. Tính toán Đóng góp dự đoán và Đóng góp lỗi của từng tính năng trên mỗi tập dữ liệu (đào tạo, xác thực và kiểm tra), sử dụng mã mà chúng ta đã thấy trong đoạn trước.

Hãy so sánh Đóng góp lỗi và Đóng góp dự đoán trong tập dữ liệu huấn luyện. Chúng ta sẽ sử dụng biểu đồ phân tán để các dấu chấm xác định 120 đặc điểm của mô hình.

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Đóng góp dự đoán so với Đóng góp lỗi (trên tập dữ liệu Đào tạo). [Hình ảnh của tác giả]

 

Có mối tương quan rất tiêu cực giữa Đóng góp Dự đoán và Đóng góp Lỗi trong tập huấn luyện.

Và điều này có ý nghĩa: do mô hình học trên tập dữ liệu huấn luyện nên nó có xu hướng gán tầm quan trọng cao (tức là Đóng góp dự đoán cao) cho các tính năng dẫn đến giảm đáng kể lỗi dự đoán (tức là Đóng góp lỗi tiêu cực cao).

Nhưng điều này không bổ sung nhiều vào kiến ​​thức của chúng ta, phải không?

Thật vậy, điều thực sự quan trọng đối với chúng tôi là tập dữ liệu xác thực. Trên thực tế, tập dữ liệu xác thực là proxy tốt nhất mà chúng tôi có thể có về cách các tính năng của chúng tôi sẽ hoạt động trên dữ liệu mới. Vì vậy, hãy thực hiện so sánh tương tự trên bộ xác thực.

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Đóng góp dự đoán so với Đóng góp lỗi (trên tập dữ liệu Xác thực). [Hình ảnh của tác giả]

 

Từ cốt truyện này, chúng ta có thể rút ra một số thông tin thú vị hơn nhiều.

Các tính năng ở phần dưới bên phải của biểu đồ là những tính năng mà mô hình của chúng tôi gán chính xác tầm quan trọng cao vì chúng thực sự giúp giảm lỗi dự đoán.

Ngoài ra, hãy lưu ý rằng “Gold_T-22” (sự trở lại của vàng 22 ngày trước giai đoạn quan sát) đang hoạt động rất tốt so với tầm quan trọng mà mô hình gán cho nó. Điều này có nghĩa rằng tính năng này có thể không phù hợp. Và thông tin này đặc biệt thú vị vì vàng là tài sản mà chúng tôi đang cố gắng dự đoán (“Gold_T+22”).

Mặt khác, các tính năng có Đóng góp lỗi trên 0 đang khiến dự đoán của chúng tôi trở nên tồi tệ hơn. Ví dụ: "US Bond ETF_T-1" trung bình thay đổi dự đoán của mô hình thêm 0.092% (Đóng góp dự đoán), nhưng nó khiến mô hình đưa ra dự đoán trung bình tệ hơn 0.013% (Đóng góp lỗi) so với khi không có tính năng đó .

Chúng ta có thể cho rằng tất cả các tính năng có Đóng góp Lỗi cao (so với Đóng góp Dự đoán của chúng) có thể đã bị trang bị quá mức hoặc nói chung, chúng có hành vi khác nhau trong tập huấn luyện và trong tập xác thực.

Hãy xem tính năng nào có Đóng góp Lỗi lớn nhất.

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Các tính năng được sắp xếp theo mức độ đóng góp lỗi giảm dần. [Hình ảnh của tác giả]

 

Và bây giờ là các tính năng có Đóng góp Lỗi thấp nhất:

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Các tính năng được sắp xếp theo mức độ đóng góp lỗi tăng dần. [Hình ảnh của tác giả]

 

Điều thú vị là chúng ta có thể quan sát thấy rằng tất cả các tính năng có Đóng góp lỗi cao hơn đều liên quan đến T-1 (1 ngày trước thời điểm quan sát), trong khi hầu hết tất cả các tính năng có Đóng góp lỗi nhỏ hơn đều liên quan đến T-22 (22 ngày trước thời điểm quan sát). ).

Điều này dường như chỉ ra rằng các tính năng gần đây nhất có xu hướng bị trang bị quá mức, trong khi các tính năng ở xa hơn về thời gian có xu hướng khái quát hóa tốt hơn.

Lưu ý rằng nếu không có Đóng góp lỗi, chúng tôi sẽ không bao giờ biết được thông tin chi tiết này.

Các phương pháp Loại bỏ tính năng đệ quy truyền thống (RFE) dựa trên việc loại bỏ các tính năng không quan trọng. Điều này tương đương với việc loại bỏ các tính năng có Đóng góp Dự đoán nhỏ trước tiên.

Tuy nhiên, dựa trên những gì chúng tôi đã nói ở đoạn trước, sẽ hợp lý hơn nếu loại bỏ các tính năng có Đóng góp Lỗi cao nhất trước tiên.

Để kiểm tra xem trực giác của chúng ta có được xác minh hay không, hãy so sánh hai cách tiếp cận:

  • RFE truyền thống: loại bỏ các tính năng vô dụng trước tiên (Đóng góp dự đoán thấp nhất).
  • RFE của chúng tôi: loại bỏ các tính năng có hại Thành phố điện khí hóa phía tây dãy núi Rocky đầu tiên (Đóng góp lỗi cao nhất).

Hãy xem kết quả trên bộ xác thực:

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Sai số tuyệt đối trung bình của hai chiến lược trên bộ xác thực. [Hình ảnh của tác giả]

 

Sự lặp lại tốt nhất cho từng phương pháp đã được khoanh tròn: đó là mô hình có 19 tính năng cho RFE truyền thống (đường màu xanh) và mô hình có 17 tính năng cho RFE (đường màu cam) của chúng tôi.

Nói chung, có vẻ như phương pháp của chúng tôi hoạt động tốt: việc xóa tính năng có Đóng góp dự đoán cao nhất sẽ dẫn đến MAE nhỏ hơn một cách nhất quán so với việc xóa tính năng có Đóng góp dự đoán cao nhất.

Tuy nhiên, bạn có thể nghĩ rằng điều này hoạt động tốt chỉ vì chúng tôi đang trang bị quá mức bộ xác thực. Rốt cuộc, chúng tôi quan tâm đến kết quả mà chúng tôi sẽ đạt được trên tập kiểm tra.

Vì vậy, hãy xem so sánh tương tự trên bộ thử nghiệm.

 

Tính năng của bạn có quan trọng không? Điều đó không có nghĩa là họ tốt
Sai số tuyệt đối trung bình của hai chiến lược trên tập kiểm tra. [Hình ảnh của tác giả]

 

Kết quả tương tự như lần trước. Ngay cả khi có ít khoảng cách hơn giữa hai dòng, MAE thu được bằng cách loại bỏ Người đóng góp lỗi cao nhất rõ ràng vẫn tốt hơn MAE bằng cách loại bỏ Người đóng góp dự đoán thấp nhất.

Vì chúng tôi đã chọn các mô hình dẫn đến MAE nhỏ nhất trên bộ xác thực, hãy xem kết quả của chúng trên bộ kiểm tra:

  • Đóng góp dự đoán RFE (19 tính năng). MAE trên tập thử nghiệm: 2.04.
  • Đóng góp lỗi RFE (17 tính năng). MAE trên tập thử nghiệm: 1.94.

Vì vậy, MAE tốt nhất sử dụng phương pháp của chúng tôi tốt hơn 5% so với RFE truyền thống!

Khái niệm về tầm quan trọng của tính năng đóng vai trò cơ bản trong học máy. Tuy nhiên, khái niệm “tầm quan trọng” thường bị nhầm lẫn với “sự tốt lành”.

Để phân biệt giữa hai khía cạnh này, chúng tôi đã đưa ra hai khái niệm: Đóng góp dự đoán và Đóng góp lỗi. Cả hai khái niệm đều dựa trên các giá trị SHAP của tập dữ liệu xác thực và trong bài viết này, chúng ta đã thấy mã Python để tính toán chúng.

Chúng tôi cũng đã thử chúng trên một tập dữ liệu tài chính thực (trong đó nhiệm vụ dự đoán giá Vàng) và chứng minh rằng Loại bỏ tính năng đệ quy dựa trên Đóng góp lỗi dẫn đến Sai số tuyệt đối trung bình tốt hơn 5% so với RFE truyền thống dựa trên Đóng góp dự đoán.

Tất cả mã được sử dụng cho bài viết này có thể được tìm thấy trong cuốn sổ này.

Cảm ơn bạn đã đọc!

 
 
Samuele Mazzanti là Nhà khoa học dữ liệu chính tại Jakala và hiện đang sống ở Rome. Anh tốt nghiệp ngành Thống kê và mối quan tâm nghiên cứu chính của anh liên quan đến các ứng dụng học máy cho ngành. Anh ấy cũng là một người sáng tạo nội dung tự do.

 
Nguyên. Đăng lại với sự cho phép.
 

Dấu thời gian:

Thêm từ Xe đẩy