Skip to content

功能时间

functime

生产就绪的时间序列模型

functime 是一个用于时间序列预测的机器学习库,仅需使用

  • 功能齐全: 强大且易于使用的API,用于预测和特征工程(tsfresh, Catch22)。
  • 快速: 在您的笔记本电脑上在几秒钟内预测 100,000 个时间序列
  • 高效: 使用 Polars 并行提取数百个时间序列特征
  • 经过战斗考验: 提供真实商业影响并赢得竞争的算法

安装

查看这个指南以安装functime。需要Python 3.8及以上版本。

支持的数据架构

面板数据

预测者、预处理器和拆分器使用面板数据集,其中前两列表示实体(例如:商品名称)和时间(例如:日期)。后续列表示观察值(例如:价格)。面板数据框必须按实体、时间排序。

>>> y_panel
shape: (47_583, 3)

commodity_type   time         price
------------------------------------
Aluminum         1960-01-01    511.47
                 1960-02-01    511.47
                 1960-03-01    511.47
                 1960-04-01    511.47
                 1960-05-01    511.47
...                     ...       ...
Zinc             2022-11-01   2938.92
                 2022-12-01   3129.48
                 2023-01-01   3309.81
                 2023-02-01   3133.84
                 2023-03-01   2967.46

时间序列

特征提取器支持面板时间序列数据框。时间序列数据框代表单个实体的测量:

>>> y_time_series
shape: (756, 3)

time         price
-------------------
1960-01-01    511.47
1960-02-01    511.47
1960-03-01    511.47
...              ...
2022-11-01   2938.92
2022-12-01   3129.48
2023-01-01   3309.81

特点

预测

使用机器学习的点预测和概率预测。 包括支持完整预测生命周期的工具:预处理、特征提取、时间序列交叉验证/拆分器、回测、自动超参数调整和评分。

  • 每个预报员都支持 外生特征
  • 季节性 效果使用 日历、傅里叶和节日特征
  • 回测 使用 扩展窗口和滑动窗口分割器
  • 使用 FLAML 进行自动滞后和超参数调整
  • 通过分位数回归和保形预测的概率预测
  • 预测指标(例如 MASE、SMAPE、CRPS)用于并行评分
  • 支持递归和直接预测策略
  • 删节模型 用于零膨胀预测

查看完整的演练,了解如何使用functime进行预测。

特征提取

functime 有超过 100 个时间序列特征提取器(例如 binned_entropy, longest_streak_above_mean),适用于任何 Polars Series。大约 85% 的实现是优化的延迟查询,并且适用于 polars.Seriespolars.Expr

  • 超过100+个时间序列特征
  • 所有功能都注册在自定义 ts Polars 命名空间下
  • ~85% 优化的延迟查询,适用于 polars.Seriespolars.Expr
  • tsfresh 相比,速度提高了 2x-200x
  • tsfresh 比较,分组操作速度提升 200 倍

  • 支持单变量特征提取
  • 支持通过 group_by 在多个时间序列中进行特征提取
  • 支持跨窗口的特征提取(通过 group_by_dynamic

查看完整的指南关于使用functime进行预测。

预处理

查看functime.preprocessing的API参考。预处理器以polars.DataFramepolars.LazyFrame作为输入,并始终返回polars.LazyFrame。在调用LazyFrame上的.collect()方法之前,不会运行任何计算。这允许Polars在执行之前优化整个查询

from functime.preprocessing import boxcox, impute

# Use df.pipe to chain operations together
X_new: pl.LazyFrame = (
    X.pipe(boxcox(method="mle"))
    .pipe(detrend(method="linear"))
)
# Call .collect to execute query
X_new: pl.DataFrame = X_new.collect(streaming=True)

查看快速示例的时间序列预处理与functime