Các mô hình AI ngày càng chính xác nhưng cũng ngày càng khó hiểu. Chúng giống như “hộp đen”: đưa dữ liệu vào và nhận kết quả ra, mà không ai biết rõ mô hình đã dựa vào yếu tố nào để đưa ra quyết định.
Điều này đặt ra một câu hỏi quan trọng:
“Làm sao chúng ta có thể tin tưởng vào những gì mô hình dự đoán?”
Explainable AI (XAI) ra đời để giải quyết vấn đề đó — và trong số các phương pháp giải thích mô hình, SHAP (SHapley Additive exPlanations) được xem là một trong những công cụ mạnh mẽ và trực quan nhất.
Từ lý thuyết trò chơi đến SHAP
Cốt lõi của SHAP xuất phát từ Lý thuyết Trò chơi hợp tác (Cooperative Game Theory).
Ý tưởng rất đơn giản:
“Nếu nhiều người cùng hợp tác tạo ra một giá trị, thì phần đóng góp công bằng của mỗi người là bao nhiêu?”
Trong bối cảnh Machine Learning:
- Trò chơi (game) → là bài toán dự đoán của mô hình.
- Người chơi (players) → là các feature (biến đầu vào).
- Giá trị (payout) → là kết quả dự đoán (ví dụ: xác suất được duyệt vay, giá nhà, v.v.).
Mỗi feature đóng góp một phần vào kết quả cuối cùng. SHAP giúp tính toán “độ đóng góp công bằng” này – tức là mỗi feature ảnh hưởng bao nhiêu đến dự đoán của mô hình.
Cơ sở lý thuyết: Shapley Value
Giá trị Shapley (Shapley Value) là khái niệm trung tâm trong Lý thuyết Trò chơi hợp tác, được Lloyd Shapley đề xuất năm 1953. Nó mô tả mức độ đóng góp công bằng của từng “người chơi” vào kết quả chung của trò chơi — hay trong bối cảnh Machine Learning, là độ ảnh hưởng của từng feature lên dự đoán của mô hình.

