IBM Watson Studio 内で SPSS Modeler フローを作成する

このチュートリアルは、ラーニング・パス「Watson Studio 入門」の一部となっています。

はじめに

このチュートリアルでは、IBM® Watson™ Studio 内で SPSS Modeler フロー機能を使用して、グラフィック指向の方法で機械学習モデルを作成、評価する方法を説明します。Watson Studio 内の IBM Watson SPSS Modeler が提供する環境では、データの取り込みからデータの変換、モデルの作成、評価までの処理に対応する機械学習パイプラインを、コードの作成なしで、フローを使って迅速に構築することができます。このチュートリアルで、SPSS Modeler のコンポーネントの概要を把握し、これらのコンポーネントを使用してモデルを作成、テスト、評価、デプロイする方法を学んでください。

このラーニング・パスの他のすべてのチュートリアルと同じく、このチュートリアルでも Kaggle から入手できるカスタマー・チャーン・データセットを使用します。

前提条件

このラーニング・パスの一連のチュートリアルに取り組むには、IBM Cloud アカウントが必要です。無料のトライアル・アカウントを取得すれば、そのアカウントで IBM CloudIBM Watson StudioIBM Watson Machine Learning Service にアクセスできます。

所要時間

このチュートリアルの所要時間は約 60 分です。

手順

ラーニング・パス用の環境を構築する手順は、チュートリアル「IBM Watson Studio を使用したデータの視覚化、準備、変換」で説明しています。構築手順の概要は以下のとおりです。

  1. IBM Cloud Object Storage サービス・インスタンスを作成する
  2. IBM Watson Studio プロジェクトを作成する
  3. IBM Cloud サービスをプロビジョニングする
  4. データセットをアップロードする

ラーニング・パスに従うには、以上のステップを完了する必要があります。環境の構築が完了している場合は、次のステップに進んでモデル・フローの作成に取り掛かってください。

モデル・フローを作成する

以下の手順に従って、機械学習の初期フローを作成します。

  1. Assets (アセット)」ページで、「Add to project (プロジェクトに追加)」をクリックします。

  2. Choose asset type (アセット・タイプの選択)」ページで、「Modeler Flow (Modeler フロー)」を選択します。

  3. Modeler」ページで、「From File (ファイルから)」タブを選択します。

    create-flow

  4. https://github.com/IBM/watson-studio-learning-path-assets/data から「customer-churn-flow.str」という名前のモデル・フローをダウンロードします。

  5. ダウンロードした Modeler フロー・ファイルをアップロード領域にドラッグします。この操作によって、フローの名前も設定されます。

  6. 自動的に設定されたフロー名を、この特定の機械学習について説明する名前に変更します (省略可)。

  7. Create (作成)」をクリックします。これにより、機械学習フローを作成するために使用できるフロー・エディターが開きます。

このチュートリアルの残りの部分では、以上の手順でインポートした初期フローを詳しく探ります。

initial-flow

Modeling (モデル化)」ドロップダウン・メニューを開くと、サポートされている各種のモデル化手法を確認できます。先頭にある「Auto Classifier (自動分類子)」は、複数の手法を試行して最良の結果を出した手法を提示するという手法です。

メインのフロー自体には、以下のステップからなるパイプラインが定義されています。

  • データセットをインポートするデータ・アセット・ノード
  • 分類するターゲット属性の選択も含め、特徴のメタデータを定義するタイプ・ノード
  • モデル化に使用するデータを準備する自動データ前処理ノード
  • データをトレーニング・セットとテスト・セットに分割するパーティション・ノード
  • モデルを作成して評価する、「churn」という名前が付けられた自動分類子ノード

メイン・パイプラインには、他にも入力と出力を表示するためのノードが関連付けられています。具体的には、以下のノードです。

  • 「Input Table (入力テーブル)」という名前が付けられた、入力データをプレビューするためのテーブル出力ノード
  • 「21 fields (21 フィールド)」(デフォルトの名前) が付けられた、入力データセットの品質 (最小、最大、標準、偏差) を監査するためのデータ監査ノード
  • 生成されたモデルを評価するための評価ノード
  • 「Result Table (結果テーブル)」という名前が付けられた、予測結果をプレビューするためのテーブル出力ノード

その他の入力および出力タイプを確認するには、「Outputs (出力)」ドロップダウン・メニューを選択してください。

データ・アセットを割り当ててフローを実行する

