モデルのトレーニングと推論

注釈

Snowflake Feature Store API は、Snowpark ML Pythonパッケージ(snowflake-ml-python)v1.5.0以降で利用可能です。

トレーニング用テーブルの生成

フィーチャーストアの generate_training_set メソッドでトレーニング用のデータセットを生成できます。このメソッドは、ソースデータを含むSnowpark DataFrame を派生したフィーチャー値で強化します。フィーチャー表示からフィーチャーのサブセットを選択するには、 fv.slice を使用します。

時系列機能の場合は、タイムスタンプの列名を提供して、機能のポイントインタイム値ルックアップを自動化します。

training_set = fs.generate_training_set(
    spine_df=MySourceDataFrame,
    features=[registered_fv],
    save_as="data_20240101",                    # optional
    spine_timestamp_col="TS",                   # optional
    spine_label_cols=["LABEL1", "LABEL2"],      # optional
    include_feature_view_timestamp_col=False,   # optional
)
Copy

注釈

ここで、 spine_df (MySourceDataFrame) は、ソースデータのエンティティ IDs、タイムスタンプ、ラベル列、および学習データを含む追加列を含む DataFrame です。要求された機能は、提供されたタイムスタンプに関してポイントインタイムで正しく、エンティティIDsのリストに対して取得されます。

トレーニングセットはデフォルトでエフェメラルです。トレーニングセットはSnowpark DataFrames としてのみ存在し、マテリアライズされません。トレーニングセットをテーブルにマテリアライズするには、引数 save_as に有効な、存在しないテーブル名を指定します。トレーニングセットは新しく作成されたテーブルに書き込まれます。

現在のところ、マテリアライズされたテーブルは不変性を保証しておらず、メタデータのサポートも限られています。これらの機能が必要な場合は、代わりに Snowflake Datasets の使用をご検討ください。

注釈

generate_training_set API は snowflake-ml-python バージョン 1.5.4 以降で利用可能です。

トレーニング用Snowflake Datasetsの生成

フィーチャーストアの generate_dataset メソッドを使用して、 Snowflake Dataset を生成できます。メソッドのシグネチャーは generate_training_set と似ています。主な違いは、必須の引数 name と、オプションの引数 version 、そして追加のメタデータフィールドです。 generate_dataset は常に結果をマテリアライズします。

Snowflake Datasetsは、不変のファイルベースのデータスナップショットを提供し、大規模なデータセットや分散トレーニングにおけるモデルの再現性と効率的なデータ取り込みを支援します。データセットはまた、発見しやすく消費しやすいように、メタデータのサポートが拡張されています。

次のコードは、フィーチャービューからデータセットを生成する例です:

dataset: Dataset = fs.generate_dataset(
    name="MY_DATASET",
    spine_df=MySourceDataFrame,
    features=[registered_fv],
    version="v1",                               # optional
    spine_timestamp_col="TS",                   # optional
    spine_label_cols=["LABEL1", "LABEL2"],      # optional
    include_feature_view_timestamp_col=False,   # optional
    desc="my new dataset",                      # optional
)
Copy

モデルトレーニング

データセットを作成したら、次のように学習時にそれをモデルに渡すことができます。

Snowpark DataFrame を生成した場合、それをモデルに直接渡します:

my_model = train_my_model(training_set)
Copy

Snowflake Datasetを生成した場合は、それをSnowpark DataFrame に変換してモデルに渡します:

my_model = train_my_model(dataset.read.to_snowpark_dataframe())
Copy

このモデルは、 Snowflake Model Registry にログ記録することができます。

機能の取得と予測の実行

Pythonセッションでモデルを作成した場合、以下のように、単純にフィーチャーストアからフィーチャービューを取得し、予測用のモデルに渡すことができます。

prediction_df: snowpark.DataFrame = fs.retrieve_feature_values(
    spine_df=prediction_source_dataframe,
    features=[registered_fv],
    spine_timestamp_col="TS",
    exclude_columns=[],
)

# predict with your previously trained model
my_model.predict(prediction_df)
Copy

exclude_columns 引数を使用して指定した列を除外するか、 include_feature_view_timestamp_col を設定してタイムスタンプ列をフィーチャービューに含めることができます。