Cloud Pak for Data as a Service でモデルのトラッキングやメタデータ管理にModel Inventoryを使う

## 本記事の目的

本記事では、IBM Cloud上で提供される Cloud Pak for Data as a Service を対象に、
Watson Studio, Machine learning, Watson Knowledge Catalog, Watson OpenScale サービスを使用した Model Inventory 機能の利用方法をご紹介します。

## 1. CP4DaaS の Model Inventory 概要

Model Inventoryは、モデルのガバナンスを実現するための下記機能を提供し、Watson Knowledge Catalogのカタログへモデル・エントリーとして記録します。

- 開発から展開まで、モデルのライフサイクルをトラッキング
- 開発したモデルのメタデータを管理

**Model Inventoryの画面**<br>

① モデルのライフサイクルをトラッキング
開発、テスト、検証、オペレーション（実働環境）の4つの段階でトラッキングします。

![image.png](https://miro.medium.com/max/1400/1*j0dDF3l_21aYKA5jrFbGcg.png)
引用元：[AI Factsheets on Cloud Pak for Data as a Service: Automate collection of model facts across the AI Lifecycle](https://medium.com/@shashanksab/ai-factsheets-on-cloud-pak-for-data-as-a-service-automate-collection-of-model-facts-across-the-ai-503400414641)

② モデルのメタデータを管理
１つのモデルに対し、以下の内容を記録することができます。
- モデル情報（作成日、作成者、アルゴリズムなど）
- トレーニング情報（使用データセットの場所など）
- トレーニング・パラメーター（モデル学習時のパラメーター）
- トレーニング・メトリック（テストデータにおける精度など）
- トレーニング・タグ
- 入力スキーマ（特徴量）

＜入力スキーマの記録例＞![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/5c47bedc-a890-6aca-83fb-fe3177b22891.png)

**Model Inventoryのアーキテクチャ**
モデル開発時とモデルの評価時のメタデータをModel Inventoryに記録します。
各サービスの用途は以下となります。
- Watson Studio モデルの開発
- Watson Machine Learning モデルのデプロイ
- Watson OpenScale　モデルのモニター（検証）
- Watson Knowledge Catalog モデルのトラッキング・メタデータ管理  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/52534d18-228e-4d9c-e47a-8befbb81d210.png)

## 2. CP4DaaS の Model Inventory を試す

製品資料の[Data fabric tutorials](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/df_tutorials.html?audience=wdp&locale=en)に Model Inventoryを扱う `MLOps and Trustworthy AI` のチュートリアル・シナリオ があります。
本記事では、`MLOps and Trustworthy AI` のチュートリアル・シナリオに沿って Model Inventory を試します。

チュートリアルは2つのパートに分かれています。それぞれのパートに従って進めます。

- モデルの開発とデプロイ
- モデルのテストと評価

### 開始の前に

- もし持っていない場合、IBM Cloudアカウントを作成します。

  無料のIBM Cloudアカウントを作成
  https://www.ibm.com/jp-ja/cloud/free

- Model Inventory で使用するサービスを作成します。
	サービス全て、無料で機能を試せるLiteプランに対応しています。
    また、Watson~ の4サービスは、`ダラス(us-south)`リージョンへ作成したものを使用します。

	- Watson Studio
    - Watson Machine learning
    - Watson Knowledge Catalog
    - Watson OpneScale
    - IBM Cloud Object Storage ※作成時のリージョン指定不要

:::note warn
2022年4月現在、Watson OpenScale は ダラス(us-south) および フランクフルト(eu-de) で提供されています。
CP4DaaSでは、リージョンごとに提供機能に制限があるため、最新の機能提供状況をご確認ください。

Regional limitations for Cloud Pak for Data as a Service
https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/region-lims.html?locale=en
:::

### 2-1.モデルの開発とデプロイ
下記リンク先の手順に沿って作業を実施します。
本記事では主要な手順を抜粋し、全体の流れを紹介します。詳細は、リンク先のチュートリアルをご確認ください。

[MLOps and Trustworthy AI tutorial: Build and deploy a model](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/df_AI_create_model.html?audience=wdp&locale=en)

- チュートリアル用のプロジェクトを、自分のWatson Studioへ取り込みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/4d612fd1-f253-b577-f741-45dcd691783c.png)

- 取り込んだプロジェクトの「管理」＞「サービスおよび統合」より、`Watson Machine Learning`サービスを関連付けを行います。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/84ee3e2c-8656-cdc3-0109-81a01285d4f2.png)
    作成済みのWatson Machine Learningサービスを選択し、関連付けます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/6e0b94d6-f306-60a4-61b9-d90d76c91443.png)
    作成済みのWatson Machine Learningサービスが関連付けられた状態です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/a60a8887-4bfd-0ad5-4b80-510f144a52ac.png)


