LoginSignup
13
5

More than 3 years have passed since last update.

AutoAIでお手軽機械学習(その3) Webサービス編

Last updated at Posted at 2019-07-30

はじめに

AutoAIは、IBM Cloud上のサービスWatson StudioおよびOpenShiftベースの製品CP4D(Cloud Pak for Data)上で稼働する機械学習モデル自動構築ツールです。
第三部では「モデル構築編」で作成した機械学習モデルをWatson Machine Learing上のWebサービスとしてデプロイし、呼出しテストを行ってみます。
この他の「AutoAIでお手軽機械学習」シリーズの記事は以下の通りです。

AutoAIでお手軽機械学習(その1) 準備編
AutoAIでお手軽機械学習(その2) モデル構築編
AutoAIでお手軽機械学習(その4) Jupyter Notebook編
AutoAIでお手軽機械学習(その5) API編

[2020-01-27] 40,000件のテストデータを利用するシナリオに変更
[2020-03-16] githubのリポジトリ移動 & 汎用的な予測用コード追加
[2020-07-20] AutoAI日本語化に伴い全面的に更新
[2020-09-23] Watson MLのアーキテクチャ変更に伴い更新
[2020-11-03] cp4dタグ追加

デプロイメントスペースの作成

2020-09-01にWatson MLはアーキテクチャが変更になり、Webサービス作成のためにデプロイメント・スペースを定義することが必要になりました。デプロイメントスペースに関しては、下の図を見ていただくと概念がわかると思います。
従来 Watson Studioでは、成果物がすべてプロジェクトに保存される形になっていました。
実行環境であるWatson Machine Learningとしての、成果物の保存先がデプロイメント・スペースとして明確に定義される形になったのです。

deployment.png

プロジェクト管理画面の表示

最初に次のURLを指定して、Watson Studioにログインします。
https://dataplatform.cloud.ibm.com

ログイン後に、作成済みのプロジェクト管理画面を表示します。プロジェクトの選択手順は「その2」に記載しましたので、わからない方はそちらを参照してください。

デプロイメントスペース一覧表示

プロジェクト管理の画面が表示されたら、画面左上の「三」のような場所をクリックします。

スクリーンショット 2020-09-23 21.55.41.png

下のようなメニューが出たら、「デプロイメントスペース」の一つ下の「すべてのスペースの表示」をクリックします。

スクリーンショット 2020-09-23 21.55.54.png

デプロイメントスペースの新規作成

下のようなデプロイメントスペース一覧の画面が表示されますが、この段階ではまだ一つもデプロイメントスペースがないはずです。
画面右上の「New deployment space」のリンクをクリックします。

スクリーンショット 2020-09-23 21.56.17.png

下のような画面が出てきますので、上の「空のスペースを作成」を選んで下さい。

スクリーンショット 2020-09-23 21.56.32.png

名称は「space01」など、適当な名前を入力して画面右下の「作成」ボタンをクリックします。

スクリーンショット 2020-09-23 21.56.47.png

下のような画面になりますので、しばらく待って下さい。

スクリーンショット 2020-09-23 21.57.10.png

最終的に、次のような画面になればデプロイメント・スペースの作成に成功しています。右側の「新しいスペースの表示」をクリックして下さい。

スクリーンショット 2020-09-23 21.58.13.png

Watson MLインスタンスとの関連付け

下のようなデプロイメントスペースの管理画面に遷移するので
① 一番右の「設定」タブを選択し、
② Watson MLの下の「Associate instance」のリンクをクリックします

スクリーンショット 2020-09-23 21.58.32.png

下の画面になるので、
① ドロップダウンから関連付けるWatson MLのインスタンスを選択(多分1つしか選択できない)
② 「保存」をクリックします。

スクリーンショット 2020-09-23 21.58.59.png

これで、デプロイメント・スペースの設定は完了しました。再び画面右上の「三」のアイコンをクリックし、今度はプロジェクト管理画面(My First Project)を選択します。これで、一番最初のプロジェクト管理画面に戻るはずです。

スクリーンショット 2020-09-23 21.59.17.png

デプロイ手順

