キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
AI Experience Japan l バーチャルイベント l 2020年7月14日(火) 登録受付中

AIの予測結果に対する理由説明はどうしていますか?

Highlighted
NiCdバッテリー

予測結果の説明

皆さんの活躍フィールドにて、実際に予測結果を業務に活用する際に、活用部門から「AIが何故?どうやってこの値を予測したのか?を知りたい」と言われたことは無いでしょうか?
そんな状況をどうやって打破されたのか?どうやって業務適用されたのか?の知見を可能な範囲でアドバイスいただきたいです。

予測業務を実施している部門が、何かしらの理由でAIを活用し始めたい、となったとします。
そうなると、恐らく大半の活用部門は、今までの予測業務を、AIではなく、人知の範囲で何かの予測をしてるはずです。
その場合、恐らく
・同一(もしくは類似)商品の、前月の販売数が●●で、市場の伸びがxx%だから、今月の見込みは△△だと思います。
・去年、■■というキャンペーンをやった結果、売り上げがxx%伸びたので、今回も●●%伸びると思います。
のように、"人間が理解しやすい基準と比較した上で、納得性のある説明をしている"というのが大半だと思います。

しかし、AIを業務に適用しようとすると、AIは学習データ全体を見たうえで今回の予測値を出すため、人間が理解できる予測理由が説明がつきづらいです。
AIの予測値は「何か特定の基準をベースに今回の予測値を出したわけではない」ということを理解するところまでは進めるのですが、
実際に予測値を何かしらの承認の場に出す場合に、「AIが何故この値を出したのか、理由の説明が必要」と求められることが多いです。

DataRobotでは「特徴量のインパクト」や「リーズンコード」で部分的には説明することが可能だとは思います。
が、本質的に1件のローデータの予測理由を説明しているわけではないので、事業の承認者にどうやって納得していただく方法があるのか?というのを、差しさわりない範囲で良いので、
こうやって通したよーとかお教えいただけると幸いでございます。

0 件の賞賛
5件の返信5
Highlighted
データサイエンティスト
データサイエンティスト

こんにちは、ご質問ありがとうございます。

リーズンコード(現在は「予測の説明」という機能)に関して、「本質的に1件のローデータの予測理由を説明しているわけではないので」とご説明いただきました。実は予測の説明は、UI上で表示されるテストデータ内の上位下位3件だけでなく、ローデータ1件づつに計算することができるのですが、ご存知でしょうか?そちらに関しては、このレファレンスページの、「予測の説明の生成とダウンロード」に記載がありますので、お試しいただけますでしょうか?こうすることで予測対象となるデータ1行づつに対して、予測の説明を出すことが出来ます。それによって、例えば購入確率の予測であれば、同じ高い購入確率も違った理由で高くなっていることを見ることが出来ます。

「特徴量のインパクト」に関しては、ご指摘の通り、テストデータ全体からの傾向ですので、一件ずつのインサイトを得ることは出来ません。

Highlighted
NiCdバッテリー

@akira 

ご返信ありがとうございます!
(引き続き、シバタさんからの返信に興奮しております!)

リーズンコードをローデータ毎にDLできる機能についてのご連絡ありがとうございます。
その機能については既に使用させていただいているため、ひとまずは問題ないかなと思っています。
(寄与度が高い順に1位~xx位まで乗っている説明変数一覧ですよね?「+++」とか「---」とか表現されているもの)
 →もしそうでないならすみません。もう一度確認します。
 ※また前提としてお伝えできておらず申し訳なかったのですが、今回は活用部門が予測値を事業に適用する「意志決定」のための理由として使いたいものとなります。

上記だとした場合、上記寄与度の算出方法についてかなり深く突っ込んで調査したのですが、あれって「その説明変数1つに対してWhat-if法を用いた加重平均との乖離数を大きい順に並べたもの」ですよね?
※モデルのアルゴリズムによって計算方法が違う、ということも確認はさせていただいております。

計算方法が上記What-ifであれば「ローデータ毎の予測時に最も寄与した説明変数≠寄与度1位の説明変数」なのではないか?と思っています。
何故そう考えたかというと、あくまで「その説明変数が変化した場合に値が大きく変わるだけ」であり、その予測値を出す時に「最も有効だった説明変数ではない」、ですよね?
「最も有効だった説明変数」とは、例えばですが、木系のアルゴリズムであれば、頂点に近い分岐であればあるほど「有効な説明変数」というイメージです。
活用部門が知りたいのは「何故その予測値が出たのか?」であり「その説明変数がどの程度予測値をブラせたのか?」ではないので、どうしようかなぁ?と思っていました。

しかもあの寄与度の値は、ローデータ毎に「+++」と「---」のスケールが違いますよね・・・?
なので、活用部門の意志決定に使うと、意志決定側は「AIの予測結果の説明に対して正しい理解をしていない=誤解してAIを活用しかねない」という状態になるかな、と。

もし上記について理解が謝っていましたら、是非ご指摘ください。
DataRobotについてより正確に理解したいので。

世の中、説明可能AI(XAI)がまだまだ研究段階であることから、現時点でのブレイクスルーが無いのだろうな、というのは理解してるので、
その状態で、皆さんどうされているのでしょうか?

Highlighted
データサイエンティスト
データサイエンティスト

仕様面について少しご訂正させて頂きますね。予測の説明については独自のノウハウを用いたロジックを用いており、詳細のご説明が出来ないという前提がございますが、概ねご理解の内容に近いことをしています。

ただし、以下3点ご訂正とコメントさせて頂きます。

