AIの判断は、理由を説明できる
AIの説明可能性とは、モデルがなぜその判断をしたのかを、人がわかる言葉で説明できることです。融資を断られた人が理由を聞けること、担当者が誤りに気づけることのために必要です。
このレッスンでは、入力を1つずつ変えて、どの入力が判断を動かしたかを調べる方法を学びます。
このレッスンのゴール
メモ
入力を1つずつ変えて、どの入力が判断を動かしたかを説明できる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 説明可能性 | モデルの判断の理由を、人に伝えられること | |
| 特徴量 | モデルに入れる1つ1つの情報 | 年収 |
| 重み | 入力1つ分の、点数への効き方を決める数 | |
| 寄与 | 1つの入力が、点数を動かした量 | |
| ブラックボックス | 中身が人に読めないモデル |
学生が入力するセルは、このプレビューでは空白です。
点数は、入力と重みでできている
単純なモデルは、入力に重みをかけて足し、点数にします。重みが大きいほど、その入力が点数を強く動かします。重みがマイナスなら、点数を下げます。
1つの入力が点数を動かした量を、寄与といいます。寄与は、入力の値に重みをかけた数です。
例: 融資の点数の内訳
| 入力 | 値 | 重み | 寄与 |
|---|---|---|---|
| 年収(百万円) | 4 | 2 | 8 |
| 借金の件数 | 2 | -3 | -6 |
| 勤続年数 | 5 | 1 | 5 |
| 合計 | 7 |
学生が入力するセルは、このプレビューでは空白です。
寄与を1つずつ出す
# 融資の点数は、入力に重みをかけて足したものです。
# 入力は、年収(百万円)、借金の件数、勤続年数の順です。
weights = [2, -3, 1]
person = [4, 2, 5]
total = 0
for n in range(3):
effect = weights[n] * person[n]
print(n, effect)
total = total + effect
print("点数:", total)
# person[1] を 1 に変えて、点数がいくつになるか見てください。
ラボで、入力ごとの違いを比べる
ラボのデータで、入力ごとの違いを比べます。天気(晴れと雨)と、曜日(週末と平日)が、1日の貸出台数をどれだけ動かすかを、平均で並べます。
これは、モデルの中を見る方法ではありません。データの上で、どの入力が結果と一緒に動くかを見る方法です。
天気と曜日ごとの平均の台数
docker exec jupyter python3 -c "import csv; r=list(csv.DictReader(open('hires.csv'))); m=lambda f: round(sum(int(x['hires']) for x in r if f(x))/sum(1 for x in r if f(x)),1); print('sunny', m(lambda x: x['weather']=='sunny'), 'rainy', m(lambda x: x['weather']=='rainy')); print('weekend', m(lambda x: x['weekday'] in ('Sat','Sun')), 'weekday', m(lambda x: x['weekday'] not in ('Sat','Sun')))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
重みが大きい入力ほど、結果の原因だと考えがちです。重みは、そのモデルの中での効き方で、現実の原因ではありません。単位を変えると重みも変わるので、同じ幅だけ動かして比べてください。
入力を1つだけ変えて、点数を見る
入力を1つだけ変えて、点数がどう動くかを見る方法があります。ほかの入力は、そのままにします。
点数の変化が大きい入力が、その人の判断に強く効いています。モデルの中が読めなくても、この方法は使えます。
例: 1つずつ1増やす
| 変えた入力 | 点数 | 変化 |
|---|---|---|
| なし(元の点数) | 7 | 0 |
| 年収を1増やす | 9 | 2 |
| 借金の件数を1増やす | 4 | -3 |
| 勤続年数を1増やす | 8 | 1 |
学生が入力するセルは、このプレビューでは空白です。
断られた人に、理由と次の道を伝える
説明の目的は、断られた人が次に何をすればよいかを知ることです。「借金の件数が点数を最も下げています。1件減らすと点数が3上がります」のような説明が役に立ちます。
ただし、複雑なモデルでは入力が絡み合います。1つ変えた結果が、人によって違うこともあります。
さらに挑戦: くもりの日も
ラボのコマンドを変えて、くもりの日の平均も表示させてください。晴れ、くもり、雨の順に、台数はどう並びますか。
その並びを使って、「雨の日は、晴れの日より何台少ないか」を、客に伝える一文にしましょう。