準備ができたので、前の記事で作ったAutoAIのモデルをWebサービス化します。
手順は
(1) モデルの保存
(2) モデルのプロモート
(3) モデルのデプロイ
の3段階になります。下の図を再掲しますので、それぞれのステップで何をやるのか理解して下さい。

deployment.png

(1) モデルの保存

左から2つめの「資産」タブに、「AutoAI実験」という欄があるはずです。その中で「その2」で作成したモデル「営業成約予測」のリンクをクリックします。

スクリーンショット 2020-07-20 8.59.30.png

詳細画面の下の方に次のようなリストが出て来ます。

スクリーンショット 2020-07-20 9.05.27.png

マウスポインタを、保存したいモデルの行に移動すると、次のような保存用ボタンが表示されます。

スクリーンショット 2020-09-23 22.38.46.png

クリックすると、下の画面になるので、「モデル」を選択します。
スクリーンショット 2020-09-23 22.38.55.png

次の画面が出てくるので、デフォルトの状態で画面右下の「保存」をクリックします。

スクリーンショット 2020-09-23 22.39.07.png

保存に成功すると、画面右上に次のようなパネルが表示されます。

スクリーンショット 2020-09-23 22.39.18.png

(2) モデルのプロモート

次のステップは、保存したモデルのプロモートです。
保存の成功を確認したら。画面上部の「マイ・プロジェクト」の右側のプロジェクト名の領域をクリックします。
ここをクリックすると、プロジェクト管理のメインメニューに遷移します。

スクリーンショット 2020-07-20 9.11.15.png

「資産」タブであることを確認後、画面を下の方にスクロールすると、「Watson Machine Learningモデル」という項目が出てきて、先ほど保存したモデルが一覧に含まれているはずです。このリンクをクリックして下さい。

スクリーンショット 2020-09-23 22.43.34.png

下のようなモデル管理画面が表示されます。
ここで、画面右上の「デプロイメント・スペースにプロモート」のリンクをクリックして下さい。

スクリーンショット 2020-09-23 22.43.53.png

下のような画面に遷移します。「ターゲット・スペース」の欄に先ほど作ったデプロイメント・スペースが選ばれていることを確認した上で、画面右下の「プロモート」ボタンをクリックします。

スクリーンショット 2020-09-23 22.44.10.png

プロモートに成功すると、下のような画面が表示されます。

スクリーンショット 2020-09-23 22.44.32.png

(3)モデルのデプロイ

プロモートに成功したら、最後のステップはモデルのデプロイです。
ここで、再び、画面右上の「三」のアイコンをクリックし、下のメニューを表示させます。
今度は、事前に作成したデプロイメントスペース(図ではspace01)を選択します。

スクリーンショット 2020-09-23 22.44.54.png

下のように資産タブの「モデル」の項目の中に先ほどプロモートしたモデルがあるはずです。そのリンクをクリックします。

スクリーンショット 2020-09-23 23.01.29.png

下の画面に遷移するので、「デプロイメントの作成」ボタンをクリックします。

スクリーンショット 2020-09-23 23.01.45.png

下のような「デプロイメントの作成」の画面になります。
この画面で
① デプロイメント・タイプとして「オンライン」を選択
② 名称を設定 (図ではbank-marketing-webとしています)
③ 画面右下の「作成」ボタンをクリック

スクリーンショット 2020-09-23 23.02.13.png

すると、次のような画面が表示されます。最初は状況が「進行中」になっています。

スクリーンショット 2020-09-23 23.02.27.png

しばらく待っていると、下のように状況が「デプロイ済み」に変化します。これで作ったモデルのWebサービス化が完了しました。

スクリーンショット 2020-09-23 23.07.01.png

Webサービスのテスト

それでは、今デプロイしたWebサービスの呼び出しテストをしてみましょう。
最初に管理画面についている簡易テスト機能を利用してみます。

(1) 簡易テスト機能から項目値を入力してテストする

 Watson Studioでは、生成したWeBサービスに簡易テスト機能がついていて、ここから簡単な呼び出しテストが可能です。まずは、この機能を使ってテストを実施してみましょう。