・アルゴリズム毎に計算方法が違う 

→ 計算方法は統一されています。ただし、計算式にモデルの予測が含まれますので、モデル間で計算結果は変わります。

しかもあの寄与度の値は、ローデータ毎に「+++」と「---」のスケールが違いますよね・・・?

→What-if的なアプローチは行単位でなくサンプリングした集団単位で行っていた結果を用いていますので、行間でスケールは同じです。ただし、「+++」や「---」は寄与値をある閾値でレベル分けをした結果ですので、同じ「+++」でも厳密な寄与値は変わっています。(予測の説明の並び順には反映されます。)

仰る通り、確かに少し変わります。大変失礼致しました。

・”ローデータ毎の予測時に最も寄与した説明変数≠寄与度1位の説明変数”なのでは無いか?

ここについては仰る通りで、その行に対して例えばツリー系で言えば最大の情報量を持つ説明変数とその値には必ずしもなりません。しかし逆に、その行だけに局所的に効いている説明変数ではなく、集団に対して効いている説明変数で予測の説明をしてくれますので、より汎用的に納得ができる説明を与えてくれているとも考えられます。

(余談ですが、予測の説明については英語版のDataRobotサイトにてWhitePaperがダウンロード出来るようになっており、他のXAIの例としてLIMEとの比較優位などの情報も掲載しておりまず。ご興味ありましたらぜひ。)

https://www.datarobot.com/resource/xemp-prediction-explanations/

 

いずれにしても、呼び掛けて頂いている通り、皆様が実際にどのように活用部門にご説明しているかはとても興味があります。ご経験がある方、ぜひこのスレッドに書き込んで頂ければ幸いです!

Highlighted
NiCdバッテリー

@Isao 

ありがとうございます!

ご連絡いただいた3点、正確に理解できたのでよかったです。ありがとうございます!

・アルゴリズム毎に計算方法が違う 
 →つまり、計算方法は同じだが、モデルの予測値を使って寄与度(strength)を算出するため、BPやアルゴリズムによって値が変わる、という理解ですよね。

・ローデータ毎に「+++」と「---」のスケールが・・・

 →ここはもう少し突っ込んでお聞きしたいのですが、「サンプリングした集団単位でWhat-ifアプローチをしている」とのことですが、
  何かしらの手法でローデータをクラスタリングして、そのクラスタ内でWhat-ifをして、加重平均との差をとる、みたいなイメージでしょうか?
  だとすると、ローデータ間でのスケールは厳密に言えば違いますが、1ローデータが複数のクラスタに含まれることを考えると、ある程度スケールは合う、という理解でしょうか?
  (文面だと難しいですね。。。)

・”ローデータ毎の予測時に最も寄与した説明変数≠寄与度1位の説明変数”なのでは無いか?

 →「その行だけに局所的に効いている説明変数ではなく、集団に対して効いている説明変数で予測の説明をしてくれます」
  →上記文面の「集団」というのは、1つ前の質問のクラスタのことでしょうか?
   今回活用部門は、「その行だけに局所的に効いている説明変数を知りたい」というリクエストだったので、やはり難しいですよね。。。
    →ただ、本質的には機械学習というのは「その行だけに局所的に効く」という考え方自体が間違っているのではないか?と理解しています。
     1つの説明変数であったとしても、学習したデータを総合的に分析して重みを計算しているため、その1点に対するピンポイントの説明って難しいと思っています。
     つまり、やはり人は人が理解しやすい形で納得できる説明が欲しい、が、MLはそういうものじゃない、という原点に戻ってきてしまいますが。。。

なかなか、AIの事業適用は、まだまだ難しいですね。
画像判断等のわかりやすいものであれば、プロダクト化しやすのですが。

Highlighted
データサイエンティスト
データサイエンティスト

>・ローデータ毎に「+++」と「---」のスケールが・・・

申し訳ありません、こちら再度仕様を確認した所、処理の過程で確かに行間で「+++」と「---」のスケールが少し異なることになります。坂本様のご理解で正しかったです。大変失礼しました。

ただ、本質的には機械学習というのは「その行だけに局所的に効く」という考え方自体が間違っているのではないか?と理解しています。
>1つの説明変数であったとしても、学習したデータを総合的に分析して重みを計算しているため、その1点に対するピンポイントの説明って難しいと思っています。
>つまり、やはり人は人が理解しやすい形で納得できる説明が欲しい、が、MLはそういうものじゃない、という原点に戻ってきてしまいますが。。

ここについてはやはり需要があることから、MLでも研究されてきていますね。DataRobotが全体的な納得性のある予測な説明を出してくれる一方で、まさにその行だけに特化したピンポイントの予測結果の貢献度を分解する手法も出てきています(Shapley Valuesなどが代表的ですね。)

ただ、「人が理解しやすい形」が前者か後者というのは一概には言えないと個人的には思います。例えばモデルが少しでも過学習していたら、後者であれば行によってはそれが如実に出てきてしまうことになります。全体的に素晴らしい性能を持ったモデルでも、ある特殊な条件を持った行で偏った貢献度の説明がなされてしまった場合、モデル全体が疑われてしまうというケースもあると思います。もちろんこれらを可視化することに意味はあると思いますが、今のDataRobotの予測の説明はそうしたリスクの少ない、安定した予測の説明を提供してくれていると考えています(・・手前味噌ですが。)

皆様もいかがでしょうか?「自分はこのように活用部門に説明しています」みたいなお話がありましたらぜひお願いします。

0 件の賞賛