GraphReduce グラフを使用した特徴エンジニアリングの抽象化

GraphReduce グラフ特徴エンジニアリングの抽象化

エディターの注意:Wes Madrigalは10月30日から11月2日までのODSC Westのスピーカーです。彼のトーク「Using Graphs for Large Feature Engineering Pipelines」をチェックして、GraphReduceなどについてさらに学びましょう!

ML / AIで働く読者にとっては、機械学習モデルは数値情報のベクトルを好むことがよく知られています。データのベクトルがある場合、エンコーディング、外れ値フィルタリング、正規化、補完などの操作は比較的簡単です。特徴量エンジニアリングの自動化には多くの研究が行われていますが、それらの多くは入力がフラットな特徴量ベクトルであることを前提としています。しかし、企業データの大部分は分析および機械学習の観点から未活用のままであり、最も価値のある情報の多くはOLAPなどの関係データベーススキーマに残っています。これらのスキーマにアクセスし、機械学習に適した特徴量ベクトルを選択、フィルタリング、結合、集計するには、データエンティティがどこに存在するか(例:顧客)、その関係がどのように接続されているか、そしてSQLまたは類似の方法で情報を選択、フィルタリング、結合、集計する必要があります。さらに複雑になるため、データリークは機械学習モデルに深刻な問題を引き起こすため、時間をエンティティ間で注意深く扱う必要があります。簡単な言葉で言えば、「データリーク」とは、ラベル期間のデータがモデルのトレーニングデータに漏れてしまうことを意味します。最後に、特徴が考案され、提案され、追加されるにつれて、インターフェースはSQLまたはPythonパイプラインのフランケンシュタインになり、拡張、メンテナンス、再利用が困難になることがあります。本稿では、これらの問題に対する抽象化としてGraphReduceを提案します。eコマーススキーマ上の例題の特徴量エンジニアリングプロセスと、GraphReduceが関係スキーマ上の特徴量エンジニアリングの複雑さに対処する方法を示します。

顧客が通知との相互作用をするかどうかを予測すると仮定しましょう。残念ながら、データエンジニアリングと機械学習オペレーションのチームは私たちのために特徴ベクトルを構築していないため、関連するデータはすべて別々のテーブルに関係スキーマに存在します。例のスキーマは次のとおりです:

  • 顧客
  • 注文
  • 注文イベント
  • 注文製品
  • 通知
  • 通知の相互作用

顧客について予測しているため、顧客の粒度でモデリングすることになります。

関係の理解:

GraphReduceはこの部分では役に立ちませんので、データをプロファイリングしたり、データの専門家に相談したり、新興技術を利用したりする必要があります。この場合、スキーマは次のようになります:

  • 顧客 -> 注文
    • 顧客.id = 注文.customer_id
  • 注文 -> 注文イベント
    • 注文.id = 注文イベント.order_id
  • 注文 -> 注文製品
    • 注文.id = 注文製品.order_id
  • 顧客 -> 通知
    • 顧客.id = 通知.customer_id
  • 通知 -> 通知の相互作用
    • 通知.id = 通知の相互作用.notification_id

基数の理解:

顧客の詳細レベルでモデリングするためには、関係が基数の観点からどのように相互作用するかについて十分な理解が必要です。顧客の詳細レベルでモデリングするためには、顧客に関連するすべての関係を結合し、関係を顧客の粒度にまで削減する必要があります。たとえば、顧客に10行があり、子の関係である注文に100行がある場合、注文エンティティを顧客の粒度に削減するために、注文エンティティに対してGROUP BY集計を実行し、顧客と集計/削減された注文情報を結合する必要があります。通常、粒度の理解はかなり直感的ですが、この場合は行数を提供するため、最初から明らかです。

テーブルの行数は次のとおりです:

  • 顧客:2行
  • 注文:4行
  • 注文製品:16行
  • 注文イベント:26行
  • 通知:10行
  • 通知の相互作用:15行

データの準備とフィルタリング:

データの準備には、不正なデータや外れ値の削除が含まれます。これには、フィルタの適用、行の破棄、異常または不正な値を持つ列値の変換または破棄、欠損値の補完などが含まれます。データの準備はまずエンティティレベルで行われるため、エラーや異常が集計されたデータセットに入り込まないようになります。以下は、Pandasで注文エンティティを使用してこれがどのように見えるかの例です:

結合と基数:

データの準備と品質に対応した前提で、データエンティティを結合し、顧客単位の単一のデータフレームに平滑化する準備が整いました。これを正しく行うためのポイントは、子テーブルを親の単位に縮小するためにGROUP BYを発行することで、データの重複を避けることです。以下は、Pandasでこれがどのように見えるかの例です:

時間の処理:

