本文へスキップ
ひもとくAI

まとめ:説明性と、モデルを使う前の点検表

レッスン 6/6

説明性:モデルは、何を手がかりに判定しているか

ニューラルネットワークのような複雑なモデルは、重みが何千個もあり、「なぜその判定になったのか」を人間が直接読み取るのは困難です。しかし、人に関わる判断にAIを使うなら、判定の理由を説明できることが求められます。また、モデルが「おかしな手がかり」に頼っていないかを確かめることは、データリークや偏りを見つける手段にもなります。モデルの判定の理由を人間に分かる形で示す取り組みを 説明可能なAI(XAI)と呼びます。

並べ替えによる重要度

どのモデルにも使える、わかりやすい方法があります。

  1. テストデータで、モデルの正解率を測る
  2. ある特徴量の列だけを、でたらめに並べ替える(ほかの列はそのまま)
  3. もう一度正解率を測り、どれだけ下がったかを見る

モデルがその特徴量に頼っているほど、でたらめにされると大きく外れるので、正解率が大きく下がります。頼っていない特徴量なら、並べ替えても変わりません。この下がり幅を、並べ替えによる重要度(permutation importance)と呼びます。

実験:作ったデータで確かめる

仕組みがはっきり分かるように、次の3つの特徴量から正解が決まるデータを作りました(正解には、x1が強く、x2が弱く効き、x3はまったく関係ない)。ロジスティック回帰の正解率は0.923です。

特徴量正解との関係並べ替えによる重要度
x1強く効く0.421
x2弱く効く0.053
x3関係ない−0.001-0.001

x1を並べ替えると正解率が約0.42も下がり、モデルがx1に強く頼っていることが分かります。関係のないx3は、ほぼ0でした(でたらめのぶれで、わずかにマイナスになることもあります)。

この方法は、モデルの中身を見ずに、入力を変えて出力の変化を見るだけなので、どんなモデルにも使えます。

説明の限界と、いろいろな説明の方法

似た特徴量があると、重要度が分かれてしまう

前のスライドのデータに、x1とほぼ同じ値の特徴量x4(x1に小さな誤差を加えたもの)を加えて、もう一度学習させました。正解率は0.923のまま変わりません。

特徴量x4なしx4あり
x10.4210.269
x20.0530.055
x3−0.001-0.001−0.001-0.001
x4(x1とほぼ同じ)―0.098

x1の重要度が0.421から0.269に下がり、残りはx4に分かれました。x1を並べ替えても、モデルはx4からほぼ同じ情報を得られるからです。重要度が小さいからといって、正解と関係がないとは限らない のです。

第9章の最初に使った乳がんの診断データでも、細胞の半径・周の長さ・面積のような、似た特徴量がたくさんあります。並べ替えによる重要度を測ると、上位でも0.02ほどで、重要度があちこちに分かれていました。

説明は、「原因」ではない

重要度が大きいのは「モデルがその特徴量に頼っている」ということで、「その特徴量が結果の原因である」ということではありません。例えば、アイスの売り上げと水難事故の数は、どちらも気温が高いと増えます。アイスの売り上げから水難事故を予測するモデルでは、アイスの売り上げが重要になりますが、アイスが事故の原因ではありません。

いろいろな説明の方法

方法何を説明するか考え方
並べ替えによる重要度モデル全体が、どの特徴量に頼っているか(大域的な説明)特徴量をでたらめにしたときの性能の下がり方
LIME1件のデータの判定の理由(局所的な説明)そのデータの近くで、複雑なモデルを単純な式で近似する
SHAP1件のデータの判定への、特徴量ごとの貢献協力ゲーム理論のシャープレイ値の考え方で、「その特徴量が加わると、予測がどれだけ変わるか」を公平に分け合う
Grad-CAMCNNが、画像のどこを見て判定したか最後の畳み込み層の特徴マップと勾配から、判定に効いた場所を色で示す
Integrated Gradients1件のデータの判定への、入力の値ごとの貢献何もない入力(真っ黒な画像など)から実際の入力まで少しずつ変えながら、勾配を足し合わせる

どの方法も、モデルの振る舞いの一面を示すものです。1つの方法の結果だけで判断せず、データの知識と合わせて確かめます。

Pythonで重要度を求める、この章の点検表

from sklearn.inspection import permutation_importance

# model: 学習済みのモデル、X_test, y_test: テストデータ
result = permutation_importance(model, X_test, y_test, n_repeats=10, random_state=0)
print(result.importances_mean)    # 特徴量ごとの重要度(10回並べ替えた平均)

n_repeats は、並べ替えを何回繰り返して平均するかです。並べ替えはでたらめなので、1回だけだと結果がぶれます(レッスン4の再現性と同じ考え方で、random_state も決めておきます)。

よくある誤解

  • 「重要度が0に近い特徴量は、正解と関係がない」: 似た特徴量があると、重要度が分かれて小さくなります(x1とx4の実験)
  • 「重要度が大きい特徴量が、結果の原因である」: 重要度は、モデルが頼っているものを示すだけです。原因かどうかは、別の方法で確かめる必要があります
  • 「説明の手法を使えば、AIの判断は完全に理解できる」: どの手法も一面しか示しません。複数の見方と、データの知識を合わせて判断します

この章の点検表:モデルを使う前に確かめること

  1. 評価の仕方: 不均衡なデータなら、正解率だけでなく、混同行列・適合率・再現率・F値・AUCを見たか。しきい値は、どちらの間違いが重いかで決めたか(レッスン1・2)
  2. データリーク: 本番で手に入らない情報を使っていないか。前処理や特徴量の選択を、学習用のデータだけで行ったか。重複や時間の順序に気をつけたか(レッスン3)
  3. 再現性: 乱数の種・データ・コード・ライブラリの版・設定を記録したか。乱数の種を変えて、結果の幅を確かめたか(レッスン4)
  4. 公平性: グループごとに評価指標を比べたか。偏りがあれば、原因と対策を考えたか(レッスン5)
  5. 説明性: モデルがどの特徴量に頼っているかを調べ、おかしな手がかりに頼っていないかを確かめたか(レッスン6)

この点検表は、これから自分でAIを作るとき、いつでも使えます。「正解率が高い」だけで安心せず、この5つを確かめる習慣をつけましょう。

演習

演習を読み込んでいます…