Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

코드에서 목표 지표 계산

기존 Modeling Objective의 MetricSet 보기를 유지하려면 실제 모델과 평가 데이터 버전에 연결된 지표 데이터셋을 만들 수 있습니다. 모델 자체 페이지에 새 기록을 남기려면 Experiments 또는 Evaluations를 사용합니다.

foundry_ml과 데이터셋 기반 모델은 2025년 10월 31일부터 사용할 수 없습니다. palantir_models 모델 버전에 기존 형식의 지표를 연결하려면 foundry_ml_metrics의 MetricSet을 사용합니다. 이 지표는 모델 자체 페이지에는 표시되지 않으며 Modeling Objective의 대시보드에서 확인할 수 있습니다.

준비 조건

  • Code Repositories에 palantir_models, foundry_ml_metrics, scikit-learn, numpy와 matplotlib을 추가합니다.
  • 모델 어댑터 및 의존성을 현재 저장소에서 로드할 수 있어야 합니다.
  • model_version_rid 속성을 위해 palantir_models 0.1602.0 이상을 사용합니다.
  • 평가 데이터의 TransformInput을 MetricSet에 전달하여 데이터 트랜잭션을 보존합니다.
  • 목표의 평가 데이터셋에 해당 입력을 등록하고 Only show metrics produced by evaluation configuration을 끕니다.

주택 가격 회귀 예제

평가 입력에는 median_house_value 정답과 housing_median_age 및 모델 특성이 있어야 합니다. 모델의 df_out은 정답 열을 유지하고 prediction 열을 반환해야 합니다. 아래는 전체 데이터, 주택 연령 30 초과 및 5 이하에서 RMSE, R²와 잔차 그림을 기록합니다. 전체 데이터와 각 부분집합에는 최소 두 행이 있어야 합니다. scikit-learn의 R² 계산은 한 행만 있으면 NaN을 반환합니다.

import uuid
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error, r2_score
from transforms.api import transform, Input, Output
from palantir_models.transforms import ModelInput
from foundry_ml_metrics import MetricSet

@transform(
    metrics_output=Output("/Housing/metrics/linear_regression_metrics"),
    model_input=ModelInput("/Housing/models/linear_regression_model"),
    testing_data_input=Input("/Housing/data/housing_test_data"),
)
def compute(metrics_output, model_input, testing_data_input):
    model_version_uuid = uuid.UUID(model_input.model_version_rid.rsplit(".", 1)[-1])
    metric_set = MetricSet(model=model_version_uuid, input_data=testing_data_input)
    testing_data = testing_data_input.dataframe().toPandas()
    scored = model_input.transform(testing_data).df_out

    add_metrics(metric_set, scored)
    add_metrics(
        metric_set, scored[scored["housing_median_age"] > 30],
        {"housing_median_age": "Old (>30)"},
    )
    add_metrics(
        metric_set, scored[scored["housing_median_age"] <= 5],
        {"housing_median_age": "New (<=5)"},
    )
    metric_set.save(metrics_output)

def add_metrics(metric_set, scored, subset=None):
    actual = scored["median_house_value"]
    predicted = scored["prediction"]
    rmse = float(np.sqrt(mean_squared_error(actual, predicted)))
    r2 = float(r2_score(actual, predicted))
    metric_set.add(name="rmse", value=rmse, subset=subset)
    metric_set.add(name="r2", value=r2, subset=subset)

    figure, axis = plt.subplots()
    axis.scatter(actual - predicted, predicted)
    axis.set_xlabel("Residual")
    axis.set_ylabel("Prediction")
    metric_set.add(name="scatter_plot", value=figure, subset=subset)
    plt.close(figure)

경로는 실제 리소스로 바꾸며 CBAC 환경에서는 출력 데이터셋을 미리 생성합니다. 이 수동 예제의 구간은 >30과 <=5이며 자동 구간의 하한 포함/상한 제외 규칙과 같은 구간이라고 가정하지 않습니다. subset의 키는 실제로 필터링한 housing_median_age입니다.

이전 Code Workbook 방식과의 차이

이전 워크북은 모델을 Object, 평가 데이터셋을 TransformsInput으로 입력받아 MetricSet을 반환하고 결과를 데이터셋으로 저장했습니다. 저장소 변환에서는 값을 반환하는 대신 metric_set.save로 출력에 기록합니다. 기존 워크북의 foundry_ml 모델은 현재 지원되는 모델 학습 및 추론 환경으로 이전해야 합니다.

모델과 데이터 갱신

지표는 특정 모델 및 평가 데이터 트랜잭션에 연결됩니다. 모델을 갱신하거나 새 데이터 버전을 쓰면 지표 변환도 다시 빌드합니다. 평가 대시보드에서 특정 데이터 트랜잭션을 선택하면 같은 자료로 만든 모델 지표를 비교할 수 있습니다.