找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2019

积分

0

好友

285

主题
发表于 2025-12-24 16:12:33 | 查看: 32| 回复: 0

darts 是一个功能强大的 Python 库,专为简化时间序列的分析、建模与预测任务而设计。它提供了统一且简洁的高级API,将统计模型(如 ARIMA)、经典机器学习模型以及前沿的深度学习模型(如 RNN、Transformer、N-BEATS、TCN)集成在一个框架内,并内置了丰富的时间序列专用工具(如窗口生成、协变量管理、回测与评估)。无论您是刚接触时序分析还是经验丰富的数据科学家,darts 都能显著提升工作效率。

核心设计理念

darts 的设计目标是让复杂的时间序列预测变得像使用 scikit-learn 一样直观简单,同时让构建和训练深度学习时序模型的过程更加易于上手。

安装指南

安装基础库:

pip install darts

若需使用深度学习模型(基于 PyTorch),请安装完整版本:

pip install darts[u]

主要应用场景

  1. 单/多步预测:使用 ARIMA、RNN、Transformer、N-BEATS 等多种模型对未来值进行预测。
  2. 多元时间序列建模:支持处理包含多个变量的时序数据,并管理复杂的协变量与滞后特征。
  3. 模型回测与评估:内置便捷的回测、滚动预测、交叉验证流程及多种误差评估指标。
  4. 异常检测:基于预测残差分析或专门方法进行时间序列的异常值识别。
  5. 数据预处理:提供插值、缩放、缺失值填补、时间对齐等基础处理操作。
  6. 深度学习应用:内置基于 PyTorch 的高性能实现,包括 RNNModel、TCNModel、NBEATSModel、TransformerModel、TFTModel(时序融合Transformer)等,兼顾性能与易用性。

核心概念解析

1. TimeSeries 对象(核心数据结构)

在 darts 中,所有模型的输入与输出均为 TimeSeries 对象。它封装了时间索引(DatetimeIndex 或 RangeIndex)和对应的数据值(单列或多列)。创建示例如下:

from darts import TimeSeries
import pandas as pd

df = pd.read_csv("data.csv")
series = TimeSeries.from_dataframe(df, "date", "value")

2. 预测模型(Models)

darts 的模型分为几大类,均提供 fitpredict 的统一接口:

  • 统计模型:如 ARIMA、指数平滑、Theta 方法。
  • 机器学习模型:基于回归的 RegressionModel
  • 深度学习模型:如 N-BEATS, RNN, TFT 等。
  • 集成模型EnsembleModel 用于组合多个模型的预测结果。

基本使用范式:

model = SomeModel(...)
model.fit(series)
forecast = model.predict(n)

3. 协变量(Covariates)

协变量是指可能影响目标序列的外部变量,如天气、节假日、价格等。darts 清晰地支持三类协变量:

  • past_covariates: 历史已知的数据。
  • future_covariates: 未来已知的数据(如节假日日历)。
  • static_covariates: 不随时间变化的静态特征。

4. 回测(Backtesting)

darts 内置了强大的回测工具,可自动化执行滑动窗口评估,便于验证模型在历史数据上的稳健性。

from darts.metrics import mape

model.backtest(
    series,
    forecast_horizon=12,
    metric=mape
)

5. 误差指标(Metrics)

支持 MAE、RMSE、MAPE、SMAPE、DTW 距离、R2 score 等多种评估指标,全面衡量预测精度。


实战代码示例

示例1:加载数据并创建TimeSeries

from darts import TimeSeries
import pandas as pd

df = pd.read_csv("sales.csv")
series = TimeSeries.from_dataframe(df, "date", "sales")

示例2:使用ARIMA进行简单预测

from darts.models import ARIMA

model = ARIMA()
model.fit(series)
forecast = model.predict(12)
forecast.plot(label="forecast")

示例3:使用深度学习模型N-BEATS

from darts.models import NBEATSModel

model = NBEATSModel(
    input_chunk_length=24,
    output_chunk_length=12,
    n_epochs=50,
)
model.fit(series)
prediction = model.predict(12)

示例4:结合未来协变量使用RNN模型

from darts.models import RNNModel

model = RNNModel(
    model="LSTM",
    input_chunk_length=30,
    output_chunk_length=7
)
model.fit(series, future_covariates=weather_series)
forecast = model.predict(7, future_covariates=weather_series)

示例5:执行回测评估模型性能

from darts.metrics import smape

error = model.backtest(
    series,
    forecast_horizon=12,
    metric=smape,
)
print("平均SMAPE误差:", error)

常用函数速查

  • TimeSeries.from_dataframe(df, time_col, value_cols): 从Pandas DataFrame创建时间序列对象。
  • `model.fit(series, covariates)`**: 使用目标序列(及可选协变量)训练模型。
  • `model.predict(n, covariates)**: 预测未来 n 个时间步,返回TimeSeries` 对象。
  • model.backtest(series, forecast_horizon, metric): 在指定序列上进行滑动窗口回测,返回平均误差值。
  • TimeSeries.plot(): 快速可视化时间序列数据。

总结

darts 作为一个现代化的时间序列分析框架,具备以下显著优势:

  • 统一API:数十种模型可无缝切换与对比。
  • 深度集成:内置基于 PyTorch 的先进深度学习模型,开箱即用。
  • 功能全面:完整支持协变量、多元序列、窗口化操作等复杂场景。
  • 评估强大:提供专业的回测工具与丰富的评估指标。
  • 流程简化TimeSeries 核心数据结构贯穿始终,极大简化了数据处理流程。
  • 扩展性强:既能用于快速原型验证,也具备支撑生产级应用的能力。

无论是金融风控、销量预测、能源负荷分析还是物联网数据分析,darts 都能提供一套稳定、灵活且高效的工具链。

darts时间序列框架架构示意图




上一篇:DDoS攻击原理与防御:拆解黑客攻击链条与防御思路
下一篇:LeetCode矩阵算法精讲:从旋转图像到岛屿数量,掌握二维数组核心技巧
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-11 18:02 , Processed in 0.274574 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表