説明可能性#
恵木 (2020)の分類に則ると、4つに分けられる
因子型:「この特徴量の値がこれだからこの予測結果」
事例型:「似たような事例はこうだったから」
知識型:「AIはここの要素が弱いと考えた」
反実型:「もしこの特徴量の値がこれだったらこの予測結果となった」
因子型#
LIME、SHAPなど
事例型#
予測対象と類似した訓練事例を出すアプローチ。
instance-based explanation / prototype-based explanation などと呼ばれる
後付け(post-hoc)事例型説明#
任意の機械学習アルゴリズムに対し、あとから説明を行うタイプ。
各インスタンスの誤差関数(勾配)への影響を使ったりする
Influence function#
Hara et al. (2019)はconvexでない損失関数にも使えるよう拡張
Guo et al. (2020)(Salesforce)のFastIFはk近傍に絞って計算することで訓練を高速化
TracIn#
SGDにおいて各インスタンスが誤差をどれだけ増減させるかを見てインスタンスの影響度を測るアプローチ
ProtoDash#
[1707.01212] Efficient Data Representation by Selecting Prototypes with Importance Weights(ICDM 2019)
複雑なデータ分布を最もよく要約・コンパクトに代表する「プロトタイプ(代表例)」を、強い理論保証つきで選択するアルゴリズム。Kim et al. (2016)(MMD-Critic)を一般化し、プロトタイプ選択に加えて、その重要度を示す非負の重みを各プロトタイプに付与する。これによりプロトタイプと criticism(外れ値)を単一の一貫した枠組みで発見できる
AI Explainability 360パッケージで実行できる
組み込み型(ante-hoc)の事例型説明#
予測アルゴリズムに組み込まれた説明手法
TabR: Tabular Deep Learning Meets Nearest Neighbors (ICLR 2024)#
目的: テーブルDLがGBDTに勝てない状況を、検索拡張(retrieval-augmented)アプローチで打破する。
手法: 中央にkNNライクな検索モジュールを持つフィードフォワードネットワーク。ターゲットと近傍候補を同一エンコーダで符号化し、類似度モジュールで近傍を取得して表現を強化する。
結果: テーブルDLモデル中で最良の平均性能を示し、複数データセットで最先端を達成、”GBDTに有利”とされるベンチマークでもGBDTを上回った。
意義: 予測時に「どの訓練事例を参照したか」が構造として残るため、検索拡張モデルが持つ解釈性・頑健性などの有用な特性を備える。
ProtoAttend#
ProtoAttend: Attention-Based Prototypical Learning
手法: 事前学習済みを含む広範なアーキテクチャに統合可能で、符号化表現とサンプルを関連付けるアテンション機構でプロトタイプ(少数の関連事例)を決定。
結果: 元モデルの精度を犠牲にせず、(1)決定に最も関連するサンプルを出力するサンプルベース解釈、(2)最先端の信頼度推定、(3)分布ミスマッチ検出で最先端を達成。
意義: 最小の追加テスト時間・実用的な訓練コストで実現でき、テーブル/構造化データを含む複数モダリティに適用可能。
反実型#
[2010.10596] Counterfactual Explanations and Algorithmic Recourses for Machine Learning: A Review
ライブラリ#
AI Explainability 360#
LIME、SHAP、ProtoDashなどが使えるパッケージ(更新が2025年で止まってる?)
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’)
)