更新日志¶
我们会尽力避免引入破坏性变更,但并非总能保证向后兼容性。可能破坏使用先前版本 Darts 的代码的变更会标记为“🔴”。弃用功能的变更会标记为“🟠”。
未发布¶
致库用户:¶
改进
修复
依赖项
致库开发者:¶
0.35.0 (2025-04-18)¶
致库用户:¶
改进
🚀🚀 新增预测模型
AutoMFLES
:一种简单的时间序列方法,基于 Tyler Blume 在此仓库中提出的梯度提升时间序列分解。我们的实现基于 Nixtla 的statsforecast
库中的 AutoMFLES。#2747 由 Che Hang Ng 贡献。StatsForecastModel
:允许在 Darts 中使用 StatsForecast 的任何预测模型(参见此处),并支持未来协变量、概率预测(采样、直接分位数和/或保形预测)以及可迁移序列预测。#2770 由 Dennis Bader 贡献。
预测模型的改进
🚀 为
CatBoostModel
添加了对分类协变量的支持。现在可以在创建模型时通过参数categorical_*_covariates: List[str]
来定义过去、未来和静态协变量的分类分量。#2733 由 Jonas Blanc 贡献。🚀🔴 扩展并重命名了几个现有模型的功能。以下所有模型现在都支持未来协变量、概率预测(采样、直接分位数和/或保形预测)以及可迁移序列预测:#2762 和 #2770 由 Dennis Bader 贡献。
AutoARIMA
(旧名称StatsForecastAutoARIMA
)AutoETS
(旧名称StatsForecastAutoETS
)AutoCES
(旧名称StatsForecastAutoCES
)AutoTBATS
(旧名称StatsForecastAutoTBATS
)AutoTheta
(旧名称StatsForecastAutoTheta
)TBATS
Croston
TimeSeries
的变更:#2733 由 Dennis Bader 贡献。🟠 移除弃用方法
TimeSeries.pd_dataframe()
。请改用TimeSeries.to_dataframe()
。🟠 移除弃用方法
TimeSeries.pd_serise()
。请改用TimeSeries.to_series()
。
修复
修复了
CatBoostModel
在使用likelihood="gaussian"
时的一个错误,即使用predict_likelihood_parameters=True
进行预测会导致预测参数的顺序错误。#2742 由 Dennis Bader 贡献。
依赖项
🚀🚀 添加了对 NumPy 2.0 及更高版本的支持。为此,我们必须对依赖项进行以下调整。#2771 由 Dennis Bader 贡献。
🔴 将
AutoARIMA
模型后端从pmdarima
更改为statsforecast
。模型创建参数几乎相同。请参考pmdarima 文档和statsforecast 文档。此外,新实现效率更高,并改进了概率预测支持,包括保形预测。#2734 由 Dennis Bader 贡献。🔴 将
TBATS
模型后端从tbats
更改为statsforecast
。模型创建参数几乎相同。请参考tbats 文档和statsforecast 文档。此外,新实现效率更高,支持未来协变量并改进了概率预测支持。#2781 由 Dennis Bader 贡献。🔴 移除
BATS
模型。请改用TBATS
。#2781 由 Dennis Bader 贡献。
致库开发者:¶
重构了似然函数:#2742 由 Dennis Bader 贡献。
将所有与似然相关的文件移至
darts/utils/likelihood_models/
。将
BaseLikelihood
添加为所有似然模型的基类,位于darts.utils.likelihood_models.base
。将
RegressionModel
的似然函数添加至darts.utils.likelihood_models.sklearn
。将
TorchForecastingModel
的似然函数移至darts.utils.likelihood_models.torch
。仍可通过darts.utils.likelihood_models
导入。移除
darts.models.forecasting.regression_model._LikelihoodMixin
。请改用专用的似然模型。
将
RegressionModelWithCategoricalCovariates
设为抽象类,重写了分类分量名称匹配逻辑,并重构了分类协变量逻辑,以便更容易地为模型添加分类协变量支持。#2733 由 Jonas Blanc 贡献。
0.34.0 (2025-03-09)¶
致库用户:¶
改进
TimeSeries
的改进from_dataframe()
和from_series()
现在支持从更多 DataFrame 后端(Polars, PyArrow 等)创建TimeSeries
。我们利用narwhals
作为 DataFrame 库之间的兼容层。请查看他们的文档以了解所有支持的后端。#2661 由 Jules Authier 贡献。添加了新的导出方法:
to_dataframe()
和to_series()
。这些方法支持将TimeSeries
导出到narwhals
支持的所有后端的 DataFrames 和 Series。请查看他们的文档以了解所有支持的后端。#2701 由 Jules Authier 贡献。为
TimeSeries
添加了嵌入元数据的支持。现在可以将任何类型的元数据作为字典附加到您的时间序列,可以在序列创建时使用参数metadata
(或使用from_group_dataframe()
时的metadata_cols
),或者通过with_metadata()
方法添加到现有序列。与静态协变量不同,元数据在预测过程中不会被 Darts 的模型使用。然而,元数据会通过所有下游任务传播,从而在整个数据管道中保持信息的完整性和连续性。#2656 由 Yoav Matzkevich、Jules Authier 和 Dennis Bader 贡献。方法
plot()
现在支持为序列中的每个分量设置颜色。只需传入一个长度与分量数量匹配的颜色列表/序列作为参数“c”或“colors”即可。#2680 由 Jules Authier 贡献。改进了文档:为
TimeSeries
工厂方法添加了示例,并更新了快速入门 notebook,其中包含创建和导出TimeSeries
的扩展后端支持。#2725 由 Dennis Bader 贡献。🟠 方法
pd_dataframe()
和pd_series()
已弃用,并将在 Darts 0.35.0 版本中移除。请改用to_dataframe()
和to_series()
。#2701 由 Jules Authier 贡献。
TorchForecastingModel
的改进为基于 torch 的模型添加了 ONNX 支持,使用方法
to_onnx()
。请查看用户指南中关于如何导出和加载模型进行推理的此示例。#2620 由 Antoine Madrona 贡献。
RegressionModel
的改进为方法
get_estimator()
添加了quantile
参数,用于获取使用quantile
似然的概率回归模型的特定分位数估计器。#2716 由 Antoine Madrona 贡献。改进了
CatBoostModel
文档,描述了如何使用原生多输出回归。#2659 由 Jonas Blanc 贡献。🔴 移除方法
get_multioutput_estimator()
。请改用get_estimator()
。#2716 由 Antoine Madrona 贡献。
其他改进
将方法
ForecastingModel.untrained_model()
设为公共方法。使用此方法可获取以相同参数创建的新的(未训练的)模型实例。#2684 由 Timon Erhart 贡献。可以在本地开发模式下运行快速入门 notebook
00-quickstart.ipynb
而无需安装。#2691 由 Jules Authier 贡献。
修复
🔴 / 🟢 修复了加载使用 Darts < 0.33.0 版本保存的
TorchForecastingModel
时引发错误的 bug。这是一个破坏性变更,使用 0.33.0 版本保存的模型将无法再次加载。#2692 由 Dennis Bader 贡献。修复了
NLinearModel
在使用normalize=True
时的一个 bug,该 bug 导致归一化未正确应用。现在的预测能力得到了极大提升。#2724 由 Dennis Bader 贡献。修复了
StaticCovariatesTransformer
中的一个 bug,该 bug 在尝试逆转换时间序列之间具有相同值的一热编码分类静态协变量时会引发错误。现在,每个分类静态协变量都由{covariate_name}_{category_name}
引用,无论类别数量如何。#2710 由 Antoine Madrona 贡献。修复了
RegressionModel
中的一个 bug,该 bug 在使用max(lags) < -1
执行优化历史预测时,导致预测延伸到未来过远。#2715 由 Jules Authier 贡献。
依赖项
将最低 scikit-learn 版本从
1.0.1
提升到1.6.0
。这是因为 sklearn 在 1.7 版本中弃用了_get_tags
并推荐使用BaseEstimator.__sklearn_tags__
。这导致 sklearn 和 XGBoost 的最低支持版本分别增加到 1.6 和 2.1.4。#2659 由 Jonas Blanc 贡献。出于与提升最低 sklearn 版本相同的原因,将最低 xgboost 版本从
1.6.0
提升到2.1.4
。#2659 由 Jonas Blanc 贡献。对代码进行了各种修改,以反映更新后的依赖项版本 (sklearn, statsmodel) 并消除各种警告。#2722 由 Antoine Madrona 贡献。
致库开发者:¶
改进
重构并改进了
RegressionModel
的多输出支持处理。#2659 由 Jonas Blanc 贡献。
0.33.0 (2025-02-14)¶
致库用户:¶
改进
TimeSeries
的改进为
TimeSeries.resample()
添加了更多重采样方法。这允许在向下采样时聚合值,并在向上采样时填充或保留空洞。#2654 由 Jonas Blanc 贡献。为
TimeSeries.plot()
添加了title
属性。这允许为绘图设置标题。#2639 由 Jonathan Koch 贡献。添加了通用函数
darts.slice_intersect()
,用于沿时间索引交叉切片一系列TimeSeries
。#2592 由 Yoav Matzkevich 贡献。
模型保存与加载的改进
为
ForecastingModel.save()
添加了参数clean: bool
,用于存储模型的清理版本(从全局模型中移除训练数据,从 torch 模型中移除与 Lightning Trainer 相关的参数)。#2649 由 Jonas Blanc 贡献。为
TorchForecastingModel.load()
添加了参数pl_trainer_kwargs
,用于设置新的 Lightning Trainer,以配置模型用于下游任务(例如预测)。#2649 由 Jonas Blanc 贡献。
异常检测的改进
为
show_anomalies()
添加了参数component_wise
,用于在多元序列中单独绘制每个分量。#2544 由 何威林 贡献。改进了
WindowedAnomalyScorer
如何从输入序列中提取训练数据的文档。#2674 由 Dennis Bader 贡献。
其他改进
修复
修复了使用
torch>=2.6.0
加载 torch 模型时引发错误的 bug。#2658 由 Dennis Bader 贡献。修复了使用
RegressionModel
且output_chunk_shift>=1
和output_chunk_length=1
并使用stride=1
执行优化历史预测时,预测时间索引未正确偏移的 bug。#2634 由 Mattias De Charleroy 贡献。修复了全局朴素模型无法在集成模型中使用的 bug。#2666 由 Dennis Bader 贡献。
修复了全局朴素模型中的一个 bug,该 bug 导致某些
supports_*
属性被错误地定义为方法。#2666 由 Dennis Bader 贡献。修复了
LightGBMModel
、XGBModel
和CatBoostModel
中的一个 bug,该 bug 在使用val_sample_weight
调用fit()
时会引发错误。#2626 由 Kylin Schmidt 贡献。修复了
ShapExplainer
的summary_plot
标题中 Horizon 不包含output_chunk_shift
的问题。#2647 由 何威林 贡献。
依赖项
移除了
sklearn<1.6.0
的版本上限,因为xgboost
在 2.1.4 版本中添加了支持。#2665 由 Dennis Bader 贡献。
致库开发者:¶
将
jinja2
从 3.1.4 提升到 3.1.5(发布要求)。#2672 由 dapendabot 贡献。
0.32.0 (2024-12-21)¶
致库用户:¶
改进
🚀🚀 引入保形预测:现在可以使用我们的前两个保形预测模型为任何预训练的全局预测模型添加经过校准的预测区间:#2552 由 Dennis Bader 贡献。
ConformalNaiveModel
:使用过去的点预测误差生成具有指定覆盖概率的校准预测区间。ConformalQRModel
:将分位数回归(或任何概率模型)与保形预测技术相结合。它调整分位数估计以生成具有指定覆盖概率的校准预测区间。这两种模型提供以下支持
与预测模型相同的 API
使用任何预训练的全局预测模型作为基础预测器
单变量和多变量预测
单序列和多序列预测
单步和多步预测
生成单个或多个校准预测区间
直接分位数预测(区间边界)或从这些分位数进行采样预测
基于底层预测模型的协变量
请查看我们的保形预测 notebook,了解详细信息和使用示例!
使用
ForecastingModel
进行回测的改进(historical_forecasts()
、backtest()
、residuals()
和gridsearch()
)🚀🚀 添加了对数据转换器和管道的支持。使用参数
data_transformers
可以自动将任何DataTransformer
和/或Pipeline
应用于输入序列,而不会发生数据泄露(可在输入序列的历史窗口上进行可选拟合,转换输入序列,并逆转换预测结果)。#2529 由 Antoine Madrona 和 Jan Fidor 贡献。改进了
start
参数的处理。如果start
不在可训练/可预测点范围内,则使用距离start
最近且为stride
的整数倍的有效起始点。如果不存在有效起始点,则引发 ValueError。这保证了所有历史预测都与start
相距n * stride
个点,这将简化许多下游任务。#2560 由 Dennis Bader 贡献。为
residuals()
添加了对overlap_end=True
的支持。这可以计算历史预测和残差,这些预测和残差可以延伸到目标序列的末尾之外。这保证了每个预测返回的所有残差值具有相同的长度(如果预测延伸到目标序列的末尾之外,则最后的残差将包含缺失值)。#2552 由 Dennis Bader 贡献。
metrics 的改进:添加了三个新的分位数区间指标(及其聚合版本):#2552 由 Dennis Bader 贡献。
为
DataTransformer
添加了series_idx
参数,允许用户在global_fit=False
并使用多个序列时,仅使用转换器的一个子集。#2529 由 Antoine Madrona 贡献。
修复
修复了在使用
lags_past_covariates
为 dict、lags_future_covariates
为其他类型(非 dict)且output_chunk_shift>0
初始化RegressionModel
时的 bug,#2652 由 Jules Authier 贡献。修复了在多个序列上计算残差(或使用“每时间步”指标进行回测)时,当对应的历史预测长度不同时引发错误的 bug。#2604 由 Dennis Bader 贡献。
修复了使用
darts.utils.data.tabularization.create_lagged_component_names()
且目标lags=None
时,未返回任何滞后目标标签分量名称的 bug。#2576 由 Dennis Bader 贡献。修复了将
num_samples > 1
与确定性回归模型和优化的historical_forecasts()
方法一起使用时未引发异常的 bug。#2576 由 Antoine Madrona 贡献。修复了使用
RegressionModel
和last_points_only=False
执行优化历史预测时,预测索引生成可能导致日期越界的 bug。#2623 由 Dennis Bader 贡献。修复了 docker 镜像部署失败的问题。#2583 由 Dennis Bader 贡献。
依赖项
🔴 移除对 Python 3.8 的支持。新的最低 Python 版本为 3.9。#2586 由 Dennis Bader 贡献。
我们将
sklearn<=1.5.0
设置了版本上限,直到xgboost
正式支持 1.6.0 版本。#2618 由 Dennis Bader 贡献。
致库开发者:¶
改进
CI/CD 的改进:#2584 由 Dennis Bader 贡献。
将所有工作流程更新到最新的 GitHub actions 版本
改进了跨
master
分支及其子分支的缓存修复了 docker 部署失败的问题
移除
gradle
依赖,转而使用原生 GitHub actions 插件。
将 ruff 更新到 v0.7.2,目标版本更新到 python39,并修复了各种拼写错误。#2589 由 Greg DeVosNouri 和 Antoine Madrona 贡献。
将弃用的
torch.nn.utils.weight_norm
函数替换为torch.nn.utils.parametrizations.weight_norm
。#2593 由 Saeed Foroutan 贡献。
0.31.0 (2024-10-13)¶
致库用户:¶
改进
metrics
的改进添加了对计算一个或多个分位数
q
指标的支持,无论是来自概率预测还是分位数预测。#2530 由 Dennis Bader 贡献。添加了分位数区间指标
miw
(平均区间宽度,时间聚合)和iw
(区间宽度,每时间步/非聚合),用于计算分位数区间q_intervals
的宽度(期望是一个元组或元组序列,包含(较低分位数,较高分位数))。#2530 由 Dennis Bader 贡献。
backtest()
和residuals()
的改进在
metric_kwargs
中添加了对计算一个或多个分位数q
的回测和残差的支持,无论是来自概率预测还是分位数预测。#2530 由 Dennis Bader 贡献。添加了对参数
enable_optimization
和predict_likelihood_parameters
的支持。#2530 由 Dennis Bader 贡献。
TimeSeries
的改进添加了属性
TimeSeries.shape
以获取时间序列的形状。#2530 由 Dennis Bader 贡献。
其他改进
添加了新的异常检测器
IQRDetector
,它允许使用四分位数范围算法检测异常。#2441 由 Igor Urbanik 贡献。添加了超参数
temporal_hidden_size_past/future
,控制TiDEModel
中特征编码器的隐藏层大小。#2408 由 eschibli 贡献。为
BlockRNNModel
添加了超参数activation
,用于在多层输出网络的情况下指定激活函数。#2504 由 Szymon Cogiel 贡献。助手函数
darts.utils.utils.generate_index()
现在接受日期时间字符串作为start
和end
参数,用于生成 pandas DatetimeIndex。#2522 由 Dennis Bader 贡献。
文档改进
使 README 中的预测模型支持表对色盲更友好。#2433 由 Jatin Shridhar 贡献。
更新了用户指南中的 Ray Tune 超参数优化示例,使其兼容最新的
ray
版本(>=2.31.0
)。#2459 由 何威林 贡献。说明
RegressionModel
和LinearRegressionModel
中,multi_models=False
会导致output_chunk_length
中的每一步产生滞后偏移。#2511 由 Antoine Madrona 贡献。在
TimeSeries.add_datetime_attribute
中添加了对timeseries_generation.datetime_attribute_timeseries
的引用(强制执行编码的 0 索引)。#2511 由 Antoine Madrona 贡献。
修复
RegressionModel
的修复修复了使用回归模型进行概率优化历史预测(
num_samples>1, retrain=False, enable_optimization=True
)时,重塑数组导致样本在分量和预测之间顺序错误的 bug。#2534 由 Dennis Bader 贡献。修复了使用
predict_likelihood_parameters=True
、n > 1
和使用likelihood
且multi_models=False
的RegressionModel
进行预测时的一个 bug。现在预测工作正常,不会引发异常。#2545 由 Dennis Bader 贡献。修复了在使用预训练的
RegressionModel
且没有目标滞后lags=None
但使用静态协变量时,使用historical_forecasts()
时的 bug。#2426 由 Dennis Bader 贡献。修复了将
fit()
与使用不支持sample_weight
的底层model
的RegressionModel
一起使用时的 bug。#2445 由 何威林 贡献。修复了在使用包含任何
TorchForecastingModel
的RegressionEnsembleModel
时使用save()
和load()
的 bug。#2437 由 GeorgeXiaojie 贡献。修复了
xgboost>=2.1.0
版本的一个 bug,该 bug 导致多输出回归未正确处理。#2426 由 Dennis Bader 贡献。
TimeSeries
的修复修复了使用
TimeSeries.plot()
绘制概率多元序列时的一个 bug,该 bug 导致所有置信区间(从第二个分量开始)的颜色与中位线相同。#2532 由 Dennis Bader 贡献。修复了使用整数类型的
time_col
与TimeSeries.from_group_dataframe()
一起使用时的一个 bug,该 bug 导致结果时间索引被错误地转换为 DatetimeIndex。#2512 由 Alessio Pellegrini 贡献。修复了将空数组传递给
TimeSeries.prepend/append_values()
时引发错误的 bug。#2522 由 Alessio Pellegrini 贡献。修复了
TimeSeries.prepend/append_values()
的一个 bug,该 bug 导致(时间)索引的名称丢失。#2522 由 Alessio Pellegrini 贡献。
其他修复
修复了使用
ShapExplainer.explain()
且选择了某些target_components
以及原生支持多输出回归的回归模型时的一个 bug:目标分量未正确映射。#2428 由 Dennis Bader 贡献。修复了
CrostonModel
的一个 bug,该模型实际上不支持未来协变量。#2511 由 Antoine Madrona 贡献。修复了类
AnomalyModel
中scorers_are_univariate
注释的问题。#2452 由 何威林 贡献。
依赖项
提升了 jupyterlab 和依赖项的发布要求版本:#2515 由 Dennis Bader 贡献。
将
ipython
从 8.10.0 提升到 8.18.1将
ipykernel
从 5.3.4 提升到 6.29.5将
ipywidgets
从 7.5.1 提升到 8.1.5将
jupyterlab
从 4.0.11 提升到 4.2.5
致库开发者:¶
0.30.0 (2024-06-19)¶
致库用户:¶
改进
🚀🚀 所有
GlobalForecastingModel
现在都支持使用样本权重进行训练(回归、集成和神经网络模型):#2404、#2410、#2417 和 #2418 由 Anton Ragot 和 Dennis Bader 贡献。为
fit()
、historical_forecasts()
、backtest()
、residuals
和gridsearch()
添加了参数sample_weight
和val_sample_weight
,用于将权重应用于训练和评估集中的每个观测值、标签(输出块中的每一步)和目标分量。确定性模型和概率模型都支持此功能。样本权重可以是TimeSeries
本身,也可以是内置权重生成器“线性”和“指数”衰减。如果是TimeSeries
,其处理方式与协变量相同(例如,传入多个权重序列和多个目标序列,相关的时段提取会自动为您处理,…)。您可以在此处找到示例。
🚀🚀 通过重大重构改进了异常检测模块。此次重构包括对大多数流程的重大性能优化,并改进了 API、一致性、可靠性和文档。其中一些必要的更改会带来破坏性变更:#1477 由 Dennis Bader、Samuele Giuliano Piazzetta、Antoine Madrona、Julien Herzen、Julien Adda 贡献。
添加了一个示例 notebook,展示了如何使用 Darts 进行时间序列异常检测。
添加了新的数据集
TaxiNewYorkDataset
,用于异常检测,其中包含 2014 年和 2015 年纽约出租车乘客数量。FittableWindowScorer
(KMeans, PyOD 和 Wasserstein Scorers) 现在接受 darts 的任何 “每时间步”指标作为差异函数diff_fn
。得益于优化的历史预测,
ForecastingAnomalyModel
现在生成预测(scorers 的输入)的速度大大加快。我们还在所有模型方法中添加了更多参数,以更好地控制历史预测的生成。🔴 破坏性变更
FittableWindowScorer
(KMeans, PyOD 和 Wasserstein Scorers) 现在要求diff_fn
是 Darts 的“每时间步”指标之一ForecastingAnomalyModel
:现在强制要求model
必须是GlobalForecastingModel
*.eval_accuracy()
:(Aggregators, Detectors, Filtering/Forecasting Anomaly Models, Scorers)将方法重命名为
eval_metric()
将参数
actual_anomalies
重命名为anomalies
,将anomaly_score
重命名为pred_scores
*.show_anomalies()
:(Filtering/Forecasting Anomaly Models, Scorers)将参数
actual_anomalies
重命名为anomalies
*.fit()
(Filtering/Forecasting Anomaly Models)将参数
actual_anomalies
重命名为anomalies
Scorer.*_from_prediction()
(Scorers)将方法
eval_accuracy_from_prediction()
重命名为eval_metric_from_prediction()
将参数
actual_series
重命名为series
,将actual_anomalies
重命名为anomalies
darts.ad.utils.eval_accuracy_from_scores
:将函数重命名为
eval_metric_from_scores
将参数
actual_anomalies
重命名为anomalies
,将anomaly_score
重命名为pred_scores
darts.ad.utils.eval_accuracy_from_binary_prediction
:将函数重命名为
eval_metric_from_binary_prediction
将参数
actual_anomalies
重命名为anomalies
,将binary_pred_anomalies
重命名为pred_anomalies
darts.ad.utils.show_anomalies_from_scores
:将参数
series
重命名为actual_series
,将actual_anomalies
重命名为anomalies
,将model_output
重命名为pred_series
,将anomaly_scores
重命名为pred_scores
Improvements to
TorchForecastingModel
: #2295 by Bohdan Bilonoh.为
fit*()
、predict*()
和find_lr()
添加了dataloader_kwargs
参数,以便更好地控制 PyTorchDataLoader
的设置。🔴 移除
fit*()
、predict*()
、find_lr()
的参数num_loader_workers
。现在可以通过dataloader_kwargs
字典设置该参数。
DataTransformers
的改进在使用大量序列时,显著提高了
fit
、fit_transform
、transform
和inverse_transform
的速度。分量掩码逻辑已移至并行化转换方法中。#2401 由 Dennis Bader 贡献。
TimeSeries
的改进:#1477 由 Dennis Bader 贡献。新增方法
with_times_and_values()
,它返回一个新的序列,该序列具有新的时间索引和新值,但列和元数据与调用它的原始序列(静态协变量、层次结构)相同。新增方法
slice_intersect_times()
,它返回与另一个序列的时间索引交叉后的序列的切片时间索引。方法
with_values()
现在也可以处理类数组的values
,而不仅仅是 numpy 数组。
快速入门 notebook 的改进:#2418 由 Dennis Bader 贡献。
添加了使用样本权重、预测起始偏移、直接似然参数预测的示例。
增强了历史预测、回测和残差的示例。
修复
修复了一个 bug,在使用支持验证序列的
RegressionModel
并提供验证集时:编码器、静态协变量和组件特有滞后现在已正确应用于验证集。 #2383 由 Dennis Bader 提交。修复了一个 bug,其中
darts.utils.utils.n_steps_between()
在使用自定义业务频率时无法正常工作。这影响了指标计算。 #2357 由 Dennis Bader 提交。修复了一个 bug,当使用
MixedCovariatesTorchModel
(例如 TiDE、N/DLinear 等),n<output_chunk_length
和长度为len(series) < n
的序列列表调用predict()
时,预测结果未返回正确数量的序列。 #2374 由 Dennis Bader 提交。修复了一个 bug,当使用具有有状态 torch 指标的
TorchForecastingModel
时,指标被错误地计算为无状态。 #2391 由 Tim Rosenflanz 提交。
依赖项
我们为
numpy
设置了<2.0.0
的版本上限,直到所有依赖项都已迁移。 #2413 由 Dennis Bader 提交。
针对库的开发者:
依赖项
通过更新 pre-commit 配置改进了 linting: #2324 由 Jirka Borovec 提交。
通过将
isort
切换到 Ruff 的规则 I,改进了统一 linting。 #2339 由 Jirka Borovec 提交。通过将
pyupgrade
切换到 Ruff 的规则 UP,改进了统一 linting。 #2340 由 Jirka Borovec 提交。CI 改进,通过 pre-commit 在本地运行 linting,而不是使用特定工具。 #2327 由 Jirka Borovec 提交。
0.29.0 (2024-04-17)
针对库的用户:
改进
🚀🚀 新预测模型:
TSMixerModel
,如 这篇论文 中所提出。这是一个基于 MLP 的模型,使用堆叠的混合层结合了时间、静态和横截面特征信息。 #2293,由 Dennis Bader 和 Cristof Rojas 提交。🚀🚀 通过主要重构改进了指标、历史预测、回测和残差。重构包括对多个过程的优化,并提高了代码一致性、可靠性和文档。这些必要的更改中有些是破坏性变更。 #2284 由 Dennis Bader 提交。
指标:
优化了所有指标,对于具有
n
个组件/列的序列,现在运行速度比以前快了 > n * 20 倍以上。这提升了直接指标计算以及回测和残差计算的速度!添加了新指标
时间聚合指标
merr()
(均值误差)时间聚合的缩放指标
rmsse()
和msse()
:(根)均方缩放误差。“每时间步”指标,为每个时间步返回一个指标分数:
err()
(误差),ae()
(绝对误差),se()
(平方误差),sle()
(平方对数误差),ase()
(绝对缩放误差),sse
(平方缩放误差),ape()
(绝对百分比误差),sape()
(对称绝对百分比误差),arre()
(绝对范围相对误差),ql
(分位数损失)
所有缩放指标(
mase()
等)现在接受insample
序列,这些序列可以与pred_series
重叠(以前它们必须正好在pred_series
之前一个步长结束)。Darts 将为您处理正确的时间提取。文档改进
向 指标文档页面 添加了所有指标的汇总列表。
标准化了每个指标的文档(添加了公式,改进了返回文档等)。
🔴 破坏性变更
改进了基于输入
series
类型和应用的缩减的指标输出一致性。在某些场景下,输出类型与以前的 Darts 版本相比发生了变化。您可以在 指标 API 文档 中找到详细描述。将指标参数
reduction
重命名为component_reduction
。将指标参数
inter_reduction
重命名为series_reduction
。
:quantile_loss()
重命名为
mql()
(平均分位数损失)。将分位数参数
tau
重命名为q
。该度量现在乘以一个因子
2
以使损失更易于解释(例如,对于q=0.5
,它与MAE
相同)
rho_risk()
:重命名为
qr()
(分位数风险)。将分位数参数
rho
重命名为q
。
缩放后的度量在使用
m=None
时不再允许进行季节性推断。使用装饰器
multi_ts_support
和multivariate_support
的自定义度量现在必须作用于多元序列(可能包含缺失值),而不是单变量序列。
历史预测:
🔴 提高了历史预测输出的一致性,具体取决于输入
series
的类型:如果series
是一个序列,历史预测现在将始终返回一个相同长度的序列/列表(而不是尝试将其转换为TimeSeries
对象)。您可以在 历史预测 API 文档 中找到详细说明。
回测:
度量现在只对所有
series
和historical_forecasts
计算一次,这在使用大量series
时显著加快了速度。添加了对缩放度量作为
metric
的支持(例如ase
、mase
等)。无需额外代码,回测会自动为您提取正确的insample
序列。添加了对通过参数
metric_kwargs
传递额外的度量(或特定于度量)参数的支持。例如,这允许使用n_jobs
并行计算度量,使用*_reduction
自定义度量归约,为缩放度量指定季节性m
等。🔴 破坏性变更
提高了回测输出的一致性,具体取决于输入
series
、historical_forecast
的类型以及应用的回测归约。在某些场景下,输出类型与之前的 Darts 版本相比发生了变化。您可以在 回测 API 文档 中找到详细说明。reduction
可调用对象现在作用于axis=1
而不是axis=0
来按序列聚合度量。当用户提供的
historical_forecasts
的格式与输入series
和last_points_only
值不符时,回测现在将引发错误。
残差: 虽然
residuals()
的默认行为保持不变,但该方法现在与backtest()
非常相似,只是它在historical_forecasts
上计算任何“每个时间步长”的metric
。添加了对多元
series
的支持。添加了对所有
historical_forecasts()
参数的支持,以便为残差计算生成历史预测。添加了对通过参数
historical_forecasts
使用预计算的历史预测的支持。添加了对使用 Darts 的任何“每个时间步长”度量通过参数
metric
计算残差的支持(例如err()
、ae()
、ape()
等)。默认使用err()
(误差)。添加了对通过参数
metric_kwargs
传递额外的度量参数的支持。例如,这允许使用n_jobs
并行计算度量,为缩放度量指定季节性m
等。🔴 提高了残差输出的一致性,具体取决于输入
series
和historical_forecast
的类型。在某些场景下,输出类型与之前的 Darts 版本相比发生了变化。您可以在 残差 API 文档 中找到详细说明。
TimeSeries 的改进
from_group_dataframe()
现在支持在pandas.DataFrame
组上并行创建。可以通过参数n_jobs
启用此功能。 #2292 由 Bohdan Bilonoha 贡献。新方法
slice_intersect_values()
,返回序列的切片值,其中时间索引与另一个序列相交。 #2284 由 Dennis Bader 贡献。提高了以下方法的性能:
slice_intersect()
、has_same_time_as()
。 #2284 由 Dennis Bader 贡献。
预测模型的改进
RNNModel 的改进, #2329 由 Dennis Bader 贡献。
🔴 强制要求
training_length>input_chunk_length
,否则在训练期间模型迭代次数将少于预测期间。历史预测现在能够正确推断未训练和预训练
RNNModel
的所有可能的预测起始点。
在对
RegressionModel
执行优化历史预测(retrain=False
且无自回归)时添加了进度条,以显示序列级别的进度。 #2320 由 Dennis Bader 贡献。将私有属性
ForecastingModel._is_probabilistic
重命名为公共属性supports_probabilistic_prediction
。 #2269 由 Felix Divo 贡献。
其他改进
所有
InvertibleDataTransformer
现在都支持对由TimeSeries
列表组成的series
进行并行逆变换(Sequence[Sequence[TimeSeries]]
)。此类型表示在使用多个序列且last_points_only=False
时historical_forecasts()
的输出。 #2267 由 Alicja Krzeminska-Sciga 贡献。添加了 release notes 到 Darts 文档中。 #2333 由 Dennis Bader 贡献。
🔴 调整了 utils 函数的位置,以清晰区分 Darts 特有的逻辑和非 Darts 特有的逻辑。 #2284 由 Dennis Bader 贡献。
将函数
generate_index()
从darts.utils.timeseries_generation
移至darts.utils.utils
。将函数
retain_period_common_to_all()
、series2seq()
、seq2series()
、get_single_series()
从darts.utils.utils
移至darts.utils.ts_utils
。
修复
修复了使用组件特定滞后时特征的顺序错误,现在按值分组,然后按组件分组(之前是按组件分组,然后按值)。 #2272 由 Antoine Madrona 贡献。
修复了在使用带有
TorchForecastingModel
且 pytorch lightning 版本>= 2.2.0
的 dropout 时,训练期间 dropout 未正确激活的 bug。 #2312 由 Dennis Bader 贡献。修复了使用未训练的
TorchForecastingModel
并带有协变量执行历史预测时,历史预测时间索引生成未考虑协变量的 bug。 #2329 由 Dennis Bader 贡献。修复了
quantile_loss
中的一个 bug,该 bug 导致损失在所有样本上计算,而不仅仅是在预测分位数上计算。 #2284 由 Dennis Bader 贡献。修复了部分用户在导入
LightGBMModel
时遇到的分段错误。 #2304 由 Dennis Bader 贡献。修复了调用
historical_forecasts()
时由于_with_sanity_checks
装饰器导致的类型提示警告“Unexpected argument”。类型提示现在已正确配置,可接受任何输入参数并返回执行完整性检查的方法的输出类型。 #2286 由 Dennis Bader 贡献。
对于库的开发者:¶
通过为
nbsphinx
添加新依赖项lxml_html_clean
,修复了文档构建失败的问题。 #2303 由 Dennis Bader 贡献。将
black
从 24.1.1 升级到 24.3.0。 #2308 由 Dennis Bader 贡献。将
codecov-action
从 v2 升级到 v4,并添加 codecov token 作为仓库密钥,用于 CI 流水线中的 codecov 上传认证。 #2309 和 #2312 由 Dennis Bader 贡献。改进了 linting,从
flake8
切换到 Ruff。 #2323 由 Jirka Borovec 贡献。
0.28.0 (2024-03-05)¶
对于库的用户:¶
改进
GlobalForecastingModel 的改进
🚀🚀🚀 所有全局模型(回归模型和 torch 模型)现在都支持使用模型创建参数
output_chunk_shift
进行偏移预测。这将把训练和预测的输出块向未来偏移output_chunk_shift
个时间步。 #2176 由 Dennis Bader 贡献。
TimeSeries 的改进, #2196 由 Dennis Bader 贡献。
🚀🚀🚀 大幅提升了多个
TimeSeries
方法的性能,从而提高了整个Darts
库的效率。对于使用“常规”频率(例如每日、每小时等)索引的序列,创建时间快了 2 倍;对于使用“特殊”频率(例如“W-MON”等)索引的序列,创建时间快了 100 倍以上。影响以下方面:所有
TimeSeries
创建方法进一步提高了使用整数和 Timestamps 进行切片的性能
通过在整个 DataFrame 上执行部分繁重计算,而不是在组级别上迭代执行,进一步提高了
from_group_dataframe()
的性能。
使用参数
drop_group_cols
调用TimeSeries.from_group_dataframe()
时,添加了排除某些group_cols
被添加为静态协变量的选项。
🚀 新的全局基准模型,使用固定的输入和输出块进行预测。这支持单变量、多元、单目标和多目标序列预测、一次性或自回归/移动预测、优化历史预测、批量预测、数据集预测等。 #2261 由 Dennis Bader 贡献。
GlobalNaiveAggregate
:对每个目标组件在最后input_chunk_length
个点上计算一个聚合值(使用自定义或内置的torch
函数),并将这些值重复output_chunk_length
次进行预测。根据参数不同,此模型可以等同于NaiveMean
和NaiveMovingAverage
。GlobalNaiveDrift
:获取每个目标组件在最后input_chunk_length
个点上的斜率,并将趋势投影到接下来的output_chunk_length
个点上进行预测。根据参数不同,此模型可以等同于NaiveDrift
。GlobalNaiveSeasonal
:获取目标series
结束前第input_chunk_length
个点处的目标组件值,并将这些值重复output_chunk_length
次进行预测。根据参数不同,此模型可以等同于NaiveSeasonal
。
TorchForecastingModel 的改进
添加了对额外 lr 调度器配置参数的支持,以提供更多控制(“interval”、“frequency”、“monitor”、“strict”、“name”)。 #2218 由 Dennis Bader 贡献。
RegressionModel 的改进, #2246 由 Antoine Madrona 贡献。
添加了
get_estimator()
方法来访问底层估计器。添加了属性
lagged_label_names
来标识每个估计器的预测步长和组件。更新了
get_multioutout_estimator()
的文档字符串。
其他改进
为
WindowTransformer
和window_transform
添加了参数keep_names
,用于指示是否保留原始组件名称。 #2207 由 Antoine Madrona 贡献。添加了新的辅助函数
darts.utils.utils.n_steps_between()
,用于高效计算给定频率下两点之间的时间步长(周期)数。通过避免使用pd.date_range()
提高了回归模型制表(tabularization)的效率。 #2176 由 Dennis Bader 贡献。🔴 将
ForecastingModel.gridsearch()
中start
的默认值从0.5
更改为None
,使其与historical_forecasts
和其他方法保持一致。 #2243 由 Thomas Kientz 贡献。ARIMA 文档改进:明确了 statsmodels 中可用的
p
、d
、P
、D
、trend
高级选项。添加了更多关于参数行为的解释。 #2142 由 MarcBresson 贡献。
修复
修复了在使用
RegressionModel
且lags=None
、带有部分lags_*covariates
以及协变量在第一个可预测时间步之后或同时开始时,滞后未从正确索引中提取的 bug。 #2176 由 Dennis Bader 贡献。修复了在带有层级的
TimeSeries
上调用window_transform
时发生的 bug。现在层级仅在应用于所有组件的单个变换中保留,否则将被移除。 #2207 由 Antoine Madrona 贡献。修复了概率性
LinearRegressionModel.fit()
中的一个 bug,该 bug 导致model
属性未指向所有底层估计器。 #2205 由 Antoine Madrona 贡献。在
RegressionEsembleModel
中,当regression_model
使用multi_models=False
创建时(不支持),现在会引发错误。 #2205 由 Antoine Madrona 贡献。修复了
coefficient_of_variation()
在intersect=True
时,系数未在交集上计算的 bug。 #2202 由 Antoine Madrona 贡献。修复了
gridsearch()
在use_fitted_values=True
时,模型未正确实例化以进行完整性检查的 bug。 #2222 由 Antoine Madrona 贡献。修复了
TimeSeries.append/prepend_values()
中的一个 bug,该 bug 导致组件名称和层级被丢弃。 #2237 由 Antoine Madrona 贡献。修复了
get_multioutput_estimator()
中的一个 bug,该 bug 导致估计器的索引计算不正确。 #2246 由 Antoine Madrona 贡献。🔴 修复了
datetime_attribute_timeseries()
中的一个 bug,该 bug 导致 1-indexed 属性未正确处理。此外,现在对所有生成的编码强制使用 0-indexing。 #2242 由 Antoine Madrona 贡献。
依赖项
移除了 PyTorch Lightning 的版本上限(<=v2.1.2)。 #2251 由 Dennis Bader 贡献。
对于库的开发者:¶
使用
pre-commit autoupdate
将 pre-commit hooks 更新到最新版本。将pyupgrade
pre-commit hook 参数更改为--py38-plus
。 #2228 由 MarcBresson 贡献。将开发依赖升级到最新版本。 #2248 由 Dennis Bader 贡献。
black[jupyter]
:从 22.3.0 到 24.1.1flake8
:从 4.0.1 到 7.0.0isort
:从 5.11.5 到 5.13.2pyupgrade
:从 2.31.0 到 v3.15.0
0.27.2 (2024-01-21)¶
对于库的用户:¶
改进
添加了
darts.utils.statistics.plot_ccf
,可用于绘制时间序列(例如目标序列)与另一个时间序列(例如协变量序列)的滞后值之间的互相关。 #2122 由 Dennis Bader 贡献。TimeSeries 的改进:改进了使用切片或 pandas DatetimeIndex 作为
__getitem__
的键时的时间序列频率推断。 #2152 由 DavidKleindienst 贡献。
修复
修复了在使用
TorchForecastingModel
且带有use_reversible_instance_norm=True
并在预测时n > output_chunk_length
的 bug。输入被多次归一化。 #2160 由 FourierMourier 贡献。
对于库的开发者:¶
0.27.1 (2023-12-10)¶
对于库的用户:¶
改进
🔴 添加了
CustomRNNModule
和CustomBlockRNNModule
,用于定义可与RNNModel
和BlockRNNModel
一起使用的自定义 RNN 模块。自定义model
现在必须是这些自定义模块的子类。 #2088 由 Dennis Bader 贡献。
修复
修复了历史预测中的一个 bug,该 bug 导致某些
fit/predict_kwargs
未传递给底层模型的 fit/predict 方法。 #2103 由 Dennis Bader 贡献。修复了尝试使用 PyTorch Lightning v
<2.0.0
创建TorchForecastingModel
时发生的导入错误。 #2087 由 Eschibli 贡献。修复了使用自定义
model
创建RNNModel
时发生的 bug。 #2088 由 Dennis Bader 贡献。
对于库的开发者:¶
添加了文件夹
docs/generated_api
,用于定义生成文档所需的自定义 .rst 文件。 #2115 由 Dennis Bader 贡献。
0.27.0 (2023-11-18)¶
对于库的用户:¶
改进
TorchForecastingModel 的改进
🚀🚀 我们优化了预训练
TorchForecastingModel
的historical_forecasts()
方法,运行速度比之前快了多达 20 倍(在调整批量大小时甚至更快)! #2013 由 Dennis Bader 贡献。添加了回调
darts.utils.callbacks.TFMProgressBar
,用于自定义在哪些模型阶段显示进度条。 #2020 由 Dennis Bader 贡献。所有
InferenceDataset
现在都支持使用参数stride
、bounds
进行跨步预测。这些数据集可用于TorchForecastingModel.predict_from_dataset()
。 #2013 由 Dennis Bader 贡献。
RegressionModel 的改进
新的
RegressionModels
示例笔记本,解释了诸如(组件特定)滞后、output_chunk_length
与multi_models
的关系、多元支持等功能。 #2039 由 Antoine Madrona 贡献。XGBModel
现在利用 XGBoost 在 2.0.0 版本中发布的本地分位数回归支持,以改进概率预测。 #2051 由 Dennis Bader 贡献。
LocalForecastingModel 的改进
为
ExponentialSmoothing
添加了可选的关键字参数字典kwargs
,该字典将传递给底层statsmodels.tsa.holtwinters.ExponentialSmoothing
模型的构造函数。 #2059 由 Antoine Madrona 贡献。
一般模型改进
为
historical_forecasts()
、backtest()
和gridsearch()
添加了新参数fit_kwargs
和predict_kwargs
,这些参数将传递给模型的fit()
和/或predict
方法。例如,您现在可以根据模型支持设置批量大小、静态验证序列等。 #2050 由 Antoine Madrona 贡献。为了透明起见,当使用历史协变量(且
n >= output_chunk_length
)执行自回归预测时,我们会发出一个(可移除的)警告,告知用户将访问历史协变量的未来值。 #2049 由 Antoine Madrona 贡献。
其他改进
在生成/计算节假日和日期时间属性之前,添加了通过参数
tz
进行时间索引时区转换的支持。此支持已添加到所有 Time Axis Encoders、独立编码器和预测模型的add_encoders
、时间序列生成 utils 函数holidays_timeseries()
和datetime_attribute_timeseries()
,以及TimeSeries
方法add_datetime_attribute()
和add_holidays()
。 #2054 由 Dennis Bader 贡献。添加了新的数据转换器:
MIDAS
,它使用混合数据采样将高频TimeSeries
转换为低频(并返回)。 #1820 由 Boyd Biersteker、Antoine Madrona 和 Dennis Bader 贡献。添加了新的数据集
ElectricityConsumptionZurichDataset
:该数据集包含瑞士苏黎世家庭从 2015 年至 2022 年不同电网级别的用电量。我们还添加了苏黎世的天气测量数据,可作为建模的协变量。 #2039 由 Antoine Madrona 和 Dennis Bader 贡献。修改了示例笔记本,以便正确应用数据转换器并避免前瞻偏差。 #2020 由 Samriddhi Singh 贡献。
修复
修复了调用
historical_forecasts()
且overlap_end=False
时未生成最后一个可能预测的 bug。 #2013 由 Dennis Bader 贡献。修复了为使用不同组件特定滞后训练的
RegressionModel
调用优化historical_forecasts()
时发生的 bug。 #2040 由 Antoine Madrona 贡献。修复了在使用编码器与
RegressionModel
以及具有非均匀间隔频率(例如 Month Begin)的序列时发生的 bug。当试图用 pd.Timedelta 除以模糊频率时,这在滞后数据创建期间引发了错误。 #2034 由 Antoine Madrona 贡献。修复了加载使用非
float64
精度训练的TorchForecastingModel
权重时发生的 bug。 #2046 由 Freddie Hsin-Fu Huang 贡献。修复了
Transfer learning
示例笔记本中指向三个数据集公共托管版本的损坏链接。 #2067 由 Antoine Madrona 贡献。修复了在多元序列上使用带有协变量且
normalize=True
的NLinearModel
时发生的 bug。 #2072 由 Antoine Madrona 贡献。修复了在多元序列上使用组件间共享的静态协变量且
use_static_covariates=True
的DLinearModel
和NLinearModel
时发生的 bug。 #2070 由 Antoine Madrona 贡献。
对于库的开发者:¶
无变更。
0.26.0 (2023-09-16)¶
对于库的用户:¶
改进
RegressionModel 的改进, #1962 由 Antoine Madrona 贡献。
🚀🚀 所有模型现在都支持对目标、历史和未来协变量序列使用组件/列特定滞后。
TorchForecastingModel 的改进
🚀 添加了
RINorm
(Reversible Instance Norm) 作为除RNNModel
外所有模型的输入归一化选项。通过模型创建参数use_reversible_instance_norm
激活它。 #1969 由 Dennis Bader 贡献。🔴 根据模型架构师的建议,为
TiDEModel
添加了带参数temporal_width_past
的历史协变量特征投影。参数temporal_width
已重命名为temporal_width_future
。此外,添加了使用temporal_width_past/future=0
绕过特征投影的选项。 #1993 由 Dennis Bader 贡献。
EnsembleModel 的改进, #1815 由 Antoine Madrona 和 Dennis Bader 贡献。
🔴 将模型构造函数参数
models
重命名为forecasting_models
。🚀🚀 添加了对预训练
GlobalForecastingModel
作为forecasting_models
的支持,以避免在集成时重新训练。这要求所有模型都是预训练的全局模型。🚀 添加了使用历史预测而非直接(自回归)预测生成
forecasting_model
预测(用于训练集成模型)的支持。通过在模型创建时设置train_using_historical_forecasts=True
启用此功能。添加了集成模型示例笔记本。
历史预测、回测和网格搜索的改进, #1866 由 Antoine Madrona 贡献。
添加了对负数
start
值的支持,以便从目标序列的末尾开始相对地启动历史预测。添加了新参数
start_format
,允许将整数start
作为使用pd.RangeIndex
索引的series
的索引位置或索引值/标签使用。添加了对
TimeSeries
支持以负整数开头的RangeIndex
。
其他改进
减小了 Darts docker 镜像
unit8/darts:latest
的大小,并包含了所有可选模型以及开发要求。 #1878 由 Alex Colpitts 贡献。在所有模型的 docstring 中添加了简短示例,包括协变量使用和一些模型特定参数。 #1956 由 Antoine Madrona 贡献。
添加了方法
TimeSeries.cumsum()
,用于获取时间序列沿时间轴的累积和。 #1988 由 Eliot Zubkoff 贡献。
修复
修复了在使用
df.columns.name != None
的 pandas.DataFrame 时,TimeSeries.from_dataframe()
中的一个 bug。 #1938 由 Antoine Madrona 贡献。修复了在预测模型只有协变量滞后时,
RegressionEnsembleModel.extreme_lags
中的一个 bug。 #1942 由 Antoine Madrona 贡献。修复了在 GPU 上使用
TFTModel
时,TFTExplainer
中的一个 bug。 #1949 由 Dennis Bader 贡献。修复了
TorchForecastingModel.load_weights()
中的一个 bug,该 bug 在从有效架构加载权重时引发错误。 #1952 由 Antoine Madrona 贡献。修复了
NLinearModel
中的一个 bug,该 bug 导致normalize=True
和历史协变量不能同时使用。 #1873 由 Eliot Zubkoff 贡献。当包含至少一个
LocalForecastingModel
的EnsembleModel
在调用historical_forecasts
时设置了retrain=False
,现在会引发错误。 #1815 由 Antoine Madrona 贡献。🔴 放弃了在
add_encoders
的“自定义”编码器中使用 lambda 函数的支持,转而使用命名函数,以确保模型可以导出。 #1957 由 Antoine Madrona 贡献。
对于库的开发者:¶
改进
重构了所有测试,使用 pytest 代替 unittest。 #1950 由 Dennis Bader 贡献。
0.25.0 (2023-08-04)¶
对于库的用户:¶
安装
🔴 从 PyPI 包(
darts
、u8darts
、u8darts[torch]
)和 conda-forge 包(u8darts
、u8darts-torch
)中移除了 Prophet、LightGBM 和 CatBoost 依赖项,以避免部分用户遇到的安装问题(在 Apple M1/M2 设备上的安装等)。 #1589 由 Julien Herzen 和 Dennis Bader 贡献。您仍然可以通过按照我们的 安装指南 中描述的方式安装所需的包来支持这些模型。
包含所有依赖项的 Darts 包仍然可以通过 PyPI 包
u8darts[all]
或 conda-forge 包u8darts-all
进行安装。添加了新的 PyPI 版本
u8darts[notorch]
和 conda-forge 版本u8darts-notorch
,它们等同于旧的u8darts
安装(除神经网络外的所有依赖项)。
🔴 移除对 Python 3.7 的支持。 #1864 由 Dennis Bader 贡献。
改进
一般模型改进
🚀🚀 通过向量化预测,优化了
RegressionModel
在retrain=False
且forecast_horizon <= output_chunk_length
时的historical_forecasts()
方法。这可以比之前快多达 700 倍! #1885 由 Antoine Madrona 贡献。提高了所有模型的
historical_forecasts()
和backtest()
方法的效率,显著减少了大量预测迭代和序列的处理时间。 #1801 由 Dennis Bader 贡献。🚀🚀 添加了对使用似然函数(回归模型和 torch 模型)的概率模型直接预测似然参数的支持。调用
predict()
时设置predict_likelihood_parameters=True
。 #1811 由 Antoine Madrona 贡献。🚀🚀 新的预测模型:
TiDEModel
,如 这篇论文 中提出。一个基于 MLP 的编码器-解码器模型,据称性能优于许多基于 Transformer 的架构。 #1727 由 Alex Colpitts 贡献。Prophet
现在支持条件季节性,并正确处理传递给Prophet.add_seasonality()
和模型创建参数add_seasonalities
的所有参数。 #1829 由 Idan Shilon 贡献。添加了方法
generate_fit_predict_encodings()
,用于生成训练和预测所需的编码(模型创建时的add_encoders
)。 #1925 由 Dennis Bader 贡献。为所有非深度学习模型的
save()
和load()
函数添加了对PathLike
的支持。 #1754 由 Simon Sudrich 贡献。添加了模型属性
ForecastingModel.supports_multivariate
,用于指示模型是否支持多元预测。 #1848 由 Felix Divo 贡献。
EnsembleModel 的改进
模型创建参数
forecasting_models
现在支持混合使用LocalForecastingModel
和GlobalForecastingModel
(由于本地模型,仅支持单个TimeSeries
的训练/推理)。 #1745 由 Antoine Madrona 贡献。即使
forecasting_models
支持不同的协变量类型,现在也可以使用未来和历史协变量。传递给fit()
/predict()
的协变量仅由支持它的模型使用。 #1745 由 Antoine Madrona 贡献。RegressionEnsembleModel
和NaiveEnsembleModel
可以生成概率预测,可以对概率forecasting_models
进行采样来训练regression_model
,更新了文档(堆叠技术)。 #1692 由 Antoine Madrona 贡献。
Explainability 模块的改进
🚀🚀 新的预测模型解释器:用于
TFTModel
的TFTExplainer
。您现在可以访问和可视化训练模型的特征重要性和自注意力。 #1392 由 Sebastian Cattes 和 Dennis Bader 贡献。为
ShapeExplainer
添加了静态协变量支持。 #1803 由 Anne de Vries 和 Dennis Bader 贡献。
文档改进, #1904 由 Dennis Bader 贡献。
通过添加模型链接并将它们重新组织到模型类别中,使 README.md、协变量用户指南和预测模型 API 参考中的模型部分更加用户友好。
添加了动态时间规整 (DTW) 模块并改进了其外观。
其他改进
改进了在使用
StaticCovariatesTransformer
和sklearn.preprocessing.OneHotEncoder
时静态协变量的列命名。 #1863 由 Anne de Vries 贡献。为
extract_trend_and_seasonality()
添加了MSTL
(使用 LOESS 进行多季节性趋势分解) 作为method
选项。 #1879 由 Alex Colpitts 贡献。为
TorchForecastingModel
添加了RINorm
(可逆实例归一化) 作为新的输入归一化选项。目前只有TiDEModel
通过模型创建参数use_reversible_instance_norm
支持此功能。 #1865 由 Alex Colpitts 贡献。TimeSeries.plot() 的改进:现在通过参数
ax
正确支持自定义轴。轴现在作为下游任务的返回值。 #1916 由 Dennis Bader 贡献。
修复
修复了在提供标签前缀时,
TimeSeries.plot()
未考虑原始组件名称的问题。 #1783 由 Simon Sudrich 贡献。修复了在模型创建时使用类似数组的对象时
ForecastingModel
的字符串表示问题。 #1749 由 Antoine Madrona 贡献。修复了
TorchForecastingModel.load_from_checkpoint()
未正确加载损失函数和度量的问题。 #1759 由 Antoine Madrona 贡献。修复了加载使用编码器或似然函数训练的
TorchForecastingModel
权重时发生的 bug。 #1744 由 Antoine Madrona 贡献。修复了在使用
ShapExplainer
时带有选定的target_components
的 bug。 #1803 由 Dennis Bader 贡献。修复了
TimeSeries.__getitem__()
在使用start != 0
且freq != 1
的 RangeIndex 序列时的 bug。 #1868 由 Dennis Bader 贡献。修复了
DTWAlignment.plot_alignment()
在绘制带有 RangeIndex 的序列对齐图时未正确绘制的问题。 #1880 由 Ahmet Zamanis 和 Dennis Bader 贡献。修复了在调用
ARIMA.predict()
且num_samples > 1
(概率预测)时的一个问题,该问题导致模拟的起始点未锚定到目标序列的末尾。 #1893 由 Dennis Bader 贡献。修复了在使用
TFTModel.predict()
且full_attention=True
时,注意力掩码未正确应用的问题。 #1392 由 Dennis Bader 贡献。
对于库的开发者:¶
改进
重构了
ForecastingModelExplainer
和ExplainabilityResult
,以简化新解释器的实现。 #1392 由 Dennis Bader 贡献。调整了所有单元测试,使其能在 M1 设备上成功运行。 #1933 由 Dennis Bader 贡献。
0.24.0 (2023-04-12)¶
对于库的用户:¶
改进
一般模型改进
新的基准预测模型
NaiveMovingAverage
。 #1557 由 Janek Fidor 贡献。来自 Nixtla statsforecasts 库的新模型
StatsForecastAutoCES
和StatsForecastAutoTheta
,作为不支持协变量的本地预测模型。AutoTheta 支持概率预测。 #1476 由 Boyd Biersteker 贡献。为
StatsForecastAutoETS
添加了对未来协变量和概率预测的支持。 #1476 由 Boyd Biersteker 贡献。为
Prophet
添加了通过参数growth
、cap
、floor
实现逻辑增长的支持。 #1419 由 David Kleindienst 贡献。改进了类似于 scikit-learn 模型的文件字符串/对象表示风格。 #1590 由 Janek Fidor 贡献。
🔴 将
MovingAverage
重命名为MovingAverageFilter
,以避免与新的NaiveMovingAverage
模型混淆。 #1557 由 Janek Fidor 贡献。
RegressionModel 的改进
优化了 fit/predict 集的滞后数据创建,实现了显著加速。 #1399 由 Matt Bilton 贡献。
为
LightGBMModel
添加了对分类的历史/未来/静态协变量的支持,使用模型创建参数categorical_*_covariates
。 #1585 由 Rijk van der Meulen 贡献。添加了滞后特征名称以提高可解释性;可通过模型属性
lagged_feature_names
访问。 #1679 由 Antoine Madrona 贡献。🔴 所有模型新增
use_static_covariates
选项:当设置为 True(默认)时,模型在拟合时如果静态协变量可用,则会使用它们,并强制训练或预测所用的所有目标series
具有相同的静态协变量形状;当设置为 False 时,模型将忽略静态协变量。 #1700 由 Dennis Bader 贡献。
TorchForecastingModel 的改进
新方法
load_weights()
和load_weights_from_checkpoint()
用于从手动保存的模型或检查点加载仅权重。这允许使用不同的优化器或学习率调度器微调预训练模型。 #1501 by Antoine Madrona。新方法
lr_find()
有助于为您的预测问题找到一个好的初始学习率。 #1609 by Levente Szabados and Dennis Bader。改进了 用户指南,并添加了关于保存/加载(检查点、手动保存/加载、仅加载权重)和回调的新部分。 #1661 by Antoine Madrona。
🔴 将保存文件名中的
":"
替换为"_"
以避免在某些操作系统上出现问题。对于加载使用早期 Darts 版本保存的模型,请尝试通过将":"
替换为"_"
来重命名文件。 #1501 by Antoine Madrona。🔴
TFTModel
、DLinearModel
和NLinearModel
的新选项use_static_covariates
:当为 True(默认)时,如果拟合时可用,模型会使用静态协变量,并确保所有用于训练或预测的目标series
的静态协变量形状相同;当为 False 时,模型忽略静态协变量。 #1700 by Dennis Bader。
TimeSeries 的改进
为
from_*
工厂方法添加了对整数索引输入的 支持,前提是索引可以转换为 pandas.RangeIndex。 #1527 by Dennis Bader。添加了对步长 (freq) 不为 1 的整数索引输入的 支持。 #1527 by Dennis Bader。
优化了使用
fill_missing_dates=True
创建时间序列的过程,大幅提升了速度。 #1527 by Dennis Bader。如果时间索引有“问题”(非单调递增),
from_group_dataframe()
现在会警告用户。 #1628 by Dennis Bader。
添加了一个参数,用于为
WindowTransformer
的转换输出指定自定义函数名;改进了对window
参数的解释。 #1676 and #1666 by Jing Qiang Goh。为
backtest()
添加了historical_forecasts
参数,允许使用historical_forecasts()
中预计算的历史预测。 #1597 by Janek Fidor。为
ShapExplainabilityResult
添加了特征值和 SHAP 对象,使用户可以轻松访问所有 SHAP 特定的可解释性结果。 #1545 by Rijk van der Meulen。用于概率预测的新指标
quantile_loss()
(弹球损失)。 #1559 by Janek Fidor。
修复
修复了
BottomUp/TopDownReconciliator
中未考虑系列分量顺序的问题。 #1592 by David Kleindienst。修复了
DLinearModel
不支持偶数kernel_size
的问题。 #1695 by Antoine Madrona。修复了
RegressionEnsembleModel
在训练期间不使用未来协变量的问题。 #1660 by Rajesh Balakrishnan。修复了
NaiveEnsembleModel
预测时未转移系列分量名称的问题。 #1602 by David Kleindienst。修复了
TorchForecastingModel
中阻止使用多 GPU 训练的问题。 #1509 by Levente Szabados。修复了保存
FFT
模型时trend=None
导致的错误。 #1594 by Antoine Madrona。修复了 PyTorch-Lightning 2.0.0 版本的一些问题。 #1651 by Dennis Bader。
修复了
QuantileDetector
中低分位数和高分位数具有相同值时引发错误的问题。 #1553 by Julien Adda。修复了阻止
TimeSeries
为空的问题。 #1359 by Antoine Madrona。修复了在多个系列上使用
backtest()
时的问题。 #1517 by Julien Herzen。historical_forecasts()
的一般修复修复了
retrain
函数未正确处理的问题;改进了对start
和train_length
参数的处理;通过警告和改进的错误消息提高了可解释性(警告可以通过show_warnings=False
关闭)。By #1675 by Antoine Madrona and Dennis Bader。修复了几个模型(主要是集成模型和局部模型)中自动
start
未遵守所需的最小训练长度的问题。 #1616 by Janek Fidor and Dennis Bader。修复了仅使用未来协变量滞后项的
RegressionModel
的问题。 #1685 by Maxime Dumonal。
库的开发者:¶
改进
可以在本地使用
pytest . --no-cov -m "not slow"
跳过慢速测试。 #1625 by Blazej Nowicki。数据转换器进行了重大重构,简化了新转换器的实现。 #1409 by Matt Bilton。
0.23.1 (2023-01-12)¶
补丁版本
修复
修复了
TimeSeries
中使其与 Python 3.7 不兼容的问题。 #1449 by Dennis Bader。修复了在使用
RegressionModel
时,系列长度可变导致静态协变量出现的问题。 #1469 by Eliane Maalouf。修复了 PyTorch Lightning 训练器处理问题。 #1459 by Dennis Bader。
修复了
historical_forecasts()
迭代而非从头开始重新训练 PyTorch 模型的问题。 #1465 by Dennis Bader。修复了在提供
future_covariates
但未指定start
的某些情况下,historical_forecasts()
不起作用的问题。 #1481 by Maxime Dumonal。修复了
slice_n_points
函数在整数索引上的问题。 #1482 by Julien Herzen。
0.23.0 (2022-12-23)¶
库的用户:¶
改进
🚀🚀🚀 全新的 Darts 模块,专门用于时间序列异常检测:
darts.ad
。更多信息请参见 API 文档页面:https://darts.ac.cn/darts/generated_api/darts.ad.html。 #1256 by Julien Adda and Julien Herzen。新的预测模型:
DLinearModel
和NLinearModel
,如本文所述。 #1139 by Julien Herzen and Greg DeVos。新的预测模型:实现 XGBoost 的
XGBModel
。 #1405 by Julien Herzen。所有
RegressionModel
的新选项multi_models
:当设置为 False 时,仅使用一个基础估计器进行多步预测,这可以大幅提高计算效率。 #1291 by Eliane Maalouf。所有
RegressionModel
(包括 LightGBM、Catboost、XGBoost、Random Forest 等)现在都支持静态协变量。 #1412 by Eliane Maalouf。historical_forecasts()
和backtest()
现在也适用于多个系列。 #1318 by Maxime Dumonal。新的窗口转换功能:
TimeSeries.window_transform()
和新的WindowTransformer
,可以轻松创建窗口特征。 #1269 by Eliane Maalouf。🔴
TorchForecastingModels
的改进:可以直接将 GPU 上训练的模型加载到 CPU。减小了保存文件的大小。改进了 PyTorch Lightning Trainer 的处理,修复了一些小问题。移除了已弃用的方法load_model
和save_model
#1371 by Dennis Bader。对编码器的改进:通过在模型创建时使用
add_encoders
,为所有支持协变量的模型添加了对编码器的支持。编码器现在可以为所有模型生成正确的最小所需协变量时间跨度。 #1338 by Dennis Bader。darts.datasets
中新增了数据集(ILINetDataset
、ExchangeRateDataset
、TrafficDataset
、WeatherDataset
) #1298 by Kamil Wierciak。 #1291 by Eliane Maalouf。新的
Diff
转换器,可以对系列进行差分和“反差分” #1380 by Matt Bilton。对 KalmanForecaster 的改进:模型现在接受用于预测的时间序列与用于拟合模型的时间序列不同。 #1338 by Dennis Bader。
回测函数现在可以接受一个度量函数列表 #1333 by Antoine Madrona。
扩展了基准模型,使其适用于多元系列 #1373 by Błażej Nowicki。
对
TimeSeries.gaps()
的改进 #1265 by Antoine Madrona。加快了
TimeSeries.quantile_timeseries()
方法的速度 #1351 by @tranquilitysmile。一些难以安装的依赖项(LightGBM、Catboost、XGBoost、Prophet、Statsforecast)不再是必需的(如果未安装,则相应的模型将不可用) #1360 by Antoine Madrona。
移除了对
IPython
的依赖。 #1331 by Erik Hasse允许创建空的
TimeSeries
#1359 by Antoine Madrona。
修复
修复了 ShapExplainer 在回归模型中协变量系列长度大于目标系列长度的边界情况 #1310 by Rijk van der Meulen
修复了
TimeSeries.resample()
中的一个错误 #1350 by Antoine Madrona。修复了分割点不在系列中时分割方法的问题 #1415 by @DavidKleindienst
修复了
append_values()
和prepend_values()
未正确扩展RangeIndex
的问题 #1435 by Matt Bilton。修复了一些时区问题 #1343 by Antoine Madrona。
修复了在使用
RegressionEnsembleModel
和单个目标系列时的一些问题 #1357 by Dennis Bader。修复了集成模型中随机模型的处理 #1423 by Eliane Maalouf。
0.22.0 (2022-10-04)¶
库的用户:¶
改进
新的可解释性功能。`darts.explainability` 中的
ShapExplainer
类可以为RegressionModel
提供 Shap 值解释,说明每个滞后和每个维度在生成每个预测滞后中的重要性。 #909 by Maxime Dumonal。新模型:
StatsForecastsETS
。类似于StatsForecastsAutoARIMA
,此模型提供了 Nixtla 的statsforecasts
库中的 ETS 模型,作为支持未来协变量的局部预测模型。 #1171 by Julien Herzen。为
residuals()
函数添加了对过去和未来协变量的支持。 #1223 by Eliane Maalouf。在
ForecastingModel
的historical_forecasts
方法中添加了支持每n
次迭代以及在自定义条件下重新训练模型的功能。 #1139 by Francesco Bruzzesi。在
GaussianLikelihood
中添加了对 beta-NLL 的支持,如本文所述。 #1162 by Julien Herzen。新的 LayerNorm 替代方案:RMSNorm 和 LayerNormNoBias #1113 by Greg DeVos。
🔴 对编码器的改进:改进了编码器转换器的拟合行为并解决了一些问题。移除了对绝对索引编码的支持。 #1257 by Dennis Bader。
覆盖了 Catboost 和 LightGBM 的 min_train_series_length 设置 #1214 by Anne de Vries。
新的示例 notebook,展示了使用 Optuna 进行端到端超参数优化的示例 #1242 by Julien Herzen。
新的用户指南部分,介绍了使用 Optuna 和 Ray Tune 进行超参数优化 #1242 by Julien Herzen。
关于模型保存和加载的文档。 #1210 by Amadej Kocbek。
🔴
torch_device_str
已从所有 torch 模型中移除,转而使用 Pytorch Lightning 的pl_trainer_kwargs
方法 #1244 by Greg DeVos。
修复
在使用单个目标系列调用
fit/predict
时,RegressionModel
中add_encoders
的一个问题。 #1193 by Dennis Bader。整数索引系列的一些问题。 #1191 by Julien Herzen。
使用最新版本 (>=1.1.1) 的 Prophet 时的一个错误。 #1208 by Julien Herzen。
在 reconciliators 上调用
fit_transform()
的一个问题。 #1165 by Julien Herzen。GaussianLikelihood
对象中导致置信区间出现问题的一个错误。 #1162 by Julien Herzen。一个阻止绘制长度为 1 的
TimeSeries
的问题。 #1206 by Julien Herzen。ExponentialSmoothing 模型的类型提示 #1185 by Rijk van der Meulen
0.21.0 (2022-08-12)¶
库的用户:¶
改进
新模型:Catboost,包括
quantile
、poisson
和gaussian
似然支持。 #1007, #1044 by Jonas Racine。将
add_encoders
选项扩展到RegressionModel
。现在,可以像 torch 模型一样,轻松地向这些模型添加基于日历的或自定义的过去或未来协变量。 #1093 by Dennis Bader。引入了
StaticCovariatesTransformer
,为TFTModel
添加了分类静态协变量支持,更新了关于静态协变量的示例和用户指南。 #1081 by Dennis Bader。ARIMA 和 VARIMA 模型现在支持应用于新的系列,与用于训练的系列不同。 #1036 by Samuele Giuliano Piazzetta。
所有 Darts 预测模型现在都有统一的
save()
和load()
方法。 #1070 by Dustin Brunner。日志记录的改进。 #1034 by Dustin Brunner。
将 Prophet >= 1.1 重新集成到核心依赖项中(因为它不再依赖于 PyStan)。 #1054 by Julien Herzen。
添加了一个新的
AustralianTourismDataset
。 #1141 by Julien Herzen。添加了一个演示分层调节的新 notebook。 #1147 by Julien Herzen。
为
TimeSeries
添加了drop_columns()
方法。 #1040 by @shaido987当不需要类型转换时,加快了静态协变量的处理速度。 #1053 by Julien Herzen。
为 FourTheta 和 Theta 模型实现了 min_train_series_length 方法,该方法在适当时将最小默认训练样本数 3 覆盖为 2*seasonal_period。 #1101 by Rijk van der Meulen。
使绘图中的默认格式可选。 #1056 by Colin Delahunty
在
residuals()
方法中引入了retrain
选项。 #1066 by Julien Herzen。改进了错误消息。 #1066 by Julien Herzen。
改进了用户指南的可读性。 #1039, #1046 by Ryan Russell
修复
修复了加载 torch 预测模型时的一个错误。 #1124 by Dennis Bader。
🔴 在
TimeSeries.concatenate()
中将ignore_time_axes
重命名为ignore_time_axis
。 #1073 by Thomas KIENTZ在缺失值填充器中传播静态协变量和层次结构。 #1076 by Julien Herzen。
修复了 NBEATSModel 中使用 num_stacks 而非 self.num_stacks 的问题。此外,API 参考文档中也存在一些错误。 #1103 by Rijk van der Meulen。
修复了
univariate_component()
方法,以传播静态协变量并删除层次结构。 #1128 by Julien Herzen。修复了各种问题。 #1106 by Julien Herzen。
修复了
RNNModel
中residuals
的一个问题。 #1066 by Julien Herzen。
0.20.0 (2022-06-22)¶
库的用户:¶
改进
在
TimeSeries
类中添加了对静态协变量的支持。 #966 by Dennis Bader。在 TFT 模型中添加了对静态协变量的支持。 #966 by Dennis Bader。
支持在
TimeSeries
中存储分量层次结构(用于分层调节) #1012 by Julien Herzen。用于预测调节的新调节转换器:自下而上、自上而下和 MinT。 #1012 by Julien Herzen。
添加了对 Monte Carlo Dropout 的支持,作为在推理时捕获 torch 模型不确定性的一种方法。 #1013 by Julien Herzen。
新的数据集:ETT 和 Electricity。 #617 by Greg DeVos
新数据集:Uber TLC。 #1003 by Greg DeVos。
模型改进:NHiTs 和 NBEATS 的激活函数更改选项。NBEATS 支持 dropout。NHiTs 支持 AvgPooling1d。 #955 by Greg DeVos。
为基于 Transformer 的模型(transformer 和 TFT)实现了“GLU Variants Improve Transformer”。 #968 by Greg DeVos。
添加了在训练和验证期间对 torch 度量的支持。 #996 by Greg DeVos。
更好地处理日志记录 #1010 by Dustin Brunner。
更好地支持 Python 3.10,并移除了对
prophet
的依赖(如果单独安装了prophet
包,Prophet
模型仍然可以使用) #1023 by Julien Herzen。可选避免全局修改 matplotlib 配置。 #924 by Mike Richman。
🔴 将
HNiTSModel
重命名为HNiTS
#1000 by Greg DeVos。
修复
tail()
和head()
的一个错误 #942 by Julien Herzen。gridsearch 和 backtest 的
metric
函数参数被还原的问题 #989 by Clara Grotehans。检查全局模型中是否已调用
fit()
时的一个错误 #944 by Julien Herzen。使用较新版本 sklearn 时高斯过程滤波器中的一个错误 #963 by Julien Herzen。
库的开发者:¶
修复
测试中 LinearLR 调度器的一个问题。 #928 by Dennis Bader。
0.19.0 (2022-04-13)¶
库的用户:¶
改进
新模型:实现 N-HiTS 模型的
NHiTS
。 #898 by Julien Herzen。新模型:
StatsForecastAutoARIMA
,实现了 statsforecast 中(更快)的 AutoARIMA 版本。 #893 by Julien Herzen。新模型:
Croston
方法。 #893 by Julien Herzen。更好地表示由分位数指定的分布中的随机
TimeSeries
。 #899 by Gian Wiher。更好地对随机
RegressionModel
的轨迹进行采样。 #899 by Gian Wiher。改进了用户指南,增加了更多部分。 #905 by Julien Herzen。
新的 notebook,展示了在大型时间序列数据集上进行迁移学习和训练预测模型。 #885 by Julien Herzen。
修复
PyTorch Lightning >= 1.6.0 的一些问题 #888 by Julien Herzen。
0.18.0 (2022-03-22)¶
库的用户:¶
改进
LinearRegressionModel
和LightGBMModel
现在可以是概率性的,支持分位数和泊松回归。 #831, #853 by Gian Wiher。新模型:
BATS
和TBATS
,基于 tbats。 #816 by Julien Herzen。处理基于 PyTorch 模型中的随机输入。 #833 by Julien Herzen。
将训练和验证损失添加到 PyTorch Lightning 进度条中。 #825 by Dennis Bader。
darts.utils.losses
中为基于 PyTorch 的模型提供了更多损失函数:SmapeLoss
、MapeLoss
和MAELoss
。 #845 by Julien Herzen。对季节分解的改进 #862。by Gian Wiher。
移除了预测时多余的检查点加载。 #821 by Dennis Bader。
将验证的默认 epoch 数从 10 更改为 1。 #825 by Dennis Bader。
修复
修复了
fit_from_dataset()
中编码器的一些问题。 #829 by Julien Herzen。修复了
DualCovariatesForecastingModels
的协变量切片问题。 #858 by Dennis Bader。
0.17.1 (2022-02-17)¶
补丁版本
库的用户:¶
修复
修复了(现已弃用)
torch_device_str
参数的问题,并改进了与 PyTorch Lightning 设备使用相关的文档。 #806 by Dennis Bader。修复了
ReduceLROnPlateau
的问题。 #806 by Dennis Bader。修复了 N-BEATS 周期基函数的问题。 #804 by Vladimir Chernykh。
放松了对
pandas
的要求;从pandas>=1.1.0
到pandas>=1.0.5
。 #800 by @adelnick。
0.17.0 (2022-02-15)¶
库的用户:¶
改进
🚀 支持 PyTorch Lightning:所有深度学习模型现在都使用 PyTorch Lightning 实现。这意味着现在可以通过 PyTorch Lightning 训练器的功能使用更多特性;例如定制的回调函数或多 GPU 训练。 #702 by Dennis Bader。
RegressionModel
现在接受output_chunk_length
参数;这意味着可以训练它们预测提前一个以上时间步(并用于自回归预测更长的时间范围)。 #761 by Dustin Brunner。🔴
TimeSeries
的“简单统计”方法(例如mean()
、max()
、min()
等)已重构,以原生支持随机TimeSeries
,并在可配置轴上工作。 #773 by Gian Wiher。🔴
TimeSeries
现在仅支持 pandasRangeIndex
作为整数索引,不再支持Int64Index
,因为后者在 pandas 1.4.0 中已弃用。这也保证了即使使用整数索引,TimeSeries
也没有缺失的“日期”。 #777 by Julien Herzen。新模型:
KalmanForecaster
是一个新的概率模型,适用于多元系列,接受未来协变量,并通过运行给定卡尔曼滤波器的状态空间模型来预测未来。fit()
函数使用 N4SID 算法进行系统辨识。 #743 by Julien Herzen。KalmanFilter
现在也适用于包含缺失值的TimeSeries
。 #743 by Julien Herzen。估计器(预测和滤波模型)现在在调用
fit()
时也会返回自身的实例,这允许链式调用。 #741 by Julien Herzen。
修复
修复了提供
model_name
时 tensorboard 和 gridsearch 的问题。 #760 by @gdevos010。修复了 pip-tools 的问题。 #762 by Tomas Van Pottelbergh。
库的开发者:¶
CI 流水线中添加了一些 linting 检查。 #749 by Tomas Van Pottelbergh。
0.16.1 (2022-01-24)¶
补丁版本
库的用户:¶
修复了与最新版本 Pandas 的不兼容性问题 (#752) by Julien Herzen。
修复了在 GPU 上使用 lstm_layers > 1 时出现的非连续错误。(#740) by Dennis Bader。
API 文档中类型注解的小改进 (#744) by Dustin Brunner。
库的开发者:¶
在 CI 流水线中添加了 flake8 测试 (#749, #748, #745) by Tomas Van Pottelbergh and Dennis Bader。
0.16.0 (2022-01-13)¶
库的用户:¶
改进
文档页面已改版,现在包含全新的快速入门指南和用户指南部分,这些部分将随着时间推移进行填充。
API 文档已改版和改进,特别是使用了
numpydoc
。RegressionModel
中改进了数据集构建过程,显著提高了速度。
已添加
KalmanFilter
现在可以使用fit()
进行系统辨识(使用 nfoursid)。
修复
捕获集成模型中一个潜在问题情况。
修复了对
ReduceLROnPlateau
调度器的支持。
库的开发者:¶
我们已切换到 black 进行代码格式化(CI 流水线会检查)。
0.15.0 (2021-12-24)¶
库的用户:¶
已添加:
在基于 Torch 的模型中即时编码位置和日历信息。基于 Torch 的模型现在接受一个可选参数
add_encoders
,用于指定如何即时使用某些日历和位置信息作为过去和/或未来协变量。示例
from darts.dataprocessing.transformers import Scaler add_encoders={ 'cyclic': {'future': ['month']}, 'datetime_attribute': {'past': ['hour', 'dayofweek']}, 'position': {'past': ['absolute'], 'future': ['relative']}, 'custom': {'past': [lambda idx: (idx.year - 1950) / 50]}, 'transformer': Scaler() }
这会将月份的循环编码添加为未来协变量,将一些 datetime 属性添加为过去和未来协变量,一个绝对/相对位置(索引),甚至是一些自定义索引映射(例如年份的函数)。
Scaler
将在训练和推理期间应用于拟合/转换所有这些协变量。缩放器现在也可以应用于随机
TimeSeries
。基于 Torch 的模型的
fit()
方法现在有一个新参数max_samples_per_ts
,可用于限制底层训练数据集包含的样本数量,方法是(最多)获取每个时间序列最近的max_samples_per_ts
个训练样本。所有支持协变量的局部预测模型(Prophet、ARIMA、VARIMA、AutoARIMA)现在都自行处理协变量切片;这意味着您无需确保您的协变量具有完全正确的时间跨度。只要它们包含正确的时间跨度,模型就会为您进行切片。
TimeSeries.map()
和 mappers 数据转换器现在可用于随机TimeSeries
。Granger 因果关系函数:
utils.statistics.granger_causality_tests
可以测试一个单变量TimeSeries
是否“Granger 导致”另一个。单变量
TimeSeries
的新平稳性检验:darts.utils.statistics.stationarity_tests
、darts.utils.statistics.stationarity_test_adf
和darts.utils.statistics.stationarity_test_kpss
。新的测试覆盖率徽章 🦄
修复:
修复了不同 notebook 中的各种问题。
修复了 Prophet 模型处理频率的一个错误。
修复了当
n > output_chunk_length
且n
不是output_chunk_length
的倍数时,导致PastCovariatesTorchModels
(例如NBEATSModel
)预测失败的问题。修复了回测中的一个问题,该问题导致在
retrain=False
时,未经训练的模型未在初始窗口上进行训练。修复了导致基于 Torch 的模型调用
residuals()
失败的问题。
库的开发者:¶
更新了贡献指南
单元测试已按照库的子模块进行了重新组织。
所有相对导入路径已移除并替换为绝对路径。
现在使用 pytest 和 pytest-cov 运行测试和计算覆盖率。
0.14.0 (2021-11-28)¶
库的用户:¶
已添加:
概率性 N-BEATS:
NBEATSModel
现在可以生成概率预测,方式与 Darts 中所有其他深度学习模型类似(通过指定likelihood
并使用num_samples
>> 1 进行预测)。我们改进了基于 PyTorch 的模型的数据加载功能的速度。这通常可以加快训练速度百分之几。
为基于 PyTorch 的模型的
fit()
和predict()
方法添加了num_loader_workers
参数,用于控制 PyTorch DataLoaders 的num_workers
。这有时可以带来显著的速度提升。新方法
TimeSeries.astype()
,允许轻松进行类型转换(例如在np.float64
和np.float32
之间)。在时间序列生成模块中添加了
dtype
选项。为基于 PyTorch 的模型添加了一个简要的性能指南。
可以在 TFT 模型中指定一个(相对)时间索引作为未来协变量。使用此选项时无需指定未来协变量。
新的 TFT 示例 notebook。
更宽松的依赖:我们放宽了所需依赖项的版本。
修复:
对 Temporal Fusion Transformer
TFTModel
的一个小修复,应该能提高性能。一些单元测试的随机状态中的一个小修复。
修复了 Transformer 示例 notebook 中的一个拼写错误。
0.13.1 (2021-11-08)¶
库的用户:¶
已添加:
TimeSeries
中的工厂方法现在是classmethods
,这使得TimeSeries
的继承更加方便。
修复:
导致某些风格安装无法工作的一个问题
0.13.0 (2021-11-07)¶
库的用户:¶
已添加:
新的预测模型,Temporal Fusion Transformer (
TFTModel
)。一个新的支持过去和未来协变量的深度学习模型。改进了对 Facebook Prophet 模型 (
Prophet
) 的支持添加了对使用未来协变量进行拟合和预测的支持。例如:
model.fit(train, future_covariates=train_covariates)
和model.predict(n=len(test), num_sample=1, future_covariates=test_covariates)
添加了随机预测,例如:
model.predict(n=len(test), num_samples=200)
添加了用户定义的季节性,可以在模型创建时使用 kwarg
add_seasonality
(Prophet(add_seasonality=kwargs_dict)
) 指定,也可以在预拟合后使用model.add_seasonality(kwargs)
添加。有关如何添加季节性的更多信息,请参阅 Prophet 文档。添加了使用
model.predict_raw()
预测并返回基础模型的原始输出的功能。请注意,这将返回一个 pd.DataFramepred_df
,Darts API 不再支持对其进行进一步处理。但是可以使用model.model.plot_compenents(pred_df)
访问 Prophet 的方法,例如绘图。
gridsearch()
方法中的新参数n_random_samples
,允许指定要尝试的(随机)超参数组合的数量,主要用于限制 gridsearch 时间。Torch 模型的检查点和保存方面的改进。
现在模型默认不再保存检查点。设置
save_checkpoints=True
以启用。模型可以使用
YourTorchModel.save_model(file_path)
手动保存(file_path 指向 .pth.tar 文件)。模型可以使用
YourTorchModel.load_model(file_path)
或原始方法YourTorchModel.load_from_checkpoint()
手动加载。
darts.utils.likelihood_models
中的新类QuantileRegression
Likelihood。允许应用分位数回归损失,并在所有支持似然函数的深度学习模型上获得概率预测。Temporal Fusion Transformer 中默认使用。
修复
darts.concatenate()
的一些问题。修复了
RegressionModel
应用于多元系列时的一些错误。ACF 图中计算置信区间的一个问题。
为一些不支持
historical_forecasts()
的retrain=False
选项的模型添加了检查。安装说明中的小修复。
示例中项目符号列表的一些渲染问题。
0.12.0 (2021-09-25)¶
库的用户:¶
已添加:
改进了使用神经网络进行概率预测
现在所有基于神经网络的预测模型(除了
NBEATSModel
)都支持概率预测,通过在模型构造函数中提供likelihood
参数。darts.utils.likelihood_models
现在包含更多分布。用于训练基于神经网络模型的可用似然函数的完整列表可在此处获取:https://darts.ac.cn/darts/generated_api/darts.utils.likelihood_models.html许多可用的似然模型现在提供了指定分布参数“先验”的可能性。指定此类先验将对训练损失进行正则化,使输出分布更接近由先验参数值指定的分布。
TimeSeries
创建方面的性能改进。创建TimeSeries
现在要快得多,特别是对于大型系列,填充缺失日期也显著加快。用于概率预测的新 rho-risk 指标。
新方法
darts.utils.statistics.plot_hist()
用于绘制时间序列数据(例如回测错误)的直方图。TimeSeries
工厂方法的新参数fillna_value
,允许指定一个值来填充缺失日期(而不是np.nan
)。使用
darts.utils.timeseries_generation
方法生成的合成TimeSeries
现在可以是整数索引(只需为start
参数传递一个整数而不是时间戳)。移除了部分弃用警告
更新了 conda 安装说明
修复
移除了 TCN 模型中额外的 1x1 卷积。#471。
修复了绘制
TimeSeries
时 linewidth 参数的问题。修复了 datetime 属性时间序列中的列名问题。
库的开发者:¶
我们已移除
develop
分支。我们强制要求 sklearn<1.0,因为我们观察到 pmdarima 和 sklearn==1.0 之间存在问题。
0.11.0 (2021-09-04)¶
库的用户:¶
已添加
新模型:
LightGBMModel
是一个新的回归模型。回归模型允许在给定目标任意滞后项以及过去和/或未来协变量的情况下预测目标的未来值。RegressionModel
已经可以与任何 scikit-learn 回归模型一起使用,现在LightGBMModel
也可以与 LightGBM 一起使用。如果您想在 Darts 中启用 LightGBM 支持,请仔细阅读 README 中的详细安装说明。为 gridsearch 添加了步长支持
修复
在 GPU 上使用验证集进行训练时导致出现问题的一个错误
RNNModel
中自定义提供的 RNN 模块的一些问题。在
RegressionModel
的fit
函数中正确处理kwargs
。修复了导致与最新版本 Matplotlib 出现问题的问题。
导致 FFT notebook 中出现错误的一个问题
0.10.1 (2021-08-19)¶
库的用户:¶
修复
内存固定导致在 GPU 上训练模型出现问题的一个错误。
已更改
在 README 中澄清了 conda 支持
0.10.0 (2021-08-13)¶
库的用户:¶
已添加
🔴 改进了协变量支持。之前,一些模型接受
covariates
(或exog
)参数,但并不总是清楚这代表的是“过去观测”还是“未来已知”的协变量。我们已经使其更加清晰。现在所有感知协变量的模型在其fit()
和predict()
方法中都支持past_covariates
和/或future_covariates
参数,从而明确了哪个系列用作过去或未来协变量。我们推荐这篇文章获取更多信息和示例。🔴
RegressionModel
(包括LinearRegressionModel
和RandomForest
)的显著改进。这些模型现在支持在多个(可能多元)时间序列上进行训练。它们还支持past_covariates
和future_covariates
。这使得在多个系列上拟合任意回归模型(例如来自 scikit-learn)比以往更容易,并可以基于目标的任意滞后项以及过去/未来协变量来预测目标系列的未来。这些模型的签名已更改:不再使用“exog
”关键字参数,而是使用past_covariates
和future_covariates
。动态时间规整 (Dynamic Time Warping)。有一个全新的
darts.dataprocessing.dtw
子模块,实现了两个TimeSeries
之间的动态时间规整。darts.metrics
中也新增了一个dtw
度量。我们建议阅读新的 DTW 示例 notebook,以全面了解新功能Conda forge 安装支持(目前仅完全支持 Python 3.7)。您现在可以运行
conda install u8darts-all
。TimeSeries.from_csv()
允许直接从 CSV 文件获取TimeSeries
。datetime 属性未来协变量的可选循环编码;例如,现在可以调用
my_series.add_datetime_attribute('weekday', cyclic=True)
,这将添加两列包含工作日正弦/余弦编码。ExponentialSmoothing
中的默认季节性推断。如果设置为None
,则seasonal_periods
将从提供的系列的freq
中推断。各种文档改进。
修复
现在转换和预测保留了
TimeSeries
的列名。生成模块darts.utils.timeseries_generation
也提供了更好的默认列名。我们的 Docker 构建过程的一些问题
GPU 使用的一个错误
已更改
对于基于 PyTorch 的概率模型,预测时多个样本(和系列)的生成现在向量化了,提高了推理性能。
0.9.1 (2021-07-17)¶
库的用户:¶
已添加
改进了
GaussianProcessFilter
,现在可以处理缺失值,并且更好地处理通过 datetimes 索引的时间序列。改进了高斯过程 notebook。
修复
TimeSeries
现在支持使用pandas.Int64Index
进行索引,而不仅仅是pandas.RangeIndex
,这解决了一些索引问题。我们已将
TimeSeries
的所有工厂方法的fill_missing_dates
参数默认设置为False
。这是因为在某些情况下,推断缺失日期的频率并对系列进行重采样会导致显著的性能开销。修复了回测,使其适用于整数索引系列。
修复了导致某些模型在 GPU 上推理崩溃的错误。
修复了默认文件夹名称,该名称在 Windows 系统上导致问题。
我们稍微改进了文档渲染,并修复了 `RNNModel` 和 `BlockRNNModel` 的文档页面标题,以便区分它们。
已更改
不再将依赖项固定到特定的精确版本。
对于库的开发者:¶
我们修复了构建过程。
0.9.0 (2021-07-09)¶
对于库的用户:¶
已添加
现在,通过在调用 `predict()` 时指定 `num_samples` 参数,多个预测模型可以生成概率预测。随机预测通过在重构的 `TimeSeries` 类(参见“变更”部分)中使用新的 `samples` 维度来存储。目前支持概率预测的模型有 `ARIMA`、`ExponentialSmoothing`、`RNNModel` 和 `TCNModel`。
引入了 `LikelihoodModel` 类,概率性的 `TorchForecastingModel` 类使用该类以参数化分布的形式进行不同类型的预测。
添加了新的抽象类 `TorchParametricProbabilisticForecastingModel` 作为概率模型的父类。
引入了新的抽象类 `FilteringModel`,以及作为具体实现的 `MovingAverage`、`KalmanFilter` 和 `GaussianProcessFilter`。
当预测范围超出模型的 `output_chunk_length` 时,`TorchForecastingModels` 现在会利用未来的协变量。此前,`TorchForecastingModel` 实例只有在未训练协变量的情况下才能预测超出其 `output_chunk_length` 的范围,即如果它们预测了作为输入所需的所有数据。现在取消了这一限制,模型在进行长期预测时不仅可以消耗自己的输出,还可以利用未来已知的协变量(如果可用)。
添加了一个新的 `RNNModel` 类,该类使用 RNN 模块作为编码器和解码器。这个新类原生支持在进行预测时使用最新的未来协变量。更多详细信息请参见文档。
在 `TorchForecastingModel.predict()` 方法中引入了可选的 `epochs` 参数,如果提供,该参数将覆盖该特定模型实例和训练会话中的 `n_epochs` 属性。
添加了对使用 `pandas.RangeIndex` 的 `TimeSeries` 的支持,而不仅仅是允许 `pandas.DatetimeIndex`。
`ForecastingModel.gridsearch` 现在利用并行计算。
在 `TorchForecastingModel.__init__()` 中引入了一个新的 `force_reset` 参数,如果设置为 False,将阻止用户覆盖同名同目录的模型数据。
修复
解决了在 GPU 上训练 `NBEATSModel` 时出现的 bug。
修复了使用 `log_tensorboard=True` 运行 `NBEATSModel` 时崩溃的问题。
解决了在使用大于可用训练样本数量的 `batch_size` 训练 `TorchForecastingModel` 实例时出现的 bug。
文档中的一些修复,包括添加更多细节。
其他小 bug 修复。
已更改
🔴 `TimeSeries` 类已重构以支持随机时间序列表示,方法是为时间序列添加一个额外的维度,即 `samples`。时间序列现在基于一个形状为 `(n_timesteps, n_components, n_samples)` 的三维 `xarray.DataArray`。这次大修还包括构造函数的变化,与旧版本不兼容。但是,已经添加了工厂方法,可以从各种数据类型(包括 `pd.DataFrame`)创建 `TimeSeries` 实例。更多信息请参阅 `TimeSeries` 的文档。
🔴 旧版本的 `RNNModel` 已重命名为 `BlockRNNModel`。
`ForecastingModel` 的 `historical_forecast()` 和 `backtest()` 方法通过使用新的包装方法来拟合和预测模型而进行了一些重组。
更新了 `README.md` 以反映库的新增功能。
0.8.1 (2021-05-22)¶
修复
文档中的一些修复。
已更改
Dataset 类的实例化方式;数据集现在应该这样使用。
from darts.datasets import AirPassengers
ts: TimeSeries = AirPassengers().load()
0.8.0 (2021-05-21)¶
对于库的用户:¶
已添加
实现了 `RandomForest` 算法。使用 scikit-learn 的 `RandomForestRegressor` 从(滞后的)外生变量和目标变量的滞后值中预测未来值。
`darts.datasets` 是一个新的子模块,可以轻松下载、缓存和导入一些常用的时间序列。
更好地支持处理 `TimeSeries` 序列。
Transformers、Pipelines 和 metrics 已适配用于 `TimeSeries` 序列(而不是孤立的序列)。
改进了神经网络在序列上的推理。
有一个新的工具函数 `darts.utils.model_selection.train_test_split`,可以将 `TimeSeries` 或 `TimeSeries` 序列沿着样本轴或时间轴分割成训练集和测试集。它还可以选择进行“模型感知”分割,以便为训练集回收尽可能多的数据。
我们实现的 N-BEATS 模型,`NBEATSModel`,现在支持多元时间序列和协变量。
已更改
`RegressionModel` 现在是一个用户可见的类。它封装了任何具有 `fit()` 和 `predict()` 方法的回归模型。它允许灵活使用目标变量的滞后值以及多个外生变量的滞后值。`lags` 参数允许的值是正整数或正整数列表,指示在训练和预测期间应使用哪些滞后,例如 `lags=12` 表示使用目标变量的最后 12 个滞后值进行训练。`lags=[1, 4, 8, 12]` 表示使用前一个值、滞后 4、滞后 8 和滞后 12 的值进行训练。
🔴 `StandardRegressionModel` 现在命名为 `LinearRegressionModel`。它实现了 `sklearn.linear_model.LinearRegression` 中的线性回归模型。仍然需要将旧的 `StandardRegressionModel` 与其他 sklearn 模型一起使用的用户现在应该使用 `RegressionModel`。
修复
我们修复了使用多个 scalers 时出现的 bug。
我们修复了 TCN 架构中的一个小问题,使我们的实现更接近原始论文。
对于库的开发者:¶
已添加
我们添加了一些贡献指南。
0.7.0 (2021-04-14)¶
对于库的用户:¶
已添加
`darts` Pypi 包。现在可以通过 `pip install darts` 进行安装。旧名称 `u8darts` 仍然维护,并提供不同的变体以进行更轻量的安装。
新的预测模型可用:VARIMA (向量自回归移动平均)。
在 ARIMA、AutoARIMA 和 VARIMA 中支持外生变量(`fit()` 和 `predict()` 方法中的可选 `exog` 参数)。
`TimeSeries` 创建的新参数 `dummy_index`。如果一个序列仅由不带时间戳的数字序列组成,设置此标志将允许创建使用“虚拟时间索引”的 `TimeSeries`。这简化了在此类情况下创建 `TimeSeries` 的过程,并且可以使用所有预测模型,除了那些明确依赖日期标记的模型。
新方法 `TimeSeries.diff()` 返回差分后的 `TimeSeries`。
在入门 notebook 中添加了一个 `RegressionEnsembleModel` 的示例。
已更改
改进了 N-BEATS 示例 notebook。
`TimeSeries.split_before()` 和 `split_after()` 方法现在除了时间戳外,还接受整数或浮点参数作为分割点(例如,指定 0.8 以获得 80%/20% 的分割)。
从 `DataFrame` 创建 `TimeSeries` 时,如果不需要,不再强制提供 `value_cols` 参数。
将依赖项要求更新到更近的版本。
修复
修复了 32 位架构上 MAX_TORCH_SEED_VALUE 的问题(https://github.com/unit8co/darts/issues/235)。
修正了 TCN 推理中的一个 bug,这应该会提高准确性。
修复了历史预测不返回最后一个点的问题。
修复了为非规则时间频率调用 `TimeSeries.gaps()` 函数时出现的 bug。
许多小 bug 修复。
0.6.0 (2021-02-02)¶
对于库的用户:¶
已添加
`Pipeline.invertible()` 是一个 getter,返回管道是否可逆。
`TimeSeries.to_json()` 和 `TimeSeries.from_json()` 方法用于将 `TimeSeries` 转换为 `JSON` 字符串或从 `JSON` 字符串转换。
所有支持在多个时间序列以及协变量上训练的模型的新基类 `GlobalForecastingModel`。所有 PyTorch 模型现在都是 `GlobalForecastingModel`。
作为上述结果,PyTorch 模型(所有神经网络)的 `fit()` 函数可以选择使用时间序列序列调用(而不是单个时间序列)。
类似地,这些模型的 `predict()` 函数也接受指定应该预测哪个序列。
新的基类 `TrainingDataset`。
`TrainingDataset` 的一些实现,包含用于在多个时间序列上训练神经网络的切片逻辑。
新的基类 `TimeSeriesInferenceDataset`。
`TimeSeriesInferenceDataset` 的一个实现 `SimpleInferenceDataset`。
所有 PyTorch 模型都有一个新的 `fit_from_dataset()` 方法,允许直接从指定的 `TrainingDataset` 实例拟合模型(而不是通过 `fit()` 方法时使用默认实例)。
新的全局模型解释性 notebook:https://github.com/unit8co/darts/blob/master/examples/02-multi-time-series-and-covariates.ipynb
已更改
🔴 移除了 `ForecastingModel` 中的 `training_series` 和 `target_series` 参数。请查阅预测模型的 API 文档以查看新的函数签名。
🔴 移除了 `UnivariateForecastingModel` 和 `MultivariateForecastingModel` 基类。这种区分不再存在。相反,现在有些模型是“全局的”(可以在多个序列上训练),有些是“局部的”(不能)。`GlobalForecastingModel` 的所有实现都原生支持多元时间序列,除了 N-BEATS。
改进了文档和 README。
重新排序了示例 notebook,以改善示例的流程。
修复
许多小 bug 修复。
单元测试速度提高了约 15 倍。
0.5.0 (2020-11-09)¶
对于库的用户:¶
已添加
集成模型,一种新的 `ForecastingModel`,允许将多个模型集成在一起进行预测。
`EnsembleModel` 是集成模型的抽象基类。派生自 `EnsembleModel` 的类必须实现 `ensemble()` 方法,该方法接受构成模型的预测列表 `List[TimeSeries]`,并返回集成预测(一个 `TimeSeries` 对象)。
`RegressionEnsembleModel`,是 `EnsembleModel` 的一个具体实现,允许指定任何回归模型(提供 `fit()` 和 `predict()` 方法)来集成构成模型的预测。
`TorchForecastingModel` 的一个新方法:`untrained_model()` 返回模型最初创建时的状态,允许从头开始重新训练完全相同的模型。无论是否指定 `random_state` 都有效。
新的 `ForecastingModel.backtest()` 和 `RegressionModel.backtest()` 函数,默认从模型生成的历史预测中计算单个误差分数。
新的 `reduction` 参数允许指定是计算误差的平均值/中位数/...还是(当 `reduction` 设置为 `None` 时)返回历史误差列表。
先前的 `backtest()` 功能仍然存在,但已重命名为 `historical_forecasts()`。
在 `historical_forecasts()`、`backtest()` 和 `gridsearch()` 中添加了一个新的 `last_points_only` 参数。
已更改
🔴 将 `backtest()` 重命名为 `historical_forecasts()`。
`fill_missing_values()` 和 `MissingValuesFiller` 在与 `fill='auto'` 一起使用时曾移除变量名——现在不再这样。
修改了默认绘图样式以增加对比度并使图表更轻快。
修复
`NaiveDrift` 模型实现中的一个小错误导致第一个预测值重复了最后一个训练值。
对于库的开发者:¶
已更改
`@random_method` 装饰器现在总是为被装饰的方法分配一个 `_random_instance` 字段(用随机种子初始化)。这不会改变观察到的行为,但可以通过在创建模型时保存 `_random_instance` 以及模型的其他参数来确定性地“重置” `TorchForecastingModel`。
0.4.0 (2020-10-28)¶
对于库的用户:¶
已添加
使用 `DataTransformer`、`Pipeline` 的数据(预)处理能力。
`DataTransformer` 提供统一接口,使用其 `transform()` 方法对 `TimeSeries` 应用转换。
Pipeline
:允许链式使用 `DataTransformers`。
提供 `fit()`、`transform()`、`fit_transform()` 和 `inverse_transform()` 方法。
实现您自己的数据转换器。
需要先拟合的数据转换器应派生自 `FittableDataTransformer` 基类并实现 `fit()` 方法。可拟合的转换器还提供 `fit_transform()` 方法,该方法一次调用即可拟合转换器并转换数据。
执行可逆转换的数据转换器应派生自 `InvertibleDataTransformer` 基类并实现 `inverse_transform()` 方法。
既不可拟合也不可逆的数据转换器应派生自 `BaseDataTransformer` 基类。
所有数据转换器都必须实现 `transform()` 方法。
具体 `DataTransformer` 实现。
`MissingValuesFiller` 封装了 `fill_missing_value()`,允许使用常数值或 `pd.interpolate()` 方法填充缺失值。
`Mapper` 和 `InvertibleMapper` 允许轻松地在 TimeSeries 上执行类似于 `map()` 函数的操作,并且可以成为 `Pipeline` 的一部分。
`BoxCox` 允许对数据应用 BoxCox 转换。
扩展了 `TimeSeries` 上的 `map()` 方法,以接受使用值及其时间戳来计算新值的函数,例如
f(timestamp, datapoint) = new_datapoint
。两个新的预测模型。
`TransformerModel`,一个基于 Vaswani 等人 (2017) 在Attention Is All You Need 中描述的架构实现的模型。
`NBEATSModel`,一个基于 Boris N. Oreshkin 等人 (2019) 在N-BEATS: Neural basis expansion analysis for interpretable time series forecasting 中描述的 N-BEATS 架构实现的模型。
已更改
🔴 移除了 `map()` 方法的 `cols` 参数。建议使用 `TimeSeries` 的索引。
# Assuming a multivariate TimeSeries named series with 3 columns or variables. # To apply fn to columns with names '0' and '2': #old syntax series.map(fn, cols=['0', '2']) # returned a time series with 3 columns #new syntax series[['0', '2']].map(fn) # returns a time series with only 2 columns
🔴 将 `ScalerWrapper` 重命名为 `Scaler`。
🔴 将 `preprocessing` 模块重命名为 `dataprocessing`。
🔴 将 `auto_fillna()` 和 `fillna()` 统一为一个函数 `fill_missing_value()`。
#old syntax fillna(series, fill=0) #new syntax fill_missing_values(series, fill=0) #old syntax auto_fillna(series, **interpolate_kwargs) #new syntax fill_missing_values(series, fill='auto', **interpolate_kwargs) fill_missing_values(series, **interpolate_kwargs) # fill='auto' by default
对于库的开发者¶
已更改
现在可以通过 GitHub 仓库的“Actions”标签手动触发 GitHub 发布工作流,并提供
#major
、#minor
或#patch
参数。#211(有限数量的)notebook 示例现在作为 GitHub PR 工作流的一部分运行。
0.3.0 (2020-10-05)¶
对于库的用户:¶
已添加
更好地支持 TimeSeries 索引(支持列/组件索引)#150
进一步改进了回测功能#111
添加了对多元 TimeSeries 和模型的支持。
添加了 `retrain` 和 `stride` 参数。
matplotlib 图表的自定义样式#191
sMAPE 指标#129
对于使用神经网络的模型,在创建模型时使用 `@random_method` 装饰器指定 `random_state` 的选项,以实现结果的可复现性#118
已更改
🔴 重构了回测功能#184
将回测功能移至 `ForecastingModel` 和 `RegressionModel` 内部。
# old syntax: backtest_forecasting(forecasting_model, *args, **kwargs) # new syntax: forecasting_model.backtest(*args, **kwargs) # old syntax: backtest_regression(regression_model, *args, **kwargs) # new syntax: regression_model.backtest(*args, **kwargs)
因此移除了 `backtesting` 模块。
🔴 `ForecastingModel` `fit()` 方法语法 使用 TimeSeries 索引代替额外参数#161
# old syntax: multivariate_model.fit(multivariate_series, target_indices=[0, 1]) # new syntax: multivariate_model.fit(multivariate_series, multivariate_series[["0", "1"]]) # old syntax: univariate_model.fit(multivariate_series, component_index=2) # new syntax: univariate_model.fit(multivariate_series["2"])
修复
对于库的开发者¶
已添加
已更改
修复
在所有生成 TimeSeries 的函数中将 `freq` 参数传递给 `TimeSeries` 构造函数#157