dbt と FEAST を使用して Teradata Vantage でフィーチャストアを構築する方法
概要
このチュートリアルでは、生データを取得して FEAST フィーチャに変換する dbt パイプラインを作成するアプローチを示します。パイプラインは、データ変換に ClearScape分析関数 を活用します。変換の出力は FEAST にロードされ、ML モデルで使用できるフィーチャがマテリアライズドされます。
はじめに
dbt
dbt(データ構築ツール)は、最新のデータスタックの基礎となるデータ変換ツールです。ELT (Extract Load Transform) の T を処理します。他のプロセスが生データをデータ ウェアハウスまたはレイクに取り込むことが前提です。次に、このデータを変換する必要があります。
Feast
Feast (Feature Store) は、既存のテクノロジーを利用して機械学習フィーチャを管理し、リアルタイム モデルに提供する柔軟なデータ システムです。特定のニーズに合わせてカスタマイズできます。また、特徴をトレーニングと提供に一貫して利用できるようにし、データ漏洩を回避し、ML をデータ インフラストラクチャから切り離すこともできます。
前提条件
-
Teradata Vantageインスタンスへのアクセス。 NOTE: Vantage のテスト インスタンスが必要な場合は、 https://clearscape.teradata.com. で無料でプロビジョニングできます。
-
Feast-Teradata がローカルにインストールされている。 Feast-Teradata のインストール手順 を参照してください。
-
dbt はローカルにインストールされている。 dbtのインストール手順 を参照してください。 == 目的 目的は、Teradata Vantageをソースとするデータ パイプラインを作成し、dbt内のいくつかの変数に対してデータ変換を実行することです。dbt で行うデータの基本的な変換は、性別、婚姻ステータス、州コードなどの複数の列のワンホット エンコーディングです。さらに、アカウント型の列データは、いくつかの列に対して集計操作を実行することによって変換されます。これらすべてが一緒になって、変換されたデータを持つ目的のデータセットを生成します。変換されたデータセットは、特徴を保存するためのFEASTへの入力として使用されます。次に、特徴を使用してモデルのトレーニング データセットを生成します。
始めましょう
-
dbt、feast、およびそれらの依存関係を管理するための新しい Python 環境を作成します。環境を有効化します。
python3 -m venv env source env/bin/activate
-
チュートリアル リポジトリのクローンを作成し、ディレクトリをプロジェクト ディレクトリに変更します。
git clone https://github.com/Teradata/tdata-pipeline.git
クローンされたプロジェクトのディレクトリ構造は以下のようになります。
tdata-pipeline/ feature_repo/ feature_views.py feature_store.yml dbt_transformation/ ... macros models ... generate_training_data.py CreateDB.sql dbt_project.yml
銀行ウェアハウスについて
teddy_bank は銀行顧客の架空のデータセット で、主に顧客、口座、トランザクションの 3 つのテーブルで構成され、以下のようなエンティティリレーションシップ図があります。
dbt はこの生データを取得し、ML モデリングおよび分析ツールにより適した以下のモデルを構築します。
dbtを構成する
以下の内容のファイル $HOME/.dbt/profiles.yml
を作成します。Teradata インスタンスに一致するように <host>
、<user>
、<password>
を調整します。
データベースを設定する
以下の dbt プロファイルは、 |
dbt_transformation:
target: dev
outputs:
dev:
type: teradata
host: <host>
user: <user>
password: <password>
schema: teddy_bank
tmode: ANSI
設定を検証します。
dbt debug
デバッグ コマンドがエラーを返した場合は、 `profiles.yml`の内容に問題がある可能性があります。
FEASTの設定
Feastの構成は、Vantageデータベースへの接続に対応しています。feast
プロジェクトの初期化中に作成された yaml ファイル $HOME/.feast/feature_repo/feature_store.yml
には、オフライン ストレージ、オンライン ストレージ、プロバイダ
、およびレジストリの詳細を保持できます。Teradata インスタンスに一致するように`<host>`、<user>
、<password>
を調整します。
データベースの設定
以下の dbt プロファイルは、 `teddy_bank`というデータベースを指します。Teradata Vantage インスタンス内の既存の データベースを指すように`schema`値を変更できます。 |
オフラインストアの設定
project: td_pipeline
registry:
registry_type: sql
path: teradatasql://<user>:<password>@<hostIP>/?database=teddy_bank&LOGMECH=TDNEGO
provider: local
offline_store:
type: feast_teradata.offline.teradata.TeradataOfflineStore
host: <host>
database: teddy_bank
user: <user>
password: <password>
log_mech: TDNEGO
entity_key_serialization_version: 2
FEASTの実行
Feature Repositoryの定義
-
TeradataSource。
Teradata (Enterprise または Lake) に保存されている特徴量、または Teradata から外部テーブル経由でアクセスできる特徴量 (NOS、QueryGrid) のデータ ソース -
エンティティ。
意味的に関連するフィーチャーの集合体 -
フィーチャー ビュー。
フィーチャー ビューは、特定のデータソースからのフィーチャーデータのグループです。特徴ビュー を使用すると、特徴量とそのデータ ソースを一貫して定義できるため、プロジェクト全体で特徴量グループを再利用できます。
DBT_source = TeradataSource( database=dbload, table=f"Analytic_Dataset", timestamp_field="event_timestamp")
customer = Entity(name = "customer", join_keys = ['cust_id'])
ads_fv = FeatureView(name="ads_fv",entities=[customer],source=DBT_source, schema=[
Field(name="age", dtype=Float32),
Field(name="income", dtype=Float32),
Field(name="q1_trans_cnt", dtype=Int64),
Field(name="q2_trans_cnt", dtype=Int64),
Field(name="q3_trans_cnt", dtype=Int64),
Field(name="q4_trans_cnt", dtype=Int64),
],)
トレーニングデータを生成します
トレーニングデータを生成する方法はさまざまです。要件に応じて、「entitydf」は特徴ビュー マッピングを使用してソース データ テーブルと結合される場合があります。以下は、トレーニング データセットを生成するサンプル関数です。
def get_Training_Data():
# Initialize a FeatureStore with our current repository's configurations
store = FeatureStore(repo_path="feature_repo")
con = create_context(host = os.environ["latest_vm"], username = os.environ["dbc_pwd"],
password = os.environ["dbc_pwd"], database = "EFS")
entitydf = DataFrame('Analytic_Dataset').to_pandas()
entitydf.reset_index(inplace=True)
print(entitydf)
entitydf = entitydf[['cust_id','event_timestamp']]
training_data = store.get_historical_features(
entity_df=entitydf,
features=[
"ads_fv:age"
,"ads_fv:income"
,"ads_fv:q1_trans_cnt"
,"ads_fv:q2_trans_cnt"
,"ads_fv:q3_trans_cnt"
,"ads_fv:q4_trans_cnt"
],
full_feature_names=True
).to_df()
return training_data
まとめ
このチュートリアルでは、Teradata Vantage で dbt と FEAST を使用する方法を説明しました。サンプル プロジェクトは、Teradata Vantage から生データを取得し、dbt を使用して特徴を生成します。次に、モデルのトレーニング データセットを生成するためのベースを形成する特徴のメタデータが FEAST で作成されました。フィーチャストアを作成する対応するすべてのテーブルも、ランタイムに同じデータベース内に生成されます。