Bỏ qua tới nội dung chính
Quay lại tin tức

Hướng dẫn mã hóa Triển khai quy trình làm việc về khả năng giải thích SHAP với các mô hình so sánh, mặt nạ, tương tác, trôi dạt và hộp đen của người giải thích

MarkTechPost· Sana Hassan· 17/5/2026general

Trong hướng dẫn này, chúng tôi triển khai quy trình công việc SHAP như một khung thực tế để diễn giải các mô hình học máy ngoài các sơ đồ tầm quan trọng của tính năng cơ bản. Chúng tôi bắt đầu bằng cách đào tạo các mô hình dựa trên cây và sau đó so sánh các trình giải thích SHAP khác nhau, bao gồm các phương pháp Cây, Chính xác, Hoán vị và Hạt nhân để hiểu mức độ chính xác và thời gian chạy thay đổi như thế nào giữa các phương pháp tiếp cận nhận biết mô hình và bất khả tri về mô hình. Chúng tôi cũng kiểm tra cách các trình tạo mặt nạ ảnh hưởng đến việc giải thích khi các tính năng có tương quan với nhau, cách các giá trị tương tác tiết lộ hiệu ứng tính năng theo cặp và cách các hàm liên kết thay đổi cách diễn giải giữa tỷ lệ logarit và xác suất.

