注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
评估库是在 Foundry 中发布的 Python 包,用于生成模型评估器。评估库被用于以可重用的方式衡量模型性能、公平性、稳健性及其他指标,适用于不同的建模目标。
除了 Foundry 默认的二元分类和回归模型评估器外,Foundry 还允许您创建可在建模目标中原生使用的自定义模型评估器。
自定义评估器、其配置选项和生成的指标将以在评估器实现顶部的文档字符串中指定的名称和描述显示在建模目标应用程序中。
一旦自定义评估器发布,它将在建模目标应用程序中对任何具有查看已发布库权限的用户可用。这使您能够为整个组织编写可重用的逻辑,以计算标准化指标。
自定义评估器可在建模目标的评估库配置中选择;该库可以根据评估器定义的参数进行配置。
要创建自定义评估器:
代码库应用程序有许多模板实现;在这里,我们将使用Model Evaluator Template Library。导航到一个 Foundry 项目,选择**+ 新建** > 库类型 > 模型集成 > 语言模板,选择Model Evaluator Template Library,最后选择初始化库。
Model Evaluator Template Library 在文件 src/evaluator/custom_evaluator.py
中有一个示例实现。任何Evaluator Python 接口的实现都将自动注册并在您发布其库的新版本时可用。
包含自定义评估器逻辑的库可以发布多个评估器。任何额外的评估器实现文件都需要作为引用添加到评估器模板的 build.gradle
中的模型评估器模块列表中。
要实现自定义评估器,您需要创建 Evaluator
接口的实现,并可选择提供供建模目标应用程序解释的配置字段。
在评估器模板库中,将您的评估器添加到文件 src/evaluator/custom_evaluator.py
中。
评估器的接口定义如下:
Copied!1 2 3 4 5 6 7 8 9 10 11
class Evaluator(): def apply_spark(self, df: DataFrame) -> List[ComputedMetricValue]: """ 应用评估器在 PySpark DataFrame 上计算指标。 :param df: 要计算指标的 PySpark DataFrame :return: 计算出的指标值列表 """ pass
要在模型目标应用程序中使用新配置的自定义评估器,您首先需要发布其存储库的新版本,为其提供一个新的存储库版本标签。
自定义评估器及其配置选项和生成的指标将在模型目标应用程序中显示,其名称和描述在实现顶部的文档字符串中指定。
所需的值为:
display-name
: 评估器的显示名称description
: 评估器的描述您可以选择性地添加零个或多个以下内容:
param
: 自定义评估器的配置参数metric
: 评估器生成的指标这是一个示例评估器,用于计算输入数据集的行数。
此示例评估器将在模型目标应用程序中显示为:
Row Count Evaluator
。This evaluator calculates the row count of the input DataFrame.
。Row Count
,其描述为The row count
。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
from pyspark.sql import DataFrame from pyspark.sql import functions as F 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 :display-name: 行数评估器 :description: 该评估器计算输入DataFrame的行数。 :metric 行数: 行数 """ def apply_spark(self, df: DataFrame) -> List[ComputedMetricValue]: row_count = df.count() # 计算DataFrame的行数 return [ ComputedMetricValue( metric_name='Row Count', # 指标名称为“行数” metric_value=row_count # 指标值为计算得到的行数 ) ]
在上述代码中,我们定义了一个名为 CustomEvaluator
的自定义评估器类,继承自 Evaluator
。该评估器类的作用是计算输入 DataFrame
的行数,并返回一个包含行数的 ComputedMetricValue
列表。
通过提供配置参数,可以在建模目标应用中使评估器可配置。 配置参数将在运行时由建模目标应用填充用户输入的值。 评估器的用户将在配置建模目标中的自动评估时有机会配置参数的值。
允许的配置字段为:
int
: 整数float
: 浮点数bool
: 布尔值(True 或 False)str
: 字符串值Field[float]
: 输入DataFrame中的浮点数列Field[int]
: 输入DataFrame中的整数列Field[str]
: 输入DataFrame中的字符串列可以通过将参数包装在Optional
(来自内置的typing
包)中使其成为非必填。
例如:
str
将是Optional[str]
Field[str]
将是Optional[Field[str]]
这是一个示例评估器,它计算输入数据集的行数以及当输入数据框被筛选使得输入列column
等于value
时的行数。
此示例评估器将在建模目标应用中显示为:
Configurable Row Count Evaluator
。此评估器计算输入DataFrame的行数,筛选到指定的值。
Row Count
,描述为未筛选的行数
。Filtered Row Count
,描述为筛选的行数
。column
的整数,描述为筛选列
。value
的整数值,描述为筛选值
。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
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]: # 从 Field 对象中获取列名 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 ) ]
这个代码定义了一个自定义的评估器类 CustomEvaluator
,用于计算输入 DataFrame 的行数以及根据指定值过滤后的行数。通过继承 Evaluator
类,提供了两个指标:总行数和过滤后的行数。
以下类作为参考提供。
字段用作配置参数,以指示建模目标应用程序需要实现哪些属性。Field
具有以下接口。
Copied!1 2
class Field(): name: str # 定义一个属性 name,用于存储字段名称的字符串
ComputedMetricValue
存储有关要附加到Foundry模型的指标信息。
Copied!1 2 3 4 5 6 7 8 9 10
class ComputedMetricValue(): """ 由评估器计算的度量,包括度量名称、值和子集信息。 """ metric_name: str # 度量名称 metric_value: MetricValue # 度量值 def __init__(self, metric_name, metric_value): self.metric_name = metric_name self.metric_value = metric_value
指标值
可以是以下任何一种:
get_figure(self) -> Figure
:注意许多seaborn图实现了此函数。save(self, path: str)
:注意许多seaborn图实现了此函数。savefig(self, path: str)