- Model Inventory の記録先として使用するカタログを作成します。
    - 既存のカタログがある場合、そちらを使用することも可能です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/490faaec-c4bf-f8a2-a0a9-ec6e161cd4a5.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/97804cc3-d09a-433e-ebc5-88e1a87e7039.png)

- プログラムからIBM Cloudのサービスを操作するため、IBM CloudのプラットフォームAPIキーを作成します。
    - APIキーの作成方法は、@nishikyonさんの下記記事を参照ください。
    [IBM Cloud APIKEYの作成(取得)方法](https://qiita.com/nishikyon/items/fa8b951267efbe911fe7)

- Model Inventory のエントリーを作成します。
    - 作成したエントリーへ、トラッキング状況やメタデータを紐づけて管理します。
    Cp4DaaSのメニューより、「カタログ」＞「モデル・インベントリー」と進み、「新規モデル・エントリー」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/bb270dd1-c760-bfd6-6daf-a40ee704d303.png)
    任意のモデル・エントリー名を指定の上、保存します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/e12fc1d4-7960-4990-2988-1cf28a8eb05e.png)
    モデル・エントリーが、カタログ上に作成されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/4f33e750-ed7d-1a01-63be-c9cc100f9eb5.png)
    「資産」タブを開くと、モデル・トラッキングの状況が表示されます。この時点では空です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/9ac884d2-e1b6-e9e6-1ddb-b61a2817b277.png)

- チュートリアル用のプロジェクトに含まれるJupyter Notebookファイル `Notebook 1-model-training-with-factsheets` を実行し、モデルの開発とプロジェクトへの保存を実施します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/fd8824f3-279a-2635-0d86-5948b21dd4fa.png)
    もし、Read-Onlyモードで表示された場合、鉛筆アイコンをクリックして編集モードに入ります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/705f6ce2-77af-5f28-9268-4ebef0885589.png)
    編集モードの状態で、以降はNoteobook内の指示に従って進めます。
    Notebookでは、以下の処理を実施します。
    - APIキーの設定（Set up Project Token and API Key）
    - ライブラリのインポート（Import Libraries）
    - Modelのメタデータ登録に使用するライブラリAI Factsheetsのセットアップ（Setup AI Factsheets）
    - 学習用データの読込（Load training data）
    - 特徴量と予測対象の設定（Specify User Inputs）
    - データの前処理（Build Data Pipelines）
    - モデルの構築（Build Machine Learning Models）
    - テストデータによるモデル精度の確認（View Model Results）
    - プロジェクトへモデルを資産として保存（Save the model）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/b6a784ba-a871-6354-bd0b-1fe1dbbec5d9.png)

- プロジェクト上に保存されたモデルの詳細を表示します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/96aece03-1b6e-d55b-1f96-6e6e39f6df2c.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/64bf91da-2af2-7e5c-3aed-f0bd13f4c3b1.png)
    スクロールすると、以下の情報を確認できます。
    - モデル情報
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/d671483c-b6b5-8869-7007-92ae3d889fec.png)
    - トレーニング情報
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/04083121-e117-57e2-a42d-dc6faad8bdf4.png)
    - トレーニング・パラメーター（長いため、一部のみ掲載）
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/182dab49-7bcc-206e-dbb4-d80aceb531fe.png)
    - トレーニング・メトリック
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/6ac2f95a-a970-2ea3-e9c6-13d9ed6ddfe0.png)
    - 入力スキーマ
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/5c47bedc-a890-6aca-83fb-fe3177b22891.png)

- モデルをModel Inventoryへ登録します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/066d2b88-26c7-e8ca-3fe8-5aa4b49f19be.png)
   事前に作成済みのモデル・エントリーを選択し、追加します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/9f41c036-6903-e5af-6366-ba85a893e262.png)
   モデルが、Model Inventoryのエントリーへ関連付けられました。モデル・エントリー名をクリックし、Model InventoryのUIへ進みます。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/ee457dd5-fb15-7e5d-255f-b0c043e7aa50.png)
   開発段階として、WatsoｎStudioプロジェクトのモデルがトラッキングされています。表示されたモデル名をクリックします。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/a19e5c8b-3e7b-ae79-52c7-1943efcee8ad.png)
   プロジェクトのモデル詳細と同様の情報が表示されます。モデルの開発に使用したプロジェクトへ進みます。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/6ba08284-8705-511a-b6a8-4a62135c5b8e.png)

