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

コードでモデルを評価する

メトリクスセットは、2025年10月31日から正式に非推奨となっているライブラリ foundry_ml を使用する、データセットを元データとするモデル向けに作られました。新しい実装では、代わりに実験を使用することを推奨します。palantir_models で作成したモデルのモデルページにはメトリクスセットが表示されませんが、モデリング目標には表示できます。

Foundry では、モデルに対して1個以上のメトリクスセットを作成することで、個々のモデルの性能をコードで評価できます。このページは、MetricSet クラスに関する知識があることを前提としています。

メトリクスセットによって生成されるメトリクスは、評価データセットの特定のトランザクションに関連付けられ、Modeling Objectives アプリケーションで確認できます。これらのメトリクスを有効にするには、Modeling Objectives の設定ページで「評価設定によって生成されたメトリクスのみを表示」の切り替えが必要です。モデルまたは入力データセットを更新するたびに、メトリクスセットを生成するコードの再実行が必要になる場合があります。

Model Preview アプリケーションのメトリクス

Code Workbook でモデルを評価する

Code Workbook アプリケーションでモデルを評価するには、次の手順に従います。

  1. コードワークブックを作成するか、既存のワークブックを開きます。
  2. コードワークブックの環境に foundry_ml パッケージをインポートします。foundry_ml_metrics パッケージは foundry_ml の一部として利用可能になります。
  3. モデルと評価データセットをコードワークブックにインポートします。
  4. Python で MetricSet オブジェクトを生成するトランスフォームを作成し、モデルと評価データセットをその MetricSet の入力として関連付けます。
  5. トランスフォーム内の MetricSet にメトリクスを追加します。
  6. トランスフォームの結果として MetricSet を返します。

以下の例では、lr_model という名前の回帰モデルと、testing_data という名前のテスト用データセットを使用します。どちらもはじめにのチュートリアルで取り上げている住宅データセットに基づいています。

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 def lr_evaluation_testing(lr_model, testing_data_input): from foundry_ml_metrics import MetricSet # 環境に foundry_ml が追加されていることを確認してください model = lr_model # モデルの名前を変更します metric_set = MetricSet( # 個々のメトリクスを追加するための MetricSet を作成します model = lr_model, # 評価対象の Foundry ML モデル input_data=testing_data_input # 性能評価に使用するデータセットの TransformInput ) testing_data_df = testing_data_input.dataframe().toPandas() # TransformInput から pandas データフレームを取得します y_true_column = 'median_house_value' # モデルが予測する評価データセット内の列です y_prediction_column = 'prediction' # モデルがデータセットを加工するときに生成する列です scored_df = get_model_scores(model, testing_data_df) # 入力データセット全体のメトリクスを追加します add_numeric_metrics_to_metric_set(metric_set, scored_df, y_true_column, y_prediction_column) add_residuals_scatter_plot_to_metric_set(metric_set, scored_df, y_true_column, y_prediction_column) # housing_median_age 列の値が30より大きい場合のメトリクスを追加します old_homes_subset = {'median_house_value': 'Old (>30)'} old_houses_scored_df = scored_df[scored_df['housing_median_age'] > 30] add_numeric_metrics_to_metric_set(metric_set, old_houses_scored_df, y_true_column, y_prediction_column, old_homes_subset) add_residuals_scatter_plot_to_metric_set(metric_set, old_houses_scored_df, y_true_column, y_prediction_column, old_homes_subset) # housing_median_age 列の値が5以下の場合のメトリクスを追加します new_homes_subset = {'median_house_value': 'New (<=5)'} new_houses_scored_df = scored_df[scored_df['housing_median_age'] <= 5] add_numeric_metrics_to_metric_set(metric_set, new_houses_scored_df, y_true_column, y_prediction_column, new_homes_subset) add_residuals_scatter_plot_to_metric_set(metric_set, new_houses_scored_df, y_true_column, y_prediction_column, new_homes_subset) return metric_set # Code Workbooks はこれを Foundry 内に MetricSet として保存します def get_model_scores(model, df): return model.transform(df) # モデルに基づいて予測を作成します def add_numeric_metrics_to_metric_set( metric_set, scored_df, y_true_column, y_prediction_column, subset=None ): import numpy as np from sklearn.metrics import mean_squared_error, r2_score y_true = scored_df[y_true_column] y_pred = scored_df[y_prediction_column] # メトリクスを計算します mse = mean_squared_error(y_true, y_pred) rmse = np.sqrt(mse) r2 = r2_score(y_true, y_pred) metric_set.add(name='rmse', value=rmse, subset=subset) # rmse は Float です metric_set.add(name='r2', value=r2, subset=subset) # r2 は Float です def add_residuals_scatter_plot_to_metric_set( metric_set, scored_df, y_true_column, y_prediction_column, subset=None ): import matplotlib.pyplot as plt y_true = scored_df[y_true_column] y_pred = scored_df[y_prediction_column] scatter_plot = plt.scatter((y_true - y_pred), y_pred) # 散布図を作成します figure = plt.gcf() # 現在の pyplot の図を取得します metric_set.add(name='scatter_plot', value=figure, subset=subset) # figure は pyplot の画像です plt.close() # pyplot の図を閉じます

Code Repositories でモデルを評価する