Hình 1: So sánh giữa Lý thuyết trò chơi và Shapley Value
(Nguồn: AIO2025_XAI_SHAP_v3.pdf, Trang 3)
Công thức toán học được biểu diễn như sau:
$$ \phi_i = \sum_{S \subseteq N \setminus \{i\}} \frac{|S|! (|N| - |S| - 1)!}{|N|!} [v(S \cup \{i\}) - v(S)] $$
Trong đó:
- $N$: Tập hợp tất cả người chơi
- $S$: Tập con người chơi
- $v(S)$: giá trị của liên minh $S$
- $\phi_i$: Shapley Value của người chơi $i$
Hiểu một cách đơn giản:
Mỗi feature được “thêm vào” tất cả các tổ hợp feature khác, và ta tính xem việc thêm đó làm giá trị dự đoán tăng (hoặc giảm) bao nhiêu trung bình. Giá trị trung bình ấy chính là Shapley Value – phần “công” của feature đó trong quyết định cuối cùng của mô hình.
Ví dụ minh họa
Giả sử mô hình dự đoán giá nhà dựa trên 3 yếu tố:
- Diện tích (x₁)
- Số phòng ngủ (x₂)
- Khu vực (x₃)
Ta giữ cố định x₁, x₂ của căn nhà cần giải thích, rồi thay đổi ngẫu nhiên x₃ (khu vực) bằng dữ liệu từ tập huấn luyện. Nếu giá dự đoán trung bình khi thay đổi x₃ là 2.5 tỷ, ta xem đó là “giá trị của nhóm đặc trưng S = {x₁, x₂}”. Bằng cách lặp lại quá trình này với mọi tổ hợp các feature, và lấy trung bình phần chênh lệch giữa có và không có mỗi feature, ta thu được giá trị Shapley cho từng feature.
Mô hình Additive – Tính “cộng tuyến tính” của SHAP
SHAP hiện thực hóa lý thuyết Shapley Value thành một framework giải thích mô hình machine learning hoàn chỉnh bằng cách mô hình hóa mỗi dự đoán như một “trò chơi hợp tác”.
Trong trò chơi này, các feature là người chơi, cùng đóng góp để tạo nên giá trị dự đoán. Giá trị của trò chơi được định nghĩa là chênh lệch giữa dự đoán thực tế và giá trị dự đoán trung bình.
Cốt lõi của SHAP nằm ở mô hình giải thích cộng tính:
$$ g(x') = \phi_0 + \sum_{i=1}^{M} \phi_i x'_i $$
Trong đó:
- $\phi_0$: Giá trị kỳ vọng cơ sở (baseline expectation)
- $\phi_i$: Shapley Value của đặc trưng thứ $i$
- $x'_i$: Biến chỉ báo sự hiện diện của đặc trưng
Trong phương trình này, $\phi_0$ đại diện cho giá trị kỳ vọng cơ sở - baseline expectation - là kết quả dự đoán trung bình khi không có thông tin nào về các đặc trưng đầu vào. Mỗi $\phi_i$ tương ứng với Shapley Value của đặc trưng thứ $i$, phản ánh mức độ đóng góp của đặc trưng đó vào sự khác biệt giữa dự đoán cuối cùng và giá trị cơ sở. Thành phần $x'_i$ là biến chỉ báo nhị phân, xác định sự hiện diện (1) hoặc vắng mặt (0) của đặc trưng trong tổ hợp đang xét.
Cấu trúc cộng tính này cho phép SHAP phân tách một cách rõ ràng và trực quan tổng giá trị dự đoán thành tổng của giá trị cơ sở và các đóng góp riêng lẻ từ từng đặc trưng, tạo nên một hệ thống giải thích minh bạch và dễ hiểu.
Kernel SHAP – Cách tính Shapley trong thực tế
Tính toán Shapley Value chính xác đòi hỏi xem xét tất cả các tổ hợp đặc trưng có thể, điều này là bất khả thi với số lượng đặc trưng lớn. Với 32 đặc trưng, cần tới 4.3 tỷ tổ hợp - một con số khổng lồ.
Kernel SHAP giải quyết thách thức này bằng phương pháp xấp xỉ thông minh:
1. Lấy mẫu tổ hợp: Tạo các tổ hợp đặc trưng ngẫu nhiên thay vì duyệt toàn bộ
2. Tập nền (background set): Sử dụng tập dữ liệu tham chiếu để ước lượng giá trị khi thiếu đặc trưng
3. Trọng số thông minh: Gán trọng số khác nhau cho các tổ hợp dựa trên kích thước
4. Hồi quy tuyến tính có trọng số: Ước lượng Shapley Value thông qua mô hình tuyến tính
Quy trình triển khai
- Đầu vào: mẫu cần giải thích
- Background set: 100-1000 mẫu từ tập huấn luyện
- Mã hóa nhị phân các tổ hợp đặc trưng
- Dự đoán với mỗi tổ hợp sử dụng mô hình gốc
- Fit mô hình tuyến tính có trọng số để thu được Shapley Value
Ứng dụng SHAP trên Dữ liệu bảng (Tabular)
Trong demo này sẽ sử dụng bộ dữ liệu Adult Income từ thư viện Shap làm ví dụ minh hoạ
1. Import thư viện và chuẩn bị dữ liệu
import shap
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# Load bộ dữ liệu Adult Income từ thư viện SHAP
X, y = shap.datasets.adult()
Giải thích:
- Bộ dữ liệu Adult Income gồm các đặc trưng như tuổi, nghề nghiệp, trình độ học vấn, giới tính...
- Mục tiêu dự đoán: người đó có thu nhập >50K USD/năm hay không.
- shap.datasets.adult() giúp tải nhanh bộ dữ liệu mẫu có sẵn trong thư viện SHAP.
2. Chia dữ liệu và huấn luyện mô hình
# Chia dữ liệu thành train và test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Huấn luyện mô hình Random Forest
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
Giải thích:
- Dữ liệu được chia 80/20 để huấn luyện và kiểm thử.
- Random Forest là mô hình cây quyết định mạnh mẽ, phù hợp để minh họa SHAP vì có TreeExplainer tối ưu sẵn.
3. Tạo Explainer và tính toán giá trị SHAP
# Tạo Explainer (dùng TreeExplainer cho mô hình cây)
explainer = shap.TreeExplainer(model)
# Tính SHAP values cho 100 mẫu đầu tiên của tập test
shap_values = explainer(X_test[:100])
Giải thích:
- TreeExplainer được thiết kế đặc biệt cho mô hình dựa trên cây (Decision Tree, Random Forest, XGBoost, LightGBM...)
- SHAP values thể hiện mức độ đóng góp của từng feature vào dự đoán của từng mẫu.
4. Biểu đồ Waterfall – Giải thích một dự đoán cụ thể
shap.plots.waterfall(shap_values[0, :, 1])
Cách đọc biểu đồ:
- Hiển thị đóng góp của từng feature vào một dự đoán duy nhất (mẫu đầu tiên).
- Thanh màu đỏ: feature đẩy dự đoán lên (tăng xác suất).
- Thanh màu xanh: feature kéo dự đoán xuống (giảm xác suất).
- Đường gốc là giá trị trung bình (baseline), kết quả cuối là dự đoán của mô hình cho mẫu đó.

Hình 2: Phân tích Ảnh hưởng của Đặc trưng lên Giá trị Dự đoán
Phân tích chi tiết:
Biểu đồ này giải thích vì sao mô hình dự đoán ra giá trị cuối cùng ($E[f(x)] = 0.241$) cho một cá nhân/trường hợp cụ thể ($f(x) = 0$ là giá trị cơ sở).
-
Giá trị Dự đoán Cơ sở: Giá trị cơ sở trung bình của mô hình ($E[f(x)]$) là 0.241. Đây là điểm bắt đầu.
-
Mục tiêu (Giá trị đầu ra): Mục tiêu của dự đoán này là hạ thấp giá trị dự đoán từ $0.241$ về mức $f(x) = 0$.
-
Các Đặc trưng Ảnh hưởng Tiêu cực (Làm giảm dự đoán):
- Các thanh màu xanh dương đại diện cho các đặc trưng làm giảm giá trị dự đoán (đẩy về bên trái, gần $f(x)=0$).
- Đặc trưng Relationship (Giá trị $0$) là yếu tố có ảnh hưởng tiêu cực mạnh nhất (SHAP value = $-0.13$).
- Tiếp theo là Age (Giá trị $27$) với SHAP value là $-0.05$.
-
Các Đặc trưng Ảnh hưởng Tích cực (Làm tăng dự đoán):
- Các thanh màu đỏ đại diện cho các đặc trưng làm tăng giá trị dự đoán (đẩy về bên phải).
- Chỉ có đặc trưng Marital Status (Giá trị $0$) có tác động tích cực nhỏ (+0.01).
=> Kết luận: Để đạt được giá trị dự đoán cuối cùng ($f(x) \approx 0$), mô hình đã bị chi phối chủ yếu bởi các đặc trưng có giá trị tiêu cực, đặc biệt là Relationship và Age, làm giảm đáng kể kết quả dự đoán từ giá trị cơ sở $0.241$.
5. Biểu đồ Summary – Toàn cảnh tầm ảnh hưởng của các đặc trưng
shap.summary_plot(shap_values, X_test[:100])
Cách đọc biểu đồ:
- Mỗi chấm là một giá trị SHAP cho một mẫu dữ liệu.
- Màu thể hiện giá trị feature (đỏ = cao, xanh = thấp).
- Trục X thể hiện hướng tác động đến xác suất dự đoán.
Kết luận từ biểu đồ này: Ta thấy đặc trưng nào ảnh hưởng mạnh nhất đến kết quả dự đoán trên toàn bộ tập dữ liệu.

Hình 3: Ảnh hưởng Tương tác của Workclass và Age lên Dự đoán Mô hình
Phân tích chi tiết:
Biểu đồ này hiển thị mức độ tương tác (ảnh hưởng qua lại) giữa hai đặc trưng Workclass và Age lên kết quả dự đoán của mô hình.
- Tương tác Yếu: Phần lớn các điểm (trường hợp cá nhân) nằm gần giá trị tương tác 0.0, cho thấy sự kết hợp của Workclass và Age ít ảnh hưởng đến dự đoán.
- Tương tác Tiêu cực Nổi bật: Có một số trường hợp có giá trị tương tác âm mạnh (màu xanh đậm, khoảng $-0.5$). Điều này chỉ ra rằng đối với các cá nhân đó, sự kết hợp cụ thể của Workclass và Age tương tác làm giảm mạnh giá trị dự đoán của mô hình.
=> Kết luận: Sự tương tác giữa Workclass và Age không đáng kể đối với đa số dữ liệu, nhưng có một vài ngoại lệ với tương tác tiêu cực mạnh mẽ.
6. Biểu đồ Bar – Tầm quan trọng trung bình của feature
shap.plots.bar(shap_values[0, :, 1])
Ý nghĩa:
- Hiển thị giá trị tuyệt đối trung bình của SHAP cho mỗi feature.
- Giúp xác định feature nào ảnh hưởng mạnh nhất trung bình.
- Thích hợp cho global explanation (giải thích tổng thể mô hình).

Hình 4: Phân tích Đóng góp Đặc trưng (SHAP) cho một Dự đoán Cá nhân
Phân tích chi tiết:
Biểu đồ này giải thích cách các đặc trưng cụ thể của một trường hợp (cá nhân) ảnh hưởng đến kết quả dự đoán của mô hình.
-
Trục Hoành (SHAP Value): Đại diện cho mức độ đóng góp của đặc trưng.
- Giá trị Âm (Thanh Xanh Dương): Đẩy kết quả dự đoán xuống thấp (giảm xác suất/giá trị).
- Giá trị Dương (Thanh Đỏ): Đẩy kết quả dự đoán lên cao (tăng xác suất/giá trị).
-
Đặc trưng Ảnh hưởng Mạnh nhất (Tiêu cực):
- Relationship = 0 là yếu tố có đóng góp tiêu cực mạnh nhất (SHAP Value = 0.13).
- Age = 27 là yếu tố tiêu cực mạnh thứ hai (SHAP Value = 0.05).
-
Các đặc trưng này đang làm giảm đáng kể giá trị dự đoán cuối cùng.
- Đặc trưng Ảnh hưởng Tích cực:
- Chỉ có Marital Status = 0 có đóng góp tích cực nhỏ (+0.01), làm tăng nhẹ giá trị dự đoán.
=> Kết luận: Dự đoán cuối cùng của mô hình cho trường hợp này bị chi phối mạnh mẽ bởi các đặc trưng tiêu cực, chủ yếu là Relationship và Age, khiến giá trị dự đoán thấp hơn so với giá trị cơ sở trung bình của mô hình.
7. Biểu đồ Force – Giải thích tương tác trực quan
shap.initjs()
shap.plots.force(shap_values[0, :, 1])
Ý nghĩa:
- Tương tự Waterfall Plot nhưng ở dạng interactive (có thể kéo, zoom).
- Dễ hiểu hơn khi trình bày cho người không chuyên.
- Thể hiện rõ “các lực” đẩy dự đoán tăng hoặc giảm so với baseline.

Hình 5: Lực Đẩy của Đặc trưng (SHAP Force Plot) cho Dự đoán Cá nhân
Phân tích chi tiết:
Biểu đồ này giải thích cách mô hình đi từ Giá trị Cơ sở (Base Value $\approx 0.241$) đến Giá trị Dự đoán Cuối cùng ($f(x) \approx -0.00$) cho trường hợp này.
- Đặc trưng Đẩy Xuống (Xanh Dương - Tiêu cực): Relationship = 0.0 là yếu tố mạnh nhất, cùng với Age = 27.0, Capital Gain = 0.0, v.v., áp đảo và đẩy mạnh giá trị dự đoán xuống thấp.
- Đặc trưng Đẩy Lên (Hồng - Tích cực): Chỉ có Marital Status = 0.0 có tác động nhỏ làm tăng nhẹ.
=> Kết luận: Giá trị dự đoán cuối cùng ($f(x) \approx -0.00$) thấp là do sự đóng góp tiêu cực mạnh mẽ của các đặc trưng, đặc biệt là Relationship
8. Biểu đồ Dependence – Ảnh hưởng của từng feature
shap.plots.scatter(shap_values[:, "Age", 1])
Ý nghĩa:
- Thể hiện mối quan hệ giữa giá trị của một feature (ở đây là Age) và giá trị SHAP của nó.
- Giúp hiểu tính phi tuyến: Ví dụ, tuổi càng cao → xác suất thu nhập >50K tăng đến một mức nào đó, rồi giảm.

Hình 6: Biểu đồ Phụ thuộc SHAP của Đặc trưng Age
Phân tích chi tiết:
Biểu đồ này cho thấy sự đóng góp của đặc trưng Age vào dự đoán của mô hình (SHAP Value) thay đổi như thế nào theo giá trị tuổi thực tế.
Xu hướng chính: Tồn tại mối quan hệ tương quan dương rõ rệt:
- Tuổi trẻ (Dưới 30): Có giá trị SHAP âm (đẩy kết quả dự đoán xuống).
- Tuổi trung niên (Trên 40): Có giá trị SHAP dương (đẩy kết quả dự đoán lên).
=> Kết luận: Mô hình nhận định rằng tuổi càng cao (đặc biệt là sau 40) thì đóng góp càng tích cực vào kết quả dự đoán (ví dụ: xác suất thu nhập cao hơn).
Kết luận
SHAP đã trở thành công cụ đột phá trong việc giải thích các mô hình AI trên dữ liệu dạng bảng. Dựa trên nền tảng lý thuyết trò chơi vững chắc thông qua Shapley Value, SHAP cung cấp phương pháp phân bổ đóng góp công bằng và minh bạch cho từng đặc trưng.
Sức mạnh của SHAP thể hiện qua khả năng:
- Giải thích cục bộ: Hiểu rõ từng dự đoán riêng lẻ qua Waterfall và Force Plot
- Phân tích toàn cục: Đánh giá tầm quan trọng đặc trưng qua Summary và Bar Plot
- Khám phá tương tác: Phát hiện mối quan hệ phức tạp giữa các đặc trưng
Dù có những thách thức về tính toán, sự phát triển của TreeSHAP và Kernel SHAP đang từng bước khắc phục hạn chế. Trong kỷ nguyên yêu cầu cao về tính minh bạch và trách nhiệm giải trình của AI, SHAP khẳng định vị thế là công cụ không thể thiếu để biến các mô hình phức tạp thành những hệ thống đáng tin cậy và dễ hiểu.
Chưa có bình luận nào. Hãy là người đầu tiên!