- プロジェクトのモデル詳細ページより、モデルを`デプロイメント・スペース`へプロモートし、デプロイメントを作成します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/de2116be-6d9d-fc95-c052-b9e131e208ce.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/a1623bb0-8018-952f-65c1-fe5329baae91.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/8d965301-5b43-1e31-6af1-05f6b4074000.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/53cba059-d654-18ff-ecd2-db2a0f7f1fa5.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/370eea04-67f6-7cb2-8c01-ef30d4c124f5.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/cb513714-5adb-2694-321f-9705e4efe297.png)
   モデルをスコアリングに使用できるよう、デプロイメントを作成します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/59da6cb2-6d43-a458-7696-e37e0887de25.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/3910646c-5e2a-3a9d-7bf2-8d9262b6d409.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/1cbebc8c-55d6-6880-f174-6b54c357acaa.png)

- Model Inventoryよりモデルの段階を確認します。
   テスト段階として、デプロイメントスペースにプロモートしたモデルトラッキングされています。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/dd1950c9-d4c7-3571-55f6-334718c06192.png)


### 2-2.モデルのテストと評価
下記リンク先の手順に沿って作業を実施します。
本記事では、主要な手順のみ抜粋して紹介します。詳細は、リンク先のチュートリアルをご確認ください。

[MLOps and Trustworthy AI tutorial: Test and validate the model](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/df_AI_monitor_model.html?audience=wdp&locale=en)

- チュートリアル用のプロジェクトに含まれるJupyter Notebookファイル `Notebook 2-monitor-wml-model-with-watson-openscale` を実行し、Watson OpenScaleによるデプロイメント・スペース上のデプロイメントのモニタリングを設定し、モデル検証の準備を行います。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/8cd219c1-f7c1-56ab-74a8-ffed9340ccf7.png)
   もし、Read-Onlyモードで表示された場合、鉛筆アイコンをクリックして編集モードに入ります。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/7df60cee-2c03-89bf-16e4-ded0dfdb6856.png)
    編集モードの状態で、以降はNoteobook内の指示に従って進めます。
    Notebookでは、以下の処理を実施します。
    - APIキーの設定（Set up Project Token and API Key）
    - ライブラリのインポートや更新など（Setup）
    - モデルおよびデプロイメントの定義の取得（Fetch Model and Deployments）
    - Watson OpneScaleの構成（Configure OpenScale）
    - Watson OpneScaleへ機械学習プロバイダの作成およびデプロイメントを登録（Create Service Provider and Subscription）
    - 品質モニターの設定（Quality monitor）
    - 公平性モニターの設定（Fairness monitor）
    - 説明性機能の設定（Explanations）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/b6a784ba-a871-6354-bd0b-1fe1dbbec5d9.png)

- プロジェクトのデータ資産より、Watson OpenScaleによるモデルの評価で使用するデータセット`GoldenBank_HoldoutData.csv`をダウンロードします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/b177dfbb-5541-a014-df1e-008ea9e810cd.png)

- Watson OpenScaleへアクセスします。
    CP4DaaSのメニューより、「サービス・インスタンス」＞「Watson OpenScale」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/43314cfe-1aa1-687a-6968-c264cb898977.png)
    アプリケーションを起動します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/e281d450-f0c1-66e7-f410-45a49fd4a39c.png)
    Notebookで設定したモデルのモニタリング設定をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/7355da43-c5cc-bfae-b0ca-0afe11097a2f.png)

- モデルの評価を実施します。
    「アクション」＞「今すぐ評価」と進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/37521d37-3a9c-5589-3b4e-56d292b10076.png)
    モデルの評価用にダウンロードしたCSVファイルをアップロードし、評価を実行します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/8410d780-948e-637b-186b-cf65112c792a.png)
    評価の完了まで待機します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/c232c36e-11e3-c633-f5f2-67a458f1d476.png)

- モデルの品質モニターより、モデルの品質を検証します。
    評価が完了すると、「公平性」「品質」へ評価結果が表示されます。「品質の構成」へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/69492848-ff40-c18a-ac6b-1cb18de4d49f.png)
    「品質」のしきい値として、ROC曲線下の面積（Area under the curve，AUC）が0.7に設定されていることを確認します。これは、Notebookの品質モニターの設定で登録した内容です。前の画面に戻ります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/d5957626-1ca5-6b23-db87-ff5ee2f85d06.png)
    次に「品質」の→をクリックし、モニター結果を確認します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/6b6633da-5c9d-9be0-d119-ac39846bee66.png)
    「品質」のメトリクスを確認します。ROC曲線下の面積（Area under the curve，AUC）は 0.9で、しきい値 0.7を超えており、モデルの精度は期待する品質を満たしています。前の画面に戻ります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/30e3058f-2e9f-cca0-96c8-812897b1a6b7.png)

