トップ / 基礎知識

Snowpark ML の概要

Snowflake上で完結する機械学習ワークフロー。前処理・学習を担うModelingと、モデル管理を担うRegistryの2本柱です。

すべてSnowflakeの中で完結Snowflakeのテーブル生データsnowflake.ml.modeling前処理・学習snowflake.ml.registryバージョン・指標を保存推論SQL / Python / REST API

snowflake.ml.modeling:前処理とトレーニング

Snowpark MLのモデリングAPIは、snowflake.ml.modelingというモジュールで提供されます。この中のsnowflake.ml.modeling.preprocessingには、StandardScaler・OneHotEncoder・OrdinalEncoder・MinMaxScaler・RobustScalerなど、scikit-learnで見慣れた前処理クラスに相当するものが揃っており、Snowflakeの分散コンピュート上で実行できます。学習側もsnowflake.ml.modeling.xgboost.XGBClassifierのようにscikit-learn互換のfit/predictインターフェースで提供されます。

from snowflake.ml.modeling.preprocessing import StandardScaler
from snowflake.ml.modeling.xgboost import XGBClassifier

# input_cols/label_cols/output_cols でSnowpark DataFrameの列名を指定する
# (scikit-learnと違い、Xとyを別のオブジェクトに分けない)
scaler = StandardScaler(input_cols=["amount", "age"], output_cols=["amount_sc", "age_sc"])
scaled_df = scaler.fit(train_df).transform(train_df)

model = XGBClassifier(
    input_cols=["amount_sc", "age_sc"],
    label_cols=["churned"],
    output_cols=["predicted_churn"],
)
model.fit(scaled_df)

input_cols・label_cols・output_colsでSnowpark DataFrameの列名を直接指定する点がscikit-learnとの大きな違いです(NumPy配列にXとyを分けて渡す必要がありません)。公式ドキュメントは、既存のオープンソースのコードやライブラリをそのままSnowflake上のモデル学習に使えることを謳っています。

snowflake.ml.registry:モデルの管理と配信

学習済みモデルを管理する側はsnowflake.ml.registryモジュールで、Registryクラスを使います。

from snowflake.ml.registry import Registry

registry = Registry(session=session)
model_version = registry.log_model(
    model,
    model_name="churn_predictor",
    version_name="v1",
    comment="XGBoost churn model trained on Q3 data",
)

# 登録済みモデルでウェアハウス上のバッチ推論を実行する
predictions = model_version.run(new_customers_df)

公式ドキュメントは「モデルのバージョン・指標・メタデータを保存し、Python・SQL・REST APIエンドポイントを使った分散推論を提供する」と説明しています。モデルの入出力の型(シグネチャ)やバージョンもRegistry側で管理されます。

何が嬉しいか

前処理からモデル管理まで、データをSnowflakeの外に出すことなく一貫して扱える点がSnowpark MLの特徴です。学習用データをS3やローカルにエクスポートする手順そのものが不要になり、Snowflakeのロールベースのアクセス制御(RBAC)がモデルとデータの両方に対して一貫してかかります。Polarsにはこうした「モデルのバージョン管理・配信」に相当する機能は無く、Polars自体はあくまでローカルのデータフレーム処理ライブラリです。

で、どういうときに使うか

出典

公式ドキュメントの記載にもとづく解説です(実行検証はしていません)。確認日:2026-08-27