Evaluation Python API 참조
평가 API는 ModelInput이 로드한 모델 버전의 결과를 기록합니다. 저장소와 모델은 같은 프로젝트에 있어야 하며 저장소 업그레이드와 palantir_models 0.2384.0 이상이 필요합니다.
palantir_models.transforms.evaluation
변환을 @pm.transforms.evaluation(evaluation_set_name)으로 감싸서 모델 입력에 기록할 평가 집합을 지정합니다. evaluation_set_name은 비어 있지 않은 str이어야 합니다. 집합이 없으면 첫 변환 실행에 자동 생성합니다.
다음 예제의 경로는 실제 리소스로 바꿉니다. 모델 API는 입력 행 순서 및 인덱스를 유지하는 df_out 표에 predicted_price 열을 반환하고 시험 데이터는 수치 actual_price 정답을 포함해야 합니다.
from transforms.api import transform, Input
import palantir_models as pm
from palantir_models.transforms import ModelInput
@pm.transforms.evaluation("error_analysis")
@transform.using(
input_data=Input("/Housing/clean/test_set"),
model_input=ModelInput("/Housing/models/price_regressor", use_sidecar=True),
)
def compute(input_data, model_input):
data = input_data.pandas()
predicted = model_input.transform(data).df_out["predicted_price"]
residuals = data["actual_price"] - predicted
evaluation = model_input.create_evaluation(name="my-evaluation")
evaluation.log_metric("mae", float(residuals.abs().mean()))
ModelInput.create_evaluation
create_evaluation(name: Optional[str] = None) -> Evaluation
평가 데코레이터가 적용된 변환 안에서 호출해야 합니다. 해당 ModelInput이 로드한 모델 버전에 연결된 Evaluation을 반환합니다. 같은 변환에서 해당 입력에 대해 반복 호출하면 같은 평가 인스턴스를 반환합니다.
name을 생략하면 평가 집합 이름을 사용합니다. 이름은 고유할 필요가 없으며 다시 사용한 이름은 자동으로 구분합니다. 성공한 빌드 끝에 집합으로 커밋하고 빌드가 실패하면 중단합니다.
Evaluation 객체
palantir_models.evaluations.Evaluation은 한 모델 버전의 시험 결과를 기록합니다. 단계별 시리즈가 아니므로 아래 메서드는 step을 받지 않습니다. evaluation_rid 속성으로 평가의 RID를 읽을 수 있습니다.
이하 예제의 evaluation은 앞의 변환에서 생성한 객체입니다. 숫자가 직접 들어간 호출은 API 입력 형식을 설명하는 값이며, 실제 평가는 계산한 결과를 전달합니다.
log_metric
log_metric(key: str, value: Union[int, float])
key 이름으로 숫자 value를 기록합니다. 같은 키에 다시 쓰면 이전 값을 덮어씁니다.
evaluation.log_metric("mae", 14250.0)
log_metrics
log_metrics(metrics: Dict[str, Union[int, float]])
이름에서 값으로 가는 metrics 사전을 기록합니다. 모든 값은 int 또는 float여야 합니다.
evaluation.log_metrics({"mae": 14250.0, "r2": 0.91})
log_image
log_image(name: str, image: Union[str, bytes, PIL.Image.Image], caption: Optional[str] = None)
name은 이미지 이름입니다. image는 PNG 파일 경로, PNG 바이트 또는 Pillow 이미지 객체입니다. 다른 이미지 파일 형식은 거부합니다. caption은 선택 설명이며 기본값은 None입니다.
다음 함수는 실제 Pillow 이미지와 PNG 경로를 받아 기록합니다.
def record_evaluation_images(evaluation, pillow_image, heatmap_path):
evaluation.log_image("residual_distribution", pillow_image)
evaluation.log_image(
"error_heatmap", heatmap_path,
caption="Geographic error heatmap",
)
log_plot
log_plot(name: str, plot_data: plotly.graph_objects.Figure, description: Optional[str] = None)
name은 플롯 이름이고 plot_data는 Plotly Figure입니다. 다른 플롯 타입은 거부합니다. 선택 설명은 description이며 기본값은 None입니다. 이미지의 caption과 인자 이름이 다릅니다.
아래 rows는 price_tier와 residual 열을 가진 실제 평가 결과 표입니다.
import plotly.express as px
def record_evaluation_plot(evaluation, rows):
figure = px.box(rows, x="price_tier", y="residual", title="Residuals by price tier")
evaluation.log_plot(
"residuals_by_tier", figure,
description="Residual distribution across all price tiers",
)
log_table
log_table(name: str, table: Union[polars.DataFrame, pandas.DataFrame], description: Optional[str] = None)
name은 표 이름이고 table은 pandas 또는 Polars DataFrame입니다. 다른 자료형은 거부합니다. description은 선택 설명이며 기본값은 None입니다.
가격대 평가에서는 affordable, mid_range와 luxury별 mae 및 r2를 계산한 표를 다음과 같이 기록합니다. error_by_tier는 호출자가 계산한 실제 결과 표입니다.
def record_evaluation_table(evaluation, error_by_tier):
evaluation.log_table("error_by_price_tier", error_by_tier)
기록 한도와 내장 계산
지표, 이미지, 플롯 및 표 이름은 최대 100자이며 이미지 caption은 최대 200자입니다. 이미지, 플롯 또는 표 한 개의 업로드는 최대 5 MB, 표는 최대 100,000행입니다. 모델당 평가 집합은 최대 100개입니다. 한도를 늘리려면 Palantir Support에 문의합니다.
표준 지표를 계산하는 evaluate, RegressionEvaluatorConfig 및 ClassificationEvaluatorConfig의 입력 분배, 정답 열, 확률 열과 반환값은 내장 평가기에 있습니다.