データの漏洩を避けるために、信頼できる日付キーを使用し、トレーニング期間およびラベル期間の周りでデータを適切にフィルタリングする必要があります。トレーニング期間には特定の日付までの情報が含まれ、ラベル期間にはその日付以降の情報が含まれます。これにより、モデルにトレーニングデータを供給し、予測を学習する将来の期間に何が起こったかを伝えることができます。単一のフラットな特徴ベクトルではなく、任意の数のテーブルを扱っているため、時間の処理が計算グラフのすべての関係で同じように行われるよう注意する必要があります。

一時的なアプローチの問題:

上記の手順は、ほとんどの場合、ML-readyな特徴ベクトルではない関係データ上でモデルを構築する際に毎回遭遇するものです。もちろん、フィーチャーストアは数年前にこの問題の解決策として登場しましたが、それらはGraphReduceとは異なるアーキテクチャのアプローチを取っています。feast、Tecton、またはVertex AIフィーチャーストアのようなフィーチャーストアの違いの詳細は、別のブログ投稿に譲ります。

抽象化:

GraphReduceは、エンティティ/テーブルをノードとして、それらの間の関係をグラフデータ構造のエッジとして扱います。このライブラリは、グラフのプリミティブを活用し、インターフェースを拡張するためにnetworkxをサブクラス化しています。GraphReduceは、トップレベル計算グラフのパラメータを格納する抽象化を提供します:

  • データを縮小するための親ノード/エンティティ
  • 過去のトレーニングデータセットに含めるデータ量
  • トレーニングとラベル期間の間の分割日
  • Spark、Pandas、またはDaskを使用するためのプラグ可能な計算バックエンドパラメータ
  • データ形式パラメータ
  • 計算グラフがラベルを生成しているかどうかの指定

トップレベルのGraphReduceオブジェクトは、通常、深さ優先の方法でグラフのノードにマッピングされる操作の順序をも集約します。GraphReduceオブジェクトは、縮小操作後にノード間の結合操作をオーケストレーションすることを集約します。以下の図は、操作の順序を示しています。

GraphReduceのノード抽象化には、以下の操作が含まれます:

  • データの取得(各ノードは独自の情報をロードする責任があります)
  • データのフィルタリング
  • データの注釈付け
  • データの正規化
  • データの縮小
  • カット日付でスライスして特徴の準備
  • カット日付でスライスしてラベルの準備

この例では、すべてをまとめています:

グラフの計算操作の仕様でGraphReduceオブジェクトをインスタンス化します:

計算対象のノードをインスタンス化し、GraphReduceに追加します:

計算操作を実行する

ML準備済みの特徴ベクトルを使用してモデルをトレーニングする:

代わりにSQLを使用して次のようなこともできますが、おすすめしません 🙂

概要:

私たちは、例としてイーコマースのデータセット、関係データからML準備済みの特徴ベクトルを集計する際の一般的な問題、およびGraphReduceを使用した抽象化を示しました。GraphReduceは、任意の大きさと動的基数の関係データセットに対して計算操作の統一されたインターフェースを提供することを示しました。ODSC Westのトークでは、さらに詳細に説明します。

完全なコード例:https://github.com/wesmadrigal/GraphReduce/blob/master/examples/cust_order_demo.ipynb

著者について:

ウェス・マドリガルは、AIを活用してビジネス価値を提供する10年以上の経験を持つ機械学習の専門家です。ウェスの経験は複数の産業にわたりますが、常にMLOpsに焦点を当てています。最近の関心領域は、グラフ、分散計算、スケーラブルな特徴エンジニアリングパイプラインです。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

データサイエンス

「Adam Ross Nelsonによる自信のあるデータサイエンスについて」

データサイエンスの中で新たな分野が現れ、研究内容が理解しにくい場合は、専門家や先駆者と話すのが最善です最近、私たちは...

人工知能

「トリントの創設者兼CEO、ジェフ・コフマンへのインタビューシリーズ」

ジェフ・コーフマンは、ABC、CBS、CBCニュースで30年のキャリアを持った後、Trintの創設者兼CEOとなりましたジェフは手作業の...

機械学習

「Prolificの機械学習エンジニア兼AIコンサルタント、ノラ・ペトロヴァ – インタビューシリーズ」

『Nora Petrovaは、Prolificの機械学習エンジニア兼AIコンサルタントですProlificは2014年に設立され、既にGoogle、スタンフ...

人工知能

ジョナサン・ダムブロット、Cranium AIのCEO兼共同創設者- インタビューシリーズ

ジョナサン・ダムブロットは、Cranium AIのCEO兼共同創業者ですCranium AIは、サイバーセキュリティおよびデータサイエンスチ...

データサイエンス

「3つの質問:ロボットの認識とマッピングの研磨」

MIT LIDSのLuca CarloneさんとJonathan Howさんは、将来のロボットが環境をどのように知覚し、相互作用するかについて議論し...

人工知能

「アナコンダのCEO兼共同創業者、ピーターウォングによるインタビューシリーズ」

ピーター・ワンはAnacondaのCEO兼共同創設者ですAnaconda(以前はContinuum Analyticsとして知られる)を設立する前は、ピー...