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

SPSS Modeler Flowでバッチ処理をしよう

はじめに

従来のSPSSと比較したときにIBM Cloud上のSPSS Modeler Flowの利点は何かと聞かれたとき、
「作った予測モデルをWatson Machine Learningにデプロイすることで簡単にリアルタイム予測ができること」
というのがその質問に対する答えでした。
この答えは間違ってはいないのですが、実際に予測モデルを呼び出す手段を考えるとREST API呼び出し->Python実装が標準コースになってしまい、モデルを作る時と比較すると結構ハードルが高くなっていたのが実情です。
実は、最近Watson Studioに加わった機能をうまく使うと、CSVファイルを入力としたバッチ予測を、一切プログラミングなしに行うことができます。当記事はその手順を説明するものとなります。(ここで使っているすべての機能はクレジットカードなしに試すことのできるライトアカウントで可能です。)
なお、例によって、この記事に記載されている内容もOpenshift上のIBM製品であるCP4D(Cloud Pak for Data)でも動く機能となります。CP4D版の機能を検討したい方も、クラウド環境でお手軽に試すことが可能です。

(2020-12-10 定時ジョブの話を追記)

前提環境

以下の基盤的準備はすでに終わっていることを前提とします。

  1. IBM Cloudにライトアカウント登録
  2. Watson Studioのインスタンス・プロジェクト作成
  3. Watson Machine Learningのインスタンス作成
  4. Deployment Spaceを作成
  5. Deployment SpaceとWatson Machine Learningのインスタンスとの関連付け

1.と2.の手順については、以下の記事を参照して下さい。
無料でなんでも試せる! Watson Studioセットアップガイド

3.については、以下の記事を参照して下さい。
Watson Studioで追加サービスの登録を行う

また、4. 5.の手順については、以下の記事のうち、1章の「デプロイメントスペースの作成」を参考にして下さい。
AutoAIでお手軽機械学習(その3) Webサービス編

ファイルの準備

以下の実習では2つのCSVファイルを利用します。それぞれ、下記のリンク先からダウンロードしておいて下さい。

https://raw.githubusercontent.com/makaishi2/sample-data/master/data/bank-train-jp-autoai.csv

https://raw.githubusercontent.com/makaishi2/sample-data/master/data/bank-test-jp-autoai-2000.csv

前のデータbank-train-jp-autoai.csvはモデル学習用に、後のデータbank-test-jp-autoai-2000.csvは予測用に利用します。
どちらも、元ネタはUCIデータセットの一つである「Bank Marketing」で、項目名を日本語化した後、学習用(4521件)と検証用(2000件)に分けています。

https://archive.ics.uci.edu/ml/datasets/bank+marketing

実習1 予測モデルの作成

それでは、いよいよ実習開始です。最初のステップは、SPSS Modeler Flowで予測モデルを作ります。
ここの手順は、この記事の主題ではないので、かなり手抜きで大急ぎでモデルを作ります。

CSVデータのアップロード

まず、事前に準備したCSVデータを「アセット」としてクラウド上にアップロードします。
プロジェクト管理の画面から「プロジェクトに追加」->「データ」を選びます。

スクリーンショット 2020-11-27 17.12.31.png

その後で2つのCSVを下記の画面にdrap and dropします。

スクリーンショット 2020-11-27 17.12.17.png

下の画面のように2つのCSVファイルが「データ資産」として登録されていることを確認して下さい。

スクリーンショット 2020-11-27 17.13.42.png

フローの作成

次にModeler Flowの操作に入ります。
まず、最初に、プロジェクト管理画面から「プロジェクトに追加」->「Modelerフロー」を選択します。

スクリーンショット 2020-11-27 17.20.59.png

下の画面になったら「名前」の欄に「Bank Merketing SPSS」と入力して、画面右下の「作成」ボタンをクリックします。

スクリーンショット 2020-11-27 17.23.50.png

ノードの配置

下の画面になったら、次の3つのノードを編集エリアにdrag and dropして、ノード間を結線します。
(このあたりはかなり手抜きです。今回はモデルを作ることは目的でないので、最短手順になっていると理解して下さい。)

スクリーンショット 2020-11-27 17.26.22.png

  1. 「インポート」->「データ資産」
  2. 「フィールド操作」->「タイプ」
  3. 「モデル作成」->「LSVM」

結線が終わると下のような画面になるはずです。
スクリーンショット 2020-11-27 17.27.36.png