- モデルの公平性モニターより、モデルの公平性を検証します。
    「公平性の構成」へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/83e48c6f-b79d-3794-400d-150b8c358759.png)
    「公平性」の確認項目として、「好ましい結果（=モデルによる予測値のうち、Positiveなクラス。ローン審査の場合、1（申請を承認））」と「好ましくない結果（=モデルによる予測値のうち、Negativeなクラス。ローン審査の場合、0（申請を拒否））」が設定されています。
    また、監視対象とする特徴量として、`Gender` が設定されています。この特徴量を基準に、モデルの予測値のうち「好ましい結果」に偏りがないか監視します（チュートリアルシナリオでは、男性と女性を比較し、いずれかの性別でローン審査の承認状況に偏りがないか監視）。
    これらは、Notebookの公平性モニターの設定で登録した内容です。前の画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/1e4c5b57-0f94-d719-3970-7438b3eac500.png)
    次に「公平性」の→をクリックし、モニター結果を確認します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/7adf0068-a9b0-5963-303b-771631001417.png)
    「公平性」のモニター結果より、男性と女性のローン審査の承認状況に偏りがないことを確認します。男性 44%、女性 45% と両者の承認状況は同程度となっており、偏りはありません。前の画面に戻ります。
    ※見やすさのため、下記の画面のショットは複数の画面キャプチャを合成しています。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/25e7e7bf-717d-d2a7-e6e5-4e773194c083.png)

- モデルの説明性について確認します。
    トランザクションの検索を開き、任意の1行（=スコアリング1件に対応）の「説明」へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/c9c64b0f-df99-a212-7a7d-176c8cfb8ed3.png)
    このスコアリングにおいて、モデルの各特徴量が予測結果にどれだけ強い影響力があるか、相対的な重み付けのパーセンテージが割り当てられます。負の相対重み付けパーセンテージは、その特徴量がモデルで異なる予測結果を出すようよう影響を与えたことを示しています。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/e9e08673-d11f-7334-eb1f-761813d0b7b8.png)

- Model Inventoryよりモデルの段階を確認します。
   検証段階として、Watson OpenScaleのモニターを構成したデプロイメント・スペース上のモデルおよびデプロイメントがトラッキングされています。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/64e613e6-674a-38d0-7a0d-bb056c603ffd.png)

- モデル・エントリーのステータスを「ドラフト」から「実働前にプロモート」に変更します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/7aa94f24-a5b2-4c87-0d8f-71ccf609265a.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/1b5c631a-2073-f51c-e4fc-d12b513dd363.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/645de53f-38ec-e654-f676-bcc8ddfd221f.png)

- Watson OpenScaleに戻ります。検証の結果、モデルは品質および公平性の基準を満たしていました。そのため、モデルを実働のために承認します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/94c210cf-d2b1-9d56-d3d6-d9c13177f04d.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/09515aca-4427-29f3-e8ba-a8d0f8772ccc.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/15656f29-294a-3f26-c42f-cce1e0b10c16.png)

   モデルの開発から検証までのステップが完了し、このモデルは実働環境で使用可能となりました。任意の環境へこのモデルを展開し、スコアリングを実行することができます。

手順は以上です。

## 3. 関連資料

CP4DaaSのModel Inventoryに関連する資料です。

:::note warn
製品資料は英語版から更新されるため、英語版のURLを記載しています。
:::

製品資料：Model inventory
https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/factsheets-model-inventory.html?locale=en

Pythonライブラリ・ドキュメント: IBM_AIGOV_FACTS_CLIENT
https://ibm-aigov-facts-client.mybluemix.net/

Pythonライブラリ・ドキュメント: Watson Machine Leaning
https://ibm-wml-api-pyclient.mybluemix.net/

Pythonライブラリ・ドキュメント: Watson OpenScale
https://ibm-watson-openscale-client.mybluemix.net/

Blog: AI Factsheets on Cloud Pak for Data as a Service: Automate collection of model facts across the AI Lifecycle
https://medium.com/@shashanksab/ai-factsheets-on-cloud-pak-for-data-as-a-service-automate-collection-of-model-facts-across-the-ai-503400414641