デプロイメントスペースの管理画面から
① 左から2つ目の「デプロイメント」タブを選択
② デプロイメントのリストから先ほど作ったWebサービス(下の図の場合bank-marketing-webのリンクをクリックします。

スクリーンショット 2020-09-24 13.26.50.png

下の画面になったら、右の「テスト」タブをクリックします。

スクリーンショット 2020-09-24 13.35.12.png

次のような画面が出てくるので、一つ一つ項目をセットしていきます。
最後に予測ボタンをクリックします。
入力する値としては、例えば下の検証用CSVデータ(学習には使っていないデータ)の値を参考にしてください。

スクリーンショット 2020-09-24 13.35.23.png

今回販促結果 = 成功 のテストデータ

項目名
年齢 44
職業 management
婚姻 divorced
学歴 tertiary
債務不履行 いいえ
平均残高 2367
住宅ローン いいえ
個人ローン いいえ
連絡手段 cellular
最終通話日 22
最終通話月 sep
最終通話秒数 263
通話回数_販促中 1
前回販促後_経過日数 184
通話回数_販促前 6
前回販促結果 success

今回販促結果 = 失敗 のテストデータ

項目名
年齢 46
職業 blue-collar
婚姻 single
学歴 secondary
債務不履行 いいえ
平均残高 0
住宅ローン いいえ
個人ローン いいえ
連絡手段 unknown
最終通話日 21
最終通話月 may
最終通話秒数 27
通話回数_販促中 10
前回販促後_経過日数 -1
通話回数_販促前 0
前回販促結果 unknown

すべての項目の入力が終わったら、「予測」ボタンをクリックすると、予測結果がJSON形式で得られます。
下記に、予測結果例と、JSONデータの読み方を示します。

スクリーンショット 2020-09-24 13.51.28.png

(2) 簡易テスト機能からjsonで一括テスト

上の方法でテストするのは、今回のモデルのように入力値が多い場合に煩雑です。このような場合、json形式データで複数のテストを同時に行うことができますので、今度はそのケースを試してみます。
下の画面で、JSON入力アイコンをクリックしてください。
JSONデータのサンプルは結果が「成功」のケース、「失敗」のケースそれぞれについて、テストデータから20件分とってきたものを下記に張り付けておきましたので、こちらをコピペして利用します。

スクリーンショット 2020-09-24 14.38.04.png

今回販促結果 = 成功のテストデータ

{"input_data": [{"fields": ["年齢", "職業", "婚姻", "学歴", "債務不履行", "平均残高", "住宅ローン", "個人ローン", "連絡手段", "最終通話日", "最終通話月", "最終通話秒数", "通話回数_販促中", "前回販促後_経過日数", "通話回数_販促前", "前回販促結果"], "values": [[30, "technician", "single", "tertiary", "いいえ", 2325, "いいえ", "いいえ", "cellular", 10, "aug", 263, 1, 127, 7, "failure"], [44, "management", "divorced", "tertiary", "いいえ", 2367, "いいえ", "いいえ", "cellular", 22, "sep", 263, 1, 184, 6, "success"], [81, "retired", "married", "primary", "いいえ", 243, "いいえ", "いいえ", "cellular", 27, "oct", 131, 1, -1, 0, "unknown"], [27, "admin.", "married", "secondary", "いいえ", 897, "いいえ", "いいえ", "cellular", 5, "jun", 397, 1, -1, 0, "unknown"], [60, "retired", "married", "secondary", "いいえ", 523, "いいえ", "いいえ", "cellular", 11, "feb", 467, 1, 182, 3, "success"], [58, "retired", "divorced", "secondary", "いいえ", 1080, "はい", "いいえ", "cellular", 29, "jul", 1058, 2, -1, 0, "unknown"], [51, "blue-collar", "married", "primary", "いいえ", 541, "いいえ", "いいえ", "cellular", 11, "aug", 663, 3, -1, 0, "unknown"], [31, "services", "single", "secondary", "いいえ", 1027, "いいえ", "いいえ", "cellular", 2, "jul", 217, 3, -1, 0, "unknown"], [61, "self-employed", "married", "tertiary", "いいえ", 10861, "いいえ", "いいえ", "cellular", 25, "oct", 225, 1, 91, 5, "success"], [34, "admin.", "married", "secondary", "いいえ", 1406, "はい", "いいえ", "cellular", 20, "aug", 63, 2, 85, 1, "success"], [39, "technician", "single", "tertiary", "いいえ", 393, "いいえ", "いいえ", "cellular", 26, "mar", 281, 1, -1, 0, "unknown"], [35, "management", "single", "tertiary", "いいえ", 1618, "はい", "はい", "cellular", 7, "may", 542, 1, -1, 0, "unknown"], [57, "admin.", "single", "secondary", "いいえ", 2223, "いいえ", "いいえ", "cellular", 12, "aug", 1064, 1, -1, 0, "unknown"], [24, "self-employed", "single", "tertiary", "いいえ", 2984, "はい", "いいえ", "unknown", 27, "may", 935, 1, -1, 0, "unknown"], [35, "admin.", "divorced", "secondary", "いいえ", 1224, "はい", "いいえ", "cellular", 3, "nov", 187, 1, -1, 0, "unknown"], [22, "student", "single", "secondary", "いいえ", 254, "いいえ", "いいえ", "cellular", 13, "jan", 143, 2, -1, 0, "unknown"], [51, "management", "single", "tertiary", "いいえ", 151, "はい", "いいえ", "cellular", 8, "sep", 638, 1, 427, 3, "success"], [51, "blue-collar", "married", "primary", "いいえ", 0, "はい", "はい", "cellular", 25, "jul", 946, 3, -1, 0, "unknown"], [34, "blue-collar", "single", "primary", "いいえ", 79, "いいえ", "いいえ", "telephone", 10, "jul", 336, 4, -1, 0, "unknown"], [57, "admin.", "married", "secondary", "いいえ", 2120, "いいえ", "いいえ", "cellular", 19, "aug", 687, 4, -1, 0, "unknown"]]}]}

今回販促結果 = 失敗のテストデータ

{"input_data": [{"fields": ["年齢", "職業", "婚姻", "学歴", "債務不履行", "平均残高", "住宅ローン", "個人ローン", "連絡手段", "最終通話日", "最終通話月", "最終通話秒数", "通話回数_販促中", "前回販促後_経過日数", "通話回数_販促前", "前回販促結果"], "values": [[46, "blue-collar", "single", "secondary", "いいえ", 0, "いいえ", "いいえ", "unknown", 21, "may", 27, 10, -1, 0, "unknown"], [41, "technician", "married", "secondary", "いいえ", 352, "はい", "いいえ", "cellular", 18, "nov", 129, 2, -1, 0, "unknown"], [26, "student", "single", "tertiary", "いいえ", 641, "はい", "いいえ", "cellular", 15, "may", 55, 1, 368, 1, "failure"], [49, "housemaid", "married", "primary", "いいえ", 640, "いいえ", "いいえ", "telephone", 13, "aug", 214, 4, -1, 0, "unknown"], [46, "entrepreneur", "married", "tertiary", "いいえ", 406, "はい", "いいえ", "telephone", 15, "jul", 232, 4, -1, 0, "unknown"], [46, "blue-collar", "married", "primary", "いいえ", 225, "いいえ", "いいえ", "cellular", 22, "aug", 157, 6, -1, 0, "unknown"], [26, "student", "single", "secondary", "いいえ", 1164, "いいえ", "いいえ", "cellular", 9, "jul", 116, 1, 301, 1, "other"], [55, "retired", "married", "tertiary", "いいえ", 357, "はい", "いいえ", "cellular", 11, "aug", 526, 1, 103, 1, "failure"], [28, "technician", "single", "secondary", "いいえ", 3, "いいえ", "いいえ", "telephone", 18, "may", 40, 8, 349, 6, "failure"], [39, "admin.", "single", "secondary", "いいえ", 2040, "はい", "いいえ", "unknown", 2, "jun", 145, 2, -1, 0, "unknown"], [31, "blue-collar", "married", "primary", "いいえ", 7424, "はい", "いいえ", "unknown", 21, "oct", 54, 1, -1, 0, "unknown"], [34, "management", "married", "tertiary", "いいえ", -73, "はい", "いいえ", "cellular", 11, "jul", 90, 1, -1, 0, "unknown"], [44, "services", "married", "secondary", "いいえ", 3843, "はい", "いいえ", "cellular", 17, "nov", 70, 1, 150, 2, "other"], [39, "services", "married", "tertiary", "いいえ", 6497, "いいえ", "いいえ", "unknown", 18, "jun", 567, 1, -1, 0, "unknown"], [55, "retired", "married", "primary", "いいえ", -90, "はい", "はい", "unknown", 7, "may", 634, 2, -1, 0, "unknown"], [31, "blue-collar", "married", "secondary", "いいえ", 2591, "はい", "いいえ", "cellular", 20, "nov", 55, 1, -1, 0, "unknown"], [54, "services", "married", "secondary", "いいえ", 770, "いいえ", "いいえ", "cellular", 4, "aug", 151, 1, -1, 0, "unknown"], [46, "services", "married", "secondary", "いいえ", -522, "はい", "いいえ", "cellular", 31, "jul", 61, 2, -1, 0, "unknown"], [31, "technician", "married", "tertiary", "いいえ", 8, "いいえ", "いいえ", "unknown", 29, "may", 71, 5, -1, 0, "unknown"], [44, "unemployed", "married", "tertiary", "いいえ", 17747, "はい", "いいえ", "cellular", 5, "feb", 8, 7, -1, 0, "unknown"]]}]}

呼出し結果例を以下に示します。
今回作ったモデルでは正解が「成功」のデータ20件に対して正解となったのは10件、正解が「失敗」のデータ20件に対して、正解となったのは20件でした。

スクリーンショット 2020-07-20 10.57.37.png

(3) Watson StudioのJupyter NotebookからAPIを利用して一括テスト

最後に、アプリケーションからAPIを使ってWebサービスを呼び出してみます。
シナリオとして、テスト用にリザーブしてある40,690件全件のデータに対する分類結果を、Watson StudioのJupyter Notebook上のPython から取得してみます。

Notebookのソース全体のリンクはこちら

Watson Studioのプロジェクト管理画面から先ほどと同じようにプロジェクトに追加をクリックします。
下の画面で今度は、Notebookを選択します。

スクリーンショット 2020-07-20 12.16.30.png

下の画面で以下の入力をします。

① 「URLから」タブをクリック
名前の欄に 「営業成約予測モデルの精度評価」などの名称を入力
Notebook URLの欄に下記のURLを入力
作成ボタンをクリック

スクリーンショット 2020-07-20 12.21.07.png

入力するURL:
https://github.com/makaishi2/sample-data/raw/master/notebooks/bank-marketing-autoai-test.ipynb

読み込んだNotebook内ではAPIKeyの設定APIのScoring URL設定の2つのセルを設定します。
情報入手の手順はNotebook内に記載がありますので、そちらを参照して下さい。
設定後は shift+enterでセルを順に実行してください。うまくいくと、40,690件の全テストデータに対して、モデルの予測結果がわかる形になります。

最後に、Notebook上で表示されるはずのグラフサンプルを紹介します。

混同行列

スクリーンショット 2020-09-24 18.59.05.png

ROC AUC曲線

スクリーンショット 2020-09-24 16.26.33.png

非常にきれいなROC曲線で面積の値も0.915なので、相当精度の高いモデルということができます。

モデルを使った場合と使わない場合の成約率の比較

スクリーンショット 2020-09-24 16.28.38.png

モデル利用前には11.7%だった成約率は、モデル利用後には41.3%までアップする結果となりました。
これだけ精度がアップすれば、リアルなユースケースでも業務的に十分役に立ちそうです。

汎用的予測コード

AutoAIのモデル作成は本当にお手軽にできますが、予測に関してはAPI Callが必要で若干ハードルが高いです。そこで、学習時と同じフォーマットのCSVファイルを入力に、すべての行に対して予測し、結果をEXCELに保存する汎用的なサンプルコードを作りました。
このコードを活用していただければ、予測に関しても簡単に行うことができると思います。
コードのリンクは以下になります。

結果表のイメージを二値分類ケース、多値分類ケースそれぞれについて添付します。

[二値分類ケース]

スクリーンショット 2020-03-16 20.33.26.png

[多値分類ケース]

スクリーンショット 2020-03-16 20.27.03.png

13
5
2

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
13
5