Skip to content

Latest commit

 

History

History
59 lines (30 loc) · 8.75 KB

building-tractable-feature-engineering-pipeline-multivariate-time-series.md

File metadata and controls

59 lines (30 loc) · 8.75 KB

构建一个可处理的、多变量时间序列特征工程管道

原文:www.kdnuggets.com/2022/03/building-tractable-feature-engineering-pipeline-multivariate-time-series.html

构建一个可处理的、多变量时间序列特征工程管道

图片来源:Christophe DionUnsplash

精确的时间序列预测对于业务问题至关重要,例如预测制造中的材料属性变化和销售预测。现代预测技术包括使用像 Xgboost 这样的机器学习算法,在表格数据上构建回归模型来预测未来。表格数据允许回归模型通过利用与实际销售相关的非目标因素(如零售店的每日客流量)来进行预测。


我们的前三大课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。

2. 谷歌数据分析专业证书 - 提升你的数据分析能力。

3. 谷歌 IT 支持专业证书 - 为你的组织提供 IT 支持。


特征工程对于丰富影响预测准确性的因素至关重要。然而,构建一个时间序列特征工程管道并非易事,因为它涉及不同阶段的各种转换,例如窗口值的聚合。基于滚动窗口的特征,如“两周记录的平均值”,是基础却有效的预测工具,因此支持这种特征生成的管道是有价值的。此外,经过转换后的特征输出顺序可能会在转换过程中被打乱,这对特征追踪提出了挑战。在最终模型训练之前,追踪和验证管道中的转换特征至关重要。这个github 仓库提供了一个设计时间序列管道的示例,以满足上述需求,本文解释了一些实现这些需求的关键步骤。

基于 Scikit-learn 的转换器可能支持 get_feature_names_out() 函数,以提供其在转换后的输出名称。例如,OneHotEncoder 转换器 具有此内置函数,但 SimpleImputer 转换器则没有。如果我们希望方便地检索输出名称,Scikit-learn 管道要求所有基础转换器支持 get_feature_names_out()。我们的解决方案是设计一个 FeatureNamesMixin 混入类,并结合 工厂方法 设计模式类 TransformWithFeatureNamesFactory,以使转换器具备 get_feature_names_out() 函数。

我们可以创建一个自定义的SimpleImputer,并将其作为 Scikit-learn Pipeline 的步骤或 ColumnTransformer 的一部分,如下所示。

这仅需要转换器类通过参数 names 初始化时指定任何所需的输出名称。

其他转换器也可以类似地自定义以支持检索输出名称,只要我们引入get_feature_names_out()。以下是一个TsfreshRollingMixin类的示例,该类利用 TSFresh 库中的roll_time_series()实用函数来提取时间序列的滚动窗口。要跟踪派生的滚动窗口特征,我们只需将特征分配为derived_names属性TsfreshRollingMixin类还包含其他辅助函数,如prepare_df()get_combined(),以便将 numpy 数组转换为 pandas.DataFrame,并将派生特征与输入特征结合在一起。感兴趣的读者可以查看代码库,更好地了解其实现。结合 TSFresh 的extract_features(),我们可以设计一个TSFreshRollingTransformer类,使我们能够指定相关的TSFresh 参数,以派生所需的时间序列特征,如下所示。

我们将TSFreshRollingTransformer派生的特征标记为类似于**(window #)**的名称,以指示聚合窗口的大小。

除了 TSFresh 派生的时间序列特征,RollingLagsTrasformer类展示了如何使用TsfreshRollingMixin类从给定的滚动窗口中提取滞后值,并将输出特征跟踪为**(lag #)**作为滞后顺序。其他在滚动窗口上执行的特定变换可以参考此示例,设计与可追踪管道兼容的转换器。

这个脚本展示了如何使用上述变换器构建时间序列管道,以在不同阶段衍生特征。例如,从第一个管道提取的特征有一个名为Pre-MedianImputer__Global_intensity的特征,用于指示原始特征“Global_intensity”是基于SimpleImputer使用中位数策略进行填补的。随后,衍生出的滚动特征名称类似于TSFreshRolling__Pre-MedianImputer–Global_intensity__maximum(window 30),表示在窗口大小为 30 步的范围内填补的“Global_intensity”的最大值。最后,滚动窗口特征将经过填补和标准化处理,建议的名称 ImputeAndScaler__TSFreshRolling__Pre-MedianImputer–Global_intensity__median(window 30) 指示原始特征“Global_intensity”已经经历了上述所有变换。我们可以方便地通过相关标记追踪管道提供的变换名称,并验证变换后的输出。

我们通过一个示例来补充这个演示,示例中使用了Darts包来构建线性回归模型进行预测。一旦管道准备好,就可以轻松加载输入数据集并相应地衍生特征。下图展示了基于从管道衍生特征训练的线性回归模型的预测结果。我们希望这篇文章能为读者提供一个基本模板,方便他们为时间序列预测用例构建时间序列管道。

构建可处理的多变量时间序列特征工程管道

基于设计管道中的工程特征的线性回归模型预测。图像由作者提供。

Jing Qiang Goh 是一位时间序列爱好者。

了解更多主题