Help us understand the problem. What is going on with this article?

IBM Watson Studio AutoAI: Modeling for the rest of us 日本語解説 #3 補足

IBMのAutoAIのチュートリアルIBM Watson Studio AutoAI: Modeling for the rest of us日本語解説 #3補足です。

このページではチュートリアルで使用する以下のAutoAI Model Accessnotebookファイルの中身の説明をします。
- ダウンロード先: AutoAI Model Access: AutoAIModelAccess.ipynb

なので、まず日本語解説 #3を実施した上で、中身がわからない場合に参照してください。

0. 事前準備

日本語解説 #3
が完了していることが前提です。

あるいは、日本語解説 #3をやりつつ、こちらも参照ください。

1. AutoAIModelAccess.ipynb の解説

このノートブックでは、Watson Machine Learning(WML)APIを使用して、使用可能なモデルをリストして、使用可能なモデルを指定します。

次に、Churn modelを使用していくつかのレコードを予測します。

最後に、Deploymentを削除する方法を示します。

Watson Machine Learning(WML)APIの詳細情報は以下を参照してください。

1. notebook環境にWatson Machine Learning API clientの導入

Watson Studioの標準notebook環境にはWatson Machine Learning API clientが導入されていませんので、以下のように、仮想環境に対して直接pipコマンドを利用してWatson Machine Learning API clientを導入します。

# Install the Watson Machine Learning API client
!pip install watson-machine-learning-client-v4

2. Machine Learning Service の資格情報を設定

ここでMachine Learning Serviceを使用するための、自分のMachine Learning Serviceの資格情報をセットします。

wml_credentials = {
  "apikey": "",
  "instance_id": "",
  "url": ""
}

3. 必要なライブラリをImportし、WatsonMachineLearningAPIClientのインスタンスを作成

引数には2で設定したwml_credentialsをセットします。

from watson_machine_learning_client import WatsonMachineLearningAPIClient

client = WatsonMachineLearningAPIClient(wml_credentials)

4. 今現在自分のMachine Learning Serviceに作成されているModelを表示

repositoryのlist_modelsメソッドを呼び出して、 今現在自分のMachine Learning Serviceに作成されているModelを出力します。

尚、ここはModelの表示の仕方をを示しているだけで、後続作業には関係がありません。

API Doc参考: https://wml-api-pyclient-dev-v4.mybluemix.net/#client.Repository.list_models

# List models already in the repository
client.repository.list_models()

以下のような感じで出力されます。ちょっと列がずれてますが、項目と値が表示されています。2つ以上モデルを作っていれば複数行表示されます。
image.png

5. 今現在自分のMachine Learning Serviceに作成されているDeploymentを一覧表示

deploymaneのlistメソッドを呼び出して、 今現在自分のMachine Learning Serviceに作成されているDeploymentを出力します。

ここで表示されたNAMEを次の詳細出力で利用しています。

API Doc参考: https://wml-api-pyclient-dev-v4.mybluemix.net/#client.Deployments.list

# List the deployed models
client.deployments.list()

以下のような感じで出力されます。ちょっと列がずれてますが、項目と値が表示されています。2つ以上モデルを作っていれば複数行表示されます。
image.png

6. Deployment 「Churn model deployment」の詳細を取得し、そこからguidを取得。

deploymentのget_detailsメソッドを呼び出して、 今現在自分のMachine Learning Serviceに作成されているDeploymentの詳細をdeployments_detailsに取得します。詳細は辞書型(dict)で返ってきます。

その後、resourcesの値にリストで、各Deploymentの詳細が辞書型で入っていますので、今回使用する 「Churn model deployment」のguiddeployed_uidに取得しています。

もしDeploymentを他の名前で作っていた場合は、Churn model deploymentの部分を変更する必要があります。

API Doc参考: https://wml-api-pyclient-dev-v4.mybluemix.net/#client.Deployments.get_details

# Extract the information for "Churn model deployment" 
deployments_details = client.deployments.get_details()
deployed_uid = next(item for item in deployments_details['resources'] 
                    if item['entity']["name"] == "Churn model deployment")['metadata']['guid']

参考: deployments_detailsの中身の例

