tspiral
一个使用scikit-learn估计器进行时间序列预测的Python包。
tspiral不是一个作为其他时间序列预测工具和方法的包装器的库。tspiral直接为时间序列预测提供scikit-learn估计器。它利用scikit-learn语法和组件的优势,可以轻松访问建立在scikit-learn社区之上的开源生态系统。它可以轻松地将复杂的时间序列预测问题映射为表格化的监督回归任务,并用标准方法解决。
概述
tspiral提供4种优化的预测技术:
- 递归预测
将滞后目标特征与外生回归变量(如果提供)和滞后外生特征(如果指定)相结合。在整个合并数据上拟合一个与scikit-learn兼容的回归器。然后迭代调用拟合的估计器来预测多个步骤ahead。
我们可以用更紧凑的方式总结为:
- 直接预测
对每个要预测的时间步骤,在滞后数据上拟合一个与scikit-learn兼容的回归器。
我们可以用更紧凑的方式总结为:
也可以混合使用递归和直接预测,直接预测某些未来时间点,同时对剩余部分使用递归。
- 堆叠预测
拟合多个递归时间序列预测器,并在训练数据的最后部分用元学习器组合它们。
- 修正预测
拟合多个直接时间序列预测器,并在训练数据的最后部分用元学习器组合它们。
所有可用的预测方法都原生支持全局和多变量时间序列预测。 对于全局预测,使用groups
参数指定输入数据中包含组标识符的列。对于多变量预测,在调用fit时传入多列目标。
安装
pip install --upgrade tspiral
该模块仅依赖NumPy、Pandas和Scikit-Learn(>=0.24.2)。支持Python 3.6或更高版本。
媒体
- 如何改进递归时间序列预测
- 带特征选择的时间序列预测:为什么你可能需要它
- 预测有缺失值的时间序列:超越线性插值
- 使用一致性预测区间进行时间序列预测:只需要Scikit-Learn
- 命中时间预测:时间序列概率预测的另一种方法
- 使用Sklearn进行时间序列预测的MLOps指南
使用方法
- 递归预测
import numpy as np
from sklearn.linear_model import Ridge
from tspiral.forecasting import ForecastingCascade
timesteps = 400
e = np.random.normal(0,1, (timesteps,))
y = np.concatenate([
2*np.sin(np.arange(timesteps)*(2*np.pi/24))+e,
2*np.cos(np.arange(timesteps)*(2*np.pi/24))+e,
])
X = [[0]]*timesteps+[[1]]*timesteps
model = ForecastingCascade(
Ridge(),
lags=range(1,24+1),
groups=[0],
).fit(X, y)
forecasts = model.predict([[0]]*80+[[1]]*80)
- 直接预测
import numpy as np
from sklearn.linear_model import Ridge
from tspiral.forecasting import ForecastingChain
timesteps = 400
e = np.random.normal(0,1, (timesteps,))
y = np.concatenate([
2*np.sin(np.arange(timesteps)*(2*np.pi/24))+e,
2*np.cos(np.arange(timesteps)*(2*np.pi/24))+e,
])
X = [[0]]*timesteps+[[1]]*timesteps
model = ForecastingChain(
Ridge(),
n_estimators=24,
lags=range(1,24+1),
groups=[0],
).fit(X, y)
forecasts = model.predict([[0]]*80+[[1]]*80)
- 堆叠预测
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.tree import DecisionTreeRegressor
from tspiral.forecasting import ForecastingStacked
timesteps = 400
e = np.random.normal(0,1, (timesteps,))
y = np.concatenate([
2*np.sin(np.arange(timesteps)*(2*np.pi/24))+e,
2*np.cos(np.arange(timesteps)*(2*np.pi/24))+e,
])
X = [[0]]*timesteps+[[1]]*timesteps
model = ForecastingStacked(
[Ridge(), DecisionTreeRegressor()],
test_size=24*3,
lags=range(1,24+1),
groups=[0],
).fit(X, y)
forecasts = model.predict([[0]]*80+[[1]]*80)
- 修正预测
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.tree import DecisionTreeRegressor
from tspiral.forecasting import ForecastingRectified
timesteps = 400
e = np.random.normal(0,1, (timesteps,))
y = np.concatenate([
2*np.sin(np.arange(timesteps)*(2*np.pi/24))+e,
2*np.cos(np.arange(timesteps)*(2*np.pi/24))+e,
])
X = [[0]]*timesteps+[[1]]*timesteps
model = ForecastingRectified(
[Ridge(), DecisionTreeRegressor()],
n_estimators=24*3,
test_size=24*3,
lags=range(1,24+1),
groups=[0],
).fit(X, y)
forecasts = model.predict([[0]]*80+[[1]]*80)
更多示例请参见notebooks文件夹。