Edited at

Python Function(回帰モデル)をOpenScale説明性の管理対象とする


はじめに

Watson StudioのSPSS Modelerを使って回帰モデルをWebサービス化する

Watson Machine LeaningにPython Functionを登録する

と続く三部作シリーズの第三部です。

三つの手順を全部まとめると、SPSS Modeler Flowで作成した回帰モデルをOpenScale説明性の対象とすることが可能となります。


データ準備

第一部で利用したboston-all.csvを再度利用します。

今度の目的は、学習用テーブルにロードしてOpenScaleセットアップで必要なdb2テーブルを作ることです。

Jupyter Notebookは、説明性の設定を行った後、テストのため利用します。

ファイル名
リンク
目的

boston-all.csv
boston-all.csv
DB2テーブル作成用

spss-openscale-test.ipynb
spss-openscale-test.ipynb
OpenScale SPSSで説明性テスト用


環境準備

Watson Openscaleでscikit-learn モデルの説明性を確認する 【セットアップ編】が一通り終わっていることを前提とします。手順も一部省略して書いているところがありますが、細かい手順はこちらの記事を参照してください。


学習用テーブルの準備

上の記事と同じ手順で、boston-all.csvデータをDb2のテーブルにロードします。テーブル名はBOSTONとしてください。


OpenScaleの設定

https://aiopenscale.cloud.ibm.com/aiopenscale からOpenScaleの管理画面を起動します。

下の画面で「Add Deployment」をクリックします。

その次のdeploymentの選択画面ではPython Functionのdeploymentとして登録した"SPSS boston deployment"を選択して、「Confugure」とします。

その次の画面では、「Configure monitors」を選択します。

下の画面になるので、Data typeは、「Numerical/Categorical」を、Algorithm typeには「回帰」を選択して、「Save」とします。

下の画面になったら、Pyhthon FunctionのWeb Deployment管理画面を出します。

一番右のテストタブから、下記のjsonを張り付けてテストを実行してください。

{"fields": ["CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", 

"AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT"],
"values":
[[0.00632,18.0,2.31,0.0,0.538,6.575,65.2,4.09,1.0,296.0,15.3,396.9,4.98],
[0.02731,0.0,7.07,0.0,0.469,6.421,78.9,4.9671,2.0,242.0,17.8,396.9,9.14]]}

テスト実行後のDeployment管理画面は下のようになります。

この状態で、OpenScaleの管理画面に戻り、画面左の「Model Details」をクリックします。

Webサービスの呼出しが正しく行われていると、下の画面右下の「Begin」のボタンがアクティブになっているはずなので、そのボタンをクリックします。

その次のモニタリングの構成の画面では、左側の「手動構成」を選んで「次へ」とします。

下の画面では、学習用データをロードしたDb2の接続情報を入力します。詳しい内容は、Watson Openscaleでscikit-learn モデルの説明性を確認する 【セットアップ編】を参照してください。

その先の「訓練テーブルを選択」の画面では、事前に学習用データをロードしたテーブルのスキーマ名(接続ユーザー名と同じ)とテーブル名(BOSTON)を入力します。

次の「予測された値を含む列」はPRICEを選択します。

その次の「AIデプロイメントのトレーニングに使用する特徴量」はデフォルトで全部選ばれているはずなので、そのまま「次へ」とします。

その次の「テキストの特徴量と分類の特徴量」はデフォルトで何も選ばれていないはずなので、そのまま「次へ」を選びます。

デプロイメント予測列の選択」は$E-PRICEを選択します。

設定が全部終わると下のような画面になります。設定値に問題がないことを確認した上で「保存」をクリックします。

Model detailsExplainabilityの欄にチェックがついていれば設定は正常にできています。このことを確認した上で、画面左上の「」アイコンをクリックして、元の画面に戻します。


説明性要求の呼出し

これで設定はすべて終わったので、最初の説明性要求を行います。呼出しはPythonのコードで行う形になります。

これからの手順で使うJupter Notebookは、以下のURLによりブラウザから全体にアクセス可能です。

https://github.com/makaishi2/sample-data/blob/master/notebooks/spss-openscale-test.ipynb


Jupyter Notebookの読み込み

事前にダウンロードしたspss-openscale-test.ipynbをWatson StudioのJupyter Notebookとして読み込みます。


認証情報の設定

Notebookの2番目のセルにあるcredentail情報を設定します。

詳細は Watson Openscaleでscikit-learn モデルの説明性を確認する 【動作確認編】 を参照してください。


Notebookの実行

あとは、Notebookのセルを上から順に shift + enterで実行すると、spss modelerの回帰モデルの説明性を検証することが可能です。


Jupyter Notebookコーディングの解説

上で実行したJupyter Notebookの要点を解説します。


OpenScale APIの初期化

以下のコードでOpenSCale APIの初期化を行います。

# 追加モジュールの導入

