説明可能性#

恵木 (2020)の分類に則ると、4つに分けられる

  1. 因子型:「この特徴量の値がこれだからこの予測結果」

  2. 事例型:「似たような事例はこうだったから」

  3. 知識型:「AIはここの要素が弱いと考えた」

  4. 反実型:「もしこの特徴量の値がこれだったらこの予測結果となった」

因子型#

LIME、SHAPなど

事例型#

予測対象と類似した訓練事例を出すアプローチ

k近傍のサンプルを出す方法#

Influence function#

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#

いろいろな論文でまとめられた説明に関する手法をまとめたライブラリ

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’)
)

参考#

サーベイ・チュートリアル#