データ資産ノードの設定

次にそれぞれのノードの属性を設定します。まず、「データ資産」ノードです。このノードをダブルクリックすると、下のような画面が現れるので、左側の「データ資産の変更」を選択します。

スクリーンショット 2020-11-27 17.33.36.png

下の画面になったら
① 「データ資産」
② bank-train-jp-autoai.csv
③ 右下の「OK」ボタン

を順にクリックします。

スクリーンショット 2020-11-27 17.33.51.png

下の画面になったら、右下の「保存」ボタンをクリックして下さい。

スクリーンショット 2020-11-27 17.49.04.png

タイプノードの設定

次は、真ん中のタイプノードです。
このノードをダブルクリックすると、下の画面になります。

スクリーンショット 2020-11-27 17.34.22.png

画面を一番下までスクロールします。一番下の行「今回販促結果」のロールを「入力」から「ターゲット」に変更します。あとは、全部デフォルトのままで、画面右下の「保存」ボタンをクリックします。

スクリーンショット 2020-11-27 17.34.36.png

学習

画面は、下のようになるはずです。この状態で「実行」アイコンをクリックして下さい。

スクリーンショット 2020-11-27 17.34.54.png

下のように、オレンジ色のノードが新しくできていれば、学習に成功しています。引き続き、この画面で予測用のフローを作ります。

スクリーンショット 2020-11-27 17.36.25.png

実習2 予測用フローの作成

フローの配置

まず最初に今、学習によりできたオレンジのアイコンを選んだ状態で、下の画面のように

① コピー
② ペースト

のアイコンを順にクリックします。

スクリーンショット 2020-11-27 17.38.05.png

うまくいくと、下のようにオレンジのアイコンのコピーが作られます。

スクリーンショット 2020-11-27 19.32.46.png

次に以下のアイコンを順にdrag and dropして、下のように結線して下さい。

「インポート」->「データ資産」
「フィールド操作」->「フィルター」
「エクスポート」->「データ資産エクスポート」

スクリーンショット 2020-11-28 20.55.44.png

各ノードの設定

今、追加したノードの設定を行います。
データ資産ノードについては、2つめのCSVファイルであるbank-test-jp-2000.csvと紐付けます。具体的な手順は先ほどと同じなので省略します。

次にフィルターノードの設定を行います。
フィルターノードをダブルクリックすると、下の画面が表示されるので、

① 「選択されたフィールドの保持」を選択
② 「列の追加」をクリック

します。

スクリーンショット 2020-11-27 17.40.38.png

下のような「フィールドの選択」画面になったら、画面を下にスクロールして一番下の3つの項目を選択し、「OK」ボタンをクリックします。

スクリーンショット 2020-11-27 17.40.53.png

下の画面になるので、右下の「保存」ボタンをクリックします。

スクリーンショット 2020-11-28 20.58.09.png

なお、「今回販促結果」は目的変数(正解データ)であり、本当の予測時にはわかっていない訳ですが、今回は最後に正解データと予測値を比較してみるため、あえて入力データに含めています。本来の予測時と違うことをやっている点は理解しておいて下さい。

最後のデータ資産エクスポートノードは下の画面のようにファイル名をbank-spss-output.csvに変更して「保存」ボタンをクリックします。

スクリーンショット 2020-11-28 21.00.22.png

最終的には下の画面のようになるはずです。

スクリーンショット 2020-11-28 21.00.32.png

予測の実施

今、新たに作った予測用ストリームを実行します。

そのため、マウスポインタを表ノードの上に置いて、コンテキストメニューを表示します。
そして、一番下の「実行」を選んで下さい。

スクリーンショット 2020-11-28 21.00.42.png

正常終了していれば予測に成功しています。そのことを確認するため、画面上部のプロジェクト名のリンクをクリックしてプロジェクト管理の画面に戻りましょう。

スクリーンショット 2020-11-28 21.05.33.png

下のようにbank-spss-output.csvというファイルが増えているはずです。(もし、このファイルがない場合はいったんプロジェクト管理画面を閉じて、再度開き直して下さい)

スクリーンショット 2020-11-28 21.06.16.png

ここでこのファイル名のリンクをクリックしてファイルの中身も確認します。
先ほど、フィルターで設定した3つの項目だけがCSVファイルとしてexportされているのがわかります。もともとこの学習データでは、「成功」の比率が10%程度と少ないのですが、赤枠で囲んだ行はその少ない「成功」をモデルが正しく予測できていることもわかります。

