Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Modeling Objective의 사용자 정의 평가 라이브러리

평가 라이브러리는 여러 목표에서 같은 성능, 공정성 또는 강건성 계산을 재사용하는 Python 패키지입니다. 기본 이진 분류와 회귀 평가기로 필요한 지표를 만들 수 없다면 사용자 정의 Evaluator를 게시하여 목표의 평가 설정에서 선택할 수 있습니다.

게시한 라이브러리를 볼 권한이 있는 사용자는 평가기를 선택할 수 있습니다. UI의 이름, 설명, 설정 인자와 지표 설명은 구현 클래스의 docstring에서 가져옵니다.

저장소와 모듈

프로젝트에서 + New > Repository type > Model Integration을 선택하고 Language template을 Model Evaluator Template Library로 정한 뒤 Initialize repository를 선택합니다.

기본 구현 파일은 src/evaluator/custom_evaluator.py입니다. Evaluator 인터페이스 구현을 커밋하고 저장소의 새 버전 태그를 게시하면 등록합니다.

한 저장소에서 여러 평가기를 게시할 수 있습니다. 추가 Python 파일에 구현하면 build.gradle의 modelEvaluator.modules에도 해당 모듈을 등록합니다. 기본 파일의 모듈 이름은 evaluator.custom_evaluator입니다. 예를 들어 실제 fairness_evaluator.py를 추가했다면 evaluator.fairness_evaluator도 목록에 추가합니다.

Evaluator 인터페이스

apply_spark(self, df: pyspark.sql.DataFrame) -> List[ComputedMetricValue]를 구현합니다. 전달받은 Spark 표에서 실제 지표를 계산하고 ComputedMetricValue 목록을 반환합니다.

필수 docstring 항목은 display-name과 description입니다. param으로 설정 인자 설명을, metric으로 생성할 지표 설명을 0개 이상 추가할 수 있습니다.

행 수 평가기

다음 구현은 설정 인자 없이 입력 행 수를 계산합니다. UI 이름은 Row Count Evaluator, 지표 이름은 Row Count입니다.

from typing import List
from pyspark.sql import DataFrame
from foundry_ml_metrics.evaluation import ComputedMetricValue, Evaluator

class CustomEvaluator(Evaluator):
    """
        :display-name: Row Count Evaluator
        :description: This evaluator calculates the row count of the input DataFrame.

        :metric Row Count: The row count
    """

    def apply_spark(self, df: DataFrame) -> List[ComputedMetricValue]:
        row_count = df.count()

        return [
            ComputedMetricValue(
                metric_name='Row Count',
                metric_value=row_count
            )
        ]

설정 가능한 평가기

목표는 사용자가 입력한 설정 값을 실행 시 생성자에 전달합니다. 지원하는 설정 타입은 다음과 같습니다.

타입설정 값
int정수
float실수
boolTrue 또는 False
str문자열
Field[float]입력 표의 실수 열
Field[int]입력 표의 정수 열
Field[str]입력 표의 문자열 열

선택 인자는 typing.Optional로 감쌉니다. 예를 들어 Optional[str] 또는 Optional[Field[str]]를 사용할 수 있습니다.

다음은 앞의 기본 클래스를 대체하는 설정형 구현입니다. column은 정수 열을 선택하는 Field[int], value는 비교할 정수입니다. 전체 Row Count와 선택한 값으로 필터링한 Filtered Row Count를 반환합니다.

from typing import List
from pyspark.sql import DataFrame
from pyspark.sql import functions as F
from foundry_ml_metrics.evaluation import ComputedMetricValue, Evaluator, Field

class CustomEvaluator(Evaluator):
    """
        :display-name: Configurable Row Count Evaluator
        :description: This evaluator calculates the row count of the input DataFrame, filtered to the specified value.

        :param column: Filtered column
        :param value: Filtered value

        :metric Row Count: The unfiltered row count
        :metric Filtered Row Count: The filtered row count
    """

    column: Field[int]
    value: int

    def __init__(self, column: Field[int], value: int):
        self.column = column
        self.value = value

    def apply_spark(self, df: DataFrame) -> List[ComputedMetricValue]:
        column_name = self.column.name
        column_value = self.value

        row_count = df.count()

        filtered_row_count = df.filter(
            F.col(column_name) == column_value
        ).count()

        return [
            ComputedMetricValue(
                metric_name='Row Count',
                metric_value=row_count
            ),
            ComputedMetricValue(
                metric_name='Filtered Row Count',
                metric_value=filtered_row_count
            )
        ]

변경을 사용하려면 커밋하고 새 저장소 태그를 게시합니다. 목표의 평가 라이브러리 설정에서 게시한 평가기와 인자를 선택합니다.

Field와 ComputedMetricValue

Field.name은 선택한 실제 열 이름을 담는 문자열입니다. 평가기는 이를 F.col에 전달하여 표를 필터링할 수 있습니다.

ComputedMetricValue(metric_name, metric_value)는 지표 이름과 값을 저장합니다. metric_name은 문자열이고 metric_value는 아래 허용 타입입니다. 부분집합은 목표의 평가 파이프라인이 구성한 데이터 범위와 연결합니다.

MetricValue

지원 숫자는 Python int와 float 및 다음 NumPy 타입입니다.

  • np.int8, np.int16, np.int32, np.int64
  • np.uint8, np.uint16, np.uint32, np.uint64
  • np.float32, np.float64

그림은 matplotlib.Figure 또는 matplotlib.pyplot.Figure를 사용할 수 있습니다. 다른 이미지 객체는 다음 인터페이스 중 정확히 하나를 구현한 경우 사용할 수 있습니다.

메서드반환 또는 인자
get_figure(self)Figure를 반환합니다. 여러 seaborn 플롯이 이 방식을 사용합니다.
save(self, path: str)지정 경로에 저장합니다. 여러 seaborn 플롯이 이 방식을 사용합니다.
savefig(self, path: str)지정 경로에 그림을 저장합니다.

BarChart와 LineChart도 지원합니다. 이 지표 값 계약과 모델 리소스의 Evaluation.log_plot 계약은 구분해야 합니다.