Featuretools时间序列特征工程实战指南

Featuretools时间序列特征工程实战指南

featuretools featuretools 项目地址: https://gitcode.com/gh_mirrors/fea/featuretools

时间序列预测与特征工程概述

时间序列预测是利用历史观测值预测后续目标值的技术。与常规机器学习问题不同,时间序列数据具有严格的时间顺序依赖性,近期观测值通常比远期观测值更具预测力。本文将深入探讨如何使用Featuretools自动化构建时间序列预测特征。

环境准备与数据加载

首先导入必要的库并加载示例天气数据:

import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import featuretools as ft
from featuretools.primitives import Lag, RollingMean, RollingMin

# 加载天气数据集
es = load_weather()
es["temperatures"].head(10)

该数据集包含三个关键列:

  • id: 索引列
  • Date: 时间索引
  • Temp: 目标列(每日最低温度)

时间序列特征工程窗口理解

在单表时间序列问题中,特征工程窗口与多表情况有显著差异:

  1. 多表场景:窗口从当前时间点向前延伸,包含子表中的相关观测
  2. 单表场景:窗口从当前时间点向后延伸,仅包含同一列中的历史观测

对于单表时间序列,我们通常会在创建EntitySet前分割数据,而不是在特征矩阵计算时过滤:

split_point = int(df.shape[0]*.7)
training_data = df[:split_point]
test_data = df[split_point:]

关键参数:gap与window_length

为定义特征工程窗口,我们需要两个关键参数:

  1. gap:当前时间点与最早可用数据点的时间间隔

    • gap=7表示我们只能使用7天前的数据
    • gap=0会包含当前观测,这在时间序列中必须避免(会导致数据泄露)
  2. window_length:从gap点开始向前观察的时间长度

    • window_length=5表示观察5天的数据窗口
gap = 7
window_length = 5

这两个参数共同定义了特征工程的有效时间范围。

时间序列特征原语

Featuretools提供三类特别适合时间序列的原语:

1. 日期时间转换原语

从时间索引中提取周期性特征:

datetime_primitives = ["Day", "Year", "Weekday", "Month"]

这些原语可以捕捉数据的季节性和周期性模式。例如,月份特征对温度预测非常有用。

2. 延迟原语

创建目标列的滞后版本:

delaying_primitives = [Lag(periods=i + gap) for i in range(window_length)]

这会为窗口中的每个时间点创建一个滞后特征,从t-gap-window_length到t-gap。

3. 滚动转换原语

对特征工程窗口进行聚合计算:

rolling_mean_primitive = RollingMean(
    window_length=window_length, gap=gap, min_periods=window_length
)

rolling_min_primitive = RollingMin(
    window_length=window_length, gap=gap, min_periods=window_length
)

特别注意gap参数必须正确设置,避免包含当前观测值。

执行深度特征合成(DFS)

配置好原语后,即可运行DFS生成特征矩阵:

fm, f = ft.dfs(
    entityset=es,
    target_dataframe_name="temperatures",
    trans_primitives=(
        datetime_primitives
        + delaying_primitives
        + [rolling_mean_primitive, rolling_min_primitive]
    ),
    cutoff_time=pd.Timestamp("1987-1-30"),
)

fm.iloc[:, [0, 2, 6, 7, 8, 9]].head(15)

生成的矩阵包含:

  • 原始温度值
  • 日期时间特征(星期几、月份等)
  • 滞后特征(7天前、8天前等温度)
  • 滚动统计量(过去5天的平均温度、最低温度等)

实际应用建议

  1. 数据频率:当前示例假设数据是等间隔的(每日)。对于非均匀间隔数据,需要额外处理。

  2. 特征选择:不是所有生成的特征都有用,建议进行特征重要性分析。

  3. 参数调优:gap和window_length需要根据业务场景调整,可通过交叉验证确定最优值。

  4. 避免数据泄露:始终确保特征工程窗口不包含未来信息。

通过这种系统化的特征工程方法,我们可以高效地为时间序列预测问题构建丰富的特征集,显著提升模型预测性能。

featuretools featuretools 项目地址: https://gitcode.com/gh_mirrors/fea/featuretools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樊元隽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值