Alteryx Featuretools 特征原语深度解析
2025-07-07 03:48:51作者:咎岭娴Homer
什么是特征原语
特征原语是Featuretools中的基础构建模块,它们定义了可以应用于原始数据集以创建新特征的独立计算单元。每个原语只约束输入和输出的数据类型,因此可以跨数据集应用,并能通过堆叠组合来创建新的计算逻辑。
原语的核心价值
特征工程领域存在无限可能的特征组合方式。通过将常见的特征工程计算分解为原语组件,Featuretools能够捕获人类创建特征时的底层结构模式。原语具有两大核心优势:
-
跨领域复用性:由于只约束数据类型,原语可以将某个领域的计算逻辑迁移到其他领域。例如"事件间平均时间间隔"这个特征在交易日志分析中非常有用,Featuretools通过组合
time_since_previous
和mean
两个原语就能实现。 -
参数化枚举:原语可以快速生成多种有意义的特征变体。例如对"上次事件时间间隔"可以生成均值、最大值、最小值、标准差等多种统计特征。
原语类型详解
Featuretools中有两种主要的原语类型:
聚合原语(Aggregation Primitives)
- 输入:相关实例集合
- 输出:单个汇总值
- 应用场景:跨实体集(EntitySet)中的父子关系
- 示例:
count
、sum
、avg_time_between
转换原语(Transform Primitives)
- 输入:一个或多个数据列
- 输出:新的数据列
- 应用场景:单表数据转换
- 示例:
hour
、time_since_previous
、absolute
内置原语使用
Featuretools提供了丰富的内置原语,可以通过以下方式查看:
import featuretools as ft
# 列出所有原语及其描述
ft.list_primitives().head(5)
# 查看原语的统计摘要
ft.summarize_primitives()
自定义原语开发
当内置原语不能满足需求时,用户可以自定义原语,步骤如下:
- 确定原语类型(聚合或转换)
- 定义输入输出数据类型
- 编写计算函数
- 添加约束属性
简单自定义示例
绝对值转换原语:
class Absolute(TransformPrimitive):
name = "absolute"
input_types = [ColumnSchema(semantic_tags={"numeric"})]
return_type = ColumnSchema(semantic_tags={"numeric"})
def get_function(self):
def absolute(column):
return abs(column)
return absolute
最大值聚合原语:
class Maximum(AggregationPrimitive):
name = "maximum"
input_types = [ColumnSchema(semantic_tags={"numeric"})]
return_type = ColumnSchema(semantic_tags={"numeric"})
def get_function(self):
def maximum(column):
return max(column)
return maximum
多输入原语示例
有些原语需要多个输入特征,例如计算周日均值的原语:
class MeanSunday(AggregationPrimitive):
name = "mean_sunday"
input_types = [
ColumnSchema(semantic_tags={"numeric"}),
ColumnSchema(logical_type=Datetime),
]
return_type = ColumnSchema(semantic_tags={"numeric"})
def get_function(self):
def mean_sunday(numeric, datetime):
days = pd.DatetimeIndex(datetime).weekday.values
df = pd.DataFrame({"numeric": numeric, "time": days})
return df[df["time"] == 6]["numeric"].mean()
return mean_sunday
实际应用建议
- 先探索后计算:使用
features_only=True
参数先查看特征定义,确认无误后再计算特征矩阵 - 命名规范:原语名称支持
snake_case
、camelCase
和TitleCase
三种格式 - 组合威力:通过简单原语的组合可以创建复杂特征,这是Featuretools的核心优势
- 可视化辅助:使用
graph_feature
函数可视化特征生成过程
通过理解和灵活运用特征原语,可以大幅提升特征工程的效率和质量,为机器学习模型提供更强大的特征支持。