动机

在 Nixtla,我们实现了多个库来处理时间序列数据。我们经常需要对所有序列应用一些变换,这即使是对于执行某种缩放这样的简单操作,也可能非常耗时。

我们使用了 numba 来加速我们昂贵的计算,但这带来了其他问题,例如冷启动和更多依赖(LLVM)。这就是我们开发这个库的原因,它用 C++ 实现了几个运算符来转换时间序列数据(或可被视为独立组的其他类型数据),并且可以使用多线程来获得最佳性能。

您可能不需要直接使用这个库,而是使用我们更高级别的库,例如 mlforecast,它将在底层使用这个库。如果您有兴趣直接使用这个库(仅依赖 numpy),则应继续阅读。

安装

PyPI

pip install coreforecast

conda-forge

conda install -c conda-forge coreforecast

最小示例

基础数据结构是“分组数组”,它包含两个 numpy 1d 数组

  • data: 序列的值。
  • indptr: 序列边界,使得 data[indptr[i] : indptr[i + 1]] 返回第 i 个序列。例如,如果您有两个大小分别为 5 和 10 的序列,则 indptr 将是 [0, 5, 15]。
import numpy as np
from coreforecast.grouped_array import GroupedArray

data = np.arange(10)
indptr = np.array([0, 3, 10])
ga = GroupedArray(data, indptr)

拥有此结构后,您可以运行任何提供的变换,例如

from coreforecast.lag_transforms import ExpandingMean
from coreforecast.scalers import LocalStandardScaler

exp_mean = ExpandingMean(lag=1).transform(ga)
scaler = LocalStandardScaler().fit(ga)
standardized = scaler.transform(ga)

单数组函数

我们还实现了一些适用于单个数组的函数,您可以参考以下页面