Code Repositories アプリケーションでモデルを評価するには、次の手順に従います。

  1. コードリポジトリを作成するか、既存のリポジトリを開きます。
  2. コードリポジトリの環境に foundry_ml パッケージをインポートします。foundry_ml_metrics パッケージは foundry_ml の一部として利用可能になります。
  3. Python で MetricSet オブジェクトを生成するトランスフォームを作成し、モデルと評価データセットをその MetricSet の入力として関連付けます。
    • MetricSet を返す代わりに、metric_set.save(metrics_output) で metric_set を保存します。
    • モデルと評価データセットのトランスフォーム入力データ型は、どちらも TransformInput になります。
  4. トランスフォーム内の MetricSet にメトリクスを追加します。
  5. トランスフォームの結果として MetricSet を返します。

以下の例では、lr_model という名前の回帰モデルと、testing_data という名前のテスト用データセットを使用します。どちらもはじめにのチュートリアルで取り上げている住宅データセットに基づいています。

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 from transforms.api import transform, Input, Output # transforms-python/conda_recipe/meta.yaml の実行要件に foundry_ml が追加されていることを確認してください from foundry_ml import Model from foundry_ml_metrics import MetricSet @transform( # @transform を使用するため、入力は TransformInput になります # 出力パスを、メトリクスを保存する出力先の場所に更新する必要があります metrics_output=Output("/Path/to/metrics_dataset/sklearn_linear_regression_metrics"), # 入力パスを、モデルと評価データセットのパスに更新する必要があります model_input=Input("/Path/to/model/sklearn_linear_regression"), testing_data_input=Input("/Path/to/evaluation_dataset/house_prices_in_america_test") ) def compute(metrics_output, model_input, testing_data_input): model = Model.load(model_input) # TransformInput から Foundry ML モデルを読み込みます metric_set = MetricSet( # 個々のメトリクスを追加するための MetricSet を作成します model=model, # 評価対象の Foundry ML モデル input_data=testing_data_input # 性能評価に使用するデータセットの TransformInput ) testing_data_df = testing_data_input.dataframe().toPandas() # TransformInput から pandas データフレームを取得します y_true_column = 'median_house_value' # モデルが予測する評価データセット内の列です y_prediction_column = 'prediction' # モデルがデータセットを加工するときに生成する列です scored_df = get_model_scores(model, testing_data_df) # 入力データセット全体のメトリクスを追加します add_numeric_metrics_to_metric_set(metric_set, scored_df, y_true_column, y_prediction_column) add_residuals_scatter_plot_to_metric_set(metric_set, scored_df, y_true_column, y_prediction_column) # housing_median_age 列の値が30より大きい場合のメトリクスを追加します old_homes_subset = {'median_house_value': 'Old (>30)'} old_houses_scored_df = scored_df[scored_df['housing_median_age'] > 30] add_numeric_metrics_to_metric_set(metric_set, old_houses_scored_df, y_true_column, y_prediction_column, old_homes_subset) add_residuals_scatter_plot_to_metric_set(metric_set, old_houses_scored_df, y_true_column, y_prediction_column, old_homes_subset) # housing_median_age 列の値が5以下の場合のメトリクスを追加します new_homes_subset = {'median_house_value': 'New (<=5)'} new_houses_scored_df = scored_df[scored_df['housing_median_age'] <= 5] add_numeric_metrics_to_metric_set(metric_set, new_houses_scored_df, y_true_column, y_prediction_column, new_homes_subset) add_residuals_scatter_plot_to_metric_set(metric_set, new_houses_scored_df, y_true_column, y_prediction_column, new_homes_subset) metric_set.save(metrics_output) # この MetricSet を TransformsOutput に保存します def get_model_scores(model, df): return model.transform(df) # モデルに基づいて予測を作成します def add_numeric_metrics_to_metric_set( metric_set, scored_df, y_true_column, y_prediction_column, subset=None ): import numpy as np from sklearn.metrics import mean_squared_error, r2_score y_true = scored_df[y_true_column] y_pred = scored_df[y_prediction_column] # メトリクスを計算します mse = mean_squared_error(y_true, y_pred) rmse = np.sqrt(mse) r2 = r2_score(y_true, y_pred) metric_set.add(name='rmse', value=rmse, subset=subset) # rmse は Float です metric_set.add(name='r2', value=r2, subset=subset) # r2 は Float です def add_residuals_scatter_plot_to_metric_set( metric_set, scored_df, y_true_column, y_prediction_column, subset=None ): import matplotlib.pyplot as plt y_true = scored_df[y_true_column] y_pred = scored_df[y_prediction_column] scatter_plot = plt.scatter((y_true - y_pred), y_pred) # 散布図を作成します figure = plt.gcf() # 現在の pyplot の図を取得します metric_set.add(name='scatter_plot', value=figure, subset=subset) # figure は pyplot の画像です plt.close() # pyplot の図を閉じます

メトリクスを更新する

上記のコードスニペットはトランスフォームを作成するため、メトリクスセットは作成され、Foundry のビルドを通じて計算されます。モデルが更新されたとき、または新しい入力データのバージョンが利用可能になったときは、メトリクスセットを再ビルドして、そのモデルに関連付けられているメトリクスを更新することが重要です。