평가 변환 작성과 실행
평가 로직을 작성한 저장소와 대상 모델은 같은 프로젝트에 있어야 합니다. 다른 프로젝트에서는 모델을 읽을 수 있더라도 평가 기록이 권한 오류로 실패할 수 있으므로 모델 또는 저장소를 같은 프로젝트로 옮깁니다. 저장소 업그레이드와 palantir_models 0.2384.0 이상도 필요합니다.
주택 가격 평가 예제
시험 데이터에는 모델 입력 특성, 수치 정답 actual_price와 가격대 price_tier가 있습니다. 가격대 값은 affordable, mid_range 또는 luxury입니다. 아래 어댑터는 Pandas 표 입력 하나를 받고 입력 행 순서와 인덱스를 유지하는 df_out 표에 predicted_price 열을 반환해야 합니다. 경로는 같은 프로젝트의 실제 리소스로 바꿉니다.
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()
predictions = housing_model.transform(df).df_out["predicted_price"]
residuals = df["actual_price"] - predictions
evaluation = housing_model.create_evaluation(name="nationwide")
evaluation.log_metrics({
"mae": float(residuals.abs().mean()),
"rmse": float((residuals ** 2).mean() ** 0.5),
})
evaluation.log_plot(
"residual_distribution",
px.histogram(residuals, nbins=50, title="Residual distribution"),
)
일반 Python 변환처럼 빌드하여 실행합니다. 성공하면 price_regressor 모델의 error_analysis 집합에 커밋하고 실패하면 평가를 중단하여 결과를 게시하지 않습니다.
평가할 모델 버전
평가는 ModelInput이 실제로 로드한 단일 모델 버전에 연결됩니다. 기본값은 빌드 브랜치의 최신 버전입니다.
특정 버전을 고정하려면 model_version에 모델 페이지에서 선택한 버전 RID 또는 지원되는 의미적 버전을 지정합니다. 아래 selected_version은 실제 선택한 버전 값입니다.
ModelInput("/Housing/models/price_regressor", model_version=selected_version)
다른 브랜치의 최신 버전을 선택하려면 branch를 지정합니다.
ModelInput("/Housing/models/price_regressor", branch="testing")
model_version과 branch를 함께 지정하면 model_version이 우선하며 branch는 무시합니다. 모델이 현재 저장소 밖에서 정의되었다면 use_sidecar=True를 권장합니다. 어댑터와 의존성을 별도 컨테이너에 로드하여 환경 충돌을 줄입니다.
가격대별 부분집합
앞의 compute 안에서 df와 evaluation을 만든 뒤 다음 처리를 추가하면 가격대별 지표와 잔차 분포를 기록합니다. 각 그룹을 같은 모델에 전달하며 앞에서 정한 df_out 및 predicted_price 계약을 사용합니다.
for tier, group in df.groupby("price_tier"):
tier_predictions = housing_model.transform(group).df_out["predicted_price"]
tier_residuals = group["actual_price"] - tier_predictions
evaluation.log_metrics({
f"{tier}/mae": float(tier_residuals.abs().mean()),
f"{tier}/rmse": float((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와 각 구간의 rmse 및 residuals 플롯을 나란히 비교할 수 있습니다. 접두사와 데이터를 나누는 기준은 직접 정합니다.
다른 브랜치 실행
평가 변환 자체를 대상 브랜치에서 실행하면 그 브랜치의 최신 모델이 기본으로 선택됩니다. 빌드 브랜치를 바꾸지 않으려면 ModelInput에 branch를 지정합니다. 두 방식 모두 실제로 선택하여 로드한 모델 버전에 평가가 연결됩니다. model_version을 지정했다면 브랜치 선택보다 우선합니다.
표준 회귀 또는 분류 지표는 내장 평가기가 추론과 정답 비교 및 기록을 처리합니다. 추가 기록 메서드는 평가 API에서 확인합니다.