Trong hướng dẫn này, chúng tôi triển khai quy trình công việc SHAP như một khung thực tế để diễn giải các mô hình học máy ngoài các sơ đồ tầm quan trọng của tính năng cơ bản. Chúng tôi bắt đầu bằng cách đào tạo các mô hình dựa trên cây và sau đó so sánh các trình giải thích SHAP khác nhau, bao gồm các phương pháp Cây, Chính xác, Hoán vị và Hạt nhân để hiểu mức độ chính xác và thời gian chạy thay đổi như thế nào giữa các phương pháp tiếp cận nhận biết mô hình và bất khả tri về mô hình. Chúng tôi cũng kiểm tra cách các trình che dấu ảnh hưởng đến việc giải thích khi các tính năng có tương quan với nhau, cách các giá trị tương tác tiết lộ hiệu ứng tính năng theo cặp và cách các hàm liên kết thay đổi cách giải thích giữa tỷ lệ logarit và không gian xác suất. Ngoài ra, chúng tôi sử dụng các giá trị Owen, thử nghiệm nhóm, lựa chọn tính năng dựa trên SHAP, giám sát độ lệch và giải thích hộp đen tùy chỉnh để xây dựng quy trình làm việc hoàn chỉnh về khả năng diễn giải có thể chạy trực tiếp trong Google Colab. Sao chép mãĐã sao chépSử dụng trình duyệt khác !pip cài đặt -q --nâng cấp máy biến áp shap xgboost nhập cảnh báo, thời gian, gọn gàng dưới dạng np, gấu trúc dưới dạng pd, matplotlib.pyplot dưới dạng plt từ số liệu thống kê nhập scipy từ hệ thống phân cấp nhập scipy.cluster Warning.filterwarnings("bỏ qua") nhập shap, xgboost dưới dạng xgb từ sklearn.datasets nhập Fetch_california_housing, Load_breast_cancer từ sklearn.model_selection nhập train_test_split từ sklearn.metrics nhập roc_auc_score, r2_score shap.initjs() np.random.seed(42) print(f"SHAP: {shap.__version__}\n") nhà ở = lấy_california_housing() X = pd.DataFrame(housing.data, columns=housing.feature_names) y = pd.Series(housing.target, name="MedHouseVal") reg = xgb.XGBRegressor(n_estimators=300, max_deep=5, learning_rate=0,05, mẫu phụ=0,9, Random_state=42, n_jobs=-1).fit(X_tr, y_tr) print(f"Bộ hồi quy nhà ở R2 = {reg.score(X_te, y_te):.3f}") def reg_predict(X): trả về reg.predict(np.asarray(X)) Chúng tôi cài đặt các thư viện cần thiết và nhập các công cụ cốt lõi cho SHAP, XGBoost, thống kê, trực quan hóa và đánh giá mô hình. Chúng tôi tải tập dữ liệu nhà ở California và huấn luyện mô hình hồi quy XGBoost. Chúng tôi cũng xác định một trình bao bọc dự đoán rõ ràng để SHAP có thể giải thích mô hình mà không gặp phải vấn đề tương thích với các phương thức mô hình bị ràng buộc. Sao chép mãĐã sao chépSử dụng trình duyệt khác in("\n" + "="*72) print("PHẦN 1: So sánh giải thích - tính chính xác và tốc độ") in("="*72) X_sample = X_te.iloc[:25] bg_small = shap.sample(X_tr, 50, Random_state=42) def _wrap_kernel(expl, X, bg_mean): vals = expl.shap_values(X, nsamples=200, Silent=True) trả về shap.Explanation(values=vals, base_values=np.full(len(X), bg_mean), data=X.values, feature_names=X.columns.tolist()) chạy = {} t0 = time.time(); tree_expl = shap.TreeExplainer(reg); sv_tree = tree_expl(X_sample) chạy ["Cây (chính xác, nhận biết mô hình)"] = (sv_tree, time.time() - t0) t0 = time.time() sv_exact = shap.Explainer(reg_predict, bg_small, thuật toán="chính xác")(X_sample) chạy ["Chính xác (mô hình bất khả tri)"] = (sv_exact, time.time() - t0) t0 = time.time() sv_perm = shap.Explainer(reg_predict, bg_small, thuật toán="hoán vị")(X_sample) chạy ["Hoán vị"] = (sv_perm, time.time() - t0) t0 = time.time() ke = shap.KernelExplainer(reg_predict, shap.sample(X_tr, 50, Random_state=42).values) sv_kern = _wrap_kernel(ke, X_sample, ke.expected_value) chạy ["Kernel"] = (sv_kern, time.time() - t0) ref = sv_tree.values.flatten() print(f"\n{'Phương thức':30s} {'time(s)':>8s} {'ρ vs Tree':>10s} {'max|Δ|':>8s}") cho tên, (sv, dt) trong run.items(): phẳng = sv.values.flatten() rho = np.corrcoef(ref, flat)[0, 1] err = np.abs(ref - flat).max() print(f"{name:30s} {dt:8.2f} {rho:10.4f} {err:8.4f}") print("\nTakeaway: Tree là lựa chọn nhanh và chính xác duy nhất cho tập hợp cây.") print("Chính xác ≈ Hoán vị khi hoán vị có đủ mẫu; Kernel ồn hơn và chậm nhất.") in("\n" + "="*72) print("PHẦN 2: Mặt nạ — Độc lập và Phân vùng có tương quan") in("="*72) corr = X_tr.corr().abs() top_pair = corr.where(np.triu(np.ones_like(corr, dtype=bool), k=1)) \ .stack().sort_values(tăng dần=False).head(3) print("Các cặp tương quan hàng đầu (|ρ|):") cho (a, b), v trong top_pair.items(): print(f" {a:10s} {b:10s} |ρ| = {v:.3f}") Masker_ind = shap.maskers.Independence(X_tr, max_samples=100) Masker_part = shap.maskers.Partition(X_tr, max_samples=100) sv_ind = shap.Explainer(reg_predict, Masker_ind)(X_sample) sv_part = shap.Explainer(reg_predict, Masker_part)(X_sample) a, b = top_pair.index[0] print(f"\nMean |φ| cho cặp tương quan cao nhất ({a}, {b}):") print(f" Độc lập : {a}={np.abs(sv_ind[:,a].values).mean():.4f} {b}={np.abs(sv_ind[:,b].values).mean():.4f}") print(f" Phân vùng : {a}={np.abs(sv_part[:,a].values).mean():.4f} {b}={np.abs(sv_part[:,b].values).mean():.4f}") print("Phân vùng phân phối lại tín dụng cho các tính năng tương quan (ngữ nghĩa đa dạng)") fig, axes = plt.subplots(1, 2, figsize=(13, 4)) plt.sca(trục[0]); shap.plots.bar(sv_ind, show=False); axes[0].set_title("Mặt nạ độc lập") plt.sca(trục[1]); shap.plots.bar(sv_part, show=False); axes[1].set_title("Trình tạo mặt nạ phân vùng") plt.tight_layout(); plt.show() Chúng tôi so sánh nhiều trình giải thích SHAP, bao gồm Cây, Chính xác, Hoán vị và Hạt nhân, trên cùng một mô hình hồi quy và dữ liệu mẫu. Chúng tôi đo lường từng phương pháp theo thời gian chạy, mối tương quan với TreeExplainer và mức chênh lệch phân bổ tối đa để hiểu sự cân bằng giữa tốc độ và chất lượng gần đúng. Sau đó, chúng tôi nghiên cứu các mặt nạ Độc lập và Phân vùng để xem các tính năng tương quan nhận được tín dụng phân bổ khác nhau như thế nào theo các giả định về mặt nạ khác nhau. Sao chép mãĐã sao chépSử dụng trình duyệt khác in("\n" + "="*72) print("PHẦN 3: Phân rã tương tác") in("="*72) inter = tree_expl.shap_interaction_values(X_te.iloc[:500]) inter_abs = np.abs(inter).mean(0) diag = np.diagonal(inter_abs).copy() tắt = inter_abs.copy(); np.fill_diagonal(tắt, 0) main_share = diag.sum() / (diag.sum() + off.sum()) print(f"Tổng khối lượng phân bổ: {main_share*100:.1f}% hiệu ứng chính, " f"{(1-main_share)*100:.1f}% tương tác") cặp = [(X.columns[i], X.columns[j], off[i, j]) cho i trong phạm vi(X.shape[1]) cho j trong phạm vi(i+1, X.shape[1])] pair.sort(key=lambda t: -

Nguồn tin: MarkTechPost — Tác giả: Sana Hassan. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.