フローを実行するには、プロジェクト内にある適切なテスト・データをフローに接続する必要があります。

  1. フローの左側にあるデータ・アセット・ノード (入力ノード) の 3 つのドットを選択します。

  2. メニューから「Open (開く)」コマンドを選択します。ページの右側部分に、このノードの属性が表示されます。

    data-asset-properties

  3. Change data asset (データ・アセットを変更)」をクリックし、入力ファイルを変更します。

  4. 次のページで、カスタマー・チャーン関連のデータが含まれる .CSV ファイルを選択し、「OK」をクリックします。

  5. Save (保存)」をクリックします。

  6. ツールバー内の「Run (実行)」(矢じり) をクリックしてフローを実行します。

    run-command

フローを実行すると、多数の出力、つまり結果が生成されます。これらの出力で詳細を調べることができます。

run-and-output

データの理解

フローを実行した後は、データを詳しく調べてください。

  1. フロー図の上部にある「Input Table (入力テーブル)」ノードを選択します。

  2. 右上隅にある 3 つのドットを選択し、表示されるポップアップ・メニューから「Profile (プロファイル)」コマンドを呼び出します。

    preview-input-data-option

この最後の操作によってフローの一部は繰り返し実行されることがありますが、こうすることで、データのプロファイルを生成するための「Profile (プロファイル)」タブとダッシュボードを作成するための「Visualization (視覚化)」タブをページに表示することができます。

preview-data-set

各データ列で、最小値、最大値、平均値、標準偏差値といった詳細を見ていきましょう。

  1. ページの先頭にあるパンくずリストで 1 つ前の項目をクリックして、フローを再表示します。

    bread-crumb

  2. ツールバーの右上の部分にある「View outputs and versions (出力とバージョンを表示)」を選択します。

  3. Outputs (出力)」タブをクリックします。

    outputs-tab

  4. 「21 Fields (21 フィールド)」と名付けられたデータ監査ノードの出力をダブルクリックします。または、出力に関連付けられた 3 つのドットを選択し、表示されるポップアップ・メニューから「Open (開く)」を選択します。

    21-fields-option

以下の図に示すような概要が表示されます。

21-fields-output

この概要ページには各特徴について、値の分布がグラフ形式で表示され、その特徴がカテゴリー特徴量であるか連続値特徴量であるかが示されます。数値による特徴の場合、最小値、最大値、平均値、標準偏差値、歪度も計算されて示されます。「Valid (有効)」という名前の列を見ると、有効な値が 3333 個あることがわかります。つまり、一覧表示されている特徴について欠落している値はないため、値のない列をフィルタリングや変換によって処理するという側面に手間をかける必要はありません。

データの準備

データをインポートして行った最初の特徴の評価を変えるには、タイプ・ノードを使用します。このパイプライン内では、これが次のノードになっています。タイプ・ノードを使用するには以下の手順に従います。

  1. ツールバーで「customer-churn-flow」を選択してフロー・エディターを再表示します。

  2. Type (タイプ)」ノードを選択します。

  3. ポップアップ・メニューから「Open (開く)」コマンドを選択します。

上記の手順によって、特徴 (フィールドなど) とそれぞれの特徴の種類 (連続、フラグなど)、役割などを示すテーブルが表示されます。

type-node-output

このノードを使用することで、必要に応じて「Measure (測定)」を変更できます。また、特徴の役割を指定することもできます。この例の場合、churn 特徴 (True または False の値が設定されたフラグ) が「Target (ターゲット)」に変更されています。「Check (チェック)」列から、フィールドの値に関する洞察をさらに得られる可能性もあります。

Cancel (キャンセル)」をクリックしてタイプ・ノードのプロパティー・エディターを閉じます。

パイプライン内で次のノードとなっているのは自動データ前処理ノードです。このノードは、カテゴリー・フィールドを数値フィールドに変換するなど、自動的にデータの形式を変換します。このノードの処理結果を表示するには、以下の手順に従います。

  1. フロー・エディター内で「Auto Data Prep (自動データ前処理)」ノードを選択します。

  2. ポップアップ・メニューから「Open (開く)」を選択します。

このノードでは多数の設定を使用できます。例えば、変換の目標 (処理速度の高速化または精度の最適化) を定義することができます。

auto-data-prep

上の図に示されている変換の設定は、欠損値が多すぎるフィールド (しきい値 50) と、そのカテゴリーに分類される要素が1件のみになる唯一の結果しか生じないカテゴリーが多すぎるフィールドを除外するように構成されています。電話番号のフィールドは唯一の結果しか生じないカテゴリーが多すぎるフィールドに該当するという前提で、このフィールドは無視します。

パイプライン内で自動データ前処理ノードの後に続くノードは、パーティション・ノードです。このノードで、データセットがトレーニング・セットとテスト・セットに分割されます。現在のパーティション・ノードでは、分割の比率として 80 対 20 が使用されています。

