LoginSignup
4
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-07-13

はじめに

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」をクリックします。

スクリーンショット 2019-07-13 17.52.14.png

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

スクリーンショット 2019-07-13 17.55.59.png

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

スクリーンショット 2019-07-13 17.56.07.png

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

スクリーンショット 2019-07-13 17.57.35.png

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

スクリーンショット 2019-07-13 17.58.01.png

一番右のテストタブから、下記の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管理画面は下のようになります。

スクリーンショット 2019-07-13 19.24.38.png

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

スクリーンショット 2019-07-13 17.58.01.png

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

スクリーンショット 2019-07-13 19.06.42.png

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

スクリーンショット 2019-07-13 19.06.51.png

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

スクリーンショット 2019-07-13 19.10.01.png

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

スクリーンショット 2019-07-13 19.10.29.png

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

スクリーンショット 2019-07-13 19.10.40.png

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

スクリーンショット 2019-07-13 19.10.54.png

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

スクリーンショット 2019-07-13 19.11.07.png

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

スクリーンショット 2019-07-13 19.11.16.png

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

スクリーンショット 2019-07-13 19.11.28.png

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

スクリーンショット 2019-07-13 19.11.56.png

説明性要求の呼出し

これで設定はすべて終わったので、最初の説明性要求を行います。呼出しは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キーを押します。
しばらくすると、下のように説明性の画面が表示されるはずです。

スクリーンショット 2019-07-13 19.49.13.png

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2