更新日志

我们会尽力避免引入破坏性变更,但并非总能保证向后兼容性。可能破坏使用先前版本 Darts 的代码的变更会标记为“🔴”。弃用功能的变更会标记为“🟠”。

未发布

完整更新日志

致库用户:

改进

修复

依赖项

致库开发者:

0.35.0 (2025-04-18)

致库用户:

改进

  • 🚀🚀 新增预测模型

    • AutoMFLES:一种简单的时间序列方法,基于 Tyler Blume 在此仓库中提出的梯度提升时间序列分解。我们的实现基于 Nixtla 的statsforecast库中的 AutoMFLES#2747Che Hang Ng 贡献。

    • StatsForecastModel:允许在 Darts 中使用 StatsForecast 的任何预测模型(参见此处),并支持未来协变量、概率预测(采样、直接分位数和/或保形预测)以及可迁移序列预测。#2770Dennis Bader 贡献。

  • 预测模型的改进

    • 🚀 为 CatBoostModel 添加了对分类协变量的支持。现在可以在创建模型时通过参数 categorical_*_covariates: List[str] 来定义过去、未来和静态协变量的分类分量。#2733Jonas Blanc 贡献。

    • 🚀🔴 扩展并重命名了几个现有模型的功能。以下所有模型现在都支持未来协变量概率预测(采样、直接分位数和/或保形预测)以及可迁移序列预测#2762#2770Dennis Bader 贡献。

      • AutoARIMA(旧名称 StatsForecastAutoARIMA

      • AutoETS(旧名称 StatsForecastAutoETS

      • AutoCES(旧名称 StatsForecastAutoCES

      • AutoTBATS(旧名称 StatsForecastAutoTBATS

      • AutoTheta(旧名称 StatsForecastAutoTheta

      • TBATS

      • Croston

  • TimeSeries 的变更:#2733Dennis Bader 贡献。

    • 🟠 移除弃用方法 TimeSeries.pd_dataframe()。请改用 TimeSeries.to_dataframe()

    • 🟠 移除弃用方法 TimeSeries.pd_serise()。请改用 TimeSeries.to_series()

修复

  • 修复了 CatBoostModel 在使用 likelihood="gaussian" 时的一个错误,即使用 predict_likelihood_parameters=True 进行预测会导致预测参数的顺序错误。#2742Dennis Bader 贡献。

依赖项

  • 🚀🚀 添加了对 NumPy 2.0 及更高版本的支持。为此,我们必须对依赖项进行以下调整。#2771Dennis Bader 贡献。

    • 🔴 将 AutoARIMA 模型后端从 pmdarima 更改为 statsforecast。模型创建参数几乎相同。请参考pmdarima 文档statsforecast 文档。此外,新实现效率更高,并改进了概率预测支持,包括保形预测。#2734Dennis Bader 贡献。

    • 🔴 将 TBATS 模型后端从 tbats 更改为 statsforecast。模型创建参数几乎相同。请参考tbats 文档statsforecast 文档。此外,新实现效率更高,支持未来协变量并改进了概率预测支持。#2781Dennis Bader 贡献。

    • 🔴 移除 BATS 模型。请改用 TBATS#2781Dennis Bader 贡献。

致库开发者:

  • 重构了似然函数:#2742Dennis 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 设为抽象类,重写了分类分量名称匹配逻辑,并重构了分类协变量逻辑,以便更容易地为模型添加分类协变量支持。#2733Jonas Blanc 贡献。

0.34.0 (2025-03-09)

致库用户:

改进

  • TimeSeries 的改进

    • from_dataframe()from_series() 现在支持从更多 DataFrame 后端(Polars, PyArrow 等)创建 TimeSeries。我们利用 narwhals 作为 DataFrame 库之间的兼容层。请查看他们的文档以了解所有支持的后端。#2661Jules Authier 贡献。

    • 添加了新的导出方法to_dataframe()to_series()。这些方法支持将 TimeSeries 导出到 narwhals 支持的所有后端的 DataFrames 和 Series。请查看他们的文档以了解所有支持的后端。#2701Jules Authier 贡献。

    • TimeSeries 添加了嵌入元数据的支持。现在可以将任何类型的元数据作为字典附加到您的时间序列,可以在序列创建时使用参数 metadata(或使用 from_group_dataframe() 时的 metadata_cols),或者通过 with_metadata() 方法添加到现有序列。与静态协变量不同,元数据在预测过程中不会被 Darts 的模型使用。然而,元数据会通过所有下游任务传播,从而在整个数据管道中保持信息的完整性和连续性。#2656Yoav MatzkevichJules AuthierDennis Bader 贡献。

    • 方法 plot() 现在支持为序列中的每个分量设置颜色。只需传入一个长度与分量数量匹配的颜色列表/序列作为参数“c”或“colors”即可。#2680Jules Authier 贡献。

    • 改进了文档:为 TimeSeries 工厂方法添加了示例,并更新了快速入门 notebook,其中包含创建和导出 TimeSeries 的扩展后端支持。#2725Dennis Bader 贡献。

    • 🟠 方法 pd_dataframe()pd_series() 已弃用,并将在 Darts 0.35.0 版本中移除。请改用 to_dataframe()to_series()#2701Jules Authier 贡献。

  • TorchForecastingModel 的改进

    • 为基于 torch 的模型添加了 ONNX 支持,使用方法 to_onnx()。请查看用户指南中关于如何导出和加载模型进行推理的此示例#2620Antoine Madrona 贡献。

  • RegressionModel 的改进

    • 为方法 get_estimator() 添加了 quantile 参数,用于获取使用 quantile 似然的概率回归模型的特定分位数估计器。#2716Antoine Madrona 贡献。

    • 改进了 CatBoostModel 文档,描述了如何使用原生多输出回归。#2659Jonas Blanc 贡献。

    • 🔴 移除方法 get_multioutput_estimator()。请改用 get_estimator()#2716Antoine Madrona 贡献。

  • 其他改进

    • 将方法 ForecastingModel.untrained_model() 设为公共方法。使用此方法可获取以相同参数创建的新的(未训练的)模型实例。#2684Timon Erhart 贡献。

    • 可以在本地开发模式下运行快速入门 notebook 00-quickstart.ipynb 而无需安装。#2691Jules Authier 贡献。

修复

  • 🔴 / 🟢 修复了加载使用 Darts < 0.33.0 版本保存的 TorchForecastingModel 时引发错误的 bug。这是一个破坏性变更,使用 0.33.0 版本保存的模型将无法再次加载。#2692Dennis Bader 贡献。

  • 修复了 NLinearModel 在使用 normalize=True 时的一个 bug,该 bug 导致归一化未正确应用。现在的预测能力得到了极大提升。#2724Dennis Bader 贡献。

  • 修复了 StaticCovariatesTransformer 中的一个 bug,该 bug 在尝试逆转换时间序列之间具有相同值的一热编码分类静态协变量时会引发错误。现在,每个分类静态协变量都由 {covariate_name}_{category_name} 引用,无论类别数量如何。#2710Antoine Madrona 贡献。

  • 修复了 RegressionModel 中的一个 bug,该 bug 在使用 max(lags) < -1 执行优化历史预测时,导致预测延伸到未来过远。#2715Jules Authier 贡献。

依赖项

  • 将最低 scikit-learn 版本从 1.0.1 提升到 1.6.0。这是因为 sklearn 在 1.7 版本中弃用了 _get_tags 并推荐使用 BaseEstimator.__sklearn_tags__。这导致 sklearn 和 XGBoost 的最低支持版本分别增加到 1.6 和 2.1.4。#2659Jonas Blanc 贡献。

  • 出于与提升最低 sklearn 版本相同的原因,将最低 xgboost 版本从 1.6.0 提升到 2.1.4#2659Jonas Blanc 贡献。

  • 对代码进行了各种修改,以反映更新后的依赖项版本 (sklearn, statsmodel) 并消除各种警告。#2722Antoine Madrona 贡献。

致库开发者:

改进

  • 重构并改进了 RegressionModel 的多输出支持处理。#2659Jonas Blanc 贡献。

0.33.0 (2025-02-14)

致库用户:

改进

  • TimeSeries 的改进

    • TimeSeries.resample() 添加了更多重采样方法。这允许在向下采样时聚合值,并在向上采样时填充或保留空洞。#2654Jonas Blanc 贡献。

    • TimeSeries.plot() 添加了 title 属性。这允许为绘图设置标题。#2639Jonathan Koch 贡献。

    • 添加了通用函数 darts.slice_intersect(),用于沿时间索引交叉切片一系列 TimeSeries#2592Yoav Matzkevich 贡献。

  • 模型保存与加载的改进

    • ForecastingModel.save() 添加了参数 clean: bool,用于存储模型的清理版本(从全局模型中移除训练数据,从 torch 模型中移除与 Lightning Trainer 相关的参数)。#2649Jonas Blanc 贡献。

    • TorchForecastingModel.load() 添加了参数 pl_trainer_kwargs,用于设置新的 Lightning Trainer,以配置模型用于下游任务(例如预测)。#2649Jonas Blanc 贡献。

  • 异常检测的改进

    • show_anomalies() 添加了参数 component_wise,用于在多元序列中单独绘制每个分量。#2544何威林 贡献。

    • 改进了 WindowedAnomalyScorer 如何从输入序列中提取训练数据的文档。#2674Dennis Bader 贡献。

  • 其他改进

    • 新增预测模型:StatsForecastAutoTBATS,包装了 Nixtla 的 statsforecasts 库中的 AutoTBATS#2611何威林 贡献。

    • 添加了新的时间聚合指标 wmape()(加权平均绝对百分比误差)。#2544何威林 贡献。

修复

  • 修复了使用 torch>=2.6.0 加载 torch 模型时引发错误的 bug。#2658Dennis Bader 贡献。

  • 修复了使用 RegressionModeloutput_chunk_shift>=1output_chunk_length=1 并使用 stride=1 执行优化历史预测时,预测时间索引未正确偏移的 bug。#2634Mattias De Charleroy 贡献。

  • 修复了全局朴素模型无法在集成模型中使用的 bug。#2666Dennis Bader 贡献。

  • 修复了全局朴素模型中的一个 bug,该 bug 导致某些 supports_* 属性被错误地定义为方法。#2666Dennis Bader 贡献。

  • 修复了 LightGBMModelXGBModelCatBoostModel 中的一个 bug,该 bug 在使用 val_sample_weight 调用 fit() 时会引发错误。#2626Kylin Schmidt 贡献。

  • 修复了 ShapExplainersummary_plot 标题中 Horizon 不包含 output_chunk_shift 的问题。#2647何威林 贡献。

依赖项

  • 移除了 sklearn<1.6.0 的版本上限,因为 xgboost 在 2.1.4 版本中添加了支持。#2665Dennis Bader 贡献。

致库开发者:

  • jinja2 从 3.1.4 提升到 3.1.5(发布要求)。#2672 由 dapendabot 贡献。

0.32.0 (2024-12-21)

致库用户:

改进

  • 🚀🚀 引入保形预测:现在可以使用我们的前两个保形预测模型为任何预训练的全局预测模型添加经过校准的预测区间:#2552Dennis Bader 贡献。

    • ConformalNaiveModel:使用过去的点预测误差生成具有指定覆盖概率的校准预测区间。

    • ConformalQRModel:将分位数回归(或任何概率模型)与保形预测技术相结合。它调整分位数估计以生成具有指定覆盖概率的校准预测区间。

    • 这两种模型提供以下支持

      • 与预测模型相同的 API

      • 使用任何预训练的全局预测模型作为基础预测器

      • 单变量和多变量预测

      • 单序列和多序列预测

      • 单步和多步预测

      • 生成单个或多个校准预测区间

      • 直接分位数预测(区间边界)或从这些分位数进行采样预测

      • 基于底层预测模型的协变量

    • 请查看我们的保形预测 notebook,了解详细信息和使用示例!

  • 使用 ForecastingModel 进行回测的改进(historical_forecasts()backtest()residuals()gridsearch()

    • 🚀🚀 添加了对数据转换器和管道的支持。使用参数 data_transformers 可以自动将任何 DataTransformer 和/或 Pipeline 应用于输入序列,而不会发生数据泄露(可在输入序列的历史窗口上进行可选拟合,转换输入序列,并逆转换预测结果)。#2529Antoine MadronaJan Fidor 贡献。

    • 改进了 start 参数的处理。如果 start 不在可训练/可预测点范围内,则使用距离 start 最近且为 stride 的整数倍的有效起始点。如果不存在有效起始点,则引发 ValueError。这保证了所有历史预测都与 start 相距 n * stride 个点,这将简化许多下游任务。#2560Dennis Bader 贡献。

    • residuals() 添加了对 overlap_end=True 的支持。这可以计算历史预测和残差,这些预测和残差可以延伸到目标序列的末尾之外。这保证了每个预测返回的所有残差值具有相同的长度(如果预测延伸到目标序列的末尾之外,则最后的残差将包含缺失值)。#2552Dennis Bader 贡献。

  • metrics 的改进:添加了三个新的分位数区间指标(及其聚合版本):#2552Dennis Bader 贡献。

    • 区间 Winkler 分数 iws(),以及平均区间 Winkler 分数 miws()(时间聚合)(来源)

    • 区间覆盖率 ic()(如果观测值在分位数区间内则为二进制),以及平均区间覆盖率 mic()(时间聚合)

    • 分位数回归的区间非一致性分数 incs_qr(),以及平均 … mincs_qr()(时间聚合)(来源)

  • DataTransformer 添加了 series_idx 参数,允许用户在 global_fit=False 并使用多个序列时,仅使用转换器的一个子集。#2529Antoine Madrona 贡献。

  • 更新了 Statsforecast 模型的文档 URL。#2610何威林 贡献。

修复

  • 修复了在使用 lags_past_covariates 为 dict、lags_future_covariates 为其他类型(非 dict)且 output_chunk_shift>0 初始化 RegressionModel 时的 bug,#2652Jules Authier 贡献。

  • 修复了在多个序列上计算残差(或使用“每时间步”指标进行回测)时,当对应的历史预测长度不同时引发错误的 bug。#2604Dennis Bader 贡献。

  • 修复了使用 darts.utils.data.tabularization.create_lagged_component_names() 且目标 lags=None 时,未返回任何滞后目标标签分量名称的 bug。#2576Dennis Bader 贡献。

  • 修复了将 num_samples > 1 与确定性回归模型和优化的 historical_forecasts() 方法一起使用时未引发异常的 bug。#2576Antoine Madrona 贡献。

  • 修复了使用 RegressionModellast_points_only=False 执行优化历史预测时,预测索引生成可能导致日期越界的 bug。#2623Dennis Bader 贡献。

  • 修复了 docker 镜像部署失败的问题。#2583Dennis Bader 贡献。

依赖项

  • 🔴 移除对 Python 3.8 的支持。新的最低 Python 版本为 3.9。#2586Dennis Bader 贡献。

  • 我们将 sklearn<=1.5.0 设置了版本上限,直到 xgboost 正式支持 1.6.0 版本。#2618Dennis Bader 贡献。

致库开发者:

改进

  • CI/CD 的改进:#2584Dennis Bader 贡献。

    • 将所有工作流程更新到最新的 GitHub actions 版本

    • 改进了跨 master 分支及其子分支的缓存

    • 修复了 docker 部署失败的问题

    • 移除 gradle 依赖,转而使用原生 GitHub actions 插件。

  • 将 ruff 更新到 v0.7.2,目标版本更新到 python39,并修复了各种拼写错误。#2589Greg DeVosNouriAntoine Madrona 贡献。

  • 将弃用的 torch.nn.utils.weight_norm 函数替换为 torch.nn.utils.parametrizations.weight_norm#2593Saeed Foroutan 贡献。

0.31.0 (2024-10-13)

致库用户:

改进

  • metrics 的改进

    • 添加了对计算一个或多个分位数 q 指标的支持,无论是来自概率预测还是分位数预测。#2530Dennis Bader 贡献。

    • 添加了分位数区间指标 miw(平均区间宽度,时间聚合)和 iw(区间宽度,每时间步/非聚合),用于计算分位数区间 q_intervals 的宽度(期望是一个元组或元组序列,包含(较低分位数,较高分位数))。#2530Dennis Bader 贡献。

  • backtest()residuals() 的改进

    • metric_kwargs 中添加了对计算一个或多个分位数 q 的回测和残差的支持,无论是来自概率预测还是分位数预测。#2530Dennis Bader 贡献。

    • 添加了对参数 enable_optimizationpredict_likelihood_parameters 的支持。#2530Dennis Bader 贡献。

  • TimeSeries 的改进

    • 添加了对在分量和样本级别广播 TimeSeries 以进行算术运算的支持。#2476Joel L. 贡献。

    • 添加了属性 TimeSeries.shape 以获取时间序列的形状。#2530Dennis Bader 贡献。

  • 其他改进

    • 添加了新的异常检测器 IQRDetector,它允许使用四分位数范围算法检测异常。#2441Igor Urbanik 贡献。

    • 添加了超参数 temporal_hidden_size_past/future,控制 TiDEModel 中特征编码器的隐藏层大小。#2408eschibli 贡献。

    • BlockRNNModel 添加了超参数 activation,用于在多层输出网络的情况下指定激活函数。#2504Szymon Cogiel 贡献。

    • 助手函数 darts.utils.utils.generate_index() 现在接受日期时间字符串作为 startend 参数,用于生成 pandas DatetimeIndex。#2522Dennis Bader 贡献。

  • 文档改进

    • 使 README 中的预测模型支持表对色盲更友好。#2433Jatin Shridhar 贡献。

    • 更新了用户指南中的 Ray Tune 超参数优化示例,使其兼容最新的 ray 版本(>=2.31.0)。#2459何威林 贡献。

    • 说明 RegressionModelLinearRegressionModel 中,multi_models=False 会导致 output_chunk_length 中的每一步产生滞后偏移。#2511Antoine Madrona 贡献。

    • TimeSeries.add_datetime_attribute 中添加了对 timeseries_generation.datetime_attribute_timeseries 的引用(强制执行编码的 0 索引)。#2511Antoine Madrona 贡献。

修复

  • RegressionModel 的修复

    • 修复了使用回归模型进行概率优化历史预测(num_samples>1, retrain=False, enable_optimization=True)时,重塑数组导致样本在分量和预测之间顺序错误的 bug。#2534Dennis Bader 贡献。

    • 修复了使用 predict_likelihood_parameters=Truen > 1 和使用 likelihoodmulti_models=FalseRegressionModel 进行预测时的一个 bug。现在预测工作正常,不会引发异常。#2545Dennis Bader 贡献。

    • 修复了在使用预训练的 RegressionModel 且没有目标滞后 lags=None 但使用静态协变量时,使用 historical_forecasts() 时的 bug。#2426Dennis Bader 贡献。

    • 修复了将 fit() 与使用不支持 sample_weight 的底层 modelRegressionModel 一起使用时的 bug。#2445何威林 贡献。

    • 修复了在使用包含任何 TorchForecastingModelRegressionEnsembleModel 时使用 save()load() 的 bug。#2437GeorgeXiaojie 贡献。

    • 修复了 xgboost>=2.1.0 版本的一个 bug,该 bug 导致多输出回归未正确处理。#2426Dennis Bader 贡献。

  • TimeSeries 的修复

    • 修复了使用 TimeSeries.plot() 绘制概率多元序列时的一个 bug,该 bug 导致所有置信区间(从第二个分量开始)的颜色与中位线相同。#2532Dennis Bader 贡献。

    • 修复了使用整数类型的 time_colTimeSeries.from_group_dataframe() 一起使用时的一个 bug,该 bug 导致结果时间索引被错误地转换为 DatetimeIndex。#2512Alessio Pellegrini 贡献。

    • 修复了将空数组传递给 TimeSeries.prepend/append_values() 时引发错误的 bug。#2522Alessio Pellegrini 贡献。

    • 修复了 TimeSeries.prepend/append_values() 的一个 bug,该 bug 导致(时间)索引的名称丢失。#2522Alessio Pellegrini 贡献。

  • 其他修复

    • 修复了使用 ShapExplainer.explain() 且选择了某些 target_components 以及原生支持多输出回归的回归模型时的一个 bug:目标分量未正确映射。#2428Dennis Bader 贡献。

    • 修复了 CrostonModel 的一个 bug,该模型实际上不支持未来协变量。#2511Antoine Madrona 贡献。

    • 修复了类 AnomalyModelscorers_are_univariate 注释的问题。#2452何威林 贡献。

依赖项

  • 提升了 jupyterlab 和依赖项的发布要求版本:#2515Dennis 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#2418Anton RagotDennis Bader 贡献。

    • fit()historical_forecasts()backtest()residualsgridsearch() 添加了参数 sample_weightval_sample_weight,用于将权重应用于训练和评估集中的每个观测值、标签(输出块中的每一步)和目标分量。确定性模型和概率模型都支持此功能。样本权重可以是 TimeSeries 本身,也可以是内置权重生成器“线性”和“指数”衰减。如果是 TimeSeries,其处理方式与协变量相同(例如,传入多个权重序列和多个目标序列,相关的时段提取会自动为您处理,…)。您可以在此处找到示例。

  • 🚀🚀 通过重大重构改进了异常检测模块。此次重构包括对大多数流程的重大性能优化,并改进了 API、一致性、可靠性和文档。其中一些必要的更改会带来破坏性变更:#1477Dennis BaderSamuele Giuliano PiazzettaAntoine MadronaJulien HerzenJulien 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 参数,以便更好地控制 PyTorch DataLoader 的设置。

    • 🔴 移除 fit*()predict*()find_lr() 的参数 num_loader_workers。现在可以通过 dataloader_kwargs 字典设置该参数。

  • DataTransformers 的改进

    • 在使用大量序列时,显著提高了 fitfit_transformtransforminverse_transform 的速度。分量掩码逻辑已移至并行化转换方法中。#2401Dennis Bader 贡献。

  • TimeSeries 的改进:#1477Dennis Bader 贡献。

    • 新增方法 with_times_and_values(),它返回一个新的序列,该序列具有新的时间索引和新值,但列和元数据与调用它的原始序列(静态协变量、层次结构)相同。

    • 新增方法 slice_intersect_times(),它返回与另一个序列的时间索引交叉后的序列的切片时间索引。

    • 方法 with_values() 现在也可以处理类数组的 values,而不仅仅是 numpy 数组。

  • 快速入门 notebook 的改进:#2418Dennis Bader 贡献。

    • 添加了使用样本权重、预测起始偏移、直接似然参数预测的示例。

    • 增强了历史预测、回测和残差的示例。

修复

  • 修复了一个 bug,在使用支持验证序列的 RegressionModel 并提供验证集时:编码器、静态协变量和组件特有滞后现在已正确应用于验证集。 #2383Dennis Bader 提交。

  • 修复了一个 bug,其中 darts.utils.utils.n_steps_between() 在使用自定义业务频率时无法正常工作。这影响了指标计算。 #2357Dennis Bader 提交。

  • 修复了一个 bug,当使用 MixedCovariatesTorchModel(例如 TiDE、N/DLinear 等),n<output_chunk_length 和长度为 len(series) < n 的序列列表调用 predict() 时,预测结果未返回正确数量的序列。 #2374Dennis Bader 提交。

  • 修复了一个 bug,当使用具有有状态 torch 指标的 TorchForecastingModel 时,指标被错误地计算为无状态。 #2391Tim Rosenflanz 提交。

依赖项

  • 我们为 numpy 设置了 <2.0.0 的版本上限,直到所有依赖项都已迁移。 #2413Dennis Bader 提交。

针对库的开发者:

依赖项

  • 通过更新 pre-commit 配置改进了 linting: #2324Jirka Borovec 提交。

  • 通过将 isort 切换到 Ruff 的规则 I,改进了统一 linting。 #2339Jirka Borovec 提交。

  • 通过将 pyupgrade 切换到 Ruff 的规则 UP,改进了统一 linting。 #2340Jirka Borovec 提交。

  • CI 改进,通过 pre-commit 在本地运行 linting,而不是使用特定工具。 #2327Jirka Borovec 提交。

0.29.0 (2024-04-17)

针对库的用户:

改进

  • 🚀🚀 新预测模型:TSMixerModel,如 这篇论文 中所提出。这是一个基于 MLP 的模型,使用堆叠的混合层结合了时间、静态和横截面特征信息。 #2293,由 Dennis BaderCristof Rojas 提交。

  • 🚀🚀 通过主要重构改进了指标、历史预测、回测和残差。重构包括对多个过程的优化,并提高了代码一致性、可靠性和文档。这些必要的更改中有些是破坏性变更。 #2284Dennis 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_supportmultivariate_support 的自定义度量现在必须作用于多元序列(可能包含缺失值),而不是单变量序列。

    • 历史预测:

      • 🔴 提高了历史预测输出的一致性,具体取决于输入 series 的类型:如果 series 是一个序列,历史预测现在将始终返回一个相同长度的序列/列表(而不是尝试将其转换为 TimeSeries 对象)。您可以在 历史预测 API 文档 中找到详细说明。

    • 回测:

      • 度量现在只对所有 serieshistorical_forecasts 计算一次,这在使用大量 series 时显著加快了速度。

      • 添加了对缩放度量作为 metric 的支持(例如 asemase 等)。无需额外代码,回测会自动为您提取正确的 insample 序列。

      • 添加了对通过参数 metric_kwargs 传递额外的度量(或特定于度量)参数的支持。例如,这允许使用 n_jobs 并行计算度量,使用 *_reduction 自定义度量归约,为缩放度量指定季节性 m 等。

      • 🔴 破坏性变更

        • 提高了回测输出的一致性,具体取决于输入 serieshistorical_forecast 的类型以及应用的回测归约。在某些场景下,输出类型与之前的 Darts 版本相比发生了变化。您可以在 回测 API 文档 中找到详细说明。

        • reduction 可调用对象现在作用于 axis=1 而不是 axis=0 来按序列聚合度量。

        • 当用户提供的 historical_forecasts 的格式与输入 serieslast_points_only 值不符时,回测现在将引发错误。

    • 残差: 虽然 residuals() 的默认行为保持不变,但该方法现在与 backtest() 非常相似,只是它在 historical_forecasts 上计算任何“每个时间步长”的 metric

      • 添加了对多元 series 的支持。

      • 添加了对所有 historical_forecasts() 参数的支持,以便为残差计算生成历史预测。

      • 添加了对通过参数 historical_forecasts 使用预计算的历史预测的支持。

      • 添加了对使用 Darts 的任何“每个时间步长”度量通过参数 metric 计算残差的支持(例如 err()ae()ape() 等)。默认使用 err()(误差)。

      • 添加了对通过参数 metric_kwargs 传递额外的度量参数的支持。例如,这允许使用 n_jobs 并行计算度量,为缩放度量指定季节性 m 等。

      • 🔴 提高了残差输出的一致性,具体取决于输入 serieshistorical_forecast 的类型。在某些场景下,输出类型与之前的 Darts 版本相比发生了变化。您可以在 残差 API 文档 中找到详细说明。

  • TimeSeries 的改进

    • from_group_dataframe() 现在支持在 pandas.DataFrame 组上并行创建。可以通过参数 n_jobs 启用此功能。 #2292Bohdan Bilonoha 贡献。

    • 新方法 slice_intersect_values(),返回序列的切片值,其中时间索引与另一个序列相交。 #2284Dennis Bader 贡献。

    • 提高了以下方法的性能:slice_intersect()has_same_time_as()#2284Dennis Bader 贡献。

  • 预测模型的改进

    • RNNModel 的改进, #2329Dennis Bader 贡献。

      • 🔴 强制要求 training_length>input_chunk_length,否则在训练期间模型迭代次数将少于预测期间。

      • 历史预测现在能够正确推断未训练和预训练 RNNModel 的所有可能的预测起始点。

    • 在对 RegressionModel 执行优化历史预测(retrain=False 且无自回归)时添加了进度条,以显示序列级别的进度。 #2320Dennis Bader 贡献。

    • 将私有属性 ForecastingModel._is_probabilistic 重命名为公共属性 supports_probabilistic_prediction#2269Felix Divo 贡献。

  • 其他改进

    • 所有 InvertibleDataTransformer 现在都支持对由 TimeSeries 列表组成的 series 进行并行逆变换(Sequence[Sequence[TimeSeries]])。此类型表示在使用多个序列且 last_points_only=Falsehistorical_forecasts() 的输出。 #2267Alicja Krzeminska-Sciga 贡献。

    • 添加了 release notes 到 Darts 文档中。 #2333Dennis Bader 贡献。

    • 🔴 调整了 utils 函数的位置,以清晰区分 Darts 特有的逻辑和非 Darts 特有的逻辑。 #2284Dennis 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

修复

  • 修复了使用组件特定滞后时特征的顺序错误,现在按值分组,然后按组件分组(之前是按组件分组,然后按值)。 #2272Antoine Madrona 贡献。

  • 修复了在使用带有 TorchForecastingModel 且 pytorch lightning 版本 >= 2.2.0 的 dropout 时,训练期间 dropout 未正确激活的 bug。 #2312Dennis Bader 贡献。

  • 修复了使用未训练的 TorchForecastingModel 并带有协变量执行历史预测时,历史预测时间索引生成未考虑协变量的 bug。 #2329Dennis Bader 贡献。

  • 修复了 quantile_loss 中的一个 bug,该 bug 导致损失在所有样本上计算,而不仅仅是在预测分位数上计算。 #2284Dennis Bader 贡献。

  • 修复了部分用户在导入 LightGBMModel 时遇到的分段错误。 #2304Dennis Bader 贡献。

  • 修复了调用 historical_forecasts() 时由于 _with_sanity_checks 装饰器导致的类型提示警告“Unexpected argument”。类型提示现在已正确配置,可接受任何输入参数并返回执行完整性检查的方法的输出类型。 #2286Dennis Bader 贡献。

对于库的开发者:

  • 通过为 nbsphinx 添加新依赖项 lxml_html_clean,修复了文档构建失败的问题。 #2303Dennis Bader 贡献。

  • black 从 24.1.1 升级到 24.3.0。 #2308Dennis Bader 贡献。

  • codecov-action 从 v2 升级到 v4,并添加 codecov token 作为仓库密钥,用于 CI 流水线中的 codecov 上传认证。 #2309#2312Dennis Bader 贡献。

  • 改进了 linting,从 flake8 切换到 Ruff。 #2323Jirka Borovec 贡献。

0.28.0 (2024-03-05)

对于库的用户:

改进

  • GlobalForecastingModel 的改进

    • 🚀🚀🚀 所有全局模型(回归模型和 torch 模型)现在都支持使用模型创建参数 output_chunk_shift 进行偏移预测。这将把训练和预测的输出块向未来偏移 output_chunk_shift 个时间步。 #2176Dennis Bader 贡献。

  • TimeSeries 的改进, #2196Dennis Bader 贡献。

    • 🚀🚀🚀 大幅提升了多个 TimeSeries 方法的性能,从而提高了整个 Darts 库的效率。对于使用“常规”频率(例如每日、每小时等)索引的序列,创建时间快了 2 倍;对于使用“特殊”频率(例如“W-MON”等)索引的序列,创建时间快了 100 倍以上。影响以下方面:

      • 所有 TimeSeries 创建方法

      • 进一步提高了使用整数和 Timestamps 进行切片的性能

      • 通过在整个 DataFrame 上执行部分繁重计算,而不是在组级别上迭代执行,进一步提高了 from_group_dataframe() 的性能。

    • 使用参数 drop_group_cols 调用 TimeSeries.from_group_dataframe() 时,添加了排除某些 group_cols 被添加为静态协变量的选项。

  • 🚀 新的全局基准模型,使用固定的输入和输出块进行预测。这支持单变量、多元、单目标和多目标序列预测、一次性或自回归/移动预测、优化历史预测、批量预测、数据集预测等。 #2261Dennis Bader 贡献。

    • GlobalNaiveAggregate:对每个目标组件在最后 input_chunk_length 个点上计算一个聚合值(使用自定义或内置的 torch 函数),并将这些值重复 output_chunk_length 次进行预测。根据参数不同,此模型可以等同于 NaiveMeanNaiveMovingAverage

    • GlobalNaiveDrift:获取每个目标组件在最后 input_chunk_length 个点上的斜率,并将趋势投影到接下来的 output_chunk_length 个点上进行预测。根据参数不同,此模型可以等同于 NaiveDrift

    • GlobalNaiveSeasonal:获取目标 series 结束前第 input_chunk_length 个点处的目标组件值,并将这些值重复 output_chunk_length 次进行预测。根据参数不同,此模型可以等同于 NaiveSeasonal

  • TorchForecastingModel 的改进

    • 添加了对额外 lr 调度器配置参数的支持,以提供更多控制(“interval”、“frequency”、“monitor”、“strict”、“name”)。 #2218Dennis Bader 贡献。

  • RegressionModel 的改进, #2246Antoine Madrona 贡献。

    • 添加了 get_estimator() 方法来访问底层估计器。

    • 添加了属性 lagged_label_names 来标识每个估计器的预测步长和组件。

    • 更新了 get_multioutout_estimator() 的文档字符串。

  • 其他改进

    • WindowTransformerwindow_transform 添加了参数 keep_names,用于指示是否保留原始组件名称。 #2207Antoine Madrona 贡献。

    • 添加了新的辅助函数 darts.utils.utils.n_steps_between(),用于高效计算给定频率下两点之间的时间步长(周期)数。通过避免使用 pd.date_range() 提高了回归模型制表(tabularization)的效率。 #2176Dennis Bader 贡献。

    • 🔴 将 ForecastingModel.gridsearch()start 的默认值从 0.5 更改为 None,使其与 historical_forecasts 和其他方法保持一致。 #2243Thomas Kientz 贡献。

    • ARIMA 文档改进:明确了 statsmodels 中可用的 pdPDtrend 高级选项。添加了更多关于参数行为的解释。 #2142MarcBresson 贡献。

修复

  • 修复了在使用 RegressionModellags=None、带有部分 lags_*covariates 以及协变量在第一个可预测时间步之后或同时开始时,滞后未从正确索引中提取的 bug。 #2176Dennis Bader 贡献。

  • 修复了在带有层级的 TimeSeries 上调用 window_transform 时发生的 bug。现在层级仅在应用于所有组件的单个变换中保留,否则将被移除。 #2207Antoine Madrona 贡献。

  • 修复了概率性 LinearRegressionModel.fit() 中的一个 bug,该 bug 导致 model 属性未指向所有底层估计器。 #2205Antoine Madrona 贡献。

  • RegressionEsembleModel 中,当 regression_model 使用 multi_models=False 创建时(不支持),现在会引发错误。 #2205Antoine Madrona 贡献。

  • 修复了 coefficient_of_variation()intersect=True 时,系数未在交集上计算的 bug。 #2202Antoine Madrona 贡献。

  • 修复了 gridsearch()use_fitted_values=True 时,模型未正确实例化以进行完整性检查的 bug。 #2222Antoine Madrona 贡献。

  • 修复了 TimeSeries.append/prepend_values() 中的一个 bug,该 bug 导致组件名称和层级被丢弃。 #2237Antoine Madrona 贡献。

  • 修复了 get_multioutput_estimator() 中的一个 bug,该 bug 导致估计器的索引计算不正确。 #2246Antoine Madrona 贡献。

  • 🔴 修复了 datetime_attribute_timeseries() 中的一个 bug,该 bug 导致 1-indexed 属性未正确处理。此外,现在对所有生成的编码强制使用 0-indexing。 #2242Antoine Madrona 贡献。

依赖项

  • 移除了 PyTorch Lightning 的版本上限(<=v2.1.2)。 #2251Dennis Bader 贡献。

对于库的开发者:

  • 使用 pre-commit autoupdate 将 pre-commit hooks 更新到最新版本。将 pyupgrade pre-commit hook 参数更改为 --py38-plus#2228MarcBresson 贡献。

  • 将开发依赖升级到最新版本。 #2248Dennis Bader 贡献。

    • black[jupyter]:从 22.3.0 到 24.1.1

    • flake8:从 4.0.1 到 7.0.0

    • isort:从 5.11.5 到 5.13.2

    • pyupgrade:从 2.31.0 到 v3.15.0

0.27.2 (2024-01-21)

对于库的用户:

改进

  • 添加了 darts.utils.statistics.plot_ccf,可用于绘制时间序列(例如目标序列)与另一个时间序列(例如协变量序列)的滞后值之间的互相关。 #2122Dennis Bader 贡献。

  • TimeSeries 的改进:改进了使用切片或 pandas DatetimeIndex 作为 __getitem__ 的键时的时间序列频率推断。 #2152DavidKleindienst 贡献。

修复

  • 修复了在使用 TorchForecastingModel 且带有 use_reversible_instance_norm=True 并在预测时 n > output_chunk_length 的 bug。输入被多次归一化。 #2160FourierMourier 贡献。

对于库的开发者:

0.27.1 (2023-12-10)

对于库的用户:

改进

  • 🔴 添加了 CustomRNNModuleCustomBlockRNNModule,用于定义可与 RNNModelBlockRNNModel 一起使用的自定义 RNN 模块。自定义 model 现在必须是这些自定义模块的子类。 #2088Dennis Bader 贡献。

修复

  • 修复了历史预测中的一个 bug,该 bug 导致某些 fit/predict_kwargs 未传递给底层模型的 fit/predict 方法。 #2103Dennis Bader 贡献。

  • 修复了尝试使用 PyTorch Lightning v<2.0.0 创建 TorchForecastingModel 时发生的导入错误。 #2087Eschibli 贡献。

  • 修复了使用自定义 model 创建 RNNModel 时发生的 bug。 #2088Dennis Bader 贡献。

对于库的开发者:

  • 添加了文件夹 docs/generated_api,用于定义生成文档所需的自定义 .rst 文件。 #2115Dennis Bader 贡献。

0.27.0 (2023-11-18)

对于库的用户:

改进

  • TorchForecastingModel 的改进

    • 🚀🚀 我们优化了预训练 TorchForecastingModelhistorical_forecasts() 方法,运行速度比之前快了多达 20 倍(在调整批量大小时甚至更快)! #2013Dennis Bader 贡献。

    • 添加了回调 darts.utils.callbacks.TFMProgressBar,用于自定义在哪些模型阶段显示进度条。 #2020Dennis Bader 贡献。

    • 所有 InferenceDataset 现在都支持使用参数 stridebounds 进行跨步预测。这些数据集可用于 TorchForecastingModel.predict_from_dataset()#2013Dennis Bader 贡献。

  • RegressionModel 的改进

    • 新的 RegressionModels 示例笔记本,解释了诸如(组件特定)滞后、output_chunk_lengthmulti_models 的关系、多元支持等功能。 #2039Antoine Madrona 贡献。

    • XGBModel 现在利用 XGBoost 在 2.0.0 版本中发布的本地分位数回归支持,以改进概率预测。 #2051Dennis Bader 贡献。

  • LocalForecastingModel 的改进

    • ExponentialSmoothing 添加了可选的关键字参数字典 kwargs,该字典将传递给底层 statsmodels.tsa.holtwinters.ExponentialSmoothing 模型的构造函数。 #2059Antoine Madrona 贡献。

  • 一般模型改进

    • historical_forecasts()backtest()gridsearch() 添加了新参数 fit_kwargspredict_kwargs,这些参数将传递给模型的 fit() 和/或 predict 方法。例如,您现在可以根据模型支持设置批量大小、静态验证序列等。 #2050Antoine Madrona 贡献。

    • 为了透明起见,当使用历史协变量(且 n >= output_chunk_length)执行自回归预测时,我们会发出一个(可移除的)警告,告知用户将访问历史协变量的未来值。 #2049Antoine Madrona 贡献。

  • 其他改进

    • 在生成/计算节假日和日期时间属性之前,添加了通过参数 tz 进行时间索引时区转换的支持。此支持已添加到所有 Time Axis Encoders、独立编码器和预测模型的 add_encoders、时间序列生成 utils 函数 holidays_timeseries()datetime_attribute_timeseries(),以及 TimeSeries 方法 add_datetime_attribute()add_holidays()#2054Dennis Bader 贡献。

    • 添加了新的数据转换器:MIDAS,它使用混合数据采样将高频 TimeSeries 转换为低频(并返回)。 #1820Boyd BierstekerAntoine MadronaDennis Bader 贡献。

    • 添加了新的数据集 ElectricityConsumptionZurichDataset:该数据集包含瑞士苏黎世家庭从 2015 年至 2022 年不同电网级别的用电量。我们还添加了苏黎世的天气测量数据,可作为建模的协变量。 #2039Antoine MadronaDennis Bader 贡献。

    • 修改了示例笔记本,以便正确应用数据转换器并避免前瞻偏差。 #2020Samriddhi Singh 贡献。

修复

  • 修复了调用 historical_forecasts()overlap_end=False 时未生成最后一个可能预测的 bug。 #2013Dennis Bader 贡献。

  • 修复了为使用不同组件特定滞后训练的 RegressionModel 调用优化 historical_forecasts() 时发生的 bug。 #2040Antoine Madrona 贡献。

  • 修复了在使用编码器与 RegressionModel 以及具有非均匀间隔频率(例如 Month Begin)的序列时发生的 bug。当试图用 pd.Timedelta 除以模糊频率时,这在滞后数据创建期间引发了错误。 #2034Antoine Madrona 贡献。

  • 修复了加载使用非 float64 精度训练的 TorchForecastingModel 权重时发生的 bug。 #2046Freddie Hsin-Fu Huang 贡献。

  • 修复了 Transfer learning 示例笔记本中指向三个数据集公共托管版本的损坏链接。 #2067Antoine Madrona 贡献。

  • 修复了在多元序列上使用带有协变量且 normalize=TrueNLinearModel 时发生的 bug。 #2072Antoine Madrona 贡献。

  • 修复了在多元序列上使用组件间共享的静态协变量且 use_static_covariates=TrueDLinearModelNLinearModel 时发生的 bug。 #2070Antoine Madrona 贡献。

对于库的开发者:

无变更。

0.26.0 (2023-09-16)

对于库的用户:

改进

  • RegressionModel 的改进, #1962Antoine Madrona 贡献。

    • 🚀🚀 所有模型现在都支持对目标、历史和未来协变量序列使用组件/列特定滞后。

  • TorchForecastingModel 的改进

    • 🚀 添加了 RINorm (Reversible Instance Norm) 作为除 RNNModel 外所有模型的输入归一化选项。通过模型创建参数 use_reversible_instance_norm 激活它。 #1969Dennis Bader 贡献。

    • 🔴 根据模型架构师的建议,为 TiDEModel 添加了带参数 temporal_width_past 的历史协变量特征投影。参数 temporal_width 已重命名为 temporal_width_future。此外,添加了使用 temporal_width_past/future=0 绕过特征投影的选项。 #1993Dennis Bader 贡献。

  • EnsembleModel 的改进, #1815Antoine MadronaDennis Bader 贡献。

    • 🔴 将模型构造函数参数 models 重命名为 forecasting_models

    • 🚀🚀 添加了对预训练 GlobalForecastingModel 作为 forecasting_models 的支持,以避免在集成时重新训练。这要求所有模型都是预训练的全局模型。

    • 🚀 添加了使用历史预测而非直接(自回归)预测生成 forecasting_model 预测(用于训练集成模型)的支持。通过在模型创建时设置 train_using_historical_forecasts=True 启用此功能。

    • 添加了集成模型示例笔记本。

  • 历史预测、回测和网格搜索的改进, #1866Antoine Madrona 贡献。

    • 添加了对负数 start 值的支持,以便从目标序列的末尾开始相对地启动历史预测。

    • 添加了新参数 start_format,允许将整数 start 作为使用 pd.RangeIndex 索引的 series 的索引位置或索引值/标签使用。

    • 添加了对 TimeSeries 支持以负整数开头的 RangeIndex

  • 其他改进

    • 减小了 Darts docker 镜像 unit8/darts:latest 的大小,并包含了所有可选模型以及开发要求。 #1878Alex Colpitts 贡献。

    • 在所有模型的 docstring 中添加了简短示例,包括协变量使用和一些模型特定参数。 #1956Antoine Madrona 贡献。

    • 添加了方法 TimeSeries.cumsum(),用于获取时间序列沿时间轴的累积和。 #1988Eliot Zubkoff 贡献。

修复

  • 修复了在使用 df.columns.name != None 的 pandas.DataFrame 时,TimeSeries.from_dataframe() 中的一个 bug。 #1938Antoine Madrona 贡献。

  • 修复了在预测模型只有协变量滞后时,RegressionEnsembleModel.extreme_lags 中的一个 bug。 #1942Antoine Madrona 贡献。

  • 修复了在 GPU 上使用 TFTModel 时,TFTExplainer 中的一个 bug。 #1949Dennis Bader 贡献。

  • 修复了 TorchForecastingModel.load_weights() 中的一个 bug,该 bug 在从有效架构加载权重时引发错误。 #1952Antoine Madrona 贡献。

  • 修复了 NLinearModel 中的一个 bug,该 bug 导致 normalize=True 和历史协变量不能同时使用。 #1873Eliot Zubkoff 贡献。

  • 当包含至少一个 LocalForecastingModelEnsembleModel 在调用 historical_forecasts 时设置了 retrain=False,现在会引发错误。 #1815Antoine Madrona 贡献。

  • 🔴 放弃了在 add_encoders 的“自定义”编码器中使用 lambda 函数的支持,转而使用命名函数,以确保模型可以导出。 #1957Antoine Madrona 贡献。

对于库的开发者:

改进

  • 重构了所有测试,使用 pytest 代替 unittest。 #1950Dennis Bader 贡献。

0.25.0 (2023-08-04)

对于库的用户:

安装

  • 🔴 从 PyPI 包(dartsu8dartsu8darts[torch])和 conda-forge 包(u8dartsu8darts-torch)中移除了 Prophet、LightGBM 和 CatBoost 依赖项,以避免部分用户遇到的安装问题(在 Apple M1/M2 设备上的安装等)。 #1589Julien HerzenDennis Bader 贡献。

    • 您仍然可以通过按照我们的 安装指南 中描述的方式安装所需的包来支持这些模型。

    • 包含所有依赖项的 Darts 包仍然可以通过 PyPI 包 u8darts[all] 或 conda-forge 包 u8darts-all 进行安装。

    • 添加了新的 PyPI 版本 u8darts[notorch] 和 conda-forge 版本 u8darts-notorch,它们等同于旧的 u8darts 安装(除神经网络外的所有依赖项)。

  • 🔴 移除对 Python 3.7 的支持。 #1864Dennis Bader 贡献。

改进

  • 一般模型改进

    • 🚀🚀 通过向量化预测,优化了 RegressionModelretrain=Falseforecast_horizon <= output_chunk_length 时的 historical_forecasts() 方法。这可以比之前快多达 700 倍! #1885Antoine Madrona 贡献。

    • 提高了所有模型的 historical_forecasts()backtest() 方法的效率,显著减少了大量预测迭代和序列的处理时间。 #1801Dennis Bader 贡献。

    • 🚀🚀 添加了对使用似然函数(回归模型和 torch 模型)的概率模型直接预测似然参数的支持。调用 predict() 时设置 predict_likelihood_parameters=True#1811Antoine Madrona 贡献。

    • 🚀🚀 新的预测模型:TiDEModel,如 这篇论文 中提出。一个基于 MLP 的编码器-解码器模型,据称性能优于许多基于 Transformer 的架构。 #1727Alex Colpitts 贡献。

    • Prophet 现在支持条件季节性,并正确处理传递给 Prophet.add_seasonality() 和模型创建参数 add_seasonalities 的所有参数。 #1829Idan Shilon 贡献。

    • 添加了方法 generate_fit_predict_encodings(),用于生成训练和预测所需的编码(模型创建时的 add_encoders)。 #1925Dennis Bader 贡献。

    • 为所有非深度学习模型的 save()load() 函数添加了对 PathLike 的支持。 #1754Simon Sudrich 贡献。

    • 添加了模型属性 ForecastingModel.supports_multivariate,用于指示模型是否支持多元预测。 #1848Felix Divo 贡献。

  • EnsembleModel 的改进

    • 模型创建参数 forecasting_models 现在支持混合使用 LocalForecastingModelGlobalForecastingModel(由于本地模型,仅支持单个 TimeSeries 的训练/推理)。 #1745Antoine Madrona 贡献。

    • 即使 forecasting_models 支持不同的协变量类型,现在也可以使用未来和历史协变量。传递给 fit()/predict() 的协变量仅由支持它的模型使用。 #1745Antoine Madrona 贡献。

    • RegressionEnsembleModelNaiveEnsembleModel 可以生成概率预测,可以对概率 forecasting_models 进行采样来训练 regression_model,更新了文档(堆叠技术)。 #1692Antoine Madrona 贡献。

  • Explainability 模块的改进

    • 🚀🚀 新的预测模型解释器:用于 TFTModelTFTExplainer。您现在可以访问和可视化训练模型的特征重要性和自注意力。 #1392Sebastian CattesDennis Bader 贡献。

    • ShapeExplainer 添加了静态协变量支持。 #1803Anne de VriesDennis Bader 贡献。

  • 文档改进, #1904Dennis Bader 贡献。

    • 通过添加模型链接并将它们重新组织到模型类别中,使 README.md、协变量用户指南和预测模型 API 参考中的模型部分更加用户友好。

    • 添加了动态时间规整 (DTW) 模块并改进了其外观。

  • 其他改进

    • 改进了在使用 StaticCovariatesTransformersklearn.preprocessing.OneHotEncoder 时静态协变量的列命名。 #1863Anne de Vries 贡献。

    • extract_trend_and_seasonality() 添加了 MSTL (使用 LOESS 进行多季节性趋势分解) 作为 method 选项。 #1879Alex Colpitts 贡献。

    • TorchForecastingModel 添加了 RINorm (可逆实例归一化) 作为新的输入归一化选项。目前只有 TiDEModel 通过模型创建参数 use_reversible_instance_norm 支持此功能。 #1865Alex Colpitts 贡献。

    • TimeSeries.plot() 的改进:现在通过参数 ax 正确支持自定义轴。轴现在作为下游任务的返回值。 #1916Dennis Bader 贡献。

修复

  • 修复了在提供标签前缀时,TimeSeries.plot() 未考虑原始组件名称的问题。 #1783Simon Sudrich 贡献。

  • 修复了在模型创建时使用类似数组的对象时 ForecastingModel 的字符串表示问题。 #1749Antoine Madrona 贡献。

  • 修复了 TorchForecastingModel.load_from_checkpoint() 未正确加载损失函数和度量的问题。 #1759Antoine Madrona 贡献。

  • 修复了加载使用编码器或似然函数训练的 TorchForecastingModel 权重时发生的 bug。 #1744Antoine Madrona 贡献。

  • 修复了在使用 ShapExplainer 时带有选定的 target_components 的 bug。 #1803Dennis Bader 贡献。

  • 修复了 TimeSeries.__getitem__() 在使用 start != 0freq != 1 的 RangeIndex 序列时的 bug。 #1868Dennis Bader 贡献。

  • 修复了 DTWAlignment.plot_alignment() 在绘制带有 RangeIndex 的序列对齐图时未正确绘制的问题。 #1880Ahmet ZamanisDennis Bader 贡献。

  • 修复了在调用 ARIMA.predict()num_samples > 1(概率预测)时的一个问题,该问题导致模拟的起始点未锚定到目标序列的末尾。 #1893Dennis Bader 贡献。

  • 修复了在使用 TFTModel.predict()full_attention=True 时,注意力掩码未正确应用的问题。 #1392Dennis Bader 贡献。

对于库的开发者:

改进

  • 重构了 ForecastingModelExplainerExplainabilityResult,以简化新解释器的实现。 #1392Dennis Bader 贡献。

  • 调整了所有单元测试,使其能在 M1 设备上成功运行。 #1933Dennis Bader 贡献。

0.24.0 (2023-04-12)

对于库的用户:

改进

  • 一般模型改进

    • 新的基准预测模型 NaiveMovingAverage#1557Janek Fidor 贡献。

    • 来自 Nixtla statsforecasts 库的新模型 StatsForecastAutoCESStatsForecastAutoTheta,作为不支持协变量的本地预测模型。AutoTheta 支持概率预测。 #1476Boyd Biersteker 贡献。

    • StatsForecastAutoETS 添加了对未来协变量和概率预测的支持。 #1476Boyd Biersteker 贡献。

    • Prophet 添加了通过参数 growthcapfloor 实现逻辑增长的支持。 #1419David Kleindienst 贡献。

    • 改进了类似于 scikit-learn 模型的文件字符串/对象表示风格。 #1590Janek Fidor 贡献。

    • 🔴 将 MovingAverage 重命名为 MovingAverageFilter,以避免与新的 NaiveMovingAverage 模型混淆。 #1557Janek Fidor 贡献。

  • RegressionModel 的改进

    • 优化了 fit/predict 集的滞后数据创建,实现了显著加速。 #1399Matt Bilton 贡献。

    • LightGBMModel 添加了对分类的历史/未来/静态协变量的支持,使用模型创建参数 categorical_*_covariates#1585Rijk van der Meulen 贡献。

    • 添加了滞后特征名称以提高可解释性;可通过模型属性 lagged_feature_names 访问。 #1679Antoine Madrona 贡献。

    • 🔴 所有模型新增 use_static_covariates 选项:当设置为 True(默认)时,模型在拟合时如果静态协变量可用,则会使用它们,并强制训练或预测所用的所有目标 series 具有相同的静态协变量形状;当设置为 False 时,模型将忽略静态协变量。 #1700Dennis 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

    • 🔴 TFTModelDLinearModelNLinearModel 的新选项 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 函数未正确处理的问题;改进了对 starttrain_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

  • 新的预测模型:DLinearModelNLinearModel,如本文所述。 #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_modelsave_model #1371 by Dennis Bader

  • 对编码器的改进:通过在模型创建时使用 add_encoders,为所有支持协变量的模型添加了对编码器的支持。编码器现在可以为所有模型生成正确的最小所需协变量时间跨度。 #1338 by Dennis Bader

  • darts.datasets 中新增了数据集(ILINetDatasetExchangeRateDatasetTrafficDatasetWeatherDataset#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

修复

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

  • ForecastingModelhistorical_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

修复

0.21.0 (2022-08-12)

库的用户:

改进

  • 新模型:Catboost,包括 quantilepoissongaussian 似然支持。 #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

  • 修复了 RNNModelresiduals 的一个问题。 #1066 by Julien Herzen

0.20.0 (2022-06-22)

库的用户:

改进

修复

库的开发者:

修复

0.19.0 (2022-04-13)

库的用户:

改进

修复

0.18.0 (2022-03-22)

库的用户:

改进

  • LinearRegressionModelLightGBMModel 现在可以是概率性的,支持分位数和泊松回归。 #831, #853 by Gian Wiher

  • 新模型:BATSTBATS,基于 tbats#816 by Julien Herzen

  • 处理基于 PyTorch 模型中的随机输入。 #833 by Julien Herzen

  • GPU 和 TPU 用户指南。 #826 by @gsamaras

  • 将训练和验证损失添加到 PyTorch Lightning 进度条中。 #825 by Dennis Bader

  • darts.utils.losses 中为基于 PyTorch 的模型提供了更多损失函数:SmapeLossMapeLossMAELoss#845 by Julien Herzen

  • 对季节分解的改进 #862。by Gian Wiher

  • gridsearch() 方法现在可以返回最佳度量分数。 #822 by @nlhkh

  • 移除了预测时多余的检查点加载。 #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.0pandas>=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 现在仅支持 pandas RangeIndex 作为整数索引,不再支持 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

修复

库的开发者:

0.16.1 (2022-01-24)

补丁版本

库的用户:

库的开发者:

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_testsdarts.utils.statistics.stationarity_test_adfdarts.utils.statistics.stationarity_test_kpss

  • 新的测试覆盖率徽章 🦄

修复:

  • 修复了不同 notebook 中的各种问题。

  • 修复了 Prophet 模型处理频率的一个错误。

  • 修复了当 n > output_chunk_lengthn 不是 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.float64np.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.DataFrame pred_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 模块的一些问题。

  • RegressionModelfit 函数中正确处理 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(包括 LinearRegressionModelRandomForest)的显著改进。这些模型现在支持在多个(可能多元)时间序列上进行训练。它们还支持 past_covariatesfuture_covariates。这使得在多个系列上拟合任意回归模型(例如来自 scikit-learn)比以往更容易,并可以基于目标的任意滞后项以及过去/未来协变量来预测目标系列的未来。这些模型的签名已更改:不再使用“exog”关键字参数,而是使用 past_covariatesfuture_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

  • 两个新的预测模型。

已更改

  • 🔴 移除了 `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

  • 新的 `FourTheta` 预测模型#123#156

  • TimeSeries 的 `map()` 方法#163#166

  • 进一步改进了回测功能#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"])
    

修复

  • 解决了 TorchForecastingModel.predict(n) 在 n=1 时抛出错误的问题。#108

  • 修复了 MASE 指标#129

  • Bug 修复 ForecastingModel.backtest:可以绕过健全性检查#189

  • 如果未提供 `forecast_horizon`,`ForecastingModel.backtest()` 会失败。#186

对于库的开发者

已添加

  • 使用 Gradle 构建文档、docker 镜像、运行测试等#112#127#159

  • 将 M4 竞赛基准测试和 notebook 添加到示例中#138

  • 测试覆盖率检查#141

已更改

  • 现在固定了依赖项的版本#173

  • 工作流:测试在 Pull Request 时触发#165

修复

  • 在所有生成 TimeSeries 的函数中将 `freq` 参数传递给 `TimeSeries` 构造函数#157

更早的版本

完整更新日志