partition-node

モデルのトレーニング

SPSS Modeler フロー内でパーティション・ノードの後に続くのは、「churn」と名付けられた自動分類子ノードです。このノードにより、各種のビルド設定に基づいてモデルがトレーニングされます。これらの設定には、生成されたモデルを (精度のしきい値を基準に) ランク付けする方法や破棄する方法も含まれます。

auto-classifier-node

Open (開く)」を選択してノードを開き、ドロップダウン・メニューから「BUILD OPTIONS (ビルド設定)」項目を選択すると、「Number of models to use (使用するモデルの数)」プロパティーがデフォルト値の 3 に設定されていることがわかります。どうぞご自由に、このプロパティーにこれよりも大きな値を設定してください。新しい値を設定した後、「Save (保存)」をクリックすると、その変更が保存されます。

注: ビルド設定を 1 つでも変更した場合は、必ずフローを再実行してください。

モデルの評価

生成されたモデルについてさらに詳しく調べるには、以下の手順に従います。

  1. 黄色のモデル・アイコンを選択します。

  2. ドロップダウン・メニューから「View Model (モデルの表示)」を選択します。

    view-model-option

表示される概要セクションに、分類子モデルとそれぞれの精度が一覧表示されます。この例では、「Number of models to use (使用するモデルの数)」を 10 に設定しています。

model-evaluation

この概要セクションをひと通り見ていくと、各推定器に関連付けられている設定項目とビューの数は異なることがわかります。推定器によっては、さらに詳細を掘り下げて調べられるよう、ハイパーリンクも提供されています。

一例として、精度の低い「C&R」ツリー・モデルを取り上げます。テーブル内でこのモデルの名前をクリックしてください。

次のページで、左側にある「Tree Diagram (ツリー・ダイアグラム)」リンクを選択して、この推定器のツリー・ダイアグラムを表示します。

ノードのいずれか、またはツリー内のブランチのいずれかの上にマウスのカーソルを重ねると、その特定のノードまたはブランチで行われた決定に関する詳細が表示されます。

tree-diagram

ページの左上の部分にある左向き矢印をクリックして、元のページを表示します。次に、「MPL Neural Network (MPL ニューラル・ネットワーク)」リンクを選択して、この推定器の詳細を表示します。この推定器の設定はツリー・モデルとは異なっていることがわかります

Feature Importance (特徴の重要度)」タブをクリックします。

feature-importance

モデルの推定における各予測子の相対パフォーマンスを示すグラフが表示されます。

Confusion Matrix (混合行列)」タブをクリックします。

model-eval-confusion-matrix

表示されるテーブルには、予測された結果と実際の結果の比較が示されます。主対角線上のセル内に示されている数値は、正しかった予測の数です。

データセット全体の混合行列を確認できるようにするには、「Matrix Output (行列の出力)」ノードをキャンバスに追加します。

  1. フローに戻ります。

  2. 「Outputs (出力)」メニューから「Matrix (行列)」ノードを選択して追加します。

    matrix-output

  3. 指定したモデル出力ノードに行列ノードを接続します。

    add-matrix

    注: 新しいノードを接続するには、既存の「churn」モデル出力ノードの右側にある吹き出しをクリックして、そのコネクターを新しい行列ノードにドラッグします。

  4. Open (開く)」を選択して「Matrix (行列)」ノードを開きます。

  5. 「Rows (行)」にはターゲット属性「churn」を設定し、「Columns (列)」には 2 項分類予測「$XF-churn」を設定します。

    matrix-columns

  6. 「Cell contents (セルの内容)」で、「Cross-tabulations (クロス集計)」を選択します。

  7. Appearance (外観)」をクリックし、「Counts (カウント)」、「Percentage of Row (行のパーセンテージ)」、「Percentage of Column (列のパーセンテージ)」、「Include row and column totals (行の合計と列の合計を含める)」を選択します。

    matrix-appearance

  8. Save (保存)」をクリックします。

  9. Matrix (行列)」ノードを実行します。

  10. 右上隅にある「View Output and Versions (出力とバージョンを表示)」を選択します。

  11. 行列ノードの出力 (「churn x $XF-churn」という名前) をダブルクリックして開きます。

    confisuion-matrix-pct

主対角線上のセルのパーセンテージには、行のパーセンテージとしての再現率の値 (通常使用される比率メトリックの 100 倍) と、列のパーセントとしての精度の値が含まれます。両方のカテゴリーにおける精度と再現率の F1 統計および重み付きバージョンは、手作業で計算する必要があります。この出力に示される結果は、3 つすべてのアルゴリズムを適用した結果を集計したものです。ランダム・フォレストの結果だけを確認するには、自動分類子ノードに戻ります。このノードを開いて、ランダム・フォレストを除くすべてのモデルのボックスからチェック・マークを外します。その上で、フローを再実行してください。

