[Continual] Feature Storeを実現しつつ機械学習モデルを作成する

ゼッタイ・フィーチャー
2022.01.27

大阪オフィスの玉井です。

今回は、ContinualでFeature Storeの仕組みを実現しつつ、機械学習を行います。

Continualって何?って人は、先に下記をどうぞ。

Feature Storeとは

ざっくりいうと、「機械学習を行うにあたって必要な特徴量をまとめて管理する仕組み・基盤」という感じでしょうか。

詳しく知りたい方は、ググると色々な記事が出てくるので、そちらもご覧ください(Feature Storeを実現できるサービスもあります)。

そして、Continualにも、Feature Storeを実現できる機能があります。

Feature setとEntity

ContinualでFeature Storeを実現する場合、Feature setEntityという2つの機能を理解して使う必要があります。

Feature set

その名の通り、特徴量のセットを(Continual上で)定義したものになります。一度定義しておくと、他の機械学習モデルの作成にも再利用することができます。

Entity

Feature setを一つのカテゴリ等にまとめることができます。

例えば、DWHにあるテーブル、もしくはcustomer_transactionscustomer_accountsなどのFeature setを個別に扱わなくても、customersというEntityを用意すれば、顧客に関するデータを一つにまとめて扱うことができます。

機械学習モデルを作成する際には、customer_idのような主キーを、Entityである customers にリンクさせればOKです(customersに属するFeature setが学習に使用される)。結合方法等をこちらが気にする必要はありません。

やってみた

実際にFeature setを作成して、それを利用して機械学習モデルを作成してみます。

やること

下記でやったことを、Feature setを使ったバージョンでやってみます。データや環境の準備も、下記を実施した状態であることを前提に進めます。

Feature setを作成する

早速ですが、まずはFeature setを作成する必要があります。作成の仕方はModelと同じ…つまりyamlファイルで定義することができます。

下記を用意して、Continualに登録します。

prospect_info.yml

type: FeatureSet
name: prospect_info
entity: prospects
description: インバウンドの見込み客に関する情報
index: prospectid
exclude_columns:
  - converted
query: >
  select * from `tamai-rei.featurestore.Lead_Scoring`

ここで作成するのは機械学習モデルではなくFeature setなので、当然typeは、ModelではなくFeatureSetになります。

その他、いくつか重要なパラメータを説明します。

  • entity
    • このFeature setが属するEntityを指定します。
  • index
    • データを一意に判別できるカラムを指定します(主キー)。
  • exclude_columns
    • このFeature setで使用しないカラム
    • 今回でいえば、convertedは予測したい値であり、学習には使わない(特徴量ではない)ので、ここで指定して除外します。
  • query
    • Feature setとなるデータ(クエリ)を指定します。

yamlファイルを作成したら、Continualにアップロードします。

$ continual push prospect_info.yml
Pushing path(s) ['Downloads/prospect_info.yml'] into Continual
Updating (lead_scoring_example_3@prod):
  Pushing path(s) ['prospect_info.yml'] from CLI.

Operations for xxxxxxxxxxxxxxxxxxx in project lead_scoring_example_3, environment prod:

  Operation           State

  Feature Set: prospect_info
  CREATE              PENDING
  PROFILE             PENDING

Link:
  https://cloud.continual.ai/projects/lead_scoring_example_3/changes/xxxxxxxxxxxxxxx

ContinualにWebブラウザでログインして、Feature setを確認します。

アップロードしたFeature setの詳細はこんな感じ。他にも、メニューからデータのプレビューが確認できたり、このFeature setが使われた履歴が確認できたりします。

登録されたFeature setを使用した機械学習モデルを作成する

Feature setを利用する場合でも、yamlファイルでModelを定義することができます。

lead_converted.yml

type: Model
name: lead_converted
description: どのリードが顧客につながるかを予測するモデル
index: prospectid
target: converted
columns:
  - type: TEXT
    name: prospectid
    entity: prospects
  - type: BOOLEAN
    name: converted
query: >
  select prospectid, converted from `tamai-rei.featurestore.Lead_Scoring`

ポイントは、カラムの詳細を指定する部分で、entity: prospectsとしているところです。ここでprospectsというEntityと(prospectidというカラムを通じて)紐付けているため、Continualはそれを受け、Entityがprospectsでつながっているデータを学習に使用してくれます。それに伴い、queryでは、indexにあたるカラムと予測したいカラムの2つだけ指定するように変えています。

ファイルが作成できたら、これまたそれをアップロードします。

$ continual push lead_converted.yml

モデルの確認

モデルの作成が完了すれば、(当たり前ですが)詳細を確認することができます。

これは偶然なのですが、前回作成したときと同じモデル名にすると、自動的に成績の良い方に置き換えてくれるようです(前回との差異が表示されている)。使用アルゴリズムも別のものになっています。

また、どのFeature setがどういうEntityで結ばれて学習に使われたのかが、図でわかるようになっていました。

他はスタンドアローンモデル(Feature setを使わないModel)と同様です。どの特徴量が一番関係しているかどうかがわかったり、予測結果がDWH上で確認できたりするところは全く同じでした。

Feature setとEntityを用意するメリット

他のユースケースで再利用できる

今回の作業だけでは実感しづらいですが、例えば、数カ月後に、別の機械学習モデルを作成するとなったときに「見込み客データを使いたい」となったとします。普通であれば、再度、見込み客のデータを定義し直さないといけません。しかし、今回は、見込み客のデータを既にFeature setとして登録済なので、新しいModelの定義で、そのEntityに接続するだけで、見込み客データを再利用することができます。

特徴量への新しいデータ追加が簡単にできる

さらに時間が経ってくれば、見込み客データに、新しいデータを追加する場合も有り得ると思います。

新しいFeature setがEntityに接続されると、ContinualはそのEntityを使用しているすべてのモデルを把握し、それらを更新して新しいモデル・バージョンを自動的に作成してくれます。

ユースケースが増えてくると、Entityの影響を受けるモデルが数十個になることも考えられます。これら全てのモデルを手動で更新するとなると、更新作業がすごく複雑になります。

Continualは、このような場合でも、手間をかけずに簡単に更新できるようになっています。

おわりに

あらゆる機械学習サービスが、Feature Storeの機能を備えてきています。Continualは、この特徴量にあたるデータもDWHのデータを使うので、(別途機械学習用のデータ置き場を用意しなくていいという意味で)非常にやりやすいです。