!pip install --upgrade ibm-ai-openscale --no-cache | tail -n 1

# OpenScaleのcredential情報設定
AIOS_CREDENTIALS = {
"instance_guid": "xxxx",
"apikey": "xxxx",
"url": "https://api.aiopenscale.cloud.ibm.com"
}

# OpenScale APIの初期化
from ibm_ai_openscale import APIClient
from ibm_ai_openscale.engines import WatsonMachineLearningAsset
aios_client = APIClient(AIOS_CREDENTIALS)
aios_client.version


Subscription IDからTransaction IDの取得

OpenScaleで説明性の機能を呼び出すためにはOpenScale内でトランザクションごとにユニークに採番しているTransaction IDを取得する必要があります。

以下のコードは OpenScale APIを利用してSubscription IDからTransaction IDを取得するためのものです。

# Subscriptionの一覧表示

from ibm_ai_openscale.supporting_classes import *
aios_client.data_mart.subscriptions.list()

# サブスクリプションIDの取得
subscription_uid = aios_client.data_mart.subscriptions.get_uids()[0]
print('subscription_uid = ', subscription_uid)

# サブスクリプションオブジェクトの取得 (いろいろな操作が可能になる)
subscription = aios_client.data_mart.subscriptions.get(subscription_uid)

# 対象サブスクリプションの先頭トランザクションIDの取得
transaction_id = subscription.payload_logging.get_table_content().scoring_id[0]
print('transaction_id = ', transaction_id)


説明性機能の呼出し

transaction idがわかればそれを引数に説明性の要求を出すことが可能です。以下のコードはその呼出し例を示しています。

# 説明性の要求

explanation = subscription.explainability.run(transaction_id, background_mode=False)

呼出しがうまくいくと、以下のような結果が帰ってくるはずです。

================================================================

Looking for explanation for c73b8c87df629dc722e382b90f02f4da-1

================================================================

in_progress........
finished

---------------------------
Successfully finished run
---------------------------


説明性の詳細表示

次の関数呼び出しで、特定の説明性要求に対する詳細結果を取得できます。

# 説明性の最初の行の詳細表示

subscription.explainability.get_table_content()['explanation'][0]

こんな結果が帰ってきます。

{'entity': {'status_lime': 'finished',

'predictions': [{'value': '30.003843377020388',
'explanation': [{'weight': 0.3321053247301002,
'feature_name': 'LSTAT',
'feature_range': {'max': '6.95', 'max_inclusive': True}},
{'weight': 0.2215896559235419,
'feature_name': 'PTRATIO',
'feature_range': {'max': '17.40', 'max_inclusive': True}},
{'weight': -0.18185091967246045,
'feature_name': 'RAD',
'feature_range': {'max': '4.00', 'max_inclusive': True}},
{'weight': 0.15330666524447153,
'feature_name': 'ZN',
'feature_range': {'min': '12.50', 'min_inclusive': False}},
{'weight': 0.111147434429426,
'feature_name': 'TAX',
'feature_range': {'max': '330.00',
'min': '279.00',
'max_inclusive': True,
'min_inclusive': False}}]}],
'status_cem': 'not_supported',
'input_features': [{'name': 'CRIM',
'value': '0.00632',
'feature_type': 'numerical'},
{'name': 'ZN', 'value': '18.0', 'feature_type': 'numerical'},
{'name': 'INDUS', 'value': '2.31', 'feature_type': 'numerical'},
{'name': 'CHAS', 'value': '0.0', 'feature_type': 'numerical'},
{'name': 'NOX', 'value': '0.538', 'feature_type': 'numerical'},
{'name': 'RM', 'value': '6.575', 'feature_type': 'numerical'},
{'name': 'AGE', 'value': '65.2', 'feature_type': 'numerical'},
{'name': 'DIS', 'value': '4.09', 'feature_type': 'numerical'},
{'name': 'RAD', 'value': '1.0', 'feature_type': 'numerical'},
{'name': 'TAX', 'value': '296.0', 'feature_type': 'numerical'},
{'name': 'PTRATIO', 'value': '15.3', 'feature_type': 'numerical'},
{'name': 'B', 'value': '396.9', 'feature_type': 'numerical'},
{'name': 'LSTAT', 'value': '4.98', 'feature_type': 'numerical'}],
'status': 'finished',
'asset': {'id': '8b4557af-16b2-4e5b-9257-4aeb6c8876a4',
'name': 'SPSS boston regression',
'type': 'numeric_categorical',
'deployment': {'id': '1ebb75e2-696a-40a7-b591-30f3ddd2b770',
'name': 'SPSS boston deployment'}}}}


OpenScale管理画面からの説明性の表示

最後に上で得られた詳細情報をOpenScaleの画面から確認します。

画面左上から2つめのアイコンを選び、更に検索窓に先ほど得られたトランザクションIDを入力してEnterキーを押します。

しばらくすると、下のように説明性の画面が表示されるはずです。