混合行列の結果だけを取得する場合は、行列出力ノードを開き、外観セクションの「Percentage of Row (行のパーセンテージ)」と「Percentage of Column (列のパーセンテージ)」の選択を解除します。その後、上記のステップ 7 から 11 を繰り返します。

confusion-matrix

SPSS の視覚化機能を使用すると、さらに他の種類のグラフでも混合行列を表示できます。それには、「Result Table (結果テーブル)」出力ノードを選択し、ドロップダウン・メニューから「Profile (プロファイル)」項目を選択します。

results-profile

Visualizations (視覚化)」タブをクリックします。「more options (その他の設定)」(二重矢印アイコン) をクリックして、使用可能なグラフのタイプを表示します。「Treemap (ツリーマップ)」グラフを選択します。

treemap-selector

Columns (列)」の値を「churn」と「$XF-churn」に設定し、「Summary (集計)」で「Count (カウント)」を選択します。

treemap-isualization

現行のパイプラインはパーティション・ノードを使用して単純にデータをテスト・データとトレーニング・データに分割するだけですが、交差検証と層別交差検証を使用することもできます。こうした交差検証によってモデルのパフォーマンスを少々向上させることはできますが、それにはパイプラインが複雑化するという犠牲が伴います。交差検証を使用する方法については、記事「k-fold Cross-validation in IBM SPSS Modeler」を参照してください。

評価結果を確認するには、さらに 2 つの方法があります。

  1. カスタマー・チャーン・フローのフロー・エディターを再表示します。

  2. 上部のツールバーで「View outputs and version (出力とバージョンを表示)」を選択します。

  3. Evaluation of [$XF-churn] : Gains」という名前の出力をダブルクリックして選択します。

    eval-xf-churn-gains

モデルに対して生成された出力が表示されます。

model-gains

モデルの保存とデプロイ

モデルを作成してトレーニング、評価を完了したら、そのモデルを保存してデプロイする作業に進むことができます。

SPSS モデルを保存するには、以下の手順に従います。

  1. モデル・フローのフロー・エディターを再表示します。

  2. Predicted Output (予測出力)」ノードを選択してポップアップ・メニューを開き、右上隅にある 3 つのドットを選択します。

  3. ポップアップ・メニューから「Save branch as model (モデルとして保存)」を選択します。

    save-branch-as-model

    新しいウィンドウが開きます。

    save-model

  4. モデルの名前を入力します (例: ‘customer-churn-spss-model’)。

  5. Save (保存)」をクリックします。

    モデルが現在のプロジェクトに保存されます。

プロジェクトの「Assets (アセット)」タブにある「Models (モデル)」セクションに、この保存されたモデルが表示されているはずです。

model-list

SPSS モデルをデプロイするには、以下の手順にしたがいます。

  1. プロジェクトの「Models (モデル)」リスト内で、保存したモデルをクリックします。

  2. Deployments (デプロイメント)」タブを選択します。

  3. Add Deployment (デプロイメントの追加)」をクリックし、「customer-churn-spss-model-web-service」という名前の新しい Web サービス・デプロイメントを作成します。

  4. デプロイメント・タイプを「Web Service (Web サービス)」に設定します。

  5. Save (保存)」をクリックします。

    model-deploy-success

  6. デプロイメントのステータスが「DEPLOY_SUCCESS」になるまで待ちます。

モデルのテスト

これで、モデルのデプロイを完了したので、モデルを予測に使用できます。ただし、本番環境でモデルを使用する場合は、あらかじめ実際のデータを使ってモデルをテストすることをお勧めします。IBM Machine Learning サービスでは、対話式、または API を使用してプログラムによってモデルをテストできるようになっています。ここでは対話式でモデルをテストします。

このサービスの UI を使用すると、2 つの方法で予測のパフォーマンスをテストすることができます。1 つは、個々のフィールド (特徴ごとに 1 つのフィールド) に値を 1 つずつ入力するという方法です。もう 1 つの方法では、JSON オブジェクトを使用してすべての特徴値をまとめて指定します。ここでは後者の方法を使用します。テストを複数回実行する場合 (通常はそうなります)、そして大量の特徴値が必要となる場合には、JSON オブジェクトを使用するのが最も効率的な方法になるからです。まず、以下の手順に従って、事前定義されたテスト・データセットを取得します。

  1. GitHub に用意されている、テスト・データが含まれる customer-churn-test-data.txt ファイルをダウンロードします。

  2. ファイルを開いて値をコピーします。

