はじめに
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 detailsとExplainabilityの欄にチェックがついていれば設定は正常にできています。このことを確認した上で、画面左上の「←」アイコンをクリックして、元の画面に戻します。
説明性要求の呼出し
これで設定はすべて終わったので、最初の説明性要求を行います。呼出しはPythonのコードで行う形になります。
これからの手順で使うJupter Notebookは、以下のURLによりブラウザから全体にアクセス可能です。
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キーを押します。
しばらくすると、下のように説明性の画面が表示されるはずです。