darts 是一个功能强大的 Python 库,专为简化时间序列的分析、建模与预测任务而设计。它提供了统一且简洁的高级API,将统计模型(如 ARIMA)、经典机器学习模型以及前沿的深度学习模型(如 RNN、Transformer、N-BEATS、TCN)集成在一个框架内,并内置了丰富的时间序列专用工具(如窗口生成、协变量管理、回测与评估)。无论您是刚接触时序分析还是经验丰富的数据科学家,darts 都能显著提升工作效率。
核心设计理念
darts 的设计目标是让复杂的时间序列预测变得像使用 scikit-learn 一样直观简单,同时让构建和训练深度学习时序模型的过程更加易于上手。
安装指南
安装基础库:
pip install darts
若需使用深度学习模型(基于 PyTorch),请安装完整版本:
pip install darts[u]
主要应用场景
- 单/多步预测:使用 ARIMA、RNN、Transformer、N-BEATS 等多种模型对未来值进行预测。
- 多元时间序列建模:支持处理包含多个变量的时序数据,并管理复杂的协变量与滞后特征。
- 模型回测与评估:内置便捷的回测、滚动预测、交叉验证流程及多种误差评估指标。
- 异常检测:基于预测残差分析或专门方法进行时间序列的异常值识别。
- 数据预处理:提供插值、缩放、缺失值填补、时间对齐等基础处理操作。
- 深度学习应用:内置基于 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 的模型分为几大类,均提供 fit 和 predict 的统一接口:
- 统计模型:如 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 都能提供一套稳定、灵活且高效的工具链。