スクリーンショット 2020-11-28 21.06.34.png

実習3 モデルの保存・プロモート・デプロイ・ジョブ実行

以上で、SPSS Modeler Flowによる「学習」「予測」は終わりです。次に最後に作った予測用のフローをWatson Machine Learningのモデルとして保存します。

予測モデルの保存

最初にモデルの保存をします。再び、表ノードにマウスポインタをあわせ、コンテキストメニューを表示させます。
今度は下から2つ目の「ブランチをモデルとして保存」を選択します。

スクリーンショット 2020-11-28 21.30.19.png

下のような画面になるので、モデル名のところは「bank merketing spss model」などと書き換えます。
それ以外はデフォルトの状態で、画面右下の「保存」ボタンをクリックします。

スクリーンショット 2020-11-28 21.31.51.png

下のような画面になれば、モデルの保存に成功しています。「閉じる」ボタンをクリックして下さい。

スクリーンショット 2020-11-27 20.03.52.png

プロジェクト管理画面に戻るため、画面右上のプロジェクト名のリンクをクリックします。
スクリーンショット 2020-11-27 20.04.06.png

モデルのプロモート

次に今保存したモデルをデプロイメント・スペースにプロモートします。
「デプロイメントスペース」「プロモート」の概念がわかりにくですが、下の図と、これからの操作を見比べると、今、何をやっているかがわかると思います。

deployment.png

資産タブの「Watson Machine Learningモデル」の欄に先ほど保存した「bank merketing spss model」という項目ができているはずです。このリンクをクリックします。

スクリーンショット 2020-11-28 21.38.01.png

下のようなモデル管理画面になるので、右家の「デプロイメント・スペースにプロモート」をクリックします。

スクリーンショット 2020-11-28 21.40.47.png

下の画面になるので、「ターゲット・スペース」に事前に準備したデプロイメント・スペースが選択されていることを確認した上で、画面右下の「プロモート」ボタンをクリックします。

スクリーンショット 2020-11-28 21.42.27.png

下のような画面が出てくれば、モデルのプロモートに成功しています。改めて、上の概念図を見て下さい。
スクリーンショット 2020-11-28 21.43.36.png

ここから先はすべてデプロイメント・スペース上の作業となります。

デプロイメント・スペース管理画面

最初に今まで作業したプロジェクト管理画面からデプロイメント・スペース管理画面に移動します。
具体的には、画面左上の「三」のようなアイコンをクリックします。

スクリーンショット 2020-11-27 20.07.04.png

メニューから「すべてのスペースの表示」を選択します。

スクリーンショット 2020-11-27 20.50.51.png

下の「デプロイメント」の画面になったら
① スペースタブを選択
② スペース名のリンクをクリックします。

スクリーンショット 2020-11-27 20.51.20.png

バッチ入力ファイルのアップロード

下の画面になったら、先ほど予測で利用したCSVファイルをこの画面の右側にもアップロードします。これは、これから実行するバッチ処理の入力ファイルとなります。

スクリーンショット 2020-11-28 21.48.05.png

アップロードが正しく終わると、下のように新しく「データ資産」の項目ができます。

スクリーンショット 2020-11-28 21.49.53.png

バッチの定義

ここで、モデルからバッチ・デプロイメントを作るため、モデルのリンクをクリックします。

スクリーンショット 2020-11-28 21.51.28.png

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

スクリーンショット 2020-11-27 20.53.57.png

下の画面になるので、次の設定をします。
① オンライン・バッチ区分は「バッチ」を選択します。これが最近できた新機能です。ちなみに、「オンライン」を選択すると、従来からあったWebサービスを作ることになります。
② デプロイメント名称を入力します。この例では「bank maeketing spss batch」としました。
③ ハードウェア定義を選択します。ここでは、ちょっとリッチに「4vCPU 16GB memory」を選んでみました。
④ 最後に「作成」ボタンをクリックします。

スクリーンショット 2020-11-27 20.54.48.png

ジョブ作成とバッチ実行

下のようなバッチ管理画面になります。ここで引き続きジョブ作成を行います。そのため、「ジョブの作成」ボタンをクリックします。

スクリーンショット 2020-11-27 20.55.10.png

下の画面ではジョブ名称を入力して「次へ」ボタンをクリックします。
ジョブ名称はこの例では「bank maketing spss batch job」としました。

スクリーンショット 2020-11-27 20.55.38.png

