Imagen

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への入力として使用されます。次に、特徴を使用してモデルのトレーニング データセットを生成します。

始めましょう

  1. dbt、feast、およびそれらの依存関係を管理するための新しい Python 環境を作成します。環境を有効化します。

    python3 -m venv env
    source env/bin/activate
  2. チュートリアル リポジトリのクローンを作成し、ディレクトリをプロジェクト ディレクトリに変更します。

    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 つのテーブルで構成され、以下のようなエンティティリレーションシップ図があります。

Diagram

dbt はこの生データを取得し、ML モデリングおよび分析ツールにより適した以下のモデルを構築します。

Diagram

dbtを構成する

以下の内容のファイル $HOME/.dbt/profiles.yml を作成します。Teradata インスタンスに一致するように <host><user><password> を調整します。

データベースを設定する

以下の dbt プロファイルは、 teddy_bank というデータベースを指します。Teradata Vantage インスタンス内の既存のデータベースを指すように schema 値を変更できます。

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

Teradata SQLレジストリの構文

path = 'teradatasql://'+ teradata_user +':' + teradata_password + '@'+host + '/?database=' +
        teradata_database + '&LOGMECH=' + teradata_log_mech

dbtを実行する

このステップでは、customersaccountstransactions のデータテーブルを入力します。

dbt seed

ディメンションモデルを作成しする

生データ テーブルができたので、ディメンションモデルを作成するように dbt に指示できます。

dbt run --select Analytic_Dataset

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 で作成されました。フィーチャストアを作成する対応するすべてのテーブルも、ランタイムに同じデータベース内に生成されます。

このページは役に立ちましたか?