説明可能性#
恵木 (2020)の分類に則ると、4つに分けられる
因子型:「この特徴量の値がこれだからこの予測結果」
事例型:「似たような事例はこうだったから」
知識型:「AIはここの要素が弱いと考えた」
反実型:「もしこの特徴量の値がこれだったらこの予測結果となった」
因子型#
LIME、SHAPなど
事例型#
予測対象と類似した訓練事例を出すアプローチ
k近傍のサンプルを出す方法#
Influence function#
Hara et al. (2019)はconvexでない損失関数にも使えるよう拡張
Guo et al. (2020)(Salesforce)のFastIFはk近傍に絞って計算することで訓練を高速化
TracIn#
SGDにおいて各インスタンスが誤差をどれだけ増減させるかを見てインスタンスの影響度を測るアプローチ
ProtoDash#
事例ベースの説明。 AI Explainability 360パッケージで実行できる
[1707.01212] Efficient Data Representation by Selecting Prototypes with Importance Weights
反実型#
[2010.10596] Counterfactual Explanations and Algorithmic Recourses for Machine Learning: A Review
ライブラリ#
AI Explainability 360#
いろいろな論文でまとめられた説明に関する手法をまとめたライブラリ
Github: Trusted-AI/AIX360
ProtoDash#
ProtodashExplainer
で実行できる
Directly Interpretable Unsupervised Explainers — aix360 0.1 documentation
# 1. データの用意
# https://scikit-learn.org/stable/datasets/real_world.html#california-housing-dataset
# 1レコード = 地区ブロック
# y: 10万ドル単位の、地区ブロックの住宅価格の中央値
from sklearn.datasets import fetch_california_housing
X, y = fetch_california_housing(as_frame=True, return_X_y=True)
X.assign(y = y)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)
# 2. 予測モデルの学習
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(max_depth=2, random_state=0)
model.fit(X_train, y_train)
from sklearn.metrics import mean_absolute_percentage_error
y_pred = model.predict(X_test)
print(f"MAPE={mean_absolute_percentage_error(y_test, y_pred):.1%}")
# 3. 説明
from aix360.algorithms.protodash import ProtodashExplainer
e = ProtodashExplainer()
e.explain(
X=X_train, # X (double 2d array) – Dataset you want to explain.
Y=X_test, # Y (double 2d array) – Dataset to select prototypical explanations from.
m=3, # m (int) – Number of prototypes
kernelType="other", # kernelType (str) – Type of kernel (viz. ‘Gaussian’, / ‘other’)
)