次の「構成」の画面はデフォルトの状態で「次へ」ボタンをクリックします。
この段階で、バッチ作成時と異なるvCPU環境を選択することも可能です。

スクリーンショット 2020-11-27 20.55.52.png

次は「スケジュール」設定の画面です。ここもデフォルトのまま「次へ」をクリックします。

スクリーンショット 2020-11-27 20.56.01.png

次の画面では、バッチ処理の入力ファイルと出力ファイルを指定します。
まず、「データソースの選択」のボタンをクリックします。

スクリーンショット 2020-11-27 20.56.15.png

先ほど、デプロイメントスペースにアップロードしたcsvファイルが選べるはずなので、それを指定します。指定ができたら、画面下の「確認」ボタンをクリックします。

スクリーンショット 2020-11-27 20.56.27.png

下のような画面になります。

① 入力ファイルが正しく設定できたことを確認します。
② 出力ファイルを入力します。ちなみに、ここで設定したファイル名に対して、勝手に拡張子 csvが付けられるようです。
③ 次へボタンをクリックします。

スクリーンショット 2020-11-27 20.56.49.png

下のような最終確認の画面になります。この設定でよければ「保存」ボタンをクリックします。

スクリーンショット 2020-11-27 20.57.00.png

下のような画面になります。ジョブ保存タイミングでジョブ自体も一回実行されるようです。その結果を確認するため、画面上部のデプロイメント名のリンクをクリックします。

スクリーンショット 2020-11-27 20.57.25.png

下のように、バッチ出力ファイルができていることがわかります。デプロイメントスペース内では、プレビュー機能はないのですが、いったんパソコンにダウンロードすればバッチの結果が確認できます。

スクリーンショット 2020-11-27 21.48.54.png

これで、Modeler Flowで作ったモデルに対してCSVファイルを入力としてバッチ起動する実習は終わりです。
例えばデプロイメントスペースにアップロードするCSVを、データが40690件ある下記のcsvに差し替えて同じことをすると、よりバッチ処理のイメージがわくかと思います。

https://raw.githubusercontent.com/makaishi2/sample-data/master/data/bank-test-jp-autoai.csv

定時起動ジョブの定義

以上で説明したジョブは、ユーザーがUI画面(あるいはAPIからも可能です)でユーザートリガーで起動するジョブの定義方法でした。定時起動ジョブも同じような方法で定義可能です。
本節でその手順を説明します。

バッチデプロイメントの管理画面を再度表示し、もう一度「ジョブの作成」ボタンをクリックしてください。

スクリーンショット 2020-12-10 12.13.03.png

名前は「定時ジョブ」として、「次へ」ボタンをクリックします。
次の「構成」画面の操作は前と同じです。

スクリーンショット 2020-12-10 12.13.38.png

次の「スケジュール」の画面で、以下の操作をする点が、先ほどとの違いです。

① 「実行をスケジュール」スイッチをオン(右)にする
② 「繰り返し」にチェックする
③ 「毎」の欄で「日」を選択し、時刻を適当に設定する
④ 右下の「次へ」ボタンをクリック

スクリーンショット 2020-12-10 12.30.19.png

その後の操作も先ほどの非定期ジョブの設定と同様です。これで定期実行ジョブの定義ができました。
最終的には、下のような画面になります。

スクリーンショット 2020-12-10 12.39.45.png

ジョブ結果確認

最後に個別ジョブの実行結果を確認してみましょう。
まず、上のジョブ一覧の画面から、「定時ジョブ」のリンクをクリックします。
すると、下のようにジョブの詳細画面になります。
また、この画面の下の方には「実行」という欄があり、定時ジョブの場合、日々の実行記録が個別に残されています。ここで、実行の配下のリンクをクリックしてみます。

スクリーンショット 2020-12-10 12.39.58.png

すると、下のような画面になります。これが、個別の実行(Run)に関する詳細画面です。
この画面で、個別ジョブが成功したかどうか、時間がどの程度かかったかなどの情報が確認できます。

スクリーンショット 2020-12-10 12.40.20.png

makaishi2
著書「Pythonで儲かるAIをつくる」「ディープラーニングの数学」(以上日経BP)  「現場で使えるPython自然言語処理入門」(翔泳社)  「Watson Studioで始める機械学習・深層学習」(リックテレコム)  投稿された情報はあくまで個人の見解なので、内容に関して責任を負うものではない事はご了承下さい。  
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