注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

評価を作成して実行する

このページでは、評価を計算して記録するトランスフォームの記述方法、評価するモデルバージョンの制御方法、結果をサブセットに分割する方法、およびほかのブランチのバージョンを評価する方法を説明します。

評価ロジックを記述するコードリポジトリは、評価するモデルと同じプロジェクトにある必要があります。モデルとリポジトリが異なるプロジェクトにある場合、評価の書き込みは権限エラーで失敗します。モデルまたはリポジトリを移動して、同じプロジェクトに配置してください。

完全な例

以下の例では、住宅価格を予測する回帰モデルを、学習に使用せずに取り分けたテストデータセットに対して評価します。テストデータセットには、入力特徴量、正解データの列 actual_price、および各行に affordable、mid_range、luxury のいずれかのラベルを付ける price_tier 列が含まれています。

評価ロジックを記述する前に、コードリポジトリをアップグレードし、palantir_models ライブラリを >= 0.2384.0 にアップグレードしてください。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import plotly.express as px import palantir_models as pm from palantir_models.transforms import ModelInput from transforms.api import transform, Input @pm.transforms.evaluation("error_analysis") @transform.using( test_data=Input("/Housing/clean/test_set"), housing_model=ModelInput("/Housing/models/price_regressor", use_sidecar=True), ) def compute(test_data, housing_model): df = test_data.pandas() # 推論を実行します。具体的な呼び出し方法は、モデルアダプターの API によって異なります。 predictions = housing_model.transform(df)["predicted_price"] residuals = df["actual_price"] - predictions evaluation = housing_model.create_evaluation(name="nationwide") # すべての予測の誤差メトリクスを集計します。 evaluation.log_metrics({ "mae": residuals.abs().mean(), "rmse": (residuals ** 2).mean() ** 0.5, }) # 残差分布のプロット。 evaluation.log_plot( "residual_distribution", px.histogram(residuals, nbins=50, title="Residual distribution"), )

ほかの Python トランスフォームと同様に、トランスフォームを実行すると評価が開始されます。ビルドに成功すると、評価は price_regressor モデルの error_analysis 評価セットにコミットされます。ビルドに失敗すると、評価は中止され、何も公開されません。

評価するモデルバージョンを決める

評価は常に単一のモデルバージョンにリンクされます。これは、ModelInput が解決してトランスフォームに読み込むバージョンです。評価セット内でも評価は同じバージョンに関連付けられるため、バージョン間で同じ分析を比較できます。

デフォルトでは、ModelInput はビルドのブランチ上にある最新のモデルバージョンを解決します。ModelInput の引数を使用して、解決されるバージョンを制御できます。

  • model_version は特定のバージョンに固定します。これは branch 引数より優先されます。
  • branch は別のブランチ上にある最新バージョンを解決します。
Copied!
1 2 # 固定された特定のモデルバージョンを評価します。 ModelInput("ri.model.main.model...", model_version="ri.model.main.model-version...")

モデルが現在のリポジトリの外部で定義されている場合は、use_sidecar=True を指定してモデルをサイドカーとして実行することを推奨します。モデルアダプターとその依存関係が別のコンテナにインポートされるため、依存関係の競合を回避できます。バージョンの指定とサイドカーコンテナとしてのモデルの実行の詳細については、ModelInput クラスリファレンスを参照してください。

サブセットを構成する

サブセットは、共通の prefix/name の下に関連する結果をグループ化します。一般的なパターンとして、列を基準にテストデータセットをパーティション分割し、パーティションの値を接頭辞として使用して、各パーティションで同じメトリクスを記録します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # テストセットを価格帯でグループ化し、価格帯ごとの誤差メトリクスを記録します。 for tier, group in df.groupby("price_tier"): tier_predictions = housing_model.transform(group)["predicted_price"] tier_residuals = group["actual_price"] - tier_predictions evaluation.log_metrics({ f"{tier}/mae": tier_residuals.abs().mean(), f"{tier}/rmse": (tier_residuals ** 2).mean() ** 0.5, }) evaluation.log_plot( f"{tier}/residuals", px.histogram(tier_residuals, nbins=50), )

これにより、affordable/mae、mid_range/mae、luxury/mae のメトリクス(および対応する残差プロット)が生成され、モデルページで左右に並べて比較できます。接頭辞は任意であり、データをサブセットに分割する方法も自由に決められます。

ほかのブランチのバージョンを評価する

別のブランチにあるモデルバージョンを評価するには、次の2つの方法があります。

  • そのブランチでトランスフォームを実行します。 ビルドがあるブランチで実行されると、ModelInput はデフォルトでそのブランチ上の最新のモデルバージョンを解決するため、評価はそのバージョンに関連付けられます。
  • ModelInput から対象ブランチを指定します。 branch 引数を設定すると、ビルドを実行するブランチを変更せずに、特定のブランチ上の最新バージョンを解決できます。
Copied!
1 2 # 「testing」ブランチの最新バージョンを特定します。 ModelInput("ri.models.main.model...", branch="testing")

model_version は branch より優先されることに留意してください。両方が指定された場合は、固定されたバージョンが使用され、ブランチは無視されます。

組み込みの評価ツールを実行する

標準的な回帰モデルまたは分類モデルを評価する場合は、メトリクスを手動で計算する代わりに、組み込みの評価ツールを使用できます。これらのツールは推論を実行し、予測を正解データの列と比較して、標準的なメトリクスを評価に記録します。

メソッドの完全なシグネチャについては、モデル評価の Python API リファレンスを参照してください。