Edited at

Watson Openscaleでscikit-learn モデルの説明性を確認する 【動作確認編】


はじめに

Watson Openscaleの機能を一通り試してみたい場合、チュートリアル 対話式セットアップの手順に従うのが早道です。

しかし、この手順では、自分で作ったモデルをデプロイする際必要になる手順で一部省略されている箇所があり、自分で作ったモデルを管理対象にしたい場合わからない点がでてきます。

当記事は、この足りない部分を補う目的で記載しました。

記事がかなり長くなったので、当記事は「動作確認編」として第二部の位置づけです。

セットアップ手順は別途「セットアップ編」として掲載しています。


事前準備

セットアップ時に必要となるAPIトークンOpenScaleGUIDを事前に入手しておきます。


APIトークン

https://cloud.ibm.com/resources の管理画面から以下の手順でトークンを取得します。

メニューから「管理」「アクセス(IAM)」

下の画面で「IBM Cloud APIキー」->「IBM Cloud APIキーの作成」

「APIキーの作成」のダイアログが出たら、api-keyなど適当な名前を入れて「作成」をクリック

下の画面になったら、「コピー」をクリックしてAPIキーをクリップボードにコピーし、テキストエディタなどに保存しておきます。


GUIDの確認

次にOpenScaleのGUIDの確認をします。

まず、 https://cloud.ibm.com/resources でIBM Cloudのリソース一覧を表示してServicesからOpenScaleを探します。リストのうち、一番左の「名前」の欄はリンクになっているのですが、それ以外の列にマウスポインタをあわせて、クリックします。

すると、次のような画面が出ますので、GUID:xxxxの右にあるクリップボードアイコンをクリックしてください。GUIDがクリップボードにコピーされますので、テキストエディタなどで保存します。


テスト用Notebookの読み込み

テスト用Notebookを opnescale-test.ipynbからダウンロードします。

このnotebook全体は、下記のリンク先から確認することができます。

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

次にJupyter Notebookに今ダウンロードしたopnescale-test.ipynbを読み込みます。

環境はWatson StudioのJupyterであっても、PC anacondaのJupyterであっても構いません。


認証情報の設定

読み込んだNotebookの上部には、先ほど確認したOpenScale API用認証情報を設定するためのセルがあります。ここに、下の図のように2つの認証情報を設定します。


Notebookの実行

後は、Notebookのセルを上から順に実行すると説明性の機能を呼び出すことが可能なはずです。

コードの重要な部分を順に解説します。


サブスクリプションIDとトランザクションIDの取得

サブスクリプションID -> サブスクリプションオブジェクト -> 該当サブスクリプションの先頭トランザクションIDを順に取得しています。

# サブスクリプション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)

次のような結果が帰ってくるはずです。

subscription_uid =  3ec6ef2e-9b77-457c-a886-9d8fa3d1c127

transaction_id = 2ca6c049a6489f5b853c829e261db981-1


説明性の要求

取得したitansaction_idに対して説明性を要求します。処理には数秒から数十秒の時間がかかります。

# 説明性の要求

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

次のような結果になります。

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

Looking for explanation for 2ca6c049a6489f5b853c829e261db981-1

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

in_progress
finished

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


管理テーブルの内容表示

次の3つの関数は、管理テーブルの内容を表示するためのものです。

# 該当サブスクリプションに対してpayload loggingの表示


subscription.payload_logging.get_table_content(limit=5)

# 該当サブスクリプションに対してパフォーマンスモニタテーブルの表示


subscription.performance_monitoring.get_table_content(limit=5)

# 該当サブスクリプションに対して説明性テーブルの表示


subscription.explainability.get_table_content(limit=5)


説明性の詳細表示

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

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


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

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

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

'contrastive_explanations': {'pertinent_positive': [{'importance': '0.8481750931055593',
'feature_name': 'sepal_length',
'feature_value': '5.1'},
{'importance': '0.0',
'feature_name': 'sepal_width',
'feature_value': '3.0'},
{'importance': '1.6767040939512925',
'feature_name': 'petal_length',
'feature_value': '1.4'},
{'importance': '1.4479540271933096',
'feature_name': 'petal_width',
'feature_value': '0.2'}]},
'predictions': [{'value': '0',
'explanation': [{'weight': 0.8495702931809025,
'feature_name': 'petal_length',
'feature_range': {'max': '1.60', 'max_inclusive': True}},
{'weight': 0.10854468102412147,
'feature_name': 'sepal_width',
'feature_range': {'min': '3.30', 'min_inclusive': False}},
{'weight': -0.038158434157534685,
'feature_name': 'petal_width',
'feature_range': {'max': '0.30', 'max_inclusive': True}},
{'weight': -0.0037265916374412296,
'feature_name': 'sepal_length',
'feature_range': {'max': '5.10', 'max_inclusive': True}}],
'probability': 0.8796816489561845},
{'value': 'Others', 'probability': 0.1203183510438155}],
'status_cem': 'finished',
'input_features': [{'name': 'sepal_length',
'value': '5.1',
'feature_type': 'numerical'},
{'name': 'sepal_width', 'value': '3.5', 'feature_type': 'numerical'},
{'name': 'petal_length', 'value': '1.4', 'feature_type': 'numerical'},
{'name': 'petal_width', 'value': '0.2', 'feature_type': 'numerical'}],
'status': 'finished',
'asset': {'id': '2cd7e89c-4c6f-421e-8944-c5cce1bb2fce',
'name': 'scikit-learn lr model',
'type': 'numeric_categorical',
'deployment': {'id': '212e1882-b5a8-4f48-bf09-42dd6b0875b4',
'name': 'scikit-learn lr deployment'}}}}


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

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

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

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