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
: 目标列(每日最低温度)
时间序列特征工程窗口理解
在单表时间序列问题中,特征工程窗口与多表情况有显著差异:
- 多表场景:窗口从当前时间点向前延伸,包含子表中的相关观测
- 单表场景:窗口从当前时间点向后延伸,仅包含同一列中的历史观测
对于单表时间序列,我们通常会在创建EntitySet前分割数据,而不是在特征矩阵计算时过滤:
split_point = int(df.shape[0]*.7)
training_data = df[:split_point]
test_data = df[split_point:]
关键参数:gap与window_length
为定义特征工程窗口,我们需要两个关键参数:
-
gap:当前时间点与最早可用数据点的时间间隔
- gap=7表示我们只能使用7天前的数据
- gap=0会包含当前观测,这在时间序列中必须避免(会导致数据泄露)
-
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天的平均温度、最低温度等)
实际应用建议
-
数据频率:当前示例假设数据是等间隔的(每日)。对于非均匀间隔数据,需要额外处理。
-
特征选择:不是所有生成的特征都有用,建议进行特征重要性分析。
-
参数调优:gap和window_length需要根据业务场景调整,可通过交叉验证确定最优值。
-
避免数据泄露:始终确保特征工程窗口不包含未来信息。
通过这种系统化的特征工程方法,我们可以高效地为时间序列预测问题构建丰富的特征集,显著提升模型预测性能。
featuretools 项目地址: https://gitcode.com/gh_mirrors/fea/featuretools
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考