以下の JSON オブジェクトは最初にフィールドの名前、次に予測する観測の順序を、いずれも 1 つのシーケンスとして定義しています。

{"input_data":[{"fields": ["state", "account length", "area code", "phone number", "international plan", "voice mail plan", "number vmail messages", "total day minutes", "total day calls", "total day charge", "total eve minutes", "total eve calls", "total eve charge", "total night minutes", "total night calls", "total night charge", "total intl minutes", "total intl calls", "total intl charge", "customer service calls"], "values": [["NY",161,415,"351-7269","no","no",0,332.9,67,56.59,317.8,97,27.01,160.6,128,7.23,5.4,9,1.46,4]]}]}

一部の特徴 (状態、電話番号など) は (当然のことながら) 文字列形式であることが期待されていますが、数値形式の特徴は、その特定の特徴に応じて整数または浮動小数点数として入力することができます。

実行時にモデルをテストするには、以下の手順に従います。

  1. 先ほど作成したデプロイメントの名前 (例: ‘customer-churn-spss-model-web-service’) をクリックして選択します。

  2. 新しいページが開き、デプロイメントのプロパティー (名前、作成日、ステータスなど) の概要が表示されます。

  3. Test (テスト)」タブを選択します。

  4. ファイルのアイコンを選択します。これにより、JSON を使用して値を入力できるようになります。

  5. ダウンロードした Customer Churn Test Data.txt ファイル内の JSON オブジェクトを「Enter input data (入力データを入力)」フィールドに貼り付けます。

  6. Predict (予測)」をクリックし、結果を確認します。

deploy-est-result

予測結果には、顧客が解約する (True) かしない (False) かどうかの確率が示されます。このテストは、他の値を使用して試すこともできます。例えば、サンプル JSON 内の値を customer-churn-kaggle.csv ファイル内から抜粋した値で置き換えて予測を試します。また、電話番号を「XYZ」などの値で置き換えてから、予測を再実行してテストすることもできます。予測結果は同じになるはずです。これは、特徴は予測を左右する要因ではないことを意味します。

SPSS Modeler を使用してカスタマー・チャーンを予測する例を他にも確認したい場合は、チュートリアル「Predict Customer Churn by Building and Deploying Models Using Watson Studio Flows」を参照してください。

API を使用した機械学習モデルのスコア付け

前述したように、モデルにアクセスするには IBM Watson Machine Learning API を使用することもできます。その場合の方法の 1 つは、Jupyter ノートブックを使用することです。この方法については、次のチュートリアル「IBM Watson Studio 内で Jupyter ノートブックを使用してモデルを作成する」で説明します。

次のチュートリアルを完了して Jupyter ノートブックを実行するのに慣れてきたら、今回作成した SPSS モデルにスコアを付けるサンプル・ノートブックを試してください。

このノートブックを作成する際に、「From URL (URL から)」項目を使用して、以下のコードを入力します。

https://github.com/IBM/watson-studio-learning-path-assets/blob/master/notebooks/spss-customer-churn.ipynb

ノートブックを実行するには、以下の情報を使用して更新する必要があります。

  • Watson Machine Learning 資格情報。この情報は、IBM Cloud 内の「Service Credentials (サービス視覚情報)」タブで確認できます。

    ml-creds

  • デプロイ済みモデルのスコアリング・エンドポイント URL。この URL は、デプロイ済みモデルの「Implementation (実装)」タブで確認できます。

    deploy-python-code

まとめ

このチュートリアルでは、Watson Studio 内の SPSS Modeler フロー機能を使用する際の基本的な方法を取り上げ、以下の手順を説明しました。

  • プロジェクトを作成する
  • サービスをプロビジョニングしてプロジェクトに割り当てる
  • データセットなどのアセットをプロジェクトに追加する
  • Modeler フローを作成する
  • Modeler フロー・エディターを使用してモデルを実行し、その結果を調べる
  • モデルをトレーニングして評価する
  • モデルを Web サービスとしてデプロイする
  • テスト・データを使用して機械学習モデルにスコアを付ける

Watson Studio の SPSS Modeler フロー機能を使用すると、プログラミングの要らない手法で、カスタマー・チャーンを予測するモデルを作成することができます。この手法は、ラーニング・パスの次のチュートリアル「IBM Watson Studio 内で Jupyter ノートブックを使用してモデルを作成する」で説明する Jupyter ノートブックを使用した完全なプログラム形式に代わる 1 つの手法です。