【GCP】BigQuery Explainable AI でモデルの予測結果を説明させる

こんにちは。SCSKの山口です。

今回は、過去のブログで作成したモデルが算出した予測値を説明させてみよう。の回です。

以前作成した線形回帰モデルで、工場の製造コスト、人件費、生産効率、従業員数から、工場の「原材料費」を予測するモデルを作成し、下記の予測値を出力として得ました。

この結果、モデルがどうやって算出したのか気になりませんか、、、?

そんな時に役立つのが、XAIとも呼ばれるBigQuery Explainable AI です。早速見ていきましょう。

 

BigQuery Explainable AI 

BigQuery Explainable AI の概要  |  Google Cloud

Explainable AI は、データ行の各特徴がどのように予測結果に影響を与えるかを定義することで、予測 ML モデルが分類タスクと回帰タスクに対して生成する結果の理解を容易にします。この情報を「特徴アトリビューション」と呼びます。

カンタンにいうと

特徴アトリビューション = データ内の各特徴が予測値にどの程度影響を及ぼしたか
です。特徴アトリビューションを活用することで、
  • モデルが期待通りに動作していることの確認
  • モデルのバイアスを認識すること
  • モデルやトレーニングデータの改善方法を知ること

が可能です。

ローカルとグローバルの説明可能性

説明可能性には、ローカルの説明可能性とグルーバルの説明可能性の2種類があります。

それぞれの説明可能性から「ローカルな特徴重要度」と「グローバルな特徴重要度」を得ることができます。

ローカルの説明可能性

説明された各列の特徴アトリビューション値を返します。

これらの値は、それぞれの特徴がベースラインの予測に対してどの程度影響を及ぼすかを示します。

ローカル説明関数の「ML.EXPLAIN_PREDICT」を使用することで取得可能です。

グローバルの説明可能性

データセット全体の特徴アトリビューションを集計し、モデルに対する特徴の全体的な影響を返します。

絶対値が大きいほど、特徴がモデルの予測により大きな影響を与えたことを示します。

グローバル説明関数の「ML . GLOBAL _ EXPLAIN」を使用することで取得可能です。

 

ここから実践に入りますが、以前作成したモデルは単一のテーブルで学習させたので、今回はローカルの説明可能性を試してみます。

 

実践:ローカルな特徴重要度を取得

ローカル説明関数の「ML.EXPLAIN_PREDICT」を使った下記クエリを実行します。

SELECT
  *
FROM
  ML.EXPLAIN_PREDICT( MODEL `yamaguchi_test_bqml.test_model_liner_reg`,
    (
    SELECT
      IFNULL(cost_manufacturing, 0) AS cost_mf,
      IFNULL(cost_material, 0) AS label,
      IFNULL(cost_employees, 0) AS cost_emp,
      IFNULL(manufacturing_line, 0) AS manu_line,
      IFNULL(manufacturing_efficiency, 0) AS manu_eff,
      IFNULL(employees, 0) AS emp
    FROM
      `yamaguchi_test_bqml.test`
    WHERE
      employees=476
    ),
    STRUCT(5 AS top_k_features)
  )

上記クエリのサブクエリのSELECT句

SELECT IFNULL…

で評価データを生成するクエリを入力します。今回は以前のブログで実際の予測をする際に使用したクエリを流用します。

また、

STRUCT(5 AS top_k_features)
の部分で、影響力が上位何番目までの特徴を見るかを指定します。今回は上位5個(すべて)の特徴を出力します。
出力結果は下記のとおりです。
  • predicted_label:モデルが算出した予測値
  • top_feature_attributions.feature:特徴名(影響度で降順)
  • top_feature_attributions.attribution:各特徴の影響度
  • baseline_prediction_value:モデルの予測におけるベースライン

baseline_prediction_valueについてちょっと寄り道します。

モデルを作成する際、最初にある程度の”アタリ”をつけたうえで、そこから微調整をかけていくのですが、baseline_prediction_valueは「最初につけたアタリ」を指します。

調べた結果、

モデル学習のトレーニングに使われたデータ内での 目的変数の平均値

が採用されていました。

このベースラインの値を基準として、モデルが各特徴の影響度を加味して予測値を算出してくれます。下記のイメージです。

最初にアタリをつけたベースライン(青矢印)に対して、各特徴の影響を与えていきます。するとベースラインの値の青丸が調整され、赤丸になっていきます。

こうしてベースラインの青矢印が各特徴に影響され、赤矢印のような動きをして予測値を算出してくれます。

今回はベースラインの方が正解値に近い残念な結果になっています。。。

ただ、各特徴がどの程度影響を与えた結果、予測値がどう外れているかをある程度掴むことができました。この情報をモデルの性能改善へと活用することが可能です。

モデルの性能改善については今後ブログ化していきます。

 

まとめ

今回は、以前作成した線形回帰モデルの予測結果をExplainable AI(XAI)を使って説明させてみました。

どの特徴が予測結果にどの程度影響を与えているかが数値的につかめるので、かなり便利だと思いました。

この情報をどう生かすべきか。については今後検証してブログ化していこうと思うのでご期待ください。
最後までご覧頂きありがとうございました。
著者について

Google Cloud歴2年目です。
日々捌ききれないほどのインプットを浴びているので、本ブログをアウトプットの場として活用しています。
-----
保有資格:応用情報技術者、Google Cloud 認定資格全冠(11冠)
好きな(よく触っている)サービス:BigQuery、Cloud Functions、Data Fusion

山口翔平をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(Google Cloud)は、Google Cloudの多彩なAIや各種サービスを活用したワンストップソリューションを提供します。SCSKのノウハウや体制を有効活用し、業務課題の解決に必要な全体検討と組み合わせで、最適な業務実装まで支援します。

AI・MLGoogle Cloudクラウドソリューション
シェアする
タイトルとURLをコピーしました