Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

회귀와 분류의 내장 평가기

palantir_models의 내장 평가기는 모델을 추론하고 정답 열과 비교하여 표준 지표를 계산하고 기록합니다. 내장 평가기에는 scikit-learn이 필요합니다. 직접 계산한 지표만 기록하는 경우에는 scikit-learn이 필요하지 않습니다.

evaluate 실행

palantir_models.evaluations.evaluate에 모델, 입력, 정답 열과 평가기 설정을 전달합니다. 아래 예제는 actual_price 정답과 predicted_price 예측 열을 사용합니다. 저장소와 모델을 같은 프로젝트에 두고 palantir_models 0.2384.0 이상을 사용합니다. 경로는 설명용이므로 실제 리소스로 바꿉니다.

import palantir_models as pm
from palantir_models.evaluations import evaluate, RegressionEvaluatorConfig
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):
    evaluate(
        model=housing_model,
        inputs=test_data.pandas(),
        targets="actual_price",
        prediction_column="predicted_price",
        evaluator_config=RegressionEvaluatorConfig(),
    )

@pm.transforms.evaluation 변환 안에서 evaluate를 호출하면 평가를 자동으로 생성하여 기록하므로 create_evaluation을 별도로 호출하지 않아도 됩니다. 이미 만든 평가에 기록하려면 evaluation 인자로 전달합니다. 반환값은 EvaluationResult이며 metrics 속성에 계산한 지표가 있습니다. 같은 지표는 평가에도 기록됩니다.

입력 전달과 열 선택

인자 또는 조건처리 방식
inputs가 pandas 또는 pyspark DataFrame모델에 단일 인자로 전달합니다. Spark 표는 지표 계산을 위해 pandas로 구체화하므로 드라이버 메모리에 들어가야 합니다.
inputs가 tuple모델의 위치 인자로 풀어서 전달합니다.
inputs가 dict보통 키워드 인자로 풀어서 전달합니다. 모델이 map 또는 struct 입력 하나를 선언했다면 사전 자체를 전달합니다.
targets정답 열 이름입니다. evaluation_df가 있으면 그 표에서, 없으면 inputs에서 찾아 정확히 한 열로 결정되어야 합니다.
evaluation_df입력에 정답이 없을 때 별도 정답 표를 전달합니다.
prediction_column모델 출력의 예측 열 이름입니다. 기본값은 targets와 같으므로 이름이 다르면 명시합니다.
evaluator_config회귀 또는 분류 평가기를 선택하고 부분집합 및 분류 옵션을 정합니다.
evaluation이미 생성한 Evaluation에 기록할 때 지정합니다.

모델의 추론 계약

어댑터가 predict를 재정의했으면 evaluate는 predict를 호출하고, 그렇지 않으면 transform을 사용합니다. 해당 메서드는 실제 추론을 수행해야 합니다. predict는 API에 선언한 입력마다 이름이 맞는 인자를 받아야 하며 inputs의 형태는 앞의 전달 규칙과 모델 API에 맞아야 합니다.

추론 결과는 DataFrame이거나 DataFrame을 담은 InferenceResults, dict, tuple 또는 list여야 합니다. 이 중 정확히 하나의 DataFrame이 prediction_column을 포함해야 합니다. 해당 열이 없거나 여러 출력 표에 있으면 평가가 실패합니다. 분류 ROC AUC를 계산할 때에는 설정한 확률 열도 출력에 있어야 합니다.

회귀

연속 수치를 예측하는 모델에는 RegressionEvaluatorConfig를 사용합니다.

지표 키의미
example_count평가한 예제 수입니다.
mean_absolute_error평균 절대 오차(MAE)입니다.
mean_squared_error평균 제곱 오차(MSE)입니다.
root_mean_squared_error평균 제곱 오차의 제곱근(RMSE)입니다.
r2결정계수 R²입니다.
max_error최대 잔차 오차입니다.
mean_absolute_percentage_error평균 절대 백분율 오차(MAPE)입니다.

앞의 전체 변환에서 RegressionEvaluatorConfig()로 이 지표들을 기록합니다.

분류

ClassificationEvaluatorConfig는 이진 및 다중 클래스 분류를 지원합니다. 예측과 정답에 나타나는 고유 클래스 수로 어느 방식인지 자동 결정합니다.

지표 키의미와 조건
example_count평가한 예제 수입니다.
accuracy전체 정확도입니다.
precision정밀도입니다.
recall재현율입니다.
f1F1 점수입니다.
true_positives, true_negatives이진 분류의 참 양성 및 참 음성 수입니다.
false_positives, false_negatives이진 분류의 거짓 양성 및 거짓 음성 수입니다.
roc_auc클래스별 확률을 제공했을 때 일대나머지 방식으로 기록합니다. 확률을 제공하지 않으면 이 지표를 생략합니다.

분류 설정

옵션값과 조건
average기본값 weighted이며 micro, macro 또는 samples를 선택할 수 있습니다. 다중 클래스의 precision, recall, f1 및 roc_auc 평균 방식입니다. 이진 분류에서는 무시합니다.
class_probabilities_columnsOptional[List[str]]입니다. 클래스 인덱스 순서대로 클래스마다 확률 열 하나를 지정합니다.
class_probability_columnOptional[str]입니다. 행마다 클래스별 확률 배열을 담은 단일 출력 열을 지정합니다.

ROC AUC를 계산하려면 두 확률 설정 중 정확히 하나를 제공합니다. 둘 다 주면 오류가 발생합니다. 지정한 열은 모델 출력에 있어야 합니다.

다음 호출은 평가 데코레이터가 있는 변환 안에서 로드한 churn_model과 시험 입력을 사용합니다. 정답은 churned, 예측은 prediction, 확률 배열 열은 class_probabilities입니다.

from palantir_models.evaluations import evaluate, ClassificationEvaluatorConfig

evaluate(
    model=churn_model,
    inputs=test_data.pandas(),
    targets="churned",
    prediction_column="prediction",
    evaluator_config=ClassificationEvaluatorConfig(
        average="macro",
        class_probability_column="class_probabilities",
    ),
)

내장 지표의 부분집합

모든 평가기 설정은 subset을 받습니다. 지정하면 그 평가기가 기록하는 모든 지표 이름 앞에 subset/을 붙입니다. 아래는 같은 평가 변환 안에서 가격대별로 평가하는 처리입니다.

from palantir_models.evaluations import evaluate, RegressionEvaluatorConfig

# Evaluate each price tier separately and group the metrics under that tier.
for tier, group in test_data.pandas().groupby("price_tier"):
    evaluate(
        model=housing_model,
        inputs=group,
        targets="actual_price",
        prediction_column="predicted_price",
        evaluator_config=RegressionEvaluatorConfig(subset=tier),
    )

이 경우 affordable/mean_absolute_error 및 luxury/r2처럼 기록됩니다. 결과의 비교 및 필터는 평가 보기에서 사용합니다.