Featuretools 原语 (Primitives) 详解(Qwen3)

Featuretools 原语 (Primitives) 详解

原语(Primitives)是Featuretools中用于特征工程的基本操作单元,分为聚合原语(Aggregation Primitives)和转换原语(Transformation Primitives)两大类。

1. 聚合原语 (Aggregation Primitives)

聚合原语用于对相关实体的数据进行聚合操作,通常用于一对多关系中"多"的一方聚合到"一"的一方。

常见聚合原语及示例:

count
  • 作用:计算记录数量
  • 示例:计算每个客户有多少笔交易
  • 结果:客户A有5笔交易,客户B有3笔交易
sum
  • 作用:计算数值列的总和
  • 示例:计算每个客户的交易总金额
  • 结果:客户A总交易额1000元,客户B总交易额650元
mean
  • 作用:计算数值列的平均值
  • 示例:计算每个客户的平均交易金额
  • 结果:客户A平均交易额200元,客户B平均交易额216.67元
std
  • 作用:计算数值列的标准差
  • 示例:计算每个客户交易金额的标准差
  • 结果:衡量客户交易金额的波动性
min / max
  • 作用:计算数值列的最小值/最大值
  • 示例:每个客户的单笔最高/最低交易金额
median
  • 作用:计算数值列的中位数
  • 示例:每个客户交易金额的中位数
mode
  • 作用:计算出现频率最高的值
  • 示例:客户最常购买的商品类别
trend
  • 作用:计算数值随时间的趋势
  • 示例:客户交易金额随时间的增长趋势
skew
  • 作用:计算分布的偏度
  • 示例:客户交易金额分布的偏斜程度

2. 转换原语 (Transformation Primitives)

转换原语用于对单个实体中的数据进行转换操作,生成新的特征列。

常见转换原语及示例:

month / year / week / weekday
  • 作用:从日期中提取时间组件
  • 示例
    # 原始数据: join_date = "2022-01-15"
    # month(join_date) = 1
    # year(join_date) = 2022
    # weekday(join_date) = 5 (周六)
    
hour / minute / second
  • 作用:从时间戳中提取时分秒
  • 示例:分析用户在一天中的活跃时段
time_since_previous
  • 作用:计算与前一条记录的时间间隔
  • 示例:客户两次交易之间的时间间隔
cum_sum / cum_mean / cum_max
  • 作用:计算累积统计值
  • 示例
    # 交易金额: [100, 50, 200, 75]
    # cum_sum(amount) = [100, 150, 350, 425]
    
diff
  • 作用:计算与前一条记录的差值
  • 示例:客户每次交易金额的变化
divide_by / multiply / add / subtract
  • 作用:数值运算
  • 示例:计算两个特征的比例关系
equal / greater_than / less_than
  • 作用:逻辑比较
  • 示例:判断交易金额是否超过阈值
is_null / not_null
  • 作用:空值判断
  • 示例:标识缺失数据
num_characters / num_words
  • 作用:文本统计
  • 示例:计算客户评论的字符数或单词数
latitude / longitude
  • 作用:地理位置解析
  • 示例:从地址中提取经纬度信息

3. 实际应用示例

结合您的代码示例,我们来看具体的原语应用:

# 聚合原语
agg_primitives=["sum", "mean", "count", "std"]

# 转换原语
trans_primitives=["month", "weekday"]

具体生成的特征:

  1. 聚合特征

    • SUM(transactions.amount): 每个客户的交易总额
    • MEAN(transactions.amount): 每个客户的平均交易金额
    • COUNT(transactions.amount): 每个客户的交易次数
    • STD(transactions.amount): 每个客户交易金额的标准差
  2. 转换特征

    • MONTH(join_date): 客户加入的月份
    • WEEKDAY(join_date): 客户加入的是星期几

4. 自定义原语

Featuretools还支持创建自定义原语来满足特定需求:

from featuretools.primitives import AggregationPrimitive
from featuretools.variable_types import Numeric

class NUnique(AggregationPrimitive):
    name = "n_unique"
    input_types = [Numeric]
    return_type = Numeric
    stack_on_self = False
    default_value = 0

    def get_function(self):
        return 'nunique'

5. 原语的选择策略

选择合适的原语需要考虑:

  • 业务需求:根据业务场景选择相关原语
  • 数据类型:数值型、分类型、时间型数据适用不同原语
  • 计算复杂度:复杂原语可能影响性能
  • 特征有效性:某些原语可能生成无意义的特征

通过合理选择和组合这些原语,Featuretools能够自动生成大量有意义的特征,为机器学习模型提供更丰富的信息。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容