趋近智
生成有用的特征通常不仅仅涉及简单的数据选取。它经常需要应用一系列操作,将原始输入数据转换为适合机器学习 (machine learning)模型的表示形式。虽然临时转换脚本可能足以满足初步实验需求,但构建可扩展和可维护的ML系统需要更结构化的方法。这种结构化方法体现在高级特征存储中特征转换管道的定义、管理和运行。
将转换从分散的脚本或应用程序代码转移到与特征定义直接关联的受控管道中,具有显著益处:
在特征存储的背景下,转换管道表示应用于输入数据源以生成一个或多个输出特征的有序操作序列,通常是一个有向无环图(DAG)。这些操作可以从简单的数据清洗和类型转换,到复杂的统计计算或预训练 (pre-training)模型的应用(如嵌入 (embedding)查找)。
常见的转换步骤包括:
这种管道的定义通常发生在特征存储的框架或SDK内部。您不仅指定原始数据源,还要定义要应用的一系列转换。
# 示例:使用SDK定义管道
from feature_store_sdk import FeatureView, Transformation, source, registry
from my_custom_transforms import calculate_risk_score # 示例用户定义函数 (UDF)
# 定义数据源
user_activity_source = source(
name="user_activity_stream",
source_type="kafka",
topic="user-events",
event_timestamp_column="event_ts"
)
# 定义单个转换
impute_session_duration = Transformation(
name="impute_duration_mean",
function="mean", # 可以是内置函数或引用库函数
inputs=["session_duration_raw"],
outputs=["session_duration_imputed"],
params={"default_value": 0} # 如果初始无法计算均值,则为默认值
)
scale_interaction_count = Transformation(
name="scale_interactions_standard",
function="standard_scaler", # 引用标准缩放实现
inputs=["interaction_count"],
outputs=["interaction_count_scaled"]
)
calculate_custom_score = Transformation(
name="calculate_user_risk",
function=calculate_risk_score, # 引用自定义Python函数
inputs=["interaction_count_scaled", "session_duration_imputed"],
outputs=["user_risk_score"]
)
# 定义特征视图,并关联管道
user_engagement_features = FeatureView(
name="user_engagement_v1",
entities=["user_id"],
source=user_activity_source,
# 管道被定义为一个转换列表/DAG
pipeline=[
impute_session_duration,
scale_interaction_count,
calculate_custom_score # 依赖于前一步骤的输出
],
ttl="30d",
online=True,
offline=True
)
# 注册特征视图(包括其管道)
registry.apply(user_engagement_features)
这种声明式方法使得特征存储系统能够理解血缘(即 user_risk_score 如何依赖于 interaction_count_scaled 和 session_duration_imputed,而它们又依赖于原始输入)并管理执行。
这些已定义的管道如何执行取决于特征存储的架构和具体情况:
集成程度有所不同。一些特征存储直接使用内置运算符或通过嵌入 (embedding)执行内核(如Python解释器或JVM)来执行管道逻辑。其他则采用更松散耦合的方法,特征存储管理定义和编排,但依赖外部计算引擎(如专用Spark集群或无服务器函数)来实际运行转换。选择会影响操作复杂度、成本和性能特点。
可视化通常有助于理解转换管道中的依赖关系。一个简单的DAG可以展示数据和操作的流程。
一个有向无环图(DAG),表示特征转换管道示例中的依赖关系。原始数据经过填充和缩放步骤后,用于自定义风险评分计算,最终填充特征视图。
随着特征和转换数量的增加,有效管理这些管道变得非常重要。高级特征存储提供以下机制:
通过将转换逻辑嵌入 (embedding)到特征存储内的受控管道中,您可以创建更易于维护且一致的特征工程流程。这种结构化方法是扩展机器学习 (machine learning)操作和构建可靠生产系统的根本,为处理更复杂的场景(如流式特征和基于时间的聚合)做准备,我们将在下一部分进行讨论。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•