{'resources': [{'metadata': {'parent': {'href': ''},
    'name': 'Churn model deployment',
    'guid': '5e8b3001-23e1-447d-868a-a73022142f9e',
    'description': '',
    'id': '5e8b3001-23e1-447d-868a-a73022142f9e',
    'modified_at': '2020-02-21T04:51:19.040Z',
    'created_at': '2020-02-19T06:04:20.117Z',
    'href': '/v4/deployments/5e8b3001-23e1-447d-868a-a73022142f9e'},
   'entity': {'name': 'Churn model deployment',
    'custom': {},
    'online': {},
    'description': '',
    'tags': [{'value': 'dsx-autoai',
      'description': 'An identifier for distinguishing v4 deployments created from Watson Studio AutoAI'}],
    'status': {'state': 'ready',
     'online_url': {'url': 'https://us-south.ml.cloud.ibm.com/v4/deployments/5e8b3001-23e1-447d-868a-a73022142f9e/predictions'}},
    'asset': {'href': '/v4/models/cd8bfb7f-5d18-48f1-a32c-59eacdc1c7e8?rev=21eea238-da49-4b5f-a56a-a3466df89d10'}}}]}

7. idとデータを引数にして、AutoAIで作成したモデルを使用して予測

client.deployments.ScoringMetaNames.INPUT_DATAは'input_data'と定義されているものですが(2020/02/21現在)、これをkeyとして、以下のソースに書かれているように予測したいデータの項目名と値を設定し、scoring_payloadに代入します。下記のソースには2レコード分のデータがあります。

その後、deploymentのscoreメソッドをuidとscoring_payloadを引数にして呼び出して、 予測結果を取得しています。

API Doc参考: https://wml-api-pyclient-dev-v4.mybluemix.net/#client.Deployments.score

# Execute the model
scoring_payload = { client.deployments.ScoringMetaNames.INPUT_DATA: 
                   [{
                     'fields': ['ID','Gender','Status','Children','Est Income','Car Owner',
                                'Age','LongDistance','International','Local','Dropped',
                                'Paymethod','LocalBilltype','LongDistanceBilltype',
                                'Usage','RatePlan'], 
                     'values': [[1,'F','S',1.0,38000.0,'N',24.393333,23.56,0.0,206.08,0.0,'CC','Budget','Intnl_discount',229.64,3.0],                      
                                [6,'M','M',2.0,29616.0,'N',49.426667,29.78,0.0,45.5,0.0,  'CH','FreeLocal','Standard',75.29,2.0]
                               ]
                    }]
                  }
predictions = client.deployments.score(deployed_uid, scoring_payload)

実行には多少時間がかかります。以下の赤で囲んだ部分の*が数字に変わる(=完了)まで待ちます。
image.png

8. 予測の表示

実行結果predictionsの中身を表示します。

predictions

以下のように出力されます。valuesの中身が配列になっていて、それぞれ一番目のレコードの結果、二番目のレコードの結果となります。
「一番可能性の高い予測値」、「各クラス(今回はFとT)の確率のリスト」 が予測結果となります。

image.png

9. 予測を見やすく表示

辞書型のままだと見にくいので、見やすいように整形して表示ししています。自分で結果を加工するときの参考となるコードです。

for prediction in predictions['predictions'] :
    for result in prediction['values'] :
        print('Prediction: ' + str(result[0]) + ", probability: [" + 
              str(result[1][0]) + ', ' +  str(result[1][1]) + "]" )

表示例:
image.png

10. Deploymentの削除

以下はDeploymentを削除するコードです。Deployment削除したくない場合は実行しないでください。

removeメソッドを使用して、リポジトリからモデルを削除できます。 以下の例では、すでにuidを持っているため、それを使用してDeploymentを削除します。 この上で実施したものと同じ方法でuidを取得すれば、すべてのDeploymentを削除できます。

似たような操作で、保存されたmodelも削除できます。(ここでは説明していません)

10.1: 比較のために現在のDeploymentの一覧を表示

# Display the list first
client.deployments.list()

表示例:
image.png

10.2: uidを指定してdeploymentを削除

# Remove the deployment
client.deployments.delete(deployed_uid)

出力例:
image.png

10.3: 比較のために現在のDeploymentの一覧を表示

client.deployments.list()

最初の表示と比べて、uidで指定したDeployment(=Churn model deployment)が消えているのを確認します。

出力例:
image.png

以上です。

nishikyon
掲載内容は私自身の見解であり、必ずしも所属する会社の立場、戦略、意見を代表するものではありません
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした