【CP4DaaS】機能グループ使ってみた

# 1. はじめに
この記事では、IBM Cloud Pak for Data as a Service（CP4DaaS）の機能グループを使って、機能グループの作成・編集・削除からカタログを使って共有するまでの流れを実施します。
＊本機能は2023年6月時点でベータ版となっています。今後本機能について変更等が入る可能性がある点につきまして、予めご了承ください。

# 2. 機能グループ概要
機能グループは、機械学習モデルの作成に使用するデータ資産の各列に対して、どの列を機械学習に使用するか、各列がどのような役割を持つか、その列の値は何を示しているのかといった説明を付与する機能になります。
(ここでいう役割とは、どの列が説明変数または目的変数かを示すということになります。)
また、作成した機能グループをWKC(Watson Knowledge Catalog)を介して他のユーザーが再利用することもできます。
詳細は以下のドキュメントをご参照ください。
https://dataplatform.cloud.ibm.com/docs/content/wsj/manage-data/feature-group.html?context=analytics&audience=wdp

# 3. 機能グループの作成と編集
ここからは実際に機能グループを使っている流れを記載します。
また、本記事では以下のデータを利用しています。
https://ibm.github.io/japan-technology/Code-Tutorials/watson-studio-spss-modeler-flow/static/customer-churn-kaggle.csv

## 3-1. 機能グループの作成
最初に、機能グループの作成を行います。
機能グループはデータ資産に対して作成するため、まずは上記のデータをプロジェクトのデータ資産として登録します。
その後、登録したデータ資産を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/f226c2fb-26d7-b8c6-9d59-dc3fbf65c815.png)

データ資産選択後、「機能グループ」タブを選択し、画面中央の「新機能グループ」をクリックすることで機能グループを作成することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/d471d985-81f1-3103-f5cc-2addafd1483d.png)

「新機能グループ」クリック後、対象のデータ資産の列が表示されますので、機能グループに含める列をチェックボックスで選択後、「作成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/d5f03488-b6fe-8cd3-0cbc-de9822322b16.png)

これで機能グループが作成されました。デフォルトでは、各列の役割はすべて「入力」に指定されています。
各役割の意味は「3-2. 機能グループの編集」をご参照ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/8643c3b9-9062-223b-3891-38548441419d.png)

## 3-2. 機能グループの編集
続いて、作成した機能グループの編集を行います。
先ほど作成した機能グループの列名のうちの一つを選択します。今回は「account length」を対象に実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/b67fe96e-c755-5f07-59c9-3f12d4ba41e9.png)

左側のメニューで「account length」が選択されていることを確認し、「この特徴量の編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/e39aacc6-a02b-93ee-65df-b6c134c44559.png)

各項目を入力し、完了したら「保存」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/44e49010-77d6-2744-d39d-434bffb3c76b.png)

各項目の説明を以下に記載します。
* 役割
対象の列が機械学習モデルのトレーニング時に、どう扱われるかを指定します。指定する値は以下の３つのうちどれかになります。
    * 入力：機械学習モデルのトレーニングにデータが使用される際、ターゲットを予測するために使用される特徴量です。所謂、説明変数になります。
    * ID：入力データを識別するための 1 次キー(顧客IDなど)として使用されます。
    * ターゲット：機械学習モデルのトレーニングにデータが使用される際、予測ターゲットとして使用される特徴量です。所謂、目的変数になります。
* 説明
対象の列についての説明を記載します。
* レシピ
対象の列の値を生成するために使用した方法や式を記載します。
* タグ
対象の列に任意のタグを付与します。ここで作成したタグはデータ資産の検索時に使用できます。
* 値の説明
対象の列に含まれる値または範囲を説明します。（例：0=男性、1=女性）
* 公平性情報
    * 参照グループとモニター対象グループ：AutoAIにおける公平性、対象の列にバイアスが含まれていないかを確認することができます。(これは対象の列が「入力」の役割を割り当てられている場合にのみ設定できます。)
        * モニター：指定した値または範囲をモニタリングします。
        * 参照：指定した値または範囲を、モニター対象の値と参照するために使用します。
    * 好ましい結果：どの値が好ましいか、または好ましくないかを指定します。好ましい値とは、予測結果の中で注目する値を指します。例えば分類予測において、ある病気の陽性判定がこの値に相当します。(これは対象の列が「ターゲット」の役割を割り当てられている場合にのみ設定できます。)

## 3-3. 機能グループから指定した列の削除
続いて、機能グループから指定した列を削除する方法について確認します。
なお、この操作によって機能グループが存在するデータ資産そのものが変更されることはありません。つまりデータ資産内の列は削除されずに保持されます。機能グループからのみ、対象列が削除されます。機能グループから一度削除した列であっても、機能グループに再度追加することが可能です。
削除する列の左にあるチェックボックスを選択し、「グループから削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/8b8fe7ae-a7da-cfaf-81ef-8ae296c4df46.png)

ポップアップが表示されますので、「削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/938c8eba-d64f-834e-10cd-2d2ed4c10f5e.png)

対象の列が削除できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/3f2146bc-64f4-6b10-2eb6-4770bb3b1639.png)

# 4. Watson Knowledge Catalogを利用した機能グループの共有
ここでは、作成した機能グループをWatson Knowledge Catalogを利用して他のユーザーに共有するため、カタログに登録する手順を実施します。
正確には、機能グループを作成したデータ資産をカタログに登録するという形になります。機能グループ単体でカタログに登録することはできません。

## 4-1. プロジェクトからカタログへの機能グループの登録
プロジェクトの「資産」タブに移動し、先ほど機能グループを作成したデータ資産のメニューから「カタログに公開」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/f0fe1bfd-a713-1d4c-9bb2-3b33c25463eb.png)

登録先のカタログを「ターゲット」で指定し、「公開」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/ddad34f0-6098-dfb5-b1e1-df6969f08c8e.png)

登録先のカタログに移動後、対象のデータ資産があることが確認できました。
機能グループも共有されているか確認するため、登録したデータ資産を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/3007b60a-b8cf-bc05-f317-74a20c719c85.png)

「機能グループ」タブを選択すると、先ほど作成した機能グループがあることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/2a2abca4-09b6-ad7c-0f62-0280aa9dff18.png)

## 4-2. カタログからプロジェクトへの機能グループの登録
反対に、機能グループをもつデータ資産をカタログからプロジェクトに登録することもできます。

先ほどのカタログの画面から対象のデータ資産のメニューを開き、「プロジェクトに追加」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/00c432ba-2ea1-a905-f055-b040b66891a5.png)

登録先のプロジェクトを「ターゲット」で指定し、「登録」をクリックすることで、対象のプロジェクトにデータ資産を登録することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/b25a6fbf-e6ce-1532-1a1d-3dcfd98faf7a.png)

# 5. 機能グループの検索
機能グループを利用して、データ資産を検索することもできます。
トップページの検索欄に「データ」と入力して検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/a6a7de80-953f-b56b-5a1a-19b94ac93574.png)

左側のメニューより「機能グループ」にチェックを入れ、その後「適用」をクリックすることで、機能グループを持つデータ資産に絞り込むことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159237/9d8f0219-a9e3-2e29-008f-4b0870dd0106.png)

# 6. Python APIを使用した機能グループの作成と使用
ここまでお伝えした機能については、Python APIのassetframe-libを使用することで、Watson Studioノートブック上でも利用することができます。
Python APIを利用することで、機能グループで指定した列を変数として呼び出し説明変数または目的変数として使用することができます。
詳細なコマンド等につきましては、以下のリンク先をご参照ください。
https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/py_assetframe.html?context=cpdaas&audience=wdp

また、機能グループの作成と機能グループを持ったデータ資産を使ってAutoAIで予測実行を行うサンプルプロジェクトも提供されています。
https://jp-tok.dataplatform.cloud.ibm.com/exchange/public/entry/view/e756adfa2855bdfc20f588f9c1986382?audience=wdp

# 関連資料
CP4DaaSの機能グループに関連する製品資料は以下になります。
* 機能グループの管理 (ベータ)
https://dataplatform.cloud.ibm.com/docs/content/wsj/manage-data/feature-group.html?context=cpdaas&audience=wdp



# お断り
このサイトの掲載内容は私自身の見解であり、必ずしも所属会社の立場、戦略、意見を代表するものではありません。 記事は執筆時点の情報を元に書いているため、必ずしも最新情報であるとはかぎりません。 記事の内容の正確性には責任